pax_global_header00006660000000000000000000000064117777030330014522gustar00rootroot0000000000000052 comment=cc2d539412bbd8d3a0ed68e377b007db898790be nescc-1.3.4/000077500000000000000000000000001177770303300126225ustar00rootroot00000000000000nescc-1.3.4/COPYING000066400000000000000000000431271177770303300136640ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program 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 of the License, or (at your option) any later version. This program 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 this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. nescc-1.3.4/COPYRIGHT000066400000000000000000000070111177770303300141140ustar00rootroot00000000000000The nesC compiler is derived from RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Copyright (C) 2002-2006 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -- The Java classes that provide support for reading nesC's XML output are Copyright (c) 2004-2006 Intel Corporation These files are provided under a dual BSD/GPLv2 license. When using or redistributing these files, you may do so under either license. GPL LICENSE SUMMARY Copyright(c) 2004-2005 Intel Corporation. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. The full GNU General Public License is included in this distribution in the file called LICENSE.GPL. BSD LICENSE Copyright(c) 2004-2005 Intel Corporation. All rights reserved. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Intel Corporation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. nescc-1.3.4/INSTALL000066400000000000000000000020571177770303300136570ustar00rootroot00000000000000To build nesC: in this directory ./configure [--prefix=/lib/ncc/editor-modes//readme.txt To use nesC with TinyOS, you need to install the ncc, mig, etc TinyOS frontends for nesC. These are found in tinyos-1.x/tools/src/ncc (for TinyOS 1.x) and in tinyos-2.x/tools (for TinyOS 2.x). Please follow the installation directions you find there. To use nesC with the Atmel AVR processors or the TI MSP processors you need the avr-gcc and msp430-gcc packages, and the corresponding GNU binutils (avr-binutils and msp430-binutils respectively). You can use the patched versions of these binutils that allow $ in symbol names, available from http://www.tinyos.net/dist-2.0.0 (check http://www.tinyos.net/download.html to see if newer versions are available), or you can pass the -fnesc-separator=__ option to nescc (ncc if using TinyOS) to use __ rather than $ in generated code. See the nescc man page for details. nescc-1.3.4/Makefile.am000066400000000000000000000011251177770303300146550ustar00rootroot00000000000000AUTOMAKE_OPTIONS = foreign SUBDIRS = libcpp libiberty src doc tools # gcc directories aren't automake-friendly DIST_SUBDIRS = src doc tools gcc_SUBDIRS = include libcpp libiberty src: libcpp libiberty EXTRA_DIST = \ COPYING \ COPYRIGHT \ INSTALL \ README \ config-aux/acx.m4 \ config-aux/codeset.m4 \ config-aux/gettext-sister.m4 \ config-aux/move-if-change \ config-aux/no-executables.m4 \ config-aux/warnings.m4 dist-hook: for i in $(gcc_SUBDIRS); do \ (cd $$i; make distclean); \ tar cf - -X $$i/.distignore $$i | tar xf - -C $(distdir); \ done nescc-1.3.4/Makefile.in000066400000000000000000000522361177770303300146770ustar00rootroot00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/configure COPYING INSTALL \ config-aux/config.guess config-aux/config.rpath \ config-aux/config.sub config-aux/depcomp config-aux/install-sh \ config-aux/missing config-aux/mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/config-aux/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(distdir)"; }; } am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EXEEXT = @EXEEXT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pathperl = @pathperl@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign SUBDIRS = libcpp libiberty src doc tools # gcc directories aren't automake-friendly DIST_SUBDIRS = src doc tools gcc_SUBDIRS = include libcpp libiberty EXTRA_DIST = \ COPYING \ COPYRIGHT \ INSTALL \ README \ config-aux/acx.m4 \ config-aux/codeset.m4 \ config-aux/gettext-sister.m4 \ config-aux/move-if-change \ config-aux/no-executables.m4 \ config-aux/warnings.m4 all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ dist-hook dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-generic distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am src: libcpp libiberty dist-hook: for i in $(gcc_SUBDIRS); do \ (cd $$i; make distclean); \ tar cf - -X $$i/.distignore $$i | tar xf - -C $(distdir); \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nescc-1.3.4/README000066400000000000000000000326061177770303300135110ustar00rootroot00000000000000This is version 1.3.4 of the nesC compiler. Installation instructions are in INSTALL. Changes in nesC 1.3.4 ===================== - support gcc 4.7.x (issue 3381025) - fix issues 3519555, 3473487, 3468269 Changes in nesC 1.3.3 ===================== - fixed mig when used with perl 5.12 (sourceforge bugs 3122329, 3066006) - work around potential gcc 4.6 behavior change (sourceforge bug 3153727) - support gcc's -H option (print #included file names) Changes in nesC 1.3.2 ===================== - changed Intel Open Source License files to dual BSD/GPL license - improved support for non-gcc targets: -fnesc-gccize flag, optionally identify "async" function in nescc output - bug fixes (sourceforge bugs 3013497, 3017203, 3019357 and others) - disable use of Apple-specific "blocks" C extension Changes in nesC 1.3.1 ===================== - updated reference manual for language changes since version 1.2.0 - support gcc's -include option when compiling a nesC application - bug fixes Changes in nesC 1.3.0 ===================== - C preprocessor is integrated into nesC, which should significantly speed up compilation (esp. on Windows) - support for the Deputy type-safety-for-C system (see deputy.cs.berkeley.edu). To use Deputy, you add type annotations to your nesC code, then compile with the -fnesc-deputy flag. A bunch of small changes to nesC support the use of deputy. Flags to nescc: -fnesc-deputy: use Deputy in this compilation. You need to have a version of Deputy customized for use with nesC installed for this to work. -fnesc-deputy-args: extra arguments to pass to Deputy. -fnesc-default-safe/-fnesc-default-unsafe: the default safety for C functions and nesC modules (with no option specified, -fnesc-default-unsafe is assumed) Type annotations: NONULL, COUNT(...), etc (see the Deputy-for-nesC documentation for full details), which are actually macros which expand to nesC attributes (@nonnull(), @count(...), etc. Using macros allows Deputy-annotated code to be used with earlier versions of nesC. Type annotations in nesdoc comments: to reduce clutter for non-Deputy users, Deputy's annotations can be placed within a nesdoc comment rather than in a function signature (which then looks like a regular C signature): /** ... @param 'int *@count(n) x' x is an array of n ints ... */ void f(int *x, int n); is the same as void f(int *@count(n) x, int n); Macros can be used in the comment, so the above could also be /** ... @param 'int *COUNT(n) x' x is an array of n ints ... */ void f(int *x, int n); where COUNT(expr) expands to @count(expr). - internal support (in nesc1) for Deputy based on @deputy_scope() and @macro("NAME") attributes, and a -fnesc-genprefix= option. - @macro() and -fnesc-genprerix= may be useful in other contexts too: if a nesC attribute declaration has an @macro() attribute: struct @myattr @macro("MYMACRO") { int x; char *y; }; then uses of @myattr in nesC source are output as calls to MYMACRO in nesC's intermediate C output. For instance int x @myattr(23, "fun"); becomes int x MYMACRO(23, "fun"); The -fnesc-genprefix= adds to the start of the generated C output, e.g., it could be a #define definition for MYMACRO, or a #include of a file with appropriate definitions. - wide strings in XML output now show up as arrays of bytes (and follow the target's byte-level representation of wide strings) - ability to process a C file through nesC (this provides support in C for external types, atomic statements and unique), as follows: nescc -x nesc .c This forces nescc to pass the C file .c through the nesC compiler (normally it would be sent to the regular C compiler), which will process the nesC extensions and then compile the generated C code with the regular C compiler (or whatever compiler was specified with -fnesc-gcc=...) - inside a module, you can now write void f(void) or void f() interchangeably Changes in nesC 1.2.9 ===================== - added uniqueN constant function to allocated N consecutive numbers - fix -fnesc-separator - bug fixes Changes in nesC 1.2.8a ====================== - bug fixes Changes in nesC 1.2.8 ===================== - -fnesc-cppdir option to save preprocessed output - -fnesc-separator option to change symbol separator from $ in generated code - little-endian bitfields now supported in network types (thanks to Matti Juhani Öhman for the approach and some of the code) - internal errors try to report current source location (can be helpful in tracking down problems, but only works for errors that occur during parsing) - updated vim mode from Cory Sharp (cory@moteiv.com) - bug fixes Changes in nesC 1.2.7a ====================== - nescc-diff removed (it was unsupported, ran only on AVR, and depends on guile being installed to work) Changes in nesC 1.2.7 ===================== - gcc's mode attribute support (this requires a new word_size specification in the env target) - bug fixes Changes in nesC 1.2.6 ===================== - external types now support bitfields (big-endian only - mixing bit-field endianness within a struct would be extremely confusing and/or tricky) - -conly option to just compile to C - better struct/union layout code, which requires a slightly more detailed target machine description (see src/machine.h) - #pragma statements are saved and dumped at the end of the generated C code (if you or your compiler uses #pragma, you'll probably have to move these somewhere else; however, this cannot be done without understanding of the pragma itself; hence the nesC compiler leaves this process to a user-supplied tool) - bug fixes Changes in nesC 1.2.5 ===================== - nescc-mig now generates C (ncg has supported C since 1.1.2) - add __builtin_offsetof keyword to make recent gcc's happy, and update the gcc-specific asm syntax to reflect recent gcc changes - allow types defined in interface files to be used immediately in generic interface arguments (e.g., interface Timer, where TMilli is defined in Timer.nc) - updates to automatic inlining - code should be slightly smaller - @spontaneous() attribute is automatically added to the __nesc_XXX functions used by the compiler - atomic optimisation (experimental): if you specify -fnesc-optimize-atomic, two optimisations are performed: o outermost atomics call __nesc_disable/enable_interrupt, which can assume that interrupts are initially enabled o "simple" atomic statements have no overhead (interrupts are not disabled) simple atomic statements are those: - with no accesses to shared state - or, at most one access to one byte of shared state - bug fixes Changes in nesC 1.2.4 ===================== - bug fixes Changes in nesC 1.2.3 ===================== - provide network type information in nesC dump output - bug fixes Changes in nesC 1.2.2 ===================== - nescc-wiring tool to check wiring constraints - see man page for details - python mig, ncg support - XML schema update (should now match nesC dump output) - Java code now made available in compiled form as nesc.jar (rather than in source form) - bug fixes Changes in nesC 1.2.1 ===================== - external types (nx_...) can now be passed as parameters and returned as results - updates to XML dump information to support nesdoc in particular, remember typedef names - bug fixes Changes in nesC 1.2 =================== - generic components and interfaces. See doc/user/generics-1.2.txt. nesdoc does not support generic components and interfaces (this should be supported in the next release). - configuration implementations and component specifications can now include type and constant declarations; configuration implementations can refer to these types and constants. These changes are described alongside the generic component changes, in doc/user/generics-1.2.txt. - attributes (Java 1.5-style). See doc/user/attributes.txt. - binary components. See doc/user/binary-components.txt. - external types, a revamp of nesC 1.1.3's network types. See doc/user/network-types.txt. - "includes" is deprecated - use #include instead; note that you must use #ifndef/#define/#endif for #include'd files in the usual C style. - macros in included files now work in ways that are similar to C (as long as you use #include instead of includes). - support for compiling task/post into an interface + wiring: this allows the scheduler to be implemented as a component. - return can be used in atomic statements (implicitly terminating the atomic statement). - the patched AVR assembler has been unbundled from nesC. - the ncc, mig and nesdoc scripts have been unbundled from nesC (they are now distributed with the other TinyOS tools). Changes in nesC 1.1.3 ===================== - network types: platform-independent types to support heterogeneous networking. See doc/network-types.txt. - support passing assembler options for nesC programs with -Wa, as usual w/ gcc - support -I- correctly (see gcc manual) - initialiser bug fix (some initialisers crashed nesC) Changes in nesC 1.1.2 ===================== - Misc bug fixes (in particular, work around latest-cygwin weirdness which causes file corruption) - Recognise the gcc noinline attribute and don't automatically inline such functions (patch contributed by Klaus Madsen, nesc@hjernemadsen.org) - Mac OS X support; avr-gcc not needed when compiling nesC - Support gcc's -I- idiom to prevent searching current dir for components, interfaces, etc. - 64-bit platform support: compile with -DLARGE_ADDRESSES, and edit the MEMSLICE1 constant in src/libcompat.regions.c to be the number of unused high-order bits on your platform - ncg supports C (note that there's no C mig support yet) Changes in nesC 1.1.1 ===================== - Support for platforms and sensorboards in directories other than tos/platforms and tos/sensorboards: a platform or sensorboard can be used if its directory is specified with an explicit -I directive (see doc/ncc.html for details). - support for Tython - support -Wparentheses (warnings on statements like 'if (var = value) ...', and other similar C pitfalls) - nesC editing modes for emacs, vim and kde (kate, kwrite, kdevelop): these are in tools/editor-modes, and get installed to /lib/ncc/editor-modes. Read the appropriate readme.txt file for installation directions - msp430 and env targets (env gets the machine specification from an environment variable and is intended to ease implementation of new platforms, see doc/envtarget.html for details) - new hwevent, atomic_hwevent attributes to tell nesC which functions are interrupt entry points (hwevent: interrupt entry point, invoked with interrupts enabled; atomic_hwevent: interrupt entry point, invoked with interrupts disabled) - these should ease porting to new platforms - new keywords (future use): abstract, component, extends, generic, new - A few small bug fixes Changes in nesC 1.1 =================== - Support for new language features: o atomic sections o compile-time data race detection o explicit marking of asynchronous (aka interrupt) code (async keyword on commands and events) o automatic combining of results of multiply-wired functions o initialisers now supported on module variables o uniqueCount() function to complement unique(), returning the number of uses of the latter (useful for dimensioning arrays...) - new nesC warning flags/changes: o -W[no-]unexpected-docstring is now -Wnesc-docstring, and defaults to off o -W[no-]nesc-fnptr: warn for uses of function pointers o -W[no-]nesc-data-race: turn on[off] compile-time data race detection o -W[no-]nesc-async: warn [bug in alpha: error] if asynchronous code calls synchronous code o -W[no-]nesc-combine: warn when multiply wired functions do not have a combining function defined on the result type. See tos.h for the the combining function definition for result_t o -Wnesc-all: same as -Wnesc-data-race -Wnesc-async -Wnesc-fnptr and -Wnesc-combine - The NESC preprocessor symbol is defined to XYZ, where X is the major version, Y the minor and Z the patchlevel. So nesc 1.1 defines NESC as 110 - Tool chain changes: o ncc has been split into two files: ncc and nescc TinyOS-specific code is in ncc, nescc is a "generic" nesC compiler (nescc does not automatically include tos.h, and does not automatically add the TinyOS directory structure to the search path) o the -fnesc-include= option includes a C file before compiling the requested component (used by ncc to include tos.h...) You can specify several -fnesc-include=... options o A hardware platform X can now more easily be added: - create directory .../tos/platforms/X - place a .platform file in .../tos/platforms/X. Look at existing .platform files for inspiration. o A sensor board Y can add directories to the search path if there is a .sensor file in the .../tos/sensorboards/Y directory (as with .platform, .sensor is just perl code so can modify the variables used by ncc to achieve whatever effect is necessary) o set-mote-id works for programs greater than 64K - New tool to extract (enum) constants from C code: ncg. Usage is similar to mig. - Debugging on mica supports with the Atmel JTAG ICE and the AvarICE project (at http://sourceforge.net/projects/avarice) - Some improved error messages, miscellaneous bug fixes nescc-1.3.4/aclocal.m4000066400000000000000000001034631177770303300144710ustar00rootroot00000000000000# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, [m4_warning([this file was generated for autoconf 2.68. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR nescc-1.3.4/config-aux/000077500000000000000000000000001177770303300146625ustar00rootroot00000000000000nescc-1.3.4/config-aux/acx.m4000066400000000000000000000461021177770303300157020ustar00rootroot00000000000000# Autoconf M4 include file defining utility macros for complex Canadian # cross builds. dnl #### dnl # _GCC_TOPLEV_NONCANONICAL_BUILD dnl # $build_alias or canonical $build if blank. dnl # Used when we would use $build_alias, but empty is not OK. AC_DEFUN([_GCC_TOPLEV_NONCANONICAL_BUILD], [AC_REQUIRE([AC_CANONICAL_BUILD]) []dnl case ${build_alias} in "") build_noncanonical=${build} ;; *) build_noncanonical=${build_alias} ;; esac ]) []dnl # _GCC_TOPLEV_NONCANONICAL_BUILD dnl #### dnl # _GCC_TOPLEV_NONCANONICAL_HOST dnl # $host_alias, or $build_noncanonical if blank. dnl # Used when we would use $host_alias, but empty is not OK. AC_DEFUN([_GCC_TOPLEV_NONCANONICAL_HOST], [AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_BUILD]) []dnl case ${host_alias} in "") host_noncanonical=${build_noncanonical} ;; *) host_noncanonical=${host_alias} ;; esac ]) []dnl # _GCC_TOPLEV_NONCANONICAL_HOST dnl #### dnl # _GCC_TOPLEV_NONCANONICAL_TARGET dnl # $target_alias or $host_noncanonical if blank. dnl # Used when we would use $target_alias, but empty is not OK. AC_DEFUN([_GCC_TOPLEV_NONCANONICAL_TARGET], [AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_HOST]) []dnl case ${target_alias} in "") target_noncanonical=${host_noncanonical} ;; *) target_noncanonical=${target_alias} ;; esac ]) []dnl # _GCC_TOPLEV_NONCANONICAL_TARGET dnl #### dnl # ACX_NONCANONICAL_BUILD dnl # Like underscored version, but AC_SUBST's. AC_DEFUN([ACX_NONCANONICAL_BUILD], [AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_BUILD]) []dnl AC_SUBST(build_noncanonical) ]) []dnl # ACX_NONCANONICAL_BUILD dnl #### dnl # ACX_NONCANONICAL_HOST dnl # Like underscored version, but AC_SUBST's. AC_DEFUN([ACX_NONCANONICAL_HOST], [AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_HOST]) []dnl AC_SUBST(host_noncanonical) ]) []dnl # ACX_NONCANONICAL_HOST dnl #### dnl # ACX_NONCANONICAL_TARGET dnl # Like underscored version, but AC_SUBST's. AC_DEFUN([ACX_NONCANONICAL_TARGET], [AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_TARGET]) []dnl AC_SUBST(target_noncanonical) ]) []dnl # ACX_NONCANONICAL_TARGET dnl #### dnl # GCC_TOPLEV_SUBDIRS dnl # GCC & friends build 'build', 'host', and 'target' tools. These must dnl # be separated into three well-known subdirectories of the build directory: dnl # build_subdir, host_subdir, and target_subdir. The values are determined dnl # here so that they can (theoretically) be changed in the future. They dnl # were previously reproduced across many different files. dnl # dnl # This logic really amounts to very little with autoconf 2.13; it will dnl # amount to a lot more with autoconf 2.5x. AC_DEFUN([GCC_TOPLEV_SUBDIRS], [AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_TARGET]) []dnl AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_BUILD]) []dnl # post-stage1 host modules use a different CC_FOR_BUILD so, in order to # have matching libraries, they should use host libraries: Makefile.tpl # arranges to pass --with-build-libsubdir=$(HOST_SUBDIR). # However, they still use the build modules, because the corresponding # host modules (e.g. bison) are only built for the host when bootstrap # finishes. So: # - build_subdir is where we find build modules, and never changes. # - build_libsubdir is where we find build libraries, and can be overridden. # Prefix 'build-' so this never conflicts with target_subdir. build_subdir="build-${build_noncanonical}" AC_ARG_WITH(build-libsubdir, [ --with-build-libsubdir=[DIR] Directory where to find libraries for build system], build_libsubdir="$withval", build_libsubdir="$build_subdir") # --srcdir=. covers the toplevel, while "test -d" covers the subdirectories if ( test $srcdir = . && test -d gcc ) \ || test -d $srcdir/../host-${host_noncanonical}; then host_subdir="host-${host_noncanonical}" else host_subdir=. fi # No prefix. target_subdir=${target_noncanonical} AC_SUBST([build_libsubdir]) []dnl AC_SUBST([build_subdir]) []dnl AC_SUBST([host_subdir]) []dnl AC_SUBST([target_subdir]) []dnl ]) []dnl # GCC_TOPLEV_SUBDIRS #### # _NCN_TOOL_PREFIXES: Some stuff that oughtta be done in AC_CANONICAL_SYSTEM # or AC_INIT. # These demand that AC_CANONICAL_SYSTEM be called beforehand. AC_DEFUN([_NCN_TOOL_PREFIXES], [ncn_tool_prefix= test -n "$host_alias" && ncn_tool_prefix=$host_alias- ncn_target_tool_prefix= test -n "$target_alias" && ncn_target_tool_prefix=$target_alias- ]) []dnl # _NCN_TOOL_PREFIXES #### # NCN_STRICT_CHECK_TOOLS(variable, progs-to-check-for,[value-if-not-found],[path]) # Like plain AC_CHECK_TOOLS, but require prefix if build!=host. AC_DEFUN([NCN_STRICT_CHECK_TOOLS], [AC_REQUIRE([_NCN_TOOL_PREFIXES]) []dnl AC_ARG_VAR([$1], [$1 for the host]) if test -n "[$]$1"; then ac_cv_prog_$1=[$]$1 elif test -n "$ac_cv_prog_$1"; then $1=$ac_cv_prog_$1 fi if test -n "$ac_cv_prog_$1"; then for ncn_progname in $2; do AC_CHECK_PROG([$1], [${ncn_progname}], [${ncn_progname}], , [$4]) done fi for ncn_progname in $2; do if test -n "$ncn_tool_prefix"; then AC_CHECK_PROG([$1], [${ncn_tool_prefix}${ncn_progname}], [${ncn_tool_prefix}${ncn_progname}], , [$4]) fi if test -z "$ac_cv_prog_$1" && test $build = $host ; then AC_CHECK_PROG([$1], [${ncn_progname}], [${ncn_progname}], , [$4]) fi test -n "$ac_cv_prog_$1" && break done if test -z "$ac_cv_prog_$1" ; then ifelse([$3],[], [set dummy $2 if test $build = $host ; then $1="[$]2" else $1="${ncn_tool_prefix}[$]2" fi], [$1="$3"]) fi ]) []dnl # NCN_STRICT_CHECK_TOOLS #### # NCN_STRICT_CHECK_TARGET_TOOLS(variable, progs-to-check-for,[value-if-not-found],[path]) # Like CVS Autoconf AC_CHECK_TARGET_TOOLS, but require prefix if build!=target. AC_DEFUN([NCN_STRICT_CHECK_TARGET_TOOLS], [AC_REQUIRE([_NCN_TOOL_PREFIXES]) []dnl AC_ARG_VAR([$1], patsubst([$1], [_FOR_TARGET$], [])[ for the target]) if test -n "[$]$1"; then ac_cv_prog_$1=[$]$1 elif test -n "$ac_cv_prog_$1"; then $1=$ac_cv_prog_$1 fi if test -n "$ac_cv_prog_$1"; then for ncn_progname in $2; do AC_CHECK_PROG([$1], [${ncn_progname}], [${ncn_progname}], , [$4]) done fi if test -z "$ac_cv_prog_$1" && test -n "$with_build_time_tools"; then for ncn_progname in $2; do AC_MSG_CHECKING([for ${ncn_progname} in $with_build_time_tools]) if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_$1=$with_build_time_tools/${ncn_progname} AC_MSG_RESULT(yes) break else AC_MSG_RESULT(no) fi done fi if test -z "$ac_cv_prog_$1"; then for ncn_progname in $2; do if test -n "$ncn_target_tool_prefix"; then AC_CHECK_PROG([$1], [${ncn_target_tool_prefix}${ncn_progname}], [${ncn_target_tool_prefix}${ncn_progname}], , [$4]) fi if test -z "$ac_cv_prog_$1" && test $build = $target ; then AC_CHECK_PROG([$1], [${ncn_progname}], [${ncn_progname}], , [$4]) fi test -n "$ac_cv_prog_$1" && break done fi if test -z "$ac_cv_prog_$1" ; then ifelse([$3],[], [set dummy $2 if test $build = $target ; then $1="[$]2" else $1="${ncn_target_tool_prefix}[$]2" fi], [$1="$3"]) else $1="$ac_cv_prog_$1" fi ]) []dnl # NCN_STRICT_CHECK_TARGET_TOOLS # Backported from Autoconf 2.5x; can go away when and if # we switch. Put the OS path separator in $PATH_SEPARATOR. AC_DEFUN([ACX_PATH_SEP], [ # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ]) AC_DEFUN([ACX_TOOL_DIRS], [ AC_REQUIRE([ACX_PATH_SEP]) if test "x$exec_prefix" = xNONE; then if test "x$prefix" = xNONE; then gcc_cv_tool_prefix=$ac_default_prefix else gcc_cv_tool_prefix=$prefix fi else gcc_cv_tool_prefix=$exec_prefix fi # If there is no compiler in the tree, use the PATH only. In any # case, if there is no compiler in the tree nobody should use # AS_FOR_TARGET and LD_FOR_TARGET. if test x$host = x$build && test -f $srcdir/gcc/BASE-VER; then gcc_version=`cat $srcdir/gcc/BASE-VER` gcc_cv_tool_dirs="$gcc_cv_tool_prefix/libexec/gcc/$target_noncanonical/$gcc_version$PATH_SEPARATOR" gcc_cv_tool_dirs="$gcc_cv_tool_dirs$gcc_cv_tool_prefix/libexec/gcc/$target_noncanonical$PATH_SEPARATOR" gcc_cv_tool_dirs="$gcc_cv_tool_dirs/usr/lib/gcc/$target_noncanonical/$gcc_version$PATH_SEPARATOR" gcc_cv_tool_dirs="$gcc_cv_tool_dirs/usr/lib/gcc/$target_noncanonical$PATH_SEPARATOR" gcc_cv_tool_dirs="$gcc_cv_tool_dirs$gcc_cv_tool_prefix/$target_noncanonical/bin/$target_noncanonical/$gcc_version$PATH_SEPARATOR" gcc_cv_tool_dirs="$gcc_cv_tool_dirs$gcc_cv_tool_prefix/$target_noncanonical/bin$PATH_SEPARATOR" else gcc_cv_tool_dirs= fi if test x$build = x$target && test -n "$md_exec_prefix"; then gcc_cv_tool_dirs="$gcc_cv_tool_dirs$md_exec_prefix$PATH_SEPARATOR" fi ]) []dnl # ACX_TOOL_DIRS # ACX_HAVE_GCC_FOR_TARGET # Check if the variable GCC_FOR_TARGET really points to a GCC binary. AC_DEFUN([ACX_HAVE_GCC_FOR_TARGET], [ cat > conftest.c << \EOF #ifdef __GNUC__ gcc_yay; #endif EOF if ($GCC_FOR_TARGET -E conftest.c | grep gcc_yay) > /dev/null 2>&1; then have_gcc_for_target=yes else GCC_FOR_TARGET=${ncn_target_tool_prefix}gcc have_gcc_for_target=no fi rm conftest.c ]) # ACX_CHECK_INSTALLED_TARGET_TOOL(VAR, PROG) # Searching for installed target binutils. We need to take extra care, # else we may find the wrong assembler, linker, etc., and lose. # # First try --with-build-time-tools, if specified. # # For build != host, we ask the installed GCC for the name of the tool it # uses, and accept it if it is an absolute path. This is because the # only good choice for a compiler is the same GCC version that is being # installed (or we couldn't make target libraries), and we assume that # on the host system we'll have not only the same GCC version, but also # the same binutils version. # # For build == host, search the same directories that the installed # compiler will search. We used to do this for the assembler, linker, # and nm only; for simplicity of configuration, however, we extend this # criterion to tools (such as ar and ranlib) that are never invoked by # the compiler, to avoid mismatches. # # Also note we have to check MD_EXEC_PREFIX before checking the user's path # if build == target. This makes the most sense only when bootstrapping, # but we also do so when build != host. In this case, we hope that the # build and host systems will have similar contents of MD_EXEC_PREFIX. # # If we do not find a suitable binary, then try the user's path. AC_DEFUN([ACX_CHECK_INSTALLED_TARGET_TOOL], [ AC_REQUIRE([ACX_TOOL_DIRS]) AC_REQUIRE([ACX_HAVE_GCC_FOR_TARGET]) if test -z "$ac_cv_path_$1" ; then if test -n "$with_build_time_tools"; then AC_MSG_CHECKING([for $2 in $with_build_time_tools]) if test -x $with_build_time_tools/$2; then $1=`cd $with_build_time_tools && pwd`/$2 ac_cv_path_$1=[$]$1 AC_MSG_RESULT([$ac_cv_path_$1]) else AC_MSG_RESULT(no) fi elif test $build != $host && test $have_gcc_for_target = yes; then $1=`$GCC_FOR_TARGET --print-prog-name=$2` test [$]$1 = $2 && $1= test -n "[$]$1" && ac_cv_path_$1=[$]$1 fi fi if test -z "$ac_cv_path_$1" && test -n "$gcc_cv_tool_dirs"; then AC_PATH_PROG([$1], [$2], [], [$gcc_cv_tool_dirs]) fi if test -z "$ac_cv_path_$1" ; then NCN_STRICT_CHECK_TARGET_TOOLS([$1], [$2]) else $1=$ac_cv_path_$1 fi ]) []dnl # ACX_CHECK_INSTALLED_TARGET_TOOL ### # AC_PROG_CPP_WERROR # Used for autoconf 2.5x to force AC_PREPROC_IFELSE to reject code which # triggers warnings from the preprocessor. Will be in autoconf 2.58. # For now, using this also overrides header checks to use only the # preprocessor (matches 2.13 behavior; matching 2.58's behavior is a # bit harder from here). # Eventually autoconf will default to checking headers with the compiler # instead, and we'll have to do this differently. AC_DEFUN([AC_PROG_CPP_WERROR], [AC_REQUIRE([AC_PROG_CPP])dnl m4_define([AC_CHECK_HEADER],m4_defn([_AC_CHECK_HEADER_OLD])) ac_c_preproc_warn_flag=yes])# AC_PROG_CPP_WERROR # Test for GNAT. # We require the gnatbind program, and a compiler driver that # understands Ada. We use the user's CC setting, already found. # # Sets the shell variable have_gnat to yes or no as appropriate, and # substitutes GNATBIND and GNATMAKE. AC_DEFUN([ACX_PROG_GNAT], [AC_REQUIRE([AC_CHECK_TOOL_PREFIX]) AC_REQUIRE([AC_PROG_CC]) AC_CHECK_TOOL(GNATBIND, gnatbind, no) AC_CHECK_TOOL(GNATMAKE, gnatmake, no) AC_CACHE_CHECK([whether compiler driver understands Ada], acx_cv_cc_gcc_supports_ada, [cat >conftest.adb <&1 || echo failure` if test x"$errors" = x && test -f conftest.$ac_objext; then acx_cv_cc_gcc_supports_ada=yes fi rm -f conftest.*]) if test x$GNATBIND != xno && test x$GNATMAKE != xno && test x$acx_cv_cc_gcc_supports_ada != xno; then have_gnat=yes else have_gnat=no fi ]) dnl 'make compare' can be significantly faster, if cmp itself can dnl skip bytes instead of using tail. The test being performed is dnl "if cmp --ignore-initial=2 t1 t2 && ! cmp --ignore-initial=1 t1 t2" dnl but we need to sink errors and handle broken shells. We also test dnl for the parameter format "cmp file1 file2 skip1 skip2" which is dnl accepted by cmp on some systems. AC_DEFUN([ACX_PROG_CMP_IGNORE_INITIAL], [AC_CACHE_CHECK([how to compare bootstrapped objects], gcc_cv_prog_cmp_skip, [ echo abfoo >t1 echo cdfoo >t2 gcc_cv_prog_cmp_skip='tail +16c $$f1 > tmp-foo1; tail +16c $$f2 > tmp-foo2; cmp tmp-foo1 tmp-foo2' if cmp t1 t2 2 2 > /dev/null 2>&1; then if cmp t1 t2 1 1 > /dev/null 2>&1; then : else gcc_cv_prog_cmp_skip='cmp $$f1 $$f2 16 16' fi fi if cmp --ignore-initial=2 t1 t2 > /dev/null 2>&1; then if cmp --ignore-initial=1 t1 t2 > /dev/null 2>&1; then : else gcc_cv_prog_cmp_skip='cmp --ignore-initial=16 $$f1 $$f2' fi fi rm t1 t2 ]) do_compare="$gcc_cv_prog_cmp_skip" AC_SUBST(do_compare) ]) dnl See whether we can include both string.h and strings.h. AC_DEFUN([ACX_HEADER_STRING], [AC_CACHE_CHECK([whether string.h and strings.h may both be included], gcc_cv_header_string, [AC_TRY_COMPILE([#include #include ], , gcc_cv_header_string=yes, gcc_cv_header_string=no)]) if test $gcc_cv_header_string = yes; then AC_DEFINE(STRING_WITH_STRINGS, 1, [Define if you can safely include both and .]) fi ]) dnl See if stdbool.h properly defines bool and true/false. dnl Check whether _Bool is built-in. AC_DEFUN([ACX_HEADER_STDBOOL], [AC_CACHE_CHECK([for working stdbool.h], ac_cv_header_stdbool_h, [AC_TRY_COMPILE([#include ], [bool foo = false;], ac_cv_header_stdbool_h=yes, ac_cv_header_stdbool_h=no)]) if test $ac_cv_header_stdbool_h = yes; then AC_DEFINE(HAVE_STDBOOL_H, 1, [Define if you have a working header file.]) fi AC_CACHE_CHECK(for built-in _Bool, gcc_cv_c__bool, [AC_TRY_COMPILE(, [_Bool foo;], gcc_cv_c__bool=yes, gcc_cv_c__bool=no) ]) if test $gcc_cv_c__bool = yes; then AC_DEFINE(HAVE__BOOL, 1, [Define if the \`_Bool' type is built-in.]) fi ]) dnl See if hard links work and if not, try to substitute $1 or simple copy. AC_DEFUN([ACX_PROG_LN], [AC_MSG_CHECKING(whether ln works) AC_CACHE_VAL(acx_cv_prog_LN, [rm -f conftestdata_t echo >conftestdata_f if ln conftestdata_f conftestdata_t 2>/dev/null then acx_cv_prog_LN=ln else acx_cv_prog_LN=no fi rm -f conftestdata_f conftestdata_t ])dnl if test $acx_cv_prog_LN = no; then LN="ifelse([$1],,cp,[$1])" AC_MSG_RESULT([no, using $LN]) else LN="$acx_cv_prog_LN" AC_MSG_RESULT(yes) fi AC_SUBST(LN)dnl ]) dnl GCC_TARGET_TOOL(PROGRAM, TARGET-VAR, HOST-VAR, IN-TREE-TOOL, LANGUAGE) AC_DEFUN([GCC_TARGET_TOOL], [AC_MSG_CHECKING(where to find the target $1) if test "x${build}" != "x${host}" ; then if expr "x[$]$2" : "x/" > /dev/null; then # We already found the complete path ac_dir=`dirname [$]$2` AC_MSG_RESULT(pre-installed in $ac_dir) else # Canadian cross, just use what we found AC_MSG_RESULT(pre-installed) fi else ifelse([$4],,, [ok=yes case " ${configdirs} " in *" patsubst([$4], [/.*], []) "*) ;; *) ok=no ;; esac ifelse([$5],,, [case ,${enable_languages}, in *,$5,*) ;; *) ok=no ;; esac]) if test $ok = yes; then # An in-tree tool is available and we can use it $2='$$r/$(HOST_SUBDIR)/$4' AC_MSG_RESULT(just compiled) el])if expr "x[$]$2" : "x/" > /dev/null; then # We already found the complete path ac_dir=`dirname [$]$2` AC_MSG_RESULT(pre-installed in $ac_dir) elif test "x$target" = "x$host"; then # We can use an host tool $2='$($3)' AC_MSG_RESULT(host tool) else # We need a cross tool AC_MSG_RESULT(pre-installed) fi fi AC_SUBST($2)]) dnl Locate a program and check that its version is acceptable. dnl ACX_PROG_CHECK_VER(var, name, version-switch, dnl version-extract-regexp, version-glob) AC_DEFUN([ACX_CHECK_PROG_VER],[ AC_CHECK_PROG([$1], [$2], [$2]) if test -n "[$]$1"; then # Found it, now check the version. AC_CACHE_CHECK([for modern $2], [gcc_cv_prog_$2_modern], [ac_prog_version=`eval [$]$1 $3 2>&1 | sed -n 's/^.*patsubst([[$4]],/,\/).*$/\1/p'` [case $ac_prog_version in '') gcc_cv_prog_$2_modern=no;; $5) gcc_cv_prog_$2_modern=yes;; *) gcc_cv_prog_$2_modern=no;; esac] ]) else gcc_cv_prog_$2_modern=no fi if test $gcc_cv_prog_$2_modern = no; then $1="${CONFIG_SHELL-/bin/sh} $ac_aux_dir/missing $2" fi ]) dnl Support the --with-pkgversion configure option. dnl ACX_PKGVERSION(default-pkgversion) AC_DEFUN([ACX_PKGVERSION],[ AC_ARG_WITH(pkgversion, AS_HELP_STRING([--with-pkgversion=PKG], [Use PKG in the version string in place of "$1"]), [case "$withval" in yes) AC_MSG_ERROR([package version not specified]) ;; no) PKGVERSION= ;; *) PKGVERSION="($withval) " ;; esac], PKGVERSION="($1) " ) AC_SUBST(PKGVERSION) ]) dnl Support the --with-bugurl configure option. dnl ACX_BUGURL(default-bugurl) AC_DEFUN([ACX_BUGURL],[ AC_ARG_WITH(bugurl, AS_HELP_STRING([--with-bugurl=URL], [Direct users to URL to report a bug]), [case "$withval" in yes) AC_MSG_ERROR([bug URL not specified]) ;; no) BUGURL= ;; *) BUGURL="$withval" ;; esac], BUGURL="$1" ) case ${BUGURL} in "") REPORT_BUGS_TO= REPORT_BUGS_TEXI= ;; *) REPORT_BUGS_TO="<$BUGURL>" REPORT_BUGS_TEXI=@uref{`echo "$BUGURL" | sed 's/@/@@/g'`} ;; esac; AC_SUBST(REPORT_BUGS_TO) AC_SUBST(REPORT_BUGS_TEXI) ]) nescc-1.3.4/config-aux/codeset.m4000066400000000000000000000015761177770303300165630ustar00rootroot00000000000000# codeset.m4 serial AM1 (gettext-0.10.40) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. AC_DEFUN([AM_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, [AC_TRY_LINK([#include ], [char* cs = nl_langinfo(CODESET);], am_cv_langinfo_codeset=yes, am_cv_langinfo_codeset=no) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE(HAVE_LANGINFO_CODESET, 1, [Define if you have and nl_langinfo(CODESET).]) fi ]) nescc-1.3.4/config-aux/config.guess000077500000000000000000001322641177770303300172120ustar00rootroot00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # Free Software Foundation, Inc. timestamp='2009-04-27' # This file 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 of the License, or # (at your option) any later version. # # This program 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 this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[456]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd | genuineintel) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else echo ${UNAME_MACHINE}-unknown-linux-gnueabi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: nescc-1.3.4/config-aux/config.rpath000077500000000000000000000352231177770303300171770ustar00rootroot00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2003 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This program 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 of the License, or # (at your option) any later version. # # This program 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 this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | pw32* | os2*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux*) case $CC in icc|ecc) wl='-Wl,' ;; ccc) wl='-Wl,' ;; esac ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; sco3.2v5*) ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) wl='-Wl,' ;; sysv4*MP*) ;; uts4*) ;; esac fi # Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then case "$host_os" in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris* | sysv5*) if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi4*) ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then hardcode_direct=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10* | hpux11*) if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=no ;; ia64*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; *) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; sco3.2v5*) ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4.2uw2*) hardcode_direct=yes hardcode_minus_L=no ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) ;; sysv5*) hardcode_libdir_flag_spec= ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. libname_spec='lib$name' case "$host_os" in aix3*) ;; aix4* | aix5*) ;; amigaos*) ;; beos*) ;; bsdi4*) ;; cygwin* | mingw* | pw32*) shrext=.dll ;; darwin* | rhapsody*) shrext=.dylib ;; dgux*) ;; freebsd1*) ;; freebsd*) ;; gnu*) ;; hpux9* | hpux10* | hpux11*) case "$host_cpu" in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac ;; irix5* | irix6* | nonstopux*) case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux*) ;; netbsd*) ;; newsos6) ;; nto-qnx) ;; openbsd*) ;; os2*) libname_spec='$name' shrext=.dll ;; osf3* | osf4* | osf5*) ;; sco3.2v5*) ;; solaris*) ;; sunos4*) ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) ;; sysv4*MP*) ;; uts4*) ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tile*) basic_machine=tile-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: nescc-1.3.4/config-aux/depcomp000077500000000000000000000442671177770303300162540ustar00rootroot00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2009-04-28.21; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free # Software Foundation, Inc. # This program 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. # This program 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 this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u="sed s,\\\\\\\\,/,g" depmode=msvisualcpp fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: nescc-1.3.4/config-aux/depstand.m4000066400000000000000000000131731177770303300167330ustar00rootroot00000000000000## -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # Based on depend.m4 from automake 1.9, modified for standalone use in # an environment where GNU make is required. # ZW_PROG_COMPILER_DEPENDENCIES # ----------------------------- # Variant of _AM_DEPENDENCIES which just does the dependency probe and # sets fooDEPMODE accordingly. Cache-variable compatible with # original; not side-effect compatible. As the users of this macro # may require accurate dependencies for correct builds, it does *not* # honor --disable-dependency-checking, and failure to detect a usable # method is an error. depcomp is assumed to be located in # $ac_aux_dir. # # FIXME: Should use the Autoconf 2.5x language-selection mechanism. AC_DEFUN([ZW_PROG_COMPILER_DEPENDENCIES], [ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) am_depcomp=$ac_aux_dir/depcomp AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi for depmode in $am_compiler_list; do if test $depmode = none; then break; fi _AS_ECHO([$as_me:$LINENO: trying $depmode], AS_MESSAGE_LOG_FD) # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "include sub/conftest.Po" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. depcmd="depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c" echo "| $depcmd" | sed -e 's/ */ /g' >&AS_MESSAGE_LOG_FD if env $depcmd > conftest.err 2>&1 && grep sub/conftst6.h sub/conftest.Po >>conftest.err 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po >>conftest.err 2>&1 && ${MAKE-make} -s -f confmf >>conftest.err 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode _AS_ECHO([$as_me:$LINENO: success], AS_MESSAGE_LOG_FD) break fi fi _AS_ECHO([$as_me:$LINENO: failure, diagnostics are:], AS_MESSAGE_LOG_FD) sed -e 's/^/| /' < conftest.err >&AS_MESSAGE_LOG_FD done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) if test x${am_cv_$1_dependencies_compiler_type-none} = xnone then AC_MSG_ERROR([no usable dependency style found]) else AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) fi ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # ZW_CREATE_DEPDIR # ---------------- # As AM_SET_DEPDIR, but also create the directory at config.status time. AC_DEFUN([ZW_CREATE_DEPDIR], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_CONFIG_COMMANDS([depdir], [$SHELL $ac_aux_dir/mkinstalldirs $DEPDIR], [ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR]) ]) nescc-1.3.4/config-aux/gettext-sister.m4000066400000000000000000000052311177770303300201200ustar00rootroot00000000000000# intl sister-directory configuration rules. # # The idea behind this macro is that there's no need to repeat all the # autoconf probes done by the intl directory - it's already done them # for us. In fact, there's no need even to look at the cache for the # answers. All we need to do is nab a few pieces of information. # The intl directory is set up to make this easy, by generating a # small file which can be sourced as a shell script; then we produce # the necessary substitutions and definitions for this directory. AC_DEFUN([ZW_GNU_GETTEXT_SISTER_DIR], [# If we haven't got the data from the intl directory, # assume NLS is disabled. USE_NLS=no AC_SUBST(USE_NLS) LIBINTL= AC_SUBST(LIBINTL) LIBINTL_DEP= AC_SUBST(LIBINTL_DEP) INCINTL= AC_SUBST(INCINTL) XGETTEXT= AC_SUBST(XGETTEXT) GMSGFMT= AC_SUBST(GMSGFMT) POSUB= AC_SUBST(POSUB) if test -f ifelse([$1],,[../intl],[$1])/config.intl; then . ifelse([$1],,[../intl],[$1])/config.intl fi AC_MSG_CHECKING([whether NLS is requested]) if test x"$USE_NLS" != xyes; then AC_MSG_RESULT(no) else AC_MSG_RESULT(yes) AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if translation of program messages to the user's native language is requested.]) AC_MSG_CHECKING(for catalogs to be installed) # Look for .po and .gmo files in the source directory. CATALOGS= AC_SUBST(CATALOGS) XLINGUAS= for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do # If there aren't any .gmo files the shell will give us the # literal string "../path/to/srcdir/po/*.gmo" which has to be # weeded out. case "$cat" in *\**) continue;; esac # The quadruple backslash is collapsed to a double backslash # by the backticks, then collapsed again by the double quotes, # leaving us with one backslash in the sed expression (right # before the dot that mustn't act as a wildcard). cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"` lang=`echo $cat | sed -e "s!\\\\.gmo!!"` # The user is allowed to set LINGUAS to a list of languages to # install catalogs for. If it's empty that means "all of them." if test "x$LINGUAS" = x; then CATALOGS="$CATALOGS $cat" XLINGUAS="$XLINGUAS $lang" else case "$LINGUAS" in *$lang*) CATALOGS="$CATALOGS $cat" XLINGUAS="$XLINGUAS $lang" ;; esac fi done LINGUAS="$XLINGUAS" AC_MSG_RESULT($LINGUAS) dnl Set up some additional variables which our po/Make-in files dnl may need. dnl For backward compatibility. Some Makefiles may be using these. DATADIRNAME=share AC_SUBST(DATADIRNAME) INSTOBJEXT=.mo AC_SUBST(INSTOBJEXT) GENCAT=gencat AC_SUBST(GENCAT) CATOBJEXT=.gmo AC_SUBST(CATOBJEXT) fi]) nescc-1.3.4/config-aux/iconv.m4000066400000000000000000000066531177770303300162540ustar00rootroot00000000000000# iconv.m4 serial AM4 (gettext-0.11.3) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_func_iconv=yes) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_lib_iconv=yes am_cv_func_iconv=yes) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST(LIBICONV) AC_SUBST(LTLIBICONV) ]) AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL(am_cv_proto_iconv, [ AC_TRY_COMPILE([ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([$]{ac_t:- }[$]am_cv_proto_iconv) AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, [Define as const if the declaration of iconv() needs const.]) fi ]) nescc-1.3.4/config-aux/install-sh000077500000000000000000000325371177770303300167000ustar00rootroot00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2009-04-28.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then trap '(exit $?); exit' 1 2 13 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: nescc-1.3.4/config-aux/lead-dot.m4000066400000000000000000000021751177770303300166220ustar00rootroot00000000000000# -*- Autoconf -*- # Copyright (C) 2003 Free Software Foundation, Inc. # This program 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. # This program 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 this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # serial 1 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) nescc-1.3.4/config-aux/lib-ld.m4000066400000000000000000000067611177770303300163010ustar00rootroot00000000000000# lib-ld.m4 serial 2 (gettext-0.12) dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl Subroutines of libtool.m4, dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision dnl with libtool.m4. dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then acl_cv_prog_gnu_ld=yes else acl_cv_prog_gnu_ld=no fi]) with_gnu_ld=$acl_cv_prog_gnu_ld ]) dnl From libtool-1.4. Sets the variable LD. AC_DEFUN([AC_LIB_PROG_LD], [AC_ARG_WITH(gnu-ld, [ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(acl_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) nescc-1.3.4/config-aux/lib-link.m4000066400000000000000000000553431177770303300166370ustar00rootroot00000000000000# lib-link.m4 serial 4 (gettext-0.12) dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes undefine([Name]) undefine([NAME]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. If found, it dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" LIBS="$LIBS $LIB[]NAME" AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) undefine([Name]) undefine([NAME]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, dnl hardcode_direct, hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" hardcode_direct="$acl_cv_hardcode_direct" hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE(rpath, [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib$1-prefix], [ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib --without-lib$1-prefix don't search for lib$1 in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) nescc-1.3.4/config-aux/lib-prefix.m4000066400000000000000000000125051177770303300171700ustar00rootroot00000000000000# lib-prefix.m4 serial 2 (gettext-0.12) dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/lib"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) nescc-1.3.4/config-aux/missing000077500000000000000000000262331177770303300162670ustar00rootroot00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2009-04-28.21; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program 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. # This program 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 this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; tar*) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar*) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: nescc-1.3.4/config-aux/mkinstalldirs000077500000000000000000000066221177770303300174760ustar00rootroot00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2005-06-29.22 # Original author: Noah Friedman # Created: 1993-05-16 # Public domain. # # This file is maintained in Automake, please report # bugs to or send patches to # . errstatus=0 dirmode= usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. Report bugs to ." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit $? ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit $? ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and # mkdir -p a/c at the same time, both will detect that a is missing, # one will create a, then the other will try to create a and die with # a "File exists" error. This is a problem when calling mkinstalldirs # from a parallel make. We use --version in the probe to restrict # ourselves to GNU mkdir, which is thread-safe. case $dirmode in '') if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. test -d ./-p && rmdir ./-p test -d ./--version && rmdir ./--version fi ;; *) if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./--version "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac for file do case $file in /*) pathcomp=/ ;; *) pathcomp= ;; esac oIFS=$IFS IFS=/ set fnord $file shift IFS=$oIFS for d do test "x$d" = x && continue pathcomp=$pathcomp$d case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr= chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp=$pathcomp/ done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: nescc-1.3.4/config-aux/move-if-change000077500000000000000000000006001177770303300173710ustar00rootroot00000000000000#!/bin/sh # Like mv $1 $2, but if the files are the same, just delete $1. # Status is zero if successful, nonzero otherwise. usage="$0: usage: $0 SOURCE DEST" case $# in 2) ;; *) echo "$usage" >&2; exit 1;; esac for arg in "$1" "$2"; do case $arg in -*) echo "$usage" >&2; exit 1;; esac done if test -r "$2" && cmp -s "$1" "$2"; then rm -f "$1" else mv -f "$1" "$2" fi nescc-1.3.4/config-aux/no-executables.m4000066400000000000000000000043201177770303300200410ustar00rootroot00000000000000# GCC_NO_EXECUTABLES # ----------------- # FIXME: The GCC team has specific needs which the current Autoconf # framework cannot solve elegantly. This macro implements a dirty # hack until Autoconf is able to provide the services its users # need. # # Several of the support libraries that are often built with GCC can't # assume the tool-chain is already capable of linking a program: the # compiler often expects to be able to link with some of such # libraries. # # In several of these libraries, workarounds have been introduced to # avoid the AC_PROG_CC_WORKS test, that would just abort their # configuration. The introduction of AC_EXEEXT, enabled either by # libtool or by CVS autoconf, have just made matters worse. # # Unlike the previous AC_NO_EXECUTABLES, this test does not # disable link tests at autoconf time, but at configure time. # This allows AC_NO_EXECUTABLES to be invoked conditionally. AC_DEFUN_ONCE([GCC_NO_EXECUTABLES], [m4_divert_push([KILL]) AC_BEFORE([$0], [_AC_COMPILER_EXEEXT]) AC_BEFORE([$0], [AC_LINK_IFELSE]) m4_define([_AC_COMPILER_EXEEXT], AC_LANG_CONFTEST([AC_LANG_PROGRAM()]) # FIXME: Cleanup? AS_IF([AC_TRY_EVAL(ac_link)], [gcc_no_link=no], [gcc_no_link=yes]) if test x$gcc_no_link = xyes; then # Setting cross_compile will disable run tests; it will # also disable AC_CHECK_FILE but that's generally # correct if we can't link. cross_compiling=yes EXEEXT= else m4_defn([_AC_COMPILER_EXEEXT])dnl fi ) m4_define([AC_LINK_IFELSE], if test x$gcc_no_link = xyes; then AC_MSG_ERROR([Link tests are not allowed after [[$0]].]) fi m4_defn([AC_LINK_IFELSE])) dnl This is a shame. We have to provide a default for some link tests, dnl similar to the default for run tests. m4_define([AC_FUNC_MMAP], if test x$gcc_no_link = xyes; then if test "x${ac_cv_func_mmap_fixed_mapped+set}" != xset; then ac_cv_func_mmap_fixed_mapped=no fi fi if test "x${ac_cv_func_mmap_fixed_mapped}" != xno; then m4_defn([AC_FUNC_MMAP]) fi) m4_divert_pop()dnl ])# GCC_NO_EXECUTABLES # Use the strongest available test out of AC_TRY_COMPILE and AC_TRY_LINK. AC_DEFUN([GCC_TRY_COMPILE_OR_LINK], [if test x$gcc_no_link = xyes; then AC_TRY_COMPILE([$1], [$2], [$3], [$4]) else AC_TRY_LINK([$1], [$2], [$3], [$4]) fi]) nescc-1.3.4/config-aux/warnings.m4000066400000000000000000000100671177770303300167600ustar00rootroot00000000000000# Autoconf include file defining macros related to compile-time warnings. # Copyright 2004, 2005, 2007 Free Software Foundation, Inc. #This file is part of GCC. #GCC 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. #GCC 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 GCC; see the file COPYING. If not, write to the Free #Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #02110-1301, USA. # ACX_PROG_CC_WARNING_OPTS(WARNINGS, [VARIABLE = WARN_CFLAGS) # Sets @VARIABLE@ to the subset of the given options which the # compiler accepts. AC_DEFUN([ACX_PROG_CC_WARNING_OPTS], [AC_REQUIRE([AC_PROG_CC])dnl m4_pushdef([acx_Var], [m4_default([$2], [WARN_CFLAGS])])dnl AC_SUBST(acx_Var)dnl m4_expand_once([acx_Var= ],m4_quote(acx_Var=))dnl save_CFLAGS="$CFLAGS" for option in $1; do AS_VAR_PUSHDEF([acx_Woption], [acx_cv_prog_cc_warning_$option]) AC_CACHE_CHECK([whether $CC supports $option], acx_Woption, [CFLAGS="$option" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])], [AS_VAR_SET(acx_Woption, yes)], [AS_VAR_SET(acx_Woption, no)]) ]) AS_IF([test AS_VAR_GET(acx_Woption) = yes], [acx_Var="$acx_Var${acx_Var:+ }$option"]) AS_VAR_POPDEF([acx_Woption])dnl done CFLAGS="$save_CFLAGS" m4_popdef([acx_Var])dnl ])# ACX_PROG_CC_WARNING_OPTS # ACX_PROG_CC_WARNING_ALMOST_PEDANTIC(WARNINGS, [VARIABLE = WARN_PEDANTIC) # Append to VARIABLE "-pedantic" + the argument, if the compiler is GCC # and accepts all of those options simultaneously, otherwise to nothing. AC_DEFUN([ACX_PROG_CC_WARNING_ALMOST_PEDANTIC], [AC_REQUIRE([AC_PROG_CC])dnl m4_pushdef([acx_Var], [m4_default([$2], [WARN_PEDANTIC])])dnl AC_SUBST(acx_Var)dnl m4_expand_once([acx_Var= ],m4_quote(acx_Var=))dnl AS_VAR_PUSHDEF([acx_Pedantic], [acx_cv_prog_cc_pedantic_$1])dnl AS_IF([test "$GCC" = yes], [AC_CACHE_CHECK([whether $CC supports -pedantic $1], acx_Pedantic, [save_CFLAGS="$CFLAGS" CFLAGS="-pedantic $1" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])], [AS_VAR_SET(acx_Pedantic, yes)], [AS_VAR_SET(acx_Pedantic, no)]) CFLAGS="$save_CFLAGS"]) AS_IF([test AS_VAR_GET(acx_Pedantic) = yes], [acx_Var="$acx_Var${acx_Var:+ }-pedantic $1"]) ]) AS_VAR_POPDEF([acx_Pedantic])dnl m4_popdef([acx_Var])dnl ])# ACX_PROG_CC_WARNING_ALMOST_PEDANTIC # ACX_PROG_CC_WARNINGS_ARE_ERRORS([x.y.z], [VARIABLE = WERROR]) # sets @VARIABLE@ to "-Werror" if the compiler is GCC >=x.y.z, or if # --enable-werror-always was given on the command line, otherwise # to nothing. # If the argument is the word "manual" instead of a version number, # then @VARIABLE@ will be set to -Werror only if --enable-werror-always # appeared on the configure command line. AC_DEFUN([ACX_PROG_CC_WARNINGS_ARE_ERRORS], [AC_REQUIRE([AC_PROG_CC])dnl m4_pushdef([acx_Var], [m4_default([$2], [WERROR])])dnl AC_SUBST(acx_Var)dnl m4_expand_once([acx_Var= ],m4_quote(acx_Var=))dnl AC_ARG_ENABLE(werror-always, AS_HELP_STRING([--enable-werror-always], [enable -Werror despite compiler version]), [], [enable_werror_always=no]) AS_IF([test $enable_werror_always = yes], [acx_Var="$acx_Var${acx_Var:+ }-Werror"]) m4_if($1, [manual],, [AS_VAR_PUSHDEF([acx_GCCvers], [acx_cv_prog_cc_gcc_$1_or_newer])dnl AC_CACHE_CHECK([whether $CC is GCC >=$1], acx_GCCvers, [set fnord `echo $1 | tr '.' ' '` shift AC_PREPROC_IFELSE( [#if __GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ \ < [$]1 * 10000 + [$]2 * 100 + [$]3 #error insufficient #endif], [AS_VAR_SET(acx_GCCvers, yes)], [AS_VAR_SET(acx_GCCvers, no)])]) AS_IF([test AS_VAR_GET(acx_GCCvers) = yes], [acx_Var="$acx_Var${acx_Var:+ }-Werror"]) AS_VAR_POPDEF([acx_GCCvers])]) m4_popdef([acx_Var])dnl ])# ACX_PROG_CC_WARNINGS_ARE_ERRORS nescc-1.3.4/configure000077500000000000000000004260751177770303300145470ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for nesc 1.3.4. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='nesc' PACKAGE_TARNAME='nesc' PACKAGE_VERSION='1.3.4' PACKAGE_STRING='nesc 1.3.4' PACKAGE_BUGREPORT='' PACKAGE_URL='' enable_option_checking=no ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS pathperl am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC subdirs am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_dependency_tracking ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS' ac_subdirs_all='src libiberty libcpp' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures nesc 1.3.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/nesc] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of nesc 1.3.4:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF nesc configure 1.3.4 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by nesc $as_me 1.3.4, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in config-aux "$srcdir"/config-aux; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in config-aux \"$srcdir\"/config-aux" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='nesc' VERSION='1.3.4' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' subdirs="$subdirs src libiberty libcpp" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_pathperl+:} false; then : $as_echo_n "(cached) " >&6 else case $pathperl in [\\/]* | ?:[\\/]*) ac_cv_path_pathperl="$pathperl" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_pathperl="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi pathperl=$ac_cv_path_pathperl if test -n "$pathperl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pathperl" >&5 $as_echo "$pathperl" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$pathperl" ; then as_fn_error $? "I can't find perl" "$LINENO" 5; fi ac_config_files="$ac_config_files Makefile doc/Makefile tools/Makefile tools/nescc-mig tools/nescc-ncg tools/nescc tools/nescc-diff tools/nescc-wiring tools/java/Makefile tools/java/net/Makefile tools/java/net/tinyos/Makefile tools/java/net/tinyos/nesc/Makefile tools/java/net/tinyos/nesc/wiring/Makefile tools/java/net/tinyos/nesc/dump/Makefile tools/java/net/tinyos/nesc/dump/xml/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by nesc $as_me 1.3.4, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ nesc config.status 1.3.4 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;; "tools/nescc-mig") CONFIG_FILES="$CONFIG_FILES tools/nescc-mig" ;; "tools/nescc-ncg") CONFIG_FILES="$CONFIG_FILES tools/nescc-ncg" ;; "tools/nescc") CONFIG_FILES="$CONFIG_FILES tools/nescc" ;; "tools/nescc-diff") CONFIG_FILES="$CONFIG_FILES tools/nescc-diff" ;; "tools/nescc-wiring") CONFIG_FILES="$CONFIG_FILES tools/nescc-wiring" ;; "tools/java/Makefile") CONFIG_FILES="$CONFIG_FILES tools/java/Makefile" ;; "tools/java/net/Makefile") CONFIG_FILES="$CONFIG_FILES tools/java/net/Makefile" ;; "tools/java/net/tinyos/Makefile") CONFIG_FILES="$CONFIG_FILES tools/java/net/tinyos/Makefile" ;; "tools/java/net/tinyos/nesc/Makefile") CONFIG_FILES="$CONFIG_FILES tools/java/net/tinyos/nesc/Makefile" ;; "tools/java/net/tinyos/nesc/wiring/Makefile") CONFIG_FILES="$CONFIG_FILES tools/java/net/tinyos/nesc/wiring/Makefile" ;; "tools/java/net/tinyos/nesc/dump/Makefile") CONFIG_FILES="$CONFIG_FILES tools/java/net/tinyos/nesc/dump/Makefile" ;; "tools/java/net/tinyos/nesc/dump/xml/Makefile") CONFIG_FILES="$CONFIG_FILES tools/java/net/tinyos/nesc/dump/xml/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi # # CONFIG_SUBDIRS section. # if test "$no_recursion" != yes; then # Remove --cache-file, --srcdir, and --disable-option-checking arguments # so they do not pile up. ac_sub_configure_args= ac_prev= eval "set x $ac_configure_args" shift for ac_arg do if test -n "$ac_prev"; then ac_prev= continue fi case $ac_arg in -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ | --c=*) ;; --config-cache | -C) ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) ;; --disable-option-checking) ;; *) case $ac_arg in *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_sub_configure_args " '$ac_arg'" ;; esac done # Always prepend --prefix to ensure using the same prefix # in subdir configurations. ac_arg="--prefix=$prefix" case $ac_arg in *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" # Pass --silent if test "$silent" = yes; then ac_sub_configure_args="--silent $ac_sub_configure_args" fi # Always prepend --disable-option-checking to silence warnings, since # different subdirs can have different --enable and --with options. ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" ac_popdir=`pwd` for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue # Do not complain, so a configure script can configure whichever # parts of a large source tree are present. test -d "$srcdir/$ac_dir" || continue ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 $as_echo "$ac_msg" >&6 as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" # Check for guested configure; otherwise get Cygnus style configure. if test -f "$ac_srcdir/configure.gnu"; then ac_sub_configure=$ac_srcdir/configure.gnu elif test -f "$ac_srcdir/configure"; then ac_sub_configure=$ac_srcdir/configure elif test -f "$ac_srcdir/configure.in"; then # This should be Cygnus configure. ac_sub_configure=$ac_aux_dir/configure else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5 $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} ac_sub_configure= fi # The recursion is here. if test -n "$ac_sub_configure"; then # Make the cache file name correct relative to the subdirectory. case $cache_file in [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; *) # Relative name. ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 $as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} # The eval makes quoting arguments work. eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 fi cd "$ac_popdir" done fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi nescc-1.3.4/configure.in000066400000000000000000000030241177770303300151320ustar00rootroot00000000000000# This file is part of the nesC compiler. # # This file is derived from the RC Compiler. It is thus # Copyright (C) 2000-2001 The Regents of the University of California. # Changes for nesC are # Copyright (C) 2002 Intel Corporation # # The attached "nesC" software is provided to you under the terms and # conditions of the GNU General Public License Version 2 as published by the # Free Software Foundation. # # nesC 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 nesC; see the file COPYING. If not, write to # the Free Software Foundation, 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. dnl -*- m4 -*- # force autoconf 2.5 on Debian systems AC_PREREQ(2.50) AC_INIT(nesc, 1.3.4) AC_CONFIG_AUX_DIR(config-aux) AM_INIT_AUTOMAKE AC_CONFIG_SUBDIRS(src libiberty libcpp) AC_PROG_CC AC_PATH_PROG(pathperl, perl) if test -z "$pathperl" ; then AC_MSG_ERROR(I can't find perl); fi AC_OUTPUT( Makefile doc/Makefile tools/Makefile tools/nescc-mig tools/nescc-ncg tools/nescc tools/nescc-diff tools/nescc-wiring tools/java/Makefile tools/java/net/Makefile tools/java/net/tinyos/Makefile tools/java/net/tinyos/nesc/Makefile tools/java/net/tinyos/nesc/wiring/Makefile tools/java/net/tinyos/nesc/dump/Makefile tools/java/net/tinyos/nesc/dump/xml/Makefile ) nescc-1.3.4/doc/000077500000000000000000000000001177770303300133675ustar00rootroot00000000000000nescc-1.3.4/doc/COPYING-DOC000066400000000000000000000476631177770303300150450ustar00rootroot00000000000000 GNU Free Documentation License Version 1.2, November 2002 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements". 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. nescc-1.3.4/doc/COPYRIGHT000066400000000000000000000005501177770303300146620ustar00rootroot00000000000000All documentation in this directory is Copyright (C) 2002-2005 Intel Corporation Permission is granted to copy, distribute and/or modify these documents under the terms of the GNU Free Documentation License, Version 1.2; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the file COPYING-DOC. nescc-1.3.4/doc/INDEX000066400000000000000000000012671177770303300141670ustar00rootroot00000000000000- README summarises the changes in nesC since version 1.0 - ref.pdf is the nesC reference manual - the user directory contains introductions to the new nesC 1.2 features - the dump directory contains the schema definition for nesC's XML information dump facility (see user/attributes.txt) - nesc-debugging.html describes how to debug nesC code using gdb - mica-debugging.html describes how to use the Atmel JTAG interface to debug mica-family motes - envtarget.html describes the "env" target which can be used to quickly port nesC to a new target platform which already supports gcc - nescc.1 and nescc-mig.1 are man pages for the nesC compiler and the message interface generator tool nescc-1.3.4/doc/Makefile.am000066400000000000000000000014001177770303300154160ustar00rootroot00000000000000AUTOMAKE_OPTIONS = foreign nccdatadir=$(datadir)/ncc nccdocdir=$(nccdatadir)/doc userdocdir=$(nccdocdir)/user dumpdocdir=$(nccdocdir)/dump dbgdocdir=$(nccdocdir)/debugging_files dist_man_MANS = nescc.1 nescc-mig.1 nescc-ncg.1 nescc-wiring.1 nccdoc_DATA = \ COPYING-DOC \ COPYRIGHT \ INDEX \ OVERVIEW \ ../README \ mica-debugging.html \ envtarget.html \ nesc-debugging.html \ ref.pdf dbgdoc_DATA = \ $(wildcard debugging_files/*.jpg) dumpdoc_DATA = \ $(wildcard dump/*.dsd) userdoc_DATA= \ $(wildcard user/*.txt) EXTRA_DIST = \ ref.tex \ $(nccdoc_DATA) \ $(userdoc_DATA) \ $(dumpdoc_DATA) \ $(dbgdoc_DATA) update-ref: pdflatex ref.tex bibtex ref pdflatex ref.tex pdflatex ref.tex nescc-1.3.4/doc/Makefile.in000066400000000000000000000404541177770303300154430ustar00rootroot00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = doc DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config-aux/mkinstalldirs CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(dbgdocdir)" \ "$(DESTDIR)$(dumpdocdir)" "$(DESTDIR)$(nccdocdir)" \ "$(DESTDIR)$(userdocdir)" NROFF = nroff MANS = $(dist_man_MANS) DATA = $(dbgdoc_DATA) $(dumpdoc_DATA) $(nccdoc_DATA) $(userdoc_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EXEEXT = @EXEEXT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pathperl = @pathperl@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign nccdatadir = $(datadir)/ncc nccdocdir = $(nccdatadir)/doc userdocdir = $(nccdocdir)/user dumpdocdir = $(nccdocdir)/dump dbgdocdir = $(nccdocdir)/debugging_files dist_man_MANS = nescc.1 nescc-mig.1 nescc-ncg.1 nescc-wiring.1 nccdoc_DATA = \ COPYING-DOC \ COPYRIGHT \ INDEX \ OVERVIEW \ ../README \ mica-debugging.html \ envtarget.html \ nesc-debugging.html \ ref.pdf dbgdoc_DATA = \ $(wildcard debugging_files/*.jpg) dumpdoc_DATA = \ $(wildcard dump/*.dsd) userdoc_DATA = \ $(wildcard user/*.txt) EXTRA_DIST = \ ref.tex \ $(nccdoc_DATA) \ $(userdoc_DATA) \ $(dumpdoc_DATA) \ $(dbgdoc_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-man1: $(dist_man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list=''; test -n "$(man1dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } install-dbgdocDATA: $(dbgdoc_DATA) @$(NORMAL_INSTALL) test -z "$(dbgdocdir)" || $(MKDIR_P) "$(DESTDIR)$(dbgdocdir)" @list='$(dbgdoc_DATA)'; test -n "$(dbgdocdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dbgdocdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dbgdocdir)" || exit $$?; \ done uninstall-dbgdocDATA: @$(NORMAL_UNINSTALL) @list='$(dbgdoc_DATA)'; test -n "$(dbgdocdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(dbgdocdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(dbgdocdir)" && rm -f $$files install-dumpdocDATA: $(dumpdoc_DATA) @$(NORMAL_INSTALL) test -z "$(dumpdocdir)" || $(MKDIR_P) "$(DESTDIR)$(dumpdocdir)" @list='$(dumpdoc_DATA)'; test -n "$(dumpdocdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dumpdocdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dumpdocdir)" || exit $$?; \ done uninstall-dumpdocDATA: @$(NORMAL_UNINSTALL) @list='$(dumpdoc_DATA)'; test -n "$(dumpdocdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(dumpdocdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(dumpdocdir)" && rm -f $$files install-nccdocDATA: $(nccdoc_DATA) @$(NORMAL_INSTALL) test -z "$(nccdocdir)" || $(MKDIR_P) "$(DESTDIR)$(nccdocdir)" @list='$(nccdoc_DATA)'; test -n "$(nccdocdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(nccdocdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(nccdocdir)" || exit $$?; \ done uninstall-nccdocDATA: @$(NORMAL_UNINSTALL) @list='$(nccdoc_DATA)'; test -n "$(nccdocdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(nccdocdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(nccdocdir)" && rm -f $$files install-userdocDATA: $(userdoc_DATA) @$(NORMAL_INSTALL) test -z "$(userdocdir)" || $(MKDIR_P) "$(DESTDIR)$(userdocdir)" @list='$(userdoc_DATA)'; test -n "$(userdocdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(userdocdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(userdocdir)" || exit $$?; \ done uninstall-userdocDATA: @$(NORMAL_UNINSTALL) @list='$(userdoc_DATA)'; test -n "$(userdocdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(userdocdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(userdocdir)" && rm -f $$files tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(dbgdocdir)" "$(DESTDIR)$(dumpdocdir)" "$(DESTDIR)$(nccdocdir)" "$(DESTDIR)$(userdocdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dbgdocDATA install-dumpdocDATA install-man \ install-nccdocDATA install-userdocDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dbgdocDATA uninstall-dumpdocDATA uninstall-man \ uninstall-nccdocDATA uninstall-userdocDATA uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dbgdocDATA install-dumpdocDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-nccdocDATA install-pdf install-pdf-am \ install-ps install-ps-am install-strip install-userdocDATA \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-dbgdocDATA \ uninstall-dumpdocDATA uninstall-man uninstall-man1 \ uninstall-nccdocDATA uninstall-userdocDATA update-ref: pdflatex ref.tex bibtex ref pdflatex ref.tex pdflatex ref.tex # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nescc-1.3.4/doc/OVERVIEW000066400000000000000000000011751177770303300145640ustar00rootroot00000000000000- ref.pdf is the nesC reference manual - the user directory contains introductions to the new nesC 1.2 features - the dump directory contains the schema definition for nesC's XML information dump facility (see user/attributes.txt) - nesc-debugging.html describes how to debug nesC code using gdb - mica-debugging.html describes how to use the Atmel JTAG interface to debug mica-family motes - envtarget.html describes the "env" target which can be used to quickly port nesC to a new target platform which already supports gcc - nescc.1 and nescc-mig.1 are man pages for the nesC compiler and the message interface generator tool nescc-1.3.4/doc/debugging_files/000077500000000000000000000000001177770303300165045ustar00rootroot00000000000000nescc-1.3.4/doc/debugging_files/complete-setup.jpg000066400000000000000000001052341177770303300221610ustar00rootroot00000000000000JFIFHHCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222"L!1AQa"q2#BR3br$CD4Ss%T5Ec*!1AQ"2aqBC ?{n4싮C}4<(أ{ꁱE/NܥoP 6O$dHߚn ;"G$7hl95Ct:#N>rll}Sa~ir숯HaM !nOMJG.N2U j8Mw\Ek!{юh8w/iVOxi"iow?Z264v =,[RYSDE[gE}Úlp NT+Sh8{vL P֧ P8! JBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBဎh0Pm]Rr6p8iAQ䪔"@KD k9 %ts@BAMO-HOD";Z/C@fmpwd>oQTUF΃m9nOC˪5E6Cwzaa$Dy.tALgtv`vOWk++G}nomM| >kZ,4\w'\|I/p.EHےSPF +J `{P=BF6N BHx(4'  PBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB|.pF mܭFR )Z% "ݓ;lRu",2{' w io聣d;vK1u]ޚ@\]M>ӝGc$/Hmj 穬pHgF''w]rt%Fȃgu(fwBw䤛0xRQ~I|C\ >xB7Z+*j`.;F =,-^a %{ &8-rnnV EF J1`P7M8n9N Md4Qg־hǠXck᱑7J*$c@ZT|CK1 x.{p5pv#pR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!>Xi -UsJ8Kj.i0P4ԤhJ^H_X&@"7Qi+R,KmQתn H/T't lz[ Crp>Tƍ4iK6"fg,m%@#+GORRĎNoF+H0TF4ew{ѓL撥퍃'(WoSXtېz_+b7PSFOrvøwfML)VG;)jMMQ#ieF4galҼy߷ЭuUL 6t\ e!iaczܫm+Z\vOgl\$oG5_m}#iЮZ xIHއbDQƨ7wZ`lfIVINO.c~Lc]B yh$_TXxf_tPU'Iw P|OpY?BC/a+uaC1fp΍qB55k (np#U@U46[q@mq.?p Nart}F ]5\f9c؎v7Z.Oz\K̟)fYHs|!tX/2frvjvN 695c;PZn *)bU>3A%%@V?ȅ >%-,$Nr#^ "coS{j_p;a>^aw׃Uϡv:7q^ݒ4=TBBBBBBBU+:\6/@-ށ[&eخ!-~;S$6. Ѱ jxb)2OEE_a`]%V#pf/oK@oQ;gJn/}cnh#bh9h?{ݴOȰڥMF R{&nuNi4mPuEVq6[$L7CCW[DXr6PV_ %v[ړ`m*jjzhl}M~6؆2۟(LQZVAELz4_1G1n"ñJ(akzHƷٍh/^PE0S 5uG ;0Bhףe "ɬa) ZPNš@1FH־75ڂ:Kó`5[~yN#]Gо)X"x;PK6:.ƶ xO169qb=ۡU0V.=Xn: \EZ>I3^׷PAYQUq*FmM-73^ix A9ٮEt k~ahC]sWB>>h>D/-ZqM`Xxp:5= lkǼ,!Zi .,=Njbmw'|M!fƏ mpl InuZAjζT/!u^].@u9 p']8 &_U@D֍.JP|UFj 6mQb@[CLcnG `˪jU 6Qn[&&v*x6PN\曂< yY}AQ {V[M$s(:&{-m#fPzڐ"/R܃ӸLkFWQk.HQ#[eoJMUg F?;3#V*PRuLTy-D8鷲PzŻ`煖׌.蹏DԩnIm.8meWPNzy4:}PAOM(jsPv/ Ifڠ]Փ_?"zEޭa°zJ&<(M?֐@p:l@ېN0E` VF Fƽs\.WOKmtW5t_Ϳ4Rͬx(X@'ܶ1bMGgau{-n)A9}~ ɷhݽ.Zi $clAgzߦ)壓”z8lz ?pZ9w& ^gM]L^9軾1?9i,OUe۵:jp;5E(<%Cé&vxeajR(UMOQ^yYC[*|ov#X dkX uz@!!!!"@!4oި28f\3z ݺ-6SmK@x上KI#O0Ƨvjvy)}Uz}SJz6/'{zZ$"Q}Gn]Icc<.ڤB 'GdvOMp-VQJmTE(T<% n-a`;hSܓd'S\xr)b-t+e,Ir bzVlIl1%[ۚ[ RdР]CkC kviKt6]l~)@=VE̥@:h:Mx- u.Jq;v\h6ܭSLXg(YF!rH~Ճ~%Ű!!!%ɪJ(."à(\xd7G[|>-;6 AB BBBBBBB|*6PR[XqӒGeY<7HRrDn?UrOou4TKtn{ [{ЦI' v싟-"#ΠO7Iºњ[UN 8h6nUK.d{nshO>1rFZ)Qat26ݖI_On?TjGk/<8jMLD |QglLBAi/o!uqz:+Y+0Q4j;tKPF +r${) *sF UuNXX)BF% T 6Jԁ(@%>Y%-54{8lA΅`_@lU5 𺖹`sHp;h9B e|!17u򆋓e7D)ɋK,>GzN]`p\nw}&f[TF?/hrۧ@Ju6:{)f.lgۚk4 ܸmE.1SE^7RT7ZVyuǙkBHdh EdhReȺB..mܤ-I$:tBpoRy@spnl) s =.ڍ9}USzQAJFKuPR hM(h-1H6H`(BM 5" 0M{%R$Rit"E(:&PtWaئDdTY6s]bm@+M|:F;VBieM;&\/~IM+~圧#BB:٧f7(,4p4 %vɣd#G:ctܕ,BOfw9jyk5UKl<4m{.nr#pU vhסJa`)J6s<5h7 Wo.Ɵ@e 6\>\꽣مaD zO̬FG3 G 杜pJې`c;ӨB{4iZ06q i=UqgS%;fh8lr{V.=k$$*l(Hp J6T8% N*8ߤ|?5=kG\^wH ڱZ'܏x yV: 0mZbu Sr̖ZiLr16-pzGWxuN:+=kc/A0U噃_a[]'V9 ]Ͽؕf?GO1 Hu.Veau.#%$dhݘkZ:CKSI8G8=.ox9vz/8~ &=hCt$#lnd8F0;{ v"oﺉؐ,ܢlSɕpWIMEsgQ5]\6y;Kk(JF4כ1WxbZxI^iEIŝ`Z*C+5k1) +jy !Ò N0ZUr<6 .}Ͳ-KãâsJs +TYgCV̧4FdR3mFy94f(,kk&ٳX k.׻2#h#P.}J( Tё7=Q_;.@꣠j'{Xn.̶oё v3Dw2|edaAL5o@6*pH[k9۟MSp~*-xpZdi},O:>R:J,H `siP|/6Qn5,q`e+EMW*ea lF'k6qiRl)I2`nMIN#r)ǐ[]t;itr9ݦݔ-^_U ,1n1J=Bp Ds c}5+력`_ԪW@?]_ᦧ͸dg;~k+4 ŘƆ-=ڋF)P<I>fYֲyN8 ʉ )ϑ7ԤdY {*(? |ž5wNfqm*AkkUOAri(`%+ D!BGoǪ†ᎃR#Sma#A>p}lF Ϫ~$,IRI°,C/`e@NcpF1 ]sql2n|MLNau RR6'Ebtj],~N zz\Sui&p?v&'W:F}-uWBfmgvO aNS 8|.tG˻]N-;TGbћe啭:4| NselP}1<557G#w[.*oS'SMX-q)lj# p,[UPG y3#ݽ*˚Kꥂ"Uv#E=Z5Tꨪp7ij_7? fY?^jN+N\e4]'uّ8]PC;Rz܅D9E~ JxlQk+HٕZP LDꇝRE۲5c*V;L2(m;(ݍҷ\iQ:CchۯiaqÈVѴ#B go%<[#6JV'\>A~k~#1zJL>H-ɢg}7p=\5>m/OYƷ#Ae TT\w7US88xњ0еAV$HʇkP7p iewj62Z״x1sa$x@حJlELy9:]cT`n/`n bHpGUORSu8.#0d ¹4u|Y򮮶ƚ>G=aT}rUrC0jFbT67tqֲV' !JKluc*&aU戎'CoА]3>Y>4ZRGLi ݷ b5lokn9R͙tgXbX{dՑ0?t:>&lmd@x(G7/;}%d: [ cj$a܅NmU,4g޲ n'EeQ\cq)Z7%Xf0 S9.&њIЋ?ٜc܁CˇVGqɡ nئh|noPKZ.jHi y3.<~GG kx^ pM/>Sy)i$cUH;#KUROK37#wkUbxhb'SGH';8 [?Uvr`B -I(%*Ϥe:vEeˢ437L8]S\>+'o?Ok$1H.)W~"Edn-ӱ|,H8B&  5^uTMe GknK(v&3[@鹑6ky2H%446)U7ˣ;_7$^w2oT]u)¹Vnd] ֐RWf+88BTbRpekuOn&n !q2ܬ'+h q]7R X愅(,qA)RO&F(^ &/ul楎MQvp[7\!ttgcUX ҢY+eGGJAjåqkrB@n.(&w)^JrIܠuG|c;EŘ/=UBqk)#:Fx6?v$.~j$&~qOu}Sŝ1# Yծ6c~Sz.̧St9% Ak)$-f29SXkÙ[uv#}{U3Ktĭwd-7K{#Ʒuf,j!4yDsl]7 Zg6493KAEIPGOMdlT49A>QT\+7CžCOާ[jSlV%,\%X]b-X-N ;CU@zHQeq4rAQp- C](?8\yptR4vM.cNFsn@ȅe ̊`CkEѷ/2ᣮŌ4H3R9V*Z'Im30o8.*wuWl5+u 8L|H\#)ճd%_#N@X7em@߮S.ǨdO(X䋇8qioS~?q86N' :dXnlgq\5c$vH ص\n! :=+I3"kkBC}V8LaY\9l ”iW#OJ#:qaUF_RU[Ea8#0۰"uw_TWfZQ6EmؔNPYa]0rU`}͠{E \96ŖG%6}G=$ĸAT:3uZRٮG?} %Wk[BɄDb>J\ZZAZdF~¡<0^hacU4UK;3+Kd>|d; -'L[o17]$}I̿ᐤ{9~+Վ0:ٌFA\TbkuyY:'_{,Z}\euZ/)7HOtLJSN!::I$pW6n6H mm|9*?x NLROgsAcDY9Ɓs:ioLVD Q6~%D˗UqN(Gތq8`F/lmQkwJYejjxPEKCuh'Po媄)[+\}w.e\?tP6o(sYrt=-)_pէ]6$n돂KU˫amx=lJHo=YUnRƥ+Z (ϕ=G:hݳvEMS>y2oF]!~"V]ewvQa[}ѩZ!UBBBBB|"vnCsh5L5X]sl똏|EǑ9@ 5>`BWb-eP @M0겴ڨݡQJ ٫ONH!(oM6*_njGﺏ5`h]VA-d3/j00\28"Aw;R.]FC@mu)OT/a&^҇c`fW{, SkGammq lU6;u4֎@hHˎR5S6NoS2څiX0ar6Z f iЊ&FTt.Xe)`J[d6 t ~a P5 Q̵biRE[TMZVZ䔹{+&}ФmӁ{(QD;kvB:(u4i!5<'0R"FV@z % ?0? A['p0~ZmDtS8z8t'݂hy;fӶ/g'Db7u쳶)"|R1;07aUdyoSҊ PgaFn-wfQWIE;důo컬.j|b7#}_VM=ԕM0UØ5*o[g5HWHjfbRäz8Om*pr ꝎUٌG[2p};3}Z 'TFioWuLf8oOШKW"&?qTfM3Zlз/č'˖vJ% kuv6hcil$kEXeT%#$Բ#d~S˺],N 찝RpL)Fէ\N&śXbS/seqDbѓ8ܥaI(! TYaS`=DvG2[XK{ImknvYu,n,5T{WlVתURQ4fwYSTV~_?M.2(cZ6 &3TL$I9ao4n{1lgOq)bwM)F hud мE ! [q(1Qz ocbZJ+z6sQ VKv8y^;N5ao[Lt}ړ`S\ۣd l֓RئL7ezۄɣ)&7U~ j.C{~<,Vb5RXrwXf;Tm?7|9vF%s_G@ᙵهc^؜o[d,2!1'n3B^E):HQQNڨea8䡏vjzhhVST:bwN>#ybxv;O摠w* 1(}ѺY˻Suf-o \{k7æoϴ}%5'-,k%${{p긦kc;k toW=rUm-u:V9gd۲gUgϧQV2M?+q\D5f:YOx0buF:8[̸R7 huZXFޣ\|ޱlC?y.qQ:}7Mi2uB_ 5-uʭfYT$e |:,IZo>IRۋNRƓ{oXzH8>͉FYW+fchfL~Q wS1׿,Mx)CDV7,z-mHdZtqoB[\ݼNcת'?/^OtMc+psNBBBB|(M"6nN$H>XnOx#YE{UZA505$O4u vJ) S8]. ۡQG8X;ݙa͕4k2z*6]W0dYd~ 6 ' kۖi~N<ܳj6r2-\p_zjWlv*p&Çݩ/3tkɿfva>%SZvxQ4/R F4ځTu4D*q%ZFyYSnW qrLĔnT`GchRWAX,Q2vPJ;풵d7AarfDDEFSMY @ЂCnJa $ @4;]!(%t 'd.)͉dWtQχ[Nj7GN㺾$r& r:^UalHx#콒gT$Pyw> ተ >Y۱SpL~U-|$P^/O$ԳH=sM+oKTtl2Nݏk' ubKe,{j N}._xW#E>KQ'-,MtjWC.c ,\ \7^ϮéDтƎ4< ġiist-=BON'ժFg(= İp\7qV#K4amH͛k35XIL1ݮUS}sc7AjY3M\c{H?Хpٴ#~jk>ʙ{Z]: 4Du SI>-T  m&Vm%3BѶܸˆL&|U&ƫ%l GU;P%IeLM?`` dzrA(M:a8S,p3s)xW8zn##w[5QOvDOrm^cO6X l\/'{[8v0r?0T4vҞK'7Jku+p `6*'djg%nUߛCN>zv X bN,Ā/ce%W⎉Ԗr;i#ౕmI|k Z\D{^2WKl1Ciepۛ4jF;M LqD\e?י^ڹ[5q.s}\}_݀6YXd-t52Ȣ|-k_\+Rg&v3XLح8]JإhFe{.-p-},OKfc)vi#sK b<4~]L İ#mll}Dalqe'Qmӝ` ʶ:)3Xɥhou d}Y%׸6a0;m-b)LdcmdZ-φƴyn#~a pf&ݭf.c}_ y :^Cs7Wu a`FW7;J9X\X rF[Ozs/m{k.f/_Sb.uu4~M׿a1S覄F90?1\ [Xmi4 n/.yᕺ#I[Le3`u]ؖIK^0 v`p ⴦zjhɛ4M} +7*Zc5ks,ߥVۿWO"2O+C\jn|*xYI7J,AAm*b()+ ;+ZoX_FMB 8T)nyapr HlS c aݧkErN0c?5e5<340,̽+S]ֱ]ƪy_FZv&ɚ)Cd0$;ccq.m:#$f;Ak 5\IWJ*I-D% / j`icOUڰi >0#]6ZT yTR~#q{uL{>OM*0xuEdOoaQ"=n˙GW?>XP*'`!"vsWh+MLSlj k}WppcOIBèBBl6*=luSXۚ,~gd}?Vom!@= O48}k,IDO"-N'Ti1POG/*1 _R?Eu:,־oz$7hX{9I$}jc1# t`W yNy_m!*^)Z $Z@-E"FVܨVe:8+Qۤh?0@2tLmˠAw)YΪFD"Ȃ -A+HKAhU!hR"k`H?d5 ɎFM2tNa%eԮXkg5:PG<l8s]$;- $8 /nϥ칬{0`:,Ǟu5UEm=YuE0\ǘW{IWO]V݈WQa*a،3Ҙ;Քz5\5/#/z3{ʈϊR&z*6=Pkps3Ai^ ƬZǂ#|P7As+#*x摱sq1N+ Q oOp\n6K+WM=l h4>V\Bv(d/sy7:rW>&=-.ksڬ`)D/dpWPGkOɹPS՘啿1u/kA+nq {~/Юkrq n wc~8Et5?#êjx {V d,֎+̥짵`nIދMm:m0 (3IJKnC l:*)6YIQQ@>Bʨ@r 3`Uf{c.||֑bt382[=fnTssU.q-p1BiOf|X88>PjkѤ-4l<; 8h,*GpsIhVpIulsŶ'Qp)>~VjN H_Lj/nC5U$cv|3NUf񢊲JxQd3X:#C\8JNjTI(q,Z/SaIwK֝ludb蠋 "B cSlAvǦ8<*8 |#*,kZ| ߑ?ר|w-ti9wQt)ٞlΔ6 ʛU;D!v;UbPjx"JZsk/9gŖ;O2#璐m{uJ(K˟^ V~u-%Բ=fc<ث#y&aYzuM&x:0칻eR8QPRSE;+7 9&aCCuX.nLW >#[(hl6d GCI v$coevo3n۲W3C3r3[`7_YuPt3۔7W- r4p+:QHr]4Lmk)W_'P8jؾ8œ6q05l?˾0faX\isVThTIiFB߄Kf6cCZ9,5 Vp 'BY,b{UHb,Bb#1l=5\ͼ>pq}Esc{~e|lr[Yx,wMpzOMKQ]sQGaRM%?ލ߸\}ƻ*dfZ|K5#$,+˔۱|WIH|2zu.1YM(pA]1˓zg\fQ=C^KfYW1/R\w(兰ij7ع/D Y,c&܏^nXˏ+]YuSOUom51-beŞ;QŻYjĔ^P${w#Esl;dбnahN氻($cee^CUseZ>iꤧD5u8V<l w0tk? CɗϪP pBp{wrA}agntO (G^~0Q?֛'L[lV\L7p+^lrJ\FgkonQid9xi)cx]폅` w sIWK7墱RHۨZMʾd~UsZ7*FҀUAa V EX6VY$; (m)[;|Td7S++-J%<´DHHK!RM<҇6ZKY7  U)M~'>+,[a(6.fIq0ue?R_P`Wc$oF7YiS3^U7W8ߙWâlWN"?a+̝VtNd=1_dzgw@T@9i>yP:vژRӝ1k*qy)iǫ^jE} Ipހb~+ITXލ'Tז24cn̨h($dQ6q粕[\;J`J]Nm*= usy)]Q{pH; A]u u @hӃp`P=cs_kfc\G[ ƻk0VYXNgG-.]gZtF,c)"2=\`d~,rRn6-åԋ0`4R6f͉RR_WQ8tW {?4+W)}EMf?WӑyJ_|r4D9NwyDZG|F+^cU!s% eGy񆜮O]TB{iE#WN|37R⍡v۱1{o+1+Ý;F 6?˖=߶}Sm4 n?nkeðx3NR =8 isLd_ tRjZ)}T.1s9y6p]:}]m䍕ԵH|G xW$f<7 euVQE7;lNpu,sۇ?Y{81R5cGP<\n|qfr<#`]bB/e,bfq+?#95go~-IoVƱXedsͥcp ~[)#X4"v:`ÌyiWwٰY# wɫ)G?ecHw 6s|/{ȍ3h&ʛF9͐8=k)y/c?;1STK3j<(@#3KKkG,X x9A$1: .;lpB6KkTXHZ}nn8n,h$[)2jXmIXUcS~O)=vMQ╡XKT)Y$O+ oHlsgq.?&fdU$8lF2ќZD,Ns䡡v=굩! @OC-#I8M;)IAeVۢ*FD 3"&KQM M2Ss-DQTei])_Pi8 eq-tcMM{{#oWmOa_,#ot\{H$NJǺ6 TkSG4XXTU<Ӕ|?%[ J#e\i$7`֒MBsdFGV?_9ǹ(9JF];.柄#ziٴ-,;Ϫ#ل"Zݚ0ƍ1g b{o 8.IUH}7JQK~hpGLz6+ln-@,\Jb?{UQ0``(p6ǻmR :&iemHXCcf'ޏ.E.JV ê>SVr~ rO_,&5#On mxyӂ[}Yhˉv#Q~ # ՇtPR]|FnW`,6+JY wj.ICHi|2s;r렋 dm aH`̀MnNbrSctOt#]1X 3]d&ؕC&D(+.[`3M!范0PEMe oG"âFyEn=0z( ÂDE ٧%,Ps{wcafԱwpi#WMṏFִWM ~8?38k21{[B7sT.fثk^[}/a+6968t3-&'(\x4pOP̵w6K_:S{eL؟~cKHיo>xes"{ tiZI 8mҾa%O;̹+ǸfmSƞX9xpYF%5d3%4/ ~~#4s] }Qqߨ\^ )İLFv q꣬e I}H6Xz-aόVU,bE*<5RW͉Y\bc^6<+K{vxGٱvqq)|7X۠TWKcZ.|=#[L7'IY>|dhkW]ߚtя64+u/6ܺǪ.3U~J1wac@ޔ4ޫ=YBZ$ѹmrѱ쎑XR>^6vdQ@d]Jk8sZar??S*KjV2Xo;?n6ۻxCN+eUؕ[f5Ϳ)ƹhl,H͟gsf٤sO7m;}=똓]FW'rߢp/mρ};QF{ 1}D&6lĞ?}h Ӱ~%5?7n#+r׷~JptVsH$ZS~Zoki];#CKݠӚP4>Y1lY~m'qے>Zh>o4=W9n=@궾Za;)=.kno';(ГOp6!,uEhwO m_EUVUQcqmm Ķn @29SŭmҖuhi05 "B9 hQ l3 LOIa 6 J)Y82ܖCHz+X͕Pb2=Dcdc0E\-€K;-0?]/oyM998)iǽuufW?QQ#QSBX1yP:;QZ0C7d[&Z;YŎB)J_p__sL{|IvB)JeY$4q/| ģ.= uK^ TgW/6\sM1J/ф~jF3S:M;Z Q>bi3Q:1ֵ7Ri4:|jZ/gH/Ӛ#e]I=$w#(Lz `<:HnvZa,@G3Sl8zԧFjd/Bm4`mu cF&+I”TxT-X0hƷܵ$@9jBmЉ4l.P,6n Tl= 2P/SaT& a{F$@A\ J{(d1Td]{cA]ae Ն=,frRFމl:%Bփ Mw%+RB@!TBBBD|RVBd865(/|TJvUM,V_dMOG(kx-s\.;Ts\BpZX[ GmƷfq0bM;\ KBTu15bdas6EED]b 2BӴvt҇4j4:;(-65Ty}flS&(EA.pCT 4бҰH+\Xڒ lݖ,аk#WiJҶ-5iz¤<0Y80'S<0 On,ܒsls\6ȑx-*0H^.FX}evޅV~Y uߪ{a$Ӹuν?QH~I]ki{`AsNJܷG ]3X卣ܭue+DZݛR'!4Pt!$)*l:n$PJpJ;$BBd7sMX qʐ5=@1JXsNÒU P@!!!!H! BBBB;bGr!rw5Dὔ9BaP7LVmnY` Tb\ڠǫCqk방cKJƨtG UKrq-c^ےWNXEM9E=! bS'6V.fl2V<[bǗ+ ?=COn˃}>#Q bH=k6>;+Fc:v*v QHM殶MLr6k鯆q'wu:;r[+`eb-8*sSn?QWFhġIfĭ)!%eCNgb< d_^,|IVGzo 1^BV2' 瞚4RYW\8# 15sL3#[2XU0XIm\Ts~ʚWߣ xdCVajpAKaÙ($qPǭUj "΍@0|9'RKN%U!>=],Vf?Xsi[,Q~U. 9I56_˅D@2(hCj⌓ v`_@B5'8Qxum8"`m@LWMማ?Ұu^KO pך&n0򒽖,9;Ou=/EINmBȥ-#̷hUJ} _idT!Vr&*+9'+z&A;U8u]eDvTP,5G$_D Of4 u7H+쬔nQT {)0 @聍%vWAjwJUJ6B !@!TB w4} ( ,PlT!]%T]%m]do:2Y PRFD!!P!@!@!@!@!@!@!@!@!@!@!@M,SBF:(V( ^ 1ivAD{WD@\5vfOEQ롒U$ŏ"?4 uΟ ks],D_59mFt%;7v#Ԭ_ f^4Wx2JzV5Z,nr.{s|]dӲ'H~P9g$9]`;;UGZءܭ@4ߙ͞ho_ܜVv>(@C#i WM ^T>#1u*mDx25sIW){OsZ\{m˚Kkps,pW~/q͵5]7[]=TQX] ipa7Ŧj$.pad^W47OKK9|,~޼rO^l5h}杹(e 7:Y@ɻMj>US5Ώ8؝WN//pp2K!LvOe4Zu<͓DžoEvi$M1oLlWpU^V89̾I=<8~hE<%N)=u 2DԮ i !Iz >d/wm; خc81)A'I[0G` J賎#g{DWA]ibsW#EB&DZUBk6 Mm 6K )P"!GDuHZJvH,F i]U u)uBIR$TP!@!@!@$ҠT$@P*!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@ƞJ7F:)YS|C[= AW`oTha@g`s2'Q t`O 9Y )!'uS}ӎ&/ũj"'r\+_6TR6K&!nVlMsSt\p T!BK7NO|̒:%bh8rmqa{~WK:/y&UlZH26-: ;MBH J1ֽ-{/O_Ù!>^K8LWk^hfRZ3V#&qԩsǶ!6t>Gݘ|/.1Ǔ[ƒ. O(G6wRPXg+'(rc`= etkCNu-tϒgv_33[O'r鿊qV!ҿ #AC/=4 :n+db1FʃpiI+1`?,qq^T l`혓{u:V`ԢIc>Ĵ7>K,Cn>.|91tD:Zve 2^{[yFRCRS3@H h|;sa-KEmzsUNi_S2B*M7-ܕ"HeiMcJU uo9sT;NBOTѧ -`PntP$.J[n*n'PlB_%.zQk [6P9'T#UB@!". 6M(@G%tP @%B*!!!!!!!!!!!!!!!!!!!'UIQ?,Q[pU vOD4A꤬쭹EFlR{ZρHm"HuNJVH1b˩6iQ=ArCb' cGdn@ ' @Ԗr,e$}XD iF^)܎vCME(~ k H w${FЕkj.t(@;PRlȺ@n.aHPB%%M^Ҁ **!!!!!!!!!!!!!!!!!!!!ب tdn섃[,HSM¥5M-EDGd0,ﲨ}0zo6R[D,?H ` TA}n! iY6HM>SY)TШ`PЦfjVY<7ChB{)Fh@7~P9+XFz]8Fyg(@A=HE)@'e)\ %hD4P4%Rz)@)CFmxHTP!P!@!Anescc-1.3.4/doc/debugging_files/jtagpod.jpg000066400000000000000000000325461177770303300206500ustar00rootroot00000000000000JFIFHHCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 "I !1AQaq"2BR#3Cbr4S$DTUs!!1A"Qq ?hԁ h`!FD@ `BCa9q?y3Qkr[:-K.&;w˅/gx_ },}~б|+_ia$hx&QЀ1*Om~EuCʳ(^htA M{ <@*yI] Õc6=`Yvq_Iv?_ZkӁ<+'10>xO?Mz`<Gca>xW,S?Mz`A>7ħؖZLV^-;>:iIV?$: S{G^}>pxkdS y6>ab<ì=.pO/G.DŽd)ՠޞ?5s7iMBq8IJ2WRN>[CwS ߿IϧPOBzRRR*QktY.(h4(>3Gz(AzC^XME-G8kRRڜ/s7h~'rHi- )lWK}CAO!.-i/<Ƶ,w/KN$ _f+w4Ԓy; ij*w1^߾#^Ĺ0L .Ȋ[Q0*RmhwE\ICnX'}H,`Ĵ w@M !Gb_hi |=So^Z'Fo}{0k@i[ N 9]Ovїh-zo%Nj-}~y8FkY2L"+ ޡ-| 1bx ^4qө-#kwv X.V2ZѡٔH3a(kM<5an1߼II|-+5C[ ;I< ЊhNV5+ⳓ"h[܏4 I+t(-u(`ORx >k{2㽴8qiDa'ux5;ݑļ?hi+V.9p5GٸЩ둨bi"HҘɬb`F@ HD'b+NFzRMdlIX](K߫c7έ"b#FӍt(dRv½qdv/` @ʛg),^B&Ӝgel]<<TF0˖|k!Q(aB1RzdlNg|TqQxE5it)Plij:`w) s <|@kGРZf&RN̚Z^&͒ $ ]S<0x sHd{U?LJJ^55{I4r|2xf{ZjW4M;hJɎ< h?%gk5AbF74x hjߞ]mvoIvىaˇ*je$g-9" pw-ZSw.ȔHb! .]HHCZ = ,S9xԢr #vuI,v>_ljrş:ֻ`a.iؽY$j>f?0p7VPիy?cZ2bH4mE$mK%[ÂYҠ8f)_PA0 {wa;w+)J".Wv%@/yfВ5`x Bdau h4zwBPI8^֓YO2Ut7!oC-YAZuRyx\m;+),-QOĒB LƵ́;!8*xi{}mu)3v^/ONx}eNY:_b-T[bH^ČA DSCB fp@CA@.&ʄ\*3TEv1Ԗ`yt+1gcbы;۷Wo#$[^eNP\%Տ$ԏbd=`M-Ie}r!i2FVV@ 4AKvM :!͸Ag3y"@FvA_ B1^wmIPbZj5c^, #-V֒!-/$>dyV{%⭦HlK%&k\٤Vq.ȠZwFEHi d r{3~yL$UUd$X˛ZE}A[M["ko""4egopru  I o@=7p~|=nhEmPz`w!o+fS'}@ekMlJ2 Gi"|e8X]Y'n.%\ ye5{G@27252~ۆu{>[N?ԣEho3u06SeLI a  @CI},W%Z<%zk[Sn)͞WկR oiyv>>iY+xk5UK:z!CKFͼw}G-t#|ožvW܏)^ Gf+@! oa~C,v V^#b~%-t&Қ#E־Shޡi@5V;e۩̴^yd <+CVk- 'M=v@45 +I)[M[}\7ݭ}Y&S]dF5YlFi^ i%~=EpwR ᕑyu/ѾqO+;ݕĪp+3CS׼IfLu6_fZPF03=A!)dzY$Eaiu7ws\.DMՖ_vV s|ϦeVsvEI{*Yz]Y_#7*-:tj7QQ4gU8)aJ Y8?9Y;zHJQxi^Oϖ%vޤWkÿ6moE"?Am`7z+$ݲdPd"+۫~zOk^c]G[WVݑSY'ky=M(''`7@gq ` kjښ%,縉їwy_RE@0y RM܍++_+wKn}a++BӋcmu(S($[ϸJ2Z4IƧw8롑ZoĚrefWm^>ݎ_}O#))+wHi 3LI6I=7:|i^>FЪ U22sMF<4@h@D&auoIV?uyԔA< c86ҫsJ4-+:WSm!ʬ9}HXBԜdx<}X|fD;ͿyyF (}fgMgYihW5gnkA-b'-|[3|6OimzZYΝZs.I_AMHӒpr*.fM/lDdaSRkȚ'Qvxu%&.Wx[&M?t"+LҞ$GȒђO!-S49l Ri;nWpl3gṾIM)U7%%\F3x|SO \[XzjTm= `J 5o/P,-([_"rQ]US0V=H̾ISllG Xz&u}5ԄEȝ2ԡU;4[*N+{Ϛs~Ue%k:NӶ%m jo˨6%mE_} \_=жy?N!z,~"9R{%YP%|id=GwthHLϨe_gŧgYx%OeưDq32 Rʋ6T"֋2fÿSE"Og .n db47æI=3Hנ$d ] ~mlX~,ɉgz./ }_7pK7 asf[!,dRy؍k5%3A?eW8^LK5E>̭ŕu$Z/2+'ɮw@\WABX, uVWPNq*4/U?iϥ^k$E-0y)hhLUVi=QsYZk̮t&DuuAtR5ntаlV QЛF.T%xGN֏ꀣٱ8u5{>A S@tY3U{zn ne\MaÕT GuW2 /8n&Wn 6Yje{NoMrs #}'x]feSO7q_nYh`Gx0~`x h6}Ag5ݠ3-6 .Zų[ YyBmn>/bVif2mhc^9O5uw{+ ,Liپ{W"|z:tCMPZ0 PԊVk~Km. D-] }7'M䖣V_WP.$Ϡp:Ӄa< GcvV|Feާֹ2,J|)djDdϔl-5)^n٢Eji/@6Ԕ,xbiO&%ѼK}t(b/v[5klq"RޏoAtEJ:^kU ԃR:*SR)\R:\2 6V6l@|ˊk(MXIfz1 JY},yWQRSfO7[kai{RP+ۣCY%md&+`0YnGgh_3h֖RwL2f v(u[)^K<)y_0;,D^"祏RPkO;xR<*9?1dT].LK;0k)W#CT[Rq*wL#Ӭp_|?/=t8хvʏY_'FZ>׉/CAR)36wbVGh7=d#˅:4١kEF[P-&5`N29hA8]*9"x;ˡeZ _#;DVXU>YthT_KVO*:JRjKtl#/rO-O0qFySqU*3I%9dc"J8̭|Pw5e5=lD3ǫbx`v*%r,GXrĶ0rXg?=N3=[Mv'Q,vQ.mi){ʞ-0s,L'0آQA$!!v*uhҨ%="ģrq /~ƻ~HĆM%W]•/q~+rE$OjoܒGg7V)zXIZ_5*=U,E+;ƔBλ_IE=Kn nR.exٮ2TJBOPX5&2ƕXGE̿RJ"aZ21 )N\גo\iIe mFR&@ik@#9'fUdDc ,}}'kUi/ 3t8M7%Tn~Z/$i:i֤FɫJ%k" Xhn$)z dA4brҺv NEN-lv*1EF+];?~="ԪҭeYQqwWOTV\;ty.wZVUNJQ5%H4f*n ]wiEtfx>`=ZF )ogC+ᬹ_UᵰuZQ,~GȜS?ke\6&5)˖IUwEȩ˜9KRT[IV"_ZE" DBLdr$ވ"J>s/?4 }' xwֳ\ʈŽyEuu<I?b%1l40oՍ#οsJu{Ҳd/t讑\=>R_F<"+/#LJQKM\>J=E.?JF|25~zя,9ԟcOjGgڍˡ2Ғ=8:OBh,]ýb{eg$]P.QDm<ߐ\|JER*Ku$FeOZf9џAw O}VLb+ܰr]SyV_T~-\גoT\u\&' ګJQӫZROf{mMヌ.UGYk/'[lYB89/ܣ/M+G}/.'硷} ;Byoxq|J n%Ԗn+Ko$TagV]\nӍAt ֐hs+xkluyu"`qM<ۢO`82'D^ y!TMJgJ5nKGB_|e^3G>KX|qc Ukz3]Nypl7ޤ}+Fc\+$/?9?G 4 QS6C(ᬳ-At5ZXhiI-j)2BHthHf@BL()R=H) 2OTs5F (NS(j.t(fDdtg-@*1wZ_vTpg$\n;#E/až+xT}M{?N:iHu"Jͪ_}f׊̏1OkF+pQztCS42REiKikJv4S T$vm cՖ,=5/P*8MXidH\mfrhY-VVG$hy|oi`xԡQƩ8M[6O'tRc0}%^7&±ݿ}՝L^.utEf*,]':-\{ZwʟTy ;5RNΖڗp%K%YEs7NgaƦ?,Sgk?)G+PY8vM K<|~e坉x7yc0NXea?Ϡzpk?z6,+< Dњv;4HK"VA4,̂EESFSMD"KB[Z!$[I hEjH! \Dv+d0^dq uآWk"J*;ʙ ǨG>,՝SGc1*R.R\ܛOS>#FܒnM٥'#]Lf#_iQZZoW:Д\\M'gdM4ZvSvQ5u3OE;kS7xѣH#ba{+FDbRe4h+ekL߮SqaJB2s\'#YRR֧U['pr|* >R4+B$I7evX/a*-A}tJ1ZVYwg^% u"neR5$+ar)tN9ɭʊt\Qd{E9E(I;# n]]~dv3uRSjVKfW%qv1WM^7r,*UŹB׵WwQanP>U8_xJ6=l߃]+/+ eewnegU>ÂiV[iG Yo+.&FFrww=5ӁFON2MA+˥YUbレ9ZR]8 *kMʯUϚ|gE57TV1Em7vޮ˻2:?gGpUㆃJe o)ymg7>_7GiG&~?p*r9{)?mQQd|ooT8VU#~W&k4vVQTezIhPkcU,<ѣ͚7e:=LK%cl(XSH q*.+ S2Y%@{%bIV5i !YLB -B⾠D4cQ%4K. MZt@`/ArZ nA]X @.= |lrmi V .R,.+Ȯ`WS"lٱMVIU{t?Us=_t"˻L-*pQwq=+.ЦM4n0ge*qUs>^>ڎb ºmJK</,*˗o9>6Q|^yӻ5c+a:iv+M<7 J޹;,z7C-% =#nf\p3#bqu0JtƤ%.\G5*IQ{qU>)yBNc슧Rg# ?ՖREF5%u'|%uL6pjʷ{ߖRW %n1uOzY]gkteMOK$/Gn<.h WI9:rs2sp[mPw 0X*T^QRQY9}5jJ2⵭-y(R8%:k?,'& IScyMtd(\ܥ&7PpI?cZO=V`ut7y*aVhҍ" MDj#4DFXX("bpCK @Hvwo`IX`] ֤G@CFCZ^@AlD P4EDTP%{DZ"0Q̗X"R.%@Qa=KyD #\d%r/Ϡo eY-E\I<$am@Gr+@%(Ķ B6D֌H,JI,>$LK"Qb O w  H`0@Gnescc-1.3.4/doc/debugging_files/micamod.jpg000066400000000000000000002415131177770303300206250ustar00rootroot00000000000000JFIFHHCreated with The GIMPC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222{"M !1AQa"q2#BRb$3rC4cSTs%&d5!1AQ"2aq#3BRrb ?QEQEQEQEQEQEQEQEQEQEQEQEQ\~ҮG ˧V#[ ݸ\>(\ӿ~KEFԴ̲FU  >ս;_=iwKaY\TW=kxKOޘ18qNdg=*UQhqjwegO#gESGս;6t=>.qޞG^tm Ź;ﺳt{oOf Zv=P*Ԭ㻰A|$QUW\mY"з+FA˚u7c 2^Ӡ'o%ʫOgO͍ *z:随OAcoc}mC,4j͐s(QEQ}3*mNK0<}Vsaҷ)ydHeW$&ڸSOcES_oNziޟmx\*lxϖ{ӺRhzD=KXExs"18F}hҊյt׭]oe%a$̪\}j)A\t2Pwc]ފi=!iu΋kkczw<H O뾟 7M:["ڿv8>gQ@ϣu}WDֳB#2 \P~RtY{.,ȥe.Np~̃ORmGEeNc;2AUj'G"~Kt*YW$^ZVjtO}O[{6+W'q2 mAǞ$ZSA׮z^TU7E|߮tes]I_jvڤ6H|B|N/ִt-;{餏ĄJ1 p;ֻGR\&ceyd.!׹10UW+G[t&[hk6xxnN0I򯨨I:汥Ŧjgsf'oyº(BFNA{WNo}6S˭h ժJ~oj X< ^8N'W 2Q;?, 'a#rqm}Ԥ{FcNI( }XηK^kDHu8U-|95=F|QK䟟o[/meE܎ vODu]HGHwdl9?]Y]VerzO?uŢ+s (4QFG!e~t Ţ7Vhͅ6u!|w/rM#飽_^AraKUOZJwSAM:@rO6 抢=YI3^Xiò\Gr'/+\ vTz-_FL6L~rS =E>kkuf)֗~VЏGr'}͵n?ޚnԏ @??r밯&5VM7Sjq;/:5Rj3EښmwRc7Q܉~xgM5˛X9ϴ?6u+Ϭ._CgT=i7N?Vɦ\XQgwA"mB?+\ gQO:մ + qHeR%DZJw =Qo\L=h3{O ^??(ڼGxrS'T؟?;CpYzgF!F5l|kZC8tw6g'!K[@>dxy׿'2,:o6?<{9DsR`ҶO{:^1OV9fAj]R&']VŠ(((((((((((((;QUzEr['[ O\BXiPsI;!dt*)IY#`*UwAok|Cp$wT`I9#LmqEb:n}fKE;Il_ҥޣz1rc=9o4Si++SJ!%s]յ G!FYO^cQkEQ0ƠN}sT#~:u˿k^s{tAO{30iz]_0r=E!uN.goƃ24~cPv3kjJ>+ ޹w })ݓ1&ۏ(~^:3k:j >Iⷵ2GInSgPOQs+Y3-{3̚_Njr&i9{,Oku_Yf ႟|v\6ХfHҿmޱevpdn*0==/$KΞS֋?9ԇ2,_^/iw?6/wdYjh~{u9,dp=J(l_fH??^Vg(ύǚgU3R`~TیF %=9_vWFF |b-6}"n-ݼ-Gʥ'Ŋדt2'nEm냩Ԙɟm eos!ҲN'tՐar1u}˹C3˧jQ{?y}tGo^wW3#Oa@vg+?vLywr\@`XםǟjVK/,xETPǜ~u{ !|G 2{IH#''Iu3jMJʹF{Rggԭ_I]:d.cr1x)i?$ap=h2]VEUGm1r232>t$48#έ>="PYf'ȞrO<uXR&V)$ ]隼}g4 S:+ nh PmVUY횭ݶ9kќd_A weۿ<(4П-ǽ4T Q޼VsIZd Öl.^T䌖+SnvxؓHf5kwq,ːZedQPRs(QɕR2\0ɂPnlj|HkψĜ=鸥kY" d* oaEX#,.<;Т,ޓ+wTmzr|X~(8esJ#e!Bav U]u쾈 |5>PDzw{>wfIpGEi#rd!>Jk|H]-QTtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@mrВjG.0v ́YRkurxP{Tl }T(>#/ju-Ỻqh@YlT٬ UTw#*-⍪kOg?ީ:_-ϋ+\浔UR=\pU귘hնq7Eɱհmz" `G2d@H=Aʻ%d%Vǝ&H'{Pު.5ĂycHGeݞ8RL'21@ /]r*W^ӠW*4˷s޲]Y5nqbxAǬ ɲ$fl@1{:0tii4Ytv]97w3Ơg,=Md6$M=GQ)=F8dy $p2cצ2FK8*+> EUa~YY27;WU=;] 4fQIݷm^3)r x Ҕ[<>YF-5:o4Q'#}MOk1]O,٣xn2`O<ղ}R'ɿ, ;}k:T=Ik l p6b jA)նEt1$ dw<1LNޚ* nR9gH#fHy =jn[ ;Us2O^߼9nU##>}Ev-⽇OԄe%SݜCMgR[D@*YpH}EX_i]/+auXI}Ԩw0` r|Z ye9tya n>t8_MӬT.{Y c}tMgGt;| ;0kXMpfGךVuzXBP˷p'q2>׫}oT|Z --4;rw]%y5ޜ黈҄ 7w'ϊ} =)+HL 18gP_n'i E.6Mz8I[ meG }AV`k' 1>tS4օDMgY( [ ~U.qKoG6^5M¤퇦x6kZzG \Ƽ-±فc{K.SUA*sRbcu^:n]KtQYG,Cҡ eicjҹQkޥWEV3O?պk O$Xv'"EX1*Qiށլu{XxQAvAX(83ŔҼX#Б ujW7+s3caG})4)ѵ(o@+>[,+kjHs ~!VI;4^18+1j7:N哪OaY0}6զTcrN5ݏP2X%x, dg ݢKp|hC:KXaĈ@1 ʳ x6}?JN)LQrK.\1'5桁&S^A =Ѐ?*]G'x:/apDn ǟҟl~m2]%ᄶ>G4Əu薿t>%/ ⩯zg[$Ǚב U}Ύԝ_Iii:>m,:/3p`}ڹ~#Z[og2jcHXqMpY o[SFR@2B͎9X:90|T sdcD4݊DJ@P:rL=*). %1U!q㏵EcumwVDi#*#bҗ@ 8cFҥ呰ż =!_^V@& A?V^L;hƙI'H_>ftXJ;vMlTrX##2J ^Hx7_.␹ ^Hy8@w91A+vv64*K:$1F!^L`nP+cʐR&\km>A* 5zGJ]vdݏ AKjK-0&(iVYu/UY`[ @VhMCMӗͦͣ]_OQ1P<9'NA}.I%!dl )#ю ]tGM,sΐ(3,bDY RA5͒Όe)F?hUAHwt}' +PepA>թ-GMipq2veIJ3,y8M%nrp=}(f^#&!5ݪ4cg$y-nWE|x_!%bIb >fԮwvfcqQ@,Fscީ+1ݚ=WO˧4MJ$i/C(nT8j.ams$ڥ]ı* 0IQ :'La.9fVVn>#Mզk.韑pST/lqS:SЛʴZ]TGW|-ӊ2ݵd`q߹HJ_.RH|Q± |yz*E}Hn)KH9\U-"џx.H/ ؕ9Zޱ&\jS"$(?GؖҽxH8 y?;Ѣvsi 5Eyc0f#3mo,zVe*yV/NJoC/\C$mV i:ݥܓi;X׏Z$dn$K#ܓKO 7m*{bbRq}iQ`F5U($1rv}h$`S̋fQ&Q?Є2RgU6 fN=@v "fQBݫ&A^Q]\G#*?%I&*YH`yPF~Z>p>Uq,I@|,Gi4mnl$2cb1Nױp#rfUG=EZWFlA?ӻ{&pqǞ}iE GbI݂i'4K4$&gcL0r֭"fx b sۘ Hj0ѥ=ߧ-Z_b})`3ާG_RKGeY7?RNO#7fyWP9-⺏~{q -2 {>4#>@^ Oatms#,QmIџΥFXÂTƛ$go:ۧt,ݚ32 <|^|=N9V60#Jtp}Յ]$Aw30U-ڄWZ Ag2#IKt.SOZG7 X$ThX>z5:x30Z^6_;\,ni/%DE "X&xsN#_ڮ^R[pI}Ϫm4zf |:yg3TZkk+h1#$gTkF,ti6̛+ *t+MH(V#~%犋շ'Lڑ}n/Rr]-eb;`zRSƹhX6+1ϖ 1_ugIj3,q2d8AgTR+(%x@,_I#ΥNIYתboEpiCWCùʫ1+I}W *)J {JbʢAW)Ich F{V%vvz'Q ZTg̏>9aHCm ?[?8Vw5ps2J;lsiwz[hghYcp=8ԯ+I:TYsI dFco~ĝ]|;,i9UVr0\M64{ݒp@uZw C7TW9t*\8Ӊ'2]sIGkwX]A)C,[pQ\zfߨXNp}؟R4+"cŇŃGYD`MiީJ .NM!iϕ&rAXGΙ֋4;[m⍤}mqYl>Ts ar9Tk@Gu6g, ̲?8+ߟCSt?WԬ:5N٬@b3ޱ3|I:29Xm8#jN~aKHXXdx{x=߄lnCvI>4>x"٧l?JCk/J٢yY)zk%֛T:Ut^Ժ~h~fr[ <?ˊ/|zwfWz; V=V u LXA}k +!Bgfs[>ʽyFvz ZNa^|Y2>T,EDF<{{6Hwv'ɐ-aZ'\hvmɸi)ǒ+6InΫpsGϏNěxn7e^,{R!xG8(脀 ' $h>x`N$Mey Tkiac Ғs J,X'zūzGsjk[5q˂c؊)gnIGY{MꖮIH>r+6\Sκc> })AEP0(((((((K4pFd{Uèvs?SZR$6 2FXfJZbQvU* <؞P :¯Rt"C$ d #֧sTE&VX-$+&{v8n*}*圝/ʛ.b sL3Î9ȩG:'AViی;?QYKY+8̡2OI5닛Hm6 y[Dv>rudѓcRlXCy$ޫmf[hKj` ֿE k[H%[X, d9I?U_\k$MUUTnBm5HQIǓaSjz!$` 'J<T[޽ 0`eK).%ewBfLc`|\ݵA eG8ldp~UX9p^1EIs>oOH ڽb#?:/:;<2BxWW&k vz̲%oqSul}k\G"Dȍ̼ yqdnGA#9a#T3l:MlMpG[$)h]~NW.Scg9/`޾#/p#n.{iZON)m-$mLc՜L]6JRN-EHOœ޳Y!+Mz_Z\pJ[2 (0}k.OqI{Wi$^K,~Tɞ.T +2nF *@aHo.U&aBYsrGjCe;VMΫj"D!fFfpt2U#¦6:-VKI{x"UI mUfTO>uKf6rnX9,Ï3Jt5jѵnl2%XbF g];\bzh\<{fDY,-dh)%?J@71F%|7$%=@8ڻaa!f=zm3DYΊ8xU-W4N >LEo Ta7;c:x%&{eH=x{b2}2Jbc>,vBMr[V<߽./x~Qg=K>L1H "ز 8,]rG<5yLeR_<qϞjKdnP~%hjkM! bQIQ3MKay'zӤ9[[icY\ FCg472I: l`@$<!ްYvwȐe9)*V{:'Wk+ [[*x8횥&eu@gӟ*{M#?2 P R1;h\ێ=JFg=ɯPI9R 2I>}HϥU/,-mqEĶ2E4n8V"/zvUy`( 's3V~as-{kI%5..-J@h ۱օcJ1-H đV['+kS{sA]jQbtiWGÐGRγ[I|ڍ˴?{@\KI9Oz9mue+~"AbHJO:MZ^{rK(ff60JҲ1\ks[G& 0'.(HVfP UlcKUdFN3iENӡyZ3]ɢs,sR~ UP6Ỗwn\_Ƞrm:&q&M(BzӝzAm,$ҫж+T.-YCV 6BO|zU$ U G *^~͟EXobYۊMMҬU%ģ' hƉcJ ig]S,a֟'_XkiW&B6Tf+T땈 U B\} +eZHV O"7V ~7Ðn<֛t A,[$J'}j ȍE݌ BN~8rَTdn8<կޓMNH@bXs޲S$q<|XWf4{뀢[oHսĒ~>.ŎOsf1ZCt|ЌzM#;KsMH^2>=D }Oʬoʽا,jhۂqʟCA.89aC`d׊xeT z/:e_lcm-ɍC2ą╎ 42Ay՜[ikjK3FFz+xV)ZVjg/[hW"I(]#WIRp><KgO"EO9"뻂zQ:c)iEmLGcqwQ̮@ AEwF%kbVpT pku}ձ)"613|9qi&+KLکQȧ|NiЭt޸)o_:XOݛ{@'#5bge(!9e! hՎ=qvy]c@0?.+hpz.QgEAEP0((((((.᳀3Q+6Y;6>Pug PxQ@u'RW< 9g ws[9=*%IKEu˪nU<}{Q޾Ֆ8o6ܷc:VUw=l_p# T}$=kZ\iwpèܳd)x#Vtnod\#>fi}IMY4rGyjY68&NgKk:.dKe[\DHHe? {ǵ m-#k5 @ӚjBBVf'5ܨI$lsPW7zsg$2k곺͟5&2%O~+MkhV9jZ~[Êk`Zz.F8/o̞D$ġ"AC/n5xNy-4; Vۑ*?ѷ}Ck[(yUY\g+ܹ&y6Ī;!/z6|=#Ss ]+ޭ}WZYΖdBYI#l!:Vg{pYn s>7$6i 8 6x Wg8)zU_w*.pNX9ܝUkΌoMNǤh2j}}OIGoq aIkRqHRn< ;5+J sG+a)USk҄B3**l1{ӦV7RC(\ .HeI#].Wd\rs5/MT.ӕ}̤w VE_/@Z0W=v jyf1833]JSA2Oq}XNՉ$F6oKLX.om]}9RwVA{ôVb~vN6jџ[y'0b˹{'ImD?A&ffcVZ2XpqrV}@dc $~|הRIօP8$c(iP&ӵg$~BW8'|~6e3ḿ$ Rr83BdxGK9yry-$"iNK|Sء+EQ.B,qz9 5mcm!b=NUNsJ?HI$R,^fG,úCOmFU<~ULi4=J2s_Dss?}맯VŦbٛT 1'p;ujJӵ$ִ@ɵT6 6{#AѬq,I#PH*xRtzZS!*[$``qR NKK=k!At#)=8E$:F5hk˂ݎ sҐ'Kw [:M0 =ƚ&;y|5rHrx3OR%uRğ!#jwi#Ett6.UH%*X0,22x5Ӛˤ:NuVk]B= ~XZ-xSu=;7 K6w"iJ>T[H3c{ }E$rtWb]'nFhk(|]2^.hYAa,DCd°SAI蚶MʻḿԱӱ4'Y՝Ѐi4h BķxZ(=iu'DӺE6g2o@qvTMFNcWr|'alk.-ovY‰cj4RJޑ_5=>sjJ~Iްa0V˒M%F1FTQUQizMҭ֜#+G.GqA5G:+f'4g UGZz&s=3%y]w}ntV r}~u4#mVA #jQcFأ^(>~7r>YDՒy&L*@>}5 Qbl7X(VeEWK+%MY/mwe5&P3ʰY|1QUe|5p~()״ "m'9>ƥ7 x"/h42 x|>Y i:q7Z6n=Q-Y(y \X9f%P(ldy ARGӵhikg&x[r<=vX;$yvztE卾x) b8-횆{m#9, l*A.~L~i&Wrcg]zVoFVXpY9*N>CƳ=^[diw!qz>> Wg@4x:ox9%7N9{\"̻\gl,e9$үd3.J#5[mblwL [iNڦleuFmZf"WY@@I*ZĠ]?Wpѻy3\j {ui!!#]V &fҠ.T|Hr2IǧgN%jnV.e H++)qMݛ [wM:J ; =3j[HgS{bzx3e*vhhn+Ic fx u`]$Pu;k6K-7UِnR8f5# ,\LG, ( slPq:z$0u Ȅ N+fԯcFm\ygҟMwPV,',OrE㉷'Ӧ.u?x:M__8f[Ŏ+Qh>ޕ e+ I.#Q>΅gdƜ؟iӉh85I.ILD1> >Y$q-PV&t' g&g}7Ga^U5c۹K.WARVGRBϤ#u;B_aD5yQOfHh@u*(Q@R@ZA@dO\ƚX4K;!Te\K!>(  yWn J_G|k;a@ T&L})0͒|4@pހBC yӵXÅA9 8&@qӀrvΥ $1 )ڳF(҅`qi.[~"M!y]#^tGj]MrBv¨&tN\Qs:Ŝ8 v: m*-,bHQ9>XLVlih`XٿҹԜ]+v.<sy@= ypIWc"ݕ̪fZL@c=}uuzhxU洈/b\XH:sMޓҵ{`aM`ĝz]25{@ ?oq5m'1mu]GK +n%ysR#D$*A,=2sM_jiOnTέٰ^f_SǮjFTΆ.uΩT'"`;QӺTv 6@7O5 .#DgB9#װx'Gb 國A]\wSUڤ1u6Sѣ2ӉnV:W)TEUW*˞(O#qޭ;?V)$3ʒ!Y;m CLjϩTSj12sL䖝3eέz+W/om[i($me#'~{CT7qjID`Jݹ1HVəFM܀sS#x(_R[(o e Fb8;}{yUC.Tܷ#+Is4qٱ qMORj:xe֧ 䗂jr > u 6vɾuG[hl<\Tqtd*R[iiyiwk2;̋:Bym/dMK 캝n TǙ5`1"*emeI|V*r3M\k֧xBbL(JN%KVͶY(US9 c'Fs#Y'=#'#rμ4'潅,  r =kiz VztĂMJ,}dcQm4p@EhCM]'-ᔱFpq1 U9憓TʌwMyoN%ȡ$q89ϑW=TKV&-rr3yO|~|S+_콿#^N(>FJJϋσ/O7$\d2RS(X^0>h;Y _>;؆=qYIpj)QoW XD5iųnl ϷjPzFpQWe$MW+Y_wu@X B0 nǧk'#XII{y9#ee#m{ 5l>ZǹF̸°_<΍U4kҵٺt4p$W˞JMV{}zymn)g7hv{qpW G`Uc $[zU{mJvѭ`rQs2=Xw2Ds5J Ė<$W>kTetw9F1ggIK.+)C6[qڊ]5EL۫xx>$ )´ƥVdu|Ng;x'Πuv& ][+orifVYgES&DH2d7# v)7$\*ŐH_aڽ_Ac<k};C}S\ad z lKĕ8$cp;Гobe%f_Ao4?Gs[#cOXIjvgfVϗӴ[b,HF[,@d:WRcI#(P4ӀtlzHY1IX3ϞWˎOaHaWMrTӋxQj}+UO?oq}TE Q[_K,-fa *$2CnԪl }[Ry'D=o:-ƕyTn<>y\[)H[eXRĕ7Y}>'b0LUN{-rOPծŜ,HŒHdf!OpkM -^6YunݓsRWKf[X'-NTޕѣi#_a}Q6k)M\ӥȑn6rs]_[MOXb,O0O&q"ֵK_TRULFJۡʑLyִ#En,ù"4aoY\Dw1&kѕ(dh=f"6I-;V&S idy6}xGB1v#C跉mI6vǸ#u▸YLXʠ|?Vmb)ݡ6 {շ*Lo׀8ީw{r&*U4ibLp̬3Xޚ[R=3oj4^ɖD;y1gl23it:yY-R8b}}{[kyo[*/*?T䵻UD, aA$WP]ܤPc:B(\ u_n1Lޯ'g@tDiqTog+jrF Q})^H7gmhL@űAG`j{ GʧKU|j9a}_&L?ڪ/oߧGS~hvRw ?M>ڨ!Wc~ȭLR~λ[&^GCW5ۛKm̶cb7QV\0;>)QIf5m^2#R>4ƷEQok:1s {kN;|VuޘwbI #|:MЙd`7ZT8Veazԫx |Eyr;@!"ڠdyUX$yf,A1QcB9 0)آ,F'ڼ  }Y%ސ]6 8, R_Ju*GrsgH-?=9'i#2t vkv)c7*=;E-T/I!vKG]v=yeںIl8M58'[MTݤS"fH!}+/䀸. P}^%P xh`c'ΥG~Ϟa&YYZ$\'1RױHma]Iό\*{:OI܇*Y2ʬ8fqiqjvz.-* H5ƯN-,K35珂-F*TKiVK=WdH!oSpr ta$kԷ3]fr֫JꎨgYvޢUIr Svjoi+dއ fu_đŝȤgjǛM41e_e;RݖEq> $QhQ+/|VnT e;Gj`AqViM|w0]ߝx'H mo*]t Bc$|A^ryϭ!Uے@#aHC~&q}"00VO>c?`<6@U)4*Cb2a,`mbUdU aL%´%AFSVCcYT<sLȜsNl%=fTԵeoiِVul"2 WGNOǍ*oZ=RZ  +Q,?smAXV՞ ei`}'OZևq}imāD0ÖN A:YA݌RO<*Il-ү#: #ΆBVw:zmgemPmbpx":窴M"YUQ3ިOu6&LcOcugKt=+mk8ƒM; W}Y&O"ɝgojj0< ?9U@[_`jWgrrK1&/t3]lm'犉rU;މkll0YmsioAa$* UPx,/m.tfiRVh J>_[ԫ"<43Vo3M_Ҋ|EoܱK@-ޯzSWTjHQXޓְǦۙ}3?XmYLQ7ԗ?V[C(Tİ{g3LmsnbUIftS4IWQ[¢( ߅TcF_H'Ud%99g#*rAr QX: g(VJRL=dZa2#g;~0~] p˻[c`Zv/e+TzU|.VG; fl^7/!n#c[($),y'W_H]2noe9lgF[Eh/1+ cʻ햣 -o1o;q1+PdvN?b9|FT,p0(NxomXCYH ,],n:j»fܨx9\Y.{"կhaL鮩~ [ pa,=E(cM?s,stU.O5:}>/cV.|JSOȮlܫDRK nSx< ZVW-rd'Q!9ϟ6\SL]#qTX4PκG]}҂ETo2ǵv}>t>K .ZDuն]6뮙M6-,ֆ"nb>IF5 0`!zUαs-R\@Xaj9-ln.#,aQW#$ dRkv %ϿÏQ_1Q/$Xn$tSVbBaUeu&`h9 MXw netHڪO4@-ٯqO-,N*) ‹*X>( 1_Fje8 i*rrrwXVUEFWW:k/PvWWZs sG#,r~q#G"Aʵ!i]oRKW`c~*h u[ȝ/j™ BЎ3\᷍WX|*YA#ƠKSM/QΤe};AT$)7m UX¢8em˒<:.Rf0gAkd~Avf暞qZĪ=s^M6l`7z|M .GmmF4ҡ6$5$ qVio1r@%op1P] &*|U;2 ˞Ƹ=^@8#>ث"})Fm]_!Hgy@3* mǎI SC.c C^eQ2q?NJ c<ڠ69Kup qT`nvLr{rS皢O,0;R-!ƍu`G5 s++lAO0Κ@$)XU9i=n364D1V/hmŔ+G Y(ʫd/ۡtUmBc(9LSI(n5eOɯT VUB{ ZorUB"N+ y]O.gV#dHBo*tgV}8T8Jv֦Yj:ΘZ{wVTyrnyǐߺ(-3@ӕ6^oZzGkuopV`ڽu{jqҲ̫#-ݮY qs_=Q~v4HЀTZM薩2 TLp֫D{^gfHX37$_t+JD::żwἘǦ){ukulr0P6Khƅ~%P=qU yg? BpTi8+jKku Mp?+ W^/n p?ZuAn׈F/Q,,o~@ ɦ@gH&{_Y r*Q®q?^u^if+_Y`7/ҳc,z9{xŽ0P??\y!1MqeQE$&k7w(d&`2eQvr8,[jN֏*}SGf B۞c'=W EڸPeVb<kGXgM).HuTB"|XxոTE X` O?ʮQiJ?,$yqN[YKq4f_#wq*ؤ2A9E ]=t4I(QLYdqfʰ3VZEE8*[rMwCDc!;v'wcc4++dYn淝Xw.A6H,jy\/Y1<94x<״;{sP,2@Fʤ*]-4w8(&+yf I*[WMj@( |U"41+ֳpnI s םK>ق*Ybgːyh=> # HXܚN󕑋!c[ ]JP4BUBHaA2$qZؓU9+|90ו4XPPr@$`TO wFHoJ[2(*n$; 20s(oF>mڜH;RłpAӵV;# d'Ng䏭U^Pq95-@}HT^['q4,vbtӌG#UH*2+f*&DU2yd mkV+ǽY[۴1ϙI =YfXcǰ5H3;t@|*F꺠NͱԵ/ i2<*DE61ǷTZ4-7z^VY'+pZpC ̱Fȧܶ1Uf^qj0.70Miޱ#/).u|n#;,? 95}f٦g<fC3Վb3Cj%YZr~+ow FXG/ϕit 'v= OuaiHhGŴ,P#'|\٩CnX{c;xW$1VOegOknQ`wQ%ko2z^-!xZGri53&'5<'EEcd 1qޣ]DF36<5Hv$QO'ǎ雹]% X0Ga}Mψ|ud7)Py'ʬmGk߉7) 179('uQPx~@hjM ݘ<皨L.|VÅr@'Z0mб yU%](h7@\9wDGH,HH*d>uӵ{[U-÷7lzfHWj GYK m佳VF!VYnF4᠊` qb3ʣ_r򸸒xt_0%s'It2Iu gw8H;qܞʫ'@/l;+S43q8ԜRo5Km>{lĶ@bxl=.R6%mex"zN[ۦg;fyo*c=O6]/n'ْv$yZcGE Wf`y|@}*Z6VumjjԲkay#ֿB]w;$n5ebBdU7zeDnkoZKi%Jxf`6=-䷳`IP@]t޹C\HbڊUTI@JQܲy9>~t~frv<++qg``׮^tQ(3}= K]=-yیcrxZoe6RHceYIOoJHԪ;(#Yz]4smUpX֦n$,QsOjIsndgڽi؃TѼf?Zr;Q$b6XQӦ7Eծt (mm1GY% g+֏ip;ZYV)fr UOp vhV,Rnًӂ"v4.=m֊Tmu nVRM[Z2})cii@4`c}s^{~br>tQv{$z Ilv r28 RϷn ?-U," ɦ<` ZNl^ksjd%4LIJVJt, %b0s7#P4gWIgڞ2S"d2PN<\ՏQ}pK ,sڱڧEkN-ݲG 8f\v޳G:TZnu Ƨem7] aIP}=W=SipvGw wsp@ave]Jyݓ,H+}] Ԗ+W)Kqںo$%)_+gR"K<%tƙai2ķ#~-5ۡiJN_6ϺݦwTԳ!${iV)(, 19$:GB< W 298ֺobٙ#8f5.ULY&q:Ǝ,-ݒ`[^,o6ZCt-0#˟ʧNEKiz7ر2pOG'zY4Dž9g`,.Ű,=`M6i*[o?JZ:.KbF=TK.MC.Ao<1 gor9~^49d Ń\qs}9${2KcҒ[HQ=trK%ܑ]ܘ (,IϗʳcU/$7mݙ67ayVHg5-%3~첂Jz=)ea%ѼIR1qfsچQISci-U{G;} 8 a8Hjfԭ^ʂY*RބՔ]ièͩYImVч6`9jnJgUXCuFgn ]䁀qTGn*hnlRȬ|v+:[NMA}[WΊtr[8&+[C9eѮ*~G&mc=8(A;Wk]LU$(YC{3Pٜ.um+K"٤n+"ӷx׺/t=?G4QY'm602HVu}n $v$`#UG CHcwap |#bu>;%I] !s[} 5EΤ15u;}{V+`Qy/oږ\k$)~f*c4ASkk,(#r^j-֡wxn&irH]eYNC)6} G"]G_;xSlJJ[I%;Q7-v͍vAǺ/Gu=&^4U$JF݉6XO&6\Yu IM$71X62@ۑX瑘1'oI^H [V;رфoT28Gδ:vV9c_T6qI bF1}e9;_E &84lH9gΔw#F(#A+ ސrOlҐp|wl)ƔnVe끏Jo89M@ #g$r|T6:8Xjn[dr lؽŵի87ه>8Ii-uj}oP7w$cU UW;MUϿyT`R SS'wlPI3:E,X*^{  9wZlvA'>dR@9t{-cNԵ1G@8r߭sMXKu21cǨnoE+%A'$s9Bt褔O}73iZ|pǠա:bh*oMڬdR׍J"{3ޱy dxiu.n~Ye2#!ދm*DWN+vĬ]FFb 7 i]yyY6l.p2k Ko"&1AD끠0xP;f)?ZCtBnۍCU.nUZߴqbeY͚9pG׊VD`T##J 8nyeK,Z䛦9 ޜ<J,墜7Tc6⣞;WI.:^+b D~s6oWxX?o~ݣFwNL Iqm'BCI//:Nh[IqS=UF?*틭X@~uo&.IJ Wj *;Y>gU ϕhS41$ӯsTgl^np'LE@9򭵗Nr5(NS[ʮ[T>~P4]^өX{-jT6"`8r1PBs@Yc帨M5k*ris) [[䊹86 chSl(a1[`y Q}Xu5;$YI(yQO -1gL:WiOy4=>99f犈pŏ".Ү kP3cMb=Ǘ֣Xh%ᱶ'RC)帩 }Iחvݼ2rlg؝jV܋-%=:)rGBj6ђE1gD cw Kjij/$h qCU2Or>5Is.@,4{hљIIwKTim-.u?TqzLꭖPs9>,TkIWjr,zb[>~~[Pm^%'óm[CgQZ_|($¥@۷YkU_ܣRݽi[oRG`&8c 1"zFn]r"a :2qRL:4k/򢬏$/s8G)_Z^= DېwqM0Kq_j ]K1 E 휃ڦޥG_ON\\**9T9F6rƉve bxִzVYBlznUAswR{ؐDs2(v>By2\_][TLĸI"Cӵ};MWAt░]r[{]֥m,cjOOzrj-WSXYI%,īGO }T(H`s'q+N4 F}^<5.pdJ-U}Ac{nGˍ܌&]sugErR[(rIld1ǵsgGpά#UWR9MM[tfRHNQ!9tM'6WO*(a nnu Kk6h,p~!x&5k'goWE|=^3cNsE$Ωj-Otr( 20,3;w9_cT^l/o1vagi ~=ܪL$ 8qh}PWrb>9fRۓ{WCJkגxQ9L17^ɴiX-Yh8׹PjJnh3K&0bd`w<9?ֳ{!HfAɅ&1|9粺A44Q;M 3_֬tM"=eNcfˀEԅ2cKQHQX2xZ{=-{'>n>Qx:(_LcE[4#0 ,~sVLzLhɯwjcXVY=GnC0L+ j\7XݠY< ]Fk'].n+Ś4J >CZ`_\nR u@wg=JWvP /Ė>2}7> li @6 属;GEj]=Iq:qN;+7û\ROڭRAku./L:1hwrwvWqsnc,A&g(&=Lnriu {=7} _TOfۭu83t掺ZUFKJNРNqTYږךҠR;3ec{KW:Lj$G}lcllXqjuT.l.+h2JW*@ rş! U:FkYYB^xՙݡx9'i7:ʐ3kgtiʭ.HPкe-Or2Wx0;WJj 5m"d*+[L`,S|]Z C8fqVQEQzfz!@+q=cLX cb9kkkb;! q+qhR9cmһ2!U$|܂8sV:87Op:JJ'@ | y;{xneF9+Occ(.W_ja6,ǂJj(hoy 4xJyqx2wc?J㌌QAb0d28)'CnI\?͂I=̫Kl &4zMSpyyUN2$yinC]n,/Վffe?wfJ[oJN} SʬwܓI92w$ Z.I=k>1|zt%[zU`f QUۖ>̧3Iep`XWSuSSzf+#Jl-fߡAMx@=N;zMS4{K~[f%Y{g=Mc-llÌyg$g*JMNY ssM+٤JewQC㈄X#UQ֚ҵ.Q"07;4K>3Sڎ[h֖kaX's嘒Iz'猊NTa7汦}8a.FA9ʴ_i0r [4l{dVo߫ pE"=l>S1K$+n ÿ-;:o7vː*DIsS3FdeO`94n8J*uom[wF>}J_ ,Χ]>]r};W(imZE%AmeQ?g__[)ms9 2>XK} ["hE)~NI/S?̓:tn[K2V®NxyW;{c՚zܔ[v8Qq+wV|m4GOTͭ84J;NxgK;i=KkufEEe$v;A];t*Ka0۰ǿ#YΗK]{CR[jĂXT=&OJzMwGpJX;γz6$&1 qMoҴ^i' K7~GuR8Ԕ&hݵ84ޕ+5I[-9'YwG+lmf&=Qz}[6)1ǾsiL788*@aCYgR-xW(x+/oF4V뺊nǷ9>GRyrif7 Gs^2yB6twg<. ,ؓҭ>Dz}ޡr! caS|׺ jwn p8WV:]}W,bOʧspi(IS>&tlfnQżF{]ڴiZ|ų5wbj[fA{AeswBT=qڲ#M껭@fA*Z2rATi;+շRxcLNj [ӮbmSS>mFgKr8Ʊjs JKI"Vby$y2WG-:8e29l`dT9_j(h: \>78+]og\3Bb6`.yTJI69k1V `ۼ.|d~zXO#,8QZ=_Vd?K2f-DѮ&ׯul'sƒWv$_ ='*5^I$  ~"&-\WȾQYW'ַZFw}6̭+**n\w'Jr=lRh43;)}?)ܟni헊M)c6"3`lrW9wI}KgR&co珑"aumᛸHe2;>~ȒI:l{u~jDcb6$~iyYXq6;|u@ )>rc뚅~Dg/PK)iO%ӽM!Sor¤aJ{":]jA/Fjq] S^WR:_.=)0ی4{ 4Z>qo$wr¿{\HbF9S&I2K:سg-Q[$o *i랳Q%Q .οAu^α,8ݥ˫o jn$ $r9*QKi廌)-Fۂw9UQ`{ȑAf@CCsZ0i٬մ{;\V+,QWqڳ 趰֯qsg0 ?\ngPB[ky~J6~OlE ##2.l.s9[+A.;ĉ .<}%.vM!Ab+WoԗVϺ9'BT#}Y>g\K.0KBڐF p1C&+l[u(PN あsX;Qӧ[Y9grq[mPTA{Ub21+FFFIEƋ:=bM.U$ W> _ I 7\F^K#FDWp ^3=?Q"e ǎ㚖٤qEк\iI zytv"]#)!r@&j=?QKx A'8^mJkm*mYYaUY`s<϶j1v<^DKG3Ȝg}ϕE-MNbјE.yPO8n':[VrB'*T/5ԴΓkJe@Zd5(ǹy."U7NM.6hPA')JEyPL~%>^Y %߮c`HF$ GlRiRS:mwZv08# ֆ\˖osOOԴ&@ppAq[X$Ӟ<: j"(x,! Gqr;KxYe \ugU]b-@x3{dԪG"Qi}kw߷w53U CE⼿xcb)9qMtՅ֥Y>ɝ$x?JԭFainrĎ}q\!}=ΏzE $3NϯL\Cfloax4 [SD\D3N< Ėqʇunj.&i[vaM0@,m3񴺔$ZFr LL0;|Fu B<:LžszNړTk_6u`&n~#Ϲ4lhVW9 }) nY^ۓ9lQVޗwꢲ8GZ\kO{Y/28<,\OЯ.K-ˬČ|UD^1n~沈ԱC[/tmVO5Q9 g#V_-d ēzuTWw[\4C2OlctƭC{-OV2AU7(HqM.4U/zoS%~zGzY4> L*Y.qߟOsBo⻔HJ$! أ㰥[)y)Qċ{Q5M:2!4xgQ)h.v}CSk!6mVp0GUۉ8Gœ W@l=d; ֡%[7J*fTcwC+c; l?ʟ\*8>U/"934,O}dkq0lG)S,H%QݩK{۲gfZ[e[p܌|C/Nin Aq+0+S $y\NmlIxjб=1.^YQԮ5{qp¨T?M ??晊8θ= If$F8FtϪ(b^}?,r ܟz=~p|Y0[=ǵRN{o)u_3|uqKQEt" ((P: JZ)L҃IELIFh")sI3@Xd@Qڢ?V89c=΀Pbpyc\YA3ߊ^u|;W"/ J7&ȫaʟH 94=iU{6+Dͩգie{qw2j +B|]dpy-Ҵ6KY )ǓwlV۬/(t*`4zף!Wh>㌖ %vojF޼.[Kt#`<Ӛ:UG!6ڽ c62Hf6jjȸ>zBӖM[kZ ϹQ[0L2dyBҕH[[h?&¨鞴zvG҅]ɴ@#.dBI=~dswe؃٭}Nߣlv>uoa=13W#ӞR{Z7uVkޝkpD&iUU%$;}1ZL%Uް8w:OՒ(,?I:tWvm~:u4Θ2N2"BvnRJ<8_eX|U$H:Xũ,,mm'ꔛoKGI5MOLѓOy7%Q\e4^׮>`SpWwyv;e9A\`}j˦y|3sjjz#چf&1+̹,dcGҞ~~Q]ޫ40 Ή01( &I j4-?ė~`lqZmm.,_- D3 >eZAwZZݿn*Wv[[m+R=rvІ6va pcH ֋|G6ݷ>u>[νb{%>іm$k ʠ&Jq\jOdׁ9yaXxxQQ^Y4-#GvMj1 ul54t].+8'Œ8w1v<Klf9Аp{y#G)SWZ^V}C#Xe,6JfkŶJ<*W5mR"'U{Gm^݇)!\SY1?-G e@}GpiU-[N" p+6vɳL pKW.CUivWwiM q~Aūt] d4fU*vv'hx1ZW!r!1;uEMҲK"Dme[j:]T"o,FxY]ltc/?\T>d{k7 mETKx\twZt沤|֗c]6Vd쾸tX#KEcԂcT#;>uf3n.,˹0R؋2pqN4VId,sUyy\4VoTR5?ֽtNI{6,ܪ>S 83Iȉi]_Q'IYCI'喟A!P=J]xxgdqqRR#` ,Z(AEP QLTP>1H+y) )i-!z/Φ*$ t.9FFjj7hWʜ#ɯ{OxB9#t@璾nTpxLl1jBT l9sC(R7Y** %O&φ\#BR\M$.vC4Xn%ٙvx ̪QVW+jVw5xOO'TI%k:'HK:nUu'O:蓇d{Ӎy=PF#9uIiJyW> lT+'v#AI[EVҵg( "ypj&x5\fzbJm2%2S-( НXkwAsiy71ќ98#:3.lt!; ׹ǰ F.Kf3 q ?kG֣\I*Q9M:d-}nIQ]]@Pln<uQI}^ BA[+شMr]GVZ;P& aT/z4>]zkhaei$F8H]863=j6e62^5F| s A.^9#.(li1psi5%đ\ }sn,T"K^đ ;'.JQTso.n@M*#0^EČ.H鷶)gqlކM-(-Ï2r1 "חb١XW%>F")7Vs⻤nN 3T[k~=Qe66)ʩOzc]29pk5!խ[Vke Sr}~ڵnђ:NJu=N62 $)`pJr?:c:~N=*/7 g]"}eo%\s?w*]ԾK%Ւg.n  yEǴϛx./e@] @?Ҵi扭5΃%ȏNAV#jYj*?'}W*{5 2~(SuI Se gBKYcB ҥHUI}k5a^J5 o7m^RF?53;lBd*Um[Fv w ս"m_ӂOK MNUUI|F,ZV˕H1LZBW8@ǥd,"/ӡe8Ԝ*NrO%h֑C.&/:w'8ANkmWN^ImiАqNVO6V[1ܴHcN;\:WvVh:oL2# Fs7*8hqk="a}rl2~ì{n3#`ܣ#+ssO$LYʓzvYu9u,Xy&YSTF])+/ƮtۦYD.*Wf kn?eDVsQ?dFKYe֥7 ܝ =)hknm;dXfb=>qڳɤ],VHn#ՍQZ]/vI+63Mq,n?1nⷳL]6e\֚8'͒;g=Z(,XjWhīnSygX`OWZiμiu)[r9ت>vظ(OE3#Sy]ytw\IL$Aմ{:2[\J;,VKq 3^s[Dumg„ygcYuCXparAb;?:O:@OקVf 3>ҡ흵emv-U؜as9׹9%Z"o~*ǩPzBC=T뚊on!tf22珟Tb2SOK[ a[[،Llq&&N<6 ǧOu-ۇRY>Yiwm\L*>~U%l75Qz<0|+ y$⺱bc\U_P8ctϊW<ԃQ>Ҽ b79YYȌuDD;{ Y)yCv+cԻǦdakb؞讅I)1Z::pDk^tdcyRl `` ~ӉWȯSĪ{Ú| *|.~Lh>2)4Z[bb = 7 -U7\@GUY([s2(0g suGj1ZHӮ|\Ճ.Siiv ̪aurtyIg!;8?l髍zeUB_,pA 0jGm ay/i5bB=:i _\ŲUrwն̰s>T/G y{=ucT(}݀ӚIX)"n^F5'N{OHmrzn>K+yv~8Z7,jv4uյzQ #UNv",Kk,gI,RI@[d̓1g'RJ>X]GYk+oǟ'ssZރ-uI ϥs? uԴaɗ:svt S SElzJZ(fS)hU Eb!E-QEQE%(4 bZ<5ʦLH<F ۚ8ҽ]PW!N\d\{]_HWc dpO֨ⴰDԵ9Z6g#xۣpMPaV*ެ~$k= V0X'Ytխua4 ST&{~4]7t*NpޮkMe529ޤpqb̚]뺝lg<fbbx j1-QIc8# 93RGF6JzJ#69~{nqrxgI[XF~}3A$²8R|ǖ:CqN ʮ4-B=6CFT!~g/ LK)83$当Pa:)m=8ބ)YVKcok[5Tji'I9\gI"=Ж CIT3*$v9w,63^#E\94Zf-5tBuWUMx,z [Jy3DoYQG\l_ncVhO6fu Nϸ^emiV͜P7*#V; aAWrC&,h3d!N՝VM.83] P 6;xeR5]YiH^[ Gr d(wFO8x⟰8ԭ3vxOQk]ܯ>qF(5e)r #/d8v4:^s#Ţ7e2 dRuvk=2$(ѰW'ϊmW@/D{ R`6@Ozr{ndˆv^ >mG6: +E:s[[(Py}+Q]Qj 1Q6v\^gܚOjJ1QRNّ$ y8GxױIخgݹrsT\F␑)GU ,0Y?0Jˑ/}8Cz|K_̷YøtR 9f GtrZuC*2iAMs?ڝ6;g~^w׃LY>5,mgM-RsʪᕥP3gA#x dy'9EyYdi6,I#9UgF#%456[٨yqn0ޠ|5_^˝=gP `-XސKH<1TO +mXAy cp4ҽ1;wdm4mtVmFkq6sڲ=gqauwi0#h'=5F:[io);d߂yd,QQ1y=G6=E{kԪ,GSgQߝ)$I'"x 9B<:R j<]<+/+Wsv#gln(,MO[At@m[RrO/zsL::Ymc>ӗ>}C)Hגz׻*&>TG'x*ۂ=A q{E8:7/xX|OGÁozkHac{u&1,F{Se-妪^JS05nzQu-3T=B8y fEC7c֚m. ]UӢ3K*N>&|~{˻m1ršvho `c+Ew6Iz<7q]? Ԋbu-6Ƕm<|"DZ+/?\o 6v>rNLܚ5)>Rb X&L}'gyfh  7eN}MRcKޣ>z}zg50ž<3M8GO OxIA4aIKF)z)Q@Q@Q@r:@Q@>t,QA ZCC8mӘH(i4K;:P;WQ:/>e~\D5ST"ۊC u9+Grk6bɾ!X33׵$%1w]}Zɬ $u+m8|-?U+ q,j#|jIҦtj{xKJ̡ҧ&Iރw2\xJ98zU;kEKDudGed2sϥE:OQ-.%[V8oB;n:5[{s.#O'>g~%lM,[FRj%u]&DUȬ7#`iGҦXz`2DVgp㿭soS}[SƩYc\y`UZΥiPmAoJi#P.o+ۘ Co'pG95^n.J9$e@aYF*G2NtrB*u ךt;GU,6?ֹ&zi9ñ)̧kzz[hb7 x%Õ  c %;ѻ=3懢%]_ 8emfI!{T~Ю:QkYضWr9\nB~)IZJ&9%ZS\YoNIiOuaG#޹7 /:`KxYR2 " ]kqqfṟ\#ߵ1:j7m4*څ >wuBhoc6$jOFI<.]*U[de Ÿ;ZvntMU!>I8b|[P%2FGPYTAyֺ XmH[q4R[)Զضsg WCy^`)R|N*I˅P>Y[.-Od5U)$ vޓjz [!Wśi-ҴW:t>>Qn]++ ۰ȡm;9ܛrZ=1[Nı" k'| n ZmmPAhAeyǕs{mŕM!nT^N{j9Dh{ݧ*#8Wޝ'Ӿ.,'9{57HoZz*Ed7z8*mql\GO'2YkJ^262WOsVRϯkUP;?\jgK#Ȑrd>t'crsRU Yiђ Ī{kIq H [ pd@squޘ0A Љ39OXw 㑿 Q=-,O7웨'-NP,TҬ-unmh/o/ ϲV])K E$\fV~*wW=Q՚p8Q U-~8I$C^^PmKh洹PvzkINP[y$y9EQ?ڞ:-m4{j0K5\Cǿ>U;AJeޅeY6dq#In\>අkC`jNM)c/n[mv]iZ]]\#+y7ۋgn3Zu鿲?Dﺅ?T®}ꓰ[m,ÜT{j nҪz)<{ K{çB (џ'aN27$,÷8HUOzީ{e}̣[kFQ+֭mq\ @ ۡBɴxƽr͑5#*"A5UoOrWlTY-dX# GΑ[ҶdZi3xL(V{ Dl  #>*%*).'5ga|۴C>Ԟf8eV`Y*uޛN4TB d~ȣ*2^ s+K#Y8qڼQRU. ß. Ip *tӯ[l˗8Ψ$ҦR7b@dQܟp0ϭ]EG5GL[;ZwG╘@@J+ KŌ%gXwn78e  JW8pvk//u1q~:~e}d܋n$N|^L[}F|qw  cEunؖIznT<֓AU*FFJ*?7~K7W)U_SF:}m#qQSI: ve A8#;ԛ 3Das]j")#>IS{TX53wUV4$'>fO)L=wVO jsݡ1 ϙn]A~1Ǹv5 >tng;qlZVŽU`\ShZovYv\q!M=io5v!yd;@Ӻ,ELSm%Ԓ䣎Mi>̈́,A9n3Xt6d8AQUw*0IiߑFI*:Kh:wE%h3yjk{S_RT84S&Kk*xW$2avQ}V0ͪZ[2D[?X7M౶Sqv@m.|ܵ@!فb:]^k}2[H;L{e]Kc}oEVwq{zU~ֺlw2G"@'Rs ﺈGRZ\Zr.{piޮeQ=Mm9Vc$m:(np{]Olt(6Hm%r1\{0a@A`IֵO6(I8cVs4La}ll/3CB{BL$QH\%)bIQAAEPEPEPEPEPHii RKH)hk/"f{$xf}SkgKV$+iӚXMw|'EHP3&'ݣ,*1]rc~+Mt{EޥYk19VeMO&X'#ÂSyPK+K.e>}\V&q*fE;FFU_x&>*V#tj&rѰ'?JݺG]geofe\`.ofú'rxDFyt5!8]KM66ZEP~ 'ֲt:-!u>*E>uh,p2UF{ VN)7ڞrm<8#$ɬKk/%X$ [g)Z5xo-fV8,<՞ik+^\ ;QGb(ot{0XLK`>5 1D\6q{ݼd2T1iq3D #vr8 ǰx D$c:K sjW! |sʟjs#μHՙ!=3M*gA`{v[A7ˁ(WG뾟԰)"Si_ ;\ts@523 * ';O`ciCt̖fk6`;s]n7f`=\])}3?uinхݎp?9Hl5 Śܬ=v85uy=vy C#E*NWF8IQ;Z"g*JC\>t캅Ȭ}`j 󊛦rA϶6uWoEuKQڬi)hp_eKɆ!NqD_Ӕnkc[M2QkYYԯ=2+-{R>:|u6Z%pZ.7¨r86O"+]6@9MfWUVLCV='Ӻoq7ojTqڶ:Sz͔Zn[HO"enz]{mR1]xr}jRym1FŬkvD~$9G zW=յsSOvcUUBN:heb8#UY-kt CiI-*i9.U4vuUڹOY^%-ej8VRUA?:i{ HY؀<59H1L=:3P[μ7gE{%O=)|({WiUܼgqڛasVVZEޠNGq=6-^m\Ŵ%X7fSAfYt1Ygd$Z8ܱ'|HZ $VR ` 'քi3#sg)sw|Ì[@mf'$ \i0.ؑKGyK QTC=*5圣V> ڳ{Z*չa7%uOue~T&_ULI"Y+v8EQvGީ;R V݅brXsO|zQkz&x*Gֵ+2Ly--8y3BZȤ:5B ww?o%eRCl$01V?ǫgK+cmC͸$f͖5-p8VJA>ԱhG ٨<$' vTr8'ljÉK6 c*wNkKwݪLNDKSW)Ҳ]MMw&bBÑ|9-ԋDdԤ׭|Uf23ݱ0۽%>xpyPH5{hEGՙZ kku &o`. p&wD%q?@B<rJA*/LZܷҺZZ' /i'OMa$[B gҰL!MSqnN3W}161kQ:`fq| an;Crq3o.iM]aiZt]8 5=}Q:ר4k1[ٵ aJ0򭦝9Ѵ>Jgpd`>]Y.HV,4!{ir$r= ?j)ťdǑnwYF鬲)lv8[uȬx|t,y,PNj QI%g kArL֬2i*Ijw4 QEQEQEQEQEQEQERZC@ QH)E1DJC4HfwfgV~Bh#_߫e\prUHc+^SڗV{5)y%YD+rMbBtax5IVrq݀ zMԵ>,gt $1\~.Na*]Ƶ,GS84ߴRZ[K0yH*X<uu=M1gc\skQt/$jaU-#2>&}FPx]e61&|85k03۷zn) M*3Mki4(P&%OX v+hmi71@OÒx"tQt|H1=sVKnGx˸#Kޚ;xy޺Pw7m.bA1{u$Ԟ[T޲sOrg_ZN +5s&n[12QPY<ެzvN>"iU3'ŕ>wt\ A'|ɩ]Eғtݴo !9ϐ弶.onmot0\y qg$cCMrDOBxBn Yp88򟻩G٦oAi7D+hak _ b??ZnfSA7^^|1 aUGeSyA$oDFI% #;V;@jr˫IcA3X8<7[V{$*‹M]:TqzM% H7XU%k,Nm$HZfp2N9?Zl*oU[ɣc^s1O2K8CY0*9<~M2RXȌm YoG?Jt]Zoaad<+O<ח]IxS+&`=ٿF@O8a),ſ|csJՉݎ닖)g,û%_sT!7_YiZv&R_6ToiCqkdsU;r2F}'kDdI k1}%ͽdfrjbr̜*( >99: YFx y:뱱Wv%+.ul>Il}>TxVktf9fȪT4?vR6ݞ@B1uLwѳƈ>*VSO{ymYC.N4[ҶgFGcVf/YVaC#zOO_kXx#ll#yaR-ѾtHm!G5Zc{WC(|?.VFB }rMWO^%F6o 3)ź)j=͙'[tKL ^ZV迲ʬ EN8/HMϿ4^rhSvݨ/"Vvvi4XVꎘ";ĊX+uPXuJ,߸eA>'Ϋn١m4H&ݠ rx71ILn4vl,9i)'I`,Вj`@ j$"dVcAVi3Ί6[vqޡBEC({w*B=5iRZٴ4};N˽GU@g9}o]`K=b[1K"YDO<0*_T:_E 6_{-k&k ǭ):FC `2x Ǽ[Xg9F-j>!z}Cd?G"H=F)jQʞX#?:y <4q)YA}& G yV;%*eab>Ux>w?RREȴQE#@((((((4P&y꼞(=iy=+'QI9=5:wh|@|m7 oVz"ۥod[UJ;c Qm={Bdv|r[O_ Kw|XW:!:bFF}n m+IHħIXn.uI.3]31e['NtîM4rxT2=Oۖ9K=NpGSnV&8:?UeuKv<F2HՕ]֚Amo8<.z N![;V }I'۶k\cZeGOXh;Xd'oe|9 p 4U`dAK=c ˒E1{wӗ>/#a4;wmr.)m=&)G,05fѴm,앷+\y'3ڦ| v[zdK$ٖБ褎+h]E:F @vʪ6'Y\F#.P[v)lQ gph$W]K\nӕaSQ.~c۵Sjޣ$HI`gy%ܭ+`;T@9^9.۸3v+޾=2ŝ$&(9SaJ|Dp;J0~Įjߩ8m*`8]H "rs.}~)oK!,:˜˜RkK>=!R+Uo */3r}+2 5tRonhV8.:18^M6Kx/||~wsֿn-86E[y$#j_4Q[M6ZíZj>!Cvǵ{߭"֬m c$~{*Pn=b6ɱ9| 3Eo$ 1Ut9Q}eίv-i>;x}8}&lmỷY,;㊠[[<+HFd}*\Y2*bI$-yx,88R7o/dB*F*/FUD`vU>|DD,9)*װ#a`UIiֺ+3 A;G6mQq)gcQSnVnF4)5h- ӈVSo_0j^(:eH\!l핼SFyUFI4KydeUH ]Lʡ2 ZmУMzcUm㹾xX3qu;EtK}-.Eu<"ݣc'r|sQd 0=Rp3 g /N鿼qj-vIXGqϖ|C]5:C%qDN_cm--cd I!}*sSeglI15qe]]X/Yx?cQz{gި[lsMQ#Jt[OMF]UoVD[rF99N\e&FOlVi۸}8IAXt땔,F(NpwpEY Ywg;j[-q,Y=ڷtA/5 pU8oN4{3mb壚BiVS3zAz~:2[0YX@j#hW Fl,lf_b)9Ͷ 0/lםW[]FuU 1ǕS  zNXDBnJIDeH.0I:ۓ:N;< S&n,gDӮ.VA1/EqFDeR[ΡNZjnʖ1@nf ˊw:*\aI2=sTtq H2#*mSN/; 5f@<P 1cRzGhW2"k;n>x"ԍކc94NŖiVT)mdKݖ4U2=xvdFܫ)a]}@*ijU>ϻ ւ}q-nAM+0,MYhP},evF$x<k3H5;KF7Y;gr8+C}KIlΪB(c@p8<9e@AƺZ떺gCjegLY#ݏ#s9\8Hgf|欴B{kgNPj AfI险8\]w.Mkl `0A'8Tkuo,-FdRYtj U3ϵ]ks5ܭίo2ghyX) M7hP{*[iu-JVOgQbQI={}+ 7팎ǜ?_Je7FGnuܳzkUuMoI vCB%f}:Zβ]t-T'-@WYi09*v'j]^#>E284\5Ŵ+7r}I4K7d1JAfGjcSۡB!t( y|Gǣkqc8d֫RVE` 6@9NRͨ rU-fuF+Tg Y[mELŶ0v$ 9R ɫJ(p˽[c[~z kvtx8 {gs\Y1OYFב4$ sM4xyc<6WJ]$Wo-8΅ ߽"vqHsӽGs\',3.U  }9FTaO?J|!F;␌1~5j~Եm*M5;w`W}FM:mteb*s>UJ-ҀT&R;3jW2\Nbt6KĦV{ ZQKV[WPvn >gY ;^skbW\424131$ROzQ[ʜj;g'on-w|keuTH\psz=.ydFRNѼ]oO!ٌCIf#G9_L}=W8!OIӛ3+4_w=ī44˟9=D T烚DnA'=1\0bc#9FDԄ[)SZ=/Pk){k/ֹLWH}2)fX!*(xX꺴fI3jpw4-%uig-%8"1cmLYoBo᳷ްd.GJI29S[1I[Qxu%|>+ʾާʯu^Co_ "TҳzN(6_A]hi_yreTUU|411[׆h\c9} Wq.X&Cѓ#wW^->F[FWoPVqm: y$6:իhI po^Γ4.(W|rhH@G}:KEcܐdɹm ǭyv,>]U oy$8u@̏lϟj_p$jz `}9\zS88ϕpR4 ne6,{ i}j.?W)D(¼lUIП]y* |[HViq'x8iԻZrdc/p$J`y#<8jHBh|N6]tf~^J6ɡ{`MYj`ku?ց`ڄ߰R+9?zu8n8,G'ҥE_+ƫʌ^JwlLӧ%{; 1-gqhǥyUwZ,hC€3sW"UG%"N\IHV5+$pr5\' ] ;%%I-ȭ 'sR*tˡ^0T+SP9ڈY`;]8XHZ:cgyGwiOA*)'"ߌ]1Dp>Tyk;I sH<҄#LZ˂ H{$0kox4fE#!lZ?Jդ |+j6Mߏ:߀Xܓiۊ'Sc!ɥRMA3p`SbNf4\{WVb.zg󴊶:_K9H>$ bS_t֬tMbagiVNAԞb_bQMm;\ިү,z,(Lz:inbYTw>ԩ{TL/~ڔi(x|E3{k #~TTC%ҁc)WQQ=&cL1#pk$aQQ4Rk lTO5S[Ynהѧ, L}jA"|_Ş#v#Tsr¡^kar2Hڪ>Ez*%1HuGLE5.|A?9ՠ ޽ sQq^se\8y[=Ƽ,֐hqcߕ( ECјE;s6sZ׺^Ƒ%d'*hxcʔFp׍.8}ī }.Of930AV\^ZN앀qڏH ;Ƴc I;^9lMFsc֎,LRYO*](jgc+ZlT 7#:4p /s ҧe?^G<Um% 8Ot;(43dFkf-V4i\o*H]&VmMjFK ʯEqu>"GU<"GEMiH(ho=!m3jTkU$=2UaEpt;K1?qV*PE. Z\}k)&ER,(((((((+z>t,ER鳃]Ր\FՙN|:̐^q7 u2*{ Bm8ur=zB2:sqXY#"Fr~J;1LF/ߜ9)յ-s1`1Qhniv0[ʜ`*FMԱq럗vXy rg۽ Ip17U_v^BX "̀D`˸#ʞLYjW",a^NMw|Eg1lnb| *٦+nm܊U&Ǯ8wp.r#8>tܲA쩀bQSisqX ;ōG: ٍ.MJ=kiH?qI;3Xu:}8XUEw<* me#oċ#9 FOum Fe>~He BA#'RRr'ɉ4ENyiHMG5$ TDsNEs? x??b-QCR(%#ˊ r9R<5|/z_ahgUPsз0cM;N"R$q9*_ )Sa44'h^O{:s%3jy4?lLkΆrAϚ[HkɆRГN&bF=NkƼ4fmn?z:c䀬`mGxX[/0(Qe.sd @Kؖ1>+;p?/^ż+5 ;YKs4B ^΃.؊$?*#OҎv?c9R?<Ԩm1' ݄l"c?>/tݨY>"+z`b>Gv bcOLSU@>:ZEo U[Q1E>?,:in(N֨@py wj;P"f#XivI>~4(J(۴9A}'Oz})J%6r"o = (1v*Ɲl|%Ͽ5Yێ/V!vQ@TQGj{F(dQ(KǠAh"S (8 \ (-v6 N2h@"HGJ&h }@?4 I 튟)л"O,{MACLUB99G=Jy:j]:F&];/t]yʚc`ϫ(5 d,׃&piUZpha8$Ǚf<%T @nǰk aClI)#?ⶢl<5Wd=p H" F}m"vD Lvd*?ҽĔcjN~*t?1؇&#n~TY'̥igEsHˍv8v~y"Tvmb8!A5?Jڀ~R=E V"d+Ѕq<њtp{ÚFM1o'/ . o2+ص>l*EPw~TyOEpP O<ӔS[ݳ%kz 8-^[b.LPVZZLܾ|5۰. {? ÝPI%r*1oLG+VBjAogqk9#cZ:iծ*;IqMJ:YZFԤ127 t],J1+umJvM&nb[֑ߕ  kXQvIdq!w 4.1L>ҍkj4}JkiNى=kk{jw6Wui<9^ն-?qVsop˶.=Ҍ}k-ql<9bݭm=gn,ʯq K~Jڳj;Lq|_q;}p/I\4$ >GCz`ծ[oQZ[2w2y}q@9 OMzCsssZyF{jBJoyik348뿭zA(w3Fk.m&[5lz'yB !BB !BB !BB !BB !BB !BB !BB !BBA zH:Dl)\7 %eL $mkS^bsT0Apϳ. 5jj{טK;Ar 9+78[5?da2{zVԭ02& l`R!3} F MĘiZ.#.h+7xe<.kt'tf {uag}\O-͕n9v"3LB`=p:Y=䓹Ѐ:9b'{cNmY337Uit+t,+Fap2w:q[@rDz5V\+Fjf,;K^ڇ] jTqKS D 9Sx2_(\Tip˗V$iDEqL԰G4CUҡ>襷G`TpZ jTF\sl\s;Z[R4)HtfMkRubw4jHhE}TZa0#5'D>KF!l .ukUXkq=4*>sKq)Vֶ8kTmqJN| ÎvSJEndeKg{tk:> 95k?G己E^_:/wݸklj">+~6W nhkȯ6s*^\I-{vm.uSZmօ|;gΥ̿n>pZme6=V[\8QӾ`om;>)}x?ݙ {Bl;ekq<'[T}WoX0X';uNݨt>\]&7^V:$&ӨʴJok!29nyyK M-R69xhW^Zt.4O>"cFm/ANPw޷Ddf,9%}S ֗8 )Y}[• bI;8()[XnF+W-;v:]Tt| ,ڈ[ ]d/Y.C<7,}RCMǸyBZcJ,}K Np=ķaj[}un񦲯ҡdj_Hø.?j[XoK?T[z818%K\?fg>Kt!^[[4閠G-?MԦKg}X',r;uGJl+ñ_InRؖZyutϏ'gz^zľ!jy!!@B!!@Bs<NX)aHScP>_e5>*Tz}U>̪107ҳOUCG SKf4{ NB~4=iV3ÂQsGj/$S|ڭ+9ҧI~h ?CL|[:-ֲ'8c}漘c & DQ> %znK^cJ4hST{E00szBNJI0HgWRGQ!I!!@!A !`J]Ci}9&rےY| DoHD\-2.}R5_i ]oIB|ownh/;?+$|ow#Ez]oāU ·xg}GpC11}S%<'x<3BMb? ?҃b??Ҝ'ZSBMb_?ҐcxuO:%pcģKJ1H|Xߢs.5~N ?}0P}0%q7ܡq%]Oë·tާpR?ΉΗ;d.+K(3@6%n$cM坪mJlM1c9\h>$F9I9Yq}7i1/bAͷ-XAqbs^ї`]]⳨ۊN~="?%*4 ;y豞 -Z2}#*t;ZҝX7}ysLIlZroz3Z Z  hun vv,OVM(o_G~T¥}⩯F{mGgpc/O*J#uBҥ*#{3P䘯AP^Fp GK.u'ӪHHgS+,z z l֣gw{?NãXl'kqPK#PkT/tFc! >8 !BB $D*e$jhr4ْ5$]D\oMvq#ǯip;;TtCO>=$ߊN!n Q xu{ol_Uxit]mImj4WIs]ndi녶}*&A].7 Bʃ2>&%-#.,+O5F mX2$WK#t溅J.qqcgڞڷnhiA0\F2TsIs\Ti./,Tj͊ꬱ6T(1lM껜?5: /K2'oBlVI)C~32$>P(çR .L~˿%Ytgiq2_#Qvw+yJŝ_B6 ܶ&ͼPf(ͯr"9s:?zt=3w+ތo mt厲e!9u&A ͖ ):&7U˵@~Ps2Z`0ivFnDs2X@Ԕuʭ?kbZv;ʯIhTH*_4L#7$*B:[4qFq<t~僫28)0}J3:`<}1擬CVgw%3/שop־-*k{fHN/,hu;EtM@Lb j8WVsAL:jmӦLZx57 NZڅih's+=nۺeSg72;ĠWxgtxg~f]$="ݲK7ZFVz02ݵ+ve୶mZFAq u\K\来-Z6AyΞJ7!u/K$fmӪ6 dXK!RѠ9arZhu:}hFUnZX mGC\G<o82IV*8yHxŵ _]/.[uYS%7 x~jw5(; [>~8%P஭ܴZҥ w5n.^M:t범T%$zNӧFH ڒ{Gj8%Y棱 A+Z$Dh8t[?>HARKu/ĭQZ<^ұzW]ôԜxmF/ipmsk#Zც6>/"*t4n\ i{Lig?Uy !!@B(HJD!(N 9R̟/BYB T!]G#av鲒{"3m鹎@u!tNCvvhI&OI))~fׂ3:&Lk!$x VI(.ӹ36SfTALǒ3qD\A )HnGָzfqkcB-@^IJB7TJ*=*4B/DuK5_/\$2'\ N@alAYsJXFE;"$u"5QNѲwk,oa:ar})yuK+> '++W}6LC hleX bdߐSoG#Vhc*|ڝ;vַ[&b-]2ݴZhu쁦qtڣꢶ:n_Ue:6u.ZB~zFjF&>/:巣TeKv7{-˩y~ՌRN<=]%ui! 7@PRAK=1o[hb]:v&U=#;/e17i{Iw1^МECpݔEÓ?) 7ɚxu>zmk_UЄdBB D*E%D@BVMC]qT8܁+eCA$;gi<:#T6HSkyYFߤT=GlHfOW.N3y5=/\ TS1g.n[zzi\V뫵FcVRN;WMa_i1$Uԙ⧪u0OcI4< IUh7n';[eZޥѫJ6s3Ge܎ʆ/h ResZ.nfewxd= e %V=.Ԯe4p-?xԤm[5ŧG4D *=Kj:- mG4ԪjT9~#(*ezrVuUt0*vX.~^cCh<רa0`?o_sx"dHB$ @B@!q.?_]q}/tbTP9;Se<JH\eےB{Pdu!vzi;J8ޛBTnHcF&BI#]Rfc ؠLl ;&&T/PTct։2SZӹR) V>D& 6ajg Dw-gF`F)vWh%׏hymՍKxox9chOlK_ѝo-"Z{Ѭ@F3O'zuI}'ȇZSHתJW0ey՟^^~j\055WDzh6?ȧ[>-ҩuXpF%&7dpE֭}*=6.:U+:9-als.NKZ]ЃDQD*7>cjc@ ounYLA3^wѫڶtjuKKb4o˿*p}^=#UjNF1z7֏N R <}B#Qx?;섓ꠝjOΣ3S) JqT! $a(@ ! X4t4մgVf^4Vu6 O䅒9n5/nJ֡m:o ]'N Mjtq Js$hSZ9*PC%VYiЍU}òS9i@h9)j.RkZ@l$R|Jg! $!ԷGNQ)d[#4Y| gv7Hc[OALqQt9[Ri< 1Mp)ABXEN-(S `P>Iy!BOD? <,!!p#d &/*op/d2W؅‡T՚ݻ@k0,>[ ]qt${w%c4˃#9z-yBـ'`9_+(۶' , ԖSjuժV$;(a1TW75jsC5J\>3o#KFDEֹC  ް@ӹyM I9r.P*4<6y}=~Pc*cΙm+k&pkQg/KDuRF#e{lp!ǫ}Z#|MmI\*9Ǚc#?XBPBHAdBA@RPr@A(8,aZbΒ?RH.tf ~D^ $/5F͍U|.#s 4ح,"ɵ{TSd 2b8 *H8|5FUqNh,ɫI$D,}(bluF8vO 7^I~eS^{@xsh۲A<^淮}‰InT⑝Pv'S:H$i$Gv4ƺL /ph2I qs@ #v2ג7ė2}K\[S.馀728LxV'_p=p.&>j[VxNެU:k,c xѬʞKLI'F5ծj.sKA&t]եlll*WTwбN{9eRmWAbOħRw|t'g?=VG5y @^EF{pt[ ՃT)V6Kao*tH\yUW*U +]Jg8P/AL)cI*B.'io/+JF 'PH!&>*MHf~TEiꗂi*J5H'5ntQ]\S$YBX@{%JA+J@TE]Yiq J5Q}+Us>$R~5gg=5:?WcKFBk`ԢP>3?oZizS;33yo4 pFg&BF;93du7.wg<`kpqFbisMr3;]s4K䙜vK ܂/JIxG.7΢yx ?ڰ8]S:Ç5jǪ?BÙfz[?UTG+OXGpeuPE't')qyw5O~q;?J! -w]8$yZ,^`;kfilhA3q3)8>\KE*jnǴpl^ˋ etdi-T'WGaY2aմe4껜oJAKte(5Q3tV=$@VxOW+a~`/ςّHZKdm-ϣ_<鎸mmJ%WukW# S4:spkwM;vٔI.8/f­eZԌ-tsk@Q9}}o^˃ip~(H|*D B %1)';u+8e΁;TLWŸM0'&Z=L;R9@OvsMѸVT5*$A~똤nP^z/k4s4m%dnB%+ Vtwz{\{KIek2GMWtNUV>_?ڤ`N|T؍x(NR5DxkӤ9#rtI2gEtά :K+bʝ`sʌ3r:jҫn\Ϣ5Z\ǹhbFk+0<Nqk:L*lQß0#5,IS^M]",9ޏJ58'eK fK*XUC֖`($&&Őjat5N3he3N>:(٥<$z`%V&m7YvRu*52]AQ%*,Ycm>T #> 4[k}^ۭeSId;*v`LMcZ$Ē t1Jxy[A0eB[:'O*,X>B]9&y);% 5N !A[H4y6T̈AD9 tܩՀ)A<ʐEe(>Z71ǞJ+Z‹I$FAU6ιk oJּԴ{:ٚk!HR%7/r4*x̝TŸyoQT LO\] J~Hp{ЮlL48 N9<s3/z0ATu_q|zH}\qKB% |$JЉR%PJ7J ҩ! U˵*jA#*-Ln} "$2Ceu׎g\z.#ͭZQ tj&hz)Qpޢpv! 5tf%SZsRKKOz%mvVnf9~^dW7sËrÁ>(\q⧦o\$OhĮmv%՛~?\\c{#]+tDx;{Di%x#=ܧB7\uYvQT:ʚ΅j&1\Gy+HeFz֦K ~bH29,+JF:y <Z85c}scrcFX3 6XU$9cq2'lzM<ᾃS%;wtZ5<&T4U6+Z^6 k2m.t4%gR#.!%'C#7D)P:5͂%u-*ΤǙw}rkD- 9B䲚k] x-<<ʎ2Ӡqrc6>y(T ;X;9(:+ɳn?#yyJa:v)<t *IsO *W ة7ιeZi>cK}PyXg{qj_yfnpU}.غɗMȉstxPq.sO5 5ua4ס)p҇\E=BD$sQeF^ nFc):D j{h)۔H$#*:,>j~!*y+7=cu bA}I渟 q`$*?h0:X2fJe0Ksc؃H9֔_7טyaߩ_FfN\9:Eo=:3@9]]Z;FjRAB*+juldjPR%XCTP! 6N ;SPsR:N Z<6|JIN:IqMulO.6 ՘5%qx{j'uFC@TMYx_E=R$`[ Z:H fAl%bЭh9= 9H;XSlJJ^W#rgm=ʉԵespNSQ` \s;]f.g$8I+P++2$x]:+FvH0uQ#L 7OaqmFCuEXNkZ$A3'NYNԪ X*ö'00KDȹzW]#.,;ֶRXxpԽ@T3\D4xL}Us e;kelx?nK@ -ѽW4ȣnYZV/mx TvӠ$Vq[ƥ T6BKbZI3@!UrA< 8{̅`T|\XJא8,"A[ÝAڒi<ϽZFFk(ђYn3*q &m%i5FsЖu)fTaK z& (F'T) Nth&9 \F%u(P\N&9:IdSu" aI'I*4{mCSKHǂ` '{hkd \x C@ P}/wܬͲ.EC${O oP-giHX@Y%Dqhә?zLKb1arfX9hct(6NWH2.yK)a$#e ùj+I+s` !BD(v6^C%9|x RSǙ;Uȭȁ9a<0:!Bp`9T0!8SY FHDQ64De)AE%[V5]Jx;3hq&UV.wWJ J&rt-j7WN B=s(HS<\w)iQ$$O5$DlA ɄvuDcV";]:Z1Ǵf ˎߪGhgR8$@xoh:`mdΆڡLp ㎓ }QT[)GN#E/{j<PKDw$KOq]v<1]SŮk-ZU:zh/h:\]V bgXCMoGl隭SpW(H,(K;tH8è^9~blXn!ejN`#0ڍ;kjMFr^z>ʽpG鸶iY륎(+snRBCМ! HvBTT}JR>% ۞$jkV uGxko ]bL k_upQ"@Lӄ{SV^=h}"Ak!͙淫TkRl5ӨI$I#BUY/4`k'm%f-T3{Llx8„Nɿ3v-7&Bi}\w\WKtXK\%,k eUޢOԮ>(250&DH#l::k5"cWWunWHn>JQWE{늝]g8QqnYAۆk_ jVV \bbw H[еckSt]iƥ5'N:aѧeLZ\!rIw5,y٩RisRiݾt~w+5LEÞ3 Zّ*lTHVbR ̦J45TͱK'PD'RԔht?pu !Ӑh; AF8)Oly+i+LFA*@UM.`nZ>xˌ%I]:8:ZPa(4Hu(3kO&Ydf w Y4{Y`%eݒ= [c h-[QvhF5Ь *FPᾼwS杳kޫhFsHk qElQs[1.gßRC6] 9.k.!!}~J)_8X^S?E! v}\FYm%r`rN-*}=`Ny!}b{hNQ(VD絮xm0:Ycp꬇s=apP'%vQL5DTBm1: GM` tvdhPH6IJtD4RnUqk a0&}WTqKpa?z!M@$IN(r :tP) wM1`nEB ':Or2DӼj{cQQ3՝UƝ3sw˫8#>V00@OC~U_{ +dRwhJX+TdO>jNbFTu=&f^`OwAC{ uh+L}-xbeJ%UJBpB($@@HU+E66\ :敳b1[pfAhhg!su\$@-hdڇy|WOՑ?>;u"F(vF.Eis3 /#]Og*[^Ts5B~w99<5PߓJRܕ?ÒSUD]~*(Nc&a+NBVDqO9ӂ$벲0j(|9%5 Ojtqϥ۶CT]9LyBQM<ա$J.q#J'}MvH8)ǗUZ}tѡ4 OL 6(?Ki1y3`*uF5sZָࠜr*k8h0hPB= #X;w(G2P-'(qcT${հe@懴I hR?2v'qܫ3Ih2 06 :w̧%. xv#i'qWbE6kX˘f*hLMaqF]gJFȜ"w$޷6T(ҹQs=\4iQf "N]m_ac\N`#9N@DѤIM'@IU.vvBu|;>+Fzy9i_,Ijchˬ2MƅBm5BDIF@ plciuR8 ;]+a1' v@|3K.HS)Q45H?$ևL@$ؐ%H,BcjxLyRqℜI=Ul4;B,UQsÝgrv⺎S.fSJe2$öeb6鎩YECWGxԮome\0{C5߿EĨZ2Tks9G]:Za >VͅZuz0MNu:0*Fn6Ӧ 5Ͻ4>n}{vt B.aI!C9ԉI"O6db@ưZ:$ha{%eBñ (BM=ؔ=fXϦjUSqM!WhaWTGM߯')xQT! ݝϢ^й4TQ{^X-t7xe`kCTUoKӮi3!{.~ˈNQ w'.8Jdt:)qsISK_A\o,0t6e;Iv* jW}F xڝD~%J\Vmo3e}Wjr2]-dB)dSq&2Uj$܇T/bPĉ<*i~=J'<;P#aI3˯B[Uww Y V#->ul%q h <WM:x)} 2l 5ND:XAAƛk'!J"#s'dȉLu Z>L9 'ܥcobum39y?_߽a,}F9*s#<wQMsFI ;[&RG47_)RVV` :LӦe!IeFy1*%IMZUe,C=F5]s]A0kug_ݱ-{^@i:-ӿr-''p֡KjN@D`-rdqn˒D}tZl w6^phΞڴb6x+aSܾ Pd*G< G8J@Yٺ$fRP][t<{{\Ǵ0ZaxK0fFFtvCv>*"GezmӤ= OjX$o5fi4JRV c=1ɘ@o+WvԜƐdOdk5v>M4f)#b}ͲBp@qƿYhJa’AdLt):P";|‚NC50܃.W˄o <%&Ve *Ig5}G;NC%n&51?jAe{egrkRsb$lb9O^4@t=S}ZUՖGЯeM/c[Aŧ,X-,nNg9JɕT~-l`#FݪL 0 I|2#gj):TI Rg\9c APv)k=k-K ՙ+{ZmVm=l$;ơIcw{mE:l8hdž[3KIs~$70a+QujTi`.]ՍAptsΪ Oi'[tW ] s6!U<]Jjm=݋$DtUE܈Tj5M-J* u%DA⌠)x# 0HdI)f,_Y-EqS.%ABʨf䵭qsrD8!B| g`*ɝ]AC8`GyL,!!;{Ƅ%Q]2l>ɗ6j){{Te^:j$]2r8Mc}QDA S08HcLÎ >~aJ;2t]W=s=覣@L4X /q"C;Ѿ-+%Xm 6nX쟽EfsV,|SkZ80 bU^rJ6zc77m; hLh-6nPcx KN hVlƃO%?aLrfo䯣P`/ i1mqfj;hZ,]Gg#Dʯ}w=llf+4J'ehQgCTM#`)a*9&0*Ap Bv$(*vQLR*8b77P':n- DD8*|uCFPNI:)@i3/4ۂcK\ c0 B2K5u/%M OmlzZ{ I#X:^X \/eԮ˄q;i4-B^0[M'<ZsL %wtl:MJ5AsKaIpy$f饹֪sߣuéaBU޲s@gE3RЭ^)TKhksK :Bm3uofP>\ƽŲdwΨo^ڵ+[6xG:{gTq'HmU_j$6ѱ#{NO+F.[:* ~0ȩ9;.|=gbmmN2G(Sʵ)u@y9D5eM=9s@q9)6uXa+Խ] rZ2͘鸈XͦKD*[:u [}QTxqi3 *͆7洛DCuJ)ߘDxe暲*L)uS1 5PyQBD I;Ǒ{ -st׼)=&ui>h?&6bS-;T^*jwhf}>b\h C*\KbaG#CJTV;5벥)YXA2 |e8Mh6S5Z7z6+?ErԨ4 J%hڄ. lks}TI;sq,m,kڐ渐Sѫ;*hI R"xBé^tCJ\ j\keԴ8\z^A &k*Tk\ tU:s@P^cN4qXF 6'+ɝxi+бwJƝkV:<4;X-.m[8W 8]VFɤd΋.q,vfcb"9ޔ vRZ Z $W^+VĴc&e-$x4?zλܽm0gJGj&2j>BWBnj4m8 eC-j6&iH16FNf$+b&%d"8bJ(;.kAj[6lI1I#RʈL$J6@PT:c3 "#@22 HPIYLI,  P.AY dO~G%,El:2y7蹮6)۶'+@*4 ] mL)5:)yCⲭ38KSʹ^A;@T߿U|Z04':qJ,LRP]*eq4pxH; & nmzZ,x ^*OA6$y\l)Ï~ʁaiZA ~wgrk5s@4Aʕ*MR湍nQA|՚Mlvkx\qby v90O; qM$颜.*#槻mtwƘ: nm$A6 !cXڠh15UC'XPyb4j qe'Y9djW%QYnOQF`wTMB&gĠY}PuSf),"wn &UI$AZm'FP|쭺!4Ni6dQF vK \&Gph wuN q w4#X!cbN J& -д_ܽ.Zs ј@Ͻy?=VEWψQD=تol4Li=g 0GЧ%V Q-rp`vqZCxxNX;0u7S3նuJ0;)Z,}@Ta&C<1rDܠ?ُ$3FNFI ={(,-!?J0NXqe>,H80O#SD{-Ń/) )R!Բ|Rςy"=ј6S |l(x3i<<誜-EPf iK8]NI >T= #qHP<QCnj P@gHmٖΩTG4^0DV%IջCMܓx;c:Kjpht>SU8;gJkXl+<֍\:XjbM:d7 9 rxLJFX^R=S깜k6 [Bэ-g9\H:r0G̪ VfH ([舘#/T}SXX:[qR0K';Z!G*#x͜.4[ Wi 2s&{%0QʎwuEԔ)qf_ȥkD{<rװ[HQ^S(W)ʉx3]FFGښJPҊ(sUChǪ1Uѵ=Jr=md- 2L8uAJr=b9>L6[ rb!:nR)K_.k` 4PCEQ=sr8e;E'0hZ6t8ɀdʮq)1N*GsOP`ن|ӕÇi7GT'Ʈ܏5Zd0|Tuﱠ76g8kI(#buY{ka@NDU;akN.' O i֝c.೟qU-1..:ݵ Sy=XQȉFM|eMs cB͜/Q7%%s! ܣ=Ca:.IK[jG* H"T*@ J Bl LreBvQ qK*(dyMMRpEfy!P-#ܽ )I#c:%7j`U,􏤬ZTM[C1nISl[\4qwEj@& ݳvJM RC8T!~VMzܝ9`E-GExE=bДVQAh(3CN6U J(7Kg%F h7}} C>GPd-jA/J0 GPVǢKQ7P6=P}9 ^GPd-Eo Eg!9 ^Ru VߢFF(rPgu BVrI!2ujCA[~A4ٰJaF&vL6%sØg;k~uwL8}N@C6L&6{Ԝ>l*G(!Ѫw;.daU6s xh?5G`$8{V$3ٵHp k&ZS 0q+ҿGsJ:ޥJ&磣Uii7/ܴx0Cm`%m`҈}֝seDJGFC@ho70)KOUn >cL 9 AD(4մ,ɼ<@g[ _Л1ͻ'dz58lzIc(re!djǡHA(rՑCgHжRzJ!~M8}%!9(`~Ӈ[q@l$rMʎu]D"܃ 8x)>IEQU)agV awg t*Op=P_1Ӫ`ΡTU݌J`vQTWC*Uw"; 5;K{KJ'M0eҩK؋nhXNũ .iz604<3+d}gkԠ$E(AbD!Y!B!@B'&% T !@!RB B !@@B " D" D! r@h(L2IPPG (L2ABB!*,!MB!4 !(! #RPGr2,"(rJBƻp (D!!T$HJ!! PB!BB% ! ! *BB !B@D!!@BB BBBTBB!! P!!@B !@@BT!*!AB"BB@!(T$ PTTGnescc-1.3.4/doc/dump/000077500000000000000000000000001177770303300143345ustar00rootroot00000000000000nescc-1.3.4/doc/dump/attributes.dsd000066400000000000000000000047701177770303300172260ustar00rootroot00000000000000 Many attribute names have the same format everywhere (some contents may choose to place further restrictions). Declare those global rules here. Attributes which rely on these rules will have no `stringtype ref' Currently: name, qname, ref, size, alignment, value, scoped, loc A unique identifier for the entity denoted by this element. For instance, a "variable-ref" and a "variable" denoting the same C variable will have the same unique value for their ref attribute. The name of a nesC component or interface. This is guaranteed to be unique, so serves as an identifier. The name of generic component instantiations represents their instantiation "path", e.g., generic module Foo instantiated in configuration Bar is Bar.Foo, and generic module Foo instantiated in generic configuration Baz, itself instantiated in configuration Main is Main.Baz.Foo Present on entities (e.g., variables) that are non-global A source code location. nescc-1.3.4/doc/dump/basic.dsd000066400000000000000000000235421177770303300161170ustar00rootroot00000000000000 XML specifications for basic elements: - references to declarable entities (variables, constants, functions, typedefs, interfaces, interface definitions, components, enums, structs, unions) - types - values (regular constants and structured values from C {} initialisers) - attributes - documentation strings A reference to a component or to an interface definition The qname uniquely identifies the interface definition or component. An instance of a component or interface. The number attribute is present for real instances of generic components. A simple value. Contains constant value (might be V:) and its type A structured value (from a C { ... } initialiser). All of these have a type as their first element. Enforce the "type as first element" rule A struct or union value (from a C { ... } initialiser), the structured-elements are the initialised fields (unitialised fields are just absent). An array value (from a C { ... } initialiser), the array-elements are the initialised array elements (unitialised elements are just absent). A nesC type. Purposefully does not contain type-error (bug indicator). All have size and alignment attributes (though these may be V:). Every type has a size and alignment attribute, and, optionally, the name of the typedef this type corresponds to (we can't just have a typedef-ref, as that would cause confusion with type-var). The network attribute is present for network base types. Its value is the network base type name. The typename element is just a reference to a typedef Base types just include the C base type name Integer and complex integer types may have an unsigned attribute Types that contain a single embedded type Qualified types contain an empty attribute for each qualifier present Array types include a number of elements. An unspecified number of elements is represented as a non-constant value for the elements attribute. Function types may be varargs or oldstyle. They contain a type list (arguments) and a return type. Tag types contain a tag reference Interface types contain an interface reference Component types contain an internal component reference. These are the type of a component name inside a configuration, i.e., the type of X in `components Y as X'. Note that `components Y' is just a shortcut for `components Y as Y', the two Y's are in different namespaces. Type variables contain a reference to a typedef (whose type is itself this type) An attribute with its initialiser A documentation string A short string is always present, a long one is optional. nesdoc strings have arbitrary contents nescc-1.3.4/doc/dump/cobject.dsd000066400000000000000000000125071177770303300164460ustar00rootroot00000000000000 A reference to a C object, i.e., a variable, constant, function, typedef, interface, or component-within-a-configuration. The "ref" attribute uniquely identifiers the particular object. Definition of a C object, i.e., a variable, constant, function, typedef, interface, or component-within-a-configuration. The "ref" attribute uniquely identifiers the particular object. Parameter names may be omitted in declarations Order of these elements is unimportant Lists of C objects Order of these elements is unimportant Which interface definition this is an instance of. The actual functions for this instance of the interface. Parameters for parameterised interfaces Generic component arguments are constants with no value --> the cst attribute is optional Commands and events have one of the following attributes. Safe functions (Deputy enabled) have the following attribute. Function parameters. Absent for old-style functions and built-in functions. Parameters of parameterised functions (as in void foo[...](...)) Present for commands and events from actual interfaces (but not for those in interface definitions) commands and events in specifications have a provided attribute nescc-1.3.4/doc/dump/common.dsd000066400000000000000000000032571177770303300163270ustar00rootroot00000000000000 nesC elements can be contained in nothing (global scope), a component, or a function Attribute list. Argument list Parameter list variables are regular function arguments, constants and typedefs are used for generic component arguments. Parameters of parameterised functions (void foo[...](...)) nescc-1.3.4/doc/dump/component.dsd000066400000000000000000000035041177770303300170340ustar00rootroot00000000000000 Uniquely identifies the component. Present if the component is not, or not fully, instantiated Safe components (Deputy enabled) have the following attribute. Order of these elements is unimportant What generic component this is an instance of. Present for generic components Configurations may contain a wiring graph nescc-1.3.4/doc/dump/interfacedef.dsd000066400000000000000000000017021177770303300174470ustar00rootroot00000000000000 Order of these elements is unimportant Parameters of generic interfaces. nescc-1.3.4/doc/dump/nesc.dsd000066400000000000000000000022251177770303300157610ustar00rootroot00000000000000 DSD2 schema for nesC XML dump Top-level elements nescc-1.3.4/doc/dump/regexps.dsd000066400000000000000000000116311177770303300165070ustar00rootroot00000000000000 A regular expression for a nesC identifier A regular expression for a nesC identifier path separated by `.' (used, e.g., for component instance names) A regular expression for a C base type (e.g., unsigned long) The regular expression for an integer The regular expression for a real number A boolean value (we mostly use presence of an attribute to indicate boolean properites, but there are a few exceptions which use this stringtype instead - mostly to denote binary properties (used vs provided, e.g.) rather than options The regular expression for the "ref" attribute used to refer to uniquely identify definitions of various items The regular expression for an empty string The regular expression for a nesC constant. This has the following basic format X:val, where X represents the kind of constant and val it's value. X is I for integers, F for floats, S for strings, U for unknown, and V for variable (not constant) Regular expression for a file location (and an optional instantiation path for locations in generic components) Occasionally, some locations are unknown (e.g., for predefined nesC attributes) Line number, never actually negative An optional generic component instantiation path Filename nescc-1.3.4/doc/dump/tag.dsd000066400000000000000000000067621177770303300156160ustar00rootroot00000000000000 A reference to a tag (enum, struct, union, external struct and union) There is no location if there is no actual definition of the tag Present when there is an actual definition. May be in a container, may have attributes Non-enums contain a field list The ref uniquely identifies the field amongst all fields. There's either a size or bit-size attribute Enforce size or bit-size attribute in field rule Enums contain a representation type nescc-1.3.4/doc/dump/wiring.dsd000066400000000000000000000023561177770303300163350ustar00rootroot00000000000000 Location attributes are present in user-level wiring, absent in function-level wirings. A from and to in a wiring just refers to a declaration of an interface or function, with optional arguments for parameterized interfaces. nescc-1.3.4/doc/envtarget.html000066400000000000000000000047211177770303300162600ustar00rootroot00000000000000 env target and nesc1 The env target allows the nesC compiler to be configured for a new platform without requiring source code changes. It allows specification of a target's data layout rules.
If -fnesc-target=env option is passed to nescc, the compilation uses a machine specification described in the environment variable NESC_MACHINE, such as
export NESC_MACHINE="long_double=8,4"
A particular order to the keynames in NESC_MACHINE is not necessary. The table below is a complete list of possible key names for NESC_MACHINE, a short description of their values, and their default if unspecified:
Keyname Value Default
pcc_bitfield_type_matters bool false
empty_field_boundary bit align 8
structure_size_boundary bit align 8
word_size size 1
pointer size,align 2,1
float size,align 4,1
double size,align 4,1
long_double size,align 4,1
short size,align 2,1
int size,align 2,1
long size,align 4,1
long_long size,align 8,1
int1248_align align,align,align,align 1,1,1,1
wchar_size_size size,size 2,2
char_wchar_signed bool,bool true,true
async_functions string empty
For reference and easy cut+paste, here is the full default specification for NESC_MACHINE:
export NESC_MACHINE="pcc_bitfield_type_matters=false word_size=1 pointer=2,1 float=4,1 double=4,1 long_double=4,1 short=2,1 int=2,1 long=4,1 long_long=8,1 int1248_align=1,1,1,1 wchar_size_size=2,2 char_wchar_signed=true,true empty_field_boundary=8 structure_size_boundary=8"
The curiously named wchar_size_size is the sizes of wchar_t and size_t respectively. See the gcc internal documentation (`info gccint') for more information on pcc_bitfield_type_matters, empty_field_boundary and structure_size_boundary. nescc-1.3.4/doc/mica-debugging.html000066400000000000000000000115211177770303300171170ustar00rootroot00000000000000 Debugging TinyOS 1.x code with AVR JTAG ICE

Debugging nesC code with the AVR JTAG ICE

Note: we do not currently support the JTAG ICE mkII from Atmel.

The Atmel ATMEGA 128 processor offers in-circuit debugging through its JTAG interface. This document explains how to setup your environment to allow gdb to be used with mica motes.  A separate document, here, describes how to debug nesC programs with gdb (this applies to both JTAG debugging on motes and tossim-based debugging on PCs). This document also gives an example of a debugging session using the JTAG ICE.

A number of separate elements are needed for JTAG debugging on motes:

  • Tools: The following tools are needed, they are all included in the 1.1 distribution of TinyOS:
    • C compiler for the AVR: avr-binutils version 2.13.2.1 or later, avr-gcc version 3.3 or later, avr-libc.
    • nesc version 1.1 or later.
    • avr-gdb or avr-insight, preferably the version distributed with TinyOS 1.1 (this version has a number of bug fixes).
    • avarice version 2.0.20030805cvs or later.
  • JTAG ICE pod. This beast can be purchased from Atmel, and looks as follows:
  • A programming board with a JTAG connector. This is included on recent (mica2, mib510) programming boards. You will have to add it yourself to the older mica programming boards. The finished picture will look like this:
  • A mica mote equipped with the Atmega 128 processor, a mica2dot or a mica2. On the Mica boards you may have to remove a resistor r33, as shown in the picture:

    Note that on the newer generations of Micas removal of that resistor may not be necessary. With a ohmmeter check the resistance between the positive terminal of the battery and the pin on the Atmel Atmega 128 corresponding to port A pin 7; if the resistance is large (10kohms) then you may not need to remove the resistor.
  • You cannot be using a sensorboard that uses the ADC4-ADC7 (aka PF4-PF7) pins as these are the pins used for JTAG, and you must ensure that the JTAG enable fuse bit (bit 6 of the high fuse byte) is clear. You can clear this bit by passing the --wr_fuse_h=19 option to uisp, e.g., if using parallel port programming:
        uisp -dprog=dapa --wr_fuse_h=19
    or, if using the MIB510 serial programming board,
        uisp -dprog=mib510 -dserial=/dev/ttysN -dpart=ATmega128 --wr_fuse_h=19
    Note that you may have to disable JTAG when using sensorboards that use ADC4-ADC7, by passing the --wr_fuse_h=59 option to uisp.
  • A free serial port to connect the JTAG ICE pod. You must set the AVARICE_ARGS environment variable to contain the string "-j <serial port device name>" (e.g., -j /dev/ttyS0).
Once you have built up this bit of infrastructure, your setup might look something like this:
At that point you should be able to simply compile your nesC application (make sure you're compiling with debugging support (-g flag), the easiest is to include the word debug in your make command line). Connect the pod to your serial port, turn the pod on, turn the mote on, and from a shell window you should be able to do something like the following:
 
cd ~/trunk/tinyos-1.x/apps/CntToLeds
make clean; make mica debug
export AVARICE_ARGS='-j COM1' # a cygwin example, /dev/ttyS0 on Linux (and should work on cygwin too)
ice-gdb build/mica/main.exe
This should start the avarice (the PC-side of the JTAG setup), which understands the GDB remote debugging protocol, and gdb itself. It will load the program onto the mote, and stop the execution in the initialization. At that point you should have all the familiar GDB hooks at your disposal: breakpoints, displaying memory, registers, etc. You could also use the ice-insight command if you prefer a more graphical debugging environment. Please refer to the man pages for ice-gdb and ice-insight for more options.
Robert Szewczyk, 13 Mar 2003, David Gay, 21 August 2003
nescc-1.3.4/doc/nesc-debugging.html000066400000000000000000000341761177770303300171510ustar00rootroot00000000000000 Debugging nesC code with gdb

Debugging nesC code in GDB

gdb does not (yet!) have a nesC-specific mode. Instead, in gdb you are effectively debugging the C code generated by the nesC compiler. However, the nesC compiler includes #line directives in the code it generates, so single-stepping through nesC code will display the correct nesC source code, and breakpoints can be set based on the line numbers and file names of nesC components. The situation for variable, function, command and event names is however not as straightforward. If you wish to refer to one of these, you must use its name in the generated C code, as explained below.

When debugging tossim code, life is further complicated by the fact that the generated C code emulates multiple motes. Thus all module variables (but not global variables in C files) become arrays, indexed by mote id (if the variable was itself an array, the mote id is the first dimension). At any point in time, the "current" mote is found in tos_state.current_node.

By default, nesC does a lot of inlining, which makes debugging tricky. In most cases, pass the -g -O1 -fnesc-no-inline options to nesC to produce code that is easier to debug (the debug option to the standard TinyOS Makefile does this). If you have a problem which requires debugging fully optimised code, just include -g and prepare for a slightly painful experience... (the debugopt to the standard TinyOS Makefile does this).

Mapping from nesC names to C names

Types, variables and functions in C files (included via the includes statement) are left unchanged in the generated C code, except if they correspond to a nesC keyword. In this last case, the name is prefixed with __nesc_keyword_, so components becomes __nesc_keyword_components.

A module variable (top-level data declarations in modules)  X in module M is called M$X in the generated C code.

A function F in module M is called M$F in the generated C code.

Local variable names in modules are left unchanged in the generated C code.

A command or event C in module M is called M$C in the generated C code.

A command or event C of interface instance I in module M is called M$I$C in the generated C code.

To complicate matters a little, gdb does not directly accept $ in function names in break (set a breakpoint) statements. Instead, you must precede the function name with a *, e.g, b *BlinkM$StdControl$init. Note that this sets a breakpoint on the first instruction of the function (normally part of the function preamble setting up the function's stack frame) rather than on the first executable statement of the function. As a result, gdb may not correctly display argument values, etc, until you single-step into the function body.

Example

This example debugs the CntToLeds application from TinyOS on a mica mote, using on-chip debugging with a JTAG ICE pod (see this document for instructions on setting the JTAG ICE up):

We compile the application with debugging and no inlining by passing the TinyOS-specific debug option to make:
[dgay@barnowl CntToLeds]$ make mica debug
    compiling CntToLeds to a mica binary
ncc -o build/mica/main.exe -O1 -g -fnesc-no-inline -board=micasb -target=mica -I%T/lib/Counters -Wall -Wshadow -DDEF_TOS_AM_GROUP=0x42 -Wnesc-all -finline-limit=100000 -fnesc-cfile=build/mica/app.c  CntToLeds.nc -lm
    compiled CntToLeds to build/mica/main.exe
            2588 bytes in ROM
              46 bytes in RAM
avr-objcopy --output-target=srec build/mica/main.exe build/mica/main.srec

We start ice-gdb to download and debug CntToLeds:
[dgay@barnowl CntToLeds]$ ice-gdb build/mica/main.exe
AVaRICE version 2.0.20030821cvs, Aug 21 2003 15:36:04
 
JTAG config starting.
Hardware Version: 0xc0
Software Version: 0x69
Reported JTAG device ID: 0x9702
Configured for device ID: 0x9702 atmega128
LockBits -> 0xff
 
Reading Fuse Bytes:
  Extended Fuse byte -> 0xfd
      High Fuse byte -> 0x19
       Low Fuse byte -> 0xfe
JTAG config complete.
Downloading FLASH image to target......................
 
Download complete.
Waiting for connection on port 6423.
GNU gdb cvs-pre6.0-tinyos
Copyright 2003 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host=i686-pc-linux-gnu --target=avr"...
Connection opened by host 127.0.0.1, port 33805.
0x00000000 in __vectors ()

The program is stopped. We set a breakpoint at the Timer.fired event in the Counter module. Note the *:
(gdb) b *Counter$Timer$fired
Hardware assisted breakpoint 1 at 0x826: file /home/dgay/motes/tinyos-1.x/tos/lib/Counters/Counter.nc, line 67.

And let the program continue:
(gdb) c
Continuing.
 
Breakpoint 1, Counter$Timer$fired () at /home/dgay/motes/tinyos-1.x/tos/lib/Counters/Counter.nc:67
67          state++;

The breakpont was reached. We continue again...
(gdb) c
Continuing.
 
Breakpoint 1, Counter$Timer$fired () at /home/dgay/motes/tinyos-1.x/tos/lib/Counters/Counter.nc:67
67          state++;

Let's examine the state variable of the Counter module:
(gdb) p Counter$state
$1 = 1

And then follow where the IntOutput.output command takes us.
(gdb) n
68          return call IntOutput.output(state);
(gdb) s
Counter$IntOutput$output (arg_0x84fde28=2) at /home/dgay/motes/tinyos-1.x/tos/interfaces/IntOutput.nc:52
52        command result_t output(uint16_t value);

The debugger shows us the command in the interface, we must step again to reach our destination:
(gdb) s
IntToLedsM$IntOutput$output (value=2) at /home/dgay/motes/tinyos-1.x/tos/lib/Counters/IntToLedsM.nc:70
70          if (value & 1) call Leds.redOn();

The names of local variables (and function parameters) are unchanged:
(gdb) p value
$2 = 2

That's all folks!
(gdb) quit

nescc-1.3.4/doc/nescc-mig.1000066400000000000000000000212731177770303300153230ustar00rootroot00000000000000.TH nescc-mig 1 "April 27, 2004" .LO 1 .SH NAME nescc-mig - message interface generator for nesC .SH SYNOPSIS \fBnescc-mig\fR [any nescc option] [tool-specific options] [\fB-o\fR \fIoutput-file\fR] [\fB-nescc=\fIdriver\fR] \fItool\fR \fImsg-format-file\fR \fImessage-type\fR .SH DESCRIPTION \fBnescc-mig\fR is a tool to generate code to process nesC messages (which are specified by C types). The \fItool\fR argument specifies what tool should be generated, the \fImessage-type\fR specifies the C type of the message you wish to process and \fImsg-format-file\fR specifies a nesC file which uses that type. The message type must be defined with \fBstruct \fImessage-type\fR, \fBnx_struct \fImessage-type\fR, \fBunion \fImessage-type\fR, \fBnx_union \fImessage-type\fR. When used with types whose layout is platform-dependent (i.e., not defined with \fBnx_struct\fR or \fBnx_union\fR), it is important to specify the correct \fBnescc\fR target architecture option (\fB-fnesc-target=\fI...\fR). If you are invoking \fBnescc-mig\fR indirectly via \fBmig\fR, you can use the \fBncc\fR \fB-target=\fI...\fR option instead. If an enum constant named \fBAM_\fImessage_type\fR (with \fImessage_type\fR capitalized) is found, then the value of that constant is assumed to be the active message type for \fImessage-type\fR. If you need access to other constants from your nesC application, please consult the \fBnescc-ncg\fR man page. The current tools are \fBjava\fR, \fBcsharp\fR, \fBpython\fR and \fBC\fR, which generate java, C#, python and C code to encode and decode messages. .SH OPTIONS You can pass any \fBnescc\fR option, as well as .TP \fB-o \fIoutput-file\fR Specify the file in which to output the generated code. .TP \fB-nescc=\fIdriver\fR Use \fIdriver\fR instead of \fBnescc\fR to extract type layout information. For example, if you specify \fB-nescc=ncc\fR, you can use \fBnescc-mig\fR to extract type information from TinyOS applications (which are normally compiled with \fBncc\fR). .TP tool-specific options See below. .SH JAVA TOOL This tool generates a java class to encode or decode a nesC message, basing itself on the net.tinyos.message infrastructure. It accepts the following options: .TP \fB-java-classname=\fIfull-class-name\fR This option is required and specifies the package and name of the generated class. If the \fIfull-class-name\fR has no '.', then no package directive is included in the output. .TP \fB-java-extends=\fIclass-name\fR Specify the class the generated class will extend. The default is \fBnet.tinyos.message.Message\fR. .PP For each field \fIfname\fR of structure \fImessage-type\fR, there are the following methods (the bit offset and size methods are useful for structures containing bitfields): .IP * \fBget_\fIfname\fR: get field's value .IP * \fBset_\fIfname\fR: set field's value .IP * \fBoffsetBits_\fIfname\fR: return bit offset of field in \fImessage-type\fR .IP * \fBoffset_\fIfname\fR: return byte offset of field in \fImessage-type\fR .IP * \fBsizeBits_\fIfname\fR: return size in bits of field (not for arrays) .IP * \fBsize_\fIfname\fR: return size in bytes of field (not for arrays) (absent if \fIfname\fR is a bitfield) .IP * \fBisSigned_\fIfname\fR: return true if \fIfname\fR is of a signed type .IP * \fBisArray_\fIfname\fR: return true if \fIfname\fR is an array .PP Embedded structures in \fImessage-type\fR are expanded, using _ to separate the structure name and its fields. A number of extra methods are present for fields that are arrays: .IP * \fBgetElement_\fIfname\fR: get an element of the array .IP * \fBsetElement_\fIfname\fR: set an element of the array .IP * \fBelementSize_\fIfname\fR: return size in bytes of array elements .IP * \fBelementSizeBits_\fIfname\fR: return size in bits of array elements .IP * \fBnumDimensions_\fIfname\fR: return number of dimensions of the array .IP * \fBnumElements_\fIfname\fR: return number of elements of the array for a given dimension (left-most dimension is numbered 0) - the dimension is optional for 1-dimensional arrays .IP * \fBtotalSize_\fIfname\fR: return size in bytes of the array (absent if the array is variable-size) .IP * \fBtotalSizeBits_\fIfname\fR: return size in bits of the array (absent if the array is variable-size) .PP If the array is 1-dimensional and the elements are one byte, then the following methods exist: .IP * \fBgetString_\fIfname\fR: build a Java string from the array assuming it contains a C-style null-terminated string .IP * \fBsetString_\fIfname\fR: set the array to a C-style null-terminated string given a java string .PP The \fBgetElement_...\fR, \fBsetElement_...\fR, \fBoffset_...\fR and \fBoffsetBits_...\fR methods take one argument per array dimension. These methods report errors if the array index is out of bounds. If an array has a maximum size of 0, mig assumes it represents a variable-size array and does not check the corresponding array index. The data for a message is stored in an array, with explicit base and length information. The constructors can either allocate this array, receive it as an explicit argument or extract if from another message. The base and length can also be optionally passed to these constructors. The optional length argument overrides the default size of sizeof(message-type); this is useful for variable-size messages. The use of an explicit base is helpful for messages embedded in other messages. The generated class also has an amType() method which returns the message's active message type, or -1 if no AM_\fImessage_type\fR constant was found. .SH C# TOOL This tool generates a C# class to encode or decode a nesC message. It accepts the following options: .TP \fB-csharp-classname=\fIfull-class-name\fR This option is required and specifies the namespace and name of the generated class. If the \fIfull-class-name\fR has no '.', then no namespace directive is included in the output. .TP \fB-csharp-extends=\fIclass-name\fR Specify the class the generated class will extend. The default is \fBtinyos.message.Message\fR. The methods in the generated class are the same as for the Java tool. .SH PYTHON TOOL This tool generates a Python class to encode or decode a nesC message. It accepts the following options: .TP \fB-python-classname=\fIfull-class-name\fR This option is required and specifies the name of the generated class. .TP \fB-python-extends=\fIclass-name\fR Specify the class the generated class will extend. The default is \fBtinyos.message.Message.Message\fR. The methods in the generated class are the same as for the Java tool. .SH C TOOL This tool generates a C header file (\fB.h\fR) with constants describing the type's layout, and a C module (\fB.c\fR) with functions to get and set each field. You must pass the \fB.h\fR file's name to \fBnescc-mig\fR using \fB-o\fR. The C tool accepts the following option: .TP \fB-c-prefix=\fIprefix\fR This option specifies the \fIprefix\fR to attach to the generated constants and functions. If omitted, \fImessage-type\fR is used. .PP For each non-array field \fIfname\fR of structure \fImessage-type\fR, the following functions and constants are generated: .IP * \fIprefix\fB_\fIfname\fB_get\fR(): get field's value .IP * \fIprefix\fB_\fIfname\fB_set\fR(): get field's value .IP * \fIprefix\fB_\fIfname\fB_OFFSETBITS\fR: bit offset of field .IP * \fIprefix\fB_\fIfname\fB_OFFSET\fR: byte offset of field .IP * \fIprefix\fB_\fIfname\fB_SIZEBITS\fR: size in bits of field .IP * \fIprefix\fB_\fIfname\fB_SIZE\fR: size in bytes of field .PP For each array field \fIfname\fR of structure \fImessage-type\fR, the following functions and constants are generated: .IP * \fIprefix\fB_\fIfname\fB_get()\fR: get field's value .IP * \fIprefix\fB_\fIfname\fB_set()\fR: get field's value .IP * \fIprefix\fB_\fIfname\fB_offsetbits()\fR: bit offset of array element .IP * \fIprefix\fB_\fIfname\fB_offset()\fR: byte offset of array element .IP * \fIprefix\fB_\fIfname\fB_ELEMENTSIZEBITS\fR: size in bits of array element .IP * \fIprefix\fB_\fIfname\fB_ELEMENTSIZE\fR: size in bytes of array element .IP * \fIprefix\fB_\fIfname\fB_NUMELEMENTS\fR: number of elements in array (absent for variable-sized arrays) .IP * \fIprefix\fB_\fIfname\fB_NUMELEMENTS_\fIi\fR: size of \fIi\fRth array dimension .PP Embedded structures in \fImessage-type\fR are expanded, using _ to separate the structure name and its fields. A field of an array of embedded structures is considered to be an array. .SH ERRORS \fBnescc-mig\fR reports an error if \fBnescc\fR cannot compile \fImsg-format-file\fR, if \fImessage-type\fR isn't found or if it contains pointers. .SH SEE ALSO The generated code for the various tools refer to libraries that are distributed with the TinyOS operating system. Please refer to that project's documentation for more information. .IR mig (1), .IR nescc (1), .IR nescc-ncg (1) nescc-1.3.4/doc/nescc-ncg.1000066400000000000000000000071161177770303300153160ustar00rootroot00000000000000.TH nescc-ncg 1 "April 27, 2004" .LO 1 .SH NAME nescc-ncg - extract constants from nesC files .SH SYNOPSIS \fBnescc-ncg\fR [any nescc option] [tool-specific options] [\fB-o\fR \fIoutput-file\fR] [\fB-nescc=\fIdriver\fR] \fItool\fR \fInesC-file\fR \fIfilenames-or-constant-names...\fR .SH DESCRIPTION \fBnescc-ncg\fR is a tool to extract constants from nesC files for use with other applications. It is typically used in conjunction with \fBnescc-mig\fR (which generates code to process nesC messages) to extract constants that are used in particular messages (e.g., constants representing various commands). The \fItool\fR argument specifies what tool should be generated, the \fInesC-file\fR specifies a nesC file which uses the constants you want to extract. If your constants are all in a single .h file that does not depend on any other files, then you can specify the .h file directly as the \fImsg-format-file\fR. Note that if some of your constants are defined with \fBunique(...)\fR or \fBuniqueCount(...)\fR, you must specify your whole application as the \fInesC-file\fR, or you will not get the correct constant values. Each \fIfilenames-or-constant-names\fR is either a constant name (if it consists only of letters, numbers and _) or a filename. In the former case, the specified constant will be extracted, in the latter case all constants from the specified C file will be extracted. Only constants declared in C files will be found by \fBnescc-ncg\fR. The current tools are \fBjava\fR, \fBpython\fR and \fBC\fR, which generate java, python and C code that contains the values of the requested constants. .SH OPTIONS You can pass any \fBnescc\fR option, as well as .TP \fB-o \fIoutput-file\fR Specify the file in which to output the generated code. .TP \fB-nescc=\fIdriver\fR Use \fIdriver\fR instead of \fBnescc\fR to extract constants. For example, if you specify \fB-nescc=ncc\fR, you can use \fBnescc-ncg\fR to extract constants from TinyOS applications (which are normally compiled with \fBncc\fR). .TP tool-specific options See below. .SH JAVA TOOL This tool generates a java class with the values of the requested constants. These constants will be \fBpublic final static\fR and have a type chosen from \fBbyte, short, char, int, long\fR (the chosen type will be the first one in this list that can hold the constants value - this reduces the need for casts). The java tool accepts the following options: .TP \fB-java-classname=\fIfull-class-name\fR This option is required and specifies the package and name of the generated class. If the \fIfull-class-name\fR has no '.', then no package directive is included in the output. .TP \fB-java-extends=\fIclass-name\fR Specify the class the generated class will extend. The default is \fBObject\fR. .SH PYTHON TOOL This tool generates a Python class with the values of the requested constants. These constants will be class (rather than instance) variables. The Python tool accepts the following options: .TP \fB-python-classname=\fIfull-class-name\fR This option is required and specifies the name of the generated class. .TP \fB-python-extends=\fIclass-name\fR Specify the class the generated class will extend. The default is is to not inherit. .SH C TOOL This tool generates a C header file with the values of the requested constants (defined as \fBenum\fR constants). The C tool accepts the following option: .TP \fB-c-prefix=\fIprefix\fR This option specifies a \fIprefix\fR to attach to the generated constants. .SH ERRORS \fBnescc-ncg\fR reports an error if ncc cannot compile \fInesC-file\fR. .SH SEE ALSO .IR nescc (1), .IR nescc-mig (1) nescc-1.3.4/doc/nescc-wiring.1000066400000000000000000000034731177770303300160500ustar00rootroot00000000000000.TH nescc-wiring 1 "January 4, 2006" .LO 1 .SH NAME nescc-wiring - check wiring of nesC program .SH SYNOPSIS \fBnescc-wiring \fInesc-xml-file\fR .SH DESCRIPTION \fBnescc-wiring\fR is a tool to verify that wiring constraints specified on individual components are respected in a nesC program. These wiring constraints can specify that an interface provided or used by a component must be wired at least once, at most once, or exactly once. If no wiring constraints are violated, nescc-wiring terminates with an exit status of 0. Otherwise, appropriate error messages are printed and nescc-wiring terminates with a non-zero exit status. Wiring constraints are specified by placing \fB@atmostonce()\fR, \fB@atleastonce()\fR and \fB@exactlyonce()\fR attributes on the relevant interfaces. For instance, writing module Fun { provides interface Init @atleastonce(); ... ensures that programs using module \fBFun\fR must wire its \fBInit\fR interface at least once. Specifically, when the annotation is placed on a provided interface, there must be the specified number of paths in the wiring graph from any module to that interface. If the annotations are placed on a used interface, there must be the specified number of paths in the wiring graph from the interface to any module. To use this wiring check tool, you must declare the \fB@atmostonce()\fR, \fB@atleastonce()\fR and \fB@exactlyonce()\fR attributes in some global header file as follows: struct @atleastonce() { }; struct @atmostonce() { }; struct @exactlyonce() { }; and you must pass the following options to \fBnescc\fR to create the XML file that you pass to \fBnescc-wiring\fR: -fnesc-dump=wiring -fnesc-dump='interfaces(!abstract())' -fnesc-dump='referenced(interfacedefs, components)' -fnesc-dumpfile=\fInesc-xml-file\fR .SH SEE ALSO .IR nescc (1) nescc-1.3.4/doc/nescc.1000066400000000000000000000216411177770303300145500ustar00rootroot00000000000000.TH nescc 1 "April 27, 2004" .LO 1 .SH NAME nescc - nesC compiler .SH SYNOPSIS \fBnescc\fR [\fB-gcc=\fIgcc-name\fR] [\fB-mingw-gcc\fR] [\fB-fnesc-target=\fIarchitecture\fR] [\fB-docdir=\fIdir\fR] [\fB-topdir=\fIdir\fR] [\fB-graphviz=y\fI|\fBn\fR] [\fB-fnesc-simulate\fR] [\fB-fnesc-nido-tosnodes=\fIn\fR] [\fB-fnesc-nido-motenumber=\fIexpression\fR] [\fB-conly\fR] [\fB-fnesc-cfile=\fIfile\fR] [\fB-fnesc-gccize\fR] [\fB-fnesc-cppdir=\fIdirectory\fR] [\fB-fnesc-separator=\fIseparator\fR] [\fB-fnesc-no-inline\fR] [\fB-fnesc-optimize-atomic\fR] [\fB--version\fR] [\fB-fnesc-verbose\fR] [\fB-Wnesc-\fI...\fR] [\fB-fnesc-dump=\fIspecification\fR] [\fB-fnesc-dumpfile=\fIfile\fR] [\fB-fnesc-scheduler=\fIspecification\fR] [any gcc option] \fIfiles\fR... .SH DESCRIPTION \fBnescc\fR is an extension to \fBgcc\fR that knows how to compile nesC applications. If invoked on regular C files, it behaves exactly like \fBgcc\fR. When invoked on a nesC component or interface (\fB.nc\fR extension) file it compiles and links (except if the \fB-c\fR, \fB-S\fR, \fB-conly\fR, \fB-E\fR or \fB-fsyntax-only\fR options are used) that component with the other files specified on the command line. .SH OPTIONS \fBnescc\fR accepts all \fBgcc\fR options, and some additional nesC specific options: .TP \fB-gcc=\fIgcc-name\fR Specify which gcc compiler to use to compile and link any C files, either explicitly specified, or generated as the output of the nesC-to-C compiler. This option supports cross-compilation of nesC code (the usual mode of operation...). .TP \fB-mingw-gcc\fR Pass this option if the gcc version specified with \fB-gcc=...\fR was compiled for Window's mingw environment, and hence expects Windows-style rather than Unix-style paths. .TP \fB-fnesc-target=\fIarchitecture\fR Specify the target architecture to compile for. Currently supported platforms are \fBavr\fR (the Atmel AVR family), \fBmsp430\fR (the TI MSP430 family) and \fBself\fR (the machine the nesC compiler is running on). If you use the \fBenv\fR target, the architecture details are read from the \fBNESC_MACHINE\fR environment variable. See the separate env target documentation for details. .TP \fB-docdir=\fIdir\fR Generate documentation for the compiled component in directory \fIdir\fR. .TP \fB-topdir=\fIdir\fR Specify directory paths that should be stripped from the source file names when generating "package names" for the documentation files. .TP \fB-graphviz=y\fR|\fBn\fR Explicitly enable or disable the use of the graphviz tool in the generated documentation. Without this option, graphviz is enabled iff the \fBdot\fR program is found in the current path. Use of graphviz requires \fBdot\fR. The documentation generation tool checks the version of \fBdot\fR, and enables client-side image maps, if supported. .TP \fB-fnesc-simulate\fR Compile for a simulation environment. .TP \fB-fnesc-nido-tosnodes=\fIn\fR, \fB-fnesc-nido-motenumber=\fIexpression\fR When \fB-fnesc-simulate\fR is specified, the nesC program is compiled for a simulation environment, where a single executable will simulate \fIn\fR nodes. Specifically, in the generated code, each global variable becomes an \fIn\fR element array, and all accesses to global variables are indexed with \fIexpression\fR. .TP \fB-conly\fR Just compile to C, leaving the generated source code for top-level-component \fIcomp.nc\fR in C file \fIcomp.c\fR (except if the \fB-fnesc-cfile\fR option is specified). .TP \fB-fnesc-cfile=\fIfile\fR Specify a file in which to save the C code generated when compiling a component. Note: if you specify two components on the command line, then the C code from the second one will overwrite the C code from the first. .TP \fB-fnesc-gccize\fR Output target-specific extensions as gcc-style attributes rather than using the target's original syntax. Can help if using \fB-conly\fR and sending the nesC output from some other tool that understands gcc attributes but not the target-specific extensions. .TP \fB-fnesc-cppdir=\fIdirectory\fR Save all preprocessing results in \fIdirectory\fR. The directory is created if it doesn't exist. This can be helpful to track down preprocessor-related compilation problems. You probably want to ensure that \fIdirectory\fR is empty when you call \fBnescc\fR, to make it obvious which files where preprocessed as part of the current compilation. .TP \fB-fnesc-separator=\fIseparator\fR Set separator used to create symbol names in the generated C code (default $). The compiler needs to generate unique names to denote, e.g., a module variable. It does this by concatenating various symbol names to ensure that it generates unique names. For instance, variable \fBbar\fR in module \fBMaz\fR becomes a global C variable \fBMaz$bar\fR in the compiler output. Some C compilers do not like $ in symbol names, so you can specify a different separator, e.g., \fB__\fR (leading to generated symbols like \fBMaz__bar\fR). You will get a compile-time warning if any symbol in the program being compiled contains the separator you specify (the presence of the separator in a symbol could lead to the generation of incorrect code). The separator can however start or end a symbol. .TP \fB-fnesc-no-inline\fR Disabled the automatic inlining of all small functions, and of all functions with a single call site. .TP \fB-fnesc-optimize-atomic\fR Optimize atomic statements [EXPERIMENTAL]: reduce or remove the overhead of atomic statements in simple cases (e.g., single-byte reads). .TP \fB--version\fR Print the version of \fBnescc\fR and of the selected gcc compiler (see \fB-gcc\fR). .TP \fB-fnesc-include=\fIheader-file\fR Include the specified file before compiling a nesC component. Behaves as if \fBincludes \fIheader-file\fB;\fR was included at the start of that component. .TP \fB-fnesc-dump=\fIspecification\fR Output information on the compiled programs structure, and in particular its user-specified attributes. For more details, see the separate nesC dump documentation. .TP \fB-fnesc-dumpfile=\fIfile\fR Where to output the information requested by \fB-fnesc-dump\fR. Defaults to stdout. .TP \fB-fnesc-verbose\fR Be more verbose than \fB-v\fR. .TP \fB-fnesc-scheduler=\fIcomponent\fR,\fIunique-string\fR,\fIinterface-name\fR,\fIinterface-definition\fR,\fIrun-event\fR,\fIpost-command\fR By default, nesC compiles uses of \fBtask void \fItaskname\fB() ...\fR to \fBvoid \fItaskname\fB()\fR, and \fBpost \fItaskname()\fR to \fBTOS_post(\fItaskname\fB)\fR. With this option, each task gets its own \fIinterface-definition\fR interface, the task implementation is transformed into a \fIrun-event\fR event and posts becomes a call to the \fIpost-command\fR command. This per-task interface is automatically connected to the parameterised \fIinterface-name\fR interface of scheduler component \fIcomponent\fR. The parameter id for the connection is chosen with \fBunique("\fIunique-string\fB")\fR. .PP There are a number of warnings specific to nesC, specified with \fB-Wnesc-\fR (all these warnings are off by default): .TP \fB-Wnesc-fnptr\fR Warn when function pointers are used (use of function pointers is deprecated in nesC and leads to inaccurate data race detection). .TP \fB-Wnesc-async\fR Warn when interrupt handlers call commands or events not annotated with \fBasync\fR. .TP \fB-Wnesc-data-race\fR Warn about potential data races. .TP \fB-Wnesc-combine\fR Warn when configuration wiring leads to "fan-out" and the function return type does not have a combining function defined. .TP \fB-Wnesc-docstring\fR Warn when unexpected documentation strings (starting with \fB/**\fR) are seen. .TP \fB-Wnesc-all\fR Turns on \fB-Wnesc-fnptr\fR, \fB-Wnesc-async\fR, \fB-Wnesc-combine\fR and\fB-Wnesc-data-race\fR. .TP \fB-Wnesc-error\fR Turns the \fB-Wnesc-fnptr\fR, \fB-Wnesc-async\fR, \fB-Wnesc-combine\fR and \fB-Wnesc-data-race\fR warnings into errors. .PP When compiling a nesC component, the nesC compiler recognizes the gcc C language (\fB-f...\fR) and warning (\fB-W...\fR) options. The \fB-S\fR, \fB-c\fR and \fB-o\fR options work as usual, the \fB-x\fR option accepts \fBnesc\fR. The \fB-v\fR option causes the nesC compiler to print out the paths of all components and interfaces that are loaded. Directories can be added to nesC\fRs search path with \fB-I\fR. .SH EXAMPLES If you wish to compile a component Bar.nc to a C file, you can do: .IP nescc -c -o /dev/null -fnesc-cfile=Bar.c Bar.nc .SH PREPROCESSOR SYMBOLS \fBnescc\fR defines the following preprocessor symbol: .TP \fBNESC\fR (since v1.1) set to XYZ where x.yz is the nesC version .SH ENVIRONMENT VARIABLES .TP .B NESCPATH A colon separated list of additional search directories for nesC components. .SH SEE ALSO .IR gcc (1), platform-specific gcc .SH NOTES The warnings for the new nesC 1.1 features (see \fB-Wnesc-all\fR) are off by default to increase compatibility with nesC 1.0 code. To match the language specification in the nesC 1.1 reference manual, you should compile with \fB-Wnesc-all\fR and \fB-Wnesc-error\fR. These options will become the default in future releases. nescc-1.3.4/doc/ref.pdf000066400000000000000000011714471177770303300146550ustar00rootroot00000000000000%PDF-1.4 5 0 obj << /S /GoTo /D (section.1) >> endobj 8 0 obj (Introduction) endobj 9 0 obj << /S /GoTo /D (section.2) >> endobj 12 0 obj (Changes) endobj 13 0 obj << /S /GoTo /D (section.3) >> endobj 16 0 obj (Notation) endobj 17 0 obj << /S /GoTo /D (section.4) >> endobj 20 0 obj (Scopes and Name Spaces in nesC) endobj 21 0 obj << /S /GoTo /D (section.5) >> endobj 24 0 obj (Interface and Component Specification) endobj 25 0 obj << /S /GoTo /D (subsection.5.1) >> endobj 28 0 obj (Interface Definitions) endobj 29 0 obj << /S /GoTo /D (subsection.5.2) >> endobj 32 0 obj (Interface Types) endobj 33 0 obj << /S /GoTo /D (subsection.5.3) >> endobj 36 0 obj (Component Specification) endobj 37 0 obj << /S /GoTo /D (subsection.5.4) >> endobj 40 0 obj (Bare Commands and Events) endobj 41 0 obj << /S /GoTo /D (subsection.5.5) >> endobj 44 0 obj (Other Declarations in Specifications) endobj 45 0 obj << /S /GoTo /D (subsection.5.6) >> endobj 48 0 obj (Command and Event Terminology) endobj 49 0 obj << /S /GoTo /D (section.6) >> endobj 52 0 obj (Component Definition) endobj 53 0 obj << /S /GoTo /D (subsection.6.1) >> endobj 56 0 obj (Generic Components) endobj 57 0 obj << /S /GoTo /D (subsection.6.2) >> endobj 60 0 obj (Examples) endobj 61 0 obj << /S /GoTo /D (section.7) >> endobj 64 0 obj (Component Implementation: Modules) endobj 65 0 obj << /S /GoTo /D (subsection.7.1) >> endobj 68 0 obj (Implementing the Module's Specification) endobj 69 0 obj << /S /GoTo /D (subsection.7.2) >> endobj 72 0 obj (Calling Commands and Signaling Events) endobj 73 0 obj << /S /GoTo /D (subsection.7.3) >> endobj 76 0 obj (Tasks) endobj 77 0 obj << /S /GoTo /D (subsection.7.4) >> endobj 80 0 obj (Atomic statements) endobj 81 0 obj << /S /GoTo /D (section.8) >> endobj 84 0 obj (Component Implementation: Binary Components) endobj 85 0 obj << /S /GoTo /D (section.9) >> endobj 88 0 obj (Component Implementation: Configurations) endobj 89 0 obj << /S /GoTo /D (subsection.9.1) >> endobj 92 0 obj (Included components) endobj 93 0 obj << /S /GoTo /D (subsection.9.2) >> endobj 96 0 obj (Wiring) endobj 97 0 obj << /S /GoTo /D (subsection.9.3) >> endobj 100 0 obj (Implicit Connections) endobj 101 0 obj << /S /GoTo /D (subsection.9.4) >> endobj 104 0 obj (Declarations in Configurations) endobj 105 0 obj << /S /GoTo /D (subsection.9.5) >> endobj 108 0 obj (Examples) endobj 109 0 obj << /S /GoTo /D (subsection.9.6) >> endobj 112 0 obj (Wiring Semantics) endobj 113 0 obj << /S /GoTo /D (subsubsection.9.6.1) >> endobj 116 0 obj (Wiring and Parameterised Functions) endobj 117 0 obj << /S /GoTo /D (subsubsection.9.6.2) >> endobj 120 0 obj (Application-level Requirements) endobj 121 0 obj << /S /GoTo /D (section.10) >> endobj 124 0 obj (Concurrency in nesC) endobj 125 0 obj << /S /GoTo /D (section.11) >> endobj 128 0 obj (Attributes) endobj 129 0 obj << /S /GoTo /D (subsection.11.1) >> endobj 132 0 obj (nesC Attributes) endobj 133 0 obj << /S /GoTo /D (subsection.11.2) >> endobj 136 0 obj (Attributes in Documentation Comments) endobj 137 0 obj << /S /GoTo /D (section.12) >> endobj 140 0 obj (External Types) endobj 141 0 obj << /S /GoTo /D (section.13) >> endobj 144 0 obj (Miscellaneous) endobj 145 0 obj << /S /GoTo /D (subsection.13.1) >> endobj 148 0 obj (Constant Folding in nesC) endobj 149 0 obj << /S /GoTo /D (subsection.13.2) >> endobj 152 0 obj (Compile-time Constant Functions) endobj 153 0 obj << /S /GoTo /D (subsection.13.3) >> endobj 156 0 obj (Type Parameters and C Type Checking) endobj 157 0 obj << /S /GoTo /D (subsection.13.4) >> endobj 160 0 obj (Functions with no arguments, old-style C declarations) endobj 161 0 obj << /S /GoTo /D (subsection.13.5) >> endobj 164 0 obj (// comments) endobj 165 0 obj << /S /GoTo /D (section.14) >> endobj 168 0 obj (nesC Applications) endobj 169 0 obj << /S /GoTo /D (subsection.14.1) >> endobj 172 0 obj (Loading C file X.h) endobj 173 0 obj << /S /GoTo /D (subsection.14.2) >> endobj 176 0 obj (Loading Component Definition K) endobj 177 0 obj << /S /GoTo /D (subsection.14.3) >> endobj 180 0 obj (Loading Interface Definition I) endobj 181 0 obj << /S /GoTo /D (subsection.14.4) >> endobj 184 0 obj (nesC and the C Preprocessor) endobj 185 0 obj << /S /GoTo /D (subsection.14.5) >> endobj 188 0 obj (External Linkage Rules) endobj 189 0 obj << /S /GoTo /D (section.A) >> endobj 192 0 obj (Grammar) endobj 193 0 obj << /S /GoTo /D (subsection.A.1) >> endobj 196 0 obj (Imported Rules) endobj 197 0 obj << /S /GoTo /D (section.B) >> endobj 200 0 obj (Glossary) endobj 201 0 obj << /S /GoTo /D [202 0 R /Fit ] >> endobj 204 0 obj << /Length 2592 /Filter /FlateDecode >> stream xڭYK۸WLT!)lR٭ֺ>p(Ę"U$5@JVF?n`~ؽtqsha(]Yeb{:7n:ٚXGZmtdpDT098 iݣZMEDn~;UimGoiz5t_MRDO#KzItyc6g=5=6чKۺA~~݀R8Sef PY/ oLbP .Y4HI3 .nkcejZ'6M#hN,b|UƸ.&8^@"jFү6nlẓi/<޻9tnMNf l"G$4\ON8}ΫuOn C+`e 4wH.Q6-R|G ,>!8SEmy6L#8rStR9?ED$rC52Nd{W u-tLAݹ ϡHܯ2/&|Dմf#G5I y*}EO,SpJ;Q9Su=di)h>dVxĆA" ͼL_~^{8SaXkulpLY,=X$Q8wh~J}U݀&~yIGׂ=OXuqOa/ p~2br"WH ^cX?OQt0}k>7 s:zYTA0'x[_gͥ#<>\yKC|4){ l*Eɞq1@o5OZ)Ç~WT LtxL,Z\$+ĿM7-\ ǕH3Y)K(o{<5/}hг D6aLMU^gܜ6eIͥtn'?L01B#*NT_W- d)H;Y= jBK hs0E3 J2͚Jgiq 峇ȑC9|HY 7+R(i *<ܝ[\G>,9‰0oQɒ}S8t-Xeyab&/;[MU >-bZ\$+D"a%ȯ]ڋG3/<aג鹌t Y Bb58~DvmT*DoYz*HhԈVPmF\!XJY #蚑3,~K@bq ZIi8IAcul~'7>ߡ7^ -,ЍFaI+MT|wv2Y:dvW ÒT"LPisK~aśW:P޶u ;w__P^+? k^g528>NV=BlW&ΙܔYqgJ]`|_>2J`*&..LP5A ȿ'ݻEK,Oe4|z/NnuA穑/Z^ǩDי3ix(;$6кXζW1X{ըendstream endobj 202 0 obj << /Type /Page /Contents 204 0 R /Resources 203 0 R /MediaBox [0 0 612 792] /Parent 228 0 R /Annots [ 219 0 R 220 0 R 221 0 R ] >> endobj 219 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] /Rect [198.9505 521.8525 206.3976 530.8753] /Subtype /Link /A << /S /GoTo /D (cite.kandr) >> >> endobj 220 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] /Rect [115.1755 508.3033 122.6226 517.3261] /Subtype /Link /A << /S /GoTo /D (cite.tinyos) >> >> endobj 221 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [182.0645 467.6557 189.5115 477.224] /Subtype /Link /A << /S /GoTo /D (section.2) >> >> endobj 205 0 obj << /D [202 0 R /XYZ 72 720 null] >> endobj 206 0 obj << /D [202 0 R /XYZ 72 720 null] >> endobj 6 0 obj << /D [202 0 R /XYZ 72 571.3127 null] >> endobj 203 0 obj << /Font << /F18 209 0 R /F19 212 0 R /F29 215 0 R /F15 218 0 R /F30 224 0 R /F31 227 0 R >> /ProcSet [ /PDF /Text ] >> endobj 233 0 obj << /Length 2706 /Filter /FlateDecode >> stream xڵYY7~_!úD&}xI~HpHo]=Nv7~Q(ɪU7뛗odJ*XeyZ,`l.zba˷* }3!qReEt>-UZ2*Ld[ǍzUmri9GC0T+tI{Tg$rqvSqYw"M#螇ej|L|z% ? Uûsˍ{7]`Ef汫e.0ޞ=v1 +^i+S '.YѮM'zp@uYY2]nWX ީg2ϙ(nDpxN=s0(+㹡V9IFv`h~5r~yXY|Q&A Le=Zn*A" f7@d{+/5" p}0Xİu ,.M^ :c;e,8;"Ė?9Ģ.ٌS tgXAxq%knĔ¼ش@|*U`jWWlY:YqU$dXFTUH*+KtVU@GUQaP@5 #V5F vrFT%2".8 8U˄=YOu+60A VXOW,;q:cjg'X$%y9<OmO(Z2{b6n3GK(bBתZag3mfxjN؜_sL=v!Fc|>Z~-8YG0QX;nؗk7ÐM:zaUh aq錡wGycr![>+ t/~*4i,[, <ֱܘ4$% بAu@ n+.) Z%e1 'yl((N–l̮fbW…dE> X("y`6xNHpSDPBSTJ'JqUx xB+QX*!QQ抍$ z|Ξ|/dX}ނҫ;' i 6=zz~!j':1c2l?)SE8rҠt^E/AFL5vhZz[Lt9pF2{d =sN#mw >(Iݎt[!k& ]`O\98gkx k=<ϣw.rc`9FϜfHPUONB =%ζ-AڣZ#Ma$T䘢ZN$yZ(CZ1h9el$%9S $R9Hq?i +u 8؏LbO5Q '_=k M"ֽNU|%wyi{ mKn}cp>zhp  ΅;?$Gflx82K3yӹ8]Np_*I==gye0{4HּW)[S|"qzQܼ7 ]/o|V(oh8_ d AE;αٺt:U(* mݦmo !ayH #˄h8տ gtqg]_GZS(%1>")}aU*_tvcr8'σ7#|[~ŮP!Po~@; ^26p)Qkoꦩ>+T"H sߕA^wmZUft/Yl+fx@PB(H15:NzZG5o+ V"Vd dZG1Ńtzg ̅#>iIUiZސ_it0 <䥞B9)c3h_YMi?G+.7߯oPE0{bs݇dI?$qZ:I*8F4a47w7`b{k(r& DG4]q, Vbp0kCuCz'LP>GyFh>mU):?@`/^=xv,!LH [AE1A3א EXeQI"Z<\endstream endobj 232 0 obj << /Type /Page /Contents 233 0 R /Resources 231 0 R /MediaBox [0 0 612 792] /Parent 228 0 R /Annots [ 235 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R ] >> endobj 235 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [492.8235 568.0359 499.5483 581.2448] /Subtype /Link /A << /S /GoTo /D (Hfootnote.1) >> >> endobj 239 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [353.7584 538.8069 361.2055 548.3752] /Subtype /Link /A << /S /GoTo /D (section.2) >> >> endobj 240 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [162.7925 523.1365 170.2395 534.826] /Subtype /Link /A << /S /GoTo /D (section.3) >> >> endobj 241 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [476.5096 523.1365 483.9566 534.826] /Subtype /Link /A << /S /GoTo /D (section.4) >> >> endobj 242 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [241.212 509.5873 248.6591 521.2768] /Subtype /Link /A << /S /GoTo /D (section.5) >> >> endobj 243 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [271.3117 509.5873 278.7588 521.2768] /Subtype /Link /A << /S /GoTo /D (section.6) >> >> endobj 244 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [521.5297 509.5873 528.9767 521.2768] /Subtype /Link /A << /S /GoTo /D (section.7) >> >> endobj 245 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [533.5492 509.5873 540.9963 521.2768] /Subtype /Link /A << /S /GoTo /D (section.8) >> >> endobj 246 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [91.405 496.0381 98.8521 507.7276] /Subtype /Link /A << /S /GoTo /D (section.9) >> >> endobj 247 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [341.2093 496.0381 354.1109 507.7276] /Subtype /Link /A << /S /GoTo /D (section.10) >> >> endobj 248 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [215.3196 482.4889 228.2212 494.1784] /Subtype /Link /A << /S /GoTo /D (section.11) >> >> endobj 249 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [233.3767 482.4889 246.2783 494.1784] /Subtype /Link /A << /S /GoTo /D (section.12) >> >> endobj 250 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [270.0969 482.4889 282.9985 494.1784] /Subtype /Link /A << /S /GoTo /D (section.13) >> >> endobj 251 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [109.0275 468.9397 121.9291 480.6292] /Subtype /Link /A << /S /GoTo /D (section.14) >> >> endobj 252 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [471.9002 455.3906 482.0746 467.08] /Subtype /Link /A << /S /GoTo /D (section.A) >> >> endobj 253 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] /Rect [114.7917 430.4134 122.2388 439.4362] /Subtype /Link /A << /S /GoTo /D (cite.kandr) >> >> endobj 254 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [262.3676 427.6861 272.0875 440.5877] /Subtype /Link /A << /S /GoTo /D (section.B) >> >> endobj 255 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] /Rect [248.3076 337.5122 255.7546 346.535] /Subtype /Link /A << /S /GoTo /D (cite.deputy) >> >> endobj 256 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] /Rect [494.3367 337.5122 501.7837 346.535] /Subtype /Link /A << /S /GoTo /D (cite.safe-tinyos) >> >> endobj 234 0 obj << /D [232 0 R /XYZ 72 720 null] >> endobj 10 0 obj << /D [232 0 R /XYZ 72 412.4166 null] >> endobj 263 0 obj << /D [232 0 R /XYZ 88.5877 112.8468 null] >> endobj 231 0 obj << /Font << /F30 224 0 R /F15 218 0 R /F20 238 0 R /F29 215 0 R /F36 259 0 R /F21 262 0 R /F33 266 0 R >> /ProcSet [ /PDF /Text ] >> endobj 271 0 obj << /Length 2765 /Filter /FlateDecode >> stream xڵrί`%Jn,XS3Ts@B em(H'Vo|wCoK4ޟIQoc?|G?Ḉ'Mѕ&.o!]ڦh* 1fY[_U<Hvćt里 ^=͏Qs)+!PִfоZ/!18pxBTy; ЩFzeXg"!{0 wdى>>xYL HBԒcEO3:/NĆ@~qA0$I},R csYJy&07Ҟf @aPhJ@ LfXnW5X՟?ӰcITD6#u@7xg]SEx'TU Sv%>t}kzf+r9^I)Ի |Xf& $ΉXV;DƎBнR4 +hY43QQvũx9|?v=3{v ID{=SbAxi=iy+?xλP`F vxw3xggiF4"Y6$;6EMq[e`6S۱6P6VڀgJWi$dU)MA/$ShyvNJ9K[}oZYAܳ*bɹ\">;7uk!4GWSfA!dnh`Qi?Z;S&E ;h#cTP 3_, Qv«`I\\vUyn&η=)/p|H?:3#×^2 ZRIģm4V7xnvRa]MOhur$ d㈎)G荡7FyJaJTA3mu$R-@S VkμcX;AbK/,Btރ΂'6+M]@'$,|IJ­Hy][Ubux,80=Yc3ÙA4mOTDp l;Ũ `c~F{iNBO'Qͧͯ0M >|/HzawkB*`?9h=ijF;jby(ёt xꆝ=ch/VI}96߁c$^biTJK8>I"4VN%\zsshVdm7FpB ^YnBJPBclQH89.4q/U+/6. ݢA=ZkeTxx਄P8) Lu6\2"5+y=GWԢ^V.d CfOfP#7낎+UDXg-&*cwϯ b+xe{:1j-*?e#9fOddͯPK|˼ \߰9=rD|SY)ҿ} ؊DWz|+kXcǺTXmME’:ƵgKUj]6u~pT!h-XT3D^)wRVPtOԬˆ,_Şuz]ȲTorJ5Css{Hgb[ŚڔG*΅Tؚ66d`?һ)|klHϺo4ի p{ вt) Յ%Dž+EGP n蜊x7!ِruc>StJ .֒m9&=+;a/KX#P|&FNL*hsL1߮*tϥ ʽg̶@{ 8 ni!a9=Yii3 |캫!:47)B th+L KheeǴ( :/oɄ-5kGQ́g7p0wO!1cH/âN ֮2"\]t8rJP"PX6[a;H8͡&xlTciЎ_x\#9{(Vy>@XyU_M4bgмGK vT\S?Ǧ4 kE^xְ/04bl/щ_%L"}:a\U*d\`EPM[<-QVi/1# h?G6endstream endobj 270 0 obj << /Type /Page /Contents 271 0 R /Resources 269 0 R /MediaBox [0 0 612 792] /Parent 228 0 R /Annots [ 278 0 R ] >> endobj 278 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [336.8152 169.1924 358.2017 182.094] /Subtype /Link /A << /S /GoTo /D (subsection.13.2) >> >> endobj 272 0 obj << /D [270 0 R /XYZ 72 720 null] >> endobj 273 0 obj << /D [270 0 R /XYZ 72 333.0861 null] >> endobj 274 0 obj << /D [270 0 R /XYZ 72 297.0214 null] >> endobj 275 0 obj << /D [270 0 R /XYZ 72 260.9566 null] >> endobj 276 0 obj << /D [270 0 R /XYZ 72 224.5888 null] >> endobj 277 0 obj << /D [270 0 R /XYZ 72 188.8271 null] >> endobj 279 0 obj << /D [270 0 R /XYZ 72 165.7054 null] >> endobj 269 0 obj << /Font << /F30 224 0 R /F15 218 0 R /F36 259 0 R /F31 227 0 R >> /ProcSet [ /PDF /Text ] >> endobj 282 0 obj << /Length 3455 /Filter /FlateDecode >> stream xڭZIr)`DYiq7[L(Q!i7".'E*VOҮN6r_rUd6ʹωZoycdFk?|%fVlej2Mk&RfN$Uj0@D~雱c jvߝ&p ]Ȥ_$i8EB=oܲLv5WdBäɑHכ2C}C[zq- V-ܩkƪm.aɳ>)io#y Hhp[&m}Kšu36j!|vG |@*,\X"ݷwhdJ4XOEYw?vw,UW/ w*h=5 n+~NڟXRO;_+ByH)¼-`+Xw[{UY|L :d@DžPZn cE\Q mS 4tC"5FyZtA5цÊ(ɝȵIW4X[yIE.*^xJe&*lU]~|ɨ6Χoצ(.rܐgfO\m ຶ Sn:4UCΗ\潋ENyg}H(teR,dYo@KgB/FO(8AW%|xٞa H ob!$pLA{)|Ъ@wy89 s.c849^mf`A8##SGV5a4BqJL"ps T_R_uR"`~ݰq1ۤJ75piiQJKxwڌ.FLࡅ'n1 gRBu2-uQ~Y#@38/R`K8Қ#>K(ߐx2 @X)tHk<6'I7I蟆_91YάNw{J# (:V#0n8B[ܖRL2Y _Dת1lU2cQ8NAx JdlYkg@bHࡧ0P22 7w ~kBBSL&͍Y]L(=1,K:r4$)0HYZQBDPjSwD!JRׯsՖ=k4+R]f7fSVtHD~=9t IھȠrrdtN2-K:<[wH$! ć{;XE@h>'D B+1h!5VX@as'=T I (pzg8lJXUVڕmV8_5]z'{t9:@Fn8hw6Sh-\YZZseg;է(rH=uALhb\+=8kj}Xf7T>5T'LlFCsB-M9*47:^Q]`QN\3xo ;Xzz#!*aLIn #`5<K(!"k!3$=H )`Yep#LA%(wFl HhuYy979+rˤNɞXwɥG~!Ʒ7RVx6 (wz$ek ‹@ylm%o"2 "*Sm E%r(!%z' k@>.|nr}#nB^X8)#m40sW)2 s(lqRFJp>K SK+gim+dX\}TߘGN[^Z&v*AԈrou3/!ӶY qq!c}0e &pNd*~=/KsnYês]HudPo\w. 7.bl·X]H%sìKs~"!$=! o׼# *&esK܃ݮƸ&4S Ȯ^Wi-E¾׽R׌r^vLF&3LA) ,P`Bp?1LYهmMn1QD[?,Ơu˥BZ872V?&VA'S7X>-KRsx[͵sSPzM DR80Z{[Utg/<"s;5ŧ`/^_H~f߳4,A,8rYM;tgeL^f&[2ͳTr`endstream endobj 281 0 obj << /Type /Page /Contents 282 0 R /Resources 280 0 R /MediaBox [0 0 612 792] /Parent 228 0 R /Annots [ 287 0 R 288 0 R 289 0 R 290 0 R ] >> endobj 287 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [170.0948 618.265 180.2691 631.1666] /Subtype /Link /A << /S /GoTo /D (section.A) >> >> endobj 288 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] /Rect [424.1421 558.2919 431.5892 567.3147] /Subtype /Link /A << /S /GoTo /D (cite.kandr) >> >> endobj 289 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [399.5662 488.4247 409.7406 500.1142] /Subtype /Link /A << /S /GoTo /D (section.A) >> >> endobj 290 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [170.2724 145.7857 186.2043 158.6873] /Subtype /Link /A << /S /GoTo /D (subsection.9.1) >> >> endobj 283 0 obj << /D [281 0 R /XYZ 72 720 null] >> endobj 14 0 obj << /D [281 0 R /XYZ 72 720 null] >> endobj 18 0 obj << /D [281 0 R /XYZ 72 459.4324 null] >> endobj 280 0 obj << /Font << /F29 215 0 R /F15 218 0 R /F36 259 0 R /F32 286 0 R /F31 227 0 R /F30 224 0 R >> /ProcSet [ /PDF /Text ] >> endobj 293 0 obj << /Length 2632 /Filter /FlateDecode >> stream xڥYݏ۸_o5#mzR h[8(l gK>I$8|Q޵}٥pf8{>X釧Cۏxr3ߦkEn#Pq|(mF_pǦovoVZK#}mYvb@4n NL{CӨl+u;: ;:ߍ4xD5h]I&f R%bwlwLlEfa7X$-ISvjB:HπnWEI7JH>LLѵHh${H#o<]P';QQ tk]wulzȮ3jak"L录=ha8clw[:<+lƁc"x`xOP$/(.=9y-)31֏AMctlu;u4)T#W7&ST0٥'I#RkOE}I">[## ?ך%†6tg_. vwďqH8#_u u5T=aUɞn&ˊk&.[*Jo&n}}}Fy_8<֚`0˓kP*(mg]\{][\Zg[kYw̷ JWR! 36\m.&eKRC8H2#;QiC/ΦRq8Ot(tLfťfs^1+@Phe܋PbY6 U,Q{CieC=Is%efM \,ɧr%Ϯ<.Tmse h`tK!\eE<@r.U3"\,LRʦɇgc=OdKr[ƫ&up0$H{dPKtw]su=q3#Se@>27PZ,-!7`~E˸\V(u3<Dt $9MbV}\R$kas̸A豮Ku@9TB1kZؒY6sg 8f%!G塇9[Ĝts{U+Ʈ$qV-Uv({)<,RB܏PcDA4Kя`eT%R|xe '*}C7~Z-nӄ^ i' ]Tًo/8!E/;Q{]`ct31\5& (}f越d 'qHg 7LttR_=Ҡ1a+2lfBô+t0O`"ڧIQAlI).vMa1DiBQf:5N'0M;!uT:|*ɓa$*0+*)Ou[}+{5ꄣ!xXp:*L 2p=?7WEg~* C_VSƣD:.$C_{A{i2ʌ;6V<& /Gڙq$M* 6DCb2Hv gM=U<U2F!)V[HW8:"V:oBdS,a.>''r޳ FUsXx l2SΡ1_3n|J%@ı$U~GbhLOOs Rma=1W9$ plTf_* /VܹEg,ى^UƂVcَ^lXްqbadw&4$*+<9/36QHK<î Dڦ&dҫh`;%^{leJK<8g̮Ԅ^8xZ=cj"GI:ܭT~) #W4z&E$=k.y1fP4o' FijDLBV!ݡ1.@Uz8.;*n(k/1^"w5d Fendstream endobj 292 0 obj << /Type /Page /Contents 293 0 R /Resources 291 0 R /MediaBox [0 0 612 792] /Parent 228 0 R /Annots [ 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R ] >> endobj 295 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [386.9132 423.4857 402.8451 435.1752] /Subtype /Link /A << /S /GoTo /D (subsection.5.4) >> >> endobj 296 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [425.7011 423.4857 441.633 435.1752] /Subtype /Link /A << /S /GoTo /D (subsection.5.5) >> >> endobj 297 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [333.5371 125.2628 340.9841 138.1644] /Subtype /Link /A << /S /GoTo /D (section.6) >> >> endobj 298 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [498.3331 125.2628 505.7802 138.1644] /Subtype /Link /A << /S /GoTo /D (section.7) >> >> endobj 299 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [529.3068 125.2628 536.7539 138.1644] /Subtype /Link /A << /S /GoTo /D (section.9) >> >> endobj 294 0 obj << /D [292 0 R /XYZ 72 720 null] >> endobj 22 0 obj << /D [292 0 R /XYZ 72 677.7146 null] >> endobj 291 0 obj << /Font << /F15 218 0 R /F29 215 0 R /F31 227 0 R /F36 259 0 R >> /ProcSet [ /PDF /Text ] >> endobj 302 0 obj << /Length 2093 /Filter /FlateDecode >> stream xڭX[~_ᷕ"RHIM Pykc˶Z2,yws.><&/Eù~3??']*kiz*ˍR?S(x(mB%N5W|*7:-MBʜ[O|+gU^)<(_dqʺLP-L]P%Hvgd7MÁEGXЭO>gyEqoB9>^go4ٞfmuҤ['@p3q7'n]*P}̚jNa_h9-(,Hr/k JU_yj("+VVT`s.OTU+WgUVXomnxN]0:=))r/2_A}oY^Y\/>>:Dc4_g{ίc*evMUn\ 4<ړ>GNc>cLthGy& ,:yD4xb]J~N]?rFV &8"_gvcJ#ƷwJH_!)a?",Ńs0F2~qnBa^OZ3"$A5 .0"5-2OoVe>vuUVB%%0BzN_( f I@{"j!0MJl$cC;2\HhVdzpT{hRT.{s@29&ѝ_p&@{![EPoq2Ʃ ƚmX9OϷBaxV0ji|3PLcz Ir^ېWe1'$M}<6R7jr97v-H BK|F+3몯EV*ğTP#+執 8J\ ^?жVֱwaL#\`DlP uwVJݔ:(>Vt l6m4(kKMY[8v1S j,hGV#$M(o~r!c&T&LB3@9NGwEQvS!Npv8`lHTJ׈% 0H/qz(Oc yJ+%đlU܏*$-rNevE*a '&4l TV: X5 ü|YT(Q0PD-];EKү֊x_habXa~1T.b fD{+S5k[40f=$ٳDǓT|4>{`ϲ(Dc}s^S 0P,=B`#<7RMWy9BB_T6yB wj(?0U8Huq6]@roͭ~~ DkCOCFÏ]+˭?Vb|^!%/۟;PeN$F(O˳q)G^Sb3|r5 ;^R榌c3oH˼.q6<¶ܸLq^Uc[ì*ef ],u<+KX`yϻNG͕M m·:Oo Eendstream endobj 301 0 obj << /Type /Page /Contents 302 0 R /Resources 300 0 R /MediaBox [0 0 612 792] /Parent 228 0 R /Annots [ 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R ] >> endobj 304 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [193.8408 606.1313 201.2878 619.0329] /Subtype /Link /A << /S /GoTo /D (section.4) >> >> endobj 305 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [529.3068 459.7936 536.7539 472.6952] /Subtype /Link /A << /S /GoTo /D (section.4) >> >> endobj 306 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [358.174 446.8505 379.5605 458.54] /Subtype /Link /A << /S /GoTo /D (subsection.13.3) >> >> endobj 307 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [169.6768 299.9068 182.5784 312.8084] /Subtype /Link /A << /S /GoTo /D (section.10) >> >> endobj 308 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [213.2766 286.3576 220.7237 299.2592] /Subtype /Link /A << /S /GoTo /D (section.4) >> >> endobj 303 0 obj << /D [301 0 R /XYZ 72 720 null] >> endobj 26 0 obj << /D [301 0 R /XYZ 72 720 null] >> endobj 300 0 obj << /Font << /F29 215 0 R /F15 218 0 R /F31 227 0 R /F36 259 0 R /F30 224 0 R >> /ProcSet [ /PDF /Text ] >> endobj 311 0 obj << /Length 1446 /Filter /FlateDecode >> stream xڭWKoFW7,m-Caݒh XKRI;]ֲ"oWo?j%UnȍsbEDT6KL&\jݥ27Migu;÷J1{OҮd.h _eʈڥ*RU&S3F;wP\XjG~(6d~ɥI%mY5+ɍW}Z_w|>sEmd;}䷰>"7tn*xy0 $RS3ZkOU&DI"D27=~_xZ.PNP\g"mF5H->AMTc QT@Y 7bZa 9$mj(fء A"$KryO) m xBZSn*JU7],J:W>=N1;%NN$KWVB,NUiD!cu> џ ͣ)ҧ) rJ&K%qYW8w} xWJ8C_3G=Ipн@6ŻqZZ-sRe\E CC](n$ø\]d1C;C޿qt6z[>0u{z5K]o'{ex+ &#l` YYY-z?uEuϟ .o|t~0[K|}ONئe4fDwSᑙ@h7L0,'K. c_ ~`!PKMl)N@P> endobj 313 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [335.8497 393.5185 343.2968 406.4201] /Subtype /Link /A << /S /GoTo /D (section.6) >> >> endobj 314 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [113.428 366.4201 129.36 379.3217] /Subtype /Link /A << /S /GoTo /D (subsection.5.4) >> >> endobj 315 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [256.5191 366.4201 272.451 379.3217] /Subtype /Link /A << /S /GoTo /D (subsection.5.5) >> >> endobj 312 0 obj << /D [310 0 R /XYZ 72 720 null] >> endobj 30 0 obj << /D [310 0 R /XYZ 72 720 null] >> endobj 34 0 obj << /D [310 0 R /XYZ 72 437.8637 null] >> endobj 309 0 obj << /Font << /F29 215 0 R /F15 218 0 R /F31 227 0 R /F36 259 0 R /F30 224 0 R >> /ProcSet [ /PDF /Text ] >> endobj 319 0 obj << /Length 2403 /Filter /FlateDecode >> stream xڥYKoW rYN78b B:=$3BrlTU?HXJ쮮w}lg%/~MKƵcv vL;Uv'2N[ |쒵gaL46#[K -+*=U)^R0i迴u.Y.d[ohHEFD۹k ̳k:߷se۝6'<@YFlvLh Ō.%@jUz tgd6"ѰoH"CX}AMٞ }pa%i߸ԕTgoR'4g4^'4T73=6GvGo"_>iZx~7RHRl F[O.ZgﷅrR*C}q=)ƍNj4 Sw$1l 3:jkg;T" ]@LLJHc_=Fp3e 2q)צ4%p q|+9"kʓ@q4oDQr`TLY!Ws".vRL]]9|A_ᘍrV`T^B3-}=_*!z*r&s #@Ф3X_|Rvɿkn"c-e6s WCYMϞ;¥ MH` Ge(,6+tOD_b\hj?lJ US\wEK ˍ E@5eTlȃV""ɜMZSAоA&*IK)!EcJYeh w(8+%_jdΉ€?YPK?*K0po#?Ў?4P*ZŚh]gJ׻Yr\n)HqM>Lw-A HDM/> $>7VJu@x&E`2x6]aLW9ˡ8U>H8 c$un.fZ(/DP9q/%dJI˩95%Rrx砂%rˌE=hMIFgC!,xs:g_t}hZD{x oVIx>9 ~]P ! 'Xv/{`TDR.U*>$z:_.ߦQZޕɦ͇ vn?Ƭ otu1:ģ^EY4oCCęLÄx~DOc3wh\o BZW,*w7W4pFnMo}7| g^@o~%2E%˟2 [SM-NdVDUC Bշ# kv>I0;%1Axou@z.|V1cuk NyVt08,uɅATG7BSH8>(f'!9;-hX8ş ̃O&AXd]2 VJY\B7#ݒe"D:cZ.*E~IJwy;ݒe*tY #*e2UNrm&u>{o.Sԩ :&ԏo}4+eva!OgT<6.%_Il; Rhs{OC+WgK,F!7 l5,Ҽp7l㡣뽔{X781-[ς3SxyUV!2L >BN^C̅_'kje_j,9o0CD0Η!C , -ā))]u _Pφ>~&>zXP](u! L@{~\}>K]6S Lݥޠzh()npn0}O h4\c3< &~_ީ]/D\5!g .PXCL&cՅ6xsBDԵ,H&Vsd\#%+$u1>b*endstream endobj 318 0 obj << /Type /Page /Contents 319 0 R /Resources 317 0 R /MediaBox [0 0 612 792] /Parent 316 0 R /Annots [ 321 0 R ] >> endobj 321 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [502.2492 294.75 509.6962 307.6516] /Subtype /Link /A << /S /GoTo /D (section.4) >> >> endobj 320 0 obj << /D [318 0 R /XYZ 72 720 null] >> endobj 317 0 obj << /Font << /F15 218 0 R /F36 259 0 R /F30 224 0 R /F31 227 0 R >> /ProcSet [ /PDF /Text ] >> endobj 324 0 obj << /Length 1769 /Filter /FlateDecode >> stream xڥXKoFWV lN-P}K!iD $(;]Rrq;;of7/.l%SQ\]߬$sU"56߷u3nͧ߀Rk*ZXS("lnʪaʫi路NJT.`;Orb_宁vlj)-]3m`Z4mݟSW}T ~zտ1ևG=9/?>0oD?fWZtPn$61#3%@w..,:Xd" 饵FPn[߷&ljmGDG~&5\xCX.gVCG5!:y’St˔} tjx=kSiy/$-+ a/y\6Ѕa|};m SڱھcA22˵r)7E,p1NdiS9랎ͱ.cv2.ϋSkq,:SL٘(鄖ft`ZOKv6x,1ihpku5uMBZyR6QZ4 I4`e@{ \=z±}W0MBy0x >ƾSw"ENb@CQ.po'h;-> endobj 326 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [212.3978 98.1644 219.8449 111.066] /Subtype /Link /A << /S /GoTo /D (section.4) >> >> endobj 325 0 obj << /D [323 0 R /XYZ 72 720 null] >> endobj 38 0 obj << /D [323 0 R /XYZ 72 323.5604 null] >> endobj 322 0 obj << /Font << /F36 259 0 R /F15 218 0 R /F30 224 0 R /F29 215 0 R /F31 227 0 R >> /ProcSet [ /PDF /Text ] >> endobj 329 0 obj << /Length 2518 /Filter /FlateDecode >> stream xY[~_P5+ghujMh (KT׋"2CQJi"s=|ͷ))*Y|JHs}7W|Ѯ:f;'h'{vzսwR- H'p6j6 oxi1־Ҳ:qSoeki>/CϷߏhpdK,)M*[QC]\и)ݰ{H) BFW,}Y4^B}oʡt΃(/ rWJhkU^G˩!N,,/v;v@Ɍ_kZGsA7:DWB)Ykr1;D!S&#QrHQxhݜx(qʠdDd_mmVi}PTA ?Ƕ3Gԓ`DU' @4 ,4SDyb6R+=EZca>HevNi h&Z`HSlێw=8b1sطN B[rp2p"ڮNz`fUYau5K.̀6u6l(0⩙^VH@_1Yvh@#\h%4R,8ls4=d"kT'".ҽiRJWVꓔ~w lDg6w,=_r]21a%mJBof<'*d*؇ <]}* 3eC :pX:$l t#5f_MxJÒ\b%:߯{Ca/Ӣa5?5&٭ͭ.7f 4F`'!D\5Csp5*F( #S^eb4IP!;dХPqQ iCǫfP]hbli(, ɑ7qx&%._3d2f︺eᰅr;bnifZ銜7"YDŽPSb=XQP8$&3\ *{}`3-uٚ@TTl\8nKv& {9e 0LïeJQ|M'+æ:.V:I@'UʠxpNW/HP|?gH x4.SHCP"H.=5mVdR*V\fKIt(exQu= n(;qsp(x-ԅYCOcEO+𑬌V,ˮphPDxPE8;Iv.PA'xm$\9D&1dVbJ9l4~xD:hur4Mf`HxH̗ba$^?x.2,ΗgΈ {ԕNj\ /#왙0!+„z-ufW8k<ԗ KrY(-|@>?zȊ9~BS^de>u хH֣| uyJ!`3$JW-,C! _*6mF,*oR8Y5g>&2 ²+ZT\\ֲ"h~0׈a0'5vR JY^]P &# ,iU,-dcI8<= \J~SxTfT(ǖ~˧'8ܡaG{ΚG/nt(D*.,2(׽?z;GO̢īMihbT. \p09dq6> |&- q.];vi#R.VL^rendstream endobj 328 0 obj << /Type /Page /Contents 329 0 R /Resources 327 0 R /MediaBox [0 0 612 792] /Parent 316 0 R /Annots [ 331 0 R 332 0 R ] >> endobj 331 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [170.5635 561.7936 178.0106 574.6952] /Subtype /Link /A << /S /GoTo /D (figure.1) >> >> endobj 332 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [224.0561 561.7936 239.988 574.6952] /Subtype /Link /A << /S /GoTo /D (subsection.9.6) >> >> endobj 330 0 obj << /D [328 0 R /XYZ 72 720 null] >> endobj 42 0 obj << /D [328 0 R /XYZ 72 536.9682 null] >> endobj 46 0 obj << /D [328 0 R /XYZ 72 273.2589 null] >> endobj 327 0 obj << /Font << /F15 218 0 R /F36 259 0 R /F31 227 0 R /F29 215 0 R /F32 286 0 R >> /ProcSet [ /PDF /Text ] >> endobj 336 0 obj << /Length 2073 /Filter /FlateDecode >> stream xڝXKsϯPRmfݪW!MQ6k%Eߧ2݋@hu |gevJ /ݝv6Y,=gLr~ݾ9djtP߻~Y #\Nw4n2OT.TL2ZhWͪae4i;_͑Gf?=4tr[PUSw,A沆Vzn_[#tWahFa]ZZ3<.sJXm.tM0 'v\{k]_p*w>çOZWhS}^:&aJuN0x aWι)eJSLHpnS)c= R]<%wAG9Bϧ'ĽG86v.̈́`Ɋ[3aq9fJA|T!tQx0vHk r%xFED?|N.>޵ٞ'(eA|@."5~㎚wf hqr*3@Cr@~_ac]{{tL ByfjxxH?qM@1[pl9V& j|Χ6~lEns^8c`l›wϯ|"~C:vL8@XNIګ& ;eY0&gPtPR i ҆\Ф,Y BA**FVae whrm$ Afwy`ݓ.O|C5C o nofk'#;IFF`K~(mslu.h;7.ל9-|iJ WҒw4r%(/49}00& j5r7gY:ƧC֮Guω_@a g2Ż[9Y %s; N!7<1>Qu#e .]9VI7)ւ1ݣC7Az% x5sL2 40 #7&u S!TI*o{9jo{- KIA|m߱swԕsBVl&mYthuyHՂ"%7ܱY, S mi:i3(КZQWZNDf JN&͙o0Zq3K'ʉ,Ym3nێmvBy ]+KEX%&O v+0tl-v`LFXU|n*dCrWk>J ,X9 w|Cnf LCS1sW %g$W vm3e$Fޑ5 { S5a 7bxcTYrc㿏!a)zA %5#_;|z΅)mkYlVn Ytp+Q/5*ƅ~êdI좕#nxgW[3?Ӏs3 W@Z: x둦(K:.dkfB;#Ĵc3si>O3a"o ȇB۟=jm^v2ie+fL&i|ayLR)_ק$JM~wLTL$oz BL*R?>3endstream endobj 335 0 obj << /Type /Page /Contents 336 0 R /Resources 334 0 R /MediaBox [0 0 612 792] /Parent 316 0 R /Annots [ 338 0 R 339 0 R 340 0 R 341 0 R ] >> endobj 338 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [492.6914 343.0562 500.1385 355.9578] /Subtype /Link /A << /S /GoTo /D (section.7) >> >> endobj 339 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [436.4315 329.507 443.8785 342.4086] /Subtype /Link /A << /S /GoTo /D (section.8) >> >> endobj 340 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [464.3677 315.9578 471.8148 328.8594] /Subtype /Link /A << /S /GoTo /D (section.9) >> >> endobj 341 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [282.8409 284.6076 290.288 297.5092] /Subtype /Link /A << /S /GoTo /D (section.9) >> >> endobj 337 0 obj << /D [335 0 R /XYZ 72 720 null] >> endobj 50 0 obj << /D [335 0 R /XYZ 72 647.819 null] >> endobj 54 0 obj << /D [335 0 R /XYZ 72 216.8648 null] >> endobj 334 0 obj << /Font << /F15 218 0 R /F32 286 0 R /F29 215 0 R /F31 227 0 R /F36 259 0 R /F30 224 0 R >> /ProcSet [ /PDF /Text ] >> endobj 344 0 obj << /Length 2687 /Filter /FlateDecode >> stream xڵY[H~_}‘HUZ H3҈~``w%q2CZstJs|Uyu{썖 {[Hk/l(s/r#aq>[/̎]ں+2C=/|ZX~ hV\h(];2}h.й ?J\,Vw<'.WM="rTo껔kl@\6i+ z lW vW/WZTC{^/e5Aamy}8#[^#2kxT#tKIPℚuhNQC\#[\>42 2B>Mln$/A]ߣ$#}77Gp1hZQ@Qu00v* E :a_s|R"b/g@<# &;,3?x)!wɰ jqD%K–6zWu?VCz_+dI86'ʕ搣vkm7w?{x/kpBIbmq3)-u;(}]s;A6(==m ksױLۢLb{c?kQ ا_H1duCcz4S%(2{]i')L Nt0|X *Odg "̹kb 4@ǎ m eA*^nd~C$6r&I,9 _H||:E?n:vr=3&do0Qñ z}4b伍3bNti\Msu!$3. wvl8 b(|Ut_ b%Ms 9Fͧc brIgEBea3Ycـ aU0|Ja}_k^OMhU˥ѭBvĤ`W-y*5x*76*U*wv^8*fkŷ txoχB! EZFb/`9XQx-4+#J脋 _0|Re| @=PsWj輘FlrI#wwKJ5p./!iQq̜6'wV8^B @cIF kcV>ЕͧZ82i,TY/7 QF"HB6law /wI+T 4)˘*aq K;qSK^#.˫ҏgWҼV7Ϯ]~# z_C8sKw> t#sq"u}SBG!\meKaAcڟ~J VnQ!+ x;! p : y{(R^!UpMҤ`భ8'"mq{[¶_kKAR'|:}@Lo:[0Uɶ5ź!k!r3v Ƽ˿rꎟ jOM /BpbT.C Ϟpˠkwxi ߏt'Ӷwxx/O~C.^s}Qd>kܧ qr_Ab؊ҘKI. alL뼏E4Qj$d)>Lkv1')afuh-p)qZJtqC3vVSi.YΜ `/Lv V E/BȵYkb/cjg$ `3&a086T1/sz0IՈsBu@Æ=//cqxG)ŔT|3JtLr'ĸSpMG[8#M9.(.)lb'@Ctf9,%Rj@]XhxB3hs#(QaB0;5U=RPsm6_O_Pm2N`19O{ܲz_Wg~GL'^Gn\<[B?I$O8 5\Mq3LKږ3{bC8wt{ gRܬ7޼/67◛\hr`Fn19ye ^^}0,i 6%THS5 Q#߷!#n/'evGyont2"yce&(Qd;z&>T }-2 ;'\1 hOmbs> f 4qk.0hr̤'AĘb* ܆N4a:v|ݕMʞVb+; ❱Ԃ7`C{$l Ċٶu: ܷ`hB6tf~p7<7}#Koq9f ޓg9|aV*+e_ !lC=J;1:-bHn L]}c1endstream endobj 343 0 obj << /Type /Page /Contents 344 0 R /Resources 342 0 R /MediaBox [0 0 612 792] /Parent 316 0 R /Annots [ 346 0 R 347 0 R 348 0 R 352 0 R 353 0 R ] >> endobj 346 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [526.2765 612.1714 533.7235 625.073] /Subtype /Link /A << /S /GoTo /D (section.4) >> >> endobj 347 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [470.9435 533.1805 492.33 544.87] /Subtype /Link /A << /S /GoTo /D (subsection.13.3) >> >> endobj 348 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [512.3371 510.6058 533.7235 523.5074] /Subtype /Link /A << /S /GoTo /D (subsection.13.1) >> >> endobj 352 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [469.8186 445.1641 476.5434 458.3729] /Subtype /Link /A << /S /GoTo /D (Hfootnote.2) >> >> endobj 353 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [519.6098 445.1641 540.9963 458.3729] /Subtype /Link /A << /S /GoTo /D (subsection.14.2) >> >> endobj 345 0 obj << /D [343 0 R /XYZ 72 720 null] >> endobj 58 0 obj << /D [343 0 R /XYZ 72 417.6039 null] >> endobj 62 0 obj << /D [343 0 R /XYZ 72 239.8301 null] >> endobj 354 0 obj << /D [343 0 R /XYZ 88.5877 134.7646 null] >> endobj 342 0 obj << /Font << /F31 227 0 R /F36 259 0 R /F15 218 0 R /F30 224 0 R /F32 286 0 R /F20 238 0 R /F23 351 0 R /F29 215 0 R /F21 262 0 R /F33 266 0 R /F34 357 0 R >> /ProcSet [ /PDF /Text ] >> endobj 360 0 obj << /Length 2542 /Filter /FlateDecode >> stream xڽY[o~f&ۧM$'w(3G]%#9^#﹐Ix-ЗE~.d.|~QE{ Ӷ>ի?|^1k9jߵUJ.L.~vF2oUYVu=?lknЎI?simiwDP<_xJ?^ eIPQ)\Ϊ>-1kW-O_d|tDZ/{l믺T/fPFW8 L!J "F8nvGzz ֚rR(Ak+:[#V$ `. 3p6taD +d('qSiM>AjσWE2X̟>H2J:ʧ9f 52Y_Q|demj٘7 m6<ׄ=n :/eZyO f ﲞX^ؤ+ Hj(*Gl[*Ϗ%F`<ӈZ_q%dV5u6a9v2sH֧{-̡Z- lH'–9: AARB1e18A.w̪Q$m[r嗒(~\3kTCC`"e )㸑ރB '=|[4"n*NXGs7AA(#~,$6'gISO UPa݂A0$-7X V`wSDcIm 2 N-Vb+尡tYS,l737q!H80QmSa Xee[C ǭ7=ʆa펊un`#j試є)S~)ԁZCD#M6__9M) Oت3869[BX=\> endobj 362 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] /Rect [431.4444 708.0448 438.8915 717.0676] /Subtype /Link /A << /S /GoTo /D (cite.kandr) >> >> endobj 363 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [141.1967 673.9674 148.6438 686.869] /Subtype /Link /A << /S /GoTo /D (section.4) >> >> endobj 364 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [166.5493 329.0424 173.9964 341.944] /Subtype /Link /A << /S /GoTo /D (section.5) >> >> endobj 361 0 obj << /D [359 0 R /XYZ 72 720 null] >> endobj 66 0 obj << /D [359 0 R /XYZ 72 633.9614 null] >> endobj 358 0 obj << /Font << /F15 218 0 R /F31 227 0 R /F29 215 0 R /F32 286 0 R /F36 259 0 R >> /ProcSet [ /PDF /Text ] >> endobj 368 0 obj << /Length 2827 /Filter /FlateDecode >> stream xɎ_!KYI98`Crh-(E|}R\UmONdիWo_?K\.^-|H,wD.+eVrhm%a?681*Q~?>?? _$ AS?35%Dz;D~|b;lYTlh}c ~6N k&®WX>Ẓ[&{Һo*19f҆OjzX-/mXb69bW=GΗmMcR_Z$wJYwy n|E#WX4:FL'?^r?a*acƍd ETzy(?hHL`!|@J7g"؎ONUg1PuK )En")/WV ^TvpnI^8;Pn@  ]~p.Zi4Mi)dD Gne+C0&OmY7p@vD빗ifoN,f>Зm8hcv*CHpLg=T*7l>+ O#Mtqap9t"Vt*CSڛp:핎|@ʺś%hAP`ĶRf"KmmDIEx"+4ŤB6D],I9 ]M8> ȤSTg; '44X(+FX0*OzL̼L7166Pb_}\#7͌dlU uZLY$#x0ENCBzG#zjK5!(~W 7BgFS>@V?F!Q "ب D3dMe6Z! Sħ;b %:¯潚OIho%!Iqpt iU4uVdyֱ.HTA0i?cϫP8##Cx)|*9|)8 Bk]pFa[N N~(M:NHvp OF5,3roClL&F|̓Mr#-JWy/OĀc b?H4 5:ugp50;bH]׾!)jF"CN:g8)*g*K4)?֣zlku T7_qCaP͐1LT&)hS)Aj PF5_xu!GFGё `I)ǰ[N +Reo; 8Bo R%+cpBێ^eXV>Ŀ8eRS̍@IZ0 '7x՛>Vx/IH=#3Z!szs5).Y'ԃG(Lr0…`rneF3B/*da[D,`ٌSm0ЛY Is_)_@~. e :%e?G零_Gf ڻ/)ٳfR2*JEI.! 89r)aLhK|uɂ+ĒWˣ̮ CHD±Z1u$y@&{>XgC)7*ȸ+S" ͩ a__! XPzw﫛tJ^Agv>@#rfwA„Շ&x˟E0+Wxy!-62t_vP] $ o ?ؚ^LSnʿC~s6[=Z@Iv'eޮ <+W*;aU:J(-t0YVQ,6bsȠ{fGRHy0}n(S:Wvն8)}t)*D>hJdٹ4dXT{CeGx6| Ok"pG 0*K`/ +Z/#R4ocsnQ+kGޤz)(Y.N^^Es( z_c #u}Owx|+cK3Q6jq-Ɩ[q/A/:@A@& f_婯e ,j=BTVT KySz2Cpu@2n~d#s"3wa8\un-㿥Gy|ڱ,$XRisd[c႒NH ( = ې*i}SbsN"ɚ>l3}r^„Sw66haHft)p| QtSa3HseLv%endstream endobj 367 0 obj << /Type /Page /Contents 368 0 R /Resources 366 0 R /MediaBox [0 0 612 792] /Parent 365 0 R /Annots [ 370 0 R ] >> endobj 370 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [155.6453 169.8259 171.5772 182.7275] /Subtype /Link /A << /S /GoTo /D (subsection.9.6) >> >> endobj 369 0 obj << /D [367 0 R /XYZ 72 720 null] >> endobj 70 0 obj << /D [367 0 R /XYZ 72 628.8226 null] >> endobj 366 0 obj << /Font << /F15 218 0 R /F30 224 0 R /F36 259 0 R /F29 215 0 R /F31 227 0 R /F32 286 0 R /F20 238 0 R /F23 351 0 R >> /ProcSet [ /PDF /Text ] >> endobj 373 0 obj << /Length 2273 /Filter /FlateDecode >> stream xڝXK6W{ص=3 s$AwN P˴-,u$yܽ[R`/Ez~WUVRP:LB >wm>nxa,n#sS[iyX+̜m΍X<:oGlt W?t.6Й.֒|ɖѩHD;n3^A,ݤHlK! 8oC"b$YG Mf1<7D';J}v?.x|$VPv{^,ʭ4CGWCͽYXwpGM!RLb1>I刁12%QxA`[&O f,I @_LDjϑJW =ɰISDNc+}97.@Nۋ`EPPGS~nx{W!5_*"3HL`ss4b&`Ӄ*a%$xTL g;dەffZֳRF%2ɍx#BAS9ÅdG? (h\3Cn[$[DF+XWQG;W+@B fPzm[ɕ՝m+:F8 !p!;~Ȯ#^S e+3jNuΘDݠ׹$^0 p)tvi8 }GAFC;p&U*tbYp)Mil0j%ZIm86cR{H> endobj 375 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.3068 584.6429 124.2387 596.3324] /Subtype /Link /A << /S /GoTo /D (subsection.9.6) >> >> endobj 376 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [376.613 498.6275 383.3379 512.4424] /Subtype /Link /A << /S /GoTo /D (Hfootnote.3) >> >> endobj 377 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [109.1856 339.3467 122.0872 351.0362] /Subtype /Link /A << /S /GoTo /D (section.10) >> >> endobj 382 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [416.2897 104.507 434.6652 117.4585] /Subtype /Link /A << /S /GoTo /D (subsection.13.4) >> >> endobj 374 0 obj << /D [372 0 R /XYZ 72 720 null] >> endobj 74 0 obj << /D [372 0 R /XYZ 72 556.5218 null] >> endobj 78 0 obj << /D [372 0 R /XYZ 72 325.0778 null] >> endobj 378 0 obj << /D [372 0 R /XYZ 88.5877 119.7499 null] >> endobj 371 0 obj << /Font << /F15 218 0 R /F36 259 0 R /F29 215 0 R /F30 224 0 R /F20 238 0 R /F31 227 0 R /F21 262 0 R /F33 266 0 R /F38 381 0 R >> /ProcSet [ /PDF /Text ] >> endobj 385 0 obj << /Length 2130 /Filter /FlateDecode >> stream xڵXK6Wtrp"=Ć $=m MݭX3do(Ǵ nRdXU7w/^7NEajww&8ޥEƅ*vw?D'(7n^X6uCr츭|RvUc?~)Ż д}7ᡬu;,<&rZ%&Lnǧ0qCzcʃw'^v[$X XN;{*DíHGWU=Tafl:d8΂줂T݈#i0e~n*IVV\a%Ĥ g=2i-,~y@1 #Ixbj۝p$d:? QyC;Dثl<@1;C糤<nʉ$lE2Xh{pǀNĤWA#D*AB!eZ'GvIΑ\(lK`59=8TSO,ZC7υꥏ!NHY 赴cCFLn>nqHt U%1!48y1!l E3at>%c\1Y|`Gڟ6)vDJ0=:~`cbd S-_$$('ȼ'\'kWG# Bt[Er*Cyd8hSy[Ϩdilj0dUtS jIs69-Ɂ\A&ؙph$X7r<,S䳬1`t /'^[f38Q eM Aq1/10rjY,|ly+fX0x^.0Krw{E' $un0Cv!;>`{0^qn&v~(B;Q6R( 9K*uqe-# ̟f%>`i%7dR-[M>PB鈃+rp'd [eyr YVKuLDt^&Qw D䉥24i<9J[IRQEE^yt(E}K KWDʏ_ {-'gZbr@I ؗ>Rr*.@'M|#\)I8*_krdbB-xeOx:NX%ي]ظH44k8բ.A* G[;g.l?|wPQر 샇"c^3iI\/U!fq|My&& (ɱQűJXT)憯|[}2gQq!GQT,wʳOp9I a2G%;#,Rx.cR}lxendstream endobj 384 0 obj << /Type /Page /Contents 385 0 R /Resources 383 0 R /MediaBox [0 0 612 792] /Parent 365 0 R /Annots [ 387 0 R 388 0 R 389 0 R 390 0 R ] >> endobj 387 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [110.2135 471.6665 123.1151 483.356] /Subtype /Link /A << /S /GoTo /D (section.10) >> >> endobj 388 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [173.2765 305.3425 194.663 317.032] /Subtype /Link /A << /S /GoTo /D (subsection.14.5) >> >> endobj 389 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [350.9086 286.9354 358.3557 299.837] /Subtype /Link /A << /S /GoTo /D (section.7) >> >> endobj 390 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [384.5894 286.9354 400.5214 299.837] /Subtype /Link /A << /S /GoTo /D (subsection.9.6) >> >> endobj 386 0 obj << /D [384 0 R /XYZ 72 720 null] >> endobj 82 0 obj << /D [384 0 R /XYZ 72 444.7954 null] >> endobj 86 0 obj << /D [384 0 R /XYZ 72 247.1212 null] >> endobj 383 0 obj << /Font << /F36 259 0 R /F15 218 0 R /F29 215 0 R /F31 227 0 R /F30 224 0 R >> /ProcSet [ /PDF /Text ] >> endobj 393 0 obj << /Length 1715 /Filter /FlateDecode >> stream xڭXIoDϯȍn).jqm HpB$@d,u(̿-UIvի~o)sQRDVDgQZnkf~x>K3uC_ڴm?mFT[GSաqVƆLԆXV u2rJ?>1 W[ZLuh@ ,^(Tp*kDp6t0#]~-Ir)7[U]eeѣțǖhEB H&qb61?>m6}6!HgVb$x#|vz3"(SSBgݵ3I+^s ~,$z\zKǮGf"' qcwn>Dn!zRN>U[%q: -kL=Ns>=$hkGdiM.zFG}bT&pA49ՊIfew#<Pۊ+Ap| ?ˢIǍ H]kn93oC* &"*% (fAH̡CA u־BJiAX2vD5Љa+B.2j I3k5ODZ:z=Q(Ji i;-T+ZA5X/D0__F7[6 F˃m2@[~ W|ަL!?g6!o|RZGׅ PkN,y%&b-aK29օ*.Lu߇!>VN% J7dO 'AE&!57wݽgzendstream endobj 392 0 obj << /Type /Page /Contents 393 0 R /Resources 391 0 R /MediaBox [0 0 612 792] /Parent 365 0 R /Annots [ 395 0 R 396 0 R 397 0 R 398 0 R ] >> endobj 395 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [94.8658 556.6074 110.7977 569.509] /Subtype /Link /A << /S /GoTo /D (subsection.9.1) >> >> endobj 396 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [405.1899 556.6074 421.1219 569.509] /Subtype /Link /A << /S /GoTo /D (subsection.9.2) >> >> endobj 397 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [499.6401 543.0582 515.572 555.9598] /Subtype /Link /A << /S /GoTo /D (subsection.9.4) >> >> endobj 398 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [120.7008 314.1836 136.6327 327.0852] /Subtype /Link /A << /S /GoTo /D (subsection.6.1) >> >> endobj 394 0 obj << /D [392 0 R /XYZ 72 720 null] >> endobj 90 0 obj << /D [392 0 R /XYZ 72 448.7623 null] >> endobj 391 0 obj << /Font << /F31 227 0 R /F15 218 0 R /F36 259 0 R /F32 286 0 R /F30 224 0 R /F29 215 0 R >> /ProcSet [ /PDF /Text ] >> endobj 401 0 obj << /Length 2214 /Filter /FlateDecode >> stream xڭXKo6ϯ-݀"gN bf mejCRm[R-i{[ȪWU_Շ] YPyqAJ 0A_V=uM7 *rU8;sXƏ߮yapABjaMPGRʿ>r`nWJa+@>sxKgBz'|DyW`li~3=t9'R]}oZg+0ъO~7kW9H`+^&l6(룄~]f+[Xk) l!jkv4R:‘n*9[-&g%P8xbuC{wϻTv0kihpv}SpT(ܩ\zSUak m<6proQ[6؂jmseD6K!<gBɄC;-Y]V e2/*[%1誜8 !'SIH0* b$`vchÁ1> ڇds118mQ)RYDPBƍr+fXܥXN-FSj4 8,#dx&Ьn awdHd)!Yh0Vz͌Öߓ5;dݞL?d-J7x)9C@E`C|G`Kc"~˅o+\7HGVܱ 'x$,m<ǂ*q6"g֣JMw6u;Nq>kC|&ji2O_`Š.`&Y_9Qb ByOM=tr!ש^Ȉ̠9PJHi{=!K0)mf e; K*-gⴞhWA. #sOkF"*0K~7-ؿme*{'*T|P)ÖEe#O⌳Rio%N8 'TrR90sAaK-?ر]&Cz]sG/`J.PGL'}}aۘ`u4Z]fL=$w~0nj륎rMKmML.gT~Fd[l;a0VU dv*;4-~V VZW4xĮfnڑdFɱO)' ?[^u% S~dUFo#'tixe 5{V#`~a/c>B%Pvn:ِ[G%Bu;qYfYyJ a#i 7R@GNm:,]vwrp %f&Q>m6yb7"jj\*8$Id,愈'_00ASMqމ k-D yq@H0Uoz)'Ec>޻YMOrM:瓽\s!6𥌮k1qQ*AoFqE4ࢤTS|<.QWK}8?o[75sXl=-G(,k Lb` Bzᇫ. endstream endobj 400 0 obj << /Type /Page /Contents 401 0 R /Resources 399 0 R /MediaBox [0 0 612 792] /Parent 365 0 R /Annots [ 403 0 R 404 0 R 405 0 R ] >> endobj 403 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [220.7615 306.912 228.2086 319.8136] /Subtype /Link /A << /S /GoTo /D (section.4) >> >> endobj 404 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [214.0277 98.1644 229.9596 111.066] /Subtype /Link /A << /S /GoTo /D (subsection.9.3) >> >> endobj 405 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [525.0643 98.1644 540.9963 111.066] /Subtype /Link /A << /S /GoTo /D (subsection.9.6) >> >> endobj 402 0 obj << /D [400 0 R /XYZ 72 720 null] >> endobj 94 0 obj << /D [400 0 R /XYZ 72 156.0587 null] >> endobj 399 0 obj << /Font << /F31 227 0 R /F36 259 0 R /F15 218 0 R /F32 286 0 R /F30 224 0 R /F29 215 0 R >> /ProcSet [ /PDF /Text ] >> endobj 408 0 obj << /Length 1946 /Filter /FlateDecode >> stream xڵXI6 bs=0$Lj[~O- b_N"Rd,/^}+JpʕRaSƭtc`r D7Xqnq1R-ч'\H~=0KǦk/<#ꀒOD;S_Uft)%+[ Tצqnd]nԜB(K/0 I]` OЪ`fEĕlз88tFæm[c-^>+m_TSXڴc֨%SsyfO]*b^[g ͔m +՟aK a{W~NS]ݎ(); jYΔWI׍U=b,kz.хfo֢Ô/٘Z3-6YV;+N$KK|(LR Esĉh2B+xV зNxc#!8|x) RΕfҺ(_?L`+0jfaԭ؟̯ *",NwL~?vi!c;D#FWe(f^$3eGtHw8\ݵ/7pҰ}>4Ovͣ$EY<9 ̬KPbJ d/He?㡎#`T6(#9pTV -03)hd\)ĬnRߪu\)Bu#}0~wSElVvdSOR5ɇPK>xrf #E 6W.~^eJ7967Yژtm~yҕ WSButO$}wqtۥB G vV?SlsyckX~z9X(|ש ASHΥ{ -5Hp#a[tAq{FdPAU2 qmCRҒ}#7BF%(ghMǿ>Jx'=mߕ̘-F&[a{&lQ58B)MRRCVm:p] c0x:nʧ/4SST{eVpg Ǟj/E( Pi7:[LdKpV(\6Ts7$B{Ix4}h_޿dyu@sqJK~_9{@Pj#5U e'SׯPH<Č{g8,Mb>of_}Em_Cَvb7 B|[^Q[|ocqF߲phC݊1@*<ҾËjendstream endobj 407 0 obj << /Type /Page /Contents 408 0 R /Resources 406 0 R /MediaBox [0 0 612 792] /Parent 411 0 R /Annots [ 410 0 R ] >> endobj 410 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [255.1498 219.6468 271.0818 231.3362] /Subtype /Link /A << /S /GoTo /D (subsection.9.3) >> >> endobj 409 0 obj << /D [407 0 R /XYZ 72 720 null] >> endobj 406 0 obj << /Font << /F15 218 0 R /F36 259 0 R /F31 227 0 R /F30 224 0 R /F32 286 0 R >> /ProcSet [ /PDF /Text ] >> endobj 414 0 obj << /Length 2844 /Filter /FlateDecode >> stream xZKoW'v6cX'`bdsg8%9ԣH$/rbwu=rgJLf|weB':=Kd&U0OS].Vkc\^:ZE&ʺ·@O+[tu-M3iY4W-| =;ޫ\4ߦ%}qc-h{E]T߹%1`z׫Lfhb_n2v!M) )b+hueQu,8exڼY]w q MY .yMTt9VMx2&jB쇒j{r*˪cj-%֥pZ%ba_5X0I~X^md Ia ;o-c>"+V$F1+FhY w]ƀ/y1pJY@ \=?cN#w4Ùb&.Lʫ!6lMIH.&[t'% Ow'@KA)@P؇J/xqs`y$Ka j)+ WR6t>cy}Hm-b#ElX%Ha4{cJpzxt2y҉,T)\FLh4I=V3JS$h ! /YEIwuh녊=lODT츲͆xKQRwx=#nf׎ѩVp? qw->MҤ!SMkPt^1( )2ų\uڰQPodX@v= " ,<퀹C2!X-/;]QgoyBhE~flPs#!/m6uz;'9fބ.P;^.  ̒ !{ 2ID*Oj++fdc@cK'uWP}a#S;> !&/K4Q"# "HLye'J$zb2tHn<8녂 ^pwt(0^77?_ab2OtbN5tУe3)"?f铈^0_. a/uq@0뗣bHao`*!մeR(V.AF<_z6s^ jPA(wynYWu;!4q*rSY8CA~ͽ *oJvYnLdn]WK "aO4υ, 8fZ o=g$\ ӯɚe>{E}U~&D):ÖUF%v-WFx\K\x$t".IVVbih\жY>% ){ Mn22ACXrce`h] T*- =,D'(3*TwlgGl>LNCu)8c1BmH4Kow<쒻GMosǥ' ZgW`YęM]z589-^)njM⒫ó=^2|r';MZ>=I> endobj 419 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [261.7312 296.6114 277.6632 309.513] /Subtype /Link /A << /S /GoTo /D (subsection.9.6) >> >> endobj 415 0 obj << /D [413 0 R /XYZ 72 720 null] >> endobj 98 0 obj << /D [413 0 R /XYZ 72 282.3426 null] >> endobj 412 0 obj << /Font << /F15 218 0 R /F30 224 0 R /F31 227 0 R /F20 238 0 R /F36 259 0 R /F32 286 0 R /F41 418 0 R /F29 215 0 R >> /ProcSet [ /PDF /Text ] >> endobj 422 0 obj << /Length 1420 /Filter /FlateDecode >> stream xڭW[o6~[$fEԥxY:l@=(kLRC΍e+uHw޼3QʺL$Ļؔ=6eAG5:$ITDU gqloCs %AQMh`塝R' h:jX]еf8WM11Ds\ \Tlbl?\)O۠ h0}S] HTO) I`@ Rb]܇&%8Aq`Ԣ/?92+Nb2vQ&eJ/9u |\tU.Fy)K:Cmdێ:E, Hw5֤H;p[dXGQ4pfm MxC>!? \!ofic3rJ*5KIƍwd{ )h\dU7PI9= >ڱ*+~349+',GX+eXS`F*#SD`o^[0M?#an#mmqoHؓük\鱗+Yc aCcw+yS5@g aœk v49$GP@}Z~O˰wڸBx׀`?!=roE#=Of )Z5 w(M5Jo4N#O4.eEڃӮ'uV4g>) .'Gd, <xMdC*n@!Xxju?ַTkOt XȰsYQf?% Թ\0rB ,LtkU0 GT"cS,RI[ 2M7.;GǵxPT!Glwz]s "2 rs3"b[ڌ[9S2*=Ɯs_6y}K;֚b::x'sO]VQSHyd*TdcmWwu)+J⫚az_6w[/EY~x ʣYWPOѩ_t{ecyU-aݔ~# ]q?/.?;X?Ez+p7䚿7ܥƹ  뒧v{pk*zQRwD)+_T*.A/GsFWt˒J+u:7]d:}('E/{3*@Qūր5endstream endobj 421 0 obj << /Type /Page /Contents 422 0 R /Resources 420 0 R /MediaBox [0 0 612 792] /Parent 411 0 R /Annots [ 424 0 R ] >> endobj 424 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [344.9616 579.5916 360.8935 592.4932] /Subtype /Link /A << /S /GoTo /D (subsection.5.5) >> >> endobj 423 0 obj << /D [421 0 R /XYZ 72 720 null] >> endobj 102 0 obj << /D [421 0 R /XYZ 72 624.2398 null] >> endobj 106 0 obj << /D [421 0 R /XYZ 72 227.1938 null] >> endobj 420 0 obj << /Font << /F36 259 0 R /F15 218 0 R /F29 215 0 R /F31 227 0 R >> /ProcSet [ /PDF /Text ] >> endobj 427 0 obj << /Length 1137 /Filter /FlateDecode >> stream xڭWMo6WT"$[m iآ[)=(6mՇ{b{g8"ˬc=lLÙ73ͻp6,HY'Ib.ɜ8̭~>O~&>8JT.,۬UU9c{kC΃(ceU2-G3i!3̯_K<`ii$77d!VҸj:[jVrukTni3&4*n &+)ɺGXDAփ4xenfjZW:ٲ*K|fB[JeVr \qIq9{&\_Ø:WE?MBZЍ,e䥨V]._3jkDqX)sk.oqd}sN/޼^R3p{O҇vnxJ1,*(TjB a %}|;sVTՍpgw{#3b"H< XH2(][%8hLlD.Yѯ986 6ഔ0ZtX_&a~k=%mzEf6Z\.Fq,/(GaYo7:hw׀ 4Q [d.;} q/T%򫮵eEݖU$WTae^Xs\`R?S ? Ca3|B|YK6Nyx7YiW&H@ME 쨊9] >FNA4+i]}st^h2ދ"U&"iHDpc]xz+KbupA5NE :: jG):.NmȆ܎~<.oGϟ1_%ޟǷ@$i$ :h{?٤endstream endobj 426 0 obj << /Type /Page /Contents 427 0 R /Resources 425 0 R /MediaBox [0 0 612 792] /Parent 411 0 R >> endobj 428 0 obj << /D [426 0 R /XYZ 72 720 null] >> endobj 425 0 obj << /Font << /F36 259 0 R /F15 218 0 R >> /ProcSet [ /PDF /Text ] >> endobj 431 0 obj << /Length 2409 /Filter /FlateDecode >> stream xˎF>_9f6 Ɂ#qFJLQ@zIɜ{ r쮮wUWxu;-V.fEnn)W2ir~4N`\v+5b^S wi^W7@)|G)_WH'R}e>2t].MjZVQjWLJbjV;붉/f榾=voj0InOEJ3L5RGX<ƞ|Uoޙt&uJg:],]|;0I:0s>1߂z|=R oϮnw\ciW^[,}gDQƪ_!\Bk7ym+6W6u Pg$ \uG7(Z%*KgaN`Ue *+xToTG=|l*^ѳ-BMșKjlH.A!X%b)wt([kFe4f̂VV\L97'w"{H3"u{ j5¥!] y*1Ƞe҇ӪFT>Z$z4nLldj'3:a3IEuƣ{ :ͻzظ[ *򗐔sWm5 FDŽz{m_ ,"G!$r\AiP#7IDv(儴rlҴf#+ǎ-ݲ_)L- m׸g7AP2T ߔ=-I K8#Rhqsv [ò4W! Q"Jχ`ՈbK$Ɛ} btUSQ8? yuVQ F&7s\ 0 I Kₓ] ow)YW63M X뱌H-уAy뒛cC^6+2%^5" ,&xljSuzI,k25 tNxO}솂ㇵdxBr'M*genNBڇ2O (SC8-GYv`,(S Ib(JB&DGx3hSȡ/W/d A藈9 g5DVz̔:9qn'aKs?iJxg:Ϸ3x,`_o 7s^@LX}='uOۿveCBpN#wi15c u|lH@.V.@AJ%6Iz,SDP3Dk ?5EŌy `u-EMߌu*H}M^%&[%A }D76dHah`ׇ3pcJ8VTWʡ05zOB/o)vs! <7'y%M4`ǷZ SX9$4_+* Y8㌶Cm@-mM# .&L@qW=&0CC]Yt_ccN@Ԟ3/PzJSԳ(X0 cҀTO)~ށ\q*q@ipg{8h|8:syV9<6 uC*`oendstream endobj 430 0 obj << /Type /Page /Contents 431 0 R /Resources 429 0 R /MediaBox [0 0 612 792] /Parent 411 0 R /Annots [ 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R ] >> endobj 433 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [516.5795 365.7362 540.9963 377.4257] /Subtype /Link /A << /S /GoTo /D (subsubsection.9.6.1) >> >> endobj 434 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [292.1797 352.187 316.5965 363.8765] /Subtype /Link /A << /S /GoTo /D (subsubsection.9.6.2) >> >> endobj 435 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [499.7644 338.6378 507.2115 350.3273] /Subtype /Link /A << /S /GoTo /D (figure.1) >> >> endobj 436 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [403.3374 293.7384 419.2693 305.4279] /Subtype /Link /A << /S /GoTo /D (subsection.6.1) >> >> endobj 437 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [442.1253 293.7384 463.5118 305.4279] /Subtype /Link /A << /S /GoTo /D (subsection.14.2) >> >> endobj 438 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [402.4882 275.9375 409.2131 289.1463] /Subtype /Link /A << /S /GoTo /D (Hfootnote.4) >> >> endobj 439 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [491.8698 262.3883 499.3169 274.0778] /Subtype /Link /A << /S /GoTo /D (figure.1) >> >> endobj 432 0 obj << /D [430 0 R /XYZ 72 720 null] >> endobj 333 0 obj << /D [430 0 R /XYZ 272.8181 500.8177 null] >> endobj 110 0 obj << /D [430 0 R /XYZ 72 410.9905 null] >> endobj 443 0 obj << /D [430 0 R /XYZ 88.5877 143.4582 null] >> endobj 429 0 obj << /Font << /F36 259 0 R /F15 218 0 R /F29 215 0 R /F31 227 0 R /F20 238 0 R /F32 286 0 R /F23 351 0 R /F39 442 0 R /F21 262 0 R /F33 266 0 R >> /ProcSet [ /PDF /Text ] >> endobj 446 0 obj << /Length 3425 /Filter /FlateDecode >> stream xY=bїR@43I[ j E@]Zɐ>}c"n\;Hqoy&핬EzQFտzT_lu[,eulWܲϯ*T~^-i]j w?7ϴ &~>c@pp_Ì^~/wuslq-\WYsl=Np@74v_-"&^-Ś.a'kW3SzK=t 6Dr׼6pM~.C0f,RB ]DWkH9,0bV*?T23NI𽅏Xe§^w xdӫxq<{[$MmLq͒H%qg_8D2Vl %]+„ 5esP)/D4/B PC^=uZগ'Tv (- .qK &va"*N?&Z֍1';2!,Uoqj8©`džSW^D_󞅏 iAs5V5hMUBX}]Hlo:k"nzԣ$L6-"FO5^R Ö,iK V]c|F&L"^ ,^. ʧ-|_F>X^C']=X POM f%Hf# ]"T'(bd F# {+շ%Nk"T2 !Y@a7{umaPEFp_=úD jnE=ߵGz]m'!!/%A9x*B<5\RDPlt%0O'"a>n&$̐V0j|* ](x1x+6L<녃XkK􎥋< bA JcmyprG 53enI^wܶ!H8iotfR UxQ2/u0@? Ocu5ODR^1%HͽD Tr*0-%ױh=~`gZb5XiD=JV~˄]&z i2'1mя-X A=bJN<㺹ny"Nf夳q;U!Z&#Z>44Bbti\$jr?jg[Ì9Sc:>Si҂#x̏(pFױ0N]g=V,1ˁ/p]4 i)j E]mg>R, 0Rf6<7>L-b~\g_yti"Xoӹ}jA/;uESn|1+Ǟe{!iG{T.E;}F◄[y*"BvwH8[#\Dp4&0R'vCWp6>^XUa:3QqyTqWN! H߾^lA1%NZ?>::>Y)SiOٛ-Q/ ErONp3d)H-F27*(k7*޲BE|]Ė >Jz]Ɩդs?ygX ^LɌOhY=>kl,"! 6R,S,;%{"EZ T0cv@13'⨽LXn8gQQ$G+3x&$<"@RȈ%84%Fe4X;LT{">? _2 f0ozofNzx=] A͒~Ӟ|p凎X9y!m5Zow-L•. ztJE|@lϿҫIIendstream endobj 445 0 obj << /Type /Page /Contents 446 0 R /Resources 444 0 R /MediaBox [0 0 612 792] /Parent 411 0 R /Annots [ 449 0 R 450 0 R 451 0 R ] >> endobj 449 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [265.2368 578.0652 272.6839 589.7547] /Subtype /Link /A << /S /GoTo /D (figure.1) >> >> endobj 450 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [456.2765 319.9832 472.2084 331.6727] /Subtype /Link /A << /S /GoTo /D (subsection.9.2) >> >> endobj 451 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [530.5189 306.434 537.966 318.1235] /Subtype /Link /A << /S /GoTo /D (figure.1) >> >> endobj 447 0 obj << /D [445 0 R /XYZ 72 720 null] >> endobj 448 0 obj << /D [445 0 R /XYZ 72 651.0592 null] >> endobj 452 0 obj << /D [445 0 R /XYZ 72 263.8325 null] >> endobj 444 0 obj << /Font << /F15 218 0 R /F32 286 0 R /F41 418 0 R /F36 259 0 R /F20 238 0 R /F39 442 0 R /F23 351 0 R /F31 227 0 R /F30 224 0 R >> /ProcSet [ /PDF /Text ] >> endobj 455 0 obj << /Length 3215 /Filter /FlateDecode >> stream x[ݏ6߿ogkI%KH - =[M)-mg%-$|f|{uBO%j51T艁g)=Z2]~6W\Mm췫m-1\ u $RG!BKG'b@ƅϳN7<'sXyՀ(2Q hN`FِP*$%IZWjErJxwLRˌ997ZЄ JVnQ8ߏYĿ9gRwc.q1~ GݓϿM"m;̹/f vItgTjGjhV捴_]`,- DXm'/~Nt%jr7n.~}ſyb88~0JA+yQE]w21?nTe3)(!^>Gz'K]J VN>\!/++$\ y"Rqx +o5Ƒ [G\i61\(͈4R?/%e0)Ri؟DOv+r^ LQ&Ih`Zylzzu5i+2ST;zTYEcX6hS'X/am/cݺhi3?q#RNim$*+j "tcEln_`PM[>8I1247)hKGYCWvZEmq48PMHdYD+|"W\:YXN{Uog N޹$LY3n ]ox46j6geFӱ&ߧ"Xc3rj@ 7|9j,LHB(dXc”R ga\~>Rd駓អK7!>FlqJC5+~H)6%ӏC |P;ۮfQDF ߄8<(\Ht0>D2Q'?#0J?#uY`w5JKʥ @}ExR€9'U3 VA?!GITT9vI0el-]]mJVh >-A^RFń[T tΕd(&|[p#@+Tֳ$>4-8'Z8ږTxFH |A5W}̚UoGÂH+kMr*;ҁPXnŹT sJ?7;9k* s֗ E v$que,\g=YA9xR@QEL#<&`w3vK!<Z"6tJ]6:$ܷ^lccϛM{nB\ymLGouv {J}xcp9]e`!@K6% @^M; ~g!spK] 6/fm Ͼ!Zg.u-=s=Lҝۥޚ yMtvI#;onq(A/QЁ >, #p&`@۹Z]L\Aڏ|7w9O-jyY.}޹HN~15Ï4@sVc|WSlj،~7QS껭WClRVD .¢uqi-겴lCQ1Ń&-Q"4%e᠉(ҩG)"岅ը}_{ULV\PO #s3vYLvR?%kU 鴚8Ӫ ~?F~1 .cSڞLCƙ\O'XbM 2KŒxVɼ?fs{E"1ʷ? 7"^*uSǙOow^Ɏ+q?k 0atdduXt+ }7,)j!Ss' WPWendstream endobj 454 0 obj << /Type /Page /Contents 455 0 R /Resources 453 0 R /MediaBox [0 0 612 792] /Parent 470 0 R /Annots [ 458 0 R 459 0 R 463 0 R 465 0 R 466 0 R ] >> endobj 458 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [408.8069 468.0118 416.254 479.7013] /Subtype /Link /A << /S /GoTo /D (figure.1) >> >> endobj 459 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [244.1007 407.3019 257.0023 420.2035] /Subtype /Link /A << /S /GoTo /D (section.11) >> >> endobj 463 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [292.4548 331.1956 316.8716 342.8851] /Subtype /Link /A << /S /GoTo /D (subsubsection.9.6.2) >> >> endobj 465 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [291.8843 257.813 299.3314 269.5025] /Subtype /Link /A << /S /GoTo /D (figure.2) >> >> endobj 466 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [218.2194 244.2638 225.6665 255.9533] /Subtype /Link /A << /S /GoTo /D (figure.1) >> >> endobj 456 0 obj << /D [454 0 R /XYZ 72 720 null] >> endobj 457 0 obj << /D [454 0 R /XYZ 244.4999 484.6784 null] >> endobj 464 0 obj << /D [454 0 R /XYZ 72 276.3072 null] >> endobj 114 0 obj << /D [454 0 R /XYZ 72 188.7413 null] >> endobj 453 0 obj << /Font << /F36 259 0 R /F32 286 0 R /F39 442 0 R /F23 351 0 R /F15 218 0 R /F30 224 0 R /F20 238 0 R /F31 227 0 R /F26 462 0 R /F41 418 0 R /F21 262 0 R /F24 469 0 R >> /ProcSet [ /PDF /Text ] >> endobj 473 0 obj << /Length 3313 /Filter /FlateDecode >> stream x[Yo~ׯЛGX#/mzD!sF+OUW7{shJE>~TZpxﮝv<00 uQq5DloJp#f[/zzЍ[ŬX\89M>}ߌ?5Ml5a×4[.UiF&5b\q(z> GX >RD *~=).#hͤTג9't${ lv/.ӯ"·dqbfOl! 7zǤO9YeY6d/`jqڥlRFِԻtc[>v^ufH?{&틗EL!@5uy&Zkʷ6hSW=Na6aPͥPC}=qIY7, .n%ça<"~,4 (֧&wᕸ-, /XSMz@$3t㿮~)@Ҕ^5 <u =baD,[9 !}9dZjEB8Wo% ýӜ,0d Ԟn#-mgz]s_[&(tcՠv5+JztߏgRHy~ve%6sB̲# K\f.1>NoPl)`$BGuca%-!y1 ~m[VA}e̵qS65!:9|znl jE-qe.VF2̓F MT`h;SȈ`0ɥ}=mknapH.mpnNDB ؑlSD*YcQ Pi9"`I4"%LL Ӏjw݈RR1HWFY,}mlV+Gf. YA-h-=[[1q϶BVLjaLC@\D;\]pc$5H#^l{zy'ĉڅ#٘y vi;k7E몊 9Z?+YXbĐy>-Z8!m,UD~T=nC>l]EFlINdEێ;>"S4NPpWDifw2nar-ًt1Nk3h!.!hDZMִ/Alݪo X\jEWWNU [ǀcY&΢8?{0@3DT] dTHI`+D' V~P8 fr[g?-!by}ö)ӈ.7Vcwx?LdX݀)'1f )q҃Ԥpj 5 [ʑrU9qqo>Fd⺇#^=>Sf` c!q/ RA3(Tp7er}Y[*f Vr]SJ0U1?{PamSIeM~bݝpJ}e TǜS|z?zTk 3]ҵ;Л!RDf%L֗ޕzM MKEq"7 2N$!YȆܗJ^z,\89,$BQŴ^T(Cu'aܰexNt3wfg]V-EʎH{&=0.N_;^O72ybHEt\R% wFŜ0X n1I==#}QMrY8UO`t z2kͤLk/(Tm)e0&xk'$T)GÄF;,HzA)#2!Vgy"jg,T' +*Q~cVV `ITBvJW)يG-aQrO$jgmr+d|jqK3 UL<`,FFٻ5dH32A %%mb HP644@)%Qy) TpB3tH@,HY:.iǵhiބ=SB8,aExޖ_m|x qiXםctO 6nRP?!rh)Ҩ|nJUDl/Ҁ/N^ ̫qE~IPs1*`EQ\Y.m2ng g!=?=ؤAS%r#q/Ae8ݔpѲřҝF:T%e5|>ꑡCblW4zersȁp^4"k0u݂S:x%֓K`S 9@>NȡNu<FSrGS94rCEU^/_C"#?w?J܄ +Фޤn 1y8&|8yTL#r煫,7{BD;|v#O ?-/U/bUy7B Z+7䂃x|gg\IQL0t`=Ck U;1t)Cu^6kpQI<~ɸ:?URE*rT(H3 1uBLf)5Kf)#9xXa^[]IACpn!6и񠐩rO"žt#En@j}0~i,Zf~ lbltnsM G؄7e3%!aB6U$)a8 _t:W|kߕPzإR2Cy(»Ͳ:uz {#=VGz_-}VIf<qc̱O/ ow6 [>Vv6|7gVW;Ŭ,~4!+J*,\+ӁCqEw)ARi|ˎ&iR/3UG\@n DdtFF{qvM,:}H:ܥ.Xފ|_zŮ--rNcukж5hDCQ;Gi|:|.9F'><2]>u#),"6{:@>71XH?OSendstream endobj 472 0 obj << /Type /Page /Contents 473 0 R /Resources 471 0 R /MediaBox [0 0 612 792] /Parent 470 0 R /Annots [ 478 0 R 479 0 R ] >> endobj 478 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [186.519 580.8289 193.2439 591.9165] /Subtype /Link /A << /S /GoTo /D (Hfootnote.5) >> >> endobj 479 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [516.5795 505.9279 540.9963 519.0786] /Subtype /Link /A << /S /GoTo /D (subsubsection.9.6.2) >> >> endobj 474 0 obj << /D [472 0 R /XYZ 72 720 null] >> endobj 118 0 obj << /D [472 0 R /XYZ 72 262.36 null] >> endobj 480 0 obj << /D [472 0 R /XYZ 88.5877 150.2055 null] >> endobj 471 0 obj << /Font << /F32 286 0 R /F15 218 0 R /F36 259 0 R /F26 462 0 R /F20 238 0 R /F23 351 0 R /F30 224 0 R /F27 477 0 R /F21 262 0 R /F24 469 0 R /F41 418 0 R /F33 266 0 R >> /ProcSet [ /PDF /Text ] >> endobj 483 0 obj << /Length 3085 /Filter /FlateDecode >> stream xڕZKsFWttS۷'b|Xzt}@H"L7̬Zx|QI=en2*ag $vyTQbx-`0E<e0=4(XQ(nojy0A=C3y6Ü%B+Aޙ`h􈪓y"xǁl0̶;x=팥Qg6wT]`bSi-V$qМgvju J6m*#oJ= ,4rJ9s?k5 "QE4Mð9'@4]F,?^Fk9I x+P$6Ճ3Ôv'jLh\M#\ PJOdlX=^ǩaՂ˪Sf)Qڋ@ cwsAtRQIN;lRBGE7tV:QdQL٫@2 nQGFƹ-ca7O>G~gr% W qU7x~tqSY KaHFw2)ԋuu%Gs9ͦKّ1bTca y︈Z|Jɿo9 *Uoek'ET2,!A x%1?jsܙ$$$c ^\f6.4c"clY0HT?")JLo]Q,Z-`&Rub8^&X', =KTBkt="ƭ`a[J>׫o8M\v?ǭu"C+fr+ܡ_9ԋu/؋K$ IvA[an%tUv[פLah:%0wy#& ,1†(JhN$] ѩ:#xZh D+G +/%F`4 H}H>D;Lwav# XmjKxΓ4r~Clv(q"yz?ݴ%$M:6QeY5y7?݀ΖER[u7hwv?Da\ДtM&qakȆ-ot3{8@ z9yP=~Fk FKZiVy(pV+B5'ˈ’*f$C;R}=qKN1< {/-xmS6$: yXz NdCˢW?9ׂ%m]%`*'NT'Yt'zHS>է_eY-(W"OϜ{q\U\eO-k' Aj^DVSN\8Kc\N`5jn/I4Ou-^E75K[1.+HwIf+ /ݸLYn|RNŲMR"븞a.1(&C7Ƕg P= ̗ch{%t'U*U/S%$稴_IUL>%3\9 /A "@*s?ʲ  '+nyUQ(ka0%=="a!>8[86ݣLa5w \Mz拰ԆU5.P!j?yF9fQi=-',w٥Y|Dua.OzDPClqYKqAj)\Ԝud}gF4ޒVsq#(.qY[h`G~^‹mya mw4 Z\h rg0rp}zG֧6#-2'ޟޫ!ؗFuǎ~ӂ@ʿH50cX%璏Βg^v*lz]$Vɩ~ql^ ~}[`2_ _bPDә0s2[ŋG>&Wd&-ҷqmN\\VRNo8dPsKZVGy|`)3MrtմlsvxXPs uuj>nAE/xi0Λ7'V RĺKn<9wd k:o0D+I\?248,(jqE#|7A` f |Glu Kw@^g f[uJ%3Vq/SfWʐ&bh*ؗS}8릾{|OM&NN)ߋ\Ms.[wNjg 8*[ߤg85aV@4Ln$И\6w:endstream endobj 482 0 obj << /Type /Page /Contents 483 0 R /Resources 481 0 R /MediaBox [0 0 612 792] /Parent 470 0 R /Annots [ 485 0 R ] >> endobj 485 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [132.9756 496.6201 145.8772 509.5217] /Subtype /Link /A << /S /GoTo /D (section.11) >> >> endobj 484 0 obj << /D [482 0 R /XYZ 72 720 null] >> endobj 122 0 obj << /D [482 0 R /XYZ 72 589.6586 null] >> endobj 481 0 obj << /Font << /F41 418 0 R /F15 218 0 R /F32 286 0 R /F29 215 0 R /F31 227 0 R /F36 259 0 R >> /ProcSet [ /PDF /Text ] >> endobj 488 0 obj << /Length 2579 /Filter /FlateDecode >> stream xڕYr6+3ʍƊ+l, 6b&H%hQFM}{|:ѱ*R=&K'^D-ۙ"z2R96mLL +ddwC2L4 >7՚e%$VL }gu( TÂR:1*-mG鵱UaaS.4e g;g6v}j0[0aJx|sUĞve@[#?@ll ]d l.UY^Z1Ranq6V6ʲDf! !?Vݥ!0%.;2^&p\rصrm[UksUKqy/:ӹnB?HNc8R _`x Hy*GZ& Kf%l kp='{(r'h`aq4*tVJV[4lL @a-.}jۘXE,fpѷdz.2߼Z];6璎abMBᤦ\{M"0IBfR.GP zAVa@'&AC,8ؒv&eQF` U" ,%T9ﭧԻ;Vݵȕp fpQ1ʋ<<"$8BI UiLGc kLu~8U *}j eWL/ М*uNb`TVgf6ʳ܊:߲,le3`Qo%H&lc@68l4>>Bk8p(L@u7ɢ΁-'WRMt7xX-,ʅ퉲pCK._cLA;8S_zl^$Ry02T$2XC^;sLp Zp7JaQZM'5+_%sȊU0j<ʖi`ja 06Ǜ%HRŴvWtJ׬\{1БU|>@M L2ƺ7J ʆ㎎9\K N>ndc!렁kӯkg23Tvm8},^ۓ@.Yۨb`$,,MtcOt*Io}:16,y"mY K&1/ cӴE'Ģ|@P;BSc,c.aA}/u;_ )Ez]STE7(ylbb.xVmvV>H5l+[S% (Bb]O>|>N4Nstlkr'[d96z;_+{Wٓpܡ{'r|͝5" wiF+zљj˷w (8T2)7Y!!+G泬Bky|#{>^xzNن 5xO1: ep/\bLi poLݫmv-1|D]jl|Wsd+La@> endobj 490 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] /Rect [526.2765 555.27 533.7235 564.2928] /Subtype /Link /A << /S /GoTo /D (cite.java-attributes) >> >> endobj 491 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [483.1254 498.677 504.5119 511.5786] /Subtype /Link /A << /S /GoTo /D (subsection.13.3) >> >> endobj 492 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [293.6706 395.8033 306.5722 407.4928] /Subtype /Link /A << /S /GoTo /D (section.11) >> >> endobj 493 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [384.5978 174.5197 394.7722 187.4213] /Subtype /Link /A << /S /GoTo /D (section.A) >> >> endobj 489 0 obj << /D [487 0 R /XYZ 72 720 null] >> endobj 126 0 obj << /D [487 0 R /XYZ 72 604.9336 null] >> endobj 486 0 obj << /Font << /F15 218 0 R /F32 286 0 R /F36 259 0 R /F29 215 0 R /F31 227 0 R /F30 224 0 R >> /ProcSet [ /PDF /Text ] >> endobj 497 0 obj << /Length 2434 /Filter /FlateDecode >> stream xڥYKoFWs zO DH"sX Ɂ)D*$ewC(bX]U]Uu7~n%cř\}ܭ$Ug"6_>ooV?ZK)5ZX)7Z%"RC姾lkP=?omlқݹ~ =߽߮:%]tR 嶩 Tw3hxT ASEǦ-*zMxm&xmQM)UWK<4(DCͮΰh?:B&BBxYE86P>*EF`FL&K}j(vo?=`Y[ݏ*C!2k&2]G/#rQ]v۵N\ݭVQn[_v|u\iԣH-qlR2x.ݕ*Lt,bi@^w;՗ _?ZȨjL`w̜%g}ٖ̬`XuH_2O`è$m*oNFo "#m>+3ԯ!I}>zS,o::> $J<0&o7Q),=B;xKiyf<ۡj6L?y"|0Ihpm*ɄȻߗ~Мև ;Yh :v$E0]+r(oTG=]q;:-9FŁ--S9duV'Eɺ3`E4fP+\+ϲ7gTk&2^_=|t:5w7lWvV4jI S&^'tt0X8k F!D{e6ъM]!2aN\@4 ~-J~, 7ۃ,gl疃䇷5&/e[^%A)2F{yoK NഈЌD䄆$-Je0^Xik;5u%5TKc(lj!vel8Czԛ~0^)5?q_@S4a[RVGhj>81p2b2D5NE)*cE'-8آKmUϟ%VtPua<M^υ1$AV (~=pof4Prp1Ǽ֥j<,xy5`}u=G[#:!zx I~9VUG]՞ap> endobj 499 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [218.3686 283.4063 231.2702 295.3988] /Subtype /Link /A << /S /GoTo /D (section.14) >> >> endobj 500 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [140.7008 219.9401 153.6025 232.8417] /Subtype /Link /A << /S /GoTo /D (section.10) >> >> endobj 498 0 obj << /D [496 0 R /XYZ 72 720 null] >> endobj 130 0 obj << /D [496 0 R /XYZ 72 463.4396 null] >> endobj 495 0 obj << /Font << /F36 259 0 R /F29 215 0 R /F15 218 0 R /F30 224 0 R /F32 286 0 R >> /ProcSet [ /PDF /Text ] >> endobj 503 0 obj << /Length 2545 /Filter /FlateDecode >> stream xڭYYoF~ׯeGadv%lJof8E" Mt@X+7 7)PseY3!U0 O撋T`c8/v]BPHNl@6Z{q(-`p2Ra(t $6pom`%ijR+p}Z |'(Ȥ^|VwEKz\z/ri,vf^uYϪN%px,8xH)eiۢ28FCaV55.2XZ΀TĵG54۪0mz-z zr{ U;6Ӝ6gˑv|j %Vu+fHK:x &W~ʝaA9;dUa*6s}>d"mRHl΢.b31"0𲀀n7|>8(qO_tp0s9QԑN9ߛFJg]! iϑx/>ծ&yХDKKU{}=.ѶOqP 75WB4AhMd盛ŌZ;֖BL7߿xVi &iPe$}Kîɏ,IYi)Ek7<iNŃKɔp)-kG򑡑Sfn >xvؿByXXABGj-hlA\ N']dz{9vysA̍71aLХ$8U^ X;(BąFI1v]^f<2kdGjS"8)ꑗxN$krt W<%GjATx82\+'hخt=q?١^[n:umgxdKQ(`g@O S o0wbzUFz $&C(g3dN7ZQSaz 1Rx/xsll* k3Ь0=P=rڐKrM=y4.'GSp{݇q $RO:w ]%˘ẓ)8. tb0 dtԣ -bnJ#s8Նq@Wy%!;㓺&J'_n)$FFGrsbchؘUkF_AsQ68HkatHK3G9Zkt1i{ceS8 X.7EuAL,"MY! |q;bXU&- ;ph$3.b 7ѯR[ERxaH[)Ror %ʺ3sRPW.Xˮ; Z"&?O&ŀϓ㻯f9q`b蜲>H=%]p;A?VҲ2x?x^S1h@]?sQo`Ǽ\\UV|3<^H!(Xcu4ycKODφ9ai6Gz((5XCT[dHgg8ڠRJs_wissg4? }Bg,@qϣg,GPuYG:rP7נK1ێҢ]d^<.]dג/3Or ,lx`%0Nπq[Sߠxڣ ld(e,A©+m(5/"}t,LiKW^=7hQNA`b9,'T\P^F8U!" 30GUB  !S0k#E1~ ژ9'sPX{Mr]y f.EG@"d~EJ0蝸as{Ҋ/wk^tu a`MurȈo{'We(ݍ/7}> endobj 505 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [218.9149 496.0398 234.8468 505.608] /Subtype /Link /A << /S /GoTo /D (subsection.9.6) >> >> endobj 506 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [120.7008 428.3934 142.0873 437.6717] /Subtype /Link /A << /S /GoTo /D (subsection.13.3) >> >> endobj 510 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] /Rect [253.6384 392.3286 261.0855 401.3515] /Subtype /Link /A << /S /GoTo /D (cite.deputy) >> >> endobj 511 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] /Rect [317.6554 392.3286 325.1025 401.3515] /Subtype /Link /A << /S /GoTo /D (cite.safe-tinyos) >> >> endobj 504 0 obj << /D [502 0 R /XYZ 72 720 null] >> endobj 134 0 obj << /D [502 0 R /XYZ 72 183.6481 null] >> endobj 501 0 obj << /Font << /F15 218 0 R /F36 259 0 R /F30 224 0 R /F32 286 0 R /F44 509 0 R /F29 215 0 R >> /ProcSet [ /PDF /Text ] >> endobj 514 0 obj << /Length 1222 /Filter /FlateDecode >> stream xW[o6~ϯX Q \ MUUl1ɦU{"`{lg>g>Uyj6A*'U*Qj共҉-{rLˈziju#&͢-fH-AlD$4~촄J  YҨ!K^s᭛)n;[%2ɤc椢/$R]kuo.2Mdgmr[Z Dٽ(+|qGC.J ݖǵˇ/b_;:KNt'H:ώ9%Y.o']o#tjv'Rzӻg"zr]1J Mw/bCQ-8XQwT A+ϜoS 8b`K;-i)D#r΀b$J}2r\lت}Kg?Vx0'tOR1"|ZCҘj &)wyR3';RMSSYˡJ3iB>eZ,RA"tq+C ODNYw<9*hf_ JCB%2)s 0ImF>OTyo#MTl nJ$@ =|)⊙?5MgD3OʁףWWnPwn嗋lvDTΘBAqǜ,ɡlJ7-ޙt8!Tّ0"%løT/((Sendstream endobj 513 0 obj << /Type /Page /Contents 514 0 R /Resources 512 0 R /MediaBox [0 0 612 792] /Parent 516 0 R >> endobj 515 0 obj << /D [513 0 R /XYZ 72 720 null] >> endobj 512 0 obj << /Font << /F36 259 0 R /F15 218 0 R /F31 227 0 R >> /ProcSet [ /PDF /Text ] >> endobj 519 0 obj << /Length 2635 /Filter /FlateDecode >> stream xڽˎ8_[A)R;X`&0۷Lj[,g0 pq16EUz*on޼B4\}aLy*͇䗶m\YeWU_ͱVGnWw]!;ˏw-VR Z+:7E3]"'3n|^1.sMZ[xXdB_:)D`SdxW0՟*TofҫcĦe\u)k%+j]"H{Ru6,zF][} s1^bCkmOץ3NN+1^[B=ؗȱ=K|[Nؘj3o/rָOLJD:Wz$3fLrX"cZ]Kf ?c~0pA*Oח_^FxH1(I5NnJN>Zyr ٖ}B;W3~5Hz1^r2uRQ{ztR@|,x$z]$/hLsiPњNty>e%>>S!uSg@@ ُur~[(xr5wp\ X8Vs[oz&\CѬ6JǸ*^q]>͵+K%xg 1ҘT:HGexJxeR)AqG@1}jGZqFNlWͶo'K־PHGn4ws4Fbԍ kqC `וQme4QCu6Kt8rj Po '7Q;l)9aeg,v[XMH\pG- !7&l0!@]~C WsCLEE>㮬bi'P#f|#WdԄJ%"/gt |* I x[n{jJ 6g Np(Sg]in)IAzclP'4BG\I'sM`RQ>f2P!EbawՒc'&B /yޕ<٠^|SN#c"CeHtŝ+ux3K&Pco!ܰCHU֫8ջᅯK*Ngs,յP bendstream endobj 518 0 obj << /Type /Page /Contents 519 0 R /Resources 517 0 R /MediaBox [0 0 612 792] /Parent 516 0 R /Annots [ 521 0 R ] >> endobj 521 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [110.7614 186.6842 117.4862 199.8931] /Subtype /Link /A << /S /GoTo /D (Hfootnote.6) >> >> endobj 520 0 obj << /D [518 0 R /XYZ 72 720 null] >> endobj 138 0 obj << /D [518 0 R /XYZ 72 569.5309 null] >> endobj 522 0 obj << /D [518 0 R /XYZ 88.5877 181.0055 null] >> endobj 517 0 obj << /Font << /F36 259 0 R /F15 218 0 R /F29 215 0 R /F30 224 0 R /F32 286 0 R /F41 418 0 R /F20 238 0 R /F21 262 0 R /F33 266 0 R >> /ProcSet [ /PDF /Text ] >> endobj 525 0 obj << /Length 3088 /Filter /FlateDecode >> stream xَ}BX 1l HY DI%jLQ;{j֌7KanvWU]ۗ)z%EXf72R:^*ZV͏ HEd''@{qasfnTƥya^'ncSy^0>TI<>6f[AYTnxUͱ>4GY@) LO戍8>4<k ^s&G"W0?] UC<noa<6} x'6j|byG/)I,]KuEeG nCZ(lV!dls%XO͇pGœ/Ndt,"Ch5ɳT!"|"SV6m5Aq=$?(jœq 'QOf-7z9ހ6IF`bڶN- F;XZtYayxvͫWeV1ƧUQt m-#&!ԟJo<)q5 -s|MP..LBZe23ժBg W|3w(Q,g>SN2#GRþ:p1 Lk>4kVQZOWśm!)-Qgos_ޖa垐wU{iqTM"-8eTL 84H?> Zf\WeݶG-[ <#!@&v0] j\"^"m%E] $ W;Y7?2;*4 B_$^sHhkr8v/F!>;`/ȏ5/=8gҩφY7I^ 6QfHp&!$] _ )HGk *P fMم6V*+EFAݿbV= og>GS]H?2g$KtԒf.uOP,̴7A{C k~^%{=2hqr!)I-@dW'3x\™պ p< ^SJ&G :~f`TfS9%眙#̻Q\Ur 8hAtȧ:iWs 58j8vK0s}t%i^ p=ӻ~~+ %Xo#B2ZEk'D|>(H; uy --u9#?j&MȩFJ QʂW_ЦAhPq[COPQUGnh| HryaH-+ov@BԶg |anK1B ,mUyÞ23㦲w!𯾴;֛3#DobxP^-4;ȡ^UK2 hʃ^_ww7=߱PM#?  Yf3jUyLN c}97A!GW$qqVn}Y< g/Cy:۝tA .-Y%njVY>tRc ײ[\xYl(3d9xjl|7 6j Z~ٵȨE9s 󵓴j\KpԫUHi삦H((py!,F*8s)ϯop7W80Xrxwlu~J f z=_ezsࢇMR$wW Wy lDS8mi;5غ C|)B^O3P(Uz_wxԖj15Pb,IiWiZ\r7ꝟT%͛ovx}F!3qktʮ"VPN6:~ ޡyT^xXq{4j*UiS?n3vpcWSK-K k_,ZC?\lЌ?W(Â>_VfzWhL55o/o.mAiF4`/b,|3Tg蛤m躢K\`HTݿjT> endobj 527 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] /Rect [396.4973 654.1959 403.9444 663.2187] /Subtype /Link /A << /S /GoTo /D (cite.kandr) >> >> endobj 528 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [516.5795 624.9763 537.966 636.6658] /Subtype /Link /A << /S /GoTo /D (subsection.13.2) >> >> endobj 529 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [407.2784 512.3309 414.0033 525.5398] /Subtype /Link /A << /S /GoTo /D (Hfootnote.7) >> >> endobj 526 0 obj << /D [524 0 R /XYZ 72 720 null] >> endobj 142 0 obj << /D [524 0 R /XYZ 72 720 null] >> endobj 146 0 obj << /D [524 0 R /XYZ 72 698.2381 null] >> endobj 150 0 obj << /D [524 0 R /XYZ 72 325.4274 null] >> endobj 533 0 obj << /D [524 0 R /XYZ 88.5877 112.8468 null] >> endobj 523 0 obj << /Font << /F29 215 0 R /F15 218 0 R /F31 227 0 R /F32 286 0 R /F20 238 0 R /F36 259 0 R /F30 224 0 R /F23 351 0 R /F1 532 0 R /F21 262 0 R /F33 266 0 R >> /ProcSet [ /PDF /Text ] >> endobj 536 0 obj << /Length 1912 /Filter /FlateDecode >> stream xڽXKo6W=ɅՠC{ hYqm!ki+imE{A҆$ =ճo^LIQZ]mZJ۳JB ߳~+Ce*ۻnlwuoW\rFgX WFȲpvoq=2߅ko|wm6Yہ#Llj4,kOO-T.4)>T@j֘<L%JSeJ 40]h/i- >th?2~ DZL~w^'wm΁ M,grd$6JhI%t) Yn2U l~(lUaiIq`mwmwNjyojz(`EZ[!m^NzBXUUxL1,R)&Jȣǻ(z,Fׁ-rh;4L4 ONmvD.:d/Y [@BZǏCd, s)LW+/69Ɠ{iPsD]䏎29>|6usLw2҉n 7ޱa3me#lP}XCY3" $2I""iRwl'R3 B0,c7sCM/7PJ:bc}lRf}oS-XlpC=@h a^*N[QFmۤkras wx%C Bl hqxʏ,)eY/țSX1@Ȣ.g,D$G[K4#ODGZd}h8am/cSvX! Jh 7!P5/~q@(r= /xPssGw iJu:^8 頱oH;فfdޜc" *cX2\s%Z,Vh9BJv=M*70jLD96bq9o7n M@+H(B ʆ3'eB]*&㯯o`H~Kr|g3>~wKL 4|>ܬW̎'&֗_|<}.PI?p:^J- [hKg+(al)t*T,$:(BQI)h `=ӗӗż4/ . UM&g?^=W' endstream endobj 535 0 obj << /Type /Page /Contents 536 0 R /Resources 534 0 R /MediaBox [0 0 612 792] /Parent 516 0 R /Annots [ 538 0 R ] >> endobj 538 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [512.3371 705.3176 533.7235 718.2192] /Subtype /Link /A << /S /GoTo /D (subsection.14.2) >> >> endobj 537 0 obj << /D [535 0 R /XYZ 72 720 null] >> endobj 534 0 obj << /Font << /F15 218 0 R /F36 259 0 R /F32 286 0 R /F30 224 0 R >> /ProcSet [ /PDF /Text ] >> endobj 541 0 obj << /Length 2832 /Filter /FlateDecode >> stream xڵZIoWH@U*9Hf:}%J&F"=$nm͔ [n4Jk9gVwUbVIj^xkMϏ-< q(os+;۴ Etʦx< e-~ p t pJ0 քPl`%EM<%//1&X|i; Ỳȡ?cD:"cϢI0FCw;(o~nŐDz:)a@Q=JڎE/8VX/(2\S5\r8IB($^U$,({*|&G޼p?R 2ipMhUbQk(c,8>R6Jk.L\/]@jE9.MS,=[4.f8q&3.SPCW~J;oR~@zv%5^ܧ򁿪Z@G5UXv @}"ۂ$>:CY%G`\o(e (MT j̬@v6MLgewm_2>S>~\s"q, NT7%i0ǧ}c))H rB\ZQ-T e'L..A2U.-k+5_M^/c Q -@Ѽ)f/<6Y5~dn5F)g#C׽ekR4|7JRe“3#֋%Y_B_L(Ziەgh D25XXyUQQO|p)yuQ%m5%5+\ T@ >œ*3éEJ`ڎKWbA_zKK6od=4^Xd7d'=C/~!>MPbfeEw9kCNb$M9 Hz#CEM(BT.@ 0gzIw >~@rDi)Ye k^Z.P"rN޺kԄ97õF \ˏVA6*j׊eZca?Yp?<~~& s?+B_m=sY!¥ANus7ŧ:ߓʏp g'`,a++=96qm"?n96igy8?yߖjJR2ǟ#c  lfJ3.KnMDؓ=9Fc(M}^Mpr;_߆n$sHAa%gi5Ǻɥ)q.1B!}wQ+*r9R&~FXvN|hhp謼le{]űNGK&cdTcZL ^7lBF\ 45q\^V1hҏiR8WOlHʒ+JLPq-EaYS ]]बJGȗ'*RJ3dW$=>~ɰo )Y]T#/+Аf`"8M__$t58|vo߳¯2f! %l;vKDo"VO)do4 `n>? etzujxB0lwI<ƺ8< " n'29z٪ ҁ;AI|1F'34:P]k1ÆEt;A\dgp٧vLl:`^W蛰QkO6Zj2&.hendstream endobj 540 0 obj << /Type /Page /Contents 541 0 R /Resources 539 0 R /MediaBox [0 0 612 792] /Parent 516 0 R /Annots [ 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R ] >> endobj 543 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [157.4993 626.2744 178.8858 639.176] /Subtype /Link /A << /S /GoTo /D (subsection.13.1) >> >> endobj 544 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] /Rect [480.522 615.4524 487.9691 624.4752] /Subtype /Link /A << /S /GoTo /D (cite.kandr) >> >> endobj 545 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] /Rect [327.701 601.9032 335.1481 610.926] /Subtype /Link /A << /S /GoTo /D (cite.kandr) >> >> endobj 546 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [356.3896 581.375 369.2912 594.2766] /Subtype /Link /A << /S /GoTo /D (section.11) >> >> endobj 547 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [357.9666 536.4756 370.8682 549.3772] /Subtype /Link /A << /S /GoTo /D (section.11) >> >> endobj 548 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [461.4788 217.9276 468.2036 231.7425] /Subtype /Link /A << /S /GoTo /D (Hfootnote.8) >> >> endobj 549 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [512.3371 217.9276 533.7235 231.7425] /Subtype /Link /A << /S /GoTo /D (subsection.14.1) >> >> endobj 550 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [319.6252 204.3784 341.0117 217.28] /Subtype /Link /A << /S /GoTo /D (subsection.14.2) >> >> endobj 551 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [383.6102 177.611 404.9967 190.5126] /Subtype /Link /A << /S /GoTo /D (subsection.14.1) >> >> endobj 552 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [450.0648 155.0955 471.4513 167.9971] /Subtype /Link /A << /S /GoTo /D (subsection.14.2) >> >> endobj 553 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [494.3072 155.0955 515.6937 167.9971] /Subtype /Link /A << /S /GoTo /D (subsection.14.3) >> >> endobj 554 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [322.6707 133.1859 344.0572 144.8754] /Subtype /Link /A << /S /GoTo /D (subsection.14.2) >> >> endobj 542 0 obj << /D [540 0 R /XYZ 72 720 null] >> endobj 154 0 obj << /D [540 0 R /XYZ 72 720 null] >> endobj 158 0 obj << /D [540 0 R /XYZ 72 509.2636 null] >> endobj 162 0 obj << /D [540 0 R /XYZ 72 401.1954 null] >> endobj 166 0 obj << /D [540 0 R /XYZ 72 341.7102 null] >> endobj 555 0 obj << /D [540 0 R /XYZ 88.5877 127.5072 null] >> endobj 539 0 obj << /Font << /F29 215 0 R /F15 218 0 R /F36 259 0 R /F32 286 0 R /F20 238 0 R /F30 224 0 R /F21 262 0 R /F38 381 0 R /F33 266 0 R >> /ProcSet [ /PDF /Text ] >> endobj 558 0 obj << /Length 2962 /Filter /FlateDecode >> stream xZKh @[+>%͞ "9栶嶰ԑzQ[r"ɥ"EXܝJ<]$sC骦^"ec˭JEiV| GP^i)qb-"\uIYg)f<{)l_qC_rKDҞ@MmkZlMs|a˸\:`O$#*ڒ$?+!0 m88VD|ϞM΃_PnV =~IWgsr3IaC.)\ܓ @o ёpEh׸!Qɚt8HY  =^XR nڵ|̑;^'h$b`YNjyKO,aOtJpRnPS4/ܲ*ڌ &"/FG6& jXq 6Si( =g7+o C AsHeh.hIo`M_vsƦ `\ u- 0B@J4fiT7 Z(P %2C zM>Ĕ lKņ"7s6qvh d .X` *PuClX[а ŶVǓ65BGP$z^ ȼS[§zuq?#}t $nCpE%]f{>.{㳋'~z:c|m9iӈ$exnsu%V1@ИB $EefNA^`s-H4 }bL 94dl! 8@c[qإ0e\?x ~#\=sW}HֽGCC x,f&GQ511}ҵ+=H[ָ:aV, @c-`P!y8ZK`ē됵Crڋ6nk84߁9ac.` G95$ CrUG9dٶa?#2]ףPYR:uɲt8˗!O&gQ̐Ū c(!`-L#M8hH J>I K8`q8 ](  ¶!O4D_BXjaD1 uW7 U=¹v*" dѐpáO#ؔ{!tU`ڷe8 yiMu(BłnQmK Icr0%wF 0]/om񟮜CVv2/zf+M՛PYR 2?Ќ=t|(卍CɳTPԀu/sc ɤ2ޏY`"\'6H2bg`71w^X}N3*Y¶o[q3{{dbcPN5L Ç߅ceП~sqR:J}&g W@q~L0Xpt)5[հ W[pSYmE/zT7h4K^KSAޮ^?A:G Kqi7(Lg;/-8y$W:?)JA!]@!QHCRT!hxٖ8Pܳ_ȜSpW]@7̩u업ǻ>?y6fGy/1.H=S'07O `V< Qvʧ-h)%Y:Yq6uv8n+2Żk1mih= 5~0+2z?-(V+.wI.u(^ކQ'~_ߑ9%ೇ~ $'pwi|מ!϶H[F9JGv?Bwx8=1j$ {kYTf|<#WBW@K\UzCuCiNm`Ze#5w Qendstream endobj 557 0 obj << /Type /Page /Contents 558 0 R /Resources 556 0 R /MediaBox [0 0 612 792] /Parent 516 0 R /Annots [ 560 0 R 561 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R ] >> endobj 560 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [109.021 705.9236 130.4075 717.6131] /Subtype /Link /A << /S /GoTo /D (subsection.14.4) >> >> endobj 561 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [341.3789 692.3744 362.7654 704.0639] /Subtype /Link /A << /S /GoTo /D (subsection.14.5) >> >> endobj 565 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [340.6755 314.1457 356.6074 327.0473] /Subtype /Link /A << /S /GoTo /D (subsection.5.3) >> >> endobj 566 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [361.8796 314.1457 369.3267 327.0473] /Subtype /Link /A << /S /GoTo /D (section.9) >> >> endobj 567 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [396.5587 314.1457 404.0057 327.0473] /Subtype /Link /A << /S /GoTo /D (section.7) >> >> endobj 568 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [327.4484 300.5965 348.8349 313.4981] /Subtype /Link /A << /S /GoTo /D (subsection.14.3) >> >> endobj 569 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [195.1857 259.949 216.5722 272.8506] /Subtype /Link /A << /S /GoTo /D (subsection.14.4) >> >> endobj 570 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [432.0044 138.9993 447.9364 151.9009] /Subtype /Link /A << /S /GoTo /D (subsection.6.1) >> >> endobj 559 0 obj << /D [557 0 R /XYZ 72 720 null] >> endobj 170 0 obj << /D [557 0 R /XYZ 72 651.0072 null] >> endobj 174 0 obj << /D [557 0 R /XYZ 72 534.2476 null] >> endobj 556 0 obj << /Font << /F15 218 0 R /F36 259 0 R /F29 215 0 R /F22 564 0 R /F32 286 0 R /F31 227 0 R /F30 224 0 R /F20 238 0 R /F23 351 0 R >> /ProcSet [ /PDF /Text ] >> endobj 573 0 obj << /Length 3055 /Filter /FlateDecode >> stream xZ[~_a$5#R(O$AeM屰4̿﹑ }١I Ͼ6JkUfYVά\Rjvk¿jL٦.[nRqծ/iD۶Ŧ6?} G&q*sYJoxV:QeRjܳ ƪxsj曁vWdZvaƬFoZaz}ٚb]M:@S8xª^wٰC8Y:(OV-{iOP 1̟JI3 ﶓ8U0BUSƏ}exjZ[:U- @:S(ַGk`X}ͣ㿷~aGw$Kޡ*=_(\$>ׇc* j1jFi/O/-JJj+ZcPRgXǎJjoM;l&Vݠ>?mമg9UOCh׉K<޼62ԑthN|Ec:xp_.u3ϢcB T?L Gc\91 $Dxk>۽lk*M+O#qS R}/I'p* B‡ٕj_n[[N=ygҹFI_o[>bKA4{ ;L%If\A&ȦFÞ#A \G\c,/9eѯݱTp^HΏ^oLd!z]pd"ۨOhz{쏒6pGH}@Yw$x%xP`A"v P,:#z |IgVgaX?כ"]{/[hes=jj`$ހ(% aW) hVv0b@Z˜z{CJ50P 15#"ꓜ'CgL껐Lr0 RDBII֛F+ԁ\/u7 ?׹mTn37|uw`4TJ B:v_n~9Yoշ7 Ez%py1L~n{ s_`JVvf:xfeg1KA;gsZX?IJ5\6=X}a@Tӆrg< 8d{AʍKe-\{j$yD0+uZ((,NnM8nmŰ $gd%2yI H7RX@1_V qAѺh& )NlM5t^O]>$Z@6{2vT ELOJe0+ސ+X$ ?KPp ĞKw\*p* %,6Pb^`ėB)2r&Ԛ2+|*Bv]x^!J]_9ACm,=(n S !75;mɢ Aƕ.Jo\eҸWyj7kڷP# eXnMy_uuḎO^w;/r4 E:ʘ6Tcwx~]@i \p3ʳ<`}:03_Bpi/Eh-@Yg 2>& :=c_w .:ZYbSӒ]? ٜ!V/u;XLjnɀFH={?/Wtc7flk<*$@} $^0r4#G8d4ås95-LT6ktU`eŽO x[1ۦahCaz[2Xtx#(嵜rT:$l09{=tz`㮭|)'U :B-GXI}Fkt,endstream endobj 572 0 obj << /Type /Page /Contents 573 0 R /Resources 571 0 R /MediaBox [0 0 612 792] /Parent 584 0 R /Annots [ 575 0 R 576 0 R 581 0 R 582 0 R ] >> endobj 575 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [493.3974 626.2744 500.8444 639.176] /Subtype /Link /A << /S /GoTo /D (section.5) >> >> endobj 576 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [406.9131 555.0202 413.6379 568.2291] /Subtype /Link /A << /S /GoTo /D (Hfootnote.9) >> >> endobj 581 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [451.5799 361.61 459.027 373.2995] /Subtype /Link /A << /S /GoTo /D (Item.8) >> >> endobj 582 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [140.7008 199.5442 153.6025 212.4458] /Subtype /Link /A << /S /GoTo /D (section.11) >> >> endobj 574 0 obj << /D [572 0 R /XYZ 72 720 null] >> endobj 178 0 obj << /D [572 0 R /XYZ 72 720 null] >> endobj 182 0 obj << /D [572 0 R /XYZ 72 612.0055 null] >> endobj 577 0 obj << /D [572 0 R /XYZ 72 490.9541 null] >> endobj 578 0 obj << /D [572 0 R /XYZ 72 452.1621 null] >> endobj 579 0 obj << /D [572 0 R /XYZ 72 416.0973 null] >> endobj 580 0 obj << /D [572 0 R /XYZ 72 396.309 null] >> endobj 186 0 obj << /D [572 0 R /XYZ 72 320.5738 null] >> endobj 583 0 obj << /D [572 0 R /XYZ 88.5877 126.9249 null] >> endobj 571 0 obj << /Font << /F29 215 0 R /F22 564 0 R /F15 218 0 R /F32 286 0 R /F36 259 0 R /F31 227 0 R /F20 238 0 R /F30 224 0 R /F21 262 0 R /F33 266 0 R /F38 381 0 R >> /ProcSet [ /PDF /Text ] >> endobj 587 0 obj << /Length 2506 /Filter /FlateDecode >> stream xڽYY~_!ABfon'5Av DY >Uݔ{nq]Wu;zz5Y8Tυƹz_|u\8I^ћ1q#uvX pi:TsNy5WҤ.\Ϲ *k^1 TXa(+zҁf*,av#tØ!9_%mS51p!gu/ ΚX&,3¸fS#L!h5>NTM{YTpVJǙpV7~]Z@X?Ђ")WɄخ]= gE#X(VykSJoob|!C#4K/V߯}_|ř, AݕbZ:o~H/Oc?b5K NFۯ#;QD(s"9Q!/=K']~<2'< o`ơ?~ d*=tAnD~׈nD@a|֠Vi|ʺЉVݧ"=-L <D*B)9[kr> 6Xx`Rd!lu|U.ZASX =!ĕ] 5(t>Mq0K[1anF.iN\kC]3!)$:eXfcRu̘c !_>fF"Lẁ8Y ǛbbZ;S L!ld3or ʥ(D2^Lŋ?fxpY0陵>-YbaNm[&0hJb&VO5e0k!5Z^>`i-&v\fB~ێ&-ۻezC4xGo>ٴʭH{W)S~OaCQI ZWG)DB6JV M:&aEHb yLqb9@:ZVV}=Jcs AvB~dA^R +RvW -qR *n'}_G1B (G?coa*@,9 #]Z{g:h*4IxJbidV[aJ=p´>Xdh`rC7h+n|YRܒiea!a~Jx'^8~m ;&9E@d b(sI#lG9A[=uYR |W) Kվ몈i v:~ͤNn#>u JKjw5x_bq}5|Մ4"};*Or/sz|v'4S4}MՖ\M9D6Mf63H\XM@s0\ ~_endstream endobj 586 0 obj << /Type /Page /Contents 587 0 R /Resources 585 0 R /MediaBox [0 0 612 792] /Parent 584 0 R /Annots [ 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R ] >> endobj 589 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [272.1555 678.8252 283.1145 692.0341] /Subtype /Link /A << /S /GoTo /D (Hfootnote.10) >> >> endobj 590 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [347.9434 646.869 358.9025 660.6839] /Subtype /Link /A << /S /GoTo /D (Hfootnote.11) >> >> endobj 591 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] /Rect [381.671 582.3684 389.118 591.3912] /Subtype /Link /A << /S /GoTo /D (cite.kandr) >> >> endobj 592 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [288.2819 566.0919 306.9411 578.9935] /Subtype /Link /A << /S /GoTo /D (subsection.A.1) >> >> endobj 593 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [130.3881 444.943 143.2898 457.8446] /Subtype /Link /A << /S /GoTo /D (section.14) >> >> endobj 588 0 obj << /D [586 0 R /XYZ 72 720 null] >> endobj 190 0 obj << /D [586 0 R /XYZ 72 631.4259 null] >> endobj 594 0 obj << /D [586 0 R /XYZ 88.5877 129.8708 null] >> endobj 595 0 obj << /D [586 0 R /XYZ 88.5877 118.9119 null] >> endobj 585 0 obj << /Font << /F15 218 0 R /F36 259 0 R /F20 238 0 R /F29 215 0 R /F31 227 0 R /F30 224 0 R /F21 262 0 R /F33 266 0 R >> /ProcSet [ /PDF /Text ] >> endobj 598 0 obj << /Length 680 /Filter /FlateDecode >> stream xVɎ1W-Rrș[&fR/6}vXLdrkz^-w R bS3DYf M-YӭZ(hQ'RXoV]Ze6gZVR29rfvSJR %ӄZ#bl;/aVk҇cG _}ʠf/)V=*xtl!rΓN1m͖n׿U/J)CڧHt' RFdÏu>0NvȐXJ|)lz۵{X3qDk@vἪ>5QcZ+ [ r;QBA\;\RK@+SXސ %fd!Qf@)909}|ͅ9p}p]Hzm3x|yP/ <}o`Iu9D-> endobj 599 0 obj << /D [597 0 R /XYZ 72 720 null] >> endobj 596 0 obj << /Font << /F36 259 0 R /F31 227 0 R /F30 224 0 R /F15 218 0 R >> /ProcSet [ /PDF /Text ] >> endobj 602 0 obj << /Length 644 /Filter /FlateDecode >> stream xڭVˎ@WpLg+!Rrٷ=X6 2lb OFz_KGKD;1wRx?yKd&ݯoҠw at<v><{Ltvg!P+2MU@ 7ėףN$%8eb3 p%A_4r6YDywnDY rȘ:W>/|xrLwII9iFF2 Oc$]UGK Zo*O p|T e o0e˘a趧7ޑ-DM``*CA8P~|-w_Z\8d2 &@qfMw PP0RɁp Xѯh(l+zNX ֿͪjEjHϻWb0O>)34BBPvbogoO, 0m?~&{`kI]fBHC|V'"NͭD$ TMz=Ê"1bI0ө4 Uf8{z=e4Q83zTG8U\{CRFHE/?&#dendstream endobj 601 0 obj << /Type /Page /Contents 602 0 R /Resources 600 0 R /MediaBox [0 0 612 792] /Parent 584 0 R >> endobj 603 0 obj << /D [601 0 R /XYZ 72 720 null] >> endobj 600 0 obj << /Font << /F31 227 0 R /F36 259 0 R /F30 224 0 R /F15 218 0 R >> /ProcSet [ /PDF /Text ] >> endobj 606 0 obj << /Length 973 /Filter /FlateDecode >> stream xWK:ϯȲB XXnE~=vIR1,*Oˏ`K,-VBBYXm>/KI.%]|!T,jj\_->Rae-X ˢMR/K@0:ʐUq [8;_& m:zP]\TG(S d"*mbUUD+O=8p,Q ,j-} 3WN%%B`-$*A\,S)m8"@Ә )׮/t-0?U xG,O푅51N0j[J;Acud-UsvDor,jL-])AnH`r E>B6v y-|0ӆvj^`E,By}CTC sE惕kۛO$&1!ɱ6\NZ7CYoq? u>BIèlM9^hj nCb'гaBl#ږϹ.8`!r3* x43Wsnc`Jrq1ɥ=͠+ޘdi֬:ks:_nOrk6[QZ kĆ\ʧ>*~B>CڧN.J^PI"`SIЛ8j }G\M"tذwZ I;UO "&溄^Bμ?h`3͞EnrϘ*( 1:]E,__endstream endobj 605 0 obj << /Type /Page /Contents 606 0 R /Resources 604 0 R /MediaBox [0 0 612 792] /Parent 584 0 R >> endobj 607 0 obj << /D [605 0 R /XYZ 72 720 null] >> endobj 604 0 obj << /Font << /F31 227 0 R /F36 259 0 R /F15 218 0 R /F30 224 0 R >> /ProcSet [ /PDF /Text ] >> endobj 610 0 obj << /Length 1282 /Filter /FlateDecode >> stream xڽXKoFW(!f5 @[hrPBR_ߙ]$+E€3|?.*t(Բv0mM J?wiuq%X$%(.-iR,hqAJ%ZlHe8׋?R2SU( J .h^хSpCjD T<5܋j3fMWlV-KXW)ew0uhe<t^*B.&>7 ܔSF~ -; \vlP2GTp"4M̆%B5J P8^lv=F? "3r|1J9ג(+󪩆\נ?2ڳLM(b Vg@A ~V)ZA C$=GN7WV05 bkSzدPibIvYA ?F(TP ¥J"kT67tH˧3R=6c= s_XF13~]cyܖC":Q㄂Kl+(\ߐG{gX1{Qr;N[ `~~M Yeh P0k&V/ ]q6`!*=hw~A`FgɭΞH+~-Ԏx+ [Sorx(}\DR,, ϞF(à8媇83J+%naj='' c.zm0ɗFbDF֡PXJXi4# Ts74|Dܒ"4)})tgu^~q&wI+Z<m|BЂ }v:_wɩvcⰇ)Ã] n&x̄76*sOnt nQc6<}3-h0(pڸo4EIz)˙Dv->%ԁbkhPлͶ i@8R<!~?0 ϟ@X0 4n}vp Vq`%b,gcendstream endobj 609 0 obj << /Type /Page /Contents 610 0 R /Resources 608 0 R /MediaBox [0 0 612 792] /Parent 584 0 R >> endobj 611 0 obj << /D [609 0 R /XYZ 72 720 null] >> endobj 608 0 obj << /Font << /F36 259 0 R /F31 227 0 R /F15 218 0 R /F30 224 0 R >> /ProcSet [ /PDF /Text ] >> endobj 614 0 obj << /Length 1699 /Filter /FlateDecode >> stream xڭXMs6WjD ҴiַFmN$ί.Dc $@`tݧܬ8gF|u}JgeuWuy^$שI~ߦ7Z%Ѯ'V h1/_}ut,]{E#yl2rT]Mr\Tmy`!+uP8' S 72&ryؚXO4| SVg0sr wI (%5HQQ36ϋJ1 x֋D#(8a5 E TRC!@IF_Gz~D{\If2 F@|w:V9ņ ;`jM`w 5>yic$WgieOm!WP37#X5к\~o@[+2)P:%`ݱ#XVZan/HN' JCҘeH.$j ,\8!?'t{Mtmo6fpn Ji-[D&ol&]SKxG]3^VL@\QO14%tL sW7sC¹DW}xR'z%a23gI'&jث.M$b%E ;I-9ܨVWcc#*Vw!~\k$CsWc FǮ[C\"(9~F]n(<?V<iڱ“^,岲\O/4˄H8.u N6)0kIcSrV<s2֚'őI\.p1mvlM-b@wBy@g~f ܶutD4ODD Xfa͡d?S]A@8u)/`A!؛IuֳEEpL$zS䥼5PX)wt){9mVPyHPI> endobj 615 0 obj << /D [613 0 R /XYZ 72 720 null] >> endobj 194 0 obj << /D [613 0 R /XYZ 72 720 null] >> endobj 612 0 obj << /Font << /F29 215 0 R /F15 218 0 R /F30 224 0 R /F31 227 0 R /F36 259 0 R >> /ProcSet [ /PDF /Text ] >> endobj 619 0 obj << /Length 2832 /Filter /FlateDecode >> stream xZIsϯm*nthd;Tr"! eP5y[ )r!^_~F47)M43J|l6n~Jg7*K]NWEyyUZd=SUrѨzpoS3 gh~-TԛQEr# [>nL޷@ >qM;^gzg~u` /GFߛ=+| LkFz[ bwh1V\|Yzf*Oqx!-IN8*ҬmUe?=+/PK]2 />D'v|C&yC3#㕌&є]ߙBpB~'VO I]!w} {³FN`bDw怦X&gbGѦie./#4urϝ' sD\ytz\;=3Zic3d!ൖK$"x;sfEJ͗ ̰JDcc{j gӬS~ZƦK 0(ݶ?G(7i{չ+Rpul!]l2ʹ.dU60+ o"IDn1|hGHN8X% Nİ5RP2>2[Abȃٯ9-q 5h*&L ҵo&%B0TǨ&Op.,sbⅱV{38"r*yf R-@U mwv)ьIvS3k7 Bܴ J\s&,rodC5AܢGM ,JH 뿴FzG}JKkN<»y1!.mTz=A"Xs*q$Df9O 3?͜^䐐{XLi"*]BUp!&9d =+z k C$VvQ:ƞS3myz񡝌EQ0cbTEu yɭySD,,X7龮};N%{JNBDFR[q943UVA5"(QlߚL-l$%B3Geέ+Bxk$ w[Wp 862\K*345pu]zYCbC+ dHٰ\R L(EEYMAIIo({m9Cg4Z]ka.*`UӋaPojY|^[pzoQh9_vWG2 <᷋JDV,5 Q5N$аaƜ(*/3T5Aߒ2S(_]Ivg >KᘥvKġ]mi.ZV#y)Y]IG뷧\ӑkW\E0Tpתgldbv kwÜ0WJ m+ Wq( O) CF71\Ȗo0zg^#p;sN|!#;)2w_^TW ٢1P8Pʔ*d7!# Ll`zwq'&r" ,;'nH.0Ƚ*y;h*KJvNw洄@!.]ZTP9~.{N>0lmUKb'q#I7)@;ɠReav> ~1۽ҋ?E j OMk +hh~8|KC.U_op?k<<fAjWq`T2(,8whE8 ؞} ~Vh]涘nߠ}tqY 6[)4Sh]Y VZnԸ GJ]wix"<- gjpfgl 8 +[닂"[]496ᴝ-M .s.KM\I?T!!wop Dihw7F<l] W 'ctՃu)Vg3yH'e%.%HGf:43~*U+A$يa ~o?o(endstream endobj 618 0 obj << /Type /Page /Contents 619 0 R /Resources 617 0 R /MediaBox [0 0 612 792] /Parent 616 0 R >> endobj 620 0 obj << /D [618 0 R /XYZ 72 720 null] >> endobj 198 0 obj << /D [618 0 R /XYZ 72 720 null] >> endobj 617 0 obj << /Font << /F29 215 0 R /F30 224 0 R /F31 227 0 R /F15 218 0 R /F32 286 0 R >> /ProcSet [ /PDF /Text ] >> endobj 623 0 obj << /Length 3223 /Filter /FlateDecode >> stream xڵZI۸W-o38er%v75%Qv$%P^C <{ˇ7wRAyZ;5"H]_|pj yj &|{1odu㽬T{JT-POݎ[4?bȿ4ӽU7q> Ǵx_Zdt ԛoˍyS|76m7RE_^^ P3sޕtl{|XJn<MFT|jI(ZV;y/-0!tޏTGݶ} CS׈ JvqB'fs%Z_TG-w%k}ok5aTu]iQԪQRH3tC<:Ny(jqD?"?` Uuu50(4G8t#܌}6Ttզ2FڢqV4#jpv_HEJ&$D3(lgq). hGEw:ɺ*}q->y_d9d$cj8}lp,F4"T}Z2z`r}򻰢,*z$ԳE0T&oR\ 4X&mTtaRMٷPM2 ^GUHh+NMЌ"M~Ͱ}V~z@V2y''!OrH ׎lVVV 8s]Q+Ĩ%,/՛C`ȮlN~f}M.9k>5'"Qjzn/ZTQUuɶ'//m4y;̊әx$>vqmzw%A.aҲAFucUO Jq1ع!h-\XP(ocv)>EfGFDQCQޟ-Zzr95W4q/qiIVYҹ>ƭA3Z"d1 s?v=a`%mO(./^OԕNDa`.YV5X"Rt'=xJF. 񰪢L|%lQ^ r8-81q'T\hk &S$tknC~kщ5-Wđu nXǘK'kzBf׭'Y7t6!Y\^H%MH50R6O#wxLcX=Zy)xIcl,@tg+TH'ZV`>YF>y9"Y{dHȓX̸ݕYnXөMMtbA^A/À?([<$,Cm$0pk{R;&u`o(ǸsǤZIm1qeBsĒt1ͧ..]'`@A1ȲwE9rvRМLJڥP xx"BQ(*jQ9`2ce u? בߣX~-ܲZQn[_ s 'B21ЇHJ&öc <8GI>C1 4%#ULsOJK ]Qͧ{ tNtZO֖ Q7h[K/T<m;qVKvk8֒I\8U>b՜q!)>%^ѷK@2DesTKem1Eo01R,rj猹OEEvٴ5Pc Eʀe8R>3Of /[4XlO斈 :$*jRxɔbX,7u3BrP +ǫp9czxE S a`nQMYɵ4`#"xmv܈7FsZ Bk1FLcK:RC[2 #xRQ95l0cLٱ}GrO |jWy>SA{Z߶{! -jA6j5-˚բ"c. ZX4bfmf t߸uL-##i@_;豱u:^DLtuK*nH}Q_(G'\uuoԟN9h tLxϑjcQ.e=k\ )VR6 xlRǯ3iv>eyhtK=Sz]h#슈XxwUYSkqHH,&04f@rGbAuSo~,!k)MB<ƠǾHH`CO|D`ʁsS?Kȇ*%2/%Hۧ =+5;F dZfv-1:=g"Ʊ y%7KUJlq ;/0u Sqlї-0h.KpH=!߱Jkܢ_9"z<|B-ho]PD%,m ":nʻ_+r^KqqB@> endobj 625 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [155.8523 312.3279 171.7843 321.775] /Subtype /Link /A << /S /GoTo /D (subsection.9.6) >> >> endobj 624 0 obj << /D [622 0 R /XYZ 72 720 null] >> endobj 621 0 obj << /Font << /F30 224 0 R /F31 227 0 R /F15 218 0 R /F36 259 0 R /F32 286 0 R >> /ProcSet [ /PDF /Text ] >> endobj 628 0 obj << /Length 2626 /Filter /FlateDecode >> stream xڭYKs8W6TUo"7Olf&IŮJf@K̉$jI:^@=Bَw/"4F͟/_yry}RB;O|Dn$Ϳd̥qpzIjN̚oDfTf*|3fշjksR{ {!U%=X-7DW2;[äUp-Yf"Ye6my ՜dsj}ݬyͰV-;ERo%ZȚLMҹ:J- GLF]Y#9SY͒U{]*l2GtZz"NJRJ~`݌jLe!(u_ sKAਸz.إlzT' `*es QP ;GzaCޜҖA38OwJݗj BWg}սZ5?UA 8.sдcvX3J<j;GWdut Y[eywD?8H(rW<'6i. .A reQg(ҁQ Q a+i#UΥwǰC 1D1vȌySfxMle'Gk֓D&*7*uuG"$Lš#;`Lcf,j~!^‡tvDzz~ eySch'q3:iE|UFU(PDϒ)%HX b!Q(2\p& a>ñ~/脘H͑0# yK@;{*ƕDo{B@#QY)jV+j ^&Ř#D!swt ΘNZðg;x j ۜ(:1i}+ 8zb)EHp8q 4)8$E0kØߴZ )A2+ffS9dtU5rʼn}ٍU2ªֳ@փ2L!澤զ6,0g1.ӓچ0Q[ %hr0 W7ckqڤ@DWu;0h{9"0T g/fH5-]1=K'BۯܙT㤁'5/*tMdu8WsoYOAȀNP%rM>j c Tg} 5Ε/rB%67ipm{I ͐MVqE@WϿ\BK26đȍ{pX9,W$0vC^] '*6%U:1C)`HUaXEorϯ`pkFŖC _Uv"?*SpIcd@3 *Y j䦝 4>p$qCGjJ^ DD#P&;X5H XqloJT8x[<}'G0ҹyWm 01t.;&\vI1n#&P\Qr=Y:BK8;nl2g!H/nSb6_vi9tu!nḩ;K0qr_.>(W?COMbI&e?Lk5e}.n4Law%zbBL1WjmZ՘sQoT;\ܖ*̉AN}W6iUsۿ+-$/U]wVϮYt{2N#\v(|Q;\a~M=V}ʡ8agL]=ol^hjRU6u_Z}-`'[M ږѨ6;.{/P=9 +T'8a`G| ^rƂN[qރ"&`jf׉`۞>p?[NB-4^w4H6*fMAG&呤)(^\TFzY^E QO8xCg;5"nuՉY􋤜G$ 'ˍ|b 49>ZAZ΁7QTCt݇Hpt kj)yEw.]%clʩR(&Q4*}pAmɤ^(ذJƤxZmKGQendstream endobj 627 0 obj << /Type /Page /Contents 628 0 R /Resources 626 0 R /MediaBox [0 0 612 792] /Parent 616 0 R >> endobj 629 0 obj << /D [627 0 R /XYZ 72 720 null] >> endobj 630 0 obj << /D [627 0 R /XYZ 72 343.9976 null] >> endobj 494 0 obj << /D [627 0 R /XYZ 72 344.229 null] >> endobj 267 0 obj << /D [627 0 R /XYZ 72 305.74 null] >> endobj 268 0 obj << /D [627 0 R /XYZ 72 269.9783 null] >> endobj 230 0 obj << /D [627 0 R /XYZ 72 233.9135 null] >> endobj 229 0 obj << /D [627 0 R /XYZ 72 183.6935 null] >> endobj 626 0 obj << /Font << /F30 224 0 R /F31 227 0 R /F32 286 0 R /F15 218 0 R /F29 215 0 R /F36 259 0 R >> /ProcSet [ /PDF /Text ] >> endobj 563 0 obj << /Length1 810 /Length2 2032 /Length3 532 /Length 2619 /Filter /FlateDecode >> stream xRiU )hӘ$F 0`F(*3@i&$&`45Ձ>5-< +}!C*Ȁ$`MbzTa22``D`0"3 !P_ t&a Ƞ}Mu7g R ] &"Ҽ|@@Cq!?3Rl!&$[uF 7-(&f&*viKhL :foaߘbH4%r'ׯ3a Dxu`hB0D,dq4ɽp .wmBI/ j΂转ʋurQyeò57%S`UY|WdֈkwVFI^2ޑ0Ɣ+N풛^fv#I )/ (k ""^DciSC…zWORsHɣP6e+. U;^NpؓAY1T(b-k*a^Wɵwdpb|w?|R|LUH0v1мƆ~?t^[^RgzD/!,"H%-W'[u^u=ڠEweYۀ+BvI~.^{L l-T-cO-13eΦ>pJ/~Qr$$N%"鑺v[3҆Aa$?ȼwޭ"|QX+9 F/tF d̯< "fr|D35Mh:Ez\JL8y&wK*qZ7}PsWp;e7~Xsفx&w@řӛIF.EȠ>TUB̹mzoJi"|}-yGӏ+m,0d:lVޮpn(Iì#5V|_8=uPM?0hi01j~kTSvSVM+fUDwz=]e4J|3[b#QYLY}a쐜yGRr e]#eB%ߛrbJVf?9]3k I =o9tWٌD.9+j)3sm{%7(F3ȺVt{Zx }VOlerH|sNN':ė"*Yk̝4 Ϝ[W*'-adKm;;/y?y}}"G㳙y $H҄b?:S^"b+3> endobj 562 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /YXDFED+CMMI12 /ItalicAngle -14.04 /StemV 65 /XHeight 431 /FontBBox [-30 -250 1026 750] /Flags 4 /CharSet (/period/I/K/X/h) /FontFile 563 0 R >> endobj 632 0 obj [272 0 0 0 0 0 0 0 0 0 0 0 0 0 0 432 0 833 0 0 0 0 0 0 0 0 0 0 0 0 813 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 564 ] endobj 631 0 obj << /Type /Encoding /Differences [ 0 /.notdef 58/period 59/.notdef 73/I 74/.notdef 75/K 76/.notdef 88/X 89/.notdef 104/h 105/.notdef] >> endobj 531 0 obj << /Length1 754 /Length2 1067 /Length3 532 /Length 1620 /Filter /FlateDecode >> stream xRiTg* "" 4@&Yj- uL&d4 PA%R*TD" J*je.u@mOg3{YY"b!pv=o; ؉N|(Bb'=< H% = O;d| y;kX2T  QBD !N%J*QE*r`0! V19Y p{8TLڐY("pi<bșGPPʿj8G%ِpN ƿg2D  |$5}g.a*H4DHQ@”L)1"U}4A%7lDNA>xCQ`jM)"~Z:b"  ׹Q(xr 0pr$uP|ĄQw:pVd-#Q59CNpd0#c.5nn 'ׅC-ƨQT nyi+O&Z }brygڶY_ZQ5xdbAW 5 9=)7q˻ |g_On,S'?yzL׻K5os'nx`$5V}Qd*ۙ=@1oeקY ɣ. [=zP:c]Sg|P)6G&@U.`ao^ʶ .ϐOڞrWqYY-xWdԸ"8;bDZJ̕}}DϬZ9ː-瓏>~W{ncv&Ju@O3?&S!NMԉIFGni֬Vq_ޟ-/4_o!CwO;nyMq_N{|umkoNpLsԡSwnTm=P`TK Ʋva"5n[f˳c ͓ _<~v[i?^9a/ywuʐlk'+fjҧq]'~s`-2G4֒7ܾj<_m1f[KK3ް}N|Ɯb]ȕFܕ eOXC{" &OM{L驡u! :镐vūgw+z)=[F&Ktz崵9nHc:zes{*z8D} }]j瞵6{zJRW˄%gN϶<_AB@(EI*0g1endstream endobj 532 0 obj << /Type /Font /Subtype /Type1 /Encoding 633 0 R /FirstChar 80 /LastChar 80 /Widths 634 0 R /BaseFont /ABJCME+CMEX10 /FontDescriptor 530 0 R >> endobj 530 0 obj << /Ascent 40 /CapHeight 0 /Descent -600 /FontName /ABJCME+CMEX10 /ItalicAngle 0 /StemV 47 /XHeight 431 /FontBBox [-24 -2960 1454 772] /Flags 4 /CharSet (/summationtext) /FontFile 531 0 R >> endobj 634 0 obj [1056 ] endobj 633 0 obj << /Type /Encoding /Differences [ 0 /.notdef 80/summationtext 81/.notdef] >> endobj 508 0 obj << /Length1 789 /Length2 1648 /Length3 532 /Length 2215 /Filter /FlateDecode >> stream xRy</jY3o"f1 c[%c03/c1t,%CFEТEYqN$>޿羿|}Gm}: Al, -Me@lC*$yX%Is>\@JY AK*d kШL1@.3@ 9A b:D2Jͯ^>rЦcvN&I9v"RK#]! ͉7*3A`scD:ڗx%JWNeWY\?^3-3_=/Jb-Yz0H;Wݔx.+WlhOkC3= r詛w{uF46pyekH+Y[DT-R'}wD:xC.Lט6½Nؠ>tX% A[>==զ@?/[ɇo={ȡGLMx%> sJrJҒ3~~%TN\QG'g7%QO&|ս>_N"iԡdp'].&#)PL_$>GO4|4uZ~CSs(m|ґt1ؚ^q+*I;{/^UߒVSƬq bkC@7YbpT 4}gJ8"ϘxiTUq E|}< Lh+8L$7o*MɋfLlD;@JFHIk2>Qf לkKb %G/2?01<3Ӽf\UNHO_Z9_.tfŬLP>rA\vJĹ7d@;ܧ.f^P]gv2ԸܻE]UF| И4X, p#^ٳJآ˼`nsdHjy'%,Huֹ-j3O`c9dDm,KMmc\|pȬ6OU57d堖eǰ|ݢ#r_Z[ "v:LbB*[{{zxDq2XoZK4_yzL Sfm襎m^IENk$%'#|?]~ $\0W;s.Cew”=<{2Tl*8%|%<õuځ‡.2 %]zyiƒ0˗h-4.^7I:Bq,]*iMk ɏێc]"7~|)R!(Z u uU7˪zKp֜(R찜ݥ?w,N0}1IN, TI9!˕mg$Vrn-/73t7`R(C6 ObRSHqq}RUB-!6zRֹXՑB{RnwQffbփZQ Y$9ThYTNW}Y4AӁ RZT7M.+6dlz ܚ-!NР8_q;Y 7u:w6C_: FIk%$v߯z|}q"68tgVnacb΍Qn 3փ&ݍ:dybhLB,*1kendstream endobj 509 0 obj << /Type /Font /Subtype /Type1 /Encoding 635 0 R /FirstChar 97 /LastChar 110 /Widths 636 0 R /BaseFont /OXQSCP+CMITT10 /FontDescriptor 507 0 R >> endobj 507 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName /OXQSCP+CMITT10 /ItalicAngle -14.04 /StemV 69 /XHeight 431 /FontBBox [11 -233 669 696] /Flags 4 /CharSet (/a/e/m/n) /FontFile 508 0 R >> endobj 636 0 obj [525 0 0 0 525 0 0 0 0 0 0 0 525 525 ] endobj 635 0 obj << /Type /Encoding /Differences [ 0 /.notdef 97/a 98/.notdef 101/e 102/.notdef 109/m/n 111/.notdef] >> endobj 476 0 obj << /Length1 745 /Length2 603 /Length3 532 /Length 1138 /Filter /FlateDecode >> stream xSU uLOJu+53Rp 4S03RUu.JM,sI,IR04Tp,MW04U002226RUp/,L(Qp)2WpM-LNSM,HZRQZZTeh\ǥrg^Z9D8&UZT tБ @'T*qJB7ܭ4'/1d<(0s3s* s JKR|SRЕB曚Y.Y옗khg`l ,vˬHM ,IPHK)N楠;z`;EiCb,WRY`P "0*ʬP6300*B+.׼̼t#S3ĢJ.QF Ն y) @(CV!- & E@0_Qkk Tihld`naV.(5Nae/5"5d떬Vֹ.U牵/oQ7;36t^bzɒW m;,}Q+zp^/lZ,bB~]xi<\6cN#iEgu*\g^ ߻-4IKI bw_#wy_o_Sak̋qg2<קgQ{QG^i=uc[;Z4UQL) MO)ޘyߺWu:/Zo&LVRV@рB5j0 9'5$?7( ǁ[endstream endobj 477 0 obj << /Type /Font /Subtype /Type1 /Encoding 637 0 R /FirstChar 48 /LastChar 48 /Widths 638 0 R /BaseFont /GBZUGN+CMSY6 /FontDescriptor 475 0 R >> endobj 475 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 /FontName /GBZUGN+CMSY6 /ItalicAngle -14.035 /StemV 93 /XHeight 431 /FontBBox [-4 -948 1329 786] /Flags 4 /CharSet (/prime) /FontFile 476 0 R >> endobj 638 0 obj [366 ] endobj 637 0 obj << /Type /Encoding /Differences [ 0 /.notdef 48/prime 49/.notdef] >> endobj 468 0 obj << /Length1 775 /Length2 1692 /Length3 532 /Length 2260 /Filter /FlateDecode >> stream xRy8k.QLɒ%^_dci TdKei^ff0֬mʮ.mNdJֲBuRgtu}?c0y^ki.'yw)w^dyt qq ΁{7}Uxͧ_<wg:vF#b_y %KƆnűB/tCʾflҡ?%_wW:Lhrwg=B8o"t/uOJ6shEw:HV uWIiɎ'咄򶈴\#V!tfP= .kIb+~&-0N(64EZebco<x'[`^)Ʈ{xAx}jϳ55:mks,z1:)AhSC%EHs]'ڀɵS.Z)݆2ksBb?Id^yR=3)Ry{Ξ+Jo-1|\T`D':tm]w,i~)IIHԻkJwޒ==K[y12™Rf;q*pBXW烊-ɥ,/cbfpK=YdH} } >֢C69 o8(3Fk!R.ҍկ*ʶV y?Wy"7{ 9Cm=Di=W"l@w\YƏXqS3[ ض&nm[?%8$*QdQF+ϧɻZK_ZEˈ xSnx_<CvUL^Z/h|hlNF`cӋ܂7 JGj'k_yVQJ?Tj(3elѱo̓y3OZC"yWz謴1Uvшosp(}yQYt_d5ݩdYpt%kddذIڏŅ+ܲE#eǍȷdZ*e@$2DM̊|2].'؆rgSyhoX{~xqw~ 3Tg?0oNJ$up&}\xTOGX=m^o^Z;_ub ;]\_O:H}uΣ:%Kw6HhާhV/HaؘhWQ%GqS9i֎TYÛ&>VJfEa1]ND#)P:S#Shw y}P,4%9b+vnkQ rF.-2lBd>Lkl`bU7!qŪܑ@E̱cendstream endobj 469 0 obj << /Type /Font /Subtype /Type1 /Encoding 639 0 R /FirstChar 105 /LastChar 110 /Widths 640 0 R /BaseFont /SPLFXU+CMMI6 /FontDescriptor 467 0 R >> endobj 467 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /SPLFXU+CMMI6 /ItalicAngle -14.04 /StemV 85 /XHeight 431 /FontBBox [11 -250 1241 750] /Flags 4 /CharSet (/i/m/n) /FontFile 468 0 R >> endobj 640 0 obj [446 0 0 0 1094 770 ] endobj 639 0 obj << /Type /Encoding /Differences [ 0 /.notdef 105/i 106/.notdef 109/m/n 111/.notdef] >> endobj 461 0 obj << /Length1 763 /Length2 672 /Length3 532 /Length 1221 /Filter /FlateDecode >> stream xSU uLOJu+53Rp P03RUu.JM,sI,IR04Tp,MW04U00222*Rp/,L(Qp)2WpM-LNSM,HZRQZZTeh\ǥrg^Z9D8&UZT tБ @'T*qJB7ܭ4'/1d<(0s3s* s JKR|SRЕB曚Y.Y옗khg`l ,vˬHM ,IPHK)N楠;z`Gz{EkCb,WRY`P "0*ʬP6300*B+.׼̼t#S3ĢJ.QF Ն y) @(CV!-  y Q~AQ& L99WT(Z040U07EQ\ZTWN9Ё2!ZuZ~uKmm+\_XŪڗ7D쨛Rl:/P1dɫϾ(l=Uhd_OܗEkv-X1tލ`i_y. 1dz:un~Q?3/S}] $e~s]F1ʻϯVltVtl_]ׂhWVM\|esWgE): ؾ|׻7/)xXmyjVrYXe]gL?=;paG[bgtN]Xg_%kUc>=#It|yfl(zXu)ODݝL̷a!kܚ`5y.z4&waSki> endobj 460 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 /FontName /YKIFZW+CMSY8 /ItalicAngle -14.035 /StemV 89 /XHeight 431 /FontBBox [-30 -955 1185 779] /Flags 4 /CharSet (/minus/prime) /FontFile 461 0 R >> endobj 642 0 obj [826 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 288 ] endobj 641 0 obj << /Type /Encoding /Differences [ 0 /minus 1/.notdef 48/prime 49/.notdef] >> endobj 441 0 obj << /Length1 850 /Length2 2397 /Length3 532 /Length 3005 /Filter /FlateDecode >> stream xy<S,eɓ,13X2d(1`1&0dD)*EYKlo2jΟu>yKq Oq(d\t: XB6@= P kijEM <4 XQ Û'~ZаDE GgF6Qam@QU{K }~&*!8Sl!wL8 @fR R`{1؄B0NWvK; 6M$ )߂YK6~[k!_@~@7flL UCj tu"S }!ٽ A` Sp^ʢϚ*خaQ~㺞7 ļVK_bw No \>ccԾJ)t)9'e+H|湛6J&3C{ԟ(ψv2K':F_(އk'Q3z8P9q+BuI5';i4G41<;jSurDMBy,LwY~(>hXO>n.FJ)TO~qums4F»wG"%6zAqR z :oCǏ y]N 0'q5)rWdDK WwB3ڷ46e;ު87f/o|!%3;'H3#GVcn&tܱJFSB֪ `A\Z4QWڨke6Tc~I>u+xɳB> [Mw9[~߾Ca;o[Z jyH(BvZ".T -~#ԙP"lbvA-vq'^;;xt>nVm #OGȢKێq ٹRgڗe#8/ xf/tug11U^Dua#%혊o$lĽ/i_NnITUxڏOp/\֔afʥqnz,9K? 7L|`KջEϻVO^k~/xkRyg; 5+q´^kOV@TQe`k孳oDY7gƕ8K K7f@dXo\m[ޖƉ`XSWW:QS> mq3i׌;;Hkry8ʺjS̟4_U,sږk/zǎ`B-UmD )$:5/|-l$3dTH3uރ)+ TƼ.TRnΈcxcmR]k'Bx/ B~G՝Tq%4P͎d_NE8GNo<̨,orѮ{QX@q@j,Z+RkK] ¯(!IO.w*s`ty\pSw"J*l\weE:gRvٞ2mb7ٚvjrU[k.7ֽLI%뇞3 Z8'rb^l{݁%_d7jJQkR"4 QO &a^ sgF\$[Tj_\L?21UJQ|p"[Mz!pJ_TݞSіGH;ɚe*I6Ά&*ة ߢBv=u‹bʉaƉ,q㜂{:ԔVOyhr 1.Ds^*zא|[@\OSXehtJ$ԔׯmPsb, abH0z=CO ;J-xs曞P_K?_6dbxXZZg볻'{Wxm,;=G`w(ᱷbRSb9"%6O9'8\fXdCiʃ"W p'c.=F.8ߴwP4=JzXv߈J}G'cME)|IШѹIKn=M E}.s%͟#@0vQ*|}dGa(ԾPك2ݛ7BhՖz|ë]c\Ct(O^cThUOښ=߆H 6ȩPx*[Jn'@? /?QGTzC5@endstream endobj 442 0 obj << /Type /Font /Subtype /Type1 /Encoding 643 0 R /FirstChar 50 /LastChar 104 /Widths 644 0 R /BaseFont /ASEJOH+CMTT8 /FontDescriptor 440 0 R >> endobj 440 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName /ASEJOH+CMTT8 /ItalicAngle 0 /StemV 76 /XHeight 431 /FontBBox [-5 -232 545 699] /Flags 4 /CharSet (/two/C/M/P/U/X/f/g/h) /FontFile 441 0 R >> endobj 644 0 obj [531 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 531 0 0 0 0 0 0 0 0 0 531 0 0 531 0 0 0 0 531 0 0 531 0 0 0 0 0 0 0 0 0 0 0 0 0 531 531 531 ] endobj 643 0 obj << /Type /Encoding /Differences [ 0 /.notdef 50/two 51/.notdef 67/C 68/.notdef 77/M 78/.notdef 80/P 81/.notdef 85/U 86/.notdef 88/X 89/.notdef 102/f/g/h 105/.notdef] >> endobj 417 0 obj << /Length1 1367 /Length2 8129 /Length3 532 /Length 8962 /Filter /FlateDecode >> stream xe\]Ra`jhi$$C@)A) 钖n@(W;Prrxx8\yR9p+O;o,@I[gh pi:#@/7lwsE(TOr@}5mAnN5˜3Ȩ r+qWxl p{wo mKXIP{K-+ Oۿfߌh/"ϓ)lm!00W@hf@ x-F89%@Hvn6e+7s\@0(;vDd"wH  or# `? \6P*a߄(M9H!\* Q #2~b,: QuPsY&?Íhj"m b b?1rB b5. BD]??\?7"lx> Bq[yide8cE6?P_˴pCDIna;⦂@ 7g0rtVdYpsfCd;Ndh+rME&/G]ҧ<-2}[ O35|6]^|h:@~>,٨7o/OY^osij++LPP1"U=#akY$Ēar"XhCV ‰G7X,~`DGSFqB[W8D>lW6દ4^eSj4}Hs.4XA%*$aV_trS)vLgP~@@lXf.}r/*7:T^Ƒv#R~e OrM-`üHẊs$r{* ^WM7*yygdN4Gu{rL&$ܔK9WA^G%S<9EМ D,׊o ZAzR)-Ch'? 4h2p,PmEW9e;QpwMP[jc}QiT͚#ğߙUwq.'yo.νehWi,qʌ:;/ }/$=>vI-?DTb1aDK3_؃/qF)qOsؠֈ8`>c&<>ĬGʤ39zݐڣ <ǩp;&w','7b՗w/Nx 8˭Iԉ'oRf& A z8:)}{7Wx|cۙFŃu 1,]=e((fT Nh7g-OVqm,dߒJx:^i'+>v*j_fuQ)'^^qxW[OFq"Nj.HYvHCC4Y !k+#+'03s&B\:]!weGW1̤i{~{msJ#!Fj߬tVpy?jmSŏ^~ImlB^S~|:̵qg=!IZ2 ;l{ָI.gÆŭ)O›uܙ`j{)?1ao/.̅}44Yь'Ūa%$ }m'X;z]ZEdaeKaJ ^l.x>EG.rDOdä!ԓr|6Ɔ^.D!fѼfb _<@P6#GJ~ϏB\x7߲ܼ߳Sr/9A&PPZ.P*Jtt4*F]v̾Cl8y\)}wE90 & 0^GR 8!i3`wla6P^qbMH}w9y7 Y*@Sk`|8VRLtU^Ru)'Yۚ"%0>gk]ZS)-_VXjl~ xNRQ֊[Wt*@5$Ag0c4s4̒DYUR$=4,}WFu>DEQq9{$mӍ45]VF8NvSVfyC¯"Ǯ)[^/^qU[<`}@ӃG.,!=>? 5B=Sb G}/UB 3#Ig엥ٶ^F!?v pϴ#ﵸ˾" ٜjtYMo8md8Kύls6x(H8 :|o]MC=&v~ `;! VΪ'v$kzdXlGtW`Y7uTVPom05*ᗱ6~S02X@2ԄbK'@DI35*-K ԕLGKW魄妺IɍkgM9<}I]*wMRe䯧\:_++[F˦X*̆(HdKl'{r!qQAB7'!D0uS oW%QE)AF93].9eG o mh4BMcZS2C!vH[-{$XeT&};|]k!17cv?DzE)&g5ύSa%{MC2E@U@Ԛ6oo!`tqux1O'vԒ]a<8jS$N8G8Ϻ';=pᯮ} cTc' Mr]rFгXu_7wFqJtg mSÜ|7YScAF5ғ eޘwy 2x[u}˿Pi>Y "j<؂bK;^,4]Vt'DZ3Id7]#gQڜEj±:z+kfslz~afuQ{0xZ QRQ;s\~l~57e5-gv lz?Y)9~e3( ŨSh6E\Mࡐ2JW.urQę#k{N F{`:v[!+Fuѝ =fraFcӹ-1Z;" 4zzL̫$p3bOa]24|Ըy>g4xnuȷEV8jIg{nLG ͞NbSqf 2Ru2D}m},o5`iɇ-{1\:3l/\8N[g3\5l擂VEh~V ؖ}`0joG~hlr.􏝬+#N%>߼y,tH.]dlL-&tgw']G1Y*Jl68%py3|ޕ 4U|Ju5539ǻv}w\2a}eCAלH!ۧ3}V}st6DZ#.&zd.ڻPttB=V1:0RP˗a71i4Ҙuy_u퇂P}֔w(' )}CBq`"qG25ٖxNξTcp5z~e>j@& s\nLb;O"ךmHo{nk֎A V!- Ms]87Z:th{mv$< -aTz%gM5X[;Bj?/uU=SVM FS1\[~etq5[wi'Q2 գ0๎UL>0uT]OS`Mr GhoLjg7Rt5o1bw8'*[IHnXt/BX~l,<]ڋ(Ԝ9l"A$(K^&@HbY%) Xy xk̐`"G 2:V-W?PR !48~S }Hl;b72z!n=•\$X(.iQ5qG|%_/_rMol9 9]7%: C* l[< 58ՌRC5!ЖP~4!7F曘:A.dy8d`cɨA%>ExXz2Aۢ?}'kL#޽ŁBqIlE_z40p2Þ7ˡ92ڟqf-|_::? ^V17KNo]Q'#st4Ui4PF@?Ao)콟pNji@DǠ•zثB+EVMhWMr})NcvzI 6X3ÙڟlJ=Yͦ􏧯42 ]*u,Up&=@Y6dNhRSo kN1ڟ xZmWĭ_Е H6A#-nb ,.uK{srlygR/jz[dt𭽯l#Y('35XQ~yY7yt&gNQ[zβQoS6KdfıG=w`K>WER@BNV5tw7z*Z4W;"l;|9#ÞC'NŎ),'̍S[Y$6S1~$p^^8e_ Q︤/ko#BmggP<ҏrLorr<:u!,8af%N E 3@pxHQ.;KB6Q׽YvАfJZH<-4ef[*nۘ/dq9CZBI!U:X9|%oIP3[2_q4PhXߔQS</ǎw. U;b ) *T!8u[i,iFqډVwVfZsHe^fn-l}5G̽Pqo% > B ~}>r?4DxC6l/P)N](?Qi,f6ń gʆgT!i̴Ȕ&ʏ-Q_<$?:ixX Yԝ_QQǨzDItx5/,ʇ]1pzYKv9C$TF=໗_VR> "*՗Cixd_p=7-heB\9JWW7{D@?H1.p W>~xp?(כA$#f?;bj>86׉qV<^=2&5eۭ){Ul)d9[*->ܺKFHs.EC4eTOGFovՖOwS+/[0F[ba0o]ę-3 NN<jmkVZb]l'wW-MsO+2TzVD~\$kݡ,Ofc>dn)EOg~BVB!ݐBj #w L|k¡9V <\QH"ϐ=Q pX )섿ؤ ^@{YYY5ӄ*I^mtг mM6JYI?yM_ݩIpj+xE Gr%7Kn~ 6jMyt@i&d+)rI~@>:obcEɜKUTqRNM]K5eɍՌJ?Y ^KT^:Ww oXL# 3&x_T?qɋ%֏9oP%iǘ@Y+5&G؊cd\ogZ"%ߔJNpj'RYAp:uFc] qW75s_JjuW>|:n'gdv 7Bɬ'*x?PűvG 3> ▄b/D94{f[Rw6J 0'LtPҰ7bn] eە6Ts'tق@HkeԚp+m3 $}+yP5AqW &+<HggE^s㫄:Yծ >siT{,%Y7o%_uKLHbТRKԳ2'*K TF"^7JH͔<ިexk24&HPcMFkYϊƝIڍ4zIG:PF?)3 Y4h~Ž jI\3dfJWʥ.F`B`ؼek6!qL7 dwvrs/} endstream endobj 418 0 obj << /Type /Font /Subtype /Type1 /Encoding 645 0 R /FirstChar 12 /LastChar 123 /Widths 646 0 R /BaseFont /QZGQXT+CMBX10 /FontDescriptor 416 0 R >> endobj 416 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 /FontName /QZGQXT+CMBX10 /ItalicAngle 0 /StemV 114 /XHeight 444 /FontBBox [-301 -250 1164 946] /Flags 4 /CharSet (/fi/parenleft/parenright/hyphen/period/one/two/six/nine/colon/A/C/E/F/I/M/P/R/S/W/a/c/d/e/g/h/i/l/m/n/o/p/q/r/s/t/u/v/x/y/endash) /FontFile 417 0 R >> endobj 646 0 obj [639 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 447 447 0 0 0 383 319 0 0 575 575 0 0 0 575 0 0 575 319 0 0 0 0 0 0 869 0 831 0 756 724 0 0 436 0 0 0 1092 0 0 786 0 862 639 0 0 0 1189 0 0 0 0 0 0 0 0 0 559 0 511 639 527 0 575 639 319 0 0 319 958 639 575 639 607 474 454 447 639 607 0 607 607 0 575 ] endobj 645 0 obj << /Type /Encoding /Differences [ 0 /.notdef 12/fi 13/.notdef 40/parenleft/parenright 42/.notdef 45/hyphen/period 47/.notdef 49/one/two 51/.notdef 54/six 55/.notdef 57/nine/colon 59/.notdef 65/A 66/.notdef 67/C 68/.notdef 69/E/F 71/.notdef 73/I 74/.notdef 77/M 78/.notdef 80/P 81/.notdef 82/R/S 84/.notdef 87/W 88/.notdef 97/a 98/.notdef 99/c/d/e 102/.notdef 103/g/h/i 106/.notdef 108/l/m/n/o/p/q/r/s/t/u/v 119/.notdef 120/x/y 122/.notdef 123/endash 124/.notdef] >> endobj 380 0 obj << /Length1 973 /Length2 3119 /Length3 532 /Length 3780 /Filter /FlateDecode >> stream xyҿ]}>dHP HifC, +{@@駄7K, d 1fGuYb~7`?L8)t#?eG0X<ҏoK?# !vWN#;}K>h6ƍ/yTGZyޫyuAL+arPE/j@ۤkP.ZLp=1ޙ٣6(éz9VGץ#x$m:([+Ka6kEgjOy{E|f~$w~)L,c4ͼ I+ZY3MXce8y² \CLa;8SsE(9aTO%!WÍg9;Lvڻ^y0j3iP/x?E$԰ښ gGU=a6%'sp;ЬZF|]˒D{g MIJe3_ua'PW,R}|w3ZE^tBxqU [i7դBc߇C :{ɂŸZ!9i/qwYI5l|i]dZ?E.Z%@ rط '$5.iܺj{eԪcT:=$QBbcؑ\C}%(E-[r ƏM$(ʅ="j(F] Ѿ"ugʢn/5fiS7 >;`KۖN0 J)8$VP9^Q|&]1zAOKޣǍ }G.t}g׊]1f%%Q̥D΋<~iJ2qkm}smR=~lo<3\8BWͧ[6׻o6ovC;GԆUx:)&Gˊum*AQQj3{D\ӹz1Lz[Iٙ~>=ie1R,;nS[_|zI23~@KWƳQV9k={.O~59'q,X鬷Cy:)r|/2[^PAe7*/$]t'$W+.I h_dz6;>IPaX@6' $TXin_*uVZkd~b{nI^9Q&m/dOꆶ*88N`pq#K 0QF;7,ei!Mn,[ `[ν۳1p5eo1u N--"bfIs'_KU+heS? naj/WɗG&d$Xh_3wPξl[s)P&͚=vmIv?[Hb!'}>~c~۝;7 yk^zκrϮ׬! G>,"T>1t4B ԫ0 0!V> endobj 379 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName /RLYZZJ+CMTT9 /ItalicAngle 0 /StemV 74 /XHeight 431 /FontBBox [-6 -233 542 698] /Flags 4 /CharSet (/parenleft/parenright/period/C/E/N/S/c/d/h/i/n/o/s/t/v) /FontFile 380 0 R >> endobj 648 0 obj [525 525 0 0 0 0 525 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 525 0 525 0 0 0 0 0 0 0 0 525 0 0 0 0 525 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 525 525 0 0 0 525 525 0 0 0 0 525 525 0 0 0 525 525 0 525 ] endobj 647 0 obj << /Type /Encoding /Differences [ 0 /.notdef 40/parenleft/parenright 42/.notdef 46/period 47/.notdef 67/C 68/.notdef 69/E 70/.notdef 78/N 79/.notdef 83/S 84/.notdef 99/c/d 101/.notdef 104/h/i 106/.notdef 110/n/o 112/.notdef 115/s/t 117/.notdef 118/v 119/.notdef] >> endobj 356 0 obj << /Length1 745 /Length2 1309 /Length3 532 /Length 1863 /Filter /FlateDecode >> stream xi4\iǛDb^KIl PP-Hť^JXcm!KLbM$R2 cdiSdr8i}iDf!p8RH@1Xqaq!+@  ԊH`ǁCøਝ޶@q ЃNcOC8 Xc{G4!N a\x aS<8B(ptS!(Š 1vEABnsJcoo1 %@ّ<.TqS'6*ĀyS'.H( F3Svc!;̥& !DIgݙ` ❚{-ǂ<'*hY2`$áaB+"$0X qn``on0[[46ȄLBOXI&8% >LXBt` [ɨ:G)QL/Z2m#7$.W\k`$x=׻^)H <-Szk$@c&`qB{e2Ce`QpaOlݹS6Jb#4ߓNxZI/ΨYʷw1cSрrɊUk+Nߣ5n<Mg/6w^~XG^*ۖSo nr9&9ԩM{g܌%v4&x&hhy?zZr˂Z؄y ʆRT^,l=MFŶ:/w­YjN'EQ-uN>;`FsZQnTb@R-b˕ CM[dfDzi{^G5~]Lay7p~JA/4uk:t|Z#`EFg es(=ǖ4>o{YQbq^ I37H]qi^$HG2;|%\J:;! o D:-ILx奚gz/8o2{)Nm%$5TJfIu^mhb+UI0mhlsM3&ߜ_ 2jL!'4C4n;.&;$s[0DMz᝘bFq߯>= |`ak6ؓ/ӗ 㖝®JJK ^<2ck@>fcZ+I: >-a#/pe.`>e4:8yY#7,X|C=ׯ8 ĝC}qUW 5|n]ts:"%?X#7ټKy,\GSxGA3u'X@2 ]B͑n]1MЛ)Ac ~ hXkԑÆoI)/rk%1Ř+{1^x~ u,-"Y]\=_6VZD zx#qU{mrFMM_[bf,\Nuډ~. FiYZT]|?хϏ}LUrY"$EjѡUJ =6{"h^۰J]x~VZn |ν|UJ e [uj-w+v'ݶ1C?wdKjY#w`it,*XOT= ' ,l'Oaցendstream endobj 357 0 obj << /Type /Font /Subtype /Type1 /Encoding 649 0 R /FirstChar 88 /LastChar 88 /Widths 650 0 R /BaseFont /PGQFKE+CMMI9 /FontDescriptor 355 0 R >> endobj 355 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /PGQFKE+CMMI9 /ItalicAngle -14.04 /StemV 74 /XHeight 431 /FontBBox [-29 -250 1075 750] /Flags 4 /CharSet (/X) /FontFile 356 0 R >> endobj 650 0 obj [849 ] endobj 649 0 obj << /Type /Encoding /Differences [ 0 /.notdef 88/X 89/.notdef] >> endobj 350 0 obj << /Length1 893 /Length2 3003 /Length3 532 /Length 3636 /Filter /FlateDecode >> stream xTy9X7igIˬݞX3nK˜^[MG~EYF'{zԡ2Tk$k8\f.8Ll«\cI]RrS=ӌ շ cbx, !ΞJl&Nm>&?j{veRRC0C\D#%\HoL}uI.=(])*-ڤC RiƊժ֕Lɉ -ז)PZ(ɢZnl[__Zo5Ǘ:ll ]d6qkHT2v>pP}q[q  G=XLG5j[[,am5:`AZjL|(wPo*L+7Jߜ͔jX2t* SvzԩG4ԲFFEk{wK)ؿ]nBo.Ė?vts\FP$,$?րuOQb6Lp=8"zWNpDjH8Jl!'žzaDn*k moFcJzgʙ\/\r '}u H =Dg]ė.SXoNw %SS1VuCE'<N88= [9CTmxp|c5lAzGpg8xYϡ7#z=ĸZdƫ) ~"]fIj~)y&3MEeS+ei#& iwo޸u< T:VǢBފ{k`uPJE]^dUtjcJ[G{`frJ3\ҧj7.s{UڻwICD1wo<8Uٺ?wZBs>]i Tr.&$;k\a ^hϽl}Jn^Uz.5^:gPGf|1)T|#pĮP}/!B+ jģ=Bl jwDltoB h<MH٭(bɍL{VllLY3K|v YBO;}CJӔ-[hOlN/=yP\(TRl #G*W6oCW!yQ:>g\3[ ,Ok^y#Y_13-5I 2NeHvީk2vz&}棓RLjnڢתFL>38L>=oijK3:zVjesg5 Rvl.ݯ@Kרe `bvzͯO!} U!$u9cv c`sFV4`{6& P"'mauF8zzﺓ1$u2HcE)_^-GȲi/";=EEv :8*\ъ/wj 7dY6a5V5!Am'gOJ}j4ԖǕN*5qf[y*>huY5G?j{{4xOMI݆#zH[)`rµj}kdY- W,$Yܢ(s [&.dS6C>SkahG|nMendstream endobj 351 0 obj << /Type /Font /Subtype /Type1 /Encoding 651 0 R /FirstChar 11 /LastChar 119 /Widths 652 0 R /BaseFont /TESPXF+CMMI8 /FontDescriptor 349 0 R >> endobj 349 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /TESPXF+CMMI8 /ItalicAngle -14.04 /StemV 78 /XHeight 431 /FontBBox [-24 -250 1110 750] /Flags 4 /CharSet (/alpha/beta/period/comma/i/k/m/n/v/w) /FontFile 350 0 R >> endobj 652 0 obj [682 596 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 295 295 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 362 0 553 0 940 645 0 0 0 0 0 0 0 517 762 ] endobj 651 0 obj << /Type /Encoding /Differences [ 0 /.notdef 11/alpha/beta 13/.notdef 58/period/comma 60/.notdef 105/i 106/.notdef 107/k 108/.notdef 109/m/n 111/.notdef 118/v/w 120/.notdef] >> endobj 285 0 obj << /Length1 1325 /Length2 8857 /Length3 532 /Length 9680 /Filter /FlateDecode >> stream xUX\۶ SKn Nk! ,+nAϽ'}~꯫^o1\ߢ~.e Cف@a ŅNO/ pCd-A?@@@}\v&濜R+ fnk ::99i/;?- `GB=A55?]@JN d 窒#J`rpv{߀ݭ6n ')%FGEF 3o&F\\\g?G09'+5puA>DN o9cN'sg6PW_N@geೲ?@r=qqZzHKCy|\'<9.*7ۀo BZڧև单"1QզpM6j.ppe8)*_9mHiqa0kZgvbC2#w_m97.^z"UG!<\8ͿdMnݢ [M;RA ӯI;'0ӄ~q1{۬3^g )k ROĨśUNP7Ǚ60&BStKsJ H_: N﷪4BƸŒ /b߯BhɥBUg@J5d&*TX{~$bj i◟'f|"ƶE~糼f/6H|SB<^5;햦-6} FZپq+΍khb޺ ޚ`_–iO K'S_st;},/E3`kN]R# 2e ֕kp椢@]NR;; QË-ha,bԍ BW,wԮew`^&62A wc^'IA ٤F%u&,cξ<{@#Kȫ7f W)1&V|}^k"_3_ jdp3}v;Dfv-tdrOjiH d_Rjv]\]|`%sTh $ _["% z\"w5G=Yh+ZmD7!bMFfG!;J.B| &Q4blY%%m\鷐 JR^6`^JצnS Mpw,{(x%Wt.ҫ4)~u\iG+3oтkMemZKCvtu/1Br2M/(%+=55‹is5+~{#ݎ]lb$44b s,Np_H0 ͒REf:‘wǭi|~`R l^%.j9?n_5ZW;fKLjފKo~:E}*!By'JVg-t]jbD韕^QrŽ7m԰iy; 8qYMt٠LYo!âmǾQ@ϱimM '{[9pU`%}qʐ->aEفwc Mވ[>8x2)`JP WcZ|(^Ap1ފ"ɬ ':ϐ:E!FSͩ#47DH>Ja[GzϠPދ"6z$`Qs>v59iJ Yc_Ka.bnQ'̅=ߛ1i74i|>L&qĞ:q$+N\g{4*YYO%1({ΧK๲]Vg׌PܶEN?KyfcNB1Mt]yO68WnK ٛ 7=0mߧh$ߟqI9xb(DE&{ fLm9nQVd۾__«z n}@6\3ͼ1Jb$-B]3bn3wa~g(lkapU%h c%(J["V;d7(k}4.7+m kˢ<[x$z@kLrooV)U`0xL3z"Ӓ,9;≾e$q2P'p$BlmFgE"Q53uΏIq^ 3UCpC=F޲Y*:j)m{8@U r޵3>cJdv# L/1OW6:N~;ۚdW %8Ryejx0:`F5_/+>}ˑ3GcgX#9˩ȸ sji-t;\>?uu}"_@Jar.#_gw1յи-=S#]^˕[8=4bZQvIg\U9ḗ_KZ1Q)U>voԐY(b嬾H&c,g R[~{x$xRp?ɻ[n1Nlj(YHp 2?ۣkphCBׂU4u:$N(죐6 uYD h 4(2*[W:#I:Z$(M=[K#6o7SR>V0ֈ@r.긛VRWb+-R#K rS> K850K6qDk~Â,0pU$dF.%GAC'Pt`g]EpDSMQq>GiE;/t\C7j^KjEkW|?Y'ߑp_][|mnu@WC3S(oʂ/Đ3widGK U;1qwªvG6dWFubE=e.0X觀G*Ƣ$G;RRZrKa7 ͽxr'BNr *O.?ANy.2ԽDե BRT?[dsÃc;Sf_$mR g/Dӥ7z?ETlZt|c٬lB*;ˌ"e$GIUDLDn=9%lJpB*\  hzb>5UTYzoBs6RoDQ{U1vi74U_աė/:DDͼE} ߧQ1QTyA.H$x cfsm=kcB;DOU+{IJxAP%6̨ͧTr{/w1$[{IKa&O*~:i{ޭ#)V.bu+T r"kaKq%|L`Oby/FPݬAdQ3 D%CIUeUΫ>s}VHPm׈"ͪWjZV lYCÁ}lANtr}} Vxmo P,e4y^\-946iAɑGpŕz3~p$y i"~k 3:=C4MJK%.Sѱkw'L XŞI<`:f-)X,yqz9FQu2 '`!yG1ySP䘹|y~m] k7_o{o0XfǸH/~gM*{nw= .:ig87sI^#V|$NvUlTr ֗ k!Yǥ =zNMf~v.~Ogh_+RY%#l6D؄Vi;z/ܳ~kjђneyx#20|3CqOnQ8=.y^U.qڍLc\Ũ^*,[lHeI\X l|Ȓ,is컦+3F8Pv;ˈOI,`O,Yx@iVIH|?hf0[p*X]"<R?(jto!{#1|t &z&LA+Ahq%)-XaA{5ʵІjnbD[= 1 sbG+{bj^hH8L$Eg2=6jHB?vect2d͙9*r1$?Eq~1fPdz{ +x`%E&-ѱwcH8 Q">UPH2DC ÎدG2fKxIWhiZ]f[nϯ:R)xGF,<]K)kwe۰~7OPM<0~66srL=^zCbNX^v AܶqUrͅVO|Z$w}U\}T ")W{llӢi0Dw7> _F!/c4%GNUF }J 7E-m\O?NIck,uyu)oT$s RV *o .?^HΏs]~g_"euS;/bf祿\¦R8=r*Ic"^[I'VO1@;Տ,)M/ۆ_aX[`Ұs"@v);Vq7G7J,hI.^=(HU](NvbC7u\k3;SU{sȈ7x=jPQRޣVҪZ d՜DsC=ZgH֗9x2;tuZƙn.L4>x!A؝%+ z3 *~{f(76Ql@dDKR48m8Zrd77ۗa1VV>)8 E|jfHFi8ydE6$}/,y 6/w=ۈ/Pd ed E҂xQQT%@B3fֱ!#q-FC!%l =OTc(skm| h Ru9)z0n>j_m4X?XTE9#= 2)jmћ"s}տf{fJՖ5FR}#^s(5_CtdD.?3O:XtkUlT}4~}`F9V?o@4 23ua>wF̔5 /9xWQ{:UM/g]VAG^h}_}(ⶴF> endobj 284 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /AFPUKR+CMMI10 /ItalicAngle -14.04 /StemV 72 /XHeight 431 /FontBBox [-32 -250 1048 750] /Flags 4 /CharSet (/alpha/beta/tau/period/comma/slash/greater/C/D/F/I/K/L/M/N/P/S/X/Y/a/b/c/d/e/f/g/h/i/k/m/n/p/r/s/t/u/v/w/x) /FontFile 285 0 R >> endobj 654 0 obj [640 566 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 437 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 278 0 500 778 0 0 0 0 715 828 0 643 0 0 440 0 849 681 970 803 0 642 0 0 613 0 0 0 0 828 581 0 0 0 0 0 0 0 529 429 433 520 466 490 477 576 345 0 521 0 878 600 0 503 0 451 469 361 572 485 716 572 ] endobj 653 0 obj << /Type /Encoding /Differences [ 0 /.notdef 11/alpha/beta 13/.notdef 28/tau 29/.notdef 58/period/comma 60/.notdef 61/slash/greater 63/.notdef 67/C/D 69/.notdef 70/F 71/.notdef 73/I 74/.notdef 75/K/L/M/N 79/.notdef 80/P 81/.notdef 83/S 84/.notdef 88/X/Y 90/.notdef 97/a/b/c/d/e/f/g/h/i 106/.notdef 107/k 108/.notdef 109/m/n 111/.notdef 112/p 113/.notdef 114/r/s/t/u/v/w/x 121/.notdef] >> endobj 265 0 obj << /Length1 1441 /Length2 7702 /Length3 532 /Length 8565 /Filter /FlateDecode >> stream xeX]QsC@@A`d``hN%%AnIiAJB:/~zw^{1zT+'(PXYP+  @y7[@PTN^H+CW@Y`W;5CXà^|y8 .tB+ j sGW%w(e 2 @Y ^_҂0np&WyԌ*:h P?S ìmPB0e' s؀.пPG?MULͿ0GW}/3j6H'LO@@?#8H$ u.P$!PO嗟z/B~د_;!\+6Q?C'w :¡6DG2Jy9APN(wH  J #WDDQ %7 %7~) ${5m7e7[MB@To?Wc ʌrcZ( Dp( DpQ?DpQ6@ ߈z{(^ O^I5Q%Z!Q.m`zB&֒_(e `rQ֬liUw暭0(L!%\\eq o|34vn]Gc|tyzhKl_~IvgޗLmk?ZܫZSEŌS!Al@F]$PXBpjn$Y8q7ONɣ\dk[y!Do;KRzH*nj@:ipi%o{_B5wyYEgs-vjb^#+t#du, ȿs:X15qDDZFt#)(yYuhmigDŽ1$1t<&a;;&ln*|΁h <\>t5@ ˸`1,}Oso0Ԅ fS΄xBSrȯ]6fIy ^_B S .|)aLQGxN\4OU +:ĭh es^V<@+J~|%DuA8,iPPoOfhk$P !>TdfQ,B?i_³ @:#Te%Ch,ңHxd؝hm>o[=)hS%i *b"\[hb6H@Zk>kMƶHwxSl'I6( Fw(VE>S-4,I Ɂ__M̨=ȘL9f'G:.3z]лk\rTi}0s$a"d9)S{m S7}qD^ps"} F\ude{rۙ0uIK85eđmWWӎ94 ߦH|9)jeʣv^eű~=^fSXqǀ&Z+_q;ʻy D Nvv&^Mv9_x4g#IZp¯L%.|)E_f esGdۥ/,?PlqCG>d<]}&|dDRK'οk%zMak|by\o&+}U6`7vl6N6U{CqYktt%b.Bk9.Y1Ff^_D \2UrIS4lI2H'4%SBM uc:9~=bp/;'|*p tj' ƲHM5<&?} KpӫN^?%r\K^=?vW8W*JxW3>U\%! ll3p_ߐxOȞx%qbBV@[Cy5V́) ]5iΙᛧBH(&0*T9cMw>芭iv%%T<:l>$J/.7̻S}Utfㇲ_@;EeTqfk&irv]|=KͰyA.)ᙊUΞ#ZnClh_Dk}ax랿-2]`>vnhy41*%#o҂ Vnc,G [T~p.Cɾ3l'̪To{WhUIVxl4@y>;Coʳnr#8vo(t:dć7#2A4R)Q\?}QGV1ҵGqXvw]S%QӃme>%/A6;t5K wt=)KzbiFu0iv#-RsA$sBTvU)dVk$а>?*U_}i9Kz-z]a'卢[' Os>Rsd۾y;4RǢ F/qa^lmÍpL:pE\dw$9;@)C%t^WB 25gx$0dIg!b({TE{{, ~eE@|)^Fݰ9͙*e L Qq&Osa7p`^'UKP{]Oy8.+'`x]#HzZW/>(v)g;ą  [Wcr]3hGY^Pa&< 뜜amz+Ʋ`Ac՘E{E~I .V=>wF7CdV]p-'B8H9W5pц z;@ȝ&MçmѴf'sq@Rnp~D[*-O$)ImD`4ΚI3uD2eQ\RxH踻 $Q2Z*Q {lL;Ӄ?)N+[I.D59{2z%}!lQͪ;gk?ԦVauxPc3] ]]n5 WV([)(JQuaE!g%1,+SLq{]@ddyP"9#StʠsB̂׳CTbx].ٖ]cavs2 @̻zQjXIO j9uZ{E~P1N8Wt<$#re,@m|G 3C7ެ%xŪ6=ƎK^'[Lh%v幊?q[7ץJ)썐Gg/B8˨"b1/<`mϞbъ'$ k!s=Z J !; da>ݥz+QTm[`1 7;pk{yi OZ7.2e&tݡn39=գи,i7ILZ g5KR `6D)HBߢ9]ee:FAqFHul)bwk%|2{T4loݨRTVи(rL,|EᄘWG"9ߋ`TQQr Ȓdje,) Yx@ +R|=I71kdW}\G хz~ omn ASLv:}2ԨKp4[LiA7w4B_)鰫nq ?i"{UR5:L1W"=K_&,|~%8w>r9{J)fm▽YMU= *GAOkkT|) o9Iv C}S6 4~lNj]zVk2s|o% qbUɳ^?<0DQi|y|8dHԺ[BK8yR&32}~E3``oWc~â:"uD餒UW|$U,LVW_s]CT âUxeG;V鬾2,ÓfMaٶ3}UG޽iW\ ƾyI3pl'av^Hwtҳpw?'d ƌQee!әΓ)_̾9 a5Bt'^VGW~{ &,-,=JA&+{hq;=dcZ , bqEH8q`s nHZWDd9>Iþr2M]ƨ0mT41hHd[.( ݌\HmDnk 9n:a>+~}dSwK><馎$I&73 m*L+G,y!spV^lUE;G+Zaߝ֢X]݈pY1T:V5sԗU7unF>aȆ#@ͪ; BPC٨;[S@UaE@3&"}Bz5h,c6nXT4ȉM)4i!d ^cI=ESC08 ̕1v @ 2'BW-w1؇] b|%NӡbMM P/=0rt{Kέz9#>i[ҭXzxksH E ݟJE:YiͣمsŒ ǓRl.vsw?Zj4;A6)1|.Gm|.-d&mb {I"zWhR# oתofHO=scם0X䚼ؖlǨS#|8o?E )ad4 c&gxsI!hRc>\%;)A/7Oz V+ap rf[/{9^--ʎ%=VgA6nJJ>~rh\ ~)GHL'8%(r' ǙN*R|=2tMʰPщ1+3D͒JٻR$_7 ,T(  "& 1[=tumo++gV? MK؜syZ2{556&[MED]#Vn{,D]eaL,svGg*D ^)Cr)f{Mb1v>k/ h5Z?|ڟ ywe%4^ܡrI(yRi-VB!OJ15 F"H{~8endstream endobj 266 0 obj << /Type /Font /Subtype /Type1 /Encoding 655 0 R /FirstChar 12 /LastChar 121 /Widths 656 0 R /BaseFont /DLWCGZ+CMR9 /FontDescriptor 264 0 R >> endobj 264 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /DLWCGZ+CMR9 /ItalicAngle 0 /StemV 74 /XHeight 431 /FontBBox [-39 -250 1036 750] /Flags 4 /CharSet (/fi/quotedblright/dollar/quoteright/parenleft/parenright/comma/hyphen/period/slash/one/three/four/colon/A/C/I/O/S/T/quotedblleft/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/r/s/t/u/v/w/x/y) /FontFile 265 0 R >> endobj 656 0 obj [571 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 514 0 514 0 0 285 400 400 0 0 285 343 285 514 0 514 0 514 514 0 0 0 0 0 285 0 0 0 0 0 0 771 0 742 0 0 0 0 0 371 0 0 0 0 0 799 0 0 0 571 742 0 0 0 0 0 0 0 514 0 0 0 0 514 571 457 571 457 314 514 571 285 0 542 285 856 571 514 571 0 402 405 400 571 542 742 542 542 ] endobj 655 0 obj << /Type /Encoding /Differences [ 0 /.notdef 12/fi 13/.notdef 34/quotedblright 35/.notdef 36/dollar 37/.notdef 39/quoteright/parenleft/parenright 42/.notdef 44/comma/hyphen/period/slash 48/.notdef 49/one 50/.notdef 51/three/four 53/.notdef 58/colon 59/.notdef 65/A 66/.notdef 67/C 68/.notdef 73/I 74/.notdef 79/O 80/.notdef 83/S/T 85/.notdef 92/quotedblleft 93/.notdef 97/a/b/c/d/e/f/g/h/i 106/.notdef 107/k/l/m/n/o/p 113/.notdef 114/r/s/t/u/v/w/x/y 122/.notdef] >> endobj 261 0 obj << /Length1 889 /Length2 2612 /Length3 532 /Length 3240 /Filter /FlateDecode >> stream xSy<"FY)3WJvz)K̃cY0k߅FlEQYz# S}ϯ9y^u_{b'ͤ4Px{P#Ia*)IC!bbZABqa0 T"h]) :]h4 $'ЅD`3< (Ҁ ~_ALA"HpQ @$tD 2\9ş4g$qzȳ=" R1I~5%cKRQǻI 0@W3B]~^!!h ПQh p@`ġ~ Aoۏ2ZjJ插1#S\2aczohO * B/[xG? pA (# @P'zH$O| ٟ2 ǁa( Cc'O Y@O&M ?)" t 8 s1  ]MM-)'E"#8􉂠' AjiHNfW>cYaIMo%[`aU7b͂$ambDI[lbLK˕$ʴJ`3Қp=c'Z?M+Z&a;iʙ&:ppg/&e|{3%-~|E)p\G["2겤pTۛSd.tɕM#:/D{?J| nM۸)1e]]TgOov635,m3<#?u[㰴q.m:}<ҍa;e'qa<] el_ڡծ ##&CǍlg y-D0~gM6ՐJe}+B{v75.#O]h-KQ:Ǐ>;3qpޚɚ@kLIڭEA9\.,jK"_ƒ3,]U:weSJf6;=x2yLUyV5|m(׫Lv%UE0~+KJ d\|{Dd̈́-M?ζ'RZr6V`n܁:ca'ˏ(9R?"-\7d\"C`M ˨:"]{ť>x5Ƣ|Sj.ѯRGjаj7kco)BѾf1g&Uh MFil WTE ?ھ)ՒD b^pF/*wĘuT]ܗӑ_U湳-QI s_8]bd0֨rѢbϖi7$ʊo]Ԫi[@fFr&c/2vD뙦i& 1yіIcv]g+=⌭5j.س]Q<\HK햷IY! Le%Qgf:h0Ty}P4p$u靅 agE6& g7,0_L,PFl)hY,qsv~;_EE1ZLj!=ᆆ=7[Su+e}B%/y>9#ls,9fv7ɌfWTUcnZZ^(I,dS(iL?"sF@䘛`F#(1wHqNM|cҳB EV67}'T;o\RcSؒtoQNΞzQu/IV:m4~Ol2Δ >4!/h;:SEB{;0bJ=w`39Yߊ%E$i+'6I 5X(ic S!cz |BxZwך+<)zfd<$[=bq W% [?Lj3YJpz:6C5!2TSd魯NK HqK So7Ip';(>#WN.Z^8B"vU[ w-q1PnN(j:gy5]$*r+4_Eb5Y#AӡJ &{-R\3|~ϩ1O#+d:scQ9R6'5ѵp1|{OT $`S9[\ڹ% υ(x.Ѱ(ODܛz+=xrHΊ9l1]{5<('ggY>5< y~^3 O'Old9X5Ǟܔ/^1iS5E3h/\kq䕡j"v-\wvXg:%Nn}U 3Y·N'޳{FӮ?7m_+|\c[l4Lgpok^CTݲcCZ!+Ms/g֦/y/lJK,qպG/ _/P@kK醰+5)qĔG{~ Ω*zע1xք愖ֽkMٺV{l?ݓx5Ln@SO$[@s F+d+̐T.bG]4KM?Ӫ yc)!ʅ₰FэK9|Ns G f [s{F0%C|D%\j;2gsKIYOwCo7OUxɅAg0*K!Ok 0J H ^!ؼb>hz^?LC+vC0Q}*Ž,'VĿ'zB3Omlkm)7_UVlf]4Q֡ "$ ?߰endstream endobj 262 0 obj << /Type /Font /Subtype /Type1 /Encoding 657 0 R /FirstChar 48 /LastChar 57 /Widths 658 0 R /BaseFont /VORXAN+CMR6 /FontDescriptor 260 0 R >> endobj 260 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /VORXAN+CMR6 /ItalicAngle 0 /StemV 83 /XHeight 431 /FontBBox [-20 -250 1193 750] /Flags 4 /CharSet (/zero/one/two/three/four/five/six/seven/eight/nine) /FontFile 261 0 R >> endobj 658 0 obj [611 611 611 611 611 611 611 611 611 611 ] endobj 657 0 obj << /Type /Encoding /Differences [ 0 /.notdef 48/zero/one/two/three/four/five/six/seven/eight/nine 58/.notdef] >> endobj 258 0 obj << /Length1 2134 /Length2 13977 /Length3 532 /Length 15140 /Filter /FlateDecode >> stream xUX]Ͷh3];L]{p;܃.랻^w3U׮#]1jkܟNpђ$싁|d`ݺݙ!\ZCkTҜJ"8<В&W.0 =D,6NZ g0\xX'u2SdVvWF͵/-wNmt{=oÛЍq<-DV:h,W@qea!7I(SHSJS\F,7L!7e*0ʿP&J[ElE=x+FΣ7T,o};v8Hp>qfߒY#Ҩ%,=b;MGv`OY$ŔRo߁^:#˲dmf<; wl!ݳ ۑcII,a׫Wk=D` AB?ejӳ/'~tb5"{iTP=t͝YM$SVyֿi)/@FPL>TE8Gw51MOְ̙(0pU wf4 iY 2fbt4KQ~qjn& ;>R ] "Ɖg*_δhg+olDCV[3+ Qi4YGU~5jz#FkyDSaGl{r-?R \Wۼk~p$ҏ't_T=E=?hHONmUFҍln-iDi sW+ nBGё[H9]CWiֽH 2D7ybBC7&,ݸב1^2sU?Jh##v.3 FWvTsS+N7~/@|&ma\ex7P u5rx *x.P ۇ%©.Q_BqtrOF-}lpsN3[k+iyvNӨK1Qy< ]eL-MS)q=eNML{ׄKUi#J416U4 lRYřn]Q~Q5YExdgLH}PotT$>p?a m(,.C$KtΟha!4-]5v[k&Bq|[+ 6*YMؾB8-7Oʇ CEBuءltH$Um cƨJ ѢoqPf*@\3 Wmv\ -T[aeho2\s ޷bpIr. ^ !*._)^qs櫗yTpjm~ W)%U\y[ ~%]Bqoˮ±~Ya0Wajsw2Ej}>\57XkD3g{I푉5Rٞ3R qۏ[0Qj2ur`Cm~n`\*dAf 1rͼZkUt܀MCFV#G5+æR0"|dqUp&喨@ro|׹ F_{ǟ%n~j^쾔Q-7- X.8tc$>!' mשJ.<4r`y.(St>$#")ܥ`mgϜjv9̿N1[Z D?hV.s3PI1]#~ArFѧ)]OO>2F1Bct>tE;V̑Vy$ b08 v)3yڍH9x24#4SO$8G佰LӔJg D޴C#`c'ۡ=S8H8,h=wt=`Qmd>XM5cIE\wa2<6qBHW羴$ri;$:*N[lo4ئm#CkBZkv0Q螶ԭkչ*y6~+BPı}c~"ocQ,fcpD _FF '4 _F~`Y4EkµMԦs R:PMN }Q5=5")CaXy`oXܸK:E5cK zm,vG19{kAkndIJL)^ub˖p;1O}X=?b\@6G/qRNī?(O=FŊ][)l%*J-*^k;sUM"Aʗ"-^1Q!1Aތnf/+8 "~D|_] ~w;>+t(y񔰔<`SPp2SszzMOxZv)˫>.TUtmvO*IiY޴He qڛ_SB뎯MbW0Iwa ǶoTJhc%UqؿR=ӂ> :QN*aj7i'"*wA+CGNRoi6=^}+.op,? _@q3\nZ3BUC'x$v[۝f Ԗ6"HHGdC Dvp-{G e(EN. L@@z)@>JdWEuQ<5;hn'3IҊ({(inɣ&Rl)38DƢ8(TZf5,LqbdP]yXl&~G}KE /V]rs le)\(ƽW̆ ݩ>Ώsu\`>=5羙^fɵg:V'R+q9J=~Z֩#c+'Z]mrDWr; Թ@s*%"VS8 ۇUM}>j9 6!;@~ AЊz*kǡܬΉqoz GmğxN3dXIx%_(c 'ЙHMa"J!Wc2Q~R6*˔Wni'z(ʤ=] lMꃄ,O뵿zVʗGYj&$B_t884JgùJo),n[?ȱH- zRglR8TV z{뿺SB7dV?lUvf|Jy8o=UW*!KADCuچ1IUܳk&)v6TZPj}Rq z>m)s|+zCR z>\z Sl놽 ԅQٳx-h,!it[kvc:?n)X '>.܏50h~qL/SبH|A&ԭGJ`D-Ae˵cxNb)}5=}P';IQ)"IfJEx*yeKENF})n`H*Ә+6:7`Њê 'L1wԒgTʉCsOzqm2rHⴃ"g<2#|3l)O'|<ɠ'ٷ˷80M"sl$R%|ֶT7myV+#R3c"+fT[3,G;O#У+FL:OoZG]83VNv`BjdКA`q3 )N$#/WXӆ>f,CEWE|cfn<̫3"Q4WMLD Hn}#bI{|mn%ag{[*İ]ZUPc3¸d1H0IYLdEq n#Q*ިͣGu=ᾁ9W=(ZeCF'8a :"у%|< V{q cTA%KasbHCCW(۾Nݟ="fb }_|*՚3)޸E=Y/ ?>X:#hϹ.[g6:\5f1> sKai%S-8Z웛EBɨWԺjšrR,zg퍄 M-s/UCwPчRTM-vJAh2џNv:JUo"yކQGt53i)5SizevLVoz8j#9p9әx\N4,DnñeLVT_et8h%U4"Ckp"Xaz&Hpꈕ'.,Ӕ#Rv;1|[mۏm A:qj\F`UPvO[5k{Rfz e1vM ]6+dft6ZaƤ>Xu^iF r5a]3'h$Sw?Gdj]u=]$  FQ~+2Y$TV\KP+e1nFUb쾗6?cOwh 06BO^EL|YH*̗l꧅Apý 缵P_c#Ncg):T!}hpֻl#bB^\+.8'aWgq5T&%@g@$rCe8E8FL3d*]XvL;POf-0TGML ԑaM6kzq>*?"TM4HGؔN j&Pfྈ:E1؋׻?SQ.?&ЈBs\QG֪ArG&uCJZ:KaaT8]ѣrlLy|',:|nŅ i1+̨@d@jͅ'yZft!a18l ?} I =yϑ^#װPkE) mS%u s8yo8_[`Pf`qEK3[FKWqs,=]ďdS툎yzS#œQqOvz5 y!RzSI(:__JT&wrbő 44s"}`Fҥ[}~O?Av.Fı~ʦi Ќ JJt7DŽ{S r YbfʕC)V^\t8<}7S >f4 bY`^ص#jFkTLeՋ >=*TyC+ic-Iyrj/ʷR}`3V~o9 !Mv|eKKXʸPHeq $1nҏ@׉[;fA&' s]t;/ѯT~t7d3\XWZ l?wymQ-†~U+cJޒES?j('~RCzsɺ/1mr27A !lA$)uoL*05o3㟾O:D%\pFdR&)ykcJ; &/+jl3QxI%6T-'8Ο+NHEhH1f'ܮ~z,|Ù ܆WE T&xrafl/ yEÓ!1':h)겶x%u֯Ї\4Ӗ}FݡI'<Ƒ]8R5*4?|ۮzZï<-s\2wӚL)ƴ0me,< ?~ֳ*VgE?ړH.wdp"Z=ȉ鐾oc̈́B.D:Hm4̭)ZƾU46B#_Oj-P(o&+,bhH/div ^(2fI'*56D/&a*E'**ӵg/M_? H8?ݿTq/klNľPu{]DkF59-TY| %[dtcxЄo=MŊ1I"C=&DWz$J""%ИNO0GHӧ+"1eRD'縬u ;j"2f#ɘh&Y;8D`IV9OJtX 5 )blT{E칁U*1nf6,'Ú|89t{m-K"B զN}%[Tjyĉ%r4ȆвGD]{ -p"r:j%&M3,1Ąw0Ie5݉:'&pI 47ni J:&voUP Nbw =hR~)e I"We3, Vν[:vYsR* $HO6*azbGƼhw$Jzq6һ[l9# Pu>Oϒ/Gz*jR(79.$Lr/1Ug 3-ֲ\~Ayz#XYKhVs\}lI&7`13c2΢996v@u2F($LOc{Ik2waU3k*~iBW1 Z},}:Jox3`vZ\(k9!KuH}Tr wW"SKh'lto?ˏdǖ ^vZgQ}ylR؈~62[o K>~`N3M jh\⨓9-b e'r{-(IY8(}El<12H%3&EzS5;D{3 Tl1m Lx4|2GQCwAv>s]8 ɕtZgazy_FXsa( Thܓg6har%?B͋f@KW L˖p9~i$0TD(}G*r:Ͷ OgM'+ ,xϭѮ 1u\wA N$ɦΘ_% C*J4v^&{*[83<< SF4n:IS K^Ґ3.9 THR4$긖 |3q lp~S:t2Y[l0;zr$wa!5`CigS zfKP^os FD hRI#oCF/QU¦͎B䧤= B505#HUizdCwc=b5 56.Ǵ"}# 2 /ZuB:a(ќQ9fF8Qmc]z%  ^щ}+vY)c^}+KLL]ИȈs:`:HkQx ɍNUT4/!TMݟy?\ZۓF!2]Haj]2F:9[:"˃MN*rX߲ @0Uw|<9V޳4<]rG/ `hcvliN0J(KoѺ_3qZDKQq״;Ɠ-㊩B{V(z3d|Cx-"&\d)#E/ 5FO%ND5yCD˛!̕ad0ԻEjyFܭmA#N*}"].\q۫7pcmȴ n/ "%J0}KV1[{,>Sg`C:.Ge߉BC8݅+H ߅b]\kH}*\o%Z^a?cd)6z eSo8Lo ܊0,I.cC.ļt-d۴CT,r6yL9E{RۑW{~J*0Tq C#x'{^)cd 7霻ϢBoOl41iNQH6qz\%t%XsGDo!S tK.L4fjB',Bh z]xZx*Cm6J2*7'p\-o&,z3t>apP CTS3:GyWU B_/Py_t~m'QCkHGj Q$"~T/BW_Ѵld@仯NR;=>64Tƣњ9aۂF~lS8E2jURE` ۼqLA @޺nD(J~,FVHlx-,?Vwk1b$[Q-e(+F觗5欂!|"nբآ{F֓6j܎eF>xvHtSdA> x2g.%+2r #1O?8WCmI&X.]Ze=nyՍeuWiReɛWOiqpUh%!0mi]߷?ŨW1<޿j0x?Y2p_V4n6ѼeÑHb䪠Dl;tWce(U{ˈzgAds ]K TV$Rf /Ɉ(;Xd!om=? [iR#VreO.%DR~#G9#p45 ߊâMŠ"[ Qڌ8R 28DF~+w#.@/QZu۠g%)ދ?O;CRS_eP! q1U\ѪށP5u4v󷄏V7 !UPCHg FO k$!GdGHkj2[kiK7Jel ճ*f͉b=Y㚥/݃tI.aC%z_+')5:J4*zbs5SZQЃJY XXϚcSx$0|6.B'k9tCit&;+'6*!#8úWalĺ-.b8#Zc.J_R3W%⣆Ck9Zg!'=[?e toHۚpfFV1Vk}e%t^UÛוlz18bP+{7JK}5jJ>k):Cc0,RT3xGVs2I> tF>}t?%\mS/Z>zaNk"xB^W'< ]kVEkp+xʖstO# tƋݰ3rɎG ̶7y| wQ k}lA.lASLDA"pr_ɓ@"t 5K uabqic2~&xuAbs5G޴ ~Cv :( dA~so$ׇq!ʉӑ +z5X÷onacGw7<,c0x8}Z{@ԥsh93)%3d\L/K/=  )<(0&ثFȾ#)b]jOou_#ieQ@SfӖUq"euJneY"t g M\ILDF,,xlHnwH׏MCzxjQֈ*Lަ V6;"J["~=Xmsr0 Ao5|^@Oڧ%^Ԙüx܋#f ~ ^RsfVjYpUsI§a:ք-|<VzjwºimUp+Qb97]d,a4Ѣ®́*wUmdfs3KxMm4(E3JwأC@SEP9+1Dt.۷dǾr3jN6(A4_i> endobj 257 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName /MBUGSM+CMTT10 /ItalicAngle 0 /StemV 69 /XHeight 431 /FontBBox [-4 -235 731 800] /Flags 4 /CharSet (/exclam/quotedbl/numbersign/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/L/M/N/O/P/Q/R/S/T/U/W/X/Y/Z/bracketleft/bracketright/underscore/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/braceright) /FontFile 258 0 R >> endobj 660 0 obj [525 525 525 0 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 0 525 525 525 525 525 525 525 525 525 525 0 525 525 525 525 525 0 525 0 525 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 0 525 ] endobj 659 0 obj << /Type /Encoding /Differences [ 0 /.notdef 33/exclam/quotedbl/numbersign 36/.notdef 38/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J 75/.notdef 76/L/M/N/O/P/Q/R/S/T/U 86/.notdef 87/W/X/Y/Z/bracketleft 92/.notdef 93/bracketright 94/.notdef 95/underscore 96/.notdef 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft 124/.notdef 125/braceright 126/.notdef] >> endobj 237 0 obj << /Length1 907 /Length2 2718 /Length3 532 /Length 3352 /Filter /FlateDecode >> stream xRy<{F8 Yp,3[} 0fسw$k# EKd˱=E3{<}]wJ[Xi>@S+&吐!H2HEA5 (!UՔ"@@zbȀW2IX"O@!q5X}=X~ Ds`"'LjAhϟ%GHCJh"A~HOGs} gߪH<?u"އBI) ?JLA4jDF(-')>-d@oeB#~1K/WM)"9zfT (á!KH mS{`3AxRʨW0TrQAYͣȉdFs{eǎ,,QO5[o&e}^w[l8ams}ѦѷpF;)Z˷ҵYaghsߖPFWK*[qg޹;C從<3^/3L+`ዎ! cgxy5PFI, !q7ȅ!:ɤL¨oH^锱?GLFSeO5"+<AUlIH؍J̳A1R;#B?4ƣc6V9|z<*h@cSG;\o/:`(;le^Ŋ̱?>W#u-5qvK_7xtHŞp)\3 _y'0{54e3n8lt4Q|Ȏ&,bٙaQz2am0޶pwwjLHKqNuZT@A^d ڲx3E`Vf#d -j2,%I{|@@Z~2>{ɢXjmטv#"cS1=kq`{S:Cu.6f B#_Kҽh5$[ KOT'׵pż";PgtU;x?; CJFmY/d{'DN/ b! FUNvX(9xt _ j\,r|j- ɓڗC}ǣ߻7Ί kг3hgJp¥W4Vm䩽z!ܝ}U6?Gw$ւUD!<뜧P>-BQ~XZKiLl\u-ԕZ륒 UḎ̢Ջp쑗1 FGDy00/g,`};h8dW]lwe(eڅ8ඥNo~.d`} 9(izCAf(k…k *˶IpuWGζN.k k_Fk c-k.i^*X㱰uqUGԨ9:>1qi?K.ɻ?F<;sA8AOf23)cM#w*nWh6k DɈh0n>s!'Q3ĿgQ6ѣUHZ|[wYhlyP}@9}-lx[fݲ^tZ@sl\g|8o*bI/2Wp|'.}ź#5L]sOkC"nC!^Í _=9/mu/+6X T}\mJ8j/9Bw2>^43kXLC>VITY,tYΗ;3]=T[7>m+~0Ѵ*ũ+)HK`eBCbQkX}-6Za^,o16~}dREkxw!.!mFdvMFtGy+k7^gȯC+U'w P:y|@]ep jMhŜOuwlr>K5.&1WDG!#&pY4|_ ܻ[BswGv&%#D|}b=y&Z҄L ̻t]1ci۽{%f?9M& ܶ5ԟ4  c d77=%)=ǐ6],%K@O/ FDS#lT#r#Sͩ͢^4FƳH2kLFs&EtS"OA # P8I"H7ǿRendstream endobj 238 0 obj << /Type /Font /Subtype /Type1 /Encoding 661 0 R /FirstChar 48 /LastChar 61 /Widths 662 0 R /BaseFont /PNKLCL+CMR8 /FontDescriptor 236 0 R >> endobj 236 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /PNKLCL+CMR8 /ItalicAngle 0 /StemV 76 /XHeight 431 /FontBBox [-36 -250 1070 750] /Flags 4 /CharSet (/zero/one/two/three/four/five/six/seven/eight/nine/equal) /FontFile 237 0 R >> endobj 662 0 obj [531 531 531 531 531 531 531 531 531 531 0 0 0 826 ] endobj 661 0 obj << /Type /Encoding /Differences [ 0 /.notdef 48/zero/one/two/three/four/five/six/seven/eight/nine 58/.notdef 61/equal 62/.notdef] >> endobj 226 0 obj << /Length1 1426 /Length2 9536 /Length3 532 /Length 10400 /Filter /FlateDecode >> stream xeX۶b)ݵ!\w'CR(RH.{_I~s199RUEb 8Jrlv :-$ r8H\v~~ GG qZ[Z$Jۃf  l\ dЀY]<q;;_3`g0 lDgg[L99X@6wuא,`[,iq-Y!ϫ]ohgqW;;e_[yw (APL?G\@vfv` ;2`sUk3+w`&ۃUAQ\]S߃ kMOG0쿙~n`ebfskK7<џ3q`٘qyx/E빲sX-V'Wsп\lVG`#HAADVV`B|rg+\g+?|r9{IuvXiHWhEӝ2Tok[ ߠ-I;Xp ofʦѻު%kL*qc'd*TqZd|d)Ni5w0 X:3bs0C}˫niNh9Vw0? $G?hzW6=FM]o2&Ufa|DqK(Pi#;-za 31CVsrk=ԗm,&z5䷠Εf^_&t>PSwL[ܯW{p݁ƚe3˱UlQk? ﶠiǴ'cdvzɷ)~* &SZgl >f#_魥wiuɇVv%璵ρ #oɺEVuœY ~nm7΅Ⱦm>iM<,t(%̱( AGxJo.ǬdQߍ Nlm2-UE2OhR֐S?3EXVV+Ut6kh55V Fn ܺ ͒*ߜ5`7g,;қi]Ŷ#^4+ pvOQa+? ɹ .Eby%C]#C76Exˆ=y'H'Ajy]phpJj%ptt (OLJAB2ݿk^~MJ1 }N+pB= oM. dhތ#yy|씴ǮU*?> muW,?!hi"Kl `Aprj0b`/$+GăLXp萸 6+&5uʈHկy$UwFf%zgdނi R)5<1:%#1[Z+T72ɼe;|KqIiX-$-Ʊܹ'طyԚ&3N D: тaBc'W(>=ƌB4o.ĚSu?,'I*۶S:[ a`4oGad*tԢY*0R⑽V3?u0MG"G=zB{"._=FMVβoMY8{UB;vV_z-o/n{ ctW<~GHX*[(Qm>zr^o\F ƕIJv$93:9T NiJ q*",[>=bKh+md0;u)i_EjuݫḐ.!wTpy2Ԁ}8=JY:fOK'kG[3,) ŷhN HؚW"JWB^0wX8yrg{T\iM3_`}RjcQ\n "au]m$TK9rpo^![ Ģ,;{IFH=`GՈ[!=Pa-sԴV ٭p}Bb$b=ccR D'!'؆Fhxb;d Jp?r2P?ͨ0Tqh}gI=;Mh= ~saj2h.ey+}&J;/XňJAwnf=Rj+w/PBk޾w*,b 7|>J0r~ɪRfڕ}EM4죭W(EKU-ouH-|5Њu$48oa^d YWe%,@1F!Ks)jZN4#`XWIMsjPAQlNZ@Ǩ^*WTV(Re^A渐>mW?AwJ&mʛ^/͊PYyu*H|M6g\Ʃ e;hR0iKLyQC9ڦ^Zo™X lj\׳) ]&æbݽ}VB`uٽW K.":7`ރOd@`T51Ɣ0*`7䓲Q[GamR]D+!3D<;A/'NZٕ+ߍ Y}1RܙRhAv:*Jo#'Yf!˛5٥C_̈M'Jcdq!bG^Pm)9PO@U *ёido?2v|T6&2`ESh#0{1Mk.D) _ȭ܅m |N!±C "f)qNh+<{/Ocyo~"ꋐtFG\!(kFGY&gS#u~Âs0rJKG`"[b="߁B˨/9aעo2e$UG#'Jڭ%/ڐ7ۍ2?| XQ] TE*$gq$HFkȅe@^񞫿1*ˤfὕx"ʓO`PMS)/0HaM֫@Chq5XrXe򲴮aXSŗӨ&sp- ߅Eի˓7$NIW(ӿ!9dr#X?%8S Fu`:݇YcH *3#h8̄YhUY'TܘO7#Rw#,ʫa{d)KjfM6jLK8MjiLlDrS.'w@^VB[ b  "ixHB[ ;J-#q_iS>ƒ7}cWU+y淝2s9gHst.cՒCvX!#2·HgK?imcBSP&A3hTc՘aj_oXZu~?ށ-U3!s:ǻFeY,o;{tF){u$"Y4z꛼U+iŹPK_) : v"M|$#=W'lJŃ7mzt F#N66GW1)yIQ㐞G7b'2WNrm#!E2R\ڜW@)18cm o?j-tj%WQ}_oقg0zbsU5C=sz~HANa}"C oƒ{6g-E v)ך e6ZM;#N"ZE_ͺ}^{}yL>.BBGqz5S.Ί6((f\/f"Ѩ 2OOҚҷqqGA=*d5{ԍy0Yri@Y觰 tSi9No]{cvaL4-_s3aǖ}m13MJ8 &w;Zdv^ZDSwa339P\ YZGljN 6Q|-wnBִcBDVv4|E"VNaErmdK(j}A]YRS1X[ܗ$*T͖ eTCQsN-C^Mٽt8"@@Yns!{~ۨF,5U_anɥ㤦8e+'|3{9>͸Z]GPcyLgR+7$g|cT沯gU_;0|Byp>FX5 % ~gNu 58#t& P6@íREb]N9 %1 ƿ_9vu9Kۍ oPY8w/*,|Ja*)Ð_"\{BLF6lkkP\|lDs`֪fOdPS*ĩ3:alT[ ڨеQxWSWG1t#]!qs[mGHe#ĺ  }w *6@j_$X<'[t i.Ar[Ob8T.ڭתdprtX^ `}x`wzU)[ fi5Ui8T Ǝ$QM~E=N ֕y6 '08j6yrDIU$Y_f$+{~` g c -Ȏ;;VNoR|m4[`On.B:Ɇpkwo"'l7xԄ_wb[MISBk,Ik6UFJ roiLhM_Vol/s|;"F`MZcҰvC*Q_BX(q3$Lը`vW3D5gHlb(k~ M\,}MӘn_/>P*9FN|b#VHZ&ދs4M"mI:_h 4ј(آgP`LX2;l,$ D@):$Oc`"!vpwX,5•1+rSMu9Z?D eϼ7ʸl4J2|m?' iir}޴q]WѷޅB;ʜ#Ehʵp1$ْ)U+lBЖe˚jw. ?MaOJžsXAu1 }s^٥fLD9l7E0v*K wwg}c}PKeߕ 2`F`hD2B%i-CW[9_v4p|Kh 8!Q "s ) c w sXmxdzԸ]#~&~z1yVY3Mm̊l55puymЎ>?F΃?ZH}\Cz̷ÿW:e ĴGur1߷ڟ('SXN 8j I#,,Oj_83#,XZ=>4w=z~ @`x忕ǹFu/1L|#,q4ۨ]%?mha吊}R M "G=Uey?şZfq$8RL9Z\,^gQ^YD;/AV%~NL=2cw6*w q婮A-[+Lt'(L w([IlU\ .d * N۲Ϥ`&Rh/ \_ȃ̪^{`|I(tD8-UyJˠ<1}]hXCn I0XETG̛(WNjvCdk>XkhVV&۹fn[hwpznǙJs;zMڠ}/HX5rnM{ٌ̳V5gxpp>|ԣ a!w?D)踎UfRi'N%&t[n_+Wz&@z46|lejDa2W+J%a+to3݉ՙXK>V+s"XdgKj%'$M$qʀe+ ˳x.+|x`^fW򕧒rNHc2Y,ΖG\c|XR.RMېMn5 7uķ,[ DN07:W ˘Η8jPÍNǺR%$l/@MgL [̕oz^Ս=e ]ɹD(sdLqIMV~= G?-W72 |&1M԰x_}BmTpe^"*5F6Ћ[Ci:[DP~|b5qRDYm8^^>/+c}zؿBZPِQ핮" 9ťԺ/(uD]B$߅ra=ڧ PJ1E$3I{S}Pl1:+ךQmV3@*%Ӿ82~\չdJB+}vYP&> endobj 225 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /KLARTY+CMTI10 /ItalicAngle -14.04 /StemV 68 /XHeight 431 /FontBBox [-163 -250 1146 969] /Flags 4 /CharSet (/fi/quoteright/parenleft/parenright/comma/hyphen/period/zero/seven/colon/A/C/E/L/O/P/S/T/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z) /FontFile 226 0 R >> endobj 664 0 obj [562 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 307 409 409 0 0 307 358 307 0 511 0 0 0 0 0 0 511 0 0 307 0 0 0 0 0 0 743 0 716 0 678 0 0 0 0 0 0 627 0 0 767 678 0 0 562 716 0 0 0 0 0 0 0 0 0 0 0 0 511 460 460 511 460 307 460 511 307 307 460 256 818 562 511 511 460 422 409 332 537 460 664 464 486 409 ] endobj 663 0 obj << /Type /Encoding /Differences [ 0 /.notdef 12/fi 13/.notdef 39/quoteright/parenleft/parenright 42/.notdef 44/comma/hyphen/period 47/.notdef 48/zero 49/.notdef 55/seven 56/.notdef 58/colon 59/.notdef 65/A 66/.notdef 67/C 68/.notdef 69/E 70/.notdef 76/L 77/.notdef 79/O/P 81/.notdef 83/S/T 85/.notdef 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z 123/.notdef] >> endobj 223 0 obj << /Length1 836 /Length2 1180 /Length3 532 /Length 1777 /Filter /FlateDecode >> stream xRiXSgl6V"r!%l e5REro•$.76A "XQAdZE0-V`q)fb,+\Ps9WǡEi&*`2CR_|\fsgX=Ӈck+wFڎ%;ۧ5b6Ok7|H+]|zk^͘tIF#)LECxP/VITZC{ipZk6^?ή27k)]5NgP[ٹg.dM4]E /50EwJM`Q׷̷u#&f4f:]#-8=}uɊrt!+v)Jّc>]Q^`>,-Ns7΀֚zO|ppp:m˸Vg^}H|!p̼k %%_<3qiz,ZRQA]򋾘(mO[lk2P* VnIlwgCMl]DlR_n?rr_M `uy&44dIT,ڿ1e1GC'2x%j xMzwXw$P:ܴI)oi}wuMowK=Zyx˗^32|4{Pc sDg<\Nb ''0]v endstream endobj 224 0 obj << /Type /Font /Subtype /Type1 /Encoding 665 0 R /FirstChar 0 /LastChar 103 /Widths 666 0 R /BaseFont /BFFQND+CMSY10 /FontDescriptor 222 0 R >> endobj 222 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 /FontName /BFFQND+CMSY10 /ItalicAngle -14.035 /StemV 85 /XHeight 431 /FontBBox [-29 -960 1116 775] /Flags 4 /CharSet (/minus/bullet/lessequal/braceleft/braceright) /FontFile 223 0 R >> endobj 666 0 obj [778 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 0 0 778 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 500 ] endobj 665 0 obj << /Type /Encoding /Differences [ 0 /minus 1/.notdef 15/bullet 16/.notdef 20/lessequal 21/.notdef 102/braceleft/braceright 104/.notdef] >> endobj 217 0 obj << /Length1 2101 /Length2 15543 /Length3 532 /Length 16681 /Filter /FlateDecode >> stream xctfݶpۮخضmVlN*mۮTl۶Tsήyn11ך%dD _ Ml21r *12210 ;8[ي8p2rr2>~XYX`=-̝ )N(hchad`K(klnbad`MlgdaAG(hmMNJ&N&&t0F΄&f0(IښW\MRҤ"HZ{\\ lIOa k`gclH(kglht6056!d9ɿ&[й)+Ȫ)מkLYY/fÀ8Zj3O!+ +#;;@p !'>v0l(`M/dddgaf;9ZF{! dؿ?08Ze 6p'՟ O`kdgcc'JHoaonb'/q ?,8Y8Vih'Xɿ`glh׌m'O-\uf_ 7FTm-gv]OM\ 5C2PCC*?X,^\E\dE\M?ՕTWCzPOi8`톎FV&qK?C9 naNy^ ?sf! !  M NV!@c`eG!_ V!/X9<!/X+׿`r V!/XF&Ϳc+AH+0bgw8 98}c#|sP21q71Y]3Lm^+Z8SN ,d's6h%غdLځzAWe*SDuC\ǑQg;]ǡ=s9bg+xyf`y1PkSof0XjhH93RCyKRRte(T] ʯBgXd.f=j4cP$ρZLB3eG#5(1ɠٞآz7Sa״]Ddl[%z4zER+ 7 vUPg)/]҉~;ވj:TZD$Z3hY؂0I^.>%N0H,| axNs0se0cnwbP%PR {p?GZk-ssZ0-)T(CRg'VБOO"QWQ1( vJ?p~䐅{y*"u,ʕul6[DYsSD \Yq@N,'وblr @ej~">StAn/Wi>apv!V90A:" u:e>F*1th:Tҿ>+N9+;PDw. G8Ҩ7 c{kӣyS-ׇuNFK!Cmz'3O%Xmw^QC B~{lIpk2sYt"d2_/p|gv~,ַe]Eҥ^Q Jd&+Dc=di~ٗUQ]FzPaCM"{p *bܮb_ȋ|gefW|i >rQȽά!,,&q ϪY9, f 4L,,)=дyS!rY,УvQC-u<\ڽ:ƔvW{OCK]=Хt+\/Q0C=ȹ} BgZv `X >Lm5O+?sk0gTDῇmq]j-궍>@Y@j^$*@ְ~ ;Ofk%F=I  u85^>L߯@Hr cOr;Ak7IY _07_AW`9C8R\0׏/s eDMbݿy {'r1OoݗC4o'%#wC:@i3iM)P>3~,EDY ߮C ՈJڌ$`ـ ]|]3Jq\o8Fo{qAFA%){I |~aJMD]@HbdhSDA*yWtqg|ҙZh|uޠehδ4OhPw*dQmNI6؃'9vlVG ;7]>_@*rJヤ_i5ΗlO"mk²J6h*~4u" {YwI!ޠ!Hz jai=yM 5]ם T ,m AsZ"u9ì\ZkH{̴멀b86XkeXr8cg59]-{_դ;?jTi'\ԀۘK(7q2QH~h[ P+g@$퓽 ] ӯfAlMYҴ|Fr{<_wu!+^I,mϴ'4+:L΋&R2x~AEqL%KP64 kt MX9`͛rqZkzrȵ~˛hX%m"%auw7o$&\n>{qq՟pWSZܯio:~fX0FTiW`r@$[Dm{5W$T=pO@^|?As*D\ϻigSx}`8푑1#$XqMUK0:%E 9Z9$AoMAEf\Kә'lHwTGwGMi:Γ3? ܠ{ X`)uP9  zdK= õA~ y6}B3}BkIަU:"&. F_àe#Q )A!Qz]yW؈bI#:J Ei뎶&iTv B-F#h9ꨎΗI N̬+IqwT sY۩y))Kk0KˠQzc ~(<3JB&ᰖ|"JW?|mIw!d]4 (_d [/:7Х_évl0ۡ" )@|'eQ:֋xǞo̞|Mq<2AƮRWD#n.fquG&&9˧mZrvcP}a} @j$5XFrW` DnW})NF9UFEυ?s `\)J _,&6E+6ۭ4ʽf5*-̼~? \Z濚_m)oa&BN]N O="`PJ r vg[*Dc7ja)K;xZZiik?/u)H!Pr*0b"U>* [s~}No54X4mFt8s3ђtT(ฌ2o.nzx%Wceކx&9gUL1cljY\(i5KTZpvLE؅_pr' S%q Ĥ;/F1m."B㵣xy3BȔ0`0d&r_U@|ͳ>Wk4xtf.ysy%NUW ݘ,,a {Ae\ɒTfMkː@;>{ baėڰds.&"Ch7%[SW)"{ʽKL-I.iqr\V2=2<;c[(|kg0_pH&A>KAAR'_t2jبg-:ey ޿R2ܵ&j/(' dCRC&B ƶ`ZUAzlk`h {{"gQv֙eziL%9O 7MN9ۆE.[mc෪ ۙLGP6`#_0tԜzo.5My/*$!Qu@(މI`˥w!$Rپ<̵ѳm ",'߀GzȃQ 1x\AVF`cQ3fo#$NLM)G1phI|lD>}e_n]9Yf/R!/˞p-2UC^vXtcH;Ƹ< " 2=әW ޣD;OJ<1H;TDKjCSWNe@YuSix,6QZ]"zɯ%YӼfw\>L#e/V# @+H:ZLFiNZѿgxrr{igc2ǡ V 6meh; ДZ4Ɠ0_vv!+o?nX/[ C+ hk娊2J`͒{dk`ut%#GfqBXOΝYCx!L8է$B-ͨb0*XR\ښ a+7A '}ڈ8Y tEp2U&Y$R2wdLƫ(tajxS[^FnITΐX(۾DvmX ؃"4sg/Lz7aGqv0شLrӍ*\GKNI ~~zO玱hsyb5;&uvDhGَў PmlFc][HHZp;7.q$Vq)m)N/Uj)=g~ [wJ(F4 . ɌȠu|B{5Q11->5ږļtk|frsN}l'vu\/w!XLO@]a4 EzM]YG\y~ߺyʔДhi-.:+0uA-DjruC߃mx[HFf)X$zUX!\-WL]0>6ѻł|CU:-!J!Ӛow 8}PܙwUgȎI&^3K|r`c &V,[^JP$"{qAV⻼)!y)儧X@uoxgNTUX{q鮀r3n̹tyȏN Qϫ|CT5Cբ@7$ź_&%U ^T$'ݿ{gʖ0'U՚Y A/ Aw]#wCj{¢Qcq ؉GDc[%d'7V$ƳpA?]JTd&j?ZHIRv{9Y|g=`Ţb0AHqC(#[ZT0/xYG]#wDt nI6Ӗuѿ6$P1d.:[|Ow%ѓ\#8`q&R㏞ƵfuDRe9\q)3xӇ䌸aؑLpjnTCkLAQ"~cz {ղҏ+E{4(jq;h53y#^'vj9(uνC?xd;Q4HEe`߆_RiB.ˣFL !FBlpJd=: \틐rzs #ϧxa/8 ( ‰T2y_d>VE'^o{pq w5ȫ_8$ɩd%;1s!SK_i|rW0<Gj9cTrUN*")&7JG3)VǴ[X>0ˑ-tח&t䪿jlVER0Tr[yH65>y^pfSeA2agGvscQ↖`9v&Iٙ<k,绞DYۦ JMУQsF#JÓ7΁tzreNɥem5hj sS*5 6->*V(`w05YSXf1GdJV{#a2tndK1~W`ټʬ;:f魟L&(}Dbcn pBAqDuX2l: >=yYA$0vhQ, RS氐i;҃Npވg8R(G[pqr®1(L 75lV}gL=s=eč+zAi0kz7- <OڳCd=W|*k|B:ҷ؋RÝ2w?+]020cc%E3ѐg,>9yҮQ/P zӁ 6@\#SQ*xW$ /w ~|S1Z"#rIξ MM{AVau9r'qv2<^atɬاNx1xbq!Ħ5f<5:uW_@?|CFo+N=Ǒ)E?< [~g& ۹ӸAj(€ Uj3+ ط [43 Ug\N>QwT_b;$}l"klZ2,k}lOh'`\ͷuq I'jyB3SՄg1+#?mQt[YxvL^ 甲c!^%G3Μn>ugs̜\J*]~^\V7~K ؘ\Yn&1T /&ovj9Ͽ=} S+mT Il,v`G&L3wȚ%='xܲEQo DR Lޯ Uhm* ѕe,6ߺg`S5ֹ *K bq[Urs:ݱ< & 4 І nyeQNS StC7PfKL}Lh\T{Ũw 38>kB!V8KoMA/+-Zf6gy];MC*Uo 8^*R_,qe )]]ё{]Pb~DAY(~CdjcSHyzJzGt慢kͣHRmʼn~.)OiӲaE:WɡL0҃pݖ: 9:gY5F5=M`h z`=1yGW)ݠ %zBJi.oۆF!Q8,9cZ..ebC/c;mk+/ I{0E/Ay^0 .|ʾٺdqmrҵ~?rF51i zg L z!5qD[8Թ|nwN1G#gEp41DkIP9rf%:E*Ů_*2пEmFҥFj$eف6NlonˍlX~/.^P;5hH>9а ICA!ϐ]&tSZ@5CrS,wILF(ؕ!: #|fI.LrYagiM]5Oߐ< _x/Rs ޿坉&CQrF޸1(+N*Qʖ?#~~ 4'u<"Fp;a^?I-3xvXaZ^ 5ZTNGlk9+0 *b}qAk}؟InwijctGnb1ukV!ƮQt~d˧p$UNb"+.[J^+Vq MNc{, r'/aĆ{3"3i0囇߹$ i{??Pm5Vgl!ș|MWdCzpwSWkG5x)txAS8J~LUwz#Jꄬ_xñױBb7k08vaq X5iA3*e)pBs2m[I'y¼/c*WT*,耠ݩC|Ɗ&o%?E}`]:$Ay|Fmh%='Cz4 ;BvmkKi[6_XWUHH1}m"yvr/M"b=ΥN3jӃ,o,o:ּ\'w[+1 !%HK"<9@39-{:]?v\y1Lܕs9 |+,ix!.TuG h}U; [g2a.)- ]ltՔ=L_- PQ6-oE"܀Ĝ$7AϢ\Gq DlJ~<}N*xm ӳ]g]H ia˙TW~/\3su'=OZ Eyy~ր\wmU] g,7cYBR F{9>pL)*8ZBԽo! ԭ"JZnڃ~td#r,.ult*,i[F9$ZjP kt_d?_O5d;`$iT/X*M>plV+|XU2vcGaWI'Ua+:si joӉPꨡעe )J TO5Y\1{ ^{ r&xIGyd Ec ;'7^T~b@qU~ElxBuO6dµ=߀W̴j 5Ja}#5-i5 e퉻=Qp n/2QQ]:KÁ V^G&!?I2k :bVfMgM:[j1lR!֪*^)Aͫb.|SaS+o#2Uw&PӒ_&ٔz#޿Q}+4 GzCrX3f7ѫ vOioH(hC9vܽ=ﱁJi_HR )O/u8頻<8ޚ/ ghu`8qo omr^d9OfFm밊8vIⱒ͍S(2رWe6*jm)]9f$edDNR?:o2v;"Z Ś9Ԅ_d8ůb&*Wxm @ C*ӘD V(0+oXȤso@Qd{. J]4 vE⣸pR*Om5˩{ ϑ,@4}}lGwJgp;!2m]4s } !$2yr ׂ]58RLLٕHe)4߁Oj92a0@cUSlja/-kղz+| E_PIn,U2M.ѢqiYiW2ȍ7UfԿIW^ Q󘼿ֻG mĢ%Ԫg<#;uM`1@hS!&g8T?/b-vIE{Q ֚enznI L3~Uow9?@B2A& %^[wK75E#TcBJW1 _dv[& n(rS/5wO(V+uϸj7`Z5"׊uO0\ p'k/J}dR멕9`grm\+s/.i?xTVi֖x@2P6Aμ-Őy(vSwCorݥF^v$*KF0|^'伵XRgzFTm]l)EưSnEəg0 ̣@_)߻۹Yje xJkq(ۨu)I!v ;(2ҋ1 Ijs_A֮ȗ 8U[\xsGl;(|a4̣WkJlI,7R 9xa 7Pqpi V:hX! a`Yo7J~pj,t4wr"O֟pawZ9JpM3lnx݅%F3iK. NP[Ec%wNN=#@_DC=͑NS^n7' e&6-"bJ 59-nVޡdB-R Q۷`pEٙt e4~qWC3㛿Y9~MB˦$N^DVcJ'Fs-p=LLy͏>-9%kDu9M!)2oNs%[%QM1N;Wv[ٴ&xgxܘ`ޅً-ep@F"AZ\_,]>u~QTc$D5y٥@5HunN~+22vdC 9MLT,M`~wzi ^vvR̝H[5|GQ>K+Qr@˃`ZgBM JkŜkb&ȜPL iƙ;R^h8fD}qnjӆ/'9.%BKbг[#x^dhq×D4XE*̉ O(StRp݀8&)hx >p_6ѻv)TQWKduHEչJy'۴g;nNoLFNZCu<2?"K#Vendstream endobj 218 0 obj << /Type /Font /Subtype /Type1 /Encoding 667 0 R /FirstChar 11 /LastChar 124 /Widths 668 0 R /BaseFont /SLMVQG+CMR10 /FontDescriptor 216 0 R >> endobj 216 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /SLMVQG+CMR10 /ItalicAngle 0 /StemV 69 /XHeight 431 /FontBBox [-251 -250 1009 969] /Flags 4 /CharSet (/ff/fi/fl/ffi/quotedblright/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/equal/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/W/X/Y/Z/bracketleft/quotedblleft/bracketright/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash) /FontFile 217 0 R >> endobj 668 0 obj [583 556 556 833 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 833 778 278 389 389 500 778 278 333 278 500 500 500 500 500 500 500 500 500 500 500 278 278 0 778 0 0 0 750 708 722 764 681 653 785 750 361 514 778 625 917 750 778 681 0 736 556 722 750 0 1028 750 750 611 278 500 278 0 0 0 500 556 444 556 444 306 500 556 278 306 528 278 833 556 500 556 528 392 394 389 556 528 722 528 528 444 500 1000 ] endobj 667 0 obj << /Type /Encoding /Differences [ 0 /.notdef 11/ff/fi/fl/ffi 15/.notdef 34/quotedblright 35/.notdef 37/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon 60/.notdef 61/equal 62/.notdef 65/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P 81/.notdef 82/R/S/T/U 86/.notdef 87/W/X/Y/Z/bracketleft/quotedblleft/bracketright 94/.notdef 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/endash/emdash 125/.notdef] >> endobj 214 0 obj << /Length1 1603 /Length2 9333 /Length3 532 /Length 10265 /Filter /FlateDecode >> stream xeX۶C)Z[q)Pݥ8"9Ykڳ{?&_scgfRBGVA6'VhH91's';W[ u[8$JYA&F6%#G 51Xb`0@5hʊ08 T٘A| :{h5`d@-BlnS*2:a?K;F{Jkv #1g_!%#h٘@ W*`fvژ6&EU#?e9~3t: W;+;;4!&ec1@/ z2lL+1  bb3lvNͿ6h; `nF#6w=w<6G<Pe_=8? 5t+tVl"Ԫ O# -#%toM!>hҿ ڞov" ʿ CTt\j MPmezƿ gqCM@hO?BP  tƠ?jPֿjڀP T;PN Ԇ737[B\=,s{D'{{077 4A]Z&5xKM"07(vʹ,‚ GjRq1 py qk|7&}g釳TfT%[ֆCX鵯%:9 H+0zui|ҩ`OA5t\jv%!ܟV]?ïNx[~Bnb^>9CΎ{g:F8 cK>fe-lct=yD,kG/K_f3uTKeB0@a-01t>mys 2!BGu3Q-dtj:J4Fgy. NJ:rj=K.l*Uo;,rk _Qy-c$c2D -V޵2(ފ~ rQR$wW[n "t8N}4Za,fyok˪'9> g+.8毱|PB@Ԙ&&YswV'+$ DKű ҍLc}fd3|ڜT9]x~V$e0 u&ƚa10RG}ktQp{M2ÚZb|Z8`Ȣ҆97=c:hf@0b7-׍Wj S ](Gg٠CQ4(0CNUm~7sB`@bͱR`H|' $U ޵kE joWAo?8L )tXji6nqkբQ{#,QuGL$ D"wp (dJI'u 'HkniKs̪b4Mԩjڂ_7͎f-j긼$`*eC"{FCg2mT-\\N"Kdz\qb'mV2>ͧ\‹I7AH+>3y {vG¶gpTjJ+pǚn 0b&?vr~|cze]})MYy Z?|ncOKKv(=9^8W@E9IA+j9elvݦ>RWdV=NnJa$J%gqƾAX~sg,l[;컙"?%[Nhe7|<5I?e"iw.z",ϣ4W뗾Ԭco>:&X}CT%\mwNIp: G<{(0h4A<|й+rɵC}匹̡|~N,pkF5O{GbjCUbi`AC|kLj-UYB2v{Bl[X4$S,{>*{e8`G&I!f"Ub/gyfW*[SJ_/Fs"S1Sr_|VqW]d? o0 a:gN!s4O@a.]lA+0G=CN[B@0APO;6LMefGj NS*<rK: J%zn~HH-֕e}s/:Ěmi ,57[2ܢ(c lR cY\z2\18ue ~Y"pi ΝեqXvGoyxacaŽŬj.=X|N`@-PIQH݄w*0SЍzNqZQ 5ݏxi!k%dq0XR[|ɖVBXcI+ ͎mGBɓu)vO'FW3xFcshidEAD1i)U' l%VG'3F ݂*jAB)7w:5}qb]DUw 0c쬶(F{altUok"rZ#pl#g"( Žw#H:Fĕ]~:ja>%fyZ( c1-ފ,dhSy7gFp[,EY .3 m,C;ĞwI9. D!pѻwAKݤ'Ɖ<0Ǡ~ =L(+.uiBlj7dos "uU123J + 92K'M[/ʠp0Waɦd<7B>)1Is\t 8Ee^RtfvYOAՅV >L=h:6Xю/g&(ӧd K\G9sJ׀cAdo>֡M-xZ8QR7?'ub%m <Զz/…*os?VR1q˖w[V$ }ہaFՐtM9k{D[e`p Jws)7-((p_Al|x,dӚG]_ل$sGMzٹ'p7g.A^*cBKeQo RQ2o^LvsxydGWSW ާ"R; {K~ >Sq!ҍH(ɋcR+71o7_H5еr|4z q´>2Cn0YQZ9G|dHadZzd7\"&3:b (; -dB%_(cG"4A=jdHU@iL:u5@iF1q_J&q:=΋5UHl^ٵffN_xʹպP̲t2DrU=Eaf-Vf4ف;)_EaŌfp {sAN qbrnʼtmM2_ VV$@blU%?RI>W,Wc~n>~ I ur]Ȯ5\'}G0Kz١G]7ˮw;_2RMچy]fAwqjE$-їxOuy2)YNLi5Q{;}:&r!p*bdo[ޡaXZSUJ?D?3+`WoBCɆ}}KUGMjVXJ aXA;1-s$#!fglN ݢ[g/Ky{a*@]5ӽRmt!vltg:3֛jYpOpqyaF#U%-t,eOq ~ixk3Xwv{[iuAb͘xYnrv DNzΙiEŅS0&O2YQh8Bb~fEİ+^i!'(1?媼Sr\t}gkF"4EY,Uh3dV=sLf3qm dV@HldN}(uhu5b@rYWI_4.ɇmzb AR΄l/+|zse cp[b7o>aKi0uN6p˟t[t>,*k_*iU]ξ F[E׆k;4syN( %ªޒm[ȃ9< ;ml6ӒbrgJ"-A;?X!/kZf =­K}S LT˺'U̾lUq/RjY15;kR56άyUJފ5FXZDivCЍl>%FQ)*uڧQ *Z & z2nNw6]-B[זv[T*&P71A[kARs;i=KW彗MKr~ZD׈_E=}7JAf m;X'`}4{D6(rL8vpl*O%9/si˸ a:0){1|cx[(YW!t㻪הVW ~2\XPJi'3\oWq撈Vڠ.vr \.&*k%ES58I4 ё zce"RC).nʹ htTdD!'+WѶIa8bQU?zSgB2tv3ñeDVdw-PǜzcxM;&C,)zN[Xzt O&f|S6 =K#uq'8i%:ȢY3ZԛҕY%2I^5xƙk^fg觿QV*UŔdPYՄ^5: @Mv]y^L\ }v2Y pdPM@ F%q#h?}5z$8^+5xE/i؇A9dA-}DwոFmP~MhOj5曈f f }*pUxo|pGg[s{mNNŐ{T\\S=0gxSx7Itb@"#J}-:] F)yl;l0+zd*[ͨkCla,oQv Sqpᯟܐ2%D~gF/M{*C&h: a`#5w|Cu4aӺ5ִSy%^a^9=1;užP؞Ui?RVKw4#Ihi*G azmѶC+1Q7(]g_4IFiNJN6yf'Rbn?Wn\D 7ڠ'zJV+S1 !*٣ oYCg')+1aKjqԙ34T[MZD%nxChɪ#QN@DYFxHy~% GUhC^Wdj/'O̻-#\Kf5M9j-Zap9_$X(+s.54b$Qը1Ky5,lfAGnOdvԄ*qk 9EqRvU2#w94鶥7/+ E"K}a;ݽ2`*MھS9ڗ&=W]o'2^NO5\Zh{?sh -bO#zH!BoꇥtEbrtX!Z>o o6lwo]WZ!+dWD#=7x7V "gW=>9TN|pNX_xW-@IQ 3.<ŋ.0[P$DY+I|pu`{BkE5ǞO)ܾ'ԥ[e'GbriƋGA{Iï} Ugօ%ϲfث(CőW sW=|44!8JMlڱΦm=vObJ:,*q5Nϕztx6"X6={΍즳Z{ݮ`lǀux%-a<{W:N_~lYf^9^B~l~hM?8igCY X qPGf[G1ܿ$ף q_J9G.̉;fLl(KB(`;BP endstream endobj 215 0 obj << /Type /Font /Subtype /Type1 /Encoding 669 0 R /FirstChar 12 /LastChar 121 /Widths 670 0 R /BaseFont /XTRALX+CMBX12 /FontDescriptor 213 0 R >> endobj 213 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 /FontName /XTRALX+CMBX12 /ItalicAngle 0 /StemV 109 /XHeight 444 /FontBBox [-53 -251 1139 750] /Flags 4 /CharSet (/fi/quoteright/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/A/B/C/D/E/F/G/I/L/M/N/O/P/R/S/T/W/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/r/s/t/u/v/w/x/y) /FontFile 214 0 R >> endobj 670 0 obj [625 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 312 0 0 0 0 312 375 312 562 562 562 562 562 562 562 562 562 562 562 312 0 0 0 0 0 0 850 800 812 862 738 707 884 0 419 0 0 676 1067 880 845 769 0 839 625 782 0 0 1162 0 0 0 0 0 0 0 0 0 547 625 500 625 513 344 562 625 312 0 594 312 937 625 562 625 0 459 444 437 625 594 812 594 594 ] endobj 669 0 obj << /Type /Encoding /Differences [ 0 /.notdef 12/fi 13/.notdef 39/quoteright 40/.notdef 44/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon 59/.notdef 65/A/B/C/D/E/F/G 72/.notdef 73/I 74/.notdef 76/L/M/N/O/P 81/.notdef 82/R/S/T 85/.notdef 87/W 88/.notdef 97/a/b/c/d/e/f/g/h/i 106/.notdef 107/k/l/m/n/o/p 113/.notdef 114/r/s/t/u/v/w/x/y 122/.notdef] >> endobj 211 0 obj << /Length1 1109 /Length2 4903 /Length3 532 /Length 5620 /Filter /FlateDecode >> stream xe\rA@`fNaEkF:TPPRn=uK/y?{7wN6]~9{-T % Z`AXDɩB`" * KHrގA,*)$. !( 0G'/ϯ"1 Z/'F 0@^9WWO> {R; b"=1<E{`u j#0'?L[\UK!4  n^P$@ aE]jۛ﬚f'wt@`0?. qmsnY>B`p/CTߌ9$`BVC@H?f30$`p{1 #0-̙H_), ! G(O@zb &0jITo8QMMHcA_ ?aJ@ ?c7b bz Ę1R> Ƥoĸ #"`8@Ly#P_$f0̮B~P;OS;'Ι!J#U7ےzƟϤp}^Ãwmz^CEv3;HoHyGr՚ZN@~;I&YW feź܊ذz-|{s*EEɳ<*}So8GߛCt{S]YZMZ?NN;M:AU ߎ/M8>jJ΂OK*sNԜ"xn"CzZƇѣZ3EލAձCBA;t/gjܧȋ9Xǥn [4ޘ)sSn ƑZXUQ_LҒڂGNr${)zw${!''MfQtuQ#U?jҜeЫ&mcXV6}w͒,4kK_#]7|5rz4:$9sד!\2f8~+vղޢoWfb?Cl)~Ha62,A1cS.ID||o._t?9쫇n1s⠖Ј{}DCvb\0?S^ (/0ەV|66Ѽq2Tnu#R!-"fUmQ%eicM&{?;& EɆ"6ku![ާ'8'L݀WD9:h4˧ljR"z?m5nyU%B!817-2 G+ۃ'FBm?SPr ʅv(p!r5u ˏD&4HG18qM Y2eWPE ϖ78C3,dJXV=TS.KGW'_@„ޟwBcw )Ԣ}mm:'^<'2MC3Qj%0gБ;i躻eq/#yyz/$/ G52ܭRy/Ry [UY]\+"߯x!q_A[7ԵfX&)\mmJNy&fT03EV=5zݶ[H0MbZAi\3F;k/ TVyyyi:T_Zq9=0Tn#480(q֑ѭtdy1"XϏ'6J k7l_e O6Ybs!q& Lcbf~UW00lJ)| =b[cߝ9qWn׹. MemAyu=<͙6d2Wcz1yo﵄sCGUcNr·wK՛5n9}ߋ&4d>ߙ\!Hx1S6΢wop^ zlCmHVҫmi&2dnu'II&噦tbEˉ"#(J)/v~`#z0]ǖÇti qEhG1`Q :ϫ=#mnm䛨%[lkrKB c|a"Xg~$Yxq_海e>S7 w]wyRz[H.^oJݳXN9evK. FCMBAlf憯W Ote,@7rDYȳ7,ivM$|>pqZg]^Ӝ/;a[*LcԡA5}Z@{7I+W5. 6i~H(Q ^NF&@sʏ͌ʭ!=^C^Z//EGo^[(ecETV93ImkiߚTX=Pɾ- LH= e5:tr$wd5k,|WOE#]q0:4!)7=T֗/nTb e~m6,l&JϳrѯF J$5xݳi6j3=AJ&-[:<yU5lwA-΋e l6JS!EŴў{ l5֊0v #Pǝ+O^i{ E4;ԯUѨⰤᇗ;OI_QΝ;5a}䮯VA}ŏ-MUڵic.y]W\&47sL .mq%:@k,&uR0rVnWvZŎ۴hdLIU45 {. j6S|Ny2@J@OJu`֥qUD@xHQC:>/e׭~6z+_ï)̧y@"O[}c.)lfI]sqD[F%Xv3|b9WIpMs-j$V+2]s$0l8^A9.3qni[8TmtoOg3.\J6%bPX)PaZ~Su^MBZaw/%`! k2s!KGk\гOZT SH8w2QvXn&v9YߠG4i=Ƽ_*iD%mTYԚx}N[d-Xs.Kq 9A27Z9YWY4q=U#T9[cY;E.S/FRLEkj×W-Z`> endobj 210 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /YITBRP+CMR12 /ItalicAngle 0 /StemV 65 /XHeight 431 /FontBBox [-34 -251 988 750] /Flags 4 /CharSet (/comma/zero/two/nine/B/C/D/E/G/J/L/P/a/c/d/e/h/i/l/p/r/s/u/v/w/y) /FontFile 211 0 R >> endobj 672 0 obj [272 0 0 0 490 0 490 0 0 0 0 0 0 490 0 0 0 0 0 0 0 0 693 707 748 666 0 768 0 0 503 0 612 0 0 0 666 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 490 0 435 544 435 0 0 544 272 0 0 272 0 0 0 544 0 381 386 0 544 517 707 0 517 ] endobj 671 0 obj << /Type /Encoding /Differences [ 0 /.notdef 44/comma 45/.notdef 48/zero 49/.notdef 50/two 51/.notdef 57/nine 58/.notdef 66/B/C/D/E 70/.notdef 71/G 72/.notdef 74/J 75/.notdef 76/L 77/.notdef 80/P 81/.notdef 97/a 98/.notdef 99/c/d/e 102/.notdef 104/h/i 106/.notdef 108/l 109/.notdef 112/p 113/.notdef 114/r/s 116/.notdef 117/u/v/w 120/.notdef 121/y 122/.notdef] >> endobj 208 0 obj << /Length1 978 /Length2 3628 /Length3 532 /Length 4298 /Filter /FlateDecode >> stream xg\SAE4(Jo ){5@CiJPJ)ROtOw?3>kf5$&J%@E T B@||jxaD,* @%eŤea >@ G;:5ER+ G` JѰG`k8{4# `0E@=QHQ D&:HnUbL XCD!(?h,e!$$Q6B@c(oM1 ∔#'9NqIF 3WH㰨,D'<VMR 3M0l( FM{z`H9`?PcF(c@q%095UU 2QX2((74< vN~J]@#D2ư.h(צ.4QfSD?G3wkpխ,s,f ӎP5Z{V4KJYh`BxL>t'{M;6t9D*Nv dOr`drb4,JVm}8aw;`9}j 9rW0bIˆY^9ӞlRR6e%!q`gֳcp^2椿Qd Z |$3^F'i[7Q/it<5Q5Jtun.+kࢮܖLp^5M|H o^9W07T}Je# !&*&5Y/{5jY<4d%@ozH0¢qL5ZOMb=?i4#x+lx7a&Q%lk-~͞'gQ~>3A{ K׏1;Nn?, FҬ#l;9]fTR#Θl1/J2޶:wޛ} 3x5V*iJ¤'@b%F&GL~7>Bbd#deG|ٟiݍPGcr^DNs)Hqn +v1I^UvIcN. 2\ VU]Z4<8晡k?W'4Y~b1=`XlZ=)RD Z^`$ dC;sp<#uJף4,"|HfO~8/A\| s#=8Ul}`^S Џ3٫{۾0ّ&(6Vt<ǩG=*7{ i+Co61Z)l缗 2+/y BF?Lv_ky &+(wŬHxkۍg/nMedE3ϟDt8S@MpwyWWlGY?:`qN7X୵/wK(75!Uͣ":*ju:*RF_2^}W=>m@ju=r\{#XfL q֗ pʯd=#1 -;O5.mKab"3rfl|sίspƑ eep|JUa_?]?J:xfѳwc~tR`=yV;1t9D#jLG_1 e~F^Ѳte l rk^rφi8;Fz@O5M3X<Cw'^rvor4}z)P}F;af!{9!c51!rOww64.*UHbzLuƩ(N[mAHAd+*5ӟ%´{/0ܾ[%sYfsN[*&l5LrUϲ]UYwC5xy z :[ۍJu$/I%٥>@sdC9[[& v_Z4mXz"rtʑA{I§OL5 v`3 E_>E?słr39:a \oeL^;ߗz0 Y}0]pwsoO!g,3mU{ŏwyf]字Qq]jU_s*,NYtչO<׋sq) OB,eG3}\r#_΅ #boNE۔I+h'p3 V/T ;rPIh;ً@)(T\DJ"e9M~6I2H橖aɠսv97zyDyGM;iU ^s}3)yZbq/l2?Tz<ӱɭbC@`jD(3ݑ@i*>=Թyb#R"QJ5je,Oʑnpzoa)n ?1!*YFcu6$7^ >*LNOq%( G pg(#:YxԬp}n0i ]mZZ>64Kod$$8w-+Ko~e?\z;p 樄yKHMOm% s-:R{Ecߕan*#w3Opcu gU-?)[k ޮR3;L>HKAjB wi/ X,jx=ug,V̼C3Dy"eWot:-NMx43|_)myWߗ5Q jJy ZDoY?zIVMB'Y"[!a'可ʇ x~?!`A!D+> endobj 207 0 obj << /Ascent 694 /CapHeight 683 /Descent -195 /FontName /OKKAKG+CMR17 /ItalicAngle 0 /StemV 53 /XHeight 430 /FontBBox [-33 -250 945 749] /Flags 4 /CharSet (/period/one/three/C/L/M/R/a/c/e/f/g/l/n/r/s/u) /FontFile 208 0 R >> endobj 674 0 obj [250 0 0 459 0 459 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 668 0 0 0 0 0 0 0 0 576 850 0 0 0 0 680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 459 0 406 0 406 276 459 0 0 0 0 250 0 511 0 0 0 354 359 0 511 ] endobj 673 0 obj << /Type /Encoding /Differences [ 0 /.notdef 46/period 47/.notdef 49/one 50/.notdef 51/three 52/.notdef 67/C 68/.notdef 76/L/M 78/.notdef 82/R 83/.notdef 97/a 98/.notdef 99/c 100/.notdef 101/e/f/g 104/.notdef 108/l 109/.notdef 110/n 111/.notdef 114/r/s 116/.notdef 117/u 118/.notdef] >> endobj 228 0 obj << /Type /Pages /Count 6 /Parent 675 0 R /Kids [202 0 R 232 0 R 270 0 R 281 0 R 292 0 R 301 0 R] >> endobj 316 0 obj << /Type /Pages /Count 6 /Parent 675 0 R /Kids [310 0 R 318 0 R 323 0 R 328 0 R 335 0 R 343 0 R] >> endobj 365 0 obj << /Type /Pages /Count 6 /Parent 675 0 R /Kids [359 0 R 367 0 R 372 0 R 384 0 R 392 0 R 400 0 R] >> endobj 411 0 obj << /Type /Pages /Count 6 /Parent 675 0 R /Kids [407 0 R 413 0 R 421 0 R 426 0 R 430 0 R 445 0 R] >> endobj 470 0 obj << /Type /Pages /Count 6 /Parent 675 0 R /Kids [454 0 R 472 0 R 482 0 R 487 0 R 496 0 R 502 0 R] >> endobj 516 0 obj << /Type /Pages /Count 6 /Parent 675 0 R /Kids [513 0 R 518 0 R 524 0 R 535 0 R 540 0 R 557 0 R] >> endobj 584 0 obj << /Type /Pages /Count 6 /Parent 676 0 R /Kids [572 0 R 586 0 R 597 0 R 601 0 R 605 0 R 609 0 R] >> endobj 616 0 obj << /Type /Pages /Count 4 /Parent 676 0 R /Kids [613 0 R 618 0 R 622 0 R 627 0 R] >> endobj 675 0 obj << /Type /Pages /Count 36 /Parent 677 0 R /Kids [228 0 R 316 0 R 365 0 R 411 0 R 470 0 R 516 0 R] >> endobj 676 0 obj << /Type /Pages /Count 10 /Parent 677 0 R /Kids [584 0 R 616 0 R] >> endobj 677 0 obj << /Type /Pages /Count 46 /Kids [675 0 R 676 0 R] >> endobj 678 0 obj << /Type /Outlines /First 7 0 R /Last 199 0 R /Count 16 >> endobj 199 0 obj << /Title 200 0 R /A 197 0 R /Parent 678 0 R /Prev 191 0 R >> endobj 195 0 obj << /Title 196 0 R /A 193 0 R /Parent 191 0 R >> endobj 191 0 obj << /Title 192 0 R /A 189 0 R /Parent 678 0 R /Prev 167 0 R /Next 199 0 R /First 195 0 R /Last 195 0 R /Count -1 >> endobj 187 0 obj << /Title 188 0 R /A 185 0 R /Parent 167 0 R /Prev 183 0 R >> endobj 183 0 obj << /Title 184 0 R /A 181 0 R /Parent 167 0 R /Prev 179 0 R /Next 187 0 R >> endobj 179 0 obj << /Title 180 0 R /A 177 0 R /Parent 167 0 R /Prev 175 0 R /Next 183 0 R >> endobj 175 0 obj << /Title 176 0 R /A 173 0 R /Parent 167 0 R /Prev 171 0 R /Next 179 0 R >> endobj 171 0 obj << /Title 172 0 R /A 169 0 R /Parent 167 0 R /Next 175 0 R >> endobj 167 0 obj << /Title 168 0 R /A 165 0 R /Parent 678 0 R /Prev 143 0 R /Next 191 0 R /First 171 0 R /Last 187 0 R /Count -5 >> endobj 163 0 obj << /Title 164 0 R /A 161 0 R /Parent 143 0 R /Prev 159 0 R >> endobj 159 0 obj << /Title 160 0 R /A 157 0 R /Parent 143 0 R /Prev 155 0 R /Next 163 0 R >> endobj 155 0 obj << /Title 156 0 R /A 153 0 R /Parent 143 0 R /Prev 151 0 R /Next 159 0 R >> endobj 151 0 obj << /Title 152 0 R /A 149 0 R /Parent 143 0 R /Prev 147 0 R /Next 155 0 R >> endobj 147 0 obj << /Title 148 0 R /A 145 0 R /Parent 143 0 R /Next 151 0 R >> endobj 143 0 obj << /Title 144 0 R /A 141 0 R /Parent 678 0 R /Prev 139 0 R /Next 167 0 R /First 147 0 R /Last 163 0 R /Count -5 >> endobj 139 0 obj << /Title 140 0 R /A 137 0 R /Parent 678 0 R /Prev 127 0 R /Next 143 0 R >> endobj 135 0 obj << /Title 136 0 R /A 133 0 R /Parent 127 0 R /Prev 131 0 R >> endobj 131 0 obj << /Title 132 0 R /A 129 0 R /Parent 127 0 R /Next 135 0 R >> endobj 127 0 obj << /Title 128 0 R /A 125 0 R /Parent 678 0 R /Prev 123 0 R /Next 139 0 R /First 131 0 R /Last 135 0 R /Count -2 >> endobj 123 0 obj << /Title 124 0 R /A 121 0 R /Parent 678 0 R /Prev 87 0 R /Next 127 0 R >> endobj 119 0 obj << /Title 120 0 R /A 117 0 R /Parent 111 0 R /Prev 115 0 R >> endobj 115 0 obj << /Title 116 0 R /A 113 0 R /Parent 111 0 R /Next 119 0 R >> endobj 111 0 obj << /Title 112 0 R /A 109 0 R /Parent 87 0 R /Prev 107 0 R /First 115 0 R /Last 119 0 R /Count -2 >> endobj 107 0 obj << /Title 108 0 R /A 105 0 R /Parent 87 0 R /Prev 103 0 R /Next 111 0 R >> endobj 103 0 obj << /Title 104 0 R /A 101 0 R /Parent 87 0 R /Prev 99 0 R /Next 107 0 R >> endobj 99 0 obj << /Title 100 0 R /A 97 0 R /Parent 87 0 R /Prev 95 0 R /Next 103 0 R >> endobj 95 0 obj << /Title 96 0 R /A 93 0 R /Parent 87 0 R /Prev 91 0 R /Next 99 0 R >> endobj 91 0 obj << /Title 92 0 R /A 89 0 R /Parent 87 0 R /Next 95 0 R >> endobj 87 0 obj << /Title 88 0 R /A 85 0 R /Parent 678 0 R /Prev 83 0 R /Next 123 0 R /First 91 0 R /Last 111 0 R /Count -6 >> endobj 83 0 obj << /Title 84 0 R /A 81 0 R /Parent 678 0 R /Prev 63 0 R /Next 87 0 R >> endobj 79 0 obj << /Title 80 0 R /A 77 0 R /Parent 63 0 R /Prev 75 0 R >> endobj 75 0 obj << /Title 76 0 R /A 73 0 R /Parent 63 0 R /Prev 71 0 R /Next 79 0 R >> endobj 71 0 obj << /Title 72 0 R /A 69 0 R /Parent 63 0 R /Prev 67 0 R /Next 75 0 R >> endobj 67 0 obj << /Title 68 0 R /A 65 0 R /Parent 63 0 R /Next 71 0 R >> endobj 63 0 obj << /Title 64 0 R /A 61 0 R /Parent 678 0 R /Prev 51 0 R /Next 83 0 R /First 67 0 R /Last 79 0 R /Count -4 >> endobj 59 0 obj << /Title 60 0 R /A 57 0 R /Parent 51 0 R /Prev 55 0 R >> endobj 55 0 obj << /Title 56 0 R /A 53 0 R /Parent 51 0 R /Next 59 0 R >> endobj 51 0 obj << /Title 52 0 R /A 49 0 R /Parent 678 0 R /Prev 23 0 R /Next 63 0 R /First 55 0 R /Last 59 0 R /Count -2 >> endobj 47 0 obj << /Title 48 0 R /A 45 0 R /Parent 23 0 R /Prev 43 0 R >> endobj 43 0 obj << /Title 44 0 R /A 41 0 R /Parent 23 0 R /Prev 39 0 R /Next 47 0 R >> endobj 39 0 obj << /Title 40 0 R /A 37 0 R /Parent 23 0 R /Prev 35 0 R /Next 43 0 R >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 23 0 R /Prev 31 0 R /Next 39 0 R >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 23 0 R /Prev 27 0 R /Next 35 0 R >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 23 0 R /Next 31 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 678 0 R /Prev 19 0 R /Next 51 0 R /First 27 0 R /Last 47 0 R /Count -6 >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 678 0 R /Prev 15 0 R /Next 23 0 R >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 678 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 678 0 R /Prev 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 678 0 R /Next 11 0 R >> endobj 679 0 obj << /Names [(Doc-Start) 206 0 R (Hfootnote.1) 263 0 R (Hfootnote.10) 594 0 R (Hfootnote.11) 595 0 R (Hfootnote.2) 354 0 R (Hfootnote.3) 378 0 R (Hfootnote.4) 443 0 R (Hfootnote.5) 480 0 R (Hfootnote.6) 522 0 R (Hfootnote.7) 533 0 R (Hfootnote.8) 555 0 R (Hfootnote.9) 583 0 R (Item.1) 273 0 R (Item.10) 580 0 R (Item.2) 274 0 R (Item.3) 275 0 R (Item.4) 276 0 R (Item.5) 277 0 R (Item.6) 279 0 R (Item.7) 577 0 R (Item.8) 578 0 R (Item.9) 579 0 R (cite.deputy) 267 0 R (cite.java-attributes) 494 0 R (cite.kandr) 229 0 R (cite.safe-tinyos) 268 0 R (cite.tinyos) 230 0 R (figure.1) 333 0 R (figure.2) 457 0 R (page.1) 205 0 R (page.10) 330 0 R (page.11) 337 0 R (page.12) 345 0 R (page.13) 361 0 R (page.14) 369 0 R (page.15) 374 0 R (page.16) 386 0 R (page.17) 394 0 R (page.18) 402 0 R (page.19) 409 0 R (page.2) 234 0 R (page.20) 415 0 R (page.21) 423 0 R (page.22) 428 0 R (page.23) 432 0 R (page.24) 447 0 R (page.25) 456 0 R (page.26) 474 0 R (page.27) 484 0 R (page.28) 489 0 R (page.29) 498 0 R (page.3) 272 0 R (page.30) 504 0 R (page.31) 515 0 R (page.32) 520 0 R (page.33) 526 0 R (page.34) 537 0 R (page.35) 542 0 R (page.36) 559 0 R (page.37) 574 0 R (page.38) 588 0 R (page.39) 599 0 R (page.4) 283 0 R (page.40) 603 0 R (page.41) 607 0 R (page.42) 611 0 R (page.43) 615 0 R (page.44) 620 0 R (page.45) 624 0 R (page.46) 629 0 R (page.5) 294 0 R (page.6) 303 0 R (page.7) 312 0 R (page.8) 320 0 R (page.9) 325 0 R (section*.1) 448 0 R (section*.2) 452 0 R (section*.3) 464 0 R (section*.4) 630 0 R (section.1) 6 0 R (section.10) 122 0 R (section.11) 126 0 R (section.12) 138 0 R (section.13) 142 0 R (section.14) 166 0 R (section.2) 10 0 R (section.3) 14 0 R (section.4) 18 0 R (section.5) 22 0 R (section.6) 50 0 R (section.7) 62 0 R (section.8) 82 0 R (section.9) 86 0 R (section.A) 190 0 R (section.B) 198 0 R (subsection.11.1) 130 0 R (subsection.11.2) 134 0 R (subsection.13.1) 146 0 R (subsection.13.2) 150 0 R (subsection.13.3) 154 0 R (subsection.13.4) 158 0 R (subsection.13.5) 162 0 R (subsection.14.1) 170 0 R (subsection.14.2) 174 0 R (subsection.14.3) 178 0 R (subsection.14.4) 182 0 R (subsection.14.5) 186 0 R (subsection.5.1) 26 0 R (subsection.5.2) 30 0 R (subsection.5.3) 34 0 R (subsection.5.4) 38 0 R (subsection.5.5) 42 0 R (subsection.5.6) 46 0 R (subsection.6.1) 54 0 R (subsection.6.2) 58 0 R (subsection.7.1) 66 0 R (subsection.7.2) 70 0 R (subsection.7.3) 74 0 R (subsection.7.4) 78 0 R (subsection.9.1) 90 0 R (subsection.9.2) 94 0 R (subsection.9.3) 98 0 R (subsection.9.4) 102 0 R (subsection.9.5) 106 0 R (subsection.9.6) 110 0 R (subsection.A.1) 194 0 R (subsubsection.9.6.1) 114 0 R (subsubsection.9.6.2) 118 0 R] /Limits [(Doc-Start) (subsubsection.9.6.2)] >> endobj 680 0 obj << /Kids [679 0 R] >> endobj 681 0 obj << /Dests 680 0 R >> endobj 682 0 obj << /Type /Catalog /Pages 677 0 R /Outlines 678 0 R /Names 681 0 R /PageMode /UseOutlines /OpenAction 201 0 R >> endobj 683 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords() /CreationDate (D:20090701170048-07'00') /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref 0 684 0000000001 65535 f 0000000002 00000 f 0000000003 00000 f 0000000004 00000 f 0000000000 00000 f 0000000009 00000 n 0000007981 00000 n 0000307285 00000 n 0000000054 00000 n 0000000084 00000 n 0000014260 00000 n 0000307199 00000 n 0000000129 00000 n 0000000155 00000 n 0000022553 00000 n 0000307111 00000 n 0000000201 00000 n 0000000228 00000 n 0000022605 00000 n 0000307023 00000 n 0000000274 00000 n 0000000323 00000 n 0000026517 00000 n 0000306898 00000 n 0000000369 00000 n 0000000425 00000 n 0000029859 00000 n 0000306824 00000 n 0000000476 00000 n 0000000516 00000 n 0000032236 00000 n 0000306737 00000 n 0000000567 00000 n 0000000601 00000 n 0000032288 00000 n 0000306650 00000 n 0000000652 00000 n 0000000694 00000 n 0000037590 00000 n 0000306563 00000 n 0000000745 00000 n 0000000788 00000 n 0000040877 00000 n 0000306476 00000 n 0000000839 00000 n 0000000894 00000 n 0000040934 00000 n 0000306402 00000 n 0000000945 00000 n 0000000993 00000 n 0000044099 00000 n 0000306277 00000 n 0000001039 00000 n 0000001078 00000 n 0000044155 00000 n 0000306203 00000 n 0000001129 00000 n 0000001166 00000 n 0000048128 00000 n 0000306129 00000 n 0000001217 00000 n 0000001244 00000 n 0000048185 00000 n 0000306004 00000 n 0000001290 00000 n 0000001342 00000 n 0000051797 00000 n 0000305930 00000 n 0000001393 00000 n 0000001451 00000 n 0000055231 00000 n 0000305843 00000 n 0000001502 00000 n 0000001558 00000 n 0000058649 00000 n 0000305756 00000 n 0000001609 00000 n 0000001633 00000 n 0000058706 00000 n 0000305682 00000 n 0000001684 00000 n 0000001720 00000 n 0000062052 00000 n 0000305594 00000 n 0000001766 00000 n 0000001828 00000 n 0000062109 00000 n 0000305467 00000 n 0000001874 00000 n 0000001933 00000 n 0000064934 00000 n 0000305393 00000 n 0000001984 00000 n 0000002022 00000 n 0000068096 00000 n 0000305306 00000 n 0000002073 00000 n 0000002098 00000 n 0000074055 00000 n 0000305217 00000 n 0000002149 00000 n 0000002189 00000 n 0000076121 00000 n 0000305126 00000 n 0000002241 00000 n 0000002291 00000 n 0000076179 00000 n 0000305034 00000 n 0000002343 00000 n 0000002371 00000 n 0000081723 00000 n 0000304917 00000 n 0000002423 00000 n 0000002459 00000 n 0000090920 00000 n 0000304838 00000 n 0000002516 00000 n 0000002570 00000 n 0000095102 00000 n 0000304759 00000 n 0000002627 00000 n 0000002677 00000 n 0000098943 00000 n 0000304667 00000 n 0000002725 00000 n 0000002764 00000 n 0000102645 00000 n 0000304535 00000 n 0000002812 00000 n 0000002842 00000 n 0000105861 00000 n 0000304456 00000 n 0000002895 00000 n 0000002930 00000 n 0000109520 00000 n 0000304377 00000 n 0000002983 00000 n 0000003039 00000 n 0000114338 00000 n 0000304284 00000 n 0000003087 00000 n 0000003121 00000 n 0000118480 00000 n 0000304152 00000 n 0000003169 00000 n 0000003202 00000 n 0000118533 00000 n 0000304073 00000 n 0000003255 00000 n 0000003299 00000 n 0000118591 00000 n 0000303980 00000 n 0000003352 00000 n 0000003403 00000 n 0000126460 00000 n 0000303887 00000 n 0000003456 00000 n 0000003511 00000 n 0000126513 00000 n 0000303794 00000 n 0000003564 00000 n 0000003637 00000 n 0000126571 00000 n 0000303715 00000 n 0000003690 00000 n 0000003721 00000 n 0000126629 00000 n 0000303583 00000 n 0000003769 00000 n 0000003806 00000 n 0000131489 00000 n 0000303504 00000 n 0000003859 00000 n 0000003897 00000 n 0000131547 00000 n 0000303411 00000 n 0000003950 00000 n 0000004000 00000 n 0000135745 00000 n 0000303318 00000 n 0000004053 00000 n 0000004103 00000 n 0000135798 00000 n 0000303225 00000 n 0000004156 00000 n 0000004203 00000 n 0000136087 00000 n 0000303146 00000 n 0000004256 00000 n 0000004298 00000 n 0000140002 00000 n 0000303014 00000 n 0000004345 00000 n 0000004372 00000 n 0000147296 00000 n 0000302949 00000 n 0000004424 00000 n 0000004458 00000 n 0000150550 00000 n 0000302870 00000 n 0000004505 00000 n 0000004533 00000 n 0000007257 00000 n 0000008037 00000 n 0000004585 00000 n 0000007875 00000 n 0000007928 00000 n 0000300859 00000 n 0000296280 00000 n 0000300698 00000 n 0000295413 00000 n 0000289511 00000 n 0000295252 00000 n 0000288381 00000 n 0000277833 00000 n 0000288219 00000 n 0000276358 00000 n 0000259394 00000 n 0000276197 00000 n 0000007405 00000 n 0000007562 00000 n 0000007720 00000 n 0000258754 00000 n 0000256696 00000 n 0000258593 00000 n 0000255635 00000 n 0000244952 00000 n 0000255473 00000 n 0000301600 00000 n 0000157657 00000 n 0000157599 00000 n 0000014380 00000 n 0000010960 00000 n 0000008174 00000 n 0000014207 00000 n 0000011236 00000 n 0000244482 00000 n 0000240851 00000 n 0000244323 00000 n 0000011394 00000 n 0000011550 00000 n 0000011705 00000 n 0000011860 00000 n 0000012015 00000 n 0000012171 00000 n 0000012327 00000 n 0000012483 00000 n 0000012636 00000 n 0000012793 00000 n 0000012950 00000 n 0000013107 00000 n 0000013264 00000 n 0000013421 00000 n 0000013575 00000 n 0000013732 00000 n 0000013888 00000 n 0000014045 00000 n 0000239374 00000 n 0000223950 00000 n 0000239212 00000 n 0000223516 00000 n 0000219997 00000 n 0000223357 00000 n 0000014317 00000 n 0000218818 00000 n 0000209972 00000 n 0000218658 00000 n 0000157485 00000 n 0000157541 00000 n 0000018069 00000 n 0000017375 00000 n 0000014530 00000 n 0000017668 00000 n 0000017721 00000 n 0000017779 00000 n 0000017837 00000 n 0000017895 00000 n 0000017953 00000 n 0000017507 00000 n 0000018011 00000 n 0000022662 00000 n 0000021715 00000 n 0000018180 00000 n 0000022500 00000 n 0000208942 00000 n 0000198979 00000 n 0000208780 00000 n 0000021871 00000 n 0000022026 00000 n 0000022183 00000 n 0000022339 00000 n 0000026574 00000 n 0000025511 00000 n 0000022799 00000 n 0000026464 00000 n 0000025675 00000 n 0000025836 00000 n 0000025996 00000 n 0000026152 00000 n 0000026308 00000 n 0000029911 00000 n 0000028858 00000 n 0000026685 00000 n 0000029806 00000 n 0000029022 00000 n 0000029178 00000 n 0000029334 00000 n 0000029493 00000 n 0000029650 00000 n 0000032345 00000 n 0000031561 00000 n 0000030035 00000 n 0000032183 00000 n 0000031709 00000 n 0000031865 00000 n 0000032023 00000 n 0000301717 00000 n 0000035291 00000 n 0000034952 00000 n 0000032469 00000 n 0000035238 00000 n 0000035084 00000 n 0000037647 00000 n 0000037251 00000 n 0000035402 00000 n 0000037537 00000 n 0000037383 00000 n 0000040991 00000 n 0000040369 00000 n 0000037771 00000 n 0000040824 00000 n 0000040509 00000 n 0000040664 00000 n 0000081659 00000 n 0000044212 00000 n 0000043268 00000 n 0000041115 00000 n 0000044046 00000 n 0000043424 00000 n 0000043580 00000 n 0000043735 00000 n 0000043891 00000 n 0000048305 00000 n 0000047116 00000 n 0000044349 00000 n 0000048075 00000 n 0000047280 00000 n 0000047435 00000 n 0000047593 00000 n 0000198291 00000 n 0000194374 00000 n 0000198130 00000 n 0000047755 00000 n 0000047913 00000 n 0000048242 00000 n 0000194066 00000 n 0000191923 00000 n 0000193906 00000 n 0000051854 00000 n 0000051129 00000 n 0000048507 00000 n 0000051744 00000 n 0000051277 00000 n 0000051434 00000 n 0000051589 00000 n 0000301834 00000 n 0000055288 00000 n 0000054885 00000 n 0000051978 00000 n 0000055178 00000 n 0000055017 00000 n 0000058826 00000 n 0000057804 00000 n 0000055451 00000 n 0000058596 00000 n 0000057960 00000 n 0000058121 00000 n 0000058278 00000 n 0000058763 00000 n 0000191183 00000 n 0000187122 00000 n 0000191022 00000 n 0000058435 00000 n 0000062166 00000 n 0000061212 00000 n 0000059002 00000 n 0000061999 00000 n 0000061368 00000 n 0000061524 00000 n 0000061684 00000 n 0000061839 00000 n 0000064991 00000 n 0000064085 00000 n 0000062290 00000 n 0000064881 00000 n 0000064241 00000 n 0000064400 00000 n 0000064560 00000 n 0000064720 00000 n 0000068153 00000 n 0000067422 00000 n 0000065128 00000 n 0000068043 00000 n 0000067570 00000 n 0000067725 00000 n 0000067884 00000 n 0000070662 00000 n 0000070316 00000 n 0000068290 00000 n 0000070609 00000 n 0000070448 00000 n 0000301951 00000 n 0000074112 00000 n 0000073710 00000 n 0000070786 00000 n 0000074002 00000 n 0000185985 00000 n 0000176740 00000 n 0000185823 00000 n 0000073842 00000 n 0000076237 00000 n 0000075775 00000 n 0000074275 00000 n 0000076068 00000 n 0000075907 00000 n 0000077730 00000 n 0000077565 00000 n 0000076348 00000 n 0000077677 00000 n 0000081844 00000 n 0000080304 00000 n 0000077815 00000 n 0000081606 00000 n 0000080484 00000 n 0000080650 00000 n 0000080815 00000 n 0000080970 00000 n 0000081131 00000 n 0000081293 00000 n 0000081451 00000 n 0000176193 00000 n 0000172907 00000 n 0000176032 00000 n 0000081781 00000 n 0000086324 00000 n 0000085538 00000 n 0000082033 00000 n 0000086155 00000 n 0000086208 00000 n 0000085686 00000 n 0000085841 00000 n 0000086002 00000 n 0000086266 00000 n 0000090978 00000 n 0000089795 00000 n 0000086500 00000 n 0000090745 00000 n 0000090798 00000 n 0000089959 00000 n 0000090113 00000 n 0000172478 00000 n 0000170979 00000 n 0000172319 00000 n 0000090270 00000 n 0000090862 00000 n 0000090436 00000 n 0000090590 00000 n 0000170631 00000 n 0000168089 00000 n 0000170469 00000 n 0000302068 00000 n 0000095221 00000 n 0000094586 00000 n 0000091193 00000 n 0000095049 00000 n 0000167773 00000 n 0000166356 00000 n 0000167613 00000 n 0000094726 00000 n 0000094883 00000 n 0000095158 00000 n 0000099001 00000 n 0000098601 00000 n 0000095436 00000 n 0000098890 00000 n 0000098733 00000 n 0000102703 00000 n 0000101797 00000 n 0000099138 00000 n 0000102592 00000 n 0000101953 00000 n 0000102118 00000 n 0000102279 00000 n 0000102436 00000 n 0000157428 00000 n 0000105919 00000 n 0000105354 00000 n 0000102840 00000 n 0000105808 00000 n 0000105494 00000 n 0000105651 00000 n 0000109578 00000 n 0000108668 00000 n 0000106043 00000 n 0000109467 00000 n 0000108824 00000 n 0000108984 00000 n 0000165972 00000 n 0000163474 00000 n 0000165809 00000 n 0000109146 00000 n 0000109304 00000 n 0000111182 00000 n 0000111017 00000 n 0000109715 00000 n 0000111129 00000 n 0000302185 00000 n 0000114459 00000 n 0000113995 00000 n 0000111280 00000 n 0000114285 00000 n 0000114127 00000 n 0000114396 00000 n 0000118712 00000 n 0000117803 00000 n 0000114635 00000 n 0000118427 00000 n 0000117951 00000 n 0000118108 00000 n 0000118269 00000 n 0000163147 00000 n 0000161246 00000 n 0000162986 00000 n 0000118649 00000 n 0000121252 00000 n 0000120905 00000 n 0000118913 00000 n 0000121199 00000 n 0000121037 00000 n 0000126750 00000 n 0000124275 00000 n 0000121363 00000 n 0000126407 00000 n 0000124495 00000 n 0000124656 00000 n 0000124812 00000 n 0000124967 00000 n 0000125123 00000 n 0000125280 00000 n 0000125438 00000 n 0000125600 00000 n 0000125760 00000 n 0000125921 00000 n 0000126083 00000 n 0000126245 00000 n 0000126687 00000 n 0000131605 00000 n 0000129968 00000 n 0000126926 00000 n 0000131436 00000 n 0000130156 00000 n 0000130317 00000 n 0000160753 00000 n 0000157852 00000 n 0000160591 00000 n 0000130479 00000 n 0000130640 00000 n 0000130796 00000 n 0000130952 00000 n 0000131114 00000 n 0000131275 00000 n 0000136208 00000 n 0000134916 00000 n 0000131781 00000 n 0000135692 00000 n 0000135072 00000 n 0000135227 00000 n 0000135856 00000 n 0000135914 00000 n 0000135972 00000 n 0000136030 00000 n 0000135385 00000 n 0000135535 00000 n 0000136145 00000 n 0000302302 00000 n 0000140186 00000 n 0000138996 00000 n 0000136410 00000 n 0000139949 00000 n 0000139160 00000 n 0000139319 00000 n 0000139477 00000 n 0000139632 00000 n 0000139793 00000 n 0000140060 00000 n 0000140123 00000 n 0000141274 00000 n 0000141109 00000 n 0000140349 00000 n 0000141221 00000 n 0000142274 00000 n 0000142109 00000 n 0000141385 00000 n 0000142221 00000 n 0000143603 00000 n 0000143438 00000 n 0000142385 00000 n 0000143550 00000 n 0000145241 00000 n 0000145076 00000 n 0000143714 00000 n 0000145188 00000 n 0000147349 00000 n 0000147131 00000 n 0000145352 00000 n 0000147243 00000 n 0000302419 00000 n 0000150603 00000 n 0000150385 00000 n 0000147473 00000 n 0000150497 00000 n 0000154375 00000 n 0000154030 00000 n 0000150727 00000 n 0000154322 00000 n 0000154162 00000 n 0000157715 00000 n 0000157205 00000 n 0000154499 00000 n 0000157317 00000 n 0000157370 00000 n 0000161093 00000 n 0000160969 00000 n 0000163380 00000 n 0000163355 00000 n 0000166236 00000 n 0000166180 00000 n 0000168003 00000 n 0000167979 00000 n 0000170875 00000 n 0000170836 00000 n 0000172813 00000 n 0000172691 00000 n 0000176554 00000 n 0000176406 00000 n 0000186639 00000 n 0000186311 00000 n 0000191640 00000 n 0000191430 00000 n 0000194292 00000 n 0000194268 00000 n 0000198785 00000 n 0000198527 00000 n 0000209567 00000 n 0000209249 00000 n 0000219514 00000 n 0000219186 00000 n 0000223820 00000 n 0000223760 00000 n 0000240307 00000 n 0000239931 00000 n 0000244802 00000 n 0000244732 00000 n 0000256307 00000 n 0000255977 00000 n 0000259238 00000 n 0000259000 00000 n 0000277313 00000 n 0000276895 00000 n 0000289110 00000 n 0000288754 00000 n 0000295899 00000 n 0000295671 00000 n 0000301296 00000 n 0000301098 00000 n 0000302520 00000 n 0000302638 00000 n 0000302724 00000 n 0000302794 00000 n 0000307357 00000 n 0000310079 00000 n 0000310118 00000 n 0000310156 00000 n 0000310286 00000 n trailer << /Size 684 /Root 682 0 R /Info 683 0 R /ID [<3F19BF52B0D2D15B9DF8AF3FB40B6992> <3F19BF52B0D2D15B9DF8AF3FB40B6992>] >> startxref 310549 %%EOF nescc-1.3.4/doc/ref.tex000066400000000000000000003276571177770303300147110ustar00rootroot00000000000000% Not in ref manual (implementation restriction rather than language feature): % no initialisers on module variables (future support) % (but vars w/ attribute C are not module vars) \documentclass[11pt,letterpaper]{article} \usepackage{fullpage} \usepackage{xspace} \usepackage{hyperref} \newcommand{\kw}[1]{{\tt #1}} \newcommand{\code}[1]{{\tt #1}} \newcommand{\file}[1]{{\tt #1}} \newcommand{\nesc}{nesC\xspace} \newcommand{\tinyos}{TinyOS\xspace} \newcommand{\opt}{$_{\mbox{opt}}$\xspace} \newcommand{\FSE}{\mathcal{F}} \newcommand{\connect}{\mathcal{C}} \parskip 0.15cm \parindent 0cm \newcommand{\grammarshift}{\vspace*{-.7cm}} \newcommand{\grammarindent}{\hspace*{2cm}\= \\ \kill} \begin{document} \title{\nesc 1.3 Language Reference Manual} \author{David Gay, Philip Levis, David Culler, Eric Brewer} \date{July 2009} \maketitle \section{Introduction} \nesc is an extension to C~\cite{kandr} designed to embody the structuring concepts and execution model of \tinyos~\cite{tinyos}. \tinyos is an event-driven operating system designed for sensor network nodes that have very limited resources (e.g., 8K bytes of program memory, 512 bytes of RAM). \tinyos has been reimplemented in \nesc. This manual describes v1.2 of \nesc, changes from v1.0 and v1.1 are summarised in Section~\ref{sec:changes}. The basic concepts behind \nesc are: \begin{itemize} \item Separation of construction and composition: programs are built out of \emph{components}, which are assembled (``wired'') to form whole programs. Components define two scopes, one for their specification (containing the names of their \emph{interfaces}) and one for their implementation. Components have internal concurrency in the form of \emph{tasks}. Threads of control may pass into a component through its interfaces. These threads are rooted either in a task or a hardware interrupt. \item Specification of component behaviour in terms of set of \emph{interfaces}. Interfaces may be provided or used by the component. The provided interfaces are intended to represent the functionality that the component provides to its user, the used interfaces represent the functionality the component needs to perform its job. \item Interfaces are bidirectional: they specify a set of functions to be implemented by the interface's provider (\emph{commands}) and a set to be implemented by the interface's user (\emph{events}). This allows a single interface to represent a complex interaction between components (e.g., registration of interest in some event, followed by a callback when that event happens). This is critical because all lengthy commands in \tinyos (e.g. send packet) are non-blocking; their completion is signaled through an event (send packet done). The interface forces a component that calls the ``send packet'' command to provide an implementation for the ``send packet done'' event. Typically commands call ``downwards'', i.e., from application components to those closer to the hardware, while events call ``upwards''. Certain primitive events are bound to hardware interrupts (the nature of this binding is system-dependent, so is not described further in this reference manual). \item Components are statically linked to each other via their interfaces. This increases runtime efficiency, encourages robust design, and allows for better static analysis of programs. \item \nesc is designed under the expectation that code will be generated by whole-program compilers. This allows for better code generation and analysis. An example of this is nesC's compile-time data race detector. \item The concurrency model of \nesc is based on run-to-completion tasks, and interrupt handlers which may interrupt tasks and each other. The \nesc compiler signals the potential data races caused by the interrupt handlers. \end{itemize} This document is a reference manual for \nesc rather than a tutorial. The \tinyos tutorial\footnote{Available with the \tinyos distribution at http://webs.cs.berkeley.edu} presents a gentler introduction to \nesc. The rest of this document is structured as follows: Section~\ref{sec:changes} summarises the new features in \nesc since v1.0. Section~\ref{sec:notation} presents the notation used in the reference manual, and Section~\ref{sec:scoping} the scoping and naming rules of \nesc. Sections~\ref{sec:interface} and~\ref{sec:component} present interfaces and components, while Sections~\ref{sec:module},~\ref{sec:binary} and~\ref{sec:configuration} explain how components are implemented. Section~\ref{sec:concurrency} presents \nesc's concurrency model and data-race detection. Sections~\ref{sec:attributes},~\ref{sec:external-types} and~\ref{sec:misc} cover the extensions to C allowed in \nesc programs. Section~\ref{sec:app} explains how C files, \nesc interfaces and components are assembled into an application and how \nesc programs interact with the preprocessor and linker. Finally, Appendix~\ref{sec:grammar} fully defines \nesc's grammar (as an extension to the C grammar from Appendix~A of Kernighan and Ritchie (K\&R) ~\cite[pp234--239]{kandr}), and Appendix~\ref{sec:glossary} gives a glossary of terms used in this reference manual. \section{Changes} \label{sec:changes} The changes from \nesc 1.2 to 1.3 are: \begin{itemize} \item Support for applying Deputy~\cite{deputy} type-safety for C system to nesC applications~\cite{safe-tinyos}. More information can be found in the separate ``Safe TinyOS'' documentation. \item \nesc attributes can be placed in documentation comments to reduce clutter in function declarations. \item New \code{uniqueN(\ldots)} compile-time constant function. \item Bitfields supported in external types. \item External types can used as function parameters and results. \item Types defined in interfaces can be used immediately in generic interface arguments (e.g. \code{interface Timer}, where \code{TMilli} is defined in \file{Timer.nc}). \end{itemize} The changes from \nesc 1.1 to 1.2 are: \begin{itemize} \item Generic interfaces: interfaces can now take type parameters (allowing, e.g., a single interface definition for a queue of any type of values). \item Generic components: components can now be instantiated (at compile-time), and can take constant and type arguments (e.g., a generic queue component would take type and queue size arguments). \item Component specifications can include type and enum constant declarations; component selections and wiring statements can be interspersed in configurations; configuration implementations can refer to the types and enum constants of the components they include. \item Binary components: programs can now use components defined in binary form. The same functionality supports encapsulating a set of components as a single binary component for use in other programs. \item External types: types with a platform-independent representation and no alignment representation can now be defined in nesC (these are useful, e.g., for defining packet representations). \item Attributes: declarations may be decorated with attributes. Information on attribute use may be extracted for use in external programs. Details on this extraction process is beyond the scope of this language reference manual; see the nesC compiler documentation for details. Some predefined attributes have meaning to the nesC compiler. Use of \kw{\_\_attribute\_\_} for nesC-specific features is deprecated (for details on these deprecated usages, see Section~10.3 of the nesC 1.1 reference manual). \item \kw{includes} is deprecated and components can be preceded by arbitrary C declarations and macros. As a result, \kw{\#include} behaves in a more comprehensible fashion. For details on \kw{includes}, see Section~9 of the nesC 1.1 reference manual. \item \kw{return} can be used within \kw{atomic} statements (the atomic statement is implicitly terminated by the \kw{return}). \end{itemize} The changes from \nesc 1.0 to 1.1 are: \begin{enumerate} \item \kw{atomic} statements. These simplify implementation of concurrent data structures, and are understood by the new compile-time data-race detector. \item Compile-time data-race detection gives warnings for variables that are potentially accessed concurrently by two interrupt handlers, or an interrupt handler and a task. \item Commands and events which can safely be executed by interrupt handlers must be explicitly marked with the \kw{async} storage class specifier. \item The results of calls to commands or events with ``fan-out'' are automatically combined by new type-specific combiner functions. \item \code{uniqueCount} is a new \emph{constant function} (Section~\ref{sec:constant-functions}) which counts uses of \code{unique}. \item The \kw{NESC} preprocessor symbol indicates the language version. It is at least 110 for \nesc 1.1, at least 120 for \nesc 1.2. \end{enumerate} \section{Notation} \label{sec:notation} The \texttt{typewriter} font is used for \nesc code and for filenames. Single symbols in italics, with optional subscripts, are used to refer to \nesc entities, e.g., ``component $K$'' or ``value $v$''. Explanations of \nesc constructs are presented along with the corresponding grammar fragments. In these fragments, we sometimes use \ldots to represent elided productions (irrelevant to the construct at hand). Appendix~\ref{sec:grammar} presents the full \nesc grammar. Several examples use the \code{uint8\_t} and \code{uint16\_t} types (from the C99 standard \file{inttypes.h} file) and the standard TinyOS \code{result\_t} type (which represents success vs failure of an operation). The grammar of \nesc is an extension the ANSI C grammar. We chose to base our presentation on the ANSI C grammar from Appendix~A of Kernighan and Ritchie (K\&R) ~\cite[pp234--239]{kandr}. Words in \emph{italics} are non-terminals and non-literal terminals, \kw{typewriter} words and symbols are literal terminals. The subscript \emph{opt} indicates optional terminals or non-terminals. In some cases, we change some ANSI C grammar rules. We indicate this as follows: \emph{also} indicates additional productions for existing non-terminals, \emph{replaced by} indicates replacement of an existing non-terminal. We do not repeat the productions from the C grammar here, but Appendix~\ref{sec:grammar} lists and summarises the C grammar rules used by \nesc. \section{Scopes and Name Spaces in \nesc} \label{sec:scoping} \nesc includes the standard C name spaces: \emph{object}, which includes variables, functions, typedefs, and enum-constants; \emph{label} for \kw{goto} labels; \emph{tag} for \kw{struct}, \kw{union}, \kw{enum} tags. It adds an additional \emph{component} name space for component and interface definitions. For simplicity, we assume that each scope contains all four name spaces, though language restrictions mean that many of these name spaces are empty (e.g., all component and interface definitions are global, so the \emph{component} name space is empty in all but the global scope). \nesc follows the standard C scoping rules, with the following additions: \begin{itemize} \item Each interface definition introduces two scopes. The \emph{interface parameter scope} is nested in the global scope and contains the parameters of generic interface definitions. The \emph{interface scope} is nested in the interface parameter scope and contains the interface's commands and events. \item Each component definition introduces three new scopes. The \emph{component parameter scope} is nested in the global scope and contains the parameters of generic component definitions. The \emph{specification scope} is nested in the component parameter scope and contains the component's specification elements. The \emph{implementation scope} is nested in the specification scope. For configurations, the implementation scope contains the names by which this component refers to its included components (Section~\ref{sec:config-components}). For modules, the implementation scope holds the tasks, C declarations and definitions that form the module's body. These declarations, etc may introduce their own nested scopes within the implementation scope, following the usual C scoping rules. \end{itemize} As usual in C, scopes must not have multiple definitions of the same name within the same name space. \section{Interface and Component Specification} \label{sec:interface} A \nesc \emph{interface definition} specifies a bi-directional interaction between two components, known as the \emph{provider} and \emph{user}. Interactions via interfaces are specified by two sets of functions: \emph{commands} are function calls from the user to the provider component, \emph{events} are function calls from the provider to the user component. In many cases, the provider component is providing some service (e.g., sending messages over the radio) and commands represent requests, events responses. An interface definition has a unique name, optional C type parameters, and contains declarations for its command and event functions. An interface definition with type parameters is called a \emph{generic interface definition}. An \emph{interface type} is a reference to an interface definition and, if the referenced definition is generic, corresponding type arguments. Components can only be connected via two interfaces with the same type. A component's \emph{specification} is the set of interfaces that it provides and uses. Each provided or used interface has a name and an interface type. Component specifications can also contain \emph{bare} commands and events (i.e., not contained in an interface), \kw{typedef}s and tagged type declarations; to simplify the exposition we defer discussion of these to Sections~\ref{sec:bare} and~\ref{sec:spec-other}. For instance, the following source code \begin{quote} \begin{verbatim} interface SendMsg { // send a radio message command result_t send(uint16_t address, uint8_t length, TOS_MsgPtr msg); event result_t sendDone(TOS_MsgPtr msg, result_t success); } interface Init { // a generic interface definition command void doit(t x); } module Simple { provides interface Init as MyInit; uses interface SendMsg as MyMessage; } ... \end{verbatim} \end{quote} shows two interface definitions, \code{SendMsg} and \code{Init}, and the specification of the \code{Simple} component. The specification of \code{Simple} has two elements: \code{MyInit}, a provided interface of type \code{Init} and \code{MyMessage} a used interface of type \code{SendMsg}. \code{Simple} must implement the \code{MyInit.doit} command and the \code{MyMessage.sendDone} event. It can call the \code{MyMessage.send} command. The rest of this section covers interface definitions, interface types and component specifications in detail. The sections on component definition (Section~\ref{sec:component}) and implementations (Sections~\ref{sec:module} and~\ref{sec:configuration}) explain how commands and events are called and implemented, and how components are linked together through their interfaces. \subsection{Interface Definitions} Interface definitions have the following syntax: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent interface-definition:\\ \> \kw{interface} identifier type-parameters\opt\kw{\{} declaration-list \kw{\}} \end{tabbing} \end{quote} Interface definitions have a name (\emph{identifier}) with global scope. This name belongs to the component name space (Section~\ref{sec:scoping}), so interface definitions must have a name distinct from other interface definitions and from components, however they do not conflict with regular C declarations. The \emph{type-parameters} is a list of optional C type parameters for this interface definition: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent type-parameters:\\ \> \kw{<} type-parameter-list \kw{>}\\ \\ type-parameter-list:\\ \> identifier\\ \> type-parameter-list \kw{,} identifier \end{tabbing} \end{quote} These parameters belong to the object name space of the interface's parameter scope (Section~\ref{sec:scoping}) and are therefore visible in the \emph{declaration-list}. See Section~\ref{sec:type-parameters} for how type parameters interact with C's type system (in brief, these type parameters can be used like \kw{typedef}'d types). An interface definition with type parameters is called a \emph{generic interface definition}. The \emph{declaration-list} of an interface definition specifies a set of commands and events. It must consist of function declarations with the \kw{command} or \kw{event} storage class: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent storage-class-specifier: \emph{also one of}\\ \> \kw{command} \kw{event} \kw{async}\\ \end{tabbing} \end{quote} The optional \kw{async} keyword indicates that the command or event can be executed in an interrupt handler (see Section~\ref{sec:concurrency}). The interface's commands and events belong to the object name space of the interface's scope (Section~\ref{sec:scoping}). The example code above showed two simple interface definitions (\code{SendMsg} and \code{Init}). The following \begin{quote} \begin{verbatim} interface Queue { async command void push(t x); async command t pop(); async command bool empty(); async command bool full(); } \end{verbatim} \end{quote} defines a generic interface \code{Queue} with a single type parameter, defining four commands which can be executed in an interrupt handler. \subsection{Interface Types} An interface type is specified by giving the name of an interface definition and, for generic interface definitions, any required type arguments: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent interface-type: \\ \> \kw{interface} identifier type-arguments\opt\\ \\ type-arguments:\\ \> \kw{<} type-argument-list \kw{>}\\ \\ type-argument-list:\\ \> type-name\\ \> type-argument-list \kw{,} type-name \end{tabbing} \end{quote} There must be as many types in \emph{type-arguments} as there are parameters in the interface definition's type parameter list. Type arguments can not be incomplete or of function or array type. Two interface types are the same if they refer to the same interface definition and their corresponding type arguments (if any) are of the same C type. Example interface types are \kw{interface SendMsg} and \kw{interface Queue}. \subsection{Component Specification} \label{sec:component-spec} The first part of a component's definition (see Section~\ref{sec:component}) is its \emph{specification}, a declaration of provided or used specification elements, where each element is an interface, a bare command or event (Section~\ref{sec:bare}) or a declaration (Section~\ref{sec:spec-other}): \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent component-specification:\\ \> \kw{\{} uses-provides-list \kw{\}}\\ \\ uses-provides-list:\\ \> uses-provides\\ \> uses-provides-list uses-provides\\ \\ uses-provides:\\ \> \kw{uses} specification-element-list\\ \> \kw{provides} specification-element-list\\ \\ specification-element-list:\\ \> specification-element\\ \> \kw{\{} specification-elements \kw{\}}\\ \\ specification-elements:\\ \> specification-element\\ \> specification-elements specification-element\\ \end{tabbing} \end{quote} There can be multiple \kw{uses} and \kw{provides} directives in a component specification. Multiple used or provided specification elements can be grouped in a single directive by surrounding them with \{ and \}. For instance, these two specifications are identical: \begin{quote} \begin{verbatim} module A1 { module A1 { uses interface X; uses { uses interface Y; interface X; } ... interface Y; } } ... \end{verbatim} \end{quote} An interface declaration has an interface type and an optional name: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent specification-element:\\ \> interface-type instance-name\opt instance-parameters\opt\\ \> \ldots\\ \\ instance-name:\\ \> \kw{as} identifier\\ \\ instance-parameters:\\ \> \kw{[} parameter-type-list \kw{]} \end{tabbing} \end{quote} If the name is omitted, the interface's name is the same as the name of the interface definition specified by the interface type: \code{interface SendMsg} means the same thing as \code{interface SendMsg as SendMsg} and \code{interface Queue} is the same as \code{interface Queue as Queue}. A specification can contain independent interfaces of the same interface type, e.g., \begin{quote} \begin{verbatim} provides interface X as X1; uses interface X as X2; \end{verbatim} \end{quote} The interface names belong to the object name space of the specification's scope (Section~\ref{sec:scoping}), thus there is no confusion between interface names and interface definition names (the latter are in the component name space). An interface declaration without \emph{instance-parameters} (e.g., \code{interface X as Y}) declares a single interface to this component. A declaration with \emph{instance-parameters} (e.g., \code{interface SendMsg S[uint8\_t id]}) declares a \emph{parameterised interface}, corresponding to multiple interfaces to this component, one for each distinct tuple of parameter values (so \code{interface SendMsg as S[uint8\_t id, uint8\_t id2]} declares 256 * 256 interfaces of type \code{SendMsg}). The types of the \emph{parameters} must be integral types (\kw{enum}s are not allowed at this time). The specification for \code{AMStandard}, a component that dispatches messages received from the serial port and the radio to the application based on the ``active message id'' stored in the message, and sends messages to the radio or serial port depending on the selected destination address, is typical of many TinyOS system components: \begin{quote} \begin{verbatim} module AMStandard { provides { interface StdControl; // The interface are parameterised by the active message id interface SendMsg[uint8_t id]; interface ReceiveMsg[uint8_t id]; } uses { interface StdControl as RadioControl; interface SendMsg as RadioSend; interface ReceiveMsg as RadioReceive; interface StdControl as SerialControl; interface SendMsg as SerialSend; interface ReceiveMsg as SerialReceive; } } ... \end{verbatim} \end{quote} It provides or uses nine interfaces: \begin{itemize} \item The provided interface \code{StdControl} of type \code{StdControl} supports initialisation of \code{AMStandard}. \item The provided parameterised interfaces of type \code{SendMsg} and \code{ReceiveMsg} (named \code{SendMsg} and \code{ReceiveMsg} respectively) support dispatching of received messages and sending of messages with a particular active message id \item The used interfaces control, send and receive messages from the radio and serial port respectively (another TinyOS component, the \code{GenericComm} configuration wires \code{AMStandard} to the lower-level components providing radio and serial port networking). \end{itemize} \subsection{Bare Commands and Events} \label{sec:bare} Commands or events can be included directly as specification elements by including a standard C function declaration with \kw{command} or \kw{event} as its storage class specifier: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent specification-element:\\ \> declaration\\ \> \ldots\\ \\ storage-class-specifier: \emph{also one of}\\ \> \kw{command} \kw{event} \kw{async}\\ \end{tabbing} \end{quote} It is a compile-time error if the \emph{declaration} is not a function declaration with the \kw{command} or \kw{event} storage class. As in interfaces, \kw{async} indicates that the command or event can be called from an interrupt handler. These bare command and events belong to the object name space of the specification's scope (Section~\ref{sec:scoping}). As with interface declarations, bare commands (bare events) can have instance parameters; these are placed before the function's regular parameter list, e.g., \code{command void send[uint8\_t id](int x)}: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent direct-declarator: \emph{also}\\ \> direct-declarator instance-parameters \kw{(} parameter-type-list \kw{)}\\ \> \ldots \end{tabbing} \end{quote} If instance parameters are present, the declaration specifies a \emph{bare, parameterised command} (\emph{bare, parameterised event}). Note that instance parameters are not allowed on commands or events inside interface definitions. Module \code{M} of Figure~\ref{fig:wiring} (Section~\ref{sec:wiring-semantics}) shows an example of a component specification with a bare command. \subsection{Other Declarations in Specifications} \label{sec:spec-other} A component specification can also include regular declarations (these belong to the specification scope): \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent uses-provides: \emph{also}\\ \> declaration\\ \end{tabbing} \end{quote} These declarations must be either \kw{typedef}s, or tagged type declarations. For example, \begin{quote} \begin{verbatim} module Fun { typedef int fun_t; enum { MYNUMBER = 42 }; } implementation { ... } \end{verbatim} \end{quote} Note that declaration of an \kw{enum} implicitly places enum constants in the component's specification scope. \subsection{Command and Event Terminology} We say that a bare command (event) $F$ provided in the specification of component $K$ is \emph{provided command (event)} $F$ of $K$; similarly, a bare command (event) used in the specification of component $K$ is \emph{used command (event)} $F$ of $K$. A command $F$ in a provided interface $X$ of component $K$ is provided command $X.F$ of $K$; a command $F$ in a used interface $X$ of $K$ is used command $X.F$ of $K$; an event $F$ in a provided interface $X$ of $K$ is used event $X.F$ of $K$; and an event $F$ in a used interface $X$ of $K$ is provided event $X.F$ of $K$ (note the reversal of used and provided for events due to the bidirectional nature of interfaces). We use Greek letters $\alpha, \beta, \ldots$ to refer to any command or event of a component when the distinction between bare commands (events) and commands (events) in interfaces is not relevant. Commands or events $\alpha$ of $K$ are parameterised if the specification element to which they correspond is parameterised. We will often simply refer to the ``command or event $\alpha$ of $K$'' when the used/provided distinction is not relevant. \section{Component Definition} \label{sec:component} A \nesc component definition has a name, optional arguments, a specification and an implementation: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent component:\\ \> comp-kind identifier comp-parameters\opt component-specification implementation\opt\\ \\ comp-kind:\\ \> \kw{module}\\ \> \kw{configuration}\\ \> \kw{component}\\ \> \kw{generic module}\\ \> \kw{generic configuration}\\ \\ implementation:\\ \> module-implementation\\ \> configuration-implementation \end{tabbing} \end{quote} The component name belongs to the component name space of the global scope, hence must be distinct from other components and from interface definitions. There are three ways a component can be implemented: \emph{modules} are components which are implemented with C code (Section~\ref{sec:module}), \emph{binary components} are components which are only available in binary form (Section~\ref{sec:binary}), and \emph{configurations} are components which are implemented by assembling other components (Section~\ref{sec:configuration}). Components with parameters are called \emph{generic components}, they must be instantiated in a configuration before they can be used (Section~\ref{sec:configuration}). Components without parameters exist as a single instance which is implicitly instantiated. The component's definition must reflect these distinctions (the \emph{comp-kind} rule): for instance, a generic module \code{A} is defined with \code{generic module A() \{}\ldots, a non-generic configuration \code{B} is defined with \code{configuration B \{}\ldots Binary components cannot be generic. \subsection{Generic Components} \label{sec:generic-components} Generic component parameter lists are similar to function parameter lists, but allow for type parameters by (re)using the \kw{typedef} keyword: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent comp-parameters:\\ \> \kw{(} component-parameter-list \kw{)}\\ \\ component-parameter-list:\\ \> component-parameter\\ \> component-parameter-list \kw{,} component-parameter\\ \\ component-parameter:\\ \> parameter-declaration\\ \> \kw{typedef} identifier \end{tabbing} \end{quote} The parameters belong to the object name space of the component's parameter scope (Section~\ref{sec:scoping}), and are hence visible both in the component's specification and implementation. Non-type parameters must be of arithmetic or \code{char[]} type. These parameters can be used as follows: \begin{itemize} \item Type parameters can be used as if the argument was of some unknown \kw{typedef}'d type. Additionally, type parameters can be restricted to integral or numerical types, allowing integral or numerical operations to be used on the type. For more details, see Section~\ref{sec:type-parameters}. \item Non-type parameters are constants of some unknown value (for more details, see Section~\ref{sec:constant-folding}); they can be used in any constant expression. They cannot be assigned to. \end{itemize} An instantiation with arguments $a_1, \ldots, a_n$ of generic component $X$ with parameters $p_1, \ldots, p_n$ behaves like a new, non-generic component with the specification and implementation of $X$ where all uses of parameter $p_i$ have been replaced by the corresponding $a_i$ value or type.\footnote{The most straightforward implementation of these semantics for generic modules is to duplicate $X$'s code. In some cases (e.g., no arguments to $X$), a \nesc compiler might be able to share code between the instances of $X$ at some runtime cost.} Section~\ref{sec:load-component} details when generic components get instantiated. \subsection{Examples} Some examples (with simple specifications): \begin{quote} \begin{verbatim} module A { provides interface X; } ... component B { uses interface X } // no implementation for binary components! generic configuration B() { uses interface Y; } ... generic module AQueue(int n, typedef t) { provides interface Queue; } ... \end{verbatim} \end{quote} \code{A} is a simple module, \code{B} a generic configuration with no arguments but which can be instantiated multiple times, \code{AQueue} a generic module implementing an \code{n} entry queue with elements of type \code{t}. Note how \code{AQueue} instantiates the generic interface \code{Queue} with its type parameter \code{t}. \section{Component Implementation: Modules} \label{sec:module} Modules implement a component specification with C code: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent module-implementation:\\ \> \kw{implementation} \kw{\{} translation-unit \kw{\}}\\ \end{tabbing} \end{quote} where \emph{translation-unit} is a list of C declarations and definitions (see K\&R~\cite[pp234--239]{kandr}). The top-level declarations of the module's \emph{translation-unit} belong to the module's implementation scope (Section~\ref{sec:scoping}). These declarations have indefinite extent and can be: any standard C declaration or definition, a task declaration or definition (placed in the object name space), a command or event implementation. \subsection{Implementing the Module's Specification} The \emph{translation-unit} must implement all provided commands (events) $\alpha$ of the module (i.e., all commands in provided interfaces, all events in used interfaces, and all bare, provided commands and events). A module can call any of its commands and signal any of its events. These command and event implementations are specified with the following C syntax extensions: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent storage-class-specifier: \emph{also one of}\\ \> \kw{command} \kw{event} \kw{async}\\ \\ declaration-specifiers: \emph{also}\\ \> \kw{default} declaration-specifiers\\ \\ direct-declarator: \emph{also}\\ \> identifier \kw{.} identifier \\ \> direct-declarator interface-parameters \kw{(} parameter-type-list \kw{)}\\ \end{tabbing} \end{quote} The implementation of non-parameterised command or event $\alpha$ has the syntax of a C function definition for $\alpha$ (note the extension to \emph{direct-declarator} to allow \code{.} in function names) with storage class \kw{command} or \kw{event}. Additionally, the \kw{async} keyword must be included iff it was included in $\alpha$'s declaration. For example, in a module that provides interface \code{Send} of type \kw{SendMsg} (shown at the start of Section~\ref{sec:interface}): \begin{quote} \begin{verbatim} command result_t Send.send(uint16_t address, uint8_t length, TOS_MsgPtr msg) { ... return SUCCESS; } \end{verbatim} \end{quote} The implementation of parameterised command or event $\alpha$ with instance parameters $P$ has the syntax of a C function definition for $\alpha$ with storage class \kw{command} or \kw{event} where the function's regular parameter list is prefixed with the parameters $P$ within square brackets. These instance parameter declarations $P$ belong to $\alpha$'s function-parameter scope and have the same extent as regular function parameters. For example, in a module that provides interface \code{Send[uint8\_t id]} of type \kw{SendMsg}: \begin{quote} \begin{verbatim} command result_t Send.send[uint8_t id](uint16_t address, uint8_t length, TOS_MsgPtr msg) { ... return SUCCESS; } \end{verbatim} \end{quote} Compile-time errors are reported when: \begin{itemize} \item There is no implementation for a provided command or event. \item The type signature, optional interface parameters and presence or absence of the \kw{async} keyword of a command or event does not match that given in the module's specification. \end{itemize} \subsection{Calling Commands and Signaling Events} The following extensions to C syntax are used to call events and signal commands: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent postfix-expression:\\ \> postfix-expression \kw{[} argument-expression-list \kw{]}\\ \> call-kind\opt primary \kw{(} argument-expression-list\opt \kw{)}\\ \> \ldots \\\\ call-kind: \emph{one of}\\ \> \kw{call} \kw{signal} \kw{post} \end{tabbing} \end{quote} A non-parameterised command $\alpha$ is called with \code{call $\alpha$(...)}, a non-parameterised event $\alpha$ is signaled with \code{signal $\alpha$(...)}. For instance, in a module that uses interface \code{Send} of type \kw{SendMsg}: \code{call Send.send(1, sizeof(Message), \&msg1)}. A parameterised command $\alpha$ (respectively, an event) with $n$ instance parameters of type $\tau_1, \ldots, \tau_n$ is called with instance arguments $e_1, \ldots, e_n$ as follows: \code{call $\alpha$[$e_1, \ldots, e_n$](...)} (respectively, \code{signal $\alpha$[$e_1, \ldots, e_n$](...)}). Interface argument $e_i$ must be assignable to type $\tau_i$; the actual interface argument value is the value of $e_i$ cast to type $\tau_i$. For instance, in a module that uses interface \code{Send[uint8\_t id]} of type \kw{SendMsg}: \begin{quote} \begin{verbatim} int x = ...; call Send.send[x + 1](1, sizeof(Message), &msg1); \end{verbatim} \end{quote} Execution of commands and events is immediate, i.e., \kw{call} and \kw{signal} behave similarly to function calls. The actual command or event implementations executed by a \code{call} or \code{signal} expression depend on the wiring statements in the program's configurations. These wiring statements may specify that 0, 1 or more implementations are to be executed. When more than 1 implementation is executed, we say that the module's command or event has ``fan-out''. A module can specify a default implementation for a used command or event $\alpha$ (a compile-time error occurs if a default implementation is supplied for a provided command or event). Default implementations are executed when $\alpha$ is not connected to any command or event implementation (see Section~\ref{sec:wiring-semantics}). A default command or event is defined by prefixing a command or event implementation with the \kw{default} keyword: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent declaration-specifiers: \emph{also}\\ \> \kw{default} declaration-specifiers\\ \end{tabbing} \end{quote} For instance, in a in a module that uses interface \code{Send} of type \kw{SendMsg}: \begin{quote} \begin{verbatim} default command result_t Send.send(uint16_t address, uint8_t length, TOS_MsgPtr msg) { return SUCCESS; } /* call is allowed even if interface Send is not connected */ ... call Send.send(1, sizeof(Message), &msg1) ... \end{verbatim} \end{quote} Section~\ref{sec:wiring-semantics} specifies what command or event implementations are actually executed and what result gets returned by \code{call} and \code{signal} expressions. \subsection{Tasks} A task is an independent locus of control defined by a function of storage class \kw{task} returning \kw{void} and with no arguments: \code{task void myTask() \{ ... \}}.\footnote{\nesc functions with no arguments are declared with \code{()}, not \code{(void)}. See Section~\ref{sec:misc-void}.} A task can also have a forward declaration, e.g., \code{task void myTask();}. Tasks are posted for later execution by prefixing a call to the task with \kw{post}, e.g., \code{post myTask()}. Post returns immediately; its return value is 1 if the task was successfully posted, 0 otherwise. The type of a post expression is \code{unsigned char}. \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent storage-class-specifier: \emph{also one of}\\ \> \kw{task}\\ \\ call-kind: \emph{also one of}\\ \> \kw{post} \end{tabbing} \end{quote} Section~\ref{sec:concurrency}, which presents \nesc's concurrency model, explains when tasks get executed. \subsection{Atomic statements} Atomic statements: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent atomic-stmt: \\ \> \kw{atomic} statement\\ \end{tabbing} \end{quote} guarantee that the statement is executed ``as-if'' no other computation occurred simultaneously, and furthermore any values stored inside an atomic statement are visible inside all subsequent atomic statements. Atomic statements are used to implement mutual exclusion, for updates to concurrent data structures, etc. The following example uses \kw{atomic} to prevent concurrent execution of \code{do\_something}: \begin{verbatim} bool busy; // global void f() { // called from an interrupt handler bool available; atomic { available = !busy; busy = TRUE; } if (available) do_something; atomic busy = FALSE; } \end{verbatim} Atomic sections should be short, though this is not currently enforced in any way. Except for \kw{return} statements, control may only flow ``normally'' in or out of on atomic statement: any \kw{goto}, \kw{break} or \kw{continue} that jumps in or out of an atomic statement is an error. A \kw{return} statement is allowed inside an atomic statement; at runtime the atomic section ends after evaluating the returned expression (if any) but before actually returning from the function. Section~\ref{sec:concurrency} discusses the relation between \kw{atomic}, \nesc's concurrency model, and the data-race detector. \section{Component Implementation: Binary Components} \label{sec:binary} Binary components are declared with the \kw{component} keyword and have no \kw{implementation} section. Instead, program's using binary components must be linked with an object file providing the binary component's implementation --- this object file might be the result of compiling a different \nesc program. This object file must provide definitions for the provided commands and events of the binary component, and can call its used commands and events. For more details on external linkage rules for \nesc, see Section~\ref{sec:linkage}. Note that \kw{default} commands and events (see Sections~\ref{sec:module} and~\ref{sec:wiring-semantics}) do not work across binary component boundaries --- the used commands and events of a binary component must be fully wired. \section{Component Implementation: Configurations} \label{sec:configuration} Configurations implement a component specification by selecting regular components or instantiating generic components, and then connecting (``wiring'') these components together. The implementation section of a configuration consists of a list of configuration elements: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent configuration-implementation:\\ \> \kw{implementation} \kw{\{} configuration-element-list\opt \kw{\}}\\ \\ configuration-element-list:\\ \> configuration-element\\ \> configuration-element-list configuration-element\\ \\ configuration-element:\\ \> components\\ \> connection\\ \> declaration\\ \\ \end{tabbing} \end{quote} A \emph{components} element specifies the components that are used to build this configuration (Section~\ref{sec:config-components}), a \emph{connection} specifies a single wiring statement (Section~\ref{sec:wiring}), and a \emph{declaration} can declare a \kw{typedef} or tagged type (other C declarations are compile-time errors) (Section~\ref{sec:config-decls}). A configuration $C$'s wiring statements connects two sets of specification elements: \begin{itemize} \item $C$'s specification elements. In this section, we refer to these as \emph{external} specification elements. \item The specification elements of the components referred to instantiated in $C$. We refer to these as \emph{internal} specification elements. \end{itemize} \subsection{Included components} \label{sec:config-components} A \emph{components} elements specifies some components used to build this configuration. These can be: \begin{itemize} \item A non-generic component $X$. Non-generic components are implicitly instantiated, references to $X$ in different configurations all refer to the same component. \item An instantiation of a generic component $Y$. Instantiations of $Y$ in different configurations, or multiple instantiations in the same configuration represent different components (see Section~\ref{sec:generic-components}). \end{itemize} The syntax of \emph{components} is as follows: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent components:\\ \> \kw{components} component-line \kw{;}\\ \\ component-line:\\ \> component-ref instance-name\opt\\ \> component-line \kw{,} component-ref instance-name\opt\\ \\ instance-name:\\ \> \kw{as} identifier\\ \\ component-ref:\\ \> identifier\\ \> \kw{new} identifier \kw{(} component-argument-list \kw{)}\\ \\ component-argument-list:\\ \> component-argument\\ \> component-argument-list \kw{,} component-argument\\ \\ component-argument:\\ \> expression\\ \> type-name \end{tabbing} \end{quote} Each \emph{component-ref} specifies a non-generic component $X$ by simply giving its name (a compile-time error occurs if $X$ is generic) and a generic component $Y$ with $\kw{new} Y(args)$ (a compile-time error occurs if $Y$ is not generic). The arguments to $Y$ must match the number of parameters of $Y$'s definition, and: \begin{itemize} \item If the parameter is a type parameter, then the argument must be a type which is not incomplete, or of function or array type. \item If the parameter is of type \code{char[]}, the argument must be a string constant. \item If the parameter is of arithmetic type, the argument must be a constant whose value is in the range of the parameter type. \end{itemize} Within a \emph{connection}, a component specified in \emph{components} is referred to by: \begin{itemize} \item The name explicitly specified by the \code{X as Y} syntax (\emph{instance-name}). Use of \kw{as} is necessary, e.g., when instantiating the same generic component more than once in a given configuration. \item The name of the component definition (\code{components new X(), Y;} is the same as \code{components new X() as X, Y as Y;}). \end{itemize} The names specified by \emph{components} elements belong to the object name space of the component's implementation scope (Section~\ref{sec:scoping}). This \code{NoWiring} configuration: \begin{quote} \begin{verbatim} configuration NoWiring { } implementation { components A, new AQueue(10, int); components new AQueue(20, float) as SecondQueue; } \end{verbatim} \end{quote} selects component \code{A}, and instantiates generic component \code{AQueue} twice. The two instances of \code{AQueue} are known as \code{AQueue} and \code{SecondQueue} within \code{NoWiring}. \subsection{Wiring} \label{sec:wiring} Wiring is used to connect specification elements (interfaces, commands, events) together. This section and the next (Section~\ref{sec:implicit}) define the syntax and compile-time rules for wiring. Section~\ref{sec:wiring-semantics} details how a program's wiring statements dictate which functions get called by the \kw{call} and \kw{signal} expressions found in modules. \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent connection:\\ \> endpoint \kw{=} endpoint\\ \> endpoint \kw{->} endpoint\\ \> endpoint \kw{<-} endpoint\\ \\ endpoint:\\ \> identifier-path \\ \> identifier-path \kw{[} argument-expression-list \kw{]}\\ \\ identifier-path:\\ \> identifier\\ \> identifier-path \kw{.} identifier\\ \end{tabbing} \end{quote} Wiring statements connect two \emph{endpoints}. The \emph{identifier-path} of an \emph{endpoint} specifies a specification element (either internal or external). The \emph{argument-expression-list} optionally specifies instance arguments. We say that an endpoint is parameterised if its specification element is parameterised and the endpoint has no arguments. A compile-time error occurs if an endpoint has arguments and any of the following is true: \begin{itemize} \item Some arguments is not a constant expression. \item The endpoint's specification element is not parameterised. \item There are more (or less) arguments than there are parameters on the specification element. \item The argument's values are not in range for the specification element's parameter types. \end{itemize} A compile-time error occurs if the \emph{identifier-path} of an \emph{endpoint} is not of one the three following forms: \begin{itemize} \item $X$, where $X$ names an external specification element. \item $K.X$ where $K$ is a component from the \emph{component-list} and $X$ is a specification element of $K$. \item $K$ where $K$ is a some component name from the \emph{component-list}. This form is used in implicit connections, discussed in Section~\ref{sec:implicit}. This form cannot be used when arguments are specified. Note that a component name can hide an external specification element, preventing the element from being wired: \begin{quote} \begin{verbatim} configuration AA { provides interface X as Y; } implementation { components Z as Y, Z2 as Y2; Y /* refers to component Z, not interface X */ -> Y2.A; } \end{verbatim} \end{quote} Hiding specification elements will always result in a compile-time error as external specification elements must all be wired. \end{itemize} There are three wiring statements in \nesc: \begin{itemize} \item \emph{endpoint}$_1$ \code{=} \emph{endpoint}$_2$ \ (equate wires): Any connection involving an external specification element. These effectively make two specification elements equivalent. Let $S_1$ be the specification element of \emph{endpoint}$_1$ and $S_2$ that of \emph{endpoint}$_2$. One of the following two conditions must hold or a compile-time error occurs: \begin{itemize} \item $S_1$ is internal, $S_2$ is external (or vice-versa) and $S_1$ and $S_2$ are both provided or both used, \item $S_1$ and $S_2$ are both external and one is provided and the other used. \end{itemize} \item \emph{endpoint}$_1$ \code{->} \emph{endpoint}$_2$ \ (link wires): A connection between two internal specification elements. Link wires always connect a used specification element specified by \emph{endpoint}$_1$ to a provided one specified by \emph{endpoint}$_2$ . If these two conditions do not hold, a compile-time error occurs. \item \emph{endpoint}$_1$ \code{<-} \emph{endpoint}$_2$ is equivalent to \emph{endpoint}$_2$ \code{->} \emph{endpoint}$_1$. \end{itemize} In all three kinds of wiring, the two specification elements specified must be compatible, i.e., they must both be commands, or both be events, or both be interfaces. Also, if they are commands (or events), then they must both have the same function signature. If they are interfaces they must have the same interface type. If these conditions do not hold, a compile-time error occurs. If one endpoint is parameterised, the other must be too and must have the same parameter types; otherwise a compile-time error occurs. A configuration's external specification elements must all be wired or a compile-time error occurs. However, internal specification elements may be left unconnected (these may be wired in another configuration, or they may be left unwired if the modules have the appropriate \kw{default} event or command implementations, see Section~\ref{sec:wiring-semantics}). \subsection{Implicit Connections} \label{sec:implicit} It is possible to write \code{$K_1$ <- $K_2$.$X$} or \code{$K_1$.$X$ <- $K_2$} (and the same with \kw{=}, or \kw{->}). This syntax iterates through the specification elements of $K_1$ (resp. $K_2$) to find a specification element $Y$ such that \code{$K_1$.$Y$ <- $K_2$.$X$} (resp. \code{$K_1$.$X$ <- $K_2$.$Y$}) forms a valid connection. If exactly one such $Y$ can be found, then the connection is made, otherwise a compile-time error occurs. For instance, with: \begin{quote} \begin{verbatim} module M1 { module M2 { provides interface StdControl; uses interface StdControl as SC; } ... } ... configuration C { } implementation { components M1, M2; M2.SC -> M1; } \end{verbatim} \end{quote} The \code{M2.SC -> M1} line is equivalent to \code{M2.SC -> M1.StdControl}. \subsection{Declarations in Configurations} \label{sec:config-decls} As we saw above, like component specifications (Section~\ref{sec:spec-other}), configurations can include \kw{typedef} and tagged type declarations. These declarations belong to the configuration's implementation scope. Additionally, a configuration can refer to the \kw{typedef}s and enum constants of the components that it includes. To support this, the syntax for referring to \kw{typedef}s is extended as follows: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent typedef-name: \emph{also one of}\\ \> identifier \kw{.} identifier \end{tabbing} \end{quote} where the first identifier must refer to one of the configuration's components with an appropriate \kw{typedef} in its specification. Similarly, enum constants are referenced by extending C's field-reference syntax to allow the object to be the name of one of the configuration's components. For example: \begin{quote} \begin{verbatim} module M { typedef int t; enum { MAGIC = 54 }; } ... configuration C { } implementation { components M as Someone; typedef Someone.t Ct; enum { GREATERMAGIC = Someone.MAGIC + 1 }; } \end{verbatim} \end{quote} \subsection{Examples} The first example shows all possible wiring cases (comments within the example): \begin{quote} \begin{verbatim} configuration All { provides interface A as ProvidedA1; provides interface A as ProvidedA2; provides interface A as ProvidedA3; uses interface A as UsedA1; } implementation { components new MyComponent() as Comp1, new MyComponent() as Comp2; // equate our interface ProvidedA1 with MyA provided by Comp1 ProvidedA1 = Comp1.MyA; // the same, for ProvidedA2 and MyA of Comp2. We rely on the implicit // connection to avoid naming MyA ProvidedA2 = Comp2; // An equate wire connecting ProvidedA3 with UsedA1. We're just passing // the interface through ProvidedA3 = UsedA1; // Link some B interfaces together: Comp1.UsedB -> Comp2.MyB; // fully explicit connection Comp1 -> Comp2.MyB; // implicit equivalent of above line Comp1 <- Comp2.UsedB; // implicit equivalent of Comp2.UsedB -> Comp1.MyB } generic module MyComponent() { provides interface A as MyA; provides interface B as MyB; uses interface B as UsedB; } implementation { ... } \end{verbatim} \end{quote} The same specification element may be connected multiple times, e.g.,: \begin{quote} \begin{verbatim} configuration C { provides interface X; } implementation { components C1, C2; X = C1.X; X = C2.X; } \end{verbatim} \end{quote} In this example, the multiple wiring will lead to multiple signalers (``fan-in'') for the events in interface \code{X} and for multiple functions being executed (``fan-out'') when commands in interface \code{X} are called. Note that multiple wiring can also happen when two configurations independently wire the same interface, e.g., the following example wires \code{C2.Y} twice: \begin{quote} \begin{verbatim} configuration C { } configuration D { } implementation { implementation { components C1, C2; components C3, C2; C1.Y -> C2.Y; C3.Y -> C2.Y; } } \end{verbatim} \end{quote} \subsection{Wiring Semantics} \label{sec:wiring-semantics} We first explain the semantics of wiring in the absence of parameterised interfaces. Section~\ref{sec:wiring-parms} below covers parameterised interfaces. Section~\ref{sec:wiring-reqs} specifies requirements on the wiring statements of an application when viewed as a whole. We will use the simple application of Figure~\ref{fig:wiring} as our running example. For the purposes of this section, we will assume that all instantiations of generic components have been expanded into non-generic components as explained in Sections~\ref{sec:generic-components} and~\ref{sec:load-component}. \begin{figure} \begin{verbatim} interface X { module M { command int f(); provides interface X as P; event bool g(int x); uses interface X as U; } provides command void h(); } implementation { ... } configuration C { provides interface X; provides command void h2(); } implementation { components M; X = M.P; M.U -> M.P; h2 = M.h; } \end{verbatim} \caption{Simple Wiring Example} \label{fig:wiring} \end{figure} We define the meaning of wiring in terms of \emph{intermediate functions}.\footnote{\nesc can be compiled without explicit intermediate functions, so the behaviour described in this section has no runtime cost beyond the actual function calls and the runtime dispatch necessary for parameterised commands or events.} There is one intermediate function $I_\alpha$ for every command or event $\alpha$ of every component. For instance, in Figure~\ref{fig:wiring}, module M has intermediate functions $I_\code{M.P.f}$, $I_\code{M.P.g}$, $I_\code{M.U.f}$, $I_\code{M.U.g}$, $I_\code{M.h}$. In examples, we name intermediate functions based on their component, interface name and function name. An intermediate function is either used or provided. Each intermediate function takes the same arguments as the corresponding command or event in the component's specification. The body of an intermediate function $I$ is a list of calls (executed sequentially) to other intermediate functions. These other intermediate functions are the functions to which $I$ is connected by the application's wiring statements. The arguments $I$ receives are passed on to the called intermediate functions unchanged. The result of $I$ is a list of results (the type of this list's elements is the result type of the command or event corresponding to $I$), built by concatenating the result lists of the called intermediate functions. An intermediate function which returns an empty result list corresponds to an unconnected command or event; an intermediate function which returns a list of two or more elements corresponds to ``fan-out''. \paragraph{Intermediate Functions and Configurations} The wiring statements in a configuration specify the body of intermediate functions. We first expand the wiring statements to refer to intermediate functions rather than specification elements, and we suppress the distinction between \code{=} and \code{->} wiring statements. We write \code{$I_1$ <-> $I_2$} for a connection between intermediate functions \code{$I_1$} and \code{$I_2$}. For instance, configuration \code{C} from Figure~\ref{fig:wiring} specifies the following intermediate function connections:\\ \begin{tabular}{ccc} $I_\code{C.X.f}$ \code{<->} $I_\code{M.P.f}$ & $I_\code{M.U.f}$ \code{<->} $I_\code{M.P.f}$ & $I_\code{C.h2}$ \code{<->} $I_\code{M.h}$ \\ $I_\code{C.X.g}$ \code{<->} $I_\code{M.P.g}$ & $I_\code{M.U.g}$ \code{<->} $I_\code{M.P.g}$ \end{tabular} In a connection \code{$I_1$ <-> $I_2$} from a configuration $C$ one of the two intermediate functions is the \emph{callee} and the other is the \emph{caller}. The connection simply specifies that a call to the callee is added to the body of the caller. \code{$I_1$} (similarly, \code{$I_2$}) is a callee if any of the following conditions hold (we use the internal, external terminology for specification elements with respect to the configuration $C$ containing the connection): \begin{itemize} \item If \code{$I_1$} corresponds to an internal specification element that is a bare, provided command or event. \item If \code{$I_1$} corresponds to an external specification element that is a bare, used command or event. \item If \code{$I_1$} corresponds to a command of interface instance $X$, and $X$ is an internal, provided or external, used specification element. \item If \code{$I_1$} corresponds to an event of interface instance $X$, and $X$ is an external, provided or internal, used specification element. \end{itemize} If none of these conditions hold, \code{$I_1$} is a caller. The rules for wiring in Section~\ref{sec:wiring} ensure that a connection \code{$I_1$ <-> $I_2$} cannot connect two callers or two callees. In configuration \code{C} from Figure~\ref{fig:wiring}, $I_\code{C.X.f}$, $I_\code{C.h2}$, $I_\code{M.P.g}$, $I_\code{M.U.f}$ are callers and $I_\code{C.X.g}$, $I_\code{M.P.f}$, $I_\code{M.U.g}$, $I_\code{M.h}$ are callees. Thus the connections of \code{C} specify that a call to $I_\code{M.P.f}$ is added to $I_\code{C.X.f}$, a call to $I_\code{C.X.g}$ is added to $I_\code{M.P.g}$, etc. \paragraph{Intermediate Functions and Modules} The C code in modules calls, and is called by, intermediate functions. The intermediate function $I$ for provided command or event $\alpha$ of module $M$ contains a single call to the implementation of $\alpha$ in $M$. Its result is the singleton list of this call's result. The expression \code{call} $\alpha(e_1, \ldots, e_n)$ is evaluated as follows: \begin{itemize} \item The arguments $e_1, \ldots, e_n$ are evaluated, giving values $v_1, \ldots, v_n$. \item The intermediate function $I$ corresponding to $\alpha$ is called with arguments $v_1, \ldots, v_n$, with results list $L$. \item If $L = (w)$ (a singleton list), the result of the \code{call} is $w$. \item If $L = (w_1, w_2, \ldots, w_m)$ (two or more elements), the result of the \code{call} depends on the result type $\tau$ of $\alpha$. If $\tau = \kw{void}$, then the result is \kw{void}. Otherwise, $\tau$ must have an associated \emph{combining function} $c$ (Section~\ref{sec:attributes} shows how combining functions are associated with types), or a compile-time error occurs. The combining function takes two values of type $\tau$ and returns a result of type $\tau$. The result of the \kw{call} is $c(w_1, c(w_2, \ldots, c(w_{m-1}, w_m)))$ (note that the order of the elements of $L$ was arbitrary). \item If $L$ is empty the default implementation for $\alpha$ is called with arguments $v_1, \ldots, v_n$, and its result is the result of the \code{call}. Section~\ref{sec:wiring-reqs} specifies that a compile-time error occurs if $L$ can be empty and there is no default implementation for $\alpha$. \end{itemize} The rules for \code{signal} expressions are identical. \paragraph{Example Intermediate Functions} Figure~\ref{fig:wiring-fns} shows the intermediate functions that are produced for the components of Figure~\ref{fig:wiring}, using a C-like syntax, where \code{list($x$)} produces a singleton list containing $x$, \code{empty\_list} is a constant for the 0 element list and \code{concat\_list} concatenates two lists. The calls to \code{M.P.f}, \code{M.U.g}, \code{M.h} represent calls to the command and event implementations in module \code{M} (not shown). \begin{figure} \begin{tabular}{ll} \tt list of int $I_\code{M.P.f}()$ \{ & \tt list of bool $I_\code{M.P.g}$(int x) \{ \\ \tt \ \ return list(M.P.f()); & \tt \ \ list of bool r1 = $I_\code{C.X.g}$(x); \\ \tt \} & \tt \ \ list of bool r1 = $I_\code{M.U.g}$(x); \\ & \tt \ \ return list\_concat(r1, r2); \\ & \tt \} \\ \\ \tt list of int $I_\code{M.U.f}()$ \{ & \tt list of bool $I_\code{M.U.g}$(int x) \{ \\ \tt \ \ return $I_\code{M.P.f}$(); & \tt \ \ return list(M.U.g(x)); \\ \tt \} & \tt \} \\ \\ \tt list of int $I_\code{C.X.f}()$ \{ & \tt list of bool $I_\code{C.X.g}$(int x) \{ \\ \tt \ \ return $I_\code{M.P.f}$(); & \tt \ \ return empty\_list; \\ \tt \} & \tt \} \\ \\ \tt list of void $I_\code{C.h2}()$ \{ & \tt list of void $I_\code{M.h}$() \{ \\ \tt \ \ return $I_\code{M.h}$(); & \tt \ \ return list(M.h()); \\ \tt \} & \tt \} \\ \end{tabular} \caption{Intermediate Functions for Figure~\ref{fig:wiring}} \label{fig:wiring-fns} \end{figure} \subsubsection{Wiring and Parameterised Functions} \label{sec:wiring-parms} If a command or event $\alpha$ of component $K$ has instance parameters of type $\tau_1, \ldots, \tau_n$ then there is an intermediate function $I_{\alpha,v_1,\ldots,v_n}$ for every distinct tuple $(v_1:\tau_1, \ldots, v_n:\tau_n)$. In modules, if intermediate function $I_{v_1, \ldots, v_n}$ corresponds to parameterised, provided command (or event) $\alpha$ then the call in $I_{v_1, \ldots, v_n}$ to $\alpha$'s implementation passes values $v_1, \ldots, v_n$ as the values for $\alpha$'s instance parameters. The expression \code{call} $\alpha[e'_1, \ldots, e'_m](e_1, \ldots, e_n)$ is evaluated as follows: \begin{itemize} \item The arguments $e_1, \ldots, e_n$ are evaluated, giving values $v_1, \ldots, v_n$. \item The arguments $e'_1, \ldots, e'_m$ are evaluated, giving values $v'_1, \ldots, v'_m$. \item The $v'_i$ values are cast to type $\tau_i$, where $\tau_i$ is the type of the $i$th interface parameter of $\alpha$. \item The intermediate function $I_{v'_1,\ldots,v'_m}$ corresponding to $\alpha$ is called with arguments $v_1, \ldots, v_n$, with results list $L$.\footnote{This call typically involves a runtime selection between several command implementations - this is the only place where intermediate functions have a runtime cost.} \item If $L$ has one or more elements, the result of the \code{call} is produced as in the non-parameterised case. \item If $L$ is empty the default implementation for $\alpha$ is called with interface parameter values $v'_1, \ldots, v'_m$ and arguments $v_1, \ldots, v_n$, and its result is the result of the \code{call}. Section~\ref{sec:wiring-reqs} specifies that a compile-time error occurs if $L$ can be empty and there is no default implementation for $\alpha$. \end{itemize} The rules for \code{signal} expressions are identical. There are two cases when an endpoint in a wiring statement refers to a parameterised specification element: \begin{itemize} \item The endpoint specifies parameter values $v_1, \ldots, v_n$. If the endpoint corresponds to commands or events $\alpha_1, \ldots, \alpha_m$ then the corresponding intermediate functions are $I_{\alpha_1,v_1,\ldots,v_n}$, \ldots, $I_{\alpha_m,v_1,\ldots,v_n}$ and wiring behaves as before. \item The endpoint does not specify parameter values. In this case, both endpoints in the wiring statement correspond to parameterised specification elements, with identical interface parameter types $\tau_1, \ldots, \tau_n$. If one endpoint corresponds to commands or events $\alpha_1, \ldots, \alpha_m$ and the other to corresponds to commands or events $\beta_1, \ldots, \beta_m$, then there is a connection $I_{\alpha_i, w_1, \ldots, w_n}$ \code{<->} $I_{\beta_i, w_1,\ldots, w_n}$ for all $1 \leq i \leq m$ and all tuples $(w_1:\tau_1, \ldots, w_n:\tau_n)$ (i.e., the endpoints are connected for all corresponding parameter values). \end{itemize} \subsubsection{Application-level Requirements} \label{sec:wiring-reqs} There are two requirement that the wiring statements of an application must satisfy, or a compile-time error occurs: \begin{itemize} \item There must be no infinite loop involving only intermediate functions. \item At every \code{call $\alpha$} (or \code{signal $\alpha$}) expression in the application's modules: \begin{itemize} \item If the call is unparameterised: if the call returns an empty result list there must be a default implementation of $\alpha$ (the number of elements in the result list depends only on the wiring). \item If the call is parameterised: if substitution of any values for the interface parameters of $\alpha$ returns an empty result list there must be a default implementation of $\alpha$ (the number of elements in the result list for a given parameter value tuple depends only on the wiring). Note that this condition does not consider the expressions used to specify interface parameter values at the call-site. \end{itemize} \end{itemize} \section{Concurrency in \nesc} \label{sec:concurrency} \nesc's execution model is based on run-to-completion \emph{tasks} (that typically represent the ongoing computation), and \emph{interrupt handlers} that are signaled asynchronously by hardware. The compiler relies on the user-provided \code{hwevent} and \code{atomic\_hwevent} attributes to recognise interrupt handlers (see Section~\ref{sec:attributes}). A scheduler for \nesc can execute tasks in any order, but must obey the run-to-completion rule (the standard \tinyos scheduler follows a FIFO policy). Because tasks are not preempted and run to completion, they are atomic with respect to each other, but are not atomic with respect to interrupt handlers. As this is a concurrent execution model, \nesc programs are susceptible to race conditions, in particular data races on the program's \emph{shared state}, i.e., its global and module variables (\nesc does not include dynamic memory allocation). Races are avoided either by accessing shared state only in tasks, or only within atomic statements. The \nesc compiler reports potential data races to the programmer at compile-time. Formally, we divide the code of a \nesc program into two parts: \begin{quote} \textbf{Synchronous Code (SC):} code (functions, commands, events, tasks) that is only reachable from tasks. \textbf{Asynchronous Code (AC):} code that is reachable from at least one interrupt handler. \end{quote} Although non-preemption eliminates data races among tasks, there are still potential races between SC and AC, as well as between AC and AC. To prevent data races, \nesc issues warnings for violations of the following rules: \begin{quote} {\sl {\bf Race-Free Invariant 1}}: If a variable $x$ is written in AC, then all accesses to $x$ must occur in atomic sections. {\sl {\bf Race-Free Invariant 2}}: If a variable $x$ is read in AC, then all writes to $x$ must occur in atomic sections. \end{quote} The body of a function $f$ called from an atomic statement is considered to be ``in'' the atomic statement as long as all calls to $f$ are ``in'' atomic statements. It is possible to introduce a race condition that the compiler cannot detect, but it must span multiple atomic statements or tasks and use storage in intermediate variables. \nesc may report data races that cannot occur in practice, e.g., if all accesses are protected by guards on some other variable. To avoid redundant messages in this case, the programmer can annotate a variable $v$ with the \kw{norace} storage-class specifier to eliminate all data race warnings for $v$. The \kw{norace} keyword should be used with caution. \nesc reports a compile-time error for any command or event that is AC and that was not declared with \kw{async}. This ensures that code that was not written to execute safely in an interrupt handler is not called inadvertently. \section{Attributes} \label{sec:attributes} All C and \nesc declarations can be decorated with \emph{attributes} (inspired by Java 1.5's attributes~\cite{java-attributes}) that: \begin{itemize} \item Avoid reserving lots of keywords and burdening the syntax. For example, \code{@integer()} is used to mark generic component type arguments that must be integer types (Section~\ref{sec:type-parameters}). \item Allow user-specified annotations which are accessible to external tools. The mechanism by which these user-specified attributes are accessed is beyond the scope of this reference manual; please see the \nesc compiler manual for details. \end{itemize} User-defined attributes must be declared prior to use, and have no effect on code generation except when the attribute is declared with \code{@macro(\ldots)}. The language-defined attributes are implicitly declared; their effects are described in Section~\ref{sec:attributes}. An attribute declaration is simply a \kw{struct} declaration where the \kw{struct}'s name is preceded by \code{@}: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent struct-or-union-specifier: \emph{also one of}\\ \> \kw{struct} \kw{@} identifier \kw{\{} struct-declaration-list \kw{\}}\\ \end{tabbing} \end{quote} A use of an attribute specifies the attribute's name and gives an initialiser (in parentheses) that must be valid for attribute's declaration: \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent attribute:\\ \> \kw{@} identifier \kw{(} initializer-list \kw{)}\\ \end{tabbing} \end{quote} Attributes can be placed on all C and \nesc declarations and definitions. Generally, attributes appear after the annotated object's name and associated arguments, but before any other syntactic elements (e.g., initialisers, function bodies, etc). See Appendix~\ref{sec:grammar} for the full set of rules. The attributes of $x$ are the union of all attributes on all declarations and definitions of $x$. Example: \begin{quote} \begin{verbatim} struct @myattr { int x; char *why; }; extern int z @myattr(5, "fun"); // simple use // a second attribute on z at it's definition int z @myattr(3, "morefun") = 22; // use on a function, with a C99-style initialiser void f(void) @myattr(.x=5, .why="for f") { ... } // use in a module, with an empty initialiser module X { provides interface I @myattr(); } ... \end{verbatim} \end{quote} \subsection{\nesc Attributes} \nesc includes seven predefined attributes with various effects. Except where otherwise specified, these take no arguments: \begin{itemize} \item \code{@C()}: This attribute is used for a C declaration or definition $d$ at the top-level of a module (it is ignored for all other declarations). It specifies that $d$'s should appear in the global C scope rather than in the module's per-component-implementation scope. This allows $d$ to be used (e.g., called if it is a function) from C code. \item \code{@spontaneous()}: This attribute can be used on any function $f$ (in modules or C code). It indicates that there are calls $f$ that are not visible in the source code. The C \code{main} function is a typical example. Section~\ref{sec:app} discusses how the \nesc compiler uses the \code{spontaneous} attribute during compilation. \item \code{@hwevent()}: This attribute can be used on any function $f$ (in modules or C code). It indicates that $f$ is an interrupt handler, i.e., that there are spontaneous calls to $f$ and that $f$ is AC (Section~\ref{sec:concurrency}). The use of \code{@hwevent()} implies \code{@spontaneous()}. \item \code{@atomic\_hwevent()}: This attribute can be used on any function $f$ (in modules or C code). This behaves the same as \code{@hwevent()}, but, additionally, informs \nesc that the body of $f$ behaves as if it were an \kw{atomic} statement (on typical hardware this means that this interrupt handler runs with interrupts disabled). The use of \code{@atomic\_hwevent()} implies \code{@spontaneous()}. Note that neither \code{@hwevent()} or \code{@atomic\_hwevent()} provide any linkage of $f$ with a particular interrupt handler. The mechanism by which that is achieved is platform-specific. Inside a function with the \code{@atomic\_hwevent()} attribute, a call to \code{\_\_nesc\_enable\_interrupt()} is assumed to terminate the implicit \kw{atomic} statement. This is useful for interrupt handlers which must start with interrupts disabled, but can reenable interrupts after a little work. \item \code{@combine($fnname$)}: This attribute specifies the combining function for a type in a \kw{typedef} declaration. The combining function specifies how to combine the multiple results of a call to a command or event which has ``fan-out''. For example: \begin{verbatim} typedef uint8_t result_t @combine("rcombine"); result_t rcombine(result_t r1, result_t r2) { return r1 == FAIL ? FAIL : r2; } \end{verbatim} specifies logical-and-like behaviour when combining commands (or events) whose result type is \code{result\_t}. See Section~\ref{sec:wiring-semantics} for the detailed semantics. A compile-time error occurs if the combining function $c$ for a type $t$ does not have the following type: \code{$t$ $c$($t$, $t$)}. \item \code{@integer()}, \code{@number()}: declare properties of generic component type parameters. See Section~\ref{sec:type-parameters}. \item \code{@macro({\em name})}, \code{@deputy\_scope()}: used to declare attributes used with the Deputy system that provides type-safety for C~\cite{deputy} and nesC~\cite{safe-tinyos}. See the separate ``Safe TinyOS'' documentation for more information. \end{itemize} Example of attribute use: \begin{quote} \begin{verbatim} module RealMain { ... } implementation { int main(int argc, char **argv) @C() @spontaneous() { ... } } \end{verbatim} \end{quote} This example declares that function \code{main} should actually appear in the C global scope (\code{@C()}), so that the linker can find it. It also declares that \code{main} can be called even though there are no function calls to \code{main} anywhere in the program (\code{@spontaneous()}). \subsection{Attributes in Documentation Comments} To reduce clutter due to annotations, nesC allows attributes placed within a documentation comment before a function signature to apply to that function's parameters and return type. Specifically, a comment of the form \begin{verbatim} /** ... @param '' */ \end{verbatim} before a function declaration or definition will replace the correspondingly named parameter with {\em parameter-declaration}. It is a compile-time error if the type doesn't match, i.e. the two declarations must only differ in their attributes (on the parameter or in its type). It is also a compile-time error if {\em parameter-declaration} does not name a parameter of the function. For instance: \begin{verbatim} struct @count { int size; }; /** f is an exiciting function. @param 'int *@count(n) x' x is an array of n ints. @param n n is size of array x. */ void f(int *x, int n); \end{verbatim} is the same as \begin{verbatim} struct @count { int size; }; void f(int *@count(n) x, int n); \end{verbatim} Macros can be used in the documentation comment, so the above could also be written: \begin{verbatim} #define COUNT(expr) @count(expr) struct @count { int size; }; /** f is an exiciting function. @param 'int *COUNT(n) x' x is an array of n ints. @param n n is the size of array x. */ void f(int *x, int n); \end{verbatim} For return types, a comment of the form \begin{verbatim} /** ... @return '' */ \end{verbatim} before a function declaration or definition will replace the function's return type with {\em type-name}. It is a compile-time error if the type doesn't match, i.e. the two types must only differ in their attributes. For instance: \begin{verbatim} struct @count { int size; }; /** g gives us some data. @param n n is the size of the returned data. @return 'int *@count(n)' the returned data is n ints. */ int *g(int n); \end{verbatim} is the same as \begin{verbatim} struct @count { int size; }; int *@count(n) g(int n); \end{verbatim} As with parameters, the type in \code{@return} may use macros. \section{External Types} \label{sec:external-types} External types are an extension to C that allows definition of types with a platform-independent representation and no alignment restriction (i.e., an arbitrary \code{char} array can be cast to, and accessed via, an external type). They are intended for communication with entities external to the \nesc program (e.g., other devices via a network), hence their name. \nesc has three kinds of external types: \begin{itemize} \item External base types are 2's complement integral types with a fixed size and endianness. These types are \code{nx\_int$N$\_t}, \code{nx\_uint$N$\_t}, \code{nxle\_int$N$\_t}, \code{nxle\_uint$N$\_t} for $N = 8, 16, 32, 64$. The \code{nx\_} types are big-endian, the \code{nxle\_} types are little endian, the \code{int} types are signed and the \code{uint} types are unsigned. Note that these types are not keywords. \item External array types are any array built from an external type, using the usual C syntax, e.g, \code{nx\_int16\_t x[10]}. \code External structures and unions are declared like C structures and unions, but using the \code{nx\_struct} and \code{nx\_union} keywords. An external structure can only contain external types as elements. Bitfields are supported as follows: \begin{itemize} \item Big-endian bitfields start filling from a byte's high-order bits, while little-endian bitfields fill from the low-order bits. \item Consecutive bitfields of the same endianness are packed together. Bitfields of different endianness are not stored in the same byte. \end{itemize} \end{itemize} External types have no alignment restrictions and external structures contain no byte padding (but there may be unused bits when bitfields are used). External types can be used exactly like regular C types.\footnote{The current \nesc compiler does not support using external base types in casts, or to declare initialised variables.} \section{Miscellaneous} \label{sec:misc} \subsection{Constant Folding in \nesc} \label{sec:constant-folding} There are two extensions to C's constant folding (see A.7.19 in K\&R~\cite{kandr}) in \nesc: \emph{constant functions} and \emph{unknown constants}. \emph{Constant functions} are functions provided by the \nesc language which return a compile-time constant. The definition of \nesc's constant functions is given in Section~\ref{sec:constant-functions}. An \emph{unknown constant} is a constant whose value is not known at some stage of semantic checking, e.g., non-type parameters to generic components are unknown constants when a generic component is loaded and checked. Unknown constants allow the definition of a generic component to be (mostly, see next paragraph) checked for correctness before its arguments' values are known. An expression involving an unknown constant is considered a constant expression if the resulting expression is constant irrespective of the unknown constant's value, with the following exceptions: $a / b$ and $a \% b$ can assume that $b$ is not zero. Constant expressions involving unknown constants are re-checked once the values of constant expressions become known.\footnote{The time at which the value of unknown constants become known is unspecified by this language definition.} As a result, the following generic component definition is legal: \begin{quote} \begin{verbatim} generic module A(int n) { } implementation { int s = 20 / n; } \end{verbatim} \end{quote} but the following instantiation will report a compile-time error: \begin{quote} \begin{verbatim} configuration B { } implementation { components new A(0) as MyA; } \end{verbatim} \end{quote} \subsection{Compile-time Constant Functions} \label{sec:constant-functions} \nesc currently has three constant functions: \begin{itemize} \item \code{unsigned int unique(char *identifier)} \\ \code{unsigned int uniqueN(char *identifier, unsigned int nb)} Given a program with $k$ uses of \code{uniqueN} with the same \code{identifier} and values $n_1, \ldots n_k$ for \code{nb}, each use returns an integer $u_i$ from the sequence $0 \ldots (\sum_{i=0}^k n_i) - 1$. Furthermore, the sequences $u_i \ldots u_i + n_i - 1$ do not overlap with each other. Note that $n_i = 0$ is allowed. The behaviour is undefined if $ \sum_{i=0}^k n_i >= \code{UINT\_MAX}$ (\code{UINT\_MAX} from \code{}). Less formally, \code{uniqueN("S", N)} allocates a sequence of \code{N} consecutive numbers distinct from all other sequences allocated for identifier \code{S}, returns the smallest value from the sequence, and guarantees that the sequences are compact (start at 0, no gaps between sequences). A use of \code{unique(S)} is short for \code{uniqueN(S, 1)}. The expansion of \code{uniqueN} calls happens after generic component instantiation (Section~\ref{sec:load-component}): calls to \code{uniqueN} in generic components return a different value in each instantiation. For purposes of checking constant expressions, \code{uniqueN($s$, $n$)} behaves as if it were an unknown constant. Using \code{unique}, a component providing a service (defined by interface \code{X}) can uniquely identify its clients with the following idiom: \begin{quote} \begin{verbatim} module XService { provides interface X[uint8_t id]; } implementation { ... } module UserOfX { uses interface X; } implementation { ... } configuration ConnectUserToService { } implementation { components XService, UserOfX; UserOfX.X -> XService.X[unique("X")]; } \end{verbatim} \end{quote} Each client of \code{XService} will be connected to interface \code{X} with a different \code{id}. \item \code{unsigned int uniqueCount(char *identifier)} \code{uniqueCount($s$)} returns the sum of all \code{nb} parameters for all uses of \code{uniqueN($s$, nb)}, or 0 if there are no calls to \code{uniqueN($s$)}. For purposes of checking constant expressions, \code{uniqueCount($s$)} behaves as if it were an unknown constant. The intended use of \code{uniqueCount} is for dimensioning arrays (or other data structures) which will be indexed using the numbers returned by \kw{unique} and \kw{uniqueN}. For instance, a \kw{Timer} service that identifies its clients (and hence each independent timer) via a parameterised interface and \kw{unique} can use \kw{uniqueCount} to allocate the correct number of timer data structures. \end{itemize} In the following example: \begin{quote} \begin{verbatim} generic module A() { } implementation { int x = unique("A"); int y = uniqueCount("A"); } configuration B { } implementation { components new A() as A1, new A() as A2; } \end{verbatim} \end{quote} \code{B.A1.y = B.A2.y = 2} and either \code{B.A1.x = 0, B.A2.x = 1} or \code{B.A1.x = 1, B.A2.x = 0}. \subsection{Type Parameters and C Type Checking} \label{sec:type-parameters} Generic interface and component definitions can have type parameters. Syntactically, type parameters behave the same as \kw{typedef}'d identifiers. When a generic component or interface is instantiated, the type parameter will be replaced with the argument type, which cannot be incomplete, of function or of array type. The size and alignment of a type parameter are an unknown constant (Section~\ref{sec:constant-folding}). The rules for assignment and type equivalence for a type parameter $t$ are simple: a value of type $t$ is assignable to an lvalue of type $t$ (extends A.7.17 in K\&R~\cite{kandr}) and type $t$ is only equivalent to itself (extends A.8.10 in K\&R~\cite{kandr}). If a type parameter $t$ has the \code{@number()} attribute (Section~\ref{sec:attributes}), the corresponding argument must be a numerical (integral or floating-point) type, and all numerical operations (i.e., those valid for floating-point types) are allowed on type $t$. If a type parameter $t$ has the \code{@integer()} attribute (Section~\ref{sec:attributes}), the corresponding argument must be an integral type, and all integral operations are allowed on type $t$. \subsection{Functions with no arguments, old-style C declarations} \label{sec:misc-void} \nesc functions with no arguments can be declared with \code{()} or \code{(void)}. Old-style C declarations (with \code{()}) and function definitions (parameters specified after the argument list) are not allowed in interfaces or components (and cause compile-time errors). Note that neither of these changes apply to C files (so that existing \file{.h} files can be used unchanged). \subsection{// comments} \nesc allows // comments in C, interface and component files. \section{\nesc Applications} \label{sec:app} A \nesc application has two executable parts: C declarations and definitions, and a set of components (non-generic components and instantiated generic components). The components are connected to each other via interfaces specified by a set of interface definitions. The C declarations and definitions, interfaces and components that form a \nesc application are determined by an on-demand loading process. The input to the \nesc compiler is a single non-generic component $K$. The \nesc compiler first loads a user-specified set of C files\footnote{\kw{ncc}, the TinyOS frontend for \nesc always loads the TinyOS \file{tos.h} file.} (Section~\ref{sec:load-c}), then loads the component definition for $K$ (Section~\ref{sec:load-component}). The resulting program contains: \begin{itemize} \item All C declarations from the initially loaded C files (Section~\ref{sec:load-c}). \item All C declarations from all component and interface definitions (Sections~\ref{sec:load-component} and~\ref{sec:load-intf}). \item All components output by the rules of Section~\ref{sec:load-component}. \end{itemize} Section~\ref{sec:cpp} discusses the interactions between \nesc and the C preprocessor. The external linkage rules for a compiled \nesc program are given in Section~\ref{sec:linkage}. The process by which C files, \nesc component and interface definitions are located is outside the scope of this reference manual; for details see the \file{ncc} and \kw{nescc} man pages. \subsection{Loading C file $X.h$} \label{sec:load-c} File $X.h$ is located and preprocessed. Changes made to C macros (via \code{\#define} and \code{\#undef}) are visible to all subsequently preprocessed files. The C declarations and definitions from the preprocessed $X$.h file are entered into the C global scope, and are therefore visible to all subsequently processed C files, interfaces and components. The \nesc keywords are not reserved when a C file is loaded in this fashion. \subsection{Loading Component Definition $K$} \label{sec:load-component} If $K$ has already been loaded, nothing more is done. Otherwise, file $K$.nc is located and preprocessed. Changes made to C macros (via \code{\#define} and \code{\#undef}) before the \kw{component}, \kw{module} and \kw{configuration} keyword are preserved and visible to all subsequently loaded files; changes made after this point are discarded. The preprocessed file is parsed using the following grammar (\emph{translation-unit} is a list of C declarations and function definitions): \begin{quote} \grammarshift \em \begin{tabbing} \grammarindent nesC-file: \\ \> translation-unit\opt interface\\ \> translation-unit\opt module\\ \> translation-unit\opt configuration \end{tabbing} \end{quote} Note that the \nesc keywords are reserved while parsing the C code in \emph{translation-unit}. If $K$.nc does not define module $K$ or configuration $K$, a compile-time error is reported. The component's definition is then processed (Sections~\ref{sec:component-spec},~\ref{sec:configuration}, and~\ref{sec:module}). All referenced component and interface definitions are loaded (see also Section~\ref{sec:load-intf}) during this processing. C declarations and definitions from a referenced component or interface definition $D$ are available after the first reference to $D$. Note however that macros defined in $D$ are not available in $K$ as $K$ was already preprocessed (see Section~\ref{sec:cpp} for more discussion of macros in \nesc). Finally, the set of components output by $K$ is defined by the following algorithm: Expand($K$): \begin{itemize} \item If $K$ is a generic component, no component is output. \item If $K$ is a non-generic module, $K$ is output. \item If $K$ is a non-generic configuration: for each component instantiation $\kw{new}\ L(a_1, \ldots, a_n)$ in $K$, a new component $X$ is created according to the rules of Section~\ref{sec:generic-components} and Expand($X$) is called recursively (instantiating further generic components if $L$ contained component instantiations). Then $K$ is output. \end{itemize} \subsection{Loading Interface Definition $I$} \label{sec:load-intf} If $I$ has already been loaded, nothing more is done. Otherwise, file $I$.nc is located and preprocessed. Changes made to C macros (via \code{\#define} and \code{\#undef}) before the \kw{interface} keyword are preserved and visible to all subsequently loaded files; changes made after this point are discarded. The preprocessed file is parsed following the \emph{nesC-file} production above. If $I$.nc does not define \code{interface $I$} a compile-time error is reported. Then $I$'s definition is processed (Section~\ref{sec:interface}). \subsection{\nesc and the C Preprocessor} \label{sec:cpp} During preprocessing, \nesc defines the \kw{NESC} symbol to a number XYZ which identifies the version of the \nesc language and compiler. For \nesc 1.2, XYZ is at least 120.\footnote{The \kw{NESC} symbol was not defined in versions of \nesc prior to 1.1.} The loading of component and interface definitions is driven by syntactic rules; as a result it must happen after preprocessing. Thus if a component $X$ references, e.g., an interface $I$, macros defined in $I$ cannot be used in $X$ even though $I$'s C declarations can be. We suggest the following structure to avoid confusion: \begin{enumerate} \item All C declarations, function definitions and macros should be placed in a \file{.h} file, e.g., \file{I.h}. This file should be wrapped in the usual \code{\#ifndef I\_H} / \code{\#define I\_H} / \code{\#endif} way. \item The file(s) with which the \file{.h} file is naturally associated (e.g., an interface \code{I}) should \code{\#include "I.h"}). \label{sec:cpp-natural} \item Files which wish to use the macros defined in the \file{.h} file should \code{\#include} it. \item Files which wish to use the C declarations and definitions from the \file{.h} file should \code{\#include} it if they do not reference one of the components or interfaces from point~\ref{sec:cpp-natural}. \end{enumerate} These rules are similar to how \code{\#include} is typically used in C. \subsection{External Linkage Rules} \label{sec:linkage} The following rules specify the external visibility of symbols defined in a nesC program: \begin{itemize} \item The external linkage of C variable declarations is the same as for C (note that this does not include variables declared inside modules). \item All function definitions marked with \code{spontaneous}, \code{hwevent} or \code{atomic\_hwevent} attributes (Section~\ref{sec:attributes}) are external definitions. \item All used commands and events of binary components are external definitions. \item All non-static C function declarations without a definition are external references. \item All provided commands and events of binary components are external references. \end{itemize} The external names of C declarations, and of function definitions inside modules using the \kw{C} attribute, are the same as the corresponding C name. The external names of all other externally visible symbols is implementation-defined.\footnote{The current nesC compiler uses ``componentname\$functionname''.} The \nesc compiler can assume that only code reachable from external definitions will be executed (i.e., there are no ``invisible'' calls to any other functions).\footnote{The current \nesc compiler uses this information to eliminate unreachable code.} \appendix \section{Grammar} \label{sec:grammar} Please refer to Appendix~A of Kernighan and Ritchie (K\&R) ~\cite[pp234--239]{kandr} while reading this grammar (see the ``Imported rules'', Section~\ref{sec:imported}, for a quick summary of references to the K\&R grammar). The following additional keywords are used by \nesc: \kw{as}, \kw{atomic}, \kw{async}, \kw{call}, \kw{command}, \kw{component}, \kw{components}, \kw{configuration}, \kw{event}, \kw{generic}, \kw{implementation}, \kw{includes}, \kw{interface}, \kw{module}, \kw{new}, \kw{norace}, \kw{nx\_struct}, \kw{nx\_union}, \kw{post}, \kw{provides}, \kw{signal}, \kw{task}, \kw{uses}. The following keywords are reserved for future use: \kw{abstract} and \kw{extends}. \nesc reserves all identifiers starting with \kw{\_\_nesc} for internal use. \nesc files follow the \emph{nesC-file} production; \file{.h} files loaded before the program's main component (see Section~\ref{sec:app}) follow the \emph{translation-unit} directive from K\&R and do not reserve any of the \nesc keywords except for \kw{nx\_struct} and \kw{nx\_union}. New rules: \em \begin{tabbing} \grammarindent nesC-file: \\ \> translation-unit\opt interface-definition\\ \> translation-unit\opt component\\ \\ interface-definition:\\ \> \kw{interface} identifier type-parameters\opt attributes\opt \kw{\{} declaration-list \kw{\}}\\ \\ type-parameters:\\ \> \kw{<} type-parameter-list \kw{>}\\ \\ type-parameter-list:\\ \> identifier attributes\opt\\ \> type-parameter-list \kw{,} identifier attributes\opt\\ \\ component:\\ \> comp-kind identifier comp-parameters\opt attributes\opt component-specification implementation\opt\\ \\ comp-kind:\\ \> \kw{module}\\ \> \kw{component}\\ \> \kw{configuration}\\ \> \kw{generic module}\\ \> \kw{generic configuration}\\ \\ implementation:\\ \> module-implementation\\ \> configuration-implementation\\ \\ comp-parameters:\\ \> \kw{(} component-parameter-list \kw{)}\\ \\ component-parameter-list:\\ \> component-parameter\\ \> component-parameter-list \kw{,} component-parameter\\ \\ component-parameter:\\ \> parameter-declaration\\ \> \kw{typedef} identifier attributes\opt\\ \\ module-implementation:\\ \> \kw{implementation} \kw{\{} translation-unit \kw{\}}\\ \\ configuration-implementation:\\ \> \kw{implementation} \kw{\{} configuration-element-list\opt \kw{\}}\\ \\ configuration-element-list:\\ \> configuration-element\\ \> configuration-element-list configuration-element\\ \\ configuration-element:\\ \> components\\ \> connection\\ \> declaration\\ \\ components:\\ \> \kw{components} component-line \kw{;}\\ \\ component-line:\\ \> component-ref instance-name\opt\\ \> component-line \kw{,} component-ref instance-name\opt\\ \\ instance-name:\\ \> \kw{as} identifier\\ \\ component-ref:\\ \> identifier\\ \> \kw{new} identifier \kw{(} component-argument-list \kw{)}\\ \\ component-argument-list:\\ \> component-argument\\ \> component-argument-list \kw{,} component-argument\\ \\ component-argument:\\ \> expression\\ \> type-name\\ \\ connection:\\ \> endpoint \kw{=} endpoint\\ \> endpoint \kw{->} endpoint\\ \> endpoint \kw{<-} endpoint\\ \\ endpoint:\\ \> identifier-path \\ \> identifier-path \kw{[} argument-expression-list \kw{]}\\ \\ identifier-path:\\ \> identifier\\ \> identifier-path \kw{.} identifier\\ \\ component-specification:\\ \> \kw{\{} uses-provides-list \kw{\}}\\ \\ uses-provides-list:\\ \> uses-provides\\ \> uses-provides-list uses-provides\\ \\ uses-provides:\\ \> \kw{uses} specification-element-list\\ \> \kw{provides} specification-element-list\\ \> declaration\\ \\ specification-element-list:\\ \> specification-element\\ \> \kw{\{} specification-elements \kw{\}}\\ \\ specification-elements:\\ \> specification-element\\ \> specification-elements specification-element\\ \\ specification-element:\\ \> declaration\\ \> interface-type instance-name\opt instance-parameters\opt attributes\opt\\ \\ interface-type:\\ \> \kw{interface} identifier type-arguments\opt\\ \\ type-arguments:\\ \> \kw{<} type-argument-list \kw{>}\\ \\ type-argument-list:\\ \> type-name\\ \> type-argument-list \kw{,} type-name\\ \\ instance-parameters:\\ \> \kw{[} parameter-type-list \kw{]}\\ \\ attributes:\\ \> attributes attribute\\ \> attribute\\ \\ attribute:\\ \> \kw{@} identifier \kw{(} initializer-list \kw{)}\\ \end{tabbing} \rm Changed rules: \em \begin{tabbing} \grammarindent typedef-name: \emph{also one of}\\ \> identifier \kw{.} identifier \\ storage-class-specifier: \emph{also one of}\\ \> \kw{command} \kw{event} \kw{async} \kw{task} \kw{norace}\\ \\ declaration-specifiers: \emph{also}\\ \> \kw{default} declaration-specifiers\\ \\ direct-declarator: \emph{also}\\ \> identifier \kw{.} identifier \\ \> direct-declarator instance-parameters \kw{(} parameter-type-list \kw{)}\\ \\ struct-or-union-specifier: \emph{also one of}\\ \> \kw{struct} \kw{@} identifier attributes \kw{\{} struct-declaration-list \kw{\}}\\ \> struct-or-union identifier attributes \kw{\{} struct-declaration-list \kw{\}}\\ \\ struct-or-union: \emph{also one of}\\ \> \kw{nx\_struct}\\ \> \kw{nx\_union}\\ \\ enum-specifier: \emph{also one of}\\ \> \kw{enum} identifier attributes \kw{\{} enumerator-list \kw{\}}\\ \\ init-declarator: \emph{also}\\ \> declarator attributes\\ \> declarator attributes \kw{=} initializer\\ \\ struct-declarator: \emph{also}\\ \> declarator attributes\\ \> declarator \kw{:} constant-expression attributes \\ \\ parameter-declaration: \emph{also}\\ \> declaration-specifiers declarator attributes\\ \\ function-definition: \emph{also}\\ \> declaration-specifiers\opt declarator attributes declaration-list\opt compound-statement\\ \\ type-qualifier: \emph{also}\\ \> attribute\\ \\ statement: \emph{also}\\ \> atomic-statement\\ \\ atomic-statement:\\ \> \kw{atomic} statement\\ \\ postfix-expression: \emph{replaced by}\\ \> primary-expression\\ \> postfix-expression \kw{[} argument-expression-list \kw{]}\\ \> call-kind\opt primary \kw{(} argument-expression-list\opt \kw{)}\\ \> postfix-expression \kw{.} identifier\\ \> postfix-expression \kw{->} identifier\\ \> postfix-expression \kw{++}\\ \> postfix-expression \kw{--}\\ \\\\ call-kind: \emph{one of}\\ \> \kw{call} \kw{signal} \kw{post} \end{tabbing} \rm Note that like like regular typedefs, the extended rule for \emph{typedef-name} (to refer to types from other components) cannot be directly used in a LALR(1) parser. \subsection{Imported Rules} \label{sec:imported} This list is for reference purposes only: \begin{itemize} \item \emph{argument-expression-list}: A list of comma-separated expressions. \item \emph{compound-stmt}: A C \{ \} block statement. \item \emph{declaration}: A C declaration. \item \emph{declaration-list}: A list of C declarations. \item \emph{declaration-specifiers}: A list of storage classes, type specifiers and type qualifiers. \item \emph{declarator}: The part of a C declaration that specifies the array, function and pointer parts of the declared entity's type. \item \emph{direct-declarator}: Like \emph{declarator}, but with no leading pointer-type specification. \item \emph{enumerator-list}: List of constant declarations inside an \kw{enum}. \item \emph{expression}: Any C expression. \item \emph{identifier}: Any C identifier. \item \emph{init-declarator}: The part of a C declaration that specifies the array, function and pointer parts of the declared entity's type, and its initialiser (if any). \item \emph{initializer}: An initializer for a variable declaration. \item \emph{initializer-list}: An initializer for a compound type without the enclosing \kw{\{}, kw{\}}. \item \emph{parameter-declaration}: A function parameter declaration. \item \emph{parameter-type-list}: Specification of a function's parameters. \item \emph{postfix-expression}: A restricted class of C expressions. \item \emph{primary}: An identifier, constant, string or parenthesised expression. \item \emph{statement}: Any C statement. \item \emph{storage-class-specifier}: A storage class specification for a C declaration. \item \emph{struct-declaration-list}: Declarations inside a \kw{struct} or \kw{union}. \item \emph{translation-unit}: A list of C declarations and function definitions. \item \emph{type-name}: A C type specification. \end{itemize} \section{Glossary} \label{sec:glossary} \begin{itemize} \item \emph{attribute}: a user-specified decoration that can be placed on C and nesC declarations. Attributes must be declared (see \emph{attribute kind}). \item \emph{attribute kind}: a declaration of an attribute, which specifies the attribute's arguments. \item \emph{bare command, bare event}: See \emph{command}. \item \emph{binary component}: a component provided in binary rather than source code form. Binary components cannot be generic. \item \emph{combining function}: C function that combines the multiple results of a command call (or event signal) in the presence of \emph{fan-out}. \item \emph{command}, \emph{event}: A function that is part of a component's \emph{specification}, either directly as a \emph{bare} command or event, or within one of the component's \emph{interfaces}. Bare commands and events have roles (\emph{provider}, \emph{user}) and can have \emph{instance parameters}. When these parameters are present, the command or event is known as a \emph{bare, parameterised} command or event. The instance parameters of a command or event are distinct from its regular function parameters. \item \emph{compile-time error}: An error that the \nesc compiler must report at compile-time. \item \emph{component}: The basic unit of \nesc programs. Components have a name and are of two kinds: \emph{generic} components, which take type and constant parameters and must be instantiated before they can be used, and non-generic components which exist implicitly in a single instance. A component has a \emph{specification} and an implementation. A \emph{module} is a component whose implementation is C code; a \emph{configuration} is a component whose implementation is built by selecting or instantiating other components, and \emph{wiring} them together. \item \emph{configuration}: A component whose implementation is built by selecting or instantiating other components, and \emph{wiring} them together. \item \emph{endpoint}: A specification of a particular specification element, and optionally some instance arguments, in a wiring statement of a configuration. A parameterised endpoint is an endpoint without instance arguments that corresponds to a parameterised specification element. \item \emph{event}: See \emph{command}. \item \emph{extent}: The lifetime of a variable. \nesc has the standard C extents: \emph{indefinite}, \emph{function}, and \emph{block}. \item \emph{external}: In a configuration $C$, describes a specification element from $C$'s specification. See internal. \item \emph{external type}: a special kind of type with a platform-independent representation and no alignment restrictions. \item \emph{fan-in}: Describes a provided command or event called from more than one place. \item \emph{fan-out}: Describes a used command or event connected to more than one command or event implementation. A \emph{combining function} combines the results of calls to these used commands or events. \item \emph{generic}: See \emph{component}, \emph{interface}. \item \emph{interface}: An instance of a particular \emph{interface type} in the \emph{specification} of a component. An interface has a name, a role (\emph{provider} or \emph{user}), an \emph{interface type} and, optionally, \emph{instance parameters}. An interface with parameters is a \emph{parameterised interface}. \item \emph{interface definition}: An \emph{interface definition} specifies the interaction between two components, \emph{the provider} and the \emph{user}. This specification takes the form of a set of \emph{commands} and \emph{events}. Each interface definition has a distinct name, and may optionally take type parameters. Interface definitions with type parameters are called \emph{generic interface definitions}. Argument types must be provided before a generic interface definition can be used as an \emph{interface type}. Interfaces are bi-directional: the provider of an interface implements its commands, the user of an interface implements its events. \item \emph{interface type}: A reference to an interface definition, along with argument types if the definition is generic. \emph{Configurations} can only connect two interface instances if they have the same interface type and instance parameters. \item \emph{instance parameter}: An instance parameter is a parameter added to an interface type. It has a name and must be of integral type. There is (conceptually) a separate interface for each distinct list of instance parameter values of a \emph{parameterised interface} (and, similarly, separate commands or events in the case of parameterised commands or events). In a module, parameterised interfaces, commands, events allow runtime selection or a \kw{call} or \kw{signal} target. \item \emph{intermediate function}: A pseudo-function that represents the behaviour of the commands and events of a component, as specified by the wiring statements of the whole application. See Section~\ref{sec:wiring-semantics}. \item \emph{internal}: In a configuration $C$, describes a specification element from one of the components specified in $C$'s component list. See external. \item \emph{module}: A component whose implementation is provided by C code. \item \emph{name space}: \nesc has the standard C \emph{object} (variables, functions, typedefs, enum-constants), \emph{tag} (\code{struct}, \code{union} and \code{enum} tags) and \emph{label} (goto labels) name spaces. Additionally, \nesc has a \emph{component} name space for component and interface definitions. \item \emph{parameterised command, parameterised event, parameterised interface, parameterised endpoint}: See command, event, interface instance, endpoint. \item \emph{provided, provider}: A role for a specification element. A module $K$ must implement the \emph{provided commands of $K$} and \emph{provided events of $K$}. \item \emph{provided command of $K$}: A command that is either a provided specification element of $K$, or a command of a provided interface of $K$. \item \emph{provided event of $K$}: An event that is either a provided specification element of $K$, or an event of a used interface of $K$. \item \emph{scope}: \nesc has the standard C \emph{global}, \emph{function-parameter} and \emph{block} scopes. Additionally there is a \emph{component parameter}, \emph{specification} and \emph{implementation} scope for each component and an \emph{interface parameter} and \emph{interface} scope for each interface. Scopes are divided into \emph{name spaces}. \item \emph{specification}: A list of \emph{specification elements} that specifies the interaction of a component with other components. \item \emph{specification element}: An \emph{interface}, \emph{bare command} or \emph{bare event} in a specification. Specification elements are either \emph{provided} or \emph{used}. \item \emph{task}: A \tinyos task representing an independent thread of control whose execution is requested by the application and initiated by the \tinyos scheduler. \item \emph{used, user}: A role for a specification element. \item \emph{used command of $K$}: A command that is either a used specification element of $K$, or a command of a used interface of $K$. \item \emph{used event of $K$}: An event that is either a used specification element of $K$, or an event of a provided interface of $K$. \item \emph{wiring}: The connections between component's specification elements specified by a configuration. \end{itemize} \bibliographystyle{abbrv} \bibliography{ref} \end{document} % LocalWords: summarised behaviour nesC's summarises Kernighan async NESC uint % LocalWords: uniqueCount inttypes TinyOS enum struct SendMsg Init MyInit doit % LocalWords: MyMessage sendDone parameterised AMStandard StdControl AQueue nc % LocalWords: initialisation ReceiveMsg GenericComm iff sizeof msg myTask stmt % LocalWords: args NoWiring SecondQueue ccc callees call's concat bool norace % LocalWords: unparameterised ncc frontend tos hwevent XYZ undef nesC BarTypes % LocalWords: BarType constant's XService lvalue gcc's gcc init fnname nesc nx % LocalWords: TOSH initialiser parenthesised recognise attribute's nxle nescc % LocalWords: initialisers bitfields initialised ifndef endif componentname % LocalWords: functionname reenable LALR nescc-1.3.4/doc/user/000077500000000000000000000000001177770303300143455ustar00rootroot00000000000000nescc-1.3.4/doc/user/attributes.txt000066400000000000000000000315341177770303300173020ustar00rootroot00000000000000Introduction ============ nesC 1.2 allows programmers to attach attributes to nesC programs. This allows: - simple language extensions without reserving lots of keywords and burdening the syntax (e.g., "wire at most once") - user-specified annotations which would then be accessible to user-built tools (e.g., mark a set of interfaces as "configuration interfaces" to build a pc-side configuration tool for a specific app) These attributes are inspired by the annotations in Java 1.5 (see http://jcp.org/aboutJava/communityprocess/review/jsr175/ for details). User-defined attributes have no direct effect on code generation. Instead, the nesC compiler can output information on the program and its use of attributes for use in external tools. This information is also useful for tools that do not rely on attributes. Finally, nesC includes some Java classes for parsing the nesC XML output into a set of Java objects, and a sample Java application using this framework to verify "at-most-once", "at-least-once" and "exactly-once" wiring constraints. The Java XML parsing classes are found in tools/java/net/tinyos/nesc/dump and the wiring-check application is in tools/java/net/tinyos/nesc/wiring Please see the README files in those directories for more details. Attribute declaration and use ============================= An attribute has a name, and associated values. Attributes are declared like a struct whose name starts with '@'. The struct's fields are the values associated with the attribute: struct @atmostonce { } // "wired at-most-once", with no associated values struct @section { char *name; } // "linker section", with section name An attribute can be used on: - declarations (variables, typedefs, functions, interface instances, etc) - component and interface definitions For variables, typedefs and interface instances, the attribute is placed at the end of the declaration (before the initialiser for variables): typedef int mytype @special(); int fun @veryspecial("yes") = 22; provides interface Fun as Bar[int id] @rpcinterface(); For functions, it is placed after the end of the argument list (in either a prototype or in an implementation): int magic(int bar) @magicfunction(99); void moremagic(void) @magicfunction(100) { } For component and interface definitions it is placed after the (optional) arguments: interface Fun @special() { ... } module Small @runaway("now") { ... As the example shows, an attribute use takes the form @() The attribute parameters must be a valid initialiser for the struct defining . For instance, in struct @big { char *name; int args[4]; }; valid attributes uses include: @big() // use default values @big("yes", 1, 2, 3, 99) @big("no!", { 1, 2 }) // args[2] and args[3] have default values @big( .args = { 9 }, .name = "explicit"); // use field names or they can use the java 1.5-like @attribute-name(value) syntax: int main() @spontaneous @section("foo") { ... } Currently, any declared attribute can be used on any entity. Future versions of nesC may allow a particular attribute to be restricted, e.g., to variables. Extracting information from a nesC program ========================================== The -fnesc-dump= options to ncc (and nescc) are used to specify what information you wish to extract from a nesC program. Note that to successfully extract information, the nesC program must compile without error (with one exception: unwired functions and interfaces are allowed). The information is output in XML. The doc/dump directory contains a schema description for this XML output. The information is sent to the file specified by the -fnesc-dumpfile= option, or to stdout if no such option is used. You can ask for the following information: - components (includes both generic components and their instances) - interface definitions - interfaces (provided and used in components) - functions (both C and module functions) - variables, enum constants, typedefs (again, both from C and modules) - wiring graphs (for the whole program and for individual configurations) Dump request syntax ------------------- A dump request has the form -fnesc-dump=REQUEST or -fnesc-dump=REQUEST(ARGUMENTS) where REQUEST specifies what information you want to collect, and ARGUMENTS includes options and filters for that request. Filters, described below, allow you to extract only the information you want, e.g., all interfaces with attribute @special, rather than all interfaces of the program. Options are used by some REQUESTs to modify their behaviour. Multiple arguments are separated by commas; multiple filter arguments are implicitly and-ed together. Because parentheses are meaningful to most shells, you will have to escape them in arguments to ncc, either with \, or by surrounding the whole arguments in '': -fnesc-dump=components\(wiring\) or '-fnesc-dump=components(wiring)' A single call to ncc may include multiple -fnesc-dump arguments. The information selected by all of these will be collected together and output as a single XML document. Dump requests ------------- This section gives a high-level overview of the information collected by each dump request. For details on what information is available for each individual item (component, variable, etc), please see the XML schema (note that items always include the attributes that have been attached to them). It is often also helpful to examine the output on a sample program, but note that, e.g., unlike the schema definition, this will not necessarily tell you which fields are sometimes present and sometimes absent. REQUEST: "components" OPTIONS: "wiring" FILTERS: yes Returns the components used in a program. This includes: - all the non-generic components - all instances of generic components - all generic components instantiated by the program If the "wiring" option is included, wiring graphs for configurations will be output. REQUEST: "interfacedefs" OPTIONS: none FILTERS: yes Returns the interface definitions used in a program. To find out which interfaces are provided or used by which components, see the "interfaces" request. REQUEST: "interfaces" OPTIONS: none FILTERS: yes Returns the interfaces provided and used by components. REQUEST: "functions" OPTIONS: none FILTERS: yes Returns the functions defined in C files and in components, including commands and events defined outside interfaces. REQUEST: "variables" OPTIONS: none FILTERS: yes Returns the variables defined in C files and at the top-level inside components (i.e., this does not include function parameters and local variables). REQUEST: "constants" OPTIONS: none FILTERS: yes Returns the enum constants defined in C files and at the top-level inside components. REQUEST: "typedefs" OPTIONS: none FILTERS: yes Returns the typedefs defined in C files and at the top-level inside components. REQUEST: "tags" OPTIONS: none FILTERS: yes Returns the tagged types (struct, union, enum) defined in C files and at the top-level inside components. REQUEST: "wiring" OPTIONS: "functions" FILTERS: no Return the application's wiring graph. If you specify the "functions" option, this graph will be in terms of the program's individual commands and events, i.e., interfaces are expanded. You may be surprised at how parameterised commands and events are handled when the "functions" option is used: there are edges from nodes representing the command (or event) for all possible parameter values to nodes representing to the command (event) with specific parameter values. REQUEST: "referenced" OPTIONS: "components", "interfacedefs", "interfaces", "functions", "variables", "constants", "typedefs", "tags" FILTERS: no At least one option must be used. Many of the items described above refer to other items, e.g., interfaces refer to the interface definitions they are an instance of and to the component to which they belong. By including "referenced(components, interfacedefs)", any components and interface definitions referred to from an interface that is being output will also be output. This helps reduce the size and complexity of the XML output when you are using filters (see the examples below), by only including the components referenced from interfaces of interest, rather than all components. Note that "referenced" is recursive: if you have asked for referenced components, and this causes the inclusion of a component A which refers to a component B, then component B will also be included. Dump filters ------------ A tool can always simply ask for all XML information to be output, but this might be slow and unwieldy, and would force the external tool to do its own filtering, e.g., for interfaces with a particular attribute. To simplify external tool implementations, the nesC dump facility includes boolean filters which are applied before adding items requested by -fnesc-dump requests. Note however that items added because of a "referenced" request are not currently filtered. Filters are boolean expression built with (), |, &, ! (with the usual meanings) and base filters which take the form NAME(ARGUMENTS) where the ARGUMENTS are strings and numbers separated by commas. Strings that look like numbers, contain commas, white space, parentheses, ", |, & and ! must be surrounded by "'s, other strings can be entered without surrounding "'s. Within "'s, \ can be used to escape " and other characters. Note that the parentheses are not optional. A 0-argument filter is NAME(). FILTER: "file" ARGUMENT: unix-style (* and ?) file pattern True if the file containing the item matches the file pattern. FILTER: "name" ARGUMENT: regular expression True if the item name matches the regular expression. FILTER: "component" ARGUMENT: component name True if the item's component is the same as the filter's argument (exact string matching). FILTER: "global" ARGUMENT: none True if the item is in C's global scope. FILTER: "instance" ARGUMENT: none True if the item is in a generic component instance (see the discussion of generic components). FILTER: "abstract" ARGUMENT: none True if the item is in a generic component (see the discussion of generic components). FILTER: "attribute" ARGUMENT: list of attribute names True if the item contains any of the attributes from the argument list (exact string matching). Generic components ------------------ Because generic components are instantiated at compile-time, it is possible to get information on all instances of generic components, and on the items contained within them. Some tools may be interested in this information, but others may be more interested in information from the generic component that was instantiated (e.g., a tool that gives you the filenames of all components used in your program). To help distinguish between these cases at dump time, nesC includes two filters: "abstract()" and "instance()". These can be used both to filter components themselves, and also to filter items (such as variables, interfaces, etc) which are found inside them. These two filters cover the four possible categories of components: !abstract() & !instance(): a regular (not generic) component !abstract() & instance(): an instance of a generic component in your program abstract() & !instance(): a generic component abstract() & instance(): if a generic configuration A includes an instantiation of a generic component B, the instance of B in A can be considered partially instantiated. It will be fully instantiated when A itself is instantiated... (the dump system does not normally return such components, but they are reachable from the wiring graph of a generic configuration). Examples -------- o Collect everything, and send it to file big.xml: ncc -fnesc-dump=components(wiring) -fnesc-dump=interfacedefs -fnesc-dump=interfaces -fnesc-dump=functions -fnesc-dump=typedefs -fnesc-dump=variables -fnesc-dump=constants -fnesc-dump=typedefs -fnesc-dump=tags -fnesc-dump=wiring -fnesc-dumpfile=big.xml MyApp.nc o Find specification elements (interfaces, commands, events) with the @rpc attribute: ncc '-fnesc-dump=interfaces(attribute(rpc))' '-fnesc-dump=functions(attribute(rpc))' MyApp.nc (note that this would also return any functions in modules which incorrectly(?) used the @rpc attribute) o Find specification elements with the @rpc attribute, but exclude those from generic components (i.e., we care about the interfaces on actual components, not those in the generic components that we instantiated): ncc '-fnesc-dump=interfaces(attribute(rpc) & !abstract())' '-fnesc-dump=functions(attribute(rpc) & !abstract())' MyApp.nc o The same as above, but we also need some information on the components these interfaces, commands and events belong to: ncc '-fnesc-dump=interfaces(attribute(rpc) & !abstract())' '-fnesc-dump=functions(attribute(rpc) & !abstract())' '-fnesc-dump=referenced(components)' MyApp.nc nescc-1.3.4/doc/user/binary-components.txt000066400000000000000000000131131177770303300205540ustar00rootroot00000000000000How to build and use binary components ====================================== 1) Binary Components -------------------- nesC 1.2 allows you to build and use binary components. This is supported through a new way of definining components. A component "Foo" can be defined in file Foo.nc as: component Foo { provides interface A as X; uses interface A as Y; } Note that you say "component" rather than "module" or "configuration", and there is no implementation section. When generating the .o file for a nesC application including Foo, the nesC compiler will: - include references to external symbols for all provided commands and used events of Foo - define external symbols (based on the application's wiring graph) for all used events and provided commands of Foo - These symbols are named 'component-name$interface-name$command-or-event-name' - The compiler requires that all commands and events used by Foo (including all commands in used interfaces and all events in provided interfaces) be fully wired (in particular, parameterised interfaces must be wired as a whole and not just for individual values) In this example, if interface A is interface A { command int request(); event void done(int val); } Then the generated .o file for an application including Foo will: - use symbols named Foo$X$request, Foo$Y$done - define symbols named Foo$X$done, Foo$Y$request 2) Using binary components -------------------------- Using a binary component is straightforward: just wire the binary component (e.g., Foo) into your application just as you would any other component. At some point, you will have to link your application with the binary component's definition. While this operation is beyond the scope of the nesC language itself, this might happen in one of the following ways: - The binary component is distributed in an object (.o) or library (.a) file. You just link your application against this object or library as you would any other. For instance: ncc -target=mica2 MyApp.nc some-binary-component.o - The binary component is pre-installed in the mote's ROM. Some loader is responsible for linking newly installed user applications with the appropriate ROM entry points. 3) Building binary components ----------------------------- While the 'component' language feature appears to be designed for linking to externally created binary component, it can actually also be used to create them. An example will make this clear. Assume I want to build a binary component "Foo" from our example above. I have some implementation of Foo (in this case a module, but it could also be a configuration): module FooImplementation { provides interface A as X; uses interface A as Y; } implementation { // This does something mysterious to requests... int x; command int X.request() { return call Y.request() + x; } event void Y.done(int val) { x = val; } } I can build a binary version of Foo by compiling BuildBinaryFoo: configuration BuildBinaryFoo { } implementation { components Foo, FooImplementation; Foo.X -> FooImplementation.X; Foo.Y <- FooImplementation.Y; } where Foo is a *different* component from the one we saw earlier: component Foo { // Note that the uses, provides are reversed from the definition // of Foo (and FooImplementation) above! uses interface A as X; provides interface A as Y; } 4) Warnings ----------- Some issues you should be aware of when building and using binary components: - If a component (e.g., TimerC) is included in both your application and the binary component definition, you will end up with two copies of TimerC. This is a) wasteful, b) unlikely to work. A binary component should include the strict minimum necessary, and should express its dependencies on outside services through interfaces. - Compile with -DNESC_BUILD_BINARY when building binary components to avoid having copies of the runtime support functions (TOS_post, __nesc_atomic_start, __nesc_atomic_end) in your binary components. Note that the necessary #ifdef's are only present from TinyOS 1.1.11 onwards. - The symbol names used in binary components include '$'. If you want to call these from C code, you may have to include the -fdollars-in-identifiers command-line flag. On some platforms (avr, msp430), the assembler does not support '$' in symbol names. To avoid this, use 'nescc -gcc=' (e.g., 'nescc -gcc=avr-gcc') rather than avr-gcc or msp430-gcc to compile your C code. nescc will invoke your-gcc, but with a custom assembler which accepts '$'. - 'default' commands and events do not work across binary component boundaries: the decision to call a default command is made at compile-time based on whether or not the command is wired. A call to a command in a binary component is always assumed wired, so the default command will never be called (the same applies to events, of course). This is most likely to cause surprises with parameterised interfaces. The following code: component BinaryA { provides interface A[int id]; } module UseA { uses interface A; } implementation { void f() { call A.request(); } event void A.done(int val) { } } configuration WireA { } implementation { components UseA, BinaryA; UseA.A -> BinaryA.A[10]; } will produce the error binary entry point BinaryA.A.done is not fully wired as even if the binary implementation of BinaryA had a default handler for BinaryA.A.done, the compiler would not know when it should be called. nescc-1.3.4/doc/user/generics-1.2.txt000066400000000000000000000172271177770303300172140ustar00rootroot00000000000000Introduction ============ This is a quick introduction to generic components and interfaces, the new features of nesC 1.2. A generic component is a component that can be multiply instantiated at compile-time and which takes an optional parameter list (including type arguments). A generic interface is an interface with type arguments. This allows, e.g., the creation of reusable adapter components (such as "converting" a StdControl to a SplitControl interface), simplifies implementations of components with much in common (such as the TinyDB attributes), etc. Generic Components ================== Both generic configurations and generic modules are supported. The syntax is straightforward, as this generic queue of ints (with no empty/full detection) shows: interface IntQueue { command void push(int x); command int pop(); } generic module IntQueueC(int n) { provides interface IntQueue; } implementation { int q[n]; int p1 = 0, p2 = 0; command void IntQueue.push(int x) { q[p1++] = x; if (p1 == n) p1 = 0; } command int IntQueue.pop() { int ret = q[p2++]; if (p2 == n) p2 = 0; return ret; } } The n argument to IntQueueC can be used within the component as a constant expression; in this example it is used to dimension the q array. Generic components are instantiated in the `components' declaration of configurations: configuration MyApp { } implementation { components MyCode, new IntQueueC(10) as MyQueue; MyCode.Queue -> MyQueue; } This creates a new 10 element int-queue, accessible as MyQueue within the MyApp configuration. This new component is not accessible outside MyApp, except via any interfaces wired within MyApp. You can also have generic configurations: generic configuration SomeAssembly() { provides interface X; } implementation { components new SomeAssemblyM(), new IntQueueC(10) as MyQueue; X = SomeAssemblyM.X; SomeAssemblyM.Queue -> MyQueue; } Every time SomeAssembly is instantiated, new instances of SomeAssemblyM and IntQueueC will also be instantiated. unique, uniqueCount work "correctly" (i.e., usefully ;-)): if unique is used within a generic component C, it returns a different value in each instance of C, and the call within the definition of C itself does not affect the value returned by uniqueCount. Instantiating a generic component is effectively equivalent to creating a new component with the parameters replaced by the argument values. Thus, instantiating a generic module will produce two slightly different versions of the module's code; beware of code size explosion if you instantiate many modules... A future version of nesC may support code sharing between instances of generic modules, with some restrictions and at some runtime cost. Generic Interfaces and Type Parameters ====================================== Finally, generic components can also have type arguments. This is most useful in conjunction with generic interfaces, e.g., to create a queue of any type: interface Queue { command void push(t x); command t pop(); } generic module QueueC(typedef t, int n) { provides interface Queue; // Note: this is a shortcut for // provides interface Queue as Queue // hence the declarations below refer to Queue, not Queue. // Stylistically it's probably best to give a name to the // provided or used interface. } implementation { t q[n]; int p1 = 0, p2 = 0; command void Queue.push(t x) { q[p1++] = x; if (p1 == n) p1 = 0; } command t Queue.pop() { t ret = q[p2++]; if (p2 == n) p2 = 0; return ret; } } The Queue interface takes a single type parameter t, which can be used within Queue as if it were a typedefed type. Type arguments must be provided for generic interfaces in uses and provides declarations. The generic component queue takes a type parameter t (using the funky "typedef t" syntax), and a size as in the IntQueue example. As with generic interfaces, component type parameters can be used as if they were typedefed types. Generic components with type arguments are instantiated just like other generic components: configuration MyApp { } implementation { components MyCode, new QueueC(int, 10) as MyQueue; MyCode.Queue -> MyQueue; } One restriction: type arguments to generic components and interfaces can not be of array, function or incomplete type. By default, the only operations that can be performed on a value of a type parameter are copying it, and passing it as an argument to some function. If a generic component needs some functionality on its type parameter, it can express that need by using an appropriate interface: interface Compare { command bool lessthan(t x1, t x2); } generic module Sort(typedef t) { uses interface Compare; } implementation { ... void f() { t x1, x2; ... if (call Compare.lessthan(x1, x2)) ... } It is also possible to declare, using the special @integer() and @number() attributes, that a type parameter is of an integral (respectively numerical) type. In that case, all the operations allowed on integers (respectively, integers and floating-point numbers) are allowed: generic module Sort(typedef t @number()) { } implementation { ... void f() { t x1, x2; ... if (x1 < x2) ... } Of course, the type argument to Sort must then be an integral or floating-point type. Type and constants in Component Specifications and Other Changes ================================================================ As part of the changes for generic components, nesC now allows types and enum constants to be defined in the specification of a component (both in generic and non-generic components). These types can be used in the component in which they are defined, and in configurations that include the component (as arguments to generic components or to define other types and constants). For example, interface Send { command result_t send(t x); event result_t sendDone(); } generic configuration RadioStack(typedef messageType) { typedef messageType *messagePtr; provides interface Send; } implementation { ... } configuration MyRadioStack { provides interface Send; } implementation { components new RadioStack(MyMessageType) as TheActualStack; Send = TheActualStack.Send; // Build a queue of the message pointer type components new QueueOf(TheActualStack.messagePtr) as MyQueue; ... } This example also shows that you can now intersperse wiring statements and component declarations. Additionally, you can have typedefs in the body of a configuration, so MyRadioStack could also be written as: configuration MyRadioStack { provides interface Send; } implementation { components new RadioStack(MyMessageType) as TheActualStack; Send = TheActualStack.Send; // Build a queue of the message pointer type, using a local typedef typedef TheActualStack.messagePtr MyMessageTypePtr; components new QueueOf(MyMessageTypePtr) as MyQueue; ... } Note that you can refer to typedefs and enum constants in other components, but not to struct, union or enum tags, i.e., module Fun { struct silly { int x; }; } implementation { ... } configuration Barf { } implementation { components Fun; typedef struct Fun.silly baz; } is not allowed, but module Legalfun { typedef enum { ONE = 2 } sillier; } implementation { ... } configuration Ok { } implementation { components Legalfun; typedef Legalfun.sillier baz; enum { THREE = Legalfun.ONE }; } is. nescc-1.3.4/doc/user/network-types.txt000066400000000000000000000106771177770303300177540ustar00rootroot00000000000000Part 1: Using External Types ============================ External types are an extension to nesC for platform-independent type representation: you can define your packet layout using syntax very similar to existing C type declarations, and just accesses it like a regular C type. The compiler ensures that this type has the same representation on all platforms and generates any necessary conversion code. Additionally, these types have no alignment restrictions. This makes them particularly suitable for defining and accessing network packets in a platform-independent way. For instance, the SurgeCmdMsg from the Surge application can be defined and accessed as follows using external types: typedef nx_struct { nx_uint8_t type; nx_union { nx_uint32_t newrate; nx_uint16_t focusaddr; } args; } SurgeCmdMsg; ... SurgeCmdMsg *pCmdMsg = (SurgeCmdMsg *)payload; if (pCmdMsg->type == SURGE_TYPE_SETRATE) { timer_rate = pCmdMsg->args.newrate; ... More formally, nesC includes three kinds of external types. o External base types are similar to the fixed size in8_t, uint16_t, etc types. They include 8, 16, 32 and 64-bit signed and unsigned integers denoted by the types nx_[u]int[8/16/32/64]_t. o External array types are any array built from an external type, using the usual C syntax, e.g, nx_int16_t x[10]. o External structures are declared like C structures and unions, but using the nx_struct and nx_union keywords (as in the SurgeCmdMsg example above). An external structure can only contain external types as elements. External types have no alignment restrictions, external structures contain no padding, and the external base types use a 2's complement, big-endian representation (there are also little-endian versions of the base types available, using the nxle_ prefix, but their use is discouraged for networking purposes). Bit-fields in external structures are maximally packed. A 0-width bit-field moves allocation on to the next byte. Thus the representation of external types is platform-independent, and any arbitrary section of memory can be accessed via an external type. All these external types can be used exactly like regular C types, with a few restrictions: o Bit-fields can only be created from big-endian external base types (i.e., `nx_struct { nxle_uint8_t f1 : 2; }' is not allowed). Having big- and little-endian bit-fields adjacent in a type would be problematic... o Bit-fields of external types cannot be used inside non-external structures (i.e., `struct { nx_uint8_t f1 : 2; }' is not allowed). o External type variables cannot have initialisers. Part 2: Implementation ====================== In the generated C code for nesC programs using external types, we simply define a C type for each external base type, translate nx_struct and nx_union to struct and union and leave array types unchanged. The external base types are replaced by structures containing char arrays. Reads and writes of external base types are replaced by calls to inline functions like NTOH32 in the example below. For instance, the example from Surge becomes: typedef struct { char data[4]; } nx_uint32_t; static inline unsigned short NTOUH32(void *target) { unsigned char *base = target; return (unsigned long)base[3] << 24 | (unsigned long)base[2] << 16 | base[1] << 8 | base[0]; } ... typedef struct { nx_uint8_t type; union { nx_uint32_t newrate; nx_uint16_t focusaddr; } args; } SurgeCmdMsg; ... SurgeCmdMsg *pCmdMsg = (SurgeCmdMsg *)payload; if (NTOUH8(&pCmdMsg->type) == SURGE_TYPE_SETRATE) { timer_rate = NTOUH32(&pCmdMsg->args.newrate); ... For this translation to be correct, a structure containing only characters (such as nx_uint32_t) should have no alignment restrictions, and the same must hold for structures containing such structures (e.g., SurgeCmdMsg). This is true on many, but not all platforms: on ARM processors, all structures are aligned to 4-byte boundaries, and on Motorola 68K processors they are aligned to 2-byte boundaries. We currently work around this problem by using gcc's non-standard packed attribute. Bit-fields are a little more complex: space used by bit-fields inside external structures are replaced by "filler" fields. Accesses to external bit-fields is done by taking the address of the enclosing external structure, treating it as an array of bytes and accessing the appropriate offsets. nescc-1.3.4/include/000077500000000000000000000000001177770303300142455ustar00rootroot00000000000000nescc-1.3.4/include/COPYING000066400000000000000000000431221177770303300153020ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program 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 of the License, or (at your option) any later version. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. nescc-1.3.4/include/COPYING3000066400000000000000000001045131177770303300153670ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program 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 3 of the License, or (at your option) any later version. This program 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 this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . nescc-1.3.4/include/ChangeLog000066400000000000000000000257251177770303300160320ustar00rootroot000000000000002007-11-07 Joseph Myers Daniel Jacobowitz * floatformat.h (struct floatformat): Add split_half field. (floatformat_ibm_long_double): New. 2007-09-06 Tom Tromey * libiberty.h (pex_free): Document process killing. 2007-08-31 Douglas Gregor * demangle.h (enum demangle_component_type): Add DEMANGLE_COMPONENT_RVALUE_REFERENCE. 2007-07-25 Ben Elliston * ternary.h: Remove. 2007-07-18 Bob Wilson * xtensa-config.h (XCHAL_HAVE_THREADPTR): New. (XCHAL_HAVE_RELEASE_SYNC, XCHAL_HAVE_S32C1I): New. 2007-07-17 Nick Clifton * COPYING3: New file. Contains version 3 of the GNU General Public License. 2007-07-12 Kai Tietz * splay-tree.h (libi_uhostptr_t, libi_shostptr_t): New types, needed for WIN64 when a long is not wide enough for a pointer. (splay_tree_key, splay_tree_value): Use the new types. 2007-05-07 Nathan Froyd * libiberty.h (writeargv): Declare. 2007-04-25 Mark Mitchell * demangle.h: Change license to LGPL + exception. 2007-03-29 Joel Brobecker * filenames.h (FILENAME_CMP): Adjust define to call filename_cmp regardless of the type of file system. 2007-03-06 Jan Hubicka * ansidecl.h (ATTRIBUTE_COLD, ATTRIBUTE_HOT): New. 2007-02-09 Joseph S. Myers * libiberty.h (pex_write_input): Remove prototype. 2007-01-31 Vladimir Prus * libiberty.h (PEX_STDERR_TO_PIPE): New define. (PEX_BINARY_ERROR): New define. (pex_read_err): New function. 2007-01-29 Simon Baldwin * demangle.h: New cplus_demangle_print_callback, cplus_demangle_v3_callback, and java_demangle_v3_callback function prototypes, and demangle_callbackref type definition. 2006-12-06 Nick Clifton * ansidecl.h (ATTRIBUTE_PACKED): Define. 2006-11-30 Andrew Stubbs J"orn Rennecke PR driver/29931 * libiberty.h (make_relative_prefix_ignore_links): Declare. 2006-11-27 Bob Wilson * xtensa-config.h (XSHAL_ABI): New. (XTHAL_ABI_WINDOWED, XTHAL_ABI_CALL0): New. 2006-04-11 Jim Blandy * libiberty.h (pex_input_file, pex_input_pipe): New declarations. 2006-01-18 DJ Delorie * md5.h: Include ansidecl.h 2006-01-09 Bob Wilson * xtensa-config.h (XCHAL_HAVE_MUL32_HIGH): Define. 2005-12-30 Bob Wilson * xtensa-config.h (XCHAL_HAVE_WIDE_BRANCHES): New. 2005-12-10 Terry Laurenzo PR java/9861 * demangle.h : Add DMGL_RET_POSTFIX define to enable alternative output format for return types 2005-10-31 Mark Kettenis * floatformat.h (enum floatformat_byteorders): Add floatformat_vax. (floatformat_vax_aingle, floatformat_vax_double): Declare. 2005-09-26 Mark Mitchell * libiberty.h (expandargv): New function. 2005-08-17 Mark Kettenis * floatformat.h (struct floatformat): Change type of large argument for is_valid member to `const void *'. (floatformat_to_double): Change type of second argument to `const void *'. (floatformat_from_double): Change type of last argument to `void *'. (floatformat_is_valid): Change type of last argument to `const void *'. 2005-07-12 Ben Elliston * xregex2.h (regexec): Qualify this prototype with __extension__ when compiling with GNU C. 2005-07-03 Steve Ellcey PR other/13906 * ansidecl.h (ATTRIBUTE_ALIGNED_ALIGNOF): New. * md5.h (md5_uintptr): New. (md5_ctx): Align buffer field. 2005-06-30 Daniel Berlin * hashtab.h (HTAB_DELETED_ENTRY): New macro. (HTAB_EMPTY_ENTRY): New macro. 2005-06-20 Geoffrey Keating * libiberty.h (strverscmp): Prototype. 2005-06-06 Gabriel Dos Reis * libiberty.h (XOBFINISH): New. 2005-06-01 Kaveh R. Ghazi * libiberty.h (vsnprintf): Add format attribute. 2005-05-29 Kaveh R. Ghazi * ansidecl.h: Add ATTRIBUTE_FPTR_PRINTF. 2005-05-28 Eli Zaretskii * libiberty.h: (snprintf) [!HAVE_DECL_SNPRINTF]: Declare if needed. (vsnprintf) [!HAVE_DECL_VSNPRINTF]: Declare if needed. 2005-05-25 Richard Henderson * demangle.h (DEMANGLE_COMPONENT_HIDDEN_ALIAS): New. 2005-05-24 Gabriel Dos Reis * libiberty.h (ACONCAT): Properly cast value of alloca(). * ansidecl.h (ATTRIBUTE_UNUSED_LABEL): Don't define if __cplusplus. 2005-05-12 Steve Ellcey libiberty.h: Do not define empty basename prototype. 2005-05-10 Nick Clifton * Update the address and phone number of the FSF organization in the GPL notices in the following files: COPYING, ansidecl.h, bfdlink.h, bout.h, demangle.h, dis-asm.h, dyn-string.h, fibheap.h, filenames.h, floatformat.h, fnmatch.h, gdbm.h, getopt.h, hashtab.h, hp-symtab.h, ieee.h, libiberty.h, md5.h, oasys.h, objalloc.h, obstack.h, os9k.h, partition.h, progress.h, safe-ctype.h, sort.h, splay-tree.h, symcat.h, ternary.h, xregex2.h, xtensa-config.h, xtensa-isa-internal.h, xtensa-isa.h 2005-04-25 Kaveh R. Ghazi * libiberty.h (unlock_std_streams): New. 2005-04-19 Kaveh R. Ghazi * hashtab.h, libiberty.h, objalloc.h, splay-tree.h, ternary.h: Don't use the PTR macro. * sort.h: Don't use the PARAMS macro. 2005-04-16 Kaveh R. Ghazi * libiberty.h (unlock_stream): New. 2005-04-13 Kaveh R. Ghazi * libiberty.h (fopen_unlocked, fdopen_unlocked, freopen_unlocked): Remove parameter names. 2005-04-11 Kaveh R. Ghazi * libiberty.h (fopen_unlocked, fdopen_unlocked, freopen_unlocked): Provide prototypes for new functions. 2005-03-29 Ian Lance Taylor * libiberty.h: Fix indentation. 2005-03-28 Ian Lance Taylor * libiberty.h: Include . (PEX_RECORD_TIMES, PEX_USE_PIPES, PEX_SAVE_TEMPS): Define. (PEX_LAST, PEX_SEARCH, PEX_SUFFIX, PEX_STDERR_TO_STDOUT): Define. (PEX_BINARY_INPUT, PEX_BINARY_OUTPUT): Define. (pex_init, pex_run, pex_read_output): Declare. (pex_get_status, pex_get_times, pex_free, pex_one): Declare. (struct pex_time): Define. 2005-03-28 Mark Mitchell * libiberty.h (ffs): Declare, if necessary. 2005-03-27 Gabriel Dos Reis * xregex2.h (_RE_ARGS): Remove definition and uses. 2005-03-27 Gabriel Dos Reis * ternary.h: Don't use PARAMS anymore. 2005-03-27 Gabriel Dos Reis * partition.h: Remove use of PARAMS. * obstack.h: Remove conditional prototypes __STDC__. * objalloc.h: Remove use of PARAMS. * splay-tree.h: Likewise. 2005-03-27 Gabriel Dos Reis * md5.h: Remove definition and uses of __P. * dyn-string.h: Remove uses of PARAMS. * fibheap.h: Likewise. * floatformat.h: Likewise. * hashtab.h: Likewise. 2005-03-26 Gabriel Dos Reis * demangle.h: Remove uses of PARAMS. * libiberty.h (ANSI_PROTOTYPES): Remove guard since ANSI_PROTOTYPES is always assumed. Remove uses of PARAMS throughout. 2005-03-24 Kaveh R. Ghazi * libiberty.h (xstrndup): Declare. 2005-03-22 Kaveh R. Ghazi * libiberty.h (make_relative_prefix): Add ATTRIBUTE_MALLOC. 2005-03-09 Mark Mitchell * libiberty.h (gettimeofday): Declare. 2005-03-01 Jan Beulich * libiberty.h: Declare unlink_if_ordinary. 2005-02-14 Paolo Bonzini PR bootstrap/19818 * ansidecl.h (PARAMS): Guard from redefinition. 2004-12-11 Ben Elliston * fibheap.h (struct fibnode): Only use unsigned long bitfields when __GNUC__ is defined and ints are less than 32-bits wide. 2004-10-07 Bob Wilson * xtensa-config.h (XSHAL_USE_ABSOLUTE_LITERALS, XCHAL_HAVE_PREDICTED_BRANCHES, XCHAL_INST_FETCH_WIDTH): New. (XCHAL_EXTRA_SA_SIZE, XCHAL_EXTRA_SA_ALIGN): Delete. 2004-09-13 Aaron W. LaFramboise * libiberty.h (basename): Prototype for __MINGW32__. 2004-09-04 Kaveh R. Ghazi * ansidecl.h (ATTRIBUTE_SENTINEL): Define. * libiberty.h (concat, reconcat, concat_length, concat_copy, concat_copy2): Use ATTRIBUTE_SENTINEL. 2004-08-02 Gabriel Dos Reis * libiberty.h (XDELETE, XDELETEVEC, XRESIZEVEC): Remove any const-qualification before disposal. 2004-07-24 Bernardo Innocenti * ansidecl.h (ARG_UNUSED): New Macro. 2004-07-24 Bernardo Innocenti * libiberty.h (XNEW, XCNEW, XNEWVEC, XCNEWVEC, XOBNEW): Move here from libcpp/internal.h. (XDELETE, XRESIZEVEC, XDELETEVEC, XNEWVAR, XCNEWVAR, XRESIZEVAR): New macros. 2004-07-21 Paolo Bonzini * ansidecl.h (ATTRIBUTE_PURE): New. 2004-07-13 Bernardo Innocenti * libiberty.h (ASTRDUP): Add casts required for stricter type conversion rules of C++. * obstack.h (obstack_free): Likewise. 2004-05-04 Andreas Jaeger * demangle.h: Do not use C++ reserved keyword typename as parameter for cplus_demangle_fill_builtin_type. 2004-04-22 Richard Henderson * hashtab.h (struct htab): Add size_prime_index. 2004-04-13 Jeff Law * hashtab.h (htab_remove_elt_with_hash): Prototype new function. 2004-03-30 Zack Weinberg * hashtab.h, splay-tree.h: Use new shorter form of GTY markers. 2004-02-24 Ian Lance Taylor * dyn-string.h: Update copyright date. 2004-02-23 Ian Lance Taylor * dyn-string.h: Remove test of IN_LIBGCC2 and IN_GLIBCPP_V3 and the associated #defines. 2004-01-12 Ian Lance Taylor * demangle.h: Instead of checking ANSI_PROTOTYPES, just include "libiberty.h". * demangle.h: If ANSI_PROTOTYPES is defined, include . * demangle.h (enum demangle_component_type): Define. (struct demangle_operator_info): Declare. (struct demangle_builtin_type_info): Declare. (struct demangle_component): Define. (cplus_demangle_fill_component): Declare. (cplus_demangle_fill_name): Declare. (cplus_demangle_fill_builtin_type): Declare. (cplus_demangle_fill_operator): Declare. (cplus_demangle_fill_extended_operator): Declare. (cplus_demangle_fill_ctor, cplus_demangle_fill_dtor): Declare. (cplus_demangle_v3_components): Declare. (cplus_demangle_print): Declare. For older changes see ChangeLog-9103 Local Variables: mode: change-log left-margin: 8 fill-column: 74 version-control: never End: nescc-1.3.4/include/ChangeLog-9103000066400000000000000000002430731177770303300164220ustar00rootroot000000000000002003-12-19 Andreas Tobler * include/fibheap.h (fibnode): Use __extension__ for bit-fields mark and degree if __GNUC__. 2003-12-18 Kazu Hirata * include/fibheap.h (fibnode): Use unsigned long int for bit-fields if __GNUC__ is defined. 2003-12-19 Andreas Tobler * fibheap.h (fibnode): Use __extension__ for bit-fields mark and degree if __GNUC__. 2003-12-18 Kazu Hirata * fibheap.h (fibnode): Use unsigned long int for bit-fields if __GNUC__ is defined. 2003-12-04 H.J. Lu * bfdlink.h (bfd_link_info): Change relax_finalizing to need_relax_finalize. 2003-12-03 Alan Modra * bfdlink.h (struct bfd_link_hash_entry): Rename "next" to "und_next". 2003-12-02 Alan Modra * bfdlink.h (struct bfd_link_info): Remove mpc860c0 field. 2003-11-14 Nick Clifton * dis-asm.h (struct disassemble_info): Add new field 'symbol_is_valid' which is a function which can tell the disassembler to skip certain symbols as they should not be displayed to the user. (arm_symbol_is_valid): New prototype. This is the ARM specific function for the symbol_is_valid field. (generic_symbol_is_valid): New prototype. This is the default function pointed to by the symbol_is_valid field. 2003-11-06 Bruno Rohee * hp-symtab.h: Fix "the the" typo. 2003-10-24 H.J. Lu * bfdlink.h (bfd_elf_version_expr): Add "symbol" and remove "wildcard". 2003-10-22 Joseph S. Myers * obstack.h: Merge the following change from gnulib: 2003-10-21 Paul Eggert * obstack.h (obstack_1grow_fast): Properly parenthesize arg. (obstack_ptr_grow_fast, obstack_int_grow_fast): Don't use lvalue casts, as GCC plans to remove support for them in GCC 3.5. Reported by Joseph S. Myers. This bug was also present in the non-GCC version, indicating that this code had always been buggy and had never been widely used. (obstack_1grow, obstack_ptr_grow, obstack_int_grow, obstack_blank): Use the fast variant of each macro, rather than copying the definiens of the fast variant; that way, we'll be more likely to catch future bugs in the fast variants. 2003-10-22 Jakub Jelinek * bfdlink.h (struct bfd_elf_version_expr): Remove match field. Add wildcard and mask fields. (BFD_ELF_VERSION_C_TYPE): Define. (BFD_ELF_VERSION_CXX_TYPE): Likewise. (BFD_ELF_VERSION_JAVA_TYPE): Likewise. (struct bfd_elf_version_expr_head): New. (struct bfd_elf_version_tree): Add match field. Change type of globals and locals fields to struct bfd_elf_version_expr_head. 2003-09-22 Andrew Cagney * floatformat.h (struct floatformat): Add field "is_valid". 2003-09-15 Andrew Cagney * floatformat.h (floatformat_to_double): Make input buffer constant. (floatformat_from_double, floatformat_is_valid): Ditto. 2003-09-15 Andrew Cagney * floatformat.h (struct floatformat): Make "exp_bias" signed. 2003-09-15 Daniel Jacobowitz * floatformat.h (floatformat_is_valid): Add prototype. 2003-08-27 Andrew Cagney * dis-asm.h (init_disassemble_info): Declare. (INIT_DISASSEMBLE_INFO): Redefine as a call to init_disassemble_info. (INIT_DISASSEMBLE_INFO_NO_ARCH): Ditto. 2003-08-20 Nick Clifton * bfdlink.h (enum report_method): New enum. Describes how to report something. (struct bfd_link_info): Delete fields 'no_undefined' and 'allow_shlib_undefined'. Replace with 'unresolved_symbols_in_objects' and 'unresolved_symbols_in_shared_libs'. 2003-08-07 Alan Modra * bfdlink.h: Remove PARAMS macro. Replace PTR with void *. * dis-asm.h: Likewise. 2003-07-09 Bob Wilson * xtensa-config.h: Undef all macros before defining them. 2003-07-06 H.J. Lu * demangle.h: Support C++. 2003-07-01 Zack Weinberg * filenames.h: New file imported from binutils. 2003-06-30 Bob Wilson * xtensa-config.h: New file imported from binutils. 2003-06-30 Bob Wilson * xtensa-config.h (XCHAL_HAVE_CONST16, XCHAL_HAVE_ABS, XCHAL_HAVE_ADDX, XCHAL_HAVE_L32R): Define. 2003-06-25 Alan Modra * bfdlink.h: Correct spelling of "relocatable". 2003-06-22 Zack Weinberg * safe-ctype.h (HC_UNKNOWN, HC_ASCII, HC_EBCDIC): Rename to HOST_CHARSET_UNKNOWN, HOST_CHARSET_ASCII, HOST_CHARSET_EBCDIC respectively. 2003-06-21 Zack Weinberg * safe-ctype.h (HC_UNKNOWN, HC_ASCII, HC_EBCDIC, HOST_CHARSET): New #defines. 2003-06-17 Kaveh R. Ghazi * ansidecl.h: Delete HAVE_LONG_DOUBLE GCC bootstrap support. 2003-05-23 Jakub Jelinek * bfdlink.h (struct bfd_link_info): Add execstack and noexecstack. 2003-06-03 H.J. Lu * bfdlink.h (LD_DEFINITION_IN_DISCARDED_SECTION): New. 2003-05-30 Ulrich Drepper Jakub Jelinek * bfdlink.h (struct bfd_link_info): Add pie and executable bits. 2003-05-21 Nick Clifton * bfdlink.h (struct bfd_link_hash_table): Fix typo in comment. 2003-05-15 Jim Blandy * libiberty.h (hex_value): Make the value an unsigned int, to avoid unexpected sign-extension when cast to unsigned types larger than int --- like bfd_vma, on some platforms. (_hex_value): Update declaration. 2003-05-09 Alan Modra * xtensa-isa-internal.h (xtensa_isa_module_struct): Remove const on gen_num_opcodes_fn return type. 2003-05-07 Jason Merrill * hashtab.h (iterative_hash): Prototype. (iterative_hash_object): New macro. 2003-04-28 H.J. Lu * bfdlink.h (bfd_link_info): Add relax_finalizing. 2003-04-23 H.J. Lu * bfdlink.h (bfd_link_callbacks): Add error_handler. 2003-04-02 Bob Wilson * xtensa-config.h: Remove comment indicating that this is a generated file. 2003-04-01 Bob Wilson * dis-asm.h (print_insn_xtensa): Declare. * xtensa-config.h: New file. * xtensa-isa-internal.h: Likewise. * xtensa-isa.h: Likewise. 2003-03-17 Kaveh R. Ghazi * ansidecl.h (ATTRIBUTE_NONNULL, ATTRIBUTE_NULL_PRINTF, ATTRIBUTE_NULL_PRINTF_1, ATTRIBUTE_NULL_PRINTF_2, ATTRIBUTE_NULL_PRINTF_3, ATTRIBUTE_NULL_PRINTF_4, ATTRIBUTE_NULL_PRINTF_5): New. (ATTRIBUTE_PRINTF): Add ATTRIBUTE_NONNULL. 2003-03-17 Jan Hubicka * hashtab.h (htab_traverse_noresize): Declare. 2003-02-27 Kaveh R. Ghazi * libiberty.h: Document return value of physmem routines. 2003-02-20 Kaveh R. Ghazi * libiberty.h (physmem_total, physmem_available): Prototype. 2003-02-20 Daniel Jacobowitz * libiberty.h (lrealpath): Add declaration. 2003-01-31 Grant Grundler * hppa.h (ldwa, ldda): Add ordered opcodes. 2003-01-26 Daniel Jacobowitz * hashtab.h (htab_alloc_with_arg, htab_free_with_arg): Add new types. (struct htab): Add alloc_arg, alloc_with_arg_f, free_with_arg_f. (htab_create_alloc_ex): New prototype. (htab_set_functions_ex): New prototype. 2002-07-17 Geoffrey Keating * splay-tree.h (GTY): Define if undefined. (splay_tree_allocate_fn): Return PTR for compatibility, not void *. (struct splay_tree_node_s): Support gengtype. (struct splay_tree_s): Likewise. Make allocate_data a PTR, not a void *. 2002-01-02 Ben Elliston * dis-asm.h (print_insn_iq2000): Declare. 2002-12-24 Dmitry Diky * dis-asm.h: Add msp430 disassembler prototype. 2002-12-27 Chris Demetriou * dis-asm.h (print_mips_disassembler_options): Prototype. 2002-12-23 Alan Modra * bfdlink.h (struct bfd_link_info): Add "strip_discarded". 2002-12-20 Alan Modra * bfdlink.h (struct bfd_link_info): Replace bfd_boolean fields with bit-fields. Rearrange to put all like types together. 2002-11-30 Alan Modra * bfdlink.h: Replace boolean with bfd_boolean. Formatting. 2002-11-23 Simon Burge * libiberty.h (basename): Add NetBSD to the list. 2002-11-22 Daniel Jacobowitz * libiberty.h (make_relative_prefix): Add prototype. 2002-11-14 Egor Duda * bfdlink.h (struct bfd_link_info): Add new boolean field pei386_runtime_pseudo_reloc. 2002-10-26 Roger Sayle * partition.h: Close the extern "C" scope when compiling with C++. 2002-10-26 Roger Sayle DJ Delorie PR bootstrap/8351 * getopt.h: Avoid prototyping getopt with no arguments in C++. 2002-10-24 Nathan Tallent * ansidecl.h (__STDC__): Add (__alpha && __cplusplus) to the list of platform compilers that may look, smell and act like __STDC__ but that may not define it. 2002-10-11 David O'Brien * getopt.h: getopt is in unistd.h (based on SUSv2). 2002-09-26 Andrew Cagney * regs/: Delete directory. 2002-09-19 Alexandre Oliva * libiberty.h (asprintf, vasprintf): Don't declare them if the corresponding HAVE_DECL_ macro is 1. 2002-09-19 Nathan Tallent * dis-asm.h: Remove (errant) trailing semicolon (;) from the extern "C" { } declaration. 2002-09-04 Nick Clifton * dis-asm.h (print_ppc_disassembler_options): Prototype. 2002-08-28 Michael Hayes * dis-asm.h: Add standard disassembler for tic4x. 2002-08-07 H.J. Lu * bfdlink.h (bfd_link_info): Add allow_undefined_version. (bfd_elf_version_expr): Add symver and script. 2002-07-31 Ian Dall * bfdlink.h (bfd_link_common_skip_ar_symbols): New enum. (struct bfd_link_info): Add new field 'common_skip_ar_symbols'. 2002-07-19 Denis Chertykov Matthew Green * dis-asm.h (print_insn_ip2k): Declare. 2002-07-01 Alan Modra * bfdlink.h (struct bfd_sym_chain): Declare. (struct bfd_link_info): Add gc_sym_list. Formatting fixes. 2002-06-25 Alan Modra * demangle.h: #include "ansidecl.h" rather than #include . * fibheap.h: Likewise. * hashtab.h: Likewise. * partition.h: Likewise. * sort.h: Likewise. * splay-tree.h: Likewise. 2002-06-24 Alan Modra * libiberty.h (basename): Don't declare if HAVE_DECL_BASENAME. * getopt.h (getopt): Don't declare if HAVE_DECL_GETOPT. 2002-06-18 Dave Brolley From Catherine Moore: * dis-asm.h (print_insn_frv): New prototype. 2002-06-09 Andrew Cagney * remote-sim.h: Move to directory gdb/. * callback.h: Move to directory gdb/. 2002-06-07 Charles Wilson * bfdlink.h (struct bfd_link_info): Change type of pei386_auto_import field to int so that -1 can mean enabled by default and 1 can mean enabled by command line switch. 2002-06-06 DJ Delorie * hashtab.h (htab): Rearrange new members for backward compatibility. (htab_create): Don't use a macro that requires other headers. 2002-06-05 Geoffrey Keating * hashtab.h (htab_create): Restore prototype for backward compatibility. (htab_try_create): Likewise. 2002-05-22 Geoffrey Keating * hashtab.h (struct htab): Update for change to length specifier. 2002-05-10 Geoffrey Keating * hashtab.h (GTY): Define if undefined. (htab_alloc): New typedef. (htab_free): New typedef. (struct htab): Support gengtype; allow user-specified memory allocation. (htab_create_alloc): New. (htab_create): Replace with #define. (htab_try_create): Delete. 2002-05-28 Kuang Hwa Lin * dis-asm.h: Prototype print_insn_dlx. 2002-05-23 Andrew Cagney * sim-d10v.h: Delete file. Moved to include/gdb/. 2002-05-21 H.J. Lu (hjl@gnu.org) * bfdlink.h (bfd_link_info): Add allow_multiple_definition. 2002-05-17 J"orn Rennecke * dis-asm.h (print_insn_shl, print_insn_sh64l): Remove prototype. 2002-04-16 David S. Miller * xregex2.h (__restrict_arr): Define to __restrict on GCC 3.1 and later. Do not redefine. 2002-04-01 Phil Edwards * dyn-string.h: Also allow IN_GLIBCPP_V3 to redefine names. 2002-03-10 Daniel Jacobowitz * gdb: New directory. 2002-03-06 Andrew Cagney * floatformat.h (floatformat_arm_ext): Delete declaration. 2002-02-21 Jim Blandy Allow the user to specify functions for allocating memory for splay tree roots and nodes. * splay-tree.h (splay_tree_allocate_fn, splay_tree_deallocate_fn): New types. (splay_tree): New fields: `allocate', `deallocate', and `allocate_data'. (splay_tree_new_with_allocator): New function declaration. 2002-02-15 Alan Modra Support arbitrary length fill patterns. * bfdlink.h (enum bfd_link_order_type): Remove bfd_fill_link_order. (struct bfd_link_order): Remove fill. Add data.size. 2002-02-08 Alexandre Oliva Contribute sh64-elf. 2000-11-25 Hans-Peter Nilsson * dis-asm.h (print_insn_sh64): New prototype. (print_insn_sh64l): New prototype. (print_insn_sh64x_media): New prototype. 2002-02-05 Frank Ch. Eigler * dis-asm.h (disassemble_info): New field `insn_sets'. (INIT_DISASSEMBLE_INFO): Clear it. 2002-02-05 Jason Merrill * demangle.h (cplus_demangle_v3): Add "options" parm. (cplus_demangle_v3_type): Remove prototype. (DMGL_VERBOSE): New macro. (DMGL_TYPES): New macro. 2002-02-02 H.J. Lu (hjl@gnu.org) * demangle.h (cplus_demangle_v3_type): New prototype. 2002-01-31 Ivan Guzvinec * dis-asm.h : Add support for or32 targets 2002-01-28 Kaveh R. Ghazi * libiberty.h (C_alloca): Add ATTRIBUTE_MALLOC. 2002-01-27 David O'Brien * cgen.h (BFD_VERSION): Use BFD_VERSION_DATE instead. 2001-12-14 Nick Clifton * dis-asm.h (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialise the disassembler_options field (to NULL). 2001-12-13 Jakub Jelinek * bfdlink.h (struct bfd_link_info): Add eh_frame_hdr field. 2001-12-07 Geoffrey Keating * dis-asm.h (print_insn_xstormy16): Declare. 2001-12-06 Richard Henderson * demangle.h (no_demangling): New. (NO_DEMANGLING_STYLE_STRING): New. 2001-11-14 Alan Modra * dis-asm.h (print_insn_i386): Declare. 2001-11-11 Timothy Wall * dis-asm.h: Fix comment to refer to octets rather than bytes. 2001-10-30 Hans-Peter Nilsson * dis-asm.h (print_insn_mmix): Add prototype. 2001-10-24 Neil Booth * safe-ctype.h (_sch_isbasic, IS_ISOBASIC): New. 2001-10-22 Kaveh R. Ghazi * libiberty.h (hex_init): Revert delete. * libiberty.h (_hex_value): Const-ify. (hex_init): Delete. 2001-10-16 Christopher Faylor * filenames.h: Add cygwin to the list of dosish style path systems. 2001-10-07 Kaveh R. Ghazi * demangle.h (demangler_engine): Const-ify. * libiberty.h (buildargv): Likewise. 2001-10-03 Vassili Karpov * bfdlink.h (struct bfd_link_info): Add nocopyreloc field. 2001-09-24 Kaveh R. Ghazi * libiberty.h (reconcat): New function. 2001-09-18 Kaveh R. Ghazi * libiberty.h (concat, concat_length, concat_copy, concat_copy2, ACONCAT): Improve comments. 2001-09-18 Alan Modra * objalloc.h (OBJALLOC_ALIGN): Define using offsetof. 2001-09-17 Kaveh R. Ghazi * libiberty.h (concat_length, concat_copy, concat_copy2, libiberty_concat_ptr, ACONCAT): New. * libiberty.h (ASTRDUP): New macro. libiberty_optr, libiberty_nptr, libiberty_len): Declare. 2001-08-29 Kaveh R. Ghazi * ansidecl.h: Update comments reflecting previous change. 2001-08-27 Kaveh R. Ghazi * ansidecl.h (VA_OPEN, VA_CLOSE): Allow multiple uses. 2001-08-25 Nick Clifton * bfdlink.h (struct bfd_link_info): Change 'spare_dynamic_tags' to unsigned to remove a compile time warning message. 2001-08-24 H.J. Lu * bfdlink.h (bfd_link_hash_table_type): New. The linker hash table type, bfd_link_generic_hash_table and bfd_link_elf_hash_table. (bfd_link_hash_table): Add a new field, type, for the linker hash table type. 2001-08-23 Jakub Jelinek * bfdlink.h (struct bfd_link_info): Add combreloc and spare_dynamic_tags fields. 2001-08-23 Lars Brinkhoff * dyn-string.h, fibheap.h, partition.h, sort.h, splay-tree.h: replace "GNU CC" with "GCC". 2001-08-21 Richard Henderson * fibheap.h: Tidy formatting. (fibnode_t): Limit degree to 31 bits to avoid warning. 2001-08-20 Daniel Berlin * fibheap.h: New file. Fibonacci heap. 2001-08-20 Andrew Cagney * floatformat.h (floatformat_arm_ext): Document as deprecated. (floatformat_arm_ext_big, floatformat_arm_ext_littlebyte_bigword) (floatformat_ia64_spill_little, floatformat_ia64_quad_little) (floatformat_ia64_spill_big, floatformat_ia64_quad_big) (floatformat_m88110_harris_ext): Declare. 2001-08-18 Zack Weinberg * ansidecl.h: Reorganize for readability, remove documentation of obsolete macros, document PARAMS and VPARAMS. Add new macros VA_OPEN, VA_CLOSE, and VA_FIXEDARG for nicer variadic function implementation. 2001-08-16 Richard Henderson * hashtab.h (htab_hash_string): Declare. 2001-08-10 Andrew Cagney * libiberty.h (lbasename): Change function declaration to return a const char pointer. 2001-08-02 Mark Kettenis * xregex.h (_REGEX_RE_COMP): Define. (re_comp): Define to xre_comp. (re_exec): Define to xre_exec. 2001-08-02 Charles Wilson * bfdlink.h (struct bfd_link_info): add new boolean field pei386_auto_import. 2001-07-18 Andreas Jaeger * xregex2.h: Place under LGPL version 2.1. 2001-07-10 Jeff Johnston * xregex.h: New file to support libiberty regex. * xregex2.h: Ditto. 2001-06-15 Hans-Peter Nilsson * bfdlink.h (struct bfd_link_info): New member export_dynamic. 2001-05-16 Matt Kraai * partition.h: Fix misspelling of `implementation'. 2001-05-10 Kaveh R. Ghazi * ansidecl.h (NULL_PTR): Delete. 2001-05-07 Zack Weinberg * demangle.h: Use PARAMS for all prototypes. * ternary.h: Use PARAMS for all prototypes. Use PTR, not void *. Make arguments constant where possible. 2001-05-07 Mark Mitchell * splay-tree.h (splay_tree_max): New function. (splay_tree_min): Likewise. 2001-04-27 Johan Rydberg * dis-asm.h (print_insn_openrisc): Add prototype. 2001-04-15 Daniel Berlin * ternary.h: New file - Ternary search tree header. 2001-04-13 Jakub Jelinek * bfdlink.h (bfd_link_discard): Add discard_sec_merge. 2001-04-03 Zack Weinberg * ansidecl.h: All logic from gcc/gansidecl.h moved here. 2001-03-31 Kaveh R. Ghazi * libiberty.h (alloca): Handle setting C_ALLOCA. 2001-03-20 Jim Blandy * demangle.h (enum gnu_v3_constructor_kinds, is_gnu_v3_mangled_ctor, enum gnu_v3_destructor_kinds, is_gnu_v3_mangled_dtor): New declarations. 2001-03-14 Nick Clifton * ansidecl.h: Fix copyright dates. * demangle.h: Fix copyright dates. * floatformat.h: Fix copyright dates. * fnmatch.h: Fix copyright dates. * getopt.h: Fix copyright dates. * libiberty.h: Add FSF copyright notice. * md5.h: Fix copyright dates. * obstack.h: Fix copyright dates. * splay-tree.h: Fix copyright dates. 2001-03-10 Neil Booth John David Anglin * libiberty.h: Add lbasename. 2001-03-06 Zack Weinberg * libiberty.h: Prototype C_alloca; define alloca to either __builtin_alloca or C_alloca as appropriate. 2001-03-01 John David Anglin * safe-ctype.h (_sch_test): Cast enum bit to unsigned short int for pcc compatibility. 2001-02-18 lars brinkhoff * dis-asm.h: Add PDP-11 target. 2001-02-09 Martin Schwidefsky * dis-asm.h: Add linux target for S/390. 2001-01-11 Peter Targett * dis-asm.h (arc_get_disassembler): Correct declaration. 2001-01-09 Philip Blundell * bin-bugs.h (REPORT_BUGS_TO): Set to `bug-binutils@gnu.org'. 2000-12-18 Joseph S. Myers * COPYING: Update to current ftp://ftp.gnu.org/pub/gnu/Licenses/COPYING-2.0 (fixes references to 19yy as example year in copyright notice). 2000-12-19 Hans-Peter Nilsson * dis-asm.h (struct disassemble_info): New member "section". (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialize private_data member. Initialize section member. 2000-12-16 Herman A.J. ten Brugge * safe-ctype.h: Make code work on all targets and not just on targets where a char is 8 bits. 2000-12-10 Fred Fish * bfdlink.h (struct bfd_link_info): Add new allow_shlib_undefined member to struct for systems where it is normal to have undefined symbols in shared libraries at runtime and the runtime linker takes care of redirecting them. 2000-12-07 Zack Weinberg * safe-ctype.h: New file. 2000-12-06 Rodney Brown * getopt.h obstack.h: Standarize copyright statement. 2000-12-04 Richard Henderson * demangle.h: Change "new_abi" to "v3" everywhere. 2000-11-22 Zack Weinberg * libiberty.h: Move #includes to top. Prototype xmalloc_failed. 2000-11-15 Kenneth Block * demangle.h: Add gnat and java demangle styles. 2000-11-04 Hans-Peter Nilsson * hashtab.h (struct htab): Add member return_allocation_failure. (htab_try_create): New prototype. Mention which functions may return NULL when this is used. 2000-11-03 Hans-Peter Nilsson * hashtab.h: Change void * to PTR where necessary. 2000-10-11 Mark Mitchell * splay-tree.h (splay_tree_predecessor): Declare. 2000-09-29 Hans-Peter Nilsson * dis-asm.h: Declare cris_get_disassembler, not print_insn_cris. Fix typo in comment. 2000-09-28 John David Anglin * alloca-conf.h: New file (copied from libiberty). 2000-09-05 John David Anglin * md5.h (md5_uint32): Choose via INT_MAX instead of UINT_MAX. 2000-09-04 Alex Samuel * dyn-string.h: Adjust formatting. (dyn_string_insert_char): New macro. New declaration. 2000-08-28 Jason Merrill * md5.h: New file. 2000-08-24 Greg McGary * libiberty.h (ARRAY_SIZE): New macro. 2000-07-29 Nick Clifton * os9k.h: Add copyright notice. Fix formatting. 2000-07-22 Jason Eckhardt * dis-asm.h (print_insn_i860): Add prototype. 2000-07-20 H.J. Lu * bfdlink.h (bfd_link_info): Add new_dtags. 2000-07-20 Hans-Peter Nilsson * dis-asm.h (print_insn_cris): Declare. 2000-07-19 H.J. Lu (hjl@gnu.org) * bfdlink.h (bfd_link_info): Add flags and flags_1. 2000-06-05 DJ Delorie * MAINTAINERS: new 2000-06-21 Alex Samuel * dyn-string.h (dyn_string_init, dyn_string_new, dyn_string_delete, dyn_string_release, dyn_string_resize, dyn_string_clear, dyn_string_copy, dyn_string_copy_cstr, dyn_string_prepend, dyn_string_prepend_cstr, dyn_string_insert, dyn_string_insert_cstr, dyn_string_append, dyn_string_append_cstr, dyn_string_append_char, dyn_string_substring_dyn_string_eq): Define as same name with __cxa_ prepended, if IN_LIBGCC2. (dyn_string_init, dyn_string_copy, dyn_string_copy_cstr, dyn_string_prepend, dyn_string_prepend_cstr, dyn_string_insert, dyn_string_insert_cstr, dyn_string_append, dyn_string_append_cstr, dyn_string_append_char, dyn_string_substring): Change return type to int. 2000-06-18 Stephane Carrez * dis-asm.h (print_insn_m68hc12): Define. (print_insn_m68hc11): Likewise. 2000-06-18 Nick Clifton * os9k.h: Change values of MODSYNC and CRCCON due to bug report from Russ Magee . 2000-06-07 Kaveh R. Ghazi * demangle.h (demangling_styles): Remove trailing comma in enum. * dyn-string.h (dyn_string_append_char): Change parameter from char to int. 2000-06-04 Alex Samuel * dyn-string.h: Move here from gcc/dyn-string.h. Add new functions. * demangle.h (DMGL_GNU_NEW_ABI): New macro. (DMGL_STYLE_MASK): Or in DMGL_GNU_NEW_ABI. (current_demangling_style): Add gnu_new_abi_demangling. (GNU_NEW_ABI_DEMANGLING_STYLE_STRING): New macro. (GNU_NEW_ABI_DEMANGLING): Likewise. (cplus_demangle_new_abi): New declaration. Tue May 30 16:53:34 2000 Andrew Cagney * floatformat.h (struct floatformat): Add field name. 2000-05-26 Eli Zaretskii * filenames.h: New file. (HAVE_DOS_BASED_FILE_SYSTEM, IS_DIR_SEPARATOR) (IS_ABSOLUTE_PATH, FILENAME_CMP): New macros. 2000-05-23 Kaveh R. Ghazi * getopt.h (getopt): Also check HAVE_DECL_* when prototyping. * libiberty.h (basename): Likewise. 2000-05-17 S. Bharadwaj Yadavalli Rick Gorton * bfdlink.h (struct bfd_link_info): Add emitrelocations flag. 2000-05-08 Alan Modra * dis-asm.h (print_insn_tic54x): Declare. 2000-05-06 Zack Weinberg * ansidecl.h: #define __extension__ to nothing if GCC_VERSION < 2008. 2000-05-04 Kaveh R. Ghazi * demangle.h (demangler_engine): Constify. Thu May 4 17:15:26 2000 Philippe De Muyter * sort.h (sys/types.h): File included unconditionnaly. (stddef.h): File include only #ifdef __STDC__. 2000-05-03 Zack Weinberg * symcat.h: Remove #endif label. 2000-04-28 Kenneth Block Jason Merrill * demangle.h (libiberty_demanglers): new table for different styles. (cplus_demangle_set_style): New function for setting style. (cplus_demangle_name_to_style): New function to translate name. 2000-04-24 Mark Mitchell * hashtab.h (hash_pointer): Declare. (eq_pointer): Likewise. 2000-04-23 Mark Mitchell * sort.h: New file. Fri Apr 21 13:20:53 2000 Richard Henderson David Mosberger * dis-asm.h (print_insn_ia64): Declare. Tue Apr 18 16:22:30 2000 Richard Kenner * hashtab.h (enum insert_option): New type. (htab_find_slot, htab_find_slot_with_hash): Use it. 2000-04-17 Kaveh R. Ghazi * symcat.h: Honor autoconf macro HAVE_STRINGIZE. Add comments/caveats with regard to traditional C behavior. 2000-04-05 Richard Henderson * splay-tree.h (splay_tree_remove): Declare. 2000-04-04 Alan Modra * bin-bugs.h (REPORT_BUGS_TO): Remove translated part. 2000-04-03 Alan Modra * bin-bugs.h: New file. 2000-03-30 Mark Mitchell * hashtab.h (hashval_t): New type. (htab_find_with_hash): Use it as an argument. (htab_find_slot_with_hash): Likewise. 2000-03-27 Denis Chertykov * dis-asm.h (print_insn_avr): Declare. 2000-03-14 Bernd Schmidt * hashtab.h (htab_trav): Modify type so that first arg is of type void **. (htab_find_with_hash, htab_find_slot_with_hash): Declare new functions. 2000-03-09 Alex Samuel * partition.h: New file. 2000-03-09 Zack Weinberg * hashtab.h (struct htab): Add del_f. (htab_del): New type. (htab_create): Add fourth argument. 2000-03-08 Zack Weinberg * hashtab.h (hash_table_t): Rename to htab_t. (struct hash_table): Rename to struct htab. Shorten element names. Reorder elements by size. (htab_hash, htab_eq, htab_trav): New typedefs for the callback function pointers. (hash_table_entry_t): Discard; just use void * for element type. 2000-03-01 H.J. Lu * bfdlink.h (bfd_link_callbacks): Add a boolean arg to the undefined_symbol callback. 2000-02-23 Linas Vepstas * dis-asm.h (print_insn_i370): Declare. Tue Feb 22 15:19:54 2000 Andrew Cagney * remote-sim.h (sim_trace): Document return values. (sim_set_trace): Declare. Deprecate. 2000-02-21 Alan Modra * dis-asm.h (struct disassemble_info): Change `length' param of read_memory_func to unsigned. Change type of `buffer_length' and `octets_per_byte' to unsigned. (buffer_read_memory): Change `length' param to unsigned. 2000-02-16 Nick Clifton * dis-asm.h: Add prototypes for ARM register name functions. Wed Feb 9 18:45:49 2000 Andrew Cagney * wait.h: Delete. No longer used by GDB. Tue Feb 8 17:01:13 2000 Andrew Cagney * remote-sim.h (sim_resume): Clarify use of SIGGNAL. (sim_stop_reason): Clarify meaning of sim_signalled. 2000-02-03 Timothy Wall * dis-asm.h (struct disassemble_info): Added octets_per_byte field and initialize it to one (1). 2000-01-27 Nick Clifton * dis-asm.h: Add prototype for disassembler_usage(). Add prototype for arm_disassembler_options(). Remove prototype for arm_toggle_regnames(). Add prototype for parse_arm_disassembler_option(). Sat Jan 1 19:06:52 2000 Hans-Peter Nilsson * symcat.h (STRINGX) [!__STDC__ || ALMOST_STDC]: Change "?" to "s" to stringify argument s. Wed Dec 15 11:22:56 1999 Jeffrey A Law (law@cygnus.com) * hp-symtab.h (HP_LANGUAGE_FORTRAN): New enumeration constant. (HP_LANGUAGE_F77): Define using HP_LANGUAGE_FORTRAN. 1999-12-15 Doug Evans * dis-asm.h: Enclose in extern "C" ifdef __cplusplus. 1999-12-05 Mark Mitchell * splay-tree.h (struct splay_tree_node): Rename to ... (struct splay_tree_node_s): ... this. (struct splay_tree): Rename to ... (struct splay_tree_s): ... this. 1999-11-30 Kaveh R. Ghazi * ansidecl.h (ATTRIBUTE_MALLOC): New macro. * libiberty.h (buildargv, dupargv, concat, choose_temp_base, make_temp_file, xmalloc, xcalloc, xstrdup, xmemdup): Add ATTRIBUTE_MALLOC. (xatexit): Remove __GNUC__ check, add ATTRIBUTE_NORETURN. 1999-11-28 Kaveh R. Ghazi * libiberty.h: Include stdarg.h when ANSI_PROTOTYPES is defined. (asprintf, vasprintf): Provide declarations. Wed Nov 10 12:43:21 1999 Philippe De Muyter Kaveh R. Ghazi * ansidecl.h: Define and test `GCC_VERSION', not `HAVE_GCC_VERSION'. 1999-11-04 Jimmy Guo * hp-symtab.h (dntt_type_fparam): Add doc_ranges, misc_kind fields, change location type to CORE_ADDR from int. (dntt_type_const): Name the 5th field location_type. Sun Oct 24 19:11:32 1999 Andrew Cagney * sim-d10v.h (SIM_D10V_TS2_DMAP_REGNUM): Define. 1999-10-23 08:51 -0700 Zack Weinberg * hashtab.h: Give hash_table_t a struct tag. Add prototypes for clear_hash_table_slot and traverse_hash_table. Correct prototype of all_hash_table_collisions. Sat Oct 23 19:00:13 1999 Andrew Cagney * sim-d10v.h: New file. Fri Oct 15 01:47:51 1999 Vladimir Makarov * hashtab.h: New file. 1999-10-10 Kaveh R. Ghazi * ansidecl.h (HAVE_GCC_VERSION): New macro. Use it instead of explicitly testing __GNUC__ and __GNUC_MINOR__. (ATTRIBUTE_PRINTF): Use `__format__', not `format'. 1999-09-25 Kaveh R. Ghazi * libiberty.h (make_temp_file): Add a prototype. Tue Sep 14 00:35:02 1999 Marc Espie * libiberty.h (basename): OpenBSD has a correct prototype. (xrealloc): Remove outdated comment. 1999-09-07 Jeff Garzik * libiberty.h (xmemdup): Add prototype for new function. 1999-09-04 Steve Chamberlain * dis-asm.h (print_insn_pj): Declare. 1999-09-01 Kaveh R. Ghazi * obstack.h (obstack_grow, obstack_grow0): Move (char*) casts in calls to `_obstack_memcpy' from here ... (_obstack_memcpy): ... to here, except in the __STDC__ case which doesn't need it. 1999-08-30 Kaveh R. Ghazi * libiberty.h (getpwd): Prototype. 1999-08-01 Mark Mitchell * splay-tree.h (splay_tree_insert): Return the new node. 1999-07-11 Ian Lance Taylor * ansidecl.h: Copy attribute support macros from egcs. 1999-06-22 Mark Mitchell * bfdlink.h (struct bfd_link_hash_entry): Add init_function and fini_function. 1999-06-20 Mark Mitchell * mips.h (Elf32_Internal_Msym): New structure. (Elf32_External_Msym): Likewise. (ELF32_MS_REL_INDEX): New macro. (ELF32_MS_FLAGS): Likewise. (ELF32_MS_INFO): Likewise. 1999-06-14 Nick Clifton * dis-asm.h (arm_toggle_regnames): New prototype. (struct diassemble_info): New field: disassembler_options. 1999-04-11 Richard Henderson * bfdlink.h (bfd_elf_version_expr): Rename `match' to `pattern'. Add `match' callback function. 1999-04-10 Richard Henderson * bfdlink.h (bfd_link_info): Add no_undefined. 1999-04-08 Nick Clifton * dis-asm.h: Add prototype for print_insn_mcore. 1999-04-02 Mark Mitchell * splay-tree.h (splay_tree_compare_pointers): Declare. 1999-03-30 Mark Mitchell * splay-tree.h (splay_tree_compare_ints): Declare. Wed Mar 24 12:46:29 1999 Andrew Cagney * libiberty.h (basename): Cygwin{,32} should have the prototype. 1999-02-22 Jim Lemke * bfdlink.h (bfd_link_info): add field "mpc860c0". Mon Feb 1 21:05:46 1999 Catherine Moore * dis-asm.h (print_insn_i386_att): Declare. (print_insn_i386_intel): Declare. 1998-12-30 Michael Meissner * dis-asm.h (INIT_DISASSEMBLE_INFO_NO_ARCH): Cast STREAM and FPRINTF_FUNC to avoid compiler warnings. Wed Dec 30 16:07:14 1998 David Taylor * dis-asm.h: change void * to PTR (two places). Mon Dec 14 09:53:31 1998 Kaveh R. Ghazi * demangle.h: Don't check IN_GCC anymore. * splay-tree.h: Likewise. Tue Dec 8 00:30:31 1998 Elena Zannoni The following changes were made by Elena Zannoni and Edith Epstein as part of a project to merge in changes made by HP; HP did not create ChangeLog entries. * dis-asm.h (struct disassemble_info): change the type of stream from FILE* to void*, for use with gdb's new type GDB_FILE. (fprintf_ftype): change FILE* parameter type to void*. * demangle.h: (DMGL_EDG): new macro for Kuck and Associates (DMGL_STYLE_MASK): modify to include Kuck and Assoc style (demangling_styles): add new edg_demangling style (EDG_DEMANGLING_STYLE_STRING): new macro (EDG_DEMANGLING): new macro (DMGL_HP): new macro, for HP/aCC compiler. (DMGL_STYLE_MASK): modify to include new HP's style. (demangling_styles): add new hp_demangling value. (HP_DEMANGLING_STYLE_STRING): new macro. (ARM_DEMANGLING): coerce to int. (HP_DEMANGLING): new macro. * hp-symtab.h: rewritten, from HP. (quick_procedure): change type of language field to unsigned int (quick_module): change type of language field to unsigned int (struct dntt_type_svar): add field thread_specific. (hp_language): add languages modcal and dmpascal. Fri Nov 20 13:14:00 1998 Andrew Cagney * libiberty.h (basename): Add prototype for FreeBSD. Fri Nov 13 19:19:11 1998 Kaveh R. Ghazi * libiberty.h: Prototype xcalloc. Sun Nov 8 17:42:25 1998 Kaveh R. Ghazi * ansidecl.h: Wrap problematic macros with !IN_GCC. * demangle.h: Never define PARAMS(). * splay-tree.h: Likewise. Sat Nov 7 18:30:20 1998 Peter Schauer * dis-asm.h (print_insn_vax): Declare. Sat Nov 7 16:04:03 1998 Kaveh R. Ghazi * demangle.h: Don't include gansidecl.h. * splay-tree.h: Likewise. 1998-10-26 16:03 Ulrich Drepper * bfdlink.h (struct bfd_link_info): Add new field optimize. Thu Oct 22 19:58:00 1998 Kaveh R. Ghazi * splay-tree.h: Wrap function pointer parameter declarations in PARAMS() macro. 1998-10-21 Mark Mitchell * splay-tree.h: New file. Fri Oct 9 00:02:03 1998 Jeffrey A Law (law@cygnus.com) * Merge devo and egcs include directories. Sat Sep 5 12:16:33 1998 Jeffrey A Law (law@cygnus.com) * getopt.h, obstack.h: Updated from gcc. 1998-08-03 Jason Molenda (jsm@bugshack.cygnus.com) * libiberty.h (xexit): Change decl to use modern GCC attribute to indicate exit does not return. Mon Jun 1 13:48:32 1998 Jason Molenda (crash@bugshack.cygnus.com) * obstack.h: Update to latest FSF version. Tue Feb 24 13:05:02 1998 Doug Evans * dis-asm.h (disassemble_info): Member `symbol' renamed to `symbols' and made an "asymbol **". New member num_symbols. (INIT_DISASSEMBLE_INFO_NO_ARCH): Update. Tue Feb 17 12:32:18 1998 Andrew Cagney * remote-sim.h (sim_fetch_register, sim_store_register): Add register length parameter. Functions return actual length of register. Thu Feb 12 16:29:01 1998 Ian Lance Taylor * getopt.h: Update to latest FSF version. Wed Feb 11 16:56:06 1998 Doug Evans * symcat.h: New file. Mon Feb 2 17:13:31 1998 Steve Haworth * dis-asm.h (print_insn_tic30): Declare. Thu Jan 22 16:23:59 1998 Fred Fish * dis-asm.h: Add flag INSN_HAS_RELOC to tell disassembly function there is a reloc on this line. Mon Dec 8 11:22:23 1997 Nick Clifton * dis-asm.h: Remove prototype of disasm_symaddr() as this function no longer exists. Tue Dec 2 10:20:53 1997 Nick Clifton * dis-asm.h (disasm_symaddr): New prototype. Mon Dec 1 11:29:35 1997 Doug Evans * callback.h (CB_SYSCALL): Comment out arg names in prototypes. Wed Nov 26 16:47:58 1997 Michael Meissner * callback.h (CB_SYSCALL): Consistantly use names for prototype arguments. Wed Nov 26 11:39:30 1997 Doug Evans * callback.h (CB_SYSCALL): Change byte count arguments to {read,write}_mem to `int'. New member `magic'. (CB_SYSCALL_MAGIC,CB_SYSCALL_INIT): New macros. Tue Nov 25 01:35:52 1997 Doug Evans * callback.h (struct stat): Move forward decl up. (host_callback): Pass stat struct pointer to stat,fstat. (CB_SYS_nnn): Reorganize. (CB_SYSCALL): New members p1,p2. (cb_host_to_target_stat): Delete fourth arg. Sat Nov 22 23:34:15 1997 Andrew Cagney * remote-sim.h (sim_stop_reason): Clarify sim_signalled SIGRC argument. Mon Nov 17 14:00:51 1997 Doug Evans * callback.h (CB_TARGET_DEFS_MAP): Renamed from target_defs_map. (host_callback): Add stat, fstat, syscall_map, errno_map, open_map, signal_map, stat_map. (errn_map,open_map): Renamed to cb_init_foo_map. (cb_host_to_target_errno,cb_target_to_host_open): Renamed from host_to_target_errno,target_to_host_open. (cb_read_target_syscall_maps): Add prototype. (cb_target_to_host_syscall): Likewise. (cb_host_to_target_stat): Likewise. (cb_syscall): Likewise. (CB_SYS_{exit,open,close,read,write,lseek,unlink,getpid,kill,fstat, argvlen,argv,chdir,stat,chmod,utime,time}): Define. (CB_SYSCALL): New type. (CB_RC): New enum. Fri Nov 7 10:34:09 1997 Rob Savoye * libiberty.h: Add extern "C" { so it can be used with C++ programs. * remote-sim.h: Add extern "C" { so it can be used with C++ programs. Tue Oct 14 16:07:51 1997 Nick Clifton * dis-asm.h (struct disassemble_info): New field 'symbol_at_address_func'. (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialise new field with generic_symbol_at_address. Mon Oct 13 10:17:15 1997 Andrew Cagney * remote-sim.h: Clarify sim_read, sim_write MEM argument. Wed Sep 24 18:03:10 1997 Stu Grossman * remote-sim.h (SIM_RC): Add a bunch of new return codes for breakpoint stuff. * Add functions to tell the simulator to set/clear/enable/disable intrinsic breakpoints. Thu Aug 28 19:41:42 1997 Andrew Cagney * libiberty.h (dupargv): Add prototype. Tue Aug 26 12:25:49 1997 Andrew Cagney * remote-sim.h (sim_create_inferior): Add ABFD arg. Document. Mon Aug 25 10:50:51 1997 Andrew Cagney * remote-sim.h (sim_open): Add ABFD arg. Document. Fri Aug 8 16:43:56 1997 Doug Evans * dis-asm.h (arc_get_disassembler): Declare. Wed Jul 30 11:39:50 1997 Per Bothner * demangle.h (DMGL_JAVA): New option to request Java demangling. Tue Jul 22 17:59:54 1997 Ian Lance Taylor * libiberty.h (PEXECUTE_*): Define. (pexecute, pwait): Declare. Fri Jun 6 13:02:33 1997 Andrew Cagney * remote-sim.h (sim_kill): Mark as depreciated. Fri May 23 13:43:41 1997 Fred Fish * bfdlink.h (struct bfd_link_info): Add task_link member. Thu May 22 11:32:49 1997 Andrew Cagney * remote-sim.h: Review documentation. Clarify restrictions on when functions can be called. Wed May 21 16:47:53 1997 Andrew Cagney * remote-sim.h (sim_set_profile_size): Add prototype, document as depreciated. Tue May 20 09:32:22 1997 Andrew Cagney * remote-sim.h (sim_open): Add callback struct. (sim_set_callbacks): Drop SIM_DESC argument. Document. (sim_size): Remove recently added SIM_DESC argument. Document. Mon May 19 19:14:44 1997 Andrew Cagney * remote-sim.h: Pass SD into sim_size. Thu May 15 01:24:16 1997 Mark Alexander * obstack.h (obstack_specify_allocation_with_arg, obstack_chunkfun, obstack_freefun): Eliminate compile warnings in gdb. Tue Apr 22 10:24:34 1997 Fred Fish * floatformat.h (floatformat_byteorders): Add comments for previous formats and add floatformat_littlebyte_bigword, primarily for ARM. Add declaration for floatformat_ieee_double_littlebyte_bigword. Fri Apr 18 13:04:49 1997 Andrew Cagney * remote-sim.h (sim_stop): New interface - asynchronous notification of a request to stop / suspend the running simulation. * remote-sim.h (enum sim_stop): Add sim_running and sim_polling as states for use internal to simulators. * callback.h (struct host_callback_strut): Put a magic number at the end of the struct to allow basic checking. (struct host_callback_struct ): Add poll_quit - so that the console etc can be polled at regular intervals. Thu Apr 17 02:17:12 1997 Doug Evans * remote-sim.h (struct _bfd): Declare. (sim_load): Return SIM_RC. New arg `abfd'. (sim_create_inferior): Return SIM_RC. Delete arg `start_address'. Wed Apr 2 17:09:12 1997 Andrew Cagney * remote-sim.h (sim_trace, sim_size): Make these global. They will go away shortly. Wed Apr 2 15:23:49 1997 Doug Evans * remote-sim.h (SIM_OPEN_KIND, SIM_RC): New enums. (sim_open): New argument `kind'. Wed Apr 2 14:45:51 1997 Ian Lance Taylor * COPYING: Update FSF address. Fri Mar 28 15:29:54 1997 Mike Meissner * callback.h (top level): Include stdarg.h or varargs.h if va_start is not defined. (host_callback_struct): Make {,e}vprintf_filtered take a va_list instead of void *, since va_list might be an array or structure type. Fri Mar 28 15:44:41 1997 H.J. Lu * libiberty.h (basename): Add prototype for glibc and linux. Mon Mar 17 19:22:12 1997 Ian Lance Taylor * objalloc.h: New file. Mon Mar 17 14:57:55 1997 Andrew Cagney * remote-sim.h: New file, copied in from gdb/remote-sim.h. One day this will be placed in a directory of its own. Sat Mar 15 19:00:14 1997 Ian Lance Taylor * obstack.h: Update to current FSF version. Thu Mar 6 15:46:59 1997 Andrew Cagney * callback.h (struct host_callback_struct): Add callbacks - flush_stdout, write_stderr, flush_stderr, vprintf_filtered, evprintf_filtered. Delete redundant callbacks - printf_filtered. Thu Feb 27 23:18:27 1997 Ian Lance Taylor * bfdlink.h (struct bfd_link_info): Remove lprefix and lprefix_len fields. Tue Feb 25 00:10:49 1997 Ian Lance Taylor * dis-asm.h (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialize bytes_per_chunk and display_endian. Mon Feb 24 17:47:02 1997 Ian Lance Taylor From Eric Youngdale : * bfdlink.h (struct bfd_elf_version_expr): Define. (struct bfd_elf_version_deps): Define. (struct bfd_elf_version_tree): Define. Thu Feb 6 14:20:01 1997 Martin M. Hunt * dis-asm.h: (disassemble_info): Add new fields bytes_per_chunk and display_endian to control the display of raw instructions. Fri Dec 27 22:17:37 1996 Fred Fish * dis-asm.h (print_insn_tic80): Declare. Sun Dec 8 17:11:12 1996 Doug Evans * callback.h (host_callback): New member `error'. Wed Nov 20 00:40:23 1996 Doug Evans * callback.h: New file, moved here from gdb. Mon Nov 18 16:34:00 1996 Dawn Perchik * libiberty.h: Checkin again; last checkin failed due to sticky tag. Wed Nov 13 08:22:00 1996 Dawn Perchik * libiberty.h: Revert last commit due to conflicts with hpux system headers. Tue Nov 12 16:31:00 1996 Dawn Perchik * libiberty.h: Move prototypes from argv.c here. Thu Oct 31 14:56:18 1996 Doug Evans * ansidecl.h (VPARAMS,VA_START): Define. Fri Oct 25 12:08:04 1996 Ian Lance Taylor * dis-asm.h (disassemble_info): Add bytes_per_line field. (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialize bytes_per_line field. Thu Oct 24 17:10:01 1996 Ian Lance Taylor * dis-asm.h (disassemble_info): Add symbol field. (INIT_DISASSEMBLE_INFO_NO_ARCH): Initialize symbol field. Thu Oct 17 11:17:40 1996 Doug Evans * dis-asm.h (print_insn_m32r): Declare. Mon Oct 14 23:56:52 1996 Ian Lance Taylor * libiberty.h: Declare parameter types for xmalloc and xrealloc. Thu Oct 3 13:45:27 1996 Ian Lance Taylor * fnmatch.h: New file. Thu Oct 3 10:33:14 1996 Jeffrey A Law (law@cygnus.com) * dis-asm.h (print_insn_mn10x00): Delete declaration. (print_insn_mn10200, print_insn_mn10300): Declare. Wed Oct 2 21:24:43 1996 Jeffrey A Law (law@cygnus.com) * dis-asm.h (print_insn_mn10x00): Declare. Mon Sep 30 13:56:11 1996 Fred Fish * libiberty.h: Remove #ifndef PRIVATE_XMALLOC. Sat Aug 31 13:27:06 1996 Jeffrey A Law (law@cygnus.com) * dis-asm.h (print_insn_v850): Declare. Tue Aug 13 16:10:30 1996 Stu Grossman (grossman@critters.cygnus.com) * obstack.h: Change bcopy to memcpy. Works better on Posix systems, which generally lack bcopy. Mon Aug 12 17:03:18 1996 Stu Grossman (grossman@critters.cygnus.com) * ansidecl.h: Change WIN32 to _WIN32. Fri Jul 26 13:58:18 1996 Ian Lance Taylor * dis-asm.h: Add flavour field. (print_insn_alpha): Declare. (print_insn_alpha_osf, print_insn_alpha_vms): Don't declare. (INIT_DISASSEMBLE_INFO): Initialize flavour field. Tue Jul 23 17:37:58 1996 Fred Fish * libiberty.h (PRIVATE_XMALLOC): Enclose xmalloc/xrealloc definitions inside #ifndef so that programs that want to can define PRIVATE_XMALLOC and then define xmalloc and xrealloc anyway they want. (basename): Document in source that we can't declare the parameter type because it is declared inconsistently across different systems. Mon Jul 22 13:16:13 1996 Richard Henderson * dis-asm.h (print_insn_alpha): Don't declare. (print_insn_alpha_osf, print_insn_alpha_vms): Declare. Wed Jul 17 14:45:12 1996 Martin M. Hunt * dis-asm.h: (print_insn_d10v): Declare. Mon Jul 15 16:55:38 1996 Stu Grossman (grossman@critters.cygnus.com) * dis-asm.h: Get rid of decls for print_insn_i8086, print_insn_sparc64 and print_insn_sparclite. * (INIT_DISASSEMBLE_INFO): Split into two pieces. One, INIT_DISASSEMBLE_INFO_NO_ARCH inits everything except for endian, mach, and arch. Fri Jul 12 10:19:27 1996 Stu Grossman (grossman@critters.cygnus.com) * dis-asm.h (print_insn_i8086): Declare. Wed Jul 3 16:02:39 1996 Stu Grossman (grossman@critters.cygnus.com) * dis-asm.h (print_insn_sparclite): Declare. Tue Jun 18 16:02:46 1996 Jeffrey A. Law * dis-asm.h (print_insn_h8300s): Declare. Tue Jun 18 15:11:33 1996 Klaus Kaempf * fopen-vms.h: New file. Tue Jun 4 18:58:16 1996 Ian Lance Taylor * bfdlink.h (struct bfd_link_info): Add notice_all field. Fri Apr 26 10:33:12 1996 Doug Evans * demangle.h (#ifdef IN_GCC): #include "gansidecl.h". (PROTO,PTR,const): Delete. Mon Apr 22 17:27:42 1996 Ian Lance Taylor * bfdlink.h (struct bfd_link_info): Add traditional_format field. Mon Apr 15 15:16:56 1996 Doug Evans * libiberty.h (choose_temp_base): Add prototype. Tue Mar 12 17:29:46 1996 Ian Lance Taylor * bfdlink.h (bfd_wrapped_link_hash_lookup): Declare. (struct bfd_link_info): Add wrap_hash field. Wed Feb 14 16:49:17 1996 Martin Anantharaman * ieee.h (ieee_record_enum_type): Define ieee_external_reference_info_enum. Fri Feb 2 17:09:25 1996 Doug Evans * dis-asm.h (DISASM_RAW_INSN): Delete. Tue Jan 23 09:21:47 1996 Doug Evans * dis-asm.h (INIT_DISASSEMBLE_INFO): Set endian to BFD_ENDIAN_UNKNOWN. New argument FPRINTF_FUNC. Mon Jan 22 16:37:59 1996 Doug Evans * dis-asm.h (disassemble_info): New members arch, mach, endian. (INIT_DISASSEMBLE_INFO): Initialize them. (DISASM_RAW_INSN{,FLAG}): Define. Thu Jan 18 11:32:38 1996 Ian Lance Taylor * demangle.h (cplus_demangle_opname): Change opname parameter to const char *. (cplus_mangle_opname): Change return type and opname parameter to const char *. Fri Jan 5 00:01:22 1996 Ian Lance Taylor * ieee.h (enum ieee_record): Add ieee_asn_record_enum, ieee_at_record_enum, ieee_ty_record_enum, ieee_atn_record_enum, ieee_bb_record_enum, and ieee_be_record_enum. Wed Jan 3 13:12:09 1996 Fred Fish * obstack.h: Update copyright to 1996. (_obstack_memory_used): Declare. (obstack_memory_used): Define macro. Thu Dec 28 11:42:12 1995 Ian Lance Taylor * libiberty.h (xstrdup): Declare. Thu Dec 21 14:47:17 1995 Michael Meissner * wait.h: Protect all macros with #ifndef. Tue Oct 24 21:45:40 1995 Ian Lance Taylor * bfdlink.h (struct bfd_link_info): Add static_link field. Tue Sep 12 16:28:04 1995 Ian Lance Taylor * bfdlink.h (struct bfd_link_callbacks): Add symbol parameter to warning callback. Fri Sep 1 13:11:51 1995 Ian Lance Taylor * bfdlink.h (struct bfd_link_callbacks): Change warning callback to take BFD, section, and address arguments. Thu Aug 31 16:45:12 1995 steve chamberlain * bfdlink.h (struct bfd_link_info): Remove PE stuff. Tue Aug 22 03:18:23 1995 Ken Raeburn * libiberty.h: Declare xstrerror. From Pat Rankin. Mon Aug 21 18:11:36 1995 steve chamberlain * bfdlink.h (struct bfd_link_info): Remove PE stuff. Wed Aug 2 08:14:12 1995 Doug Evans * dis-asm.h (print_insn_sparc64): Declare. Mon Jul 10 13:26:49 1995 Eric Youngdale * bfdlink.h (struct bfd_link_info): Add new field symbolic. Sun Jul 2 17:48:40 1995 Ian Lance Taylor * bfdlink.h (struct bfd_link_info): Change type of base_file to PTR. Thu Jun 29 00:02:45 1995 Steve Chamberlain * bfdlink.h (struct bfd_link_info): Added base_file member. Tue Jun 20 16:40:04 1995 Steve Chamberlain * ansidecl.h: win32s is ANSI enough. Thu May 18 04:25:50 1995 Ken Raeburn Wed May 10 14:28:16 1995 Richard Earnshaw (rearnsha@armltd.co.uk) * dis-asm.h (print_insn_arm): Delete declaration. (print_insn_{little,big}_arm): New declarations. * floatformat.h (floatformat_arm_ext): Declare. Sat May 13 10:14:08 1995 Steve Chamberlain * bfdlink.h (subsytem, stack_heap_parameters): New. Thu May 4 14:36:42 1995 Jason Merrill * demangle.h: Don't include ansidecl.h if IN_GCC. Tue Feb 21 00:37:28 1995 Jeff Law (law@snake.cs.utah.edu) * hp-symtab.h: Don't use bitfield enumerations, the HP C compiler does not handle them correctly. Thu Feb 9 14:20:27 1995 Ian Lance Taylor * libiberty.h (basename): Don't declare parameter type; some systems have this in their header files. Wed Feb 8 17:35:38 1995 Ian Lance Taylor * bfdlink.h (struct bfd_link_hash_entry): Change format of common symbol information, to remove restrictions on maximum size and alignment power, by using a pointer to a structure instead. Mon Feb 6 14:55:32 1995 Ian Lance Taylor * bfdlink.h (enum bfd_link_hash_type): Rename bfd_link_hash_weak to bfd_link_hash_undefweak. Add bfd_link_hash_defweak. Mon Jan 16 21:00:23 1995 Stan Shebs * dis-asm.h (GDB_INIT_DISASSEMBLE_INFO, etc): Remove all GDB-specific definitions. Sun Jan 15 18:39:35 1995 Steve Chamberlain * dis-asm.h (print_insn_w65): Declare. Thu Jan 12 17:51:17 1995 Ken Raeburn * libiberty.h (hex_p): Fix sense of test. Wed Jan 11 22:36:40 1995 Ken Raeburn * libiberty.h (_hex_array_size, _hex_bad, _hex_value, hex_init, hex_p, hex_value): New macros and declarations, for hex.c. Fri Jan 6 17:44:14 1995 Ian Lance Taylor * dis-asm.h: Make idempotent. Wed Dec 14 13:08:43 1994 Stan Shebs * progress.h: New file, empty definitions for progress macros. Fri Nov 25 00:14:05 1994 Jeff Law (law@snake.cs.utah.edu) * hp-symtab.h: New file describing the debug symbols emitted by the HP C compilers. Fri Nov 11 15:48:37 1994 Ian Lance Taylor * bfdlink.h (struct bfd_link_hash_entry): Change u.c.size from 24 to 26 bits, and change u.c.alignment_power from 8 to 6 bits. 6 bit in the alignment power is enough for a 64 bit address space. Mon Oct 31 13:02:51 1994 Stan Shebs (shebs@andros.cygnus.com) * demangle.h (cplus_mangle_opname): Declare. Tue Oct 25 11:38:02 1994 Ian Lance Taylor * bfdlink.h (struct bfd_link_callbacks): Fix comments for multiple_common field. Sun Sep 04 17:58:10 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org) * dis-asm.h: Add support for the ARM. Wed Aug 10 12:51:41 1994 Doug Evans (dje@canuck.cygnus.com) * libiberty.h (strsignal): Document its existence even if we can't declare it. Tue Aug 2 14:40:03 1994 Jim Kingdon (kingdon@lioth.cygnus.com) * os9k.h: Remove u_int16, u_int32, and owner_id typedefs and expand their uses. Those names conflict with Mach headers. Fri Jul 22 14:17:12 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) * bfdlink.h (struct bfd_link_hash_entry): Change u.c.size into a bitfield. Add field u.c.alignment_power. Sun Jul 10 00:26:39 1994 Ian Dall (dall@hfrd.dsto.gov.au) * dis-asm.h: Add print_insn_ns32k declaration. Mon Jun 20 17:13:29 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) * bfdlink.h (bfd_link_hash_table): Make creator a const pointer. Sat Jun 18 16:09:32 1994 Stan Shebs (shebs@andros.cygnus.com) * demangle.h (cplus_demangle_opname): Declare. Thu Jun 16 15:19:03 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * bfdlink.h (struct bfd_link_info): Add new field shared. Mon Jun 6 14:39:44 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * bfdlink.h (struct bfd_link_hash_entry): Remove written field: not needed for all backends. Thu Apr 28 19:06:50 1994 Ken Raeburn (raeburn@cujo.cygnus.com) * dis-asm.h (disassembler): Declare. Fri Apr 1 00:38:17 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu) * obstack.h: Delete use of IN_GCC to control whether stddef.h or gstddef.h is included. Tue Mar 22 13:06:02 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * bfdlink.h (enum bfd_link_order_type): Add bfd_data_link_order. (struct bfd_link_order): Add data field to union. Mon Mar 21 18:45:26 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * bfdlink.h (struct bfd_link_callbacks): Change bitsize argument to add_to_set to reloc. Remove bitsize argument from constructor. Comment that reloc_overflow, reloc_dangerous and unattached_reloc must handle NULL pointers for reloc location. (enum bfd_link_order_type): Add bfd_section_reloc_link_order and bfd_symbol_reloc_link_order. (struct bfd_link_order): Add reloc field to union. (struct bfd_link_order_reloc): Define. Mon Mar 14 12:27:50 1994 Ian Lance Taylor (ian@cygnus.com) * ieee-float.h: Removed; no longer used. Tue Mar 1 18:10:49 1994 Kung Hsu (kung@mexican.cygnus.com) * os9k.h: os9000 target specific header file, the header of the object file is used now. Sun Feb 27 21:52:26 1994 Jim Kingdon (kingdon@deneb.cygnus.com) * floatformat.h: New file, intended to replace ieee-float.h. Sun Feb 20 17:15:42 1994 Ian Lance Taylor (ian@lisa.cygnus.com) * ansidecl.h (ANSI_PROTOTYPES): Define if using ANSI prototypes. Wed Feb 16 01:07:12 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * libiberty.h: Don't declare strsignal, to avoid conflicts with Solaris system header files. Sat Feb 12 22:11:32 1994 Jeffrey A. Law (law@snake.cs.utah.edu) * libiberty.h (xexit): Use __volatile__ to avoid losing if compiling with gcc -traditional. Thu Feb 10 14:05:41 1994 Ian Lance Taylor (ian@cygnus.com) * libiberty.h: New file. Declares functions provided by libiberty. Tue Feb 8 05:19:52 1994 David J. Mackenzie (djm@thepub.cygnus.com) Handle obstack_chunk_alloc returning NULL. This allows obstacks to be used by libraries, without forcing them to call exit or longjmp. * obstack.h (struct obstack): Add alloc_failed flag. _obstack_begin, _obstack_begin_1): Declare to return int, not void. (obstack_finish): If alloc_failed, return NULL. (obstack_base, obstack_next_free, objstack_object_size): If alloc_failed, return 0. (obstack_grow, obstack_grow0, obstack_1grow, obstack_ptr_grow, obstack_int_grow, obstack_blank): If alloc_failed, do nothing that could corrupt the obstack. Mon Jan 24 15:06:05 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * bfdlink.h (struct bfd_link_callbacks): Add name, reloc_name and addend argments to reloc_overflow callback. Fri Jan 21 19:13:12 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * dis-asm.h (print_insn_big_powerpc, print_insn_little_powerpc, print_insn_rs6000): Declare. Thu Jan 6 14:15:55 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * bfdlink.h (struct bfd_link_callbacks): Add bitsize argument to add_to_set field. Add new callback named constructor. Thu Dec 30 10:44:06 1993 Ian Lance Taylor (ian@rtl.cygnus.com) * bfdlink.h: New file for new BFD linker backend routines. Mon Nov 29 10:43:57 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * dis-asm.h (enum dis_insn_tyupe): Remove non-ANSI trailing comma. Sat Oct 2 20:42:26 1993 Jim Kingdon (kingdon@lioth.cygnus.com) * dis-asm.h: Move comment to right place. Mon Aug 9 19:03:35 1993 David J. Mackenzie (djm@thepub.cygnus.com) * obstack.h (obstack_chunkfun, obstack_freefun): Add defns from previous version. Are these Cygnus local changes? Fri Aug 6 17:05:47 1993 David J. Mackenzie (djm@thepub.cygnus.com) * getopt.h, obstack.h: Update to latest FSF version. Mon Aug 2 14:45:29 1993 John Gilmore (gnu@cygnus.com) * dis-asm.h: Move enum outside of struct defn to avoid warnings. Mon Aug 2 08:49:30 1993 Stu Grossman (grossman at cygnus.com) * wait.h (WEXITSTATUS, WSTOPSIG): Mask down to 8 bits. This is for systems that store stuff into the high 16 bits of a wait status. Fri Jul 30 18:38:02 1993 John Gilmore (gnu@cygnus.com) * dis-asm.h: Add new fields insn_info_valid, branch_delay_insns, data_size, insn_type, target, target2. These are used to return information from the instruction decoders back to the calling program. Add comments, make more readable. Mon Jul 19 22:14:14 1993 Fred Fish (fnf@deneb.cygnus.com) * nlm: New directory containing NLM/NetWare includes. Thu Jul 15 12:10:04 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) * dis-asm.h (struct disassemble_info): New field application_data. Thu Jul 15 12:41:15 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * dis-asm.h: Added declaration of print_insn_m88k. Fri Jul 2 10:31:59 1993 Ian Lance Taylor (ian@cygnus.com) * ansidecl.h: Use ANSI macros if __mips and _SYSTYPE_SVR4 are defined, since RISC/OS cc handles ANSI declarations in SVR4 mode but does not define __STDC__. Sun Jun 20 18:27:52 1993 Ken Raeburn (raeburn@poseidon.cygnus.com) * dis-asm.h: Don't need to include ansidecl.h any more. Fri Jun 18 03:22:10 1993 John Gilmore (gnu@cygnus.com) * oasys.h: Eliminate "int8_type", "int16_type", "int32_type", and their variants. These changes are coordinated with corresponding changes in ../bfd/oasys.c. Wed Jun 16 10:43:08 1993 Fred Fish (fnf@cygnus.com) * bfd.h: Note that it has been removed. Tue Jun 8 12:16:03 1993 Steve Chamberlain (sac@phydeaux.cygnus.com) Support for H8/300-H * dis-asm.h (print_insn_h8300, print_insn_h8300h): Declare it. Tue Jun 1 07:35:03 1993 Ken Raeburn (raeburn@kr-pc.cygnus.com) * ansidecl.h (const): Don't define it if it's already defined. Thu May 27 18:19:51 1993 Ken Raeburn (raeburn@cambridge.cygnus.com) * dis-asm.h (print_insn_hppa): Declare it. * bfd.h: Moved to bfd directory. Small stub here includes it without requiring "-I../bfd". Thu Apr 29 12:06:13 1993 Ken Raeburn (raeburn@deneb.cygnus.com) * bfd.h: Updated with BSF_FUNCTION. Mon Apr 26 18:15:50 1993 Steve Chamberlain (sac@thepub.cygnus.com) * bfd.h, dis-asm.h: Updated with Hitachi SH. Fri Apr 23 18:41:38 1993 Steve Chamberlain (sac@thepub.cygnus.com) * bfd.h: Updated with alpha changes. * dis-asm.h: Added alpha. Fri Apr 16 17:35:30 1993 Jim Kingdon (kingdon@cygnus.com) * bfd.h: Update for signed bfd_*get_*. Thu Apr 15 09:24:21 1993 Jim Kingdon (kingdon@cygnus.com) * bfd.h: Updated for file_truncated error. Thu Apr 8 10:53:47 1993 Ian Lance Taylor (ian@cygnus.com) * ansidecl.h: If no ANSI, define const to be empty. Thu Apr 1 09:00:10 1993 Jim Kingdon (kingdon@cygnus.com) * dis-asm.h: Declare a29k and i960 print_insn_*. * dis-asm.h: Add print_address_func and related stuff. * dis-asm.h (dis_asm_read_memory): Fix prototype. Wed Mar 31 17:40:16 1993 Jim Kingdon (kingdon@lioth.cygnus.com) * dis-asm.h: Add print_insn_sparc. Wed Mar 31 17:51:42 1993 Ian Lance Taylor (ian@cygnus.com) * bfd.h: Updated for BFD_RELOC_MIPS_GPREL and bfd_[gs]et_gp_size prototypes. Wed Mar 31 16:35:12 1993 Stu Grossman (grossman@cygnus.com) * dis-asm.h: (disassemble_info): Fix typo in prototype of dis_asm_memory_error(). Tue Mar 30 19:09:23 1993 Jim Kingdon (kingdon@lioth.cygnus.com) * dis-asm.h (disassembler_info): Add read_memory_func, memory_error_func, buffer, and length. ({GDB_,}INIT_DISASSEMBLE_INFO): Set them. print_insn_*: Remove second argument. Tue Mar 30 14:48:55 1993 Steve Chamberlain (sac@thepub.cygnus.com) * bfd.h: Update for lma field of section. Tue Mar 30 12:22:55 1993 Jim Kingdon (kingdon@cygnus.com) * ansidecl.h: Use ANSI versions on AIX regardless of __STDC__. Fri Mar 19 14:49:49 1993 Steve Chamberlain (sac@thepub.cygnus.com) * dis-asm.h: Add h8500. Thu Mar 18 13:49:09 1993 Per Bothner (bothner@rtl.cygnus.com) * ieee-float.h: Moved from ../gdb. * dis-asm.h: New file. Interface to dis-assembler. Thu Mar 11 10:52:57 1993 Fred Fish (fnf@cygnus.com) * demangle.h (DMGL_NO_OPTS): Add define (set to 0) to use in place of bare 0, for readability reasons. Tue Mar 2 17:50:11 1993 Fred Fish (fnf@cygnus.com) * demangle.h: Replace all references to cfront with ARM. Tue Feb 23 12:21:14 1993 Ian Lance Taylor (ian@cygnus.com) * bfd.h: Update for new elements in JUMP_TABLE. Tue Feb 16 00:51:30 1993 John Gilmore (gnu@cygnus.com) * bfd.h: Update for BFD_VERSION 2.1. Tue Jan 26 11:49:20 1993 Ian Lance Taylor (ian@cygnus.com) * bfd.h: Update for SEC_IS_COMMON flag. Tue Jan 19 12:25:12 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * bfd.h: Update for bfd_asymbol_value bug fix. Fri Jan 8 16:37:18 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * bfd.h: Update to include ECOFF tdata and target_flavour. Sun Dec 27 17:52:30 1992 Fred Fish (fnf@cygnus.com) * bfd.h: Add declaration for bfd_get_size(). Tue Dec 22 22:42:46 1992 Fred Fish (fnf@cygnus.com) * demangle.h: Protect file from multiple inclusions with #if !defined(DEMANGLE_H)...#define DEMANGLE_H...#endif. Mon Dec 21 21:25:50 1992 Stu Grossman (grossman at cygnus.com) * bfd.h: Update to get hppa_core_struct from bfd.c. Thu Dec 17 00:42:35 1992 John Gilmore (gnu@cygnus.com) * bfd.h: Update to get tekhex tdata name change from bfd. Mon Nov 9 23:55:42 1992 John Gilmore (gnu@cygnus.com) * ansidecl.h: Update comments to discourage use of EXFUN. Thu Nov 5 16:35:44 1992 Ian Lance Taylor (ian@cygnus.com) * bfd.h: Update to bring in SEC_SHARED_LIBRARY. Thu Nov 5 03:21:32 1992 John Gilmore (gnu@cygnus.com) * bfd.h: Update to match EXFUN, bfd_seclet_struct, and SDEF cleanups in bfd. Wed Nov 4 07:28:05 1992 Ken Raeburn (raeburn@cygnus.com) * bout.h (N_CALLNAME, N_BALNAME): Define as char-type values, so widening works consistently. Fri Oct 16 03:17:08 1992 John Gilmore (gnu@cygnus.com) * getopt.h: Update to Revised Standard FSF Version. Thu Oct 15 21:43:22 1992 K. Richard Pixley (rich@sendai.cygnus.com) * getopt.h (struct option): use the provided enum for has_arg. * demangle.h (AUTO_DEMANGLING, GNU_DEMANGLING, LUCID_DEMANGLING): ultrix compilers require enums to be enums and ints to be ints and casts where they meet. cast some enums into ints. Thu Oct 15 04:35:51 1992 John Gilmore (gnu@cygnus.com) * bfd.h: Update after comment changes. Thu Oct 8 09:03:02 1992 Steve Chamberlain (sac@thepub.cygnus.com) * bfd.h (bfd_get_symbol_leading_char): new macro for getting in xvec Thu Sep 3 09:10:50 1992 Stu Grossman (grossman at cygnus.com) * bfd.h (struct reloc_howto_struct): size needs to be signed if it's going to hold negative values. Sun Aug 30 17:50:27 1992 Per Bothner (bothner@rtl.cygnus.com) * demangle.h: New file, moved from ../gdb. Made independent of gdb. Allow demangling style option to be passed as a parameter to cplus_demangle(), but using the current_demangling_style global as the default. Sat Aug 29 10:07:55 1992 Fred Fish (fnf@cygnus.com) * obstack.h: Merge comment change from current FSF version. Thu Aug 27 12:59:29 1992 Brendan Kehoe (brendan@cygnus.com) * bfd.h: add we32k Tue Aug 25 15:07:47 1992 Steve Chamberlain (sac@thepub.cygnus.com) * bfd.h: new after Z8000 stuff Mon Aug 17 09:01:23 1992 Ken Raeburn (raeburn@cygnus.com) * bfd.h: Regenerated after page/segment size changes. Sat Aug 1 13:46:31 1992 Fred Fish (fnf@cygnus.com) * obstack.h: Merge changes from current FSF version. Mon Jul 20 21:06:23 1992 Fred Fish (fnf@cygnus.com) * obstack.h (area_id, flags): Remove, replace with extra_arg, use_extra_arg, and maybe_empty_object. * obstack.h (OBSTACK_MAYBE_EMPTY_OBJECT, OBSTACK_MMALLOC_LIKE): Remove, replaced by maybe_empty_object and use_extra_arg bitfields. * obstack.h (obstack_full_begin, _obstack_begin): Remove area_id and flags arguments. * obstack.h (obstack_alloc_arg): New macro to set extra_arg. Thu Jul 16 08:12:44 1992 Steve Chamberlain (sac@thepub.cygnus.com) * bfd.h: new after adding BFD_IS_RELAXABLE Sat Jul 4 03:22:23 1992 John Gilmore (gnu at cygnus.com) * bfd.h: Regen after adding BSF_FILE. Mon Jun 29 14:18:36 1992 Fred Fish (fnf at sunfish) * obstack.h: Convert bcopy() use to memcpy(), which is more portable, more standard, and can take advantage of gcc's builtin functions for increased performance. Thu Jun 25 04:46:08 1992 John Gilmore (gnu at cygnus.com) * ansidecl.h (PARAMS): Incorporate this macro from gdb's defs.h. It's a cleaner way to forward-declare function prototypes. Fri Jun 19 15:46:32 1992 Stu Grossman (grossman at cygnus.com) * bfd.h: HPPA merge. Tue Jun 16 21:30:56 1992 K. Richard Pixley (rich@cygnus.com) * getopt.h: gratuitous white space changes merged from other prep releases. Thu Jun 11 01:10:55 1992 John Gilmore (gnu at cygnus.com) * bfd.h: Regen'd from bfd.c after removing elf_core_tdata_struct. Mon May 18 17:29:03 1992 K. Richard Pixley (rich@cygnus.com) * getopt.h: merged changes from make-3.62.11. * getopt.h: merged changes from grep-1.6 (alpha). Fri May 8 14:53:32 1992 K. Richard Pixley (rich@cygnus.com) * getopt.h: merged changes from bison-1.18. Sat Mar 14 17:25:20 1992 Fred Fish (fnf@cygnus.com) * obstack.h: Add "area_id" and "flags" members to obstack structure. Add obstack_chunkfun() and obstack_freefun() to set functions explicitly. Convert maybe_empty_object to a bit in "flags". Thu Feb 27 22:01:02 1992 Per Bothner (bothner@cygnus.com) * wait.h (WIFSTOPPED): Add IBM rs6000-specific version. Fri Feb 21 20:49:20 1992 John Gilmore (gnu at cygnus.com) * obstack.h: Add obstack_full_begin. * bfd.h, obstack.h: Protolint. Thu Jan 30 01:18:42 1992 John Gilmore (gnu at cygnus.com) * bfd.h: Remove comma from enum declaration. Mon Jan 27 22:01:13 1992 Steve Chamberlain (sac at cygnus.com) * bfd.h : new target entr, bfd_relax_section Wed Dec 18 17:19:44 1991 Stu Grossman (grossman at cygnus.com) * bfd.h, ieee.h: ANSIfy enums. Thu Dec 12 20:59:56 1991 John Gilmore (gnu at cygnus.com) * fopen-same.h, fopen-bin.h: New files for configuring whether fopen distinguishes binary files or not. For use by host-dependent config files. Sat Nov 30 20:46:43 1991 Steve Chamberlain (sac at rtl.cygnus.com) * bfd.h: change the documentation format. * created coff, elf and opcode and aout directories. Moved: aout64.h ==> aout/aout64.h ar.h ==> aout/ar.h a.out.encap.h ==> aout/encap.h a.out.host.h ==> aout/host.h a.out.hp.h ==> aout/hp.h a.out.sun4.h ==> aout/sun4.h ranlib.h ==> aout/ranlib.h reloc.h ==> aout/reloc.h stab.def ==> aout/stab.def stab.gnu.h ==> aout/stab_gnu.h coff-a29k.h ==> coff/a29k.h coff-h8300.h ==> coff/h8300.h coff-i386.h ==> coff/i386.h coff-i960.h ==> coff/i960.h internalcoff.h ==> coff/internal.h coff-m68k.h ==> coff/m68k.h coff-m88k.h ==> coff/m88k.h coff-mips.h ==> coff/mips.h coff-rs6000.h ==> coff/rs6000.h elf-common.h ==> elf/common.h dwarf.h ==> elf/dwarf.h elf-external.h ==> elf/external.h elf-internal.h ==> elf/internal.h a29k-opcode.h ==> opcode/a29k.h arm-opcode.h ==> opcode/arm.h h8300-opcode.h ==> opcode/h8300.h i386-opcode.h ==> opcode/i386.h i860-opcode.h ==> opcode/i860.h i960-opcode.h ==> opcode/i960.h m68k-opcode.h ==> opcode/m68k.h m88k-opcode.h ==> opcode/m88k.h mips-opcode.h ==> opcode/mips.h np1-opcode.h ==> opcode/np1.h ns32k-opcode.h ==> opcode/ns32k.h pn-opcode.h ==> opcode/pn.h pyr-opcode.h ==> opcode/pyr.h sparc-opcode.h ==> opcode/sparc.h tahoe-opcode.h ==> opcode/tahoe.h vax-opcode.h ==> opcode/vax.h Wed Nov 27 10:38:31 1991 Steve Chamberlain (sac at rtl.cygnus.com) * internalcoff.h: (internal_scnhdr) took out #def dependency, now s_nreloc and s_nlnno are always long. (internal_reloc): allways has an offset field now. Fri Nov 22 08:12:58 1991 John Gilmore (gnu at cygnus.com) * coff-rs6000.h: Lint; use unsigned chars for external fields. * internalcoff.h: Lint; cast storage classes to signed char. Thu Nov 21 21:01:05 1991 Per Bothner (bothner at cygnus.com) * stab.def: Remove the GNU extended type codes (e.g. N_SETT). * aout64.h: The heuristic for distinguishing between sunos-style and bsd-style ZMAGIC files (wrt. where the text segment starts) is moved into (the default definition of) the macro N_HEADER_IN_TEXT. This definition is only used if no other definition is used - e.g. bfd/newsos3.c defines N_HEADER_IN_TEXT(x) to be always 0 (as before). Thu Nov 21 11:53:03 1991 John Gilmore (gnu at cygnus.com) * aout64.h (N_TXTADDR, N_TXTOFF, N_TXTSIZE): New definitions that should handle all uses. LOGICAL_ versions deleted. Eliminate N_HEADER_IN_TEXT, using a_entry to determine which kind of zmagic a.out file we are looking at. * coff-rs6000.h: Typo. Tue Nov 19 18:43:37 1991 Per Bothner (bothner at cygnus.com) (Note: This is a revised entry, as was aout64.h.) * aout64.h: Some cleanups of N_TXTADDR and N_TXTOFF: Will now work for both old- and new-style ZMAGIC files, depending on N_HEADER_IN_TEXT macro. Add LOGICAL_TXTADDR, LOICAL_TXTOFF and LOGICAL_TXTSIZE that don't count the exec header as part of the text segment, to be consistent with bfd. * a.out.sun4.h: Simplified/fixed for previous change. Mon Nov 18 00:02:06 1991 Fred Fish (fnf at cygnus.com) * dwarf.h: Update to DWARF draft 5 version from gcc2. Thu Nov 14 19:44:59 1991 Per Bothner (bothner at cygnus.com) * stab.def: Added defs for extended GNU symbol types, such as N_SETT. These are normally ifdef'd out (because of conflicts with a.out.gnu.h), but are used by bfb_stab_name(). Thu Nov 14 19:17:03 1991 Fred Fish (fnf at cygnus.com) * elf-common.h: Add defines to support ELF symbol table code. Mon Nov 11 19:01:06 1991 Fred Fish (fnf at cygnus.com) * elf-internal.h, elf-external.h, elf-common.h: Add support for note sections, which are used in ELF core files to hold copies of various /proc structures. Thu Nov 7 08:58:26 1991 Steve Chamberlain (sac at cygnus.com) * internalcoff.h: took out the M88 dependency in the lineno struct. * coff-m88k.h: defines GET_LINENO_LNNO and PUT_LINENO_LNNO to use 32bit linno entries. * a29k-opcode.h: fixed encoding of mtacc Sun Nov 3 11:54:22 1991 Per Bothner (bothner at cygnus.com) * bfd.h: Updated from ../bfd/bfd-in.h (q.v). Fri Nov 1 11:13:53 1991 John Gilmore (gnu at cygnus.com) * internalcoff.h: Add x_csect defines. Fri Oct 25 03:18:20 1991 John Gilmore (gnu at cygnus.com) * Rename COFF-related files in `coff-ARCH.h' form. coff-a29k.h, coff-i386.h, coff-i960.h, coff-m68k.h, coff-m88k.h, coff-mips.h, coff-rs6000.h to be exact. Thu Oct 24 22:11:11 1991 John Gilmore (gnu at cygnus.com) RS/6000 support, by Metin G. Ozisik, Mimi Phng-Tho V, and John Gilmore. * a.out.gnu.h: Update slightly. * bfd.h: Add new error code, fix doc, add bfd_arch_rs6000. * internalcoff.h: Add more F_ codes for filehdr. Add rs/6000-dependent fields to aouthdr. Add storage classes to syments. Add 6000-specific auxent. Add r_size in reloc. * rs6000coff.c: New file. Thu Oct 24 04:13:20 1991 Fred Fish (fnf at cygnus.com) * dwarf.h: New file for dwarf support. Copied from gcc2 distribution. Wed Oct 16 13:31:45 1991 John Gilmore (gnu at cygnus.com) * aout64.h: Remove PAGE_SIZE defines; they are target-dependent. Add N_FN_SEQ for N_FN symbol type used on Sequent machines. * stab.def: Include N_FN_SEQ in table. * bout.h: External formats of structures use unsigned chars. Fri Oct 11 12:40:43 1991 Steve Chamberlain (steve at cygnus.com) * bfd.h:upgrade from bfd.c * internalcoff.h: add n_name, n_zeroes and n_offset macros * amdcoff.h: Define OMAGIC and AOUTHDRSZ. Fri Oct 11 10:58:06 1991 Per Bothner (bothner at cygnus.com) * a.out.host.h: Change SEGMENT_SIZE to 0x1000 for Sony. * bfd.h (align_power): Add (actually move) comment. Tue Oct 8 15:29:32 1991 Per Bothner (bothner at cygnus.com) * sys/h-rtbsd.h: Define MISSING_VFPRINT (for binutils/bucomm.c). Sun Oct 6 19:24:39 1991 John Gilmore (gnu at cygnus.com) * aout64.h: Move struct internal_exec to ../bfd/libaout.h so it can be shared by all `a.out-family' code. Rename EXTERNAL_LIST_SIZE to EXTERNAL_NLIST_SIZE. Use basic types for nlist members, and make strx integral rather than pointer. More commentary on n_type values. * bout.h: Provide a struct external_exec rather than an internal_exec. * m68kcoff.h: Remove `tagentries' which snuck in from the i960 COFF port. Fri Oct 4 01:25:59 1991 John Gilmore (gnu at cygnus.com) * h8300-opcode.h: Remove `_enum' from the typedef for an enum. * bfd.h: Update to match bfd changes. * sys/h-i386mach.h, sysdep.h: Add 386 Mach host support. Tue Oct 1 04:58:42 1991 John Gilmore (gnu at cygnus.com) * bfd.h, elf-common.h, elf-external.h, elf-internal.h: Add preliminary ELF support, sufficient for GDB, from Fred Fish. * sysdep.h, sys/h-amix.h: Support Amiga SVR4. * sys/h-vaxult.h: Make it work. (David Taylor ) * a.out.vax.h: Remove unused and confusing file. Mon Sep 30 12:52:35 1991 Per Bothner (bothner at cygnus.com) * sysdep.h: Define NEWSOS3_SYS, and use it. Fri Sep 20 13:38:21 1991 John Gilmore (gnu at cygnus.com) * a.out.gnu.h (N_FN): Its value *really is* 0x1F. Fix it, and add comments warning about or-ing N_EXT with it and/or N_WARNING. * aout64.h (N_FN): Fix value, add comments about N_EXT. * stab.def (table at end): Update to show all the type values <0x20, including low order bits. Move N_FN to its rightful place. Tue Sep 17 17:41:37 1991 Stu Grossman (grossman at cygnus.com) * sys/h-irix3.h: sgi/irix support. Tue Sep 17 07:52:59 1991 John Gilmore (gnu at cygint.cygnus.com) * stab.def (N_DEFD): Add GNU Modula-2 debug stab, from Andrew Beers. Thu Sep 12 14:12:59 1991 John Gilmore (gnu at cygint.cygnus.com) * internalcoff.h (SYMNMLEN, FILNMLEN, DIMNUM): Define these for internalcoff, separately from the various external coff's. * amdcoff.h, bcs88kcoff.h, i386coff.h, intel-coff.h, m68kcoff.h, m88k-bcs.h: Prefix SYMNMLEN, FILNMLEN, and DIMNUM with E_'s for the external struct definitions. * ecoff.h: Remove these #define's, kludge no longer needed. * sys/h-ultra3.h: Add new Ultracomputer host. * sysdep.h: Add ULTRA3_SYM1_SYS and use it. Tue Sep 10 10:11:46 1991 John Gilmore (gnu at cygint.cygnus.com) * i386coff.h (LINESZ): Always 6, not based on sizeof(). (Fix from Peter Schauer .) Wed Sep 4 08:58:37 1991 John Gilmore (gnu at cygint.cygnus.com) * a.out.gnu.h, aout64.h: Add N_WARNING. Change N_FN to 0x0E, to match SunOS and BSD. Add N_COMM as 0x12 for SunOS shared lib support. * stab.def: Add N_COMM to table, fix overlap comment. Tue Sep 3 06:29:20 1991 John Gilmore (gnu at cygint.cygnus.com) Merge with latest FSF versions of these files. * stab.gnu.h: Add LAST_UNUSED_STAB_CODE. * stab.def: Update to GPL2. Move N_WARNING out, since not a debug symbol. Change comments, and reorder table to numeric order. Update final table comment. (N_DSLINE, N_BSLINE): Renumber from 0x66 and 0x68, to 0x46 and 0x48. * obstack.h: GPL2. Merge. Fri Aug 23 01:54:23 1991 John Gilmore (gnu at cygint.cygnus.com) * a.out.gnu.h, a.out.sun4.h: Make SEGMENT_SIZE able to depend on the particular a.out being examined. * a.out.sun4.h: Define segment sizes for Sun-3's and Sun-4's. * FIXME: a.out.gnu.h is almost obsolete. * FIXME: a.out.sun4.h should be renamed a.out.sun.h now. Wed Aug 21 20:32:13 1991 John Gilmore (gnu at cygint.cygnus.com) * Start a ChangeLog for the includes directory. * a.out.gnu.h (N_FN): Fix value -- was 15, should be 0x1E. * stab.def: Update allocation table in comments at end, to reflect reality as I know it. Local Variables: mode: change-log left-margin: 8 fill-column: 74 version-control: never End: nescc-1.3.4/include/ansidecl.h000066400000000000000000000315231177770303300162040ustar00rootroot00000000000000/* ANSI and traditional C compatability macros Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. This program 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 of the License, or (at your option) any later version. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* ANSI and traditional C compatibility macros ANSI C is assumed if __STDC__ is #defined. Macro ANSI C definition Traditional C definition ----- ---- - ---------- ----------- - ---------- ANSI_PROTOTYPES 1 not defined PTR `void *' `char *' PTRCONST `void *const' `char *' LONG_DOUBLE `long double' `double' const not defined `' volatile not defined `' signed not defined `' VA_START(ap, var) va_start(ap, var) va_start(ap) Note that it is safe to write "void foo();" indicating a function with no return value, in all K+R compilers we have been able to test. For declaring functions with prototypes, we also provide these: PARAMS ((prototype)) -- for functions which take a fixed number of arguments. Use this when declaring the function. When defining the function, write a K+R style argument list. For example: char *strcpy PARAMS ((char *dest, char *source)); ... char * strcpy (dest, source) char *dest; char *source; { ... } VPARAMS ((prototype, ...)) -- for functions which take a variable number of arguments. Use PARAMS to declare the function, VPARAMS to define it. For example: int printf PARAMS ((const char *format, ...)); ... int printf VPARAMS ((const char *format, ...)) { ... } For writing functions which take variable numbers of arguments, we also provide the VA_OPEN, VA_CLOSE, and VA_FIXEDARG macros. These hide the differences between K+R and C89 more thoroughly than the simple VA_START() macro mentioned above. VA_OPEN and VA_CLOSE are used *instead of* va_start and va_end. Immediately after VA_OPEN, put a sequence of VA_FIXEDARG calls corresponding to the list of fixed arguments. Then use va_arg normally to get the variable arguments, or pass your va_list object around. You do not declare the va_list yourself; VA_OPEN does it for you. Here is a complete example: int printf VPARAMS ((const char *format, ...)) { int result; VA_OPEN (ap, format); VA_FIXEDARG (ap, const char *, format); result = vfprintf (stdout, format, ap); VA_CLOSE (ap); return result; } You can declare variables either before or after the VA_OPEN, VA_FIXEDARG sequence. Also, VA_OPEN and VA_CLOSE are the beginning and end of a block. They must appear at the same nesting level, and any variables declared after VA_OPEN go out of scope at VA_CLOSE. Unfortunately, with a K+R compiler, that includes the argument list. You can have multiple instances of VA_OPEN/VA_CLOSE pairs in a single function in case you need to traverse the argument list more than once. For ease of writing code which uses GCC extensions but needs to be portable to other compilers, we provide the GCC_VERSION macro that simplifies testing __GNUC__ and __GNUC_MINOR__ together, and various wrappers around __attribute__. Also, __extension__ will be #defined to nothing if it doesn't work. See below. This header also defines a lot of obsolete macros: CONST, VOLATILE, SIGNED, PROTO, EXFUN, DEFUN, DEFUN_VOID, AND, DOTS, NOARGS. Don't use them. */ #ifndef _ANSIDECL_H #define _ANSIDECL_H 1 /* Every source file includes this file, so they will all get the switch for lint. */ /* LINTLIBRARY */ /* Using MACRO(x,y) in cpp #if conditionals does not work with some older preprocessors. Thus we can't define something like this: #define HAVE_GCC_VERSION(MAJOR, MINOR) \ (__GNUC__ > (MAJOR) || (__GNUC__ == (MAJOR) && __GNUC_MINOR__ >= (MINOR))) and then test "#if HAVE_GCC_VERSION(2,7)". So instead we use the macro below and test it against specific values. */ /* This macro simplifies testing whether we are using gcc, and if it is of a particular minimum version. (Both major & minor numbers are significant.) This macro will evaluate to 0 if we are not using gcc at all. */ #ifndef GCC_VERSION #define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) #endif /* GCC_VERSION */ #if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(_WIN32) || (defined(__alpha) && defined(__cplusplus)) /* All known AIX compilers implement these things (but don't always define __STDC__). The RISC/OS MIPS compiler defines these things in SVR4 mode, but does not define __STDC__. */ /* eraxxon@alumni.rice.edu: The Compaq C++ compiler, unlike many other C++ compilers, does not define __STDC__, though it acts as if this was so. (Verified versions: 5.7, 6.2, 6.3, 6.5) */ #define ANSI_PROTOTYPES 1 #define PTR void * #define PTRCONST void *const #define LONG_DOUBLE long double /* PARAMS is often defined elsewhere (e.g. by libintl.h), so wrap it in a #ifndef. */ #ifndef PARAMS #define PARAMS(ARGS) ARGS #endif #define VPARAMS(ARGS) ARGS #define VA_START(VA_LIST, VAR) va_start(VA_LIST, VAR) /* variadic function helper macros */ /* "struct Qdmy" swallows the semicolon after VA_OPEN/VA_FIXEDARG's use without inhibiting further decls and without declaring an actual variable. */ #define VA_OPEN(AP, VAR) { va_list AP; va_start(AP, VAR); { struct Qdmy #define VA_CLOSE(AP) } va_end(AP); } #define VA_FIXEDARG(AP, T, N) struct Qdmy #undef const #undef volatile #undef signed /* inline requires special treatment; it's in C99, and GCC >=2.7 supports it too, but it's not in C89. */ #undef inline #if __STDC_VERSION__ > 199901L /* it's a keyword */ #else # if GCC_VERSION >= 2007 # define inline __inline__ /* __inline__ prevents -pedantic warnings */ # else # define inline /* nothing */ # endif #endif /* These are obsolete. Do not use. */ #ifndef IN_GCC #define CONST const #define VOLATILE volatile #define SIGNED signed #define PROTO(type, name, arglist) type name arglist #define EXFUN(name, proto) name proto #define DEFUN(name, arglist, args) name(args) #define DEFUN_VOID(name) name(void) #define AND , #define DOTS , ... #define NOARGS void #endif /* ! IN_GCC */ #else /* Not ANSI C. */ #undef ANSI_PROTOTYPES #define PTR char * #define PTRCONST PTR #define LONG_DOUBLE double #define PARAMS(args) () #define VPARAMS(args) (va_alist) va_dcl #define VA_START(va_list, var) va_start(va_list) #define VA_OPEN(AP, VAR) { va_list AP; va_start(AP); { struct Qdmy #define VA_CLOSE(AP) } va_end(AP); } #define VA_FIXEDARG(AP, TYPE, NAME) TYPE NAME = va_arg(AP, TYPE) /* some systems define these in header files for non-ansi mode */ #undef const #undef volatile #undef signed #undef inline #define const #define volatile #define signed #define inline #ifndef IN_GCC #define CONST #define VOLATILE #define SIGNED #define PROTO(type, name, arglist) type name () #define EXFUN(name, proto) name() #define DEFUN(name, arglist, args) name arglist args; #define DEFUN_VOID(name) name() #define AND ; #define DOTS #define NOARGS #endif /* ! IN_GCC */ #endif /* ANSI C. */ /* Define macros for some gcc attributes. This permits us to use the macros freely, and know that they will come into play for the version of gcc in which they are supported. */ #if (GCC_VERSION < 2007) # define __attribute__(x) #endif /* Attribute __malloc__ on functions was valid as of gcc 2.96. */ #ifndef ATTRIBUTE_MALLOC # if (GCC_VERSION >= 2096) # define ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define ATTRIBUTE_MALLOC # endif /* GNUC >= 2.96 */ #endif /* ATTRIBUTE_MALLOC */ /* Attributes on labels were valid as of gcc 2.93. */ #ifndef ATTRIBUTE_UNUSED_LABEL # if (!defined (__cplusplus) && GCC_VERSION >= 2093) # define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED # else # define ATTRIBUTE_UNUSED_LABEL # endif /* !__cplusplus && GNUC >= 2.93 */ #endif /* ATTRIBUTE_UNUSED_LABEL */ #ifndef ATTRIBUTE_UNUSED #define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) #endif /* ATTRIBUTE_UNUSED */ /* Before GCC 3.4, the C++ frontend couldn't parse attributes placed after the identifier name. */ #if ! defined(__cplusplus) || (GCC_VERSION >= 3004) # define ARG_UNUSED(NAME) NAME ATTRIBUTE_UNUSED #else /* !__cplusplus || GNUC >= 3.4 */ # define ARG_UNUSED(NAME) NAME #endif /* !__cplusplus || GNUC >= 3.4 */ #ifndef ATTRIBUTE_NORETURN #define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) #endif /* ATTRIBUTE_NORETURN */ /* Attribute `nonnull' was valid as of gcc 3.3. */ #ifndef ATTRIBUTE_NONNULL # if (GCC_VERSION >= 3003) # define ATTRIBUTE_NONNULL(m) __attribute__ ((__nonnull__ (m))) # else # define ATTRIBUTE_NONNULL(m) # endif /* GNUC >= 3.3 */ #endif /* ATTRIBUTE_NONNULL */ /* Attribute `pure' was valid as of gcc 3.0. */ #ifndef ATTRIBUTE_PURE # if (GCC_VERSION >= 3000) # define ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define ATTRIBUTE_PURE # endif /* GNUC >= 3.0 */ #endif /* ATTRIBUTE_PURE */ /* Use ATTRIBUTE_PRINTF when the format specifier must not be NULL. This was the case for the `printf' format attribute by itself before GCC 3.3, but as of 3.3 we need to add the `nonnull' attribute to retain this behavior. */ #ifndef ATTRIBUTE_PRINTF #define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n))) ATTRIBUTE_NONNULL(m) #define ATTRIBUTE_PRINTF_1 ATTRIBUTE_PRINTF(1, 2) #define ATTRIBUTE_PRINTF_2 ATTRIBUTE_PRINTF(2, 3) #define ATTRIBUTE_PRINTF_3 ATTRIBUTE_PRINTF(3, 4) #define ATTRIBUTE_PRINTF_4 ATTRIBUTE_PRINTF(4, 5) #define ATTRIBUTE_PRINTF_5 ATTRIBUTE_PRINTF(5, 6) #endif /* ATTRIBUTE_PRINTF */ /* Use ATTRIBUTE_FPTR_PRINTF when the format attribute is to be set on a function pointer. Format attributes were allowed on function pointers as of gcc 3.1. */ #ifndef ATTRIBUTE_FPTR_PRINTF # if (GCC_VERSION >= 3001) # define ATTRIBUTE_FPTR_PRINTF(m, n) ATTRIBUTE_PRINTF(m, n) # else # define ATTRIBUTE_FPTR_PRINTF(m, n) # endif /* GNUC >= 3.1 */ # define ATTRIBUTE_FPTR_PRINTF_1 ATTRIBUTE_FPTR_PRINTF(1, 2) # define ATTRIBUTE_FPTR_PRINTF_2 ATTRIBUTE_FPTR_PRINTF(2, 3) # define ATTRIBUTE_FPTR_PRINTF_3 ATTRIBUTE_FPTR_PRINTF(3, 4) # define ATTRIBUTE_FPTR_PRINTF_4 ATTRIBUTE_FPTR_PRINTF(4, 5) # define ATTRIBUTE_FPTR_PRINTF_5 ATTRIBUTE_FPTR_PRINTF(5, 6) #endif /* ATTRIBUTE_FPTR_PRINTF */ /* Use ATTRIBUTE_NULL_PRINTF when the format specifier may be NULL. A NULL format specifier was allowed as of gcc 3.3. */ #ifndef ATTRIBUTE_NULL_PRINTF # if (GCC_VERSION >= 3003) # define ATTRIBUTE_NULL_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n))) # else # define ATTRIBUTE_NULL_PRINTF(m, n) # endif /* GNUC >= 3.3 */ # define ATTRIBUTE_NULL_PRINTF_1 ATTRIBUTE_NULL_PRINTF(1, 2) # define ATTRIBUTE_NULL_PRINTF_2 ATTRIBUTE_NULL_PRINTF(2, 3) # define ATTRIBUTE_NULL_PRINTF_3 ATTRIBUTE_NULL_PRINTF(3, 4) # define ATTRIBUTE_NULL_PRINTF_4 ATTRIBUTE_NULL_PRINTF(4, 5) # define ATTRIBUTE_NULL_PRINTF_5 ATTRIBUTE_NULL_PRINTF(5, 6) #endif /* ATTRIBUTE_NULL_PRINTF */ /* Attribute `sentinel' was valid as of gcc 3.5. */ #ifndef ATTRIBUTE_SENTINEL # if (GCC_VERSION >= 3005) # define ATTRIBUTE_SENTINEL __attribute__ ((__sentinel__)) # else # define ATTRIBUTE_SENTINEL # endif /* GNUC >= 3.5 */ #endif /* ATTRIBUTE_SENTINEL */ #ifndef ATTRIBUTE_ALIGNED_ALIGNOF # if (GCC_VERSION >= 3000) # define ATTRIBUTE_ALIGNED_ALIGNOF(m) __attribute__ ((__aligned__ (__alignof__ (m)))) # else # define ATTRIBUTE_ALIGNED_ALIGNOF(m) # endif /* GNUC >= 3.0 */ #endif /* ATTRIBUTE_ALIGNED_ALIGNOF */ /* Useful for structures whose layout must much some binary specification regardless of the alignment and padding qualities of the compiler. */ #ifndef ATTRIBUTE_PACKED # define ATTRIBUTE_PACKED __attribute__ ((packed)) #endif /* Attribute `hot' and `cold' was valid as of gcc 4.3. */ #ifndef ATTRIBUTE_COLD # if (GCC_VERSION >= 4003) # define ATTRIBUTE_COLD __attribute__ ((__cold__)) # else # define ATTRIBUTE_COLD # endif /* GNUC >= 4.3 */ #endif /* ATTRIBUTE_COLD */ #ifndef ATTRIBUTE_HOT # if (GCC_VERSION >= 4003) # define ATTRIBUTE_HOT __attribute__ ((__hot__)) # else # define ATTRIBUTE_HOT # endif /* GNUC >= 4.3 */ #endif /* ATTRIBUTE_HOT */ /* We use __extension__ in some places to suppress -pedantic warnings about GCC extensions. This feature didn't work properly before gcc 2.8. */ #if GCC_VERSION < 2008 #define __extension__ #endif #endif /* ansidecl.h */ nescc-1.3.4/include/demangle.h000066400000000000000000000547521177770303300162070ustar00rootroot00000000000000/* Defs for interface to demanglers. Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. In addition to the permissions in the GNU Library General Public License, the Free Software Foundation gives you unlimited permission to link the compiled version of this file into combinations with other programs, and to distribute those combinations without any restriction coming from the use of this file. (The Library Public License restrictions do apply in other respects; for example, they cover modification of the file, and distribution when not linked into a combined executable.) This program 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #if !defined (DEMANGLE_H) #define DEMANGLE_H #include "libiberty.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* Options passed to cplus_demangle (in 2nd parameter). */ #define DMGL_NO_OPTS 0 /* For readability... */ #define DMGL_PARAMS (1 << 0) /* Include function args */ #define DMGL_ANSI (1 << 1) /* Include const, volatile, etc */ #define DMGL_JAVA (1 << 2) /* Demangle as Java rather than C++. */ #define DMGL_VERBOSE (1 << 3) /* Include implementation details. */ #define DMGL_TYPES (1 << 4) /* Also try to demangle type encodings. */ #define DMGL_RET_POSTFIX (1 << 5) /* Print function return types (when present) after function signature */ #define DMGL_AUTO (1 << 8) #define DMGL_GNU (1 << 9) #define DMGL_LUCID (1 << 10) #define DMGL_ARM (1 << 11) #define DMGL_HP (1 << 12) /* For the HP aCC compiler; same as ARM except for template arguments, etc. */ #define DMGL_EDG (1 << 13) #define DMGL_GNU_V3 (1 << 14) #define DMGL_GNAT (1 << 15) /* If none of these are set, use 'current_demangling_style' as the default. */ #define DMGL_STYLE_MASK (DMGL_AUTO|DMGL_GNU|DMGL_LUCID|DMGL_ARM|DMGL_HP|DMGL_EDG|DMGL_GNU_V3|DMGL_JAVA|DMGL_GNAT) /* Enumeration of possible demangling styles. Lucid and ARM styles are still kept logically distinct, even though they now both behave identically. The resulting style is actual the union of both. I.E. either style recognizes both "__pt__" and "__rf__" for operator "->", even though the first is lucid style and the second is ARM style. (FIXME?) */ extern enum demangling_styles { no_demangling = -1, unknown_demangling = 0, auto_demangling = DMGL_AUTO, gnu_demangling = DMGL_GNU, lucid_demangling = DMGL_LUCID, arm_demangling = DMGL_ARM, hp_demangling = DMGL_HP, edg_demangling = DMGL_EDG, gnu_v3_demangling = DMGL_GNU_V3, java_demangling = DMGL_JAVA, gnat_demangling = DMGL_GNAT } current_demangling_style; /* Define string names for the various demangling styles. */ #define NO_DEMANGLING_STYLE_STRING "none" #define AUTO_DEMANGLING_STYLE_STRING "auto" #define GNU_DEMANGLING_STYLE_STRING "gnu" #define LUCID_DEMANGLING_STYLE_STRING "lucid" #define ARM_DEMANGLING_STYLE_STRING "arm" #define HP_DEMANGLING_STYLE_STRING "hp" #define EDG_DEMANGLING_STYLE_STRING "edg" #define GNU_V3_DEMANGLING_STYLE_STRING "gnu-v3" #define JAVA_DEMANGLING_STYLE_STRING "java" #define GNAT_DEMANGLING_STYLE_STRING "gnat" /* Some macros to test what demangling style is active. */ #define CURRENT_DEMANGLING_STYLE current_demangling_style #define AUTO_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_AUTO) #define GNU_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU) #define LUCID_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_LUCID) #define ARM_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_ARM) #define HP_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_HP) #define EDG_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_EDG) #define GNU_V3_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU_V3) #define JAVA_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_JAVA) #define GNAT_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNAT) /* Provide information about the available demangle styles. This code is pulled from gdb into libiberty because it is useful to binutils also. */ extern const struct demangler_engine { const char *const demangling_style_name; const enum demangling_styles demangling_style; const char *const demangling_style_doc; } libiberty_demanglers[]; extern char * cplus_demangle (const char *mangled, int options); extern int cplus_demangle_opname (const char *opname, char *result, int options); extern const char * cplus_mangle_opname (const char *opname, int options); /* Note: This sets global state. FIXME if you care about multi-threading. */ extern void set_cplus_marker_for_demangling (int ch); extern enum demangling_styles cplus_demangle_set_style (enum demangling_styles style); extern enum demangling_styles cplus_demangle_name_to_style (const char *name); /* Callback typedef for allocation-less demangler interfaces. */ typedef void (*demangle_callbackref) (const char *, size_t, void *); /* V3 ABI demangling entry points, defined in cp-demangle.c. Callback variants return non-zero on success, zero on error. char* variants return a string allocated by malloc on success, NULL on error. */ extern int cplus_demangle_v3_callback (const char *mangled, int options, demangle_callbackref callback, void *opaque); extern char* cplus_demangle_v3 (const char *mangled, int options); extern int java_demangle_v3_callback (const char *mangled, demangle_callbackref callback, void *opaque); extern char* java_demangle_v3 (const char *mangled); enum gnu_v3_ctor_kinds { gnu_v3_complete_object_ctor = 1, gnu_v3_base_object_ctor, gnu_v3_complete_object_allocating_ctor }; /* Return non-zero iff NAME is the mangled form of a constructor name in the G++ V3 ABI demangling style. Specifically, return an `enum gnu_v3_ctor_kinds' value indicating what kind of constructor it is. */ extern enum gnu_v3_ctor_kinds is_gnu_v3_mangled_ctor (const char *name); enum gnu_v3_dtor_kinds { gnu_v3_deleting_dtor = 1, gnu_v3_complete_object_dtor, gnu_v3_base_object_dtor }; /* Return non-zero iff NAME is the mangled form of a destructor name in the G++ V3 ABI demangling style. Specifically, return an `enum gnu_v3_dtor_kinds' value, indicating what kind of destructor it is. */ extern enum gnu_v3_dtor_kinds is_gnu_v3_mangled_dtor (const char *name); /* The V3 demangler works in two passes. The first pass builds a tree representation of the mangled name, and the second pass turns the tree representation into a demangled string. Here we define an interface to permit a caller to build their own tree representation, which they can pass to the demangler to get a demangled string. This can be used to canonicalize user input into something which the demangler might output. It could also be used by other demanglers in the future. */ /* These are the component types which may be found in the tree. Many component types have one or two subtrees, referred to as left and right (a component type with only one subtree puts it in the left subtree). */ enum demangle_component_type { /* A name, with a length and a pointer to a string. */ DEMANGLE_COMPONENT_NAME, /* A qualified name. The left subtree is a class or namespace or some such thing, and the right subtree is a name qualified by that class. */ DEMANGLE_COMPONENT_QUAL_NAME, /* A local name. The left subtree describes a function, and the right subtree is a name which is local to that function. */ DEMANGLE_COMPONENT_LOCAL_NAME, /* A typed name. The left subtree is a name, and the right subtree describes that name as a function. */ DEMANGLE_COMPONENT_TYPED_NAME, /* A template. The left subtree is a template name, and the right subtree is a template argument list. */ DEMANGLE_COMPONENT_TEMPLATE, /* A template parameter. This holds a number, which is the template parameter index. */ DEMANGLE_COMPONENT_TEMPLATE_PARAM, /* A constructor. This holds a name and the kind of constructor. */ DEMANGLE_COMPONENT_CTOR, /* A destructor. This holds a name and the kind of destructor. */ DEMANGLE_COMPONENT_DTOR, /* A vtable. This has one subtree, the type for which this is a vtable. */ DEMANGLE_COMPONENT_VTABLE, /* A VTT structure. This has one subtree, the type for which this is a VTT. */ DEMANGLE_COMPONENT_VTT, /* A construction vtable. The left subtree is the type for which this is a vtable, and the right subtree is the derived type for which this vtable is built. */ DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE, /* A typeinfo structure. This has one subtree, the type for which this is the tpeinfo structure. */ DEMANGLE_COMPONENT_TYPEINFO, /* A typeinfo name. This has one subtree, the type for which this is the typeinfo name. */ DEMANGLE_COMPONENT_TYPEINFO_NAME, /* A typeinfo function. This has one subtree, the type for which this is the tpyeinfo function. */ DEMANGLE_COMPONENT_TYPEINFO_FN, /* A thunk. This has one subtree, the name for which this is a thunk. */ DEMANGLE_COMPONENT_THUNK, /* A virtual thunk. This has one subtree, the name for which this is a virtual thunk. */ DEMANGLE_COMPONENT_VIRTUAL_THUNK, /* A covariant thunk. This has one subtree, the name for which this is a covariant thunk. */ DEMANGLE_COMPONENT_COVARIANT_THUNK, /* A Java class. This has one subtree, the type. */ DEMANGLE_COMPONENT_JAVA_CLASS, /* A guard variable. This has one subtree, the name for which this is a guard variable. */ DEMANGLE_COMPONENT_GUARD, /* A reference temporary. This has one subtree, the name for which this is a temporary. */ DEMANGLE_COMPONENT_REFTEMP, /* A hidden alias. This has one subtree, the encoding for which it is providing alternative linkage. */ DEMANGLE_COMPONENT_HIDDEN_ALIAS, /* A standard substitution. This holds the name of the substitution. */ DEMANGLE_COMPONENT_SUB_STD, /* The restrict qualifier. The one subtree is the type which is being qualified. */ DEMANGLE_COMPONENT_RESTRICT, /* The volatile qualifier. The one subtree is the type which is being qualified. */ DEMANGLE_COMPONENT_VOLATILE, /* The const qualifier. The one subtree is the type which is being qualified. */ DEMANGLE_COMPONENT_CONST, /* The restrict qualifier modifying a member function. The one subtree is the type which is being qualified. */ DEMANGLE_COMPONENT_RESTRICT_THIS, /* The volatile qualifier modifying a member function. The one subtree is the type which is being qualified. */ DEMANGLE_COMPONENT_VOLATILE_THIS, /* The const qualifier modifying a member function. The one subtree is the type which is being qualified. */ DEMANGLE_COMPONENT_CONST_THIS, /* A vendor qualifier. The left subtree is the type which is being qualified, and the right subtree is the name of the qualifier. */ DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL, /* A pointer. The one subtree is the type which is being pointed to. */ DEMANGLE_COMPONENT_POINTER, /* A reference. The one subtree is the type which is being referenced. */ DEMANGLE_COMPONENT_REFERENCE, /* C++0x: An rvalue reference. The one subtree is the type which is being referenced. */ DEMANGLE_COMPONENT_RVALUE_REFERENCE, /* A complex type. The one subtree is the base type. */ DEMANGLE_COMPONENT_COMPLEX, /* An imaginary type. The one subtree is the base type. */ DEMANGLE_COMPONENT_IMAGINARY, /* A builtin type. This holds the builtin type information. */ DEMANGLE_COMPONENT_BUILTIN_TYPE, /* A vendor's builtin type. This holds the name of the type. */ DEMANGLE_COMPONENT_VENDOR_TYPE, /* A function type. The left subtree is the return type. The right subtree is a list of ARGLIST nodes. Either or both may be NULL. */ DEMANGLE_COMPONENT_FUNCTION_TYPE, /* An array type. The left subtree is the dimension, which may be NULL, or a string (represented as DEMANGLE_COMPONENT_NAME), or an expression. The right subtree is the element type. */ DEMANGLE_COMPONENT_ARRAY_TYPE, /* A pointer to member type. The left subtree is the class type, and the right subtree is the member type. CV-qualifiers appear on the latter. */ DEMANGLE_COMPONENT_PTRMEM_TYPE, /* An argument list. The left subtree is the current argument, and the right subtree is either NULL or another ARGLIST node. */ DEMANGLE_COMPONENT_ARGLIST, /* A template argument list. The left subtree is the current template argument, and the right subtree is either NULL or another TEMPLATE_ARGLIST node. */ DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, /* An operator. This holds information about a standard operator. */ DEMANGLE_COMPONENT_OPERATOR, /* An extended operator. This holds the number of arguments, and the name of the extended operator. */ DEMANGLE_COMPONENT_EXTENDED_OPERATOR, /* A typecast, represented as a unary operator. The one subtree is the type to which the argument should be cast. */ DEMANGLE_COMPONENT_CAST, /* A unary expression. The left subtree is the operator, and the right subtree is the single argument. */ DEMANGLE_COMPONENT_UNARY, /* A binary expression. The left subtree is the operator, and the right subtree is a BINARY_ARGS. */ DEMANGLE_COMPONENT_BINARY, /* Arguments to a binary expression. The left subtree is the first argument, and the right subtree is the second argument. */ DEMANGLE_COMPONENT_BINARY_ARGS, /* A trinary expression. The left subtree is the operator, and the right subtree is a TRINARY_ARG1. */ DEMANGLE_COMPONENT_TRINARY, /* Arguments to a trinary expression. The left subtree is the first argument, and the right subtree is a TRINARY_ARG2. */ DEMANGLE_COMPONENT_TRINARY_ARG1, /* More arguments to a trinary expression. The left subtree is the second argument, and the right subtree is the third argument. */ DEMANGLE_COMPONENT_TRINARY_ARG2, /* A literal. The left subtree is the type, and the right subtree is the value, represented as a DEMANGLE_COMPONENT_NAME. */ DEMANGLE_COMPONENT_LITERAL, /* A negative literal. Like LITERAL, but the value is negated. This is a minor hack: the NAME used for LITERAL points directly to the mangled string, but since negative numbers are mangled using 'n' instead of '-', we want a way to indicate a negative number which involves neither modifying the mangled string nor allocating a new copy of the literal in memory. */ DEMANGLE_COMPONENT_LITERAL_NEG }; /* Types which are only used internally. */ struct demangle_operator_info; struct demangle_builtin_type_info; /* A node in the tree representation is an instance of a struct demangle_component. Note that the field names of the struct are not well protected against macros defined by the file including this one. We can fix this if it ever becomes a problem. */ struct demangle_component { /* The type of this component. */ enum demangle_component_type type; union { /* For DEMANGLE_COMPONENT_NAME. */ struct { /* A pointer to the name (which need not NULL terminated) and its length. */ const char *s; int len; } s_name; /* For DEMANGLE_COMPONENT_OPERATOR. */ struct { /* Operator. */ const struct demangle_operator_info *op; } s_operator; /* For DEMANGLE_COMPONENT_EXTENDED_OPERATOR. */ struct { /* Number of arguments. */ int args; /* Name. */ struct demangle_component *name; } s_extended_operator; /* For DEMANGLE_COMPONENT_CTOR. */ struct { /* Kind of constructor. */ enum gnu_v3_ctor_kinds kind; /* Name. */ struct demangle_component *name; } s_ctor; /* For DEMANGLE_COMPONENT_DTOR. */ struct { /* Kind of destructor. */ enum gnu_v3_dtor_kinds kind; /* Name. */ struct demangle_component *name; } s_dtor; /* For DEMANGLE_COMPONENT_BUILTIN_TYPE. */ struct { /* Builtin type. */ const struct demangle_builtin_type_info *type; } s_builtin; /* For DEMANGLE_COMPONENT_SUB_STD. */ struct { /* Standard substitution string. */ const char* string; /* Length of string. */ int len; } s_string; /* For DEMANGLE_COMPONENT_TEMPLATE_PARAM. */ struct { /* Template parameter index. */ long number; } s_number; /* For other types. */ struct { /* Left (or only) subtree. */ struct demangle_component *left; /* Right subtree. */ struct demangle_component *right; } s_binary; } u; }; /* People building mangled trees are expected to allocate instances of struct demangle_component themselves. They can then call one of the following functions to fill them in. */ /* Fill in most component types with a left subtree and a right subtree. Returns non-zero on success, zero on failure, such as an unrecognized or inappropriate component type. */ extern int cplus_demangle_fill_component (struct demangle_component *fill, enum demangle_component_type, struct demangle_component *left, struct demangle_component *right); /* Fill in a DEMANGLE_COMPONENT_NAME. Returns non-zero on success, zero for bad arguments. */ extern int cplus_demangle_fill_name (struct demangle_component *fill, const char *, int); /* Fill in a DEMANGLE_COMPONENT_BUILTIN_TYPE, using the name of the builtin type (e.g., "int", etc.). Returns non-zero on success, zero if the type is not recognized. */ extern int cplus_demangle_fill_builtin_type (struct demangle_component *fill, const char *type_name); /* Fill in a DEMANGLE_COMPONENT_OPERATOR, using the name of the operator and the number of arguments which it takes (the latter is used to disambiguate operators which can be both binary and unary, such as '-'). Returns non-zero on success, zero if the operator is not recognized. */ extern int cplus_demangle_fill_operator (struct demangle_component *fill, const char *opname, int args); /* Fill in a DEMANGLE_COMPONENT_EXTENDED_OPERATOR, providing the number of arguments and the name. Returns non-zero on success, zero for bad arguments. */ extern int cplus_demangle_fill_extended_operator (struct demangle_component *fill, int numargs, struct demangle_component *nm); /* Fill in a DEMANGLE_COMPONENT_CTOR. Returns non-zero on success, zero for bad arguments. */ extern int cplus_demangle_fill_ctor (struct demangle_component *fill, enum gnu_v3_ctor_kinds kind, struct demangle_component *name); /* Fill in a DEMANGLE_COMPONENT_DTOR. Returns non-zero on success, zero for bad arguments. */ extern int cplus_demangle_fill_dtor (struct demangle_component *fill, enum gnu_v3_dtor_kinds kind, struct demangle_component *name); /* This function translates a mangled name into a struct demangle_component tree. The first argument is the mangled name. The second argument is DMGL_* options. This returns a pointer to a tree on success, or NULL on failure. On success, the third argument is set to a block of memory allocated by malloc. This block should be passed to free when the tree is no longer needed. */ extern struct demangle_component * cplus_demangle_v3_components (const char *mangled, int options, void **mem); /* This function takes a struct demangle_component tree and returns the corresponding demangled string. The first argument is DMGL_* options. The second is the tree to demangle. The third is a guess at the length of the demangled string, used to initially allocate the return buffer. The fourth is a pointer to a size_t. On success, this function returns a buffer allocated by malloc(), and sets the size_t pointed to by the fourth argument to the size of the allocated buffer (not the length of the returned string). On failure, this function returns NULL, and sets the size_t pointed to by the fourth argument to 0 for an invalid tree, or to 1 for a memory allocation error. */ extern char * cplus_demangle_print (int options, const struct demangle_component *tree, int estimated_length, size_t *p_allocated_size); /* This function takes a struct demangle_component tree and passes back a demangled string in one or more calls to a callback function. The first argument is DMGL_* options. The second is the tree to demangle. The third is a pointer to a callback function; on each call this receives an element of the demangled string, its length, and an opaque value. The fourth is the opaque value passed to the callback. The callback is called once or more to return the full demangled string. The demangled element string is always nul-terminated, though its length is also provided for convenience. In contrast to cplus_demangle_print(), this function does not allocate heap memory to grow output strings (except perhaps where alloca() is implemented by malloc()), and so is normally safe for use where the heap has been corrupted. On success, this function returns 1; on failure, 0. */ extern int cplus_demangle_print_callback (int options, const struct demangle_component *tree, demangle_callbackref callback, void *opaque); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* DEMANGLE_H */ nescc-1.3.4/include/dyn-string.h000066400000000000000000000050201177770303300165110ustar00rootroot00000000000000/* An abstract string datatype. Copyright (C) 1998, 1999, 2000, 2002, 2004 Free Software Foundation, Inc. Contributed by Mark Mitchell (mark@markmitchell.com). This file is part of GCC. GCC 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. GCC 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 GCC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ typedef struct dyn_string { int allocated; /* The amount of space allocated for the string. */ int length; /* The actual length of the string. */ char *s; /* The string itself, NUL-terminated. */ }* dyn_string_t; /* The length STR, in bytes, not including the terminating NUL. */ #define dyn_string_length(STR) \ ((STR)->length) /* The NTBS in which the contents of STR are stored. */ #define dyn_string_buf(STR) \ ((STR)->s) /* Compare DS1 to DS2 with strcmp. */ #define dyn_string_compare(DS1, DS2) \ (strcmp ((DS1)->s, (DS2)->s)) extern int dyn_string_init (struct dyn_string *, int); extern dyn_string_t dyn_string_new (int); extern void dyn_string_delete (dyn_string_t); extern char *dyn_string_release (dyn_string_t); extern dyn_string_t dyn_string_resize (dyn_string_t, int); extern void dyn_string_clear (dyn_string_t); extern int dyn_string_copy (dyn_string_t, dyn_string_t); extern int dyn_string_copy_cstr (dyn_string_t, const char *); extern int dyn_string_prepend (dyn_string_t, dyn_string_t); extern int dyn_string_prepend_cstr (dyn_string_t, const char *); extern int dyn_string_insert (dyn_string_t, int, dyn_string_t); extern int dyn_string_insert_cstr (dyn_string_t, int, const char *); extern int dyn_string_insert_char (dyn_string_t, int, int); extern int dyn_string_append (dyn_string_t, dyn_string_t); extern int dyn_string_append_cstr (dyn_string_t, const char *); extern int dyn_string_append_char (dyn_string_t, int); extern int dyn_string_substring (dyn_string_t, dyn_string_t, int, int); extern int dyn_string_eq (dyn_string_t, dyn_string_t); nescc-1.3.4/include/fibheap.h000066400000000000000000000055031177770303300160170ustar00rootroot00000000000000/* A Fibonacci heap datatype. Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Daniel Berlin (dan@cgsoftware.com). This file is part of GCC. GCC 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. GCC 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 GCC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* Fibonacci heaps are somewhat complex, but, there's an article in DDJ that explains them pretty well: http://www.ddj.com/articles/1997/9701/9701o/9701o.htm?topic=algoritms Introduction to algorithms by Corman and Rivest also goes over them. The original paper that introduced them is "Fibonacci heaps and their uses in improved network optimization algorithms" by Tarjan and Fredman (JACM 34(3), July 1987). Amortized and real worst case time for operations: ExtractMin: O(lg n) amortized. O(n) worst case. DecreaseKey: O(1) amortized. O(lg n) worst case. Insert: O(2) amortized. O(1) actual. Union: O(1) amortized. O(1) actual. */ #ifndef _FIBHEAP_H_ #define _FIBHEAP_H_ #include "ansidecl.h" typedef long fibheapkey_t; typedef struct fibheap { size_t nodes; struct fibnode *min; struct fibnode *root; } *fibheap_t; typedef struct fibnode { struct fibnode *parent; struct fibnode *child; struct fibnode *left; struct fibnode *right; fibheapkey_t key; void *data; #if defined (__GNUC__) && (!defined (SIZEOF_INT) || SIZEOF_INT < 4) __extension__ unsigned long int degree : 31; __extension__ unsigned long int mark : 1; #else unsigned int degree : 31; unsigned int mark : 1; #endif } *fibnode_t; extern fibheap_t fibheap_new (void); extern fibnode_t fibheap_insert (fibheap_t, fibheapkey_t, void *); extern int fibheap_empty (fibheap_t); extern fibheapkey_t fibheap_min_key (fibheap_t); extern fibheapkey_t fibheap_replace_key (fibheap_t, fibnode_t, fibheapkey_t); extern void *fibheap_replace_key_data (fibheap_t, fibnode_t, fibheapkey_t, void *); extern void *fibheap_extract_min (fibheap_t); extern void *fibheap_min (fibheap_t); extern void *fibheap_replace_data (fibheap_t, fibnode_t, void *); extern void *fibheap_delete_node (fibheap_t, fibnode_t); extern void fibheap_delete (fibheap_t); extern fibheap_t fibheap_union (fibheap_t, fibheap_t); #endif /* _FIBHEAP_H_ */ nescc-1.3.4/include/filenames.h000066400000000000000000000040011177770303300163540ustar00rootroot00000000000000/* Macros for taking apart, interpreting and processing file names. These are here because some non-Posix (a.k.a. DOSish) systems have drive letter brain-damage at the beginning of an absolute file name, use forward- and back-slash in path names interchangeably, and some of them have case-insensitive file names. Copyright 2000, 2001, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. This program 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 of the License, or (at your option) any later version. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef FILENAMES_H #define FILENAMES_H #if defined(__MSDOS__) || defined(_WIN32) || defined(__OS2__) || defined (__CYGWIN__) #ifndef HAVE_DOS_BASED_FILE_SYSTEM #define HAVE_DOS_BASED_FILE_SYSTEM 1 #endif #define IS_DIR_SEPARATOR(c) ((c) == '/' || (c) == '\\') /* Note that IS_ABSOLUTE_PATH accepts d:foo as well, although it is only semi-absolute. This is because the users of IS_ABSOLUTE_PATH want to know whether to prepend the current working directory to a file name, which should not be done with a name like d:foo. */ #define IS_ABSOLUTE_PATH(f) (IS_DIR_SEPARATOR((f)[0]) || (((f)[0]) && ((f)[1] == ':'))) #else /* not DOSish */ #define IS_DIR_SEPARATOR(c) ((c) == '/') #define IS_ABSOLUTE_PATH(f) (IS_DIR_SEPARATOR((f)[0])) #endif /* not DOSish */ extern int filename_cmp (const char *s1, const char *s2); #define FILENAME_CMP(s1, s2) filename_cmp(s1, s2) #endif /* FILENAMES_H */ nescc-1.3.4/include/floatformat.h000066400000000000000000000130321177770303300167330ustar00rootroot00000000000000/* IEEE floating point support declarations, for GDB, the GNU Debugger. Copyright 1991, 1994, 1995, 1997, 2000, 2003, 2005 Free Software Foundation, Inc. This file is part of GDB. This program 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 of the License, or (at your option) any later version. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #if !defined (FLOATFORMAT_H) #define FLOATFORMAT_H 1 #include "ansidecl.h" /* A floatformat consists of a sign bit, an exponent and a mantissa. Once the bytes are concatenated according to the byteorder flag, then each of those fields is contiguous. We number the bits with 0 being the most significant (i.e. BITS_BIG_ENDIAN type numbering), and specify which bits each field contains with the *_start and *_len fields. */ /* What is the order of the bytes? */ enum floatformat_byteorders { /* Standard little endian byte order. EX: 1.2345678e10 => 00 00 80 c5 e0 fe 06 42 */ floatformat_little, /* Standard big endian byte order. EX: 1.2345678e10 => 42 06 fe e0 c5 80 00 00 */ floatformat_big, /* Little endian byte order but big endian word order. EX: 1.2345678e10 => e0 fe 06 42 00 00 80 c5 */ floatformat_littlebyte_bigword, /* VAX byte order. Little endian byte order with 16-bit words. The following example is an illustration of the byte order only; VAX doesn't have a fully IEEE compliant floating-point format. EX: 1.2345678e10 => 80 c5 00 00 06 42 e0 fe */ floatformat_vax }; enum floatformat_intbit { floatformat_intbit_yes, floatformat_intbit_no }; struct floatformat { enum floatformat_byteorders byteorder; unsigned int totalsize; /* Total size of number in bits */ /* Sign bit is always one bit long. 1 means negative, 0 means positive. */ unsigned int sign_start; unsigned int exp_start; unsigned int exp_len; /* Bias added to a "true" exponent to form the biased exponent. It is intentionally signed as, otherwize, -exp_bias can turn into a very large number (e.g., given the exp_bias of 0x3fff and a 64 bit long, the equation (long)(1 - exp_bias) evaluates to 4294950914) instead of -16382). */ int exp_bias; /* Exponent value which indicates NaN. This is the actual value stored in the float, not adjusted by the exp_bias. This usually consists of all one bits. */ unsigned int exp_nan; unsigned int man_start; unsigned int man_len; /* Is the integer bit explicit or implicit? */ enum floatformat_intbit intbit; /* Internal name for debugging. */ const char *name; /* Validator method. */ int (*is_valid) (const struct floatformat *fmt, const void *from); /* Is the format actually the sum of two smaller floating point formats (IBM long double, as described in gcc/config/rs6000/darwin-ldouble-format)? If so, this is the smaller format in question, and the fields sign_start through intbit describe the first half. If not, this is NULL. */ const struct floatformat *split_half; }; /* floatformats for IEEE single and double, big and little endian. */ extern const struct floatformat floatformat_ieee_single_big; extern const struct floatformat floatformat_ieee_single_little; extern const struct floatformat floatformat_ieee_double_big; extern const struct floatformat floatformat_ieee_double_little; /* floatformat for ARM IEEE double, little endian bytes and big endian words */ extern const struct floatformat floatformat_ieee_double_littlebyte_bigword; /* floatformats for VAX. */ extern const struct floatformat floatformat_vax_f; extern const struct floatformat floatformat_vax_d; extern const struct floatformat floatformat_vax_g; /* floatformats for various extendeds. */ extern const struct floatformat floatformat_i387_ext; extern const struct floatformat floatformat_m68881_ext; extern const struct floatformat floatformat_i960_ext; extern const struct floatformat floatformat_m88110_ext; extern const struct floatformat floatformat_m88110_harris_ext; extern const struct floatformat floatformat_arm_ext_big; extern const struct floatformat floatformat_arm_ext_littlebyte_bigword; /* IA-64 Floating Point register spilt into memory. */ extern const struct floatformat floatformat_ia64_spill_big; extern const struct floatformat floatformat_ia64_spill_little; extern const struct floatformat floatformat_ia64_quad_big; extern const struct floatformat floatformat_ia64_quad_little; /* IBM long double (double+double). */ extern const struct floatformat floatformat_ibm_long_double; /* Convert from FMT to a double. FROM is the address of the extended float. Store the double in *TO. */ extern void floatformat_to_double (const struct floatformat *, const void *, double *); /* The converse: convert the double *FROM to FMT and store where TO points. */ extern void floatformat_from_double (const struct floatformat *, const double *, void *); /* Return non-zero iff the data at FROM is a valid number in format FMT. */ extern int floatformat_is_valid (const struct floatformat *fmt, const void *from); #endif /* defined (FLOATFORMAT_H) */ nescc-1.3.4/include/fnmatch.h000066400000000000000000000045771177770303300160530ustar00rootroot00000000000000/* Copyright 1991, 1992, 1993, 1996 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _FNMATCH_H #define _FNMATCH_H 1 #ifdef __cplusplus extern "C" { #endif #if defined (__cplusplus) || (defined (__STDC__) && __STDC__) #undef __P #define __P(args) args #else /* Not C++ or ANSI C. */ #undef __P #define __P(args) () /* We can get away without defining `const' here only because in this file it is used only inside the prototype for `fnmatch', which is elided in non-ANSI C where `const' is problematical. */ #endif /* C++ or ANSI C. */ /* We #undef these before defining them because some losing systems (HP-UX A.08.07 for example) define these in . */ #undef FNM_PATHNAME #undef FNM_NOESCAPE #undef FNM_PERIOD /* Bits set in the FLAGS argument to `fnmatch'. */ #define FNM_PATHNAME (1 << 0) /* No wildcard can ever match `/'. */ #define FNM_NOESCAPE (1 << 1) /* Backslashes don't quote special chars. */ #define FNM_PERIOD (1 << 2) /* Leading `.' is matched only explicitly. */ #if !defined (_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 2 || defined (_GNU_SOURCE) #define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */ #define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */ #define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */ #endif /* Value returned by `fnmatch' if STRING does not match PATTERN. */ #define FNM_NOMATCH 1 /* Match STRING against the filename pattern PATTERN, returning zero if it matches, FNM_NOMATCH if not. */ extern int fnmatch __P ((const char *__pattern, const char *__string, int __flags)); #ifdef __cplusplus } #endif #endif /* fnmatch.h */ nescc-1.3.4/include/getopt.h000066400000000000000000000117011177770303300157200ustar00rootroot00000000000000/* Declarations for getopt. Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, 2000, 2002 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@gnu.org. This program 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. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _GETOPT_H #define _GETOPT_H 1 #ifdef __cplusplus extern "C" { #endif /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ extern char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ extern int optind; /* Callers store zero here to inhibit the error message `getopt' prints for unrecognized options. */ extern int opterr; /* Set to an option character which was unrecognized. */ extern int optopt; /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of `struct option' terminated by an element containing a name which is zero. The field `has_arg' is: no_argument (or 0) if the option does not take an argument, required_argument (or 1) if the option requires an argument, optional_argument (or 2) if the option takes an optional argument. If the field `flag' is not NULL, it points to a variable that is set to the value given in the field `val' when the option is found, but left unchanged if the option is not found. To have a long-named option do something other than set an `int' to a compiled-in constant, such as set a value from `optarg', set the option's `flag' field to zero and its `val' field to a nonzero value (the equivalent single-letter option character, if there is one). For long options that have a zero `flag' field, `getopt' returns the contents of the `val' field. */ struct option { #if defined (__STDC__) && __STDC__ const char *name; #else char *name; #endif /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; /* Names for the values of the `has_arg' field of `struct option'. */ #define no_argument 0 #define required_argument 1 #define optional_argument 2 #if defined (__STDC__) && __STDC__ /* HAVE_DECL_* is a three-state macro: undefined, 0 or 1. If it is undefined, we haven't run the autoconf check so provide the declaration without arguments. If it is 0, we checked and failed to find the declaration so provide a fully prototyped one. If it is 1, we found it so don't provide any declaration at all. */ #if !HAVE_DECL_GETOPT #if defined (__GNU_LIBRARY__) || defined (HAVE_DECL_GETOPT) /* Many other libraries have conflicting prototypes for getopt, with differences in the consts, in unistd.h. To avoid compilation errors, only prototype getopt for the GNU C library. */ extern int getopt (int argc, char *const *argv, const char *shortopts); #else #ifndef __cplusplus extern int getopt (); #endif /* __cplusplus */ #endif #endif /* !HAVE_DECL_GETOPT */ extern int getopt_long (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind); extern int getopt_long_only (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind); /* Internal only. Users should not call this directly. */ extern int _getopt_internal (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind, int long_only); #else /* not __STDC__ */ extern int getopt (); extern int getopt_long (); extern int getopt_long_only (); extern int _getopt_internal (); #endif /* __STDC__ */ #ifdef __cplusplus } #endif #endif /* getopt.h */ nescc-1.3.4/include/hashtab.h000066400000000000000000000161401177770303300160320ustar00rootroot00000000000000/* An expandable hash tables datatype. Copyright (C) 1999, 2000, 2002, 2003, 2004 Free Software Foundation, Inc. Contributed by Vladimir Makarov (vmakarov@cygnus.com). This program 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 of the License, or (at your option) any later version. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* This package implements basic hash table functionality. It is possible to search for an entry, create an entry and destroy an entry. Elements in the table are generic pointers. The size of the table is not fixed; if the occupancy of the table grows too high the hash table will be expanded. The abstract data implementation is based on generalized Algorithm D from Knuth's book "The art of computer programming". Hash table is expanded by creation of new hash table and transferring elements from the old table to the new table. */ #ifndef __HASHTAB_H__ #define __HASHTAB_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "ansidecl.h" #ifndef GTY #define GTY(X) #endif /* The type for a hash code. */ typedef unsigned int hashval_t; /* Callback function pointer types. */ /* Calculate hash of a table entry. */ typedef hashval_t (*htab_hash) (const void *); /* Compare a table entry with a possible entry. The entry already in the table always comes first, so the second element can be of a different type (but in this case htab_find and htab_find_slot cannot be used; instead the variants that accept a hash value must be used). */ typedef int (*htab_eq) (const void *, const void *); /* Cleanup function called whenever a live element is removed from the hash table. */ typedef void (*htab_del) (void *); /* Function called by htab_traverse for each live element. The first arg is the slot of the element (which can be passed to htab_clear_slot if desired), the second arg is the auxiliary pointer handed to htab_traverse. Return 1 to continue scan, 0 to stop. */ typedef int (*htab_trav) (void **, void *); /* Memory-allocation function, with the same functionality as calloc(). Iff it returns NULL, the hash table implementation will pass an error code back to the user, so if your code doesn't handle errors, best if you use xcalloc instead. */ typedef void *(*htab_alloc) (size_t, size_t); /* We also need a free() routine. */ typedef void (*htab_free) (void *); /* Memory allocation and deallocation; variants which take an extra argument. */ typedef void *(*htab_alloc_with_arg) (void *, size_t, size_t); typedef void (*htab_free_with_arg) (void *, void *); /* This macro defines reserved value for empty table entry. */ #define HTAB_EMPTY_ENTRY ((PTR) 0) /* This macro defines reserved value for table entry which contained a deleted element. */ #define HTAB_DELETED_ENTRY ((PTR) 1) /* Hash tables are of the following type. The structure (implementation) of this type is not needed for using the hash tables. All work with hash table should be executed only through functions mentioned below. The size of this structure is subject to change. */ struct htab GTY(()) { /* Pointer to hash function. */ htab_hash hash_f; /* Pointer to comparison function. */ htab_eq eq_f; /* Pointer to cleanup function. */ htab_del del_f; /* Table itself. */ void ** GTY ((use_param, length ("%h.size"))) entries; /* Current size (in entries) of the hash table. */ size_t size; /* Current number of elements including also deleted elements. */ size_t n_elements; /* Current number of deleted elements in the table. */ size_t n_deleted; /* The following member is used for debugging. Its value is number of all calls of `htab_find_slot' for the hash table. */ unsigned int searches; /* The following member is used for debugging. Its value is number of collisions fixed for time of work with the hash table. */ unsigned int collisions; /* Pointers to allocate/free functions. */ htab_alloc alloc_f; htab_free free_f; /* Alternate allocate/free functions, which take an extra argument. */ void * GTY((skip)) alloc_arg; htab_alloc_with_arg alloc_with_arg_f; htab_free_with_arg free_with_arg_f; /* Current size (in entries) of the hash table, as an index into the table of primes. */ unsigned int size_prime_index; }; typedef struct htab *htab_t; /* An enum saying whether we insert into the hash table or not. */ enum insert_option {NO_INSERT, INSERT}; /* The prototypes of the package functions. */ extern htab_t htab_create_alloc (size_t, htab_hash, htab_eq, htab_del, htab_alloc, htab_free); extern htab_t htab_create_alloc_ex (size_t, htab_hash, htab_eq, htab_del, void *, htab_alloc_with_arg, htab_free_with_arg); /* Backward-compatibility functions. */ extern htab_t htab_create (size_t, htab_hash, htab_eq, htab_del); extern htab_t htab_try_create (size_t, htab_hash, htab_eq, htab_del); extern void htab_set_functions_ex (htab_t, htab_hash, htab_eq, htab_del, void *, htab_alloc_with_arg, htab_free_with_arg); extern void htab_delete (htab_t); extern void htab_empty (htab_t); extern void * htab_find (htab_t, const void *); extern void ** htab_find_slot (htab_t, const void *, enum insert_option); extern void * htab_find_with_hash (htab_t, const void *, hashval_t); extern void ** htab_find_slot_with_hash (htab_t, const void *, hashval_t, enum insert_option); extern void htab_clear_slot (htab_t, void **); extern void htab_remove_elt (htab_t, void *); extern void htab_remove_elt_with_hash (htab_t, void *, hashval_t); extern void htab_traverse (htab_t, htab_trav, void *); extern void htab_traverse_noresize (htab_t, htab_trav, void *); extern size_t htab_size (htab_t); extern size_t htab_elements (htab_t); extern double htab_collisions (htab_t); /* A hash function for pointers. */ extern htab_hash htab_hash_pointer; /* An equality function for pointers. */ extern htab_eq htab_eq_pointer; /* A hash function for null-terminated strings. */ extern hashval_t htab_hash_string (const void *); /* An iterative hash function for arbitrary data. */ extern hashval_t iterative_hash (const void *, size_t, hashval_t); /* Shorthand for hashing something with an intrinsic size. */ #define iterative_hash_object(OB,INIT) iterative_hash (&OB, sizeof (OB), INIT) #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __HASHTAB_H */ nescc-1.3.4/include/libiberty.h000066400000000000000000000552371177770303300164170ustar00rootroot00000000000000/* Function declarations for libiberty. Copyright 2001, 2002, 2005, 2007 Free Software Foundation, Inc. Note - certain prototypes declared in this header file are for functions whoes implementation copyright does not belong to the FSF. Those prototypes are present in this file for reference purposes only and their presence in this file should not construed as an indication of ownership by the FSF of the implementation of those functions in any way or form whatsoever. This program 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. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. Written by Cygnus Support, 1994. The libiberty library provides a number of functions which are missing on some operating systems. We do not declare those here, to avoid conflicts with the system header files on operating systems that do support those functions. In this file we only declare those functions which are specific to libiberty. */ #ifndef LIBIBERTY_H #define LIBIBERTY_H #ifdef __cplusplus extern "C" { #endif #include "ansidecl.h" /* Get a definition for size_t. */ #include /* Get a definition for va_list. */ #include #include /* If the OS supports it, ensure that the supplied stream is setup to avoid any multi-threaded locking. Otherwise leave the FILE pointer unchanged. If the stream is NULL do nothing. */ extern void unlock_stream (FILE *); /* If the OS supports it, ensure that the standard I/O streams, stdin, stdout and stderr are setup to avoid any multi-threaded locking. Otherwise do nothing. */ extern void unlock_std_streams (void); /* Open and return a FILE pointer. If the OS supports it, ensure that the stream is setup to avoid any multi-threaded locking. Otherwise return the FILE pointer unchanged. */ extern FILE *fopen_unlocked (const char *, const char *); extern FILE *fdopen_unlocked (int, const char *); extern FILE *freopen_unlocked (const char *, const char *, FILE *); /* Build an argument vector from a string. Allocates memory using malloc. Use freeargv to free the vector. */ extern char **buildargv (const char *) ATTRIBUTE_MALLOC; /* Free a vector returned by buildargv. */ extern void freeargv (char **); /* Duplicate an argument vector. Allocates memory using malloc. Use freeargv to free the vector. */ extern char **dupargv (char **) ATTRIBUTE_MALLOC; /* Expand "@file" arguments in argv. */ extern void expandargv PARAMS ((int *, char ***)); /* Write argv to an @-file, inserting necessary quoting. */ extern int writeargv PARAMS ((char **, FILE *)); /* Return the last component of a path name. Note that we can't use a prototype here because the parameter is declared inconsistently across different systems, sometimes as "char *" and sometimes as "const char *" */ /* HAVE_DECL_* is a three-state macro: undefined, 0 or 1. If it is undefined, we haven't run the autoconf check so provide the declaration without arguments. If it is 0, we checked and failed to find the declaration so provide a fully prototyped one. If it is 1, we found it so don't provide any declaration at all. */ #if !HAVE_DECL_BASENAME #if defined (__GNU_LIBRARY__ ) || defined (__linux__) || defined (__FreeBSD__) || defined (__OpenBSD__) || defined(__NetBSD__) || defined (__CYGWIN__) || defined (__CYGWIN32__) || defined (__MINGW32__) || defined (HAVE_DECL_BASENAME) extern char *basename (const char *); #else /* Do not allow basename to be used if there is no prototype seen. We either need to use the above prototype or have one from autoconf which would result in HAVE_DECL_BASENAME being set. */ #define basename basename_cannot_be_used_without_a_prototype #endif #endif /* A well-defined basename () that is always compiled in. */ extern const char *lbasename (const char *); /* A well-defined realpath () that is always compiled in. */ extern char *lrealpath (const char *); /* Concatenate an arbitrary number of strings. You must pass NULL as the last argument of this function, to terminate the list of strings. Allocates memory using xmalloc. */ extern char *concat (const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_SENTINEL; /* Concatenate an arbitrary number of strings. You must pass NULL as the last argument of this function, to terminate the list of strings. Allocates memory using xmalloc. The first argument is not one of the strings to be concatenated, but if not NULL is a pointer to be freed after the new string is created, similar to the way xrealloc works. */ extern char *reconcat (char *, const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_SENTINEL; /* Determine the length of concatenating an arbitrary number of strings. You must pass NULL as the last argument of this function, to terminate the list of strings. */ extern unsigned long concat_length (const char *, ...) ATTRIBUTE_SENTINEL; /* Concatenate an arbitrary number of strings into a SUPPLIED area of memory. You must pass NULL as the last argument of this function, to terminate the list of strings. The supplied memory is assumed to be large enough. */ extern char *concat_copy (char *, const char *, ...) ATTRIBUTE_SENTINEL; /* Concatenate an arbitrary number of strings into a GLOBAL area of memory. You must pass NULL as the last argument of this function, to terminate the list of strings. The supplied memory is assumed to be large enough. */ extern char *concat_copy2 (const char *, ...) ATTRIBUTE_SENTINEL; /* This is the global area used by concat_copy2. */ extern char *libiberty_concat_ptr; /* Concatenate an arbitrary number of strings. You must pass NULL as the last argument of this function, to terminate the list of strings. Allocates memory using alloca. The arguments are evaluated twice! */ #define ACONCAT(ACONCAT_PARAMS) \ (libiberty_concat_ptr = (char *) alloca (concat_length ACONCAT_PARAMS + 1), \ concat_copy2 ACONCAT_PARAMS) /* Check whether two file descriptors refer to the same file. */ extern int fdmatch (int fd1, int fd2); /* Return the position of the first bit set in the argument. */ /* Prototypes vary from system to system, so we only provide a prototype on systems where we know that we need it. */ #if defined (HAVE_DECL_FFS) && !HAVE_DECL_FFS extern int ffs(int); #endif /* Get the working directory. The result is cached, so don't call chdir() between calls to getpwd(). */ extern char * getpwd (void); /* Get the current time. */ /* Prototypes vary from system to system, so we only provide a prototype on systems where we know that we need it. */ #ifdef __MINGW32__ /* Forward declaration to avoid #include . */ struct timeval; extern int gettimeofday (struct timeval *, void *); #endif /* Get the amount of time the process has run, in microseconds. */ extern long get_run_time (void); /* Generate a relocated path to some installation directory. Allocates return value using malloc. */ extern char *make_relative_prefix (const char *, const char *, const char *) ATTRIBUTE_MALLOC; /* Generate a relocated path to some installation directory without attempting to follow any soft links. Allocates return value using malloc. */ extern char *make_relative_prefix_ignore_links (const char *, const char *, const char *) ATTRIBUTE_MALLOC; /* Choose a temporary directory to use for scratch files. */ extern char *choose_temp_base (void) ATTRIBUTE_MALLOC; /* Return a temporary file name or NULL if unable to create one. */ extern char *make_temp_file (const char *) ATTRIBUTE_MALLOC; /* Remove a link to a file unless it is special. */ extern int unlink_if_ordinary (const char *); /* Allocate memory filled with spaces. Allocates using malloc. */ extern const char *spaces (int count); /* Return the maximum error number for which strerror will return a string. */ extern int errno_max (void); /* Return the name of an errno value (e.g., strerrno (EINVAL) returns "EINVAL"). */ extern const char *strerrno (int); /* Given the name of an errno value, return the value. */ extern int strtoerrno (const char *); /* ANSI's strerror(), but more robust. */ extern char *xstrerror (int); /* Return the maximum signal number for which strsignal will return a string. */ extern int signo_max (void); /* Return a signal message string for a signal number (e.g., strsignal (SIGHUP) returns something like "Hangup"). */ /* This is commented out as it can conflict with one in system headers. We still document its existence though. */ /*extern const char *strsignal (int);*/ /* Return the name of a signal number (e.g., strsigno (SIGHUP) returns "SIGHUP"). */ extern const char *strsigno (int); /* Given the name of a signal, return its number. */ extern int strtosigno (const char *); /* Register a function to be run by xexit. Returns 0 on success. */ extern int xatexit (void (*fn) (void)); /* Exit, calling all the functions registered with xatexit. */ extern void xexit (int status) ATTRIBUTE_NORETURN; /* Set the program name used by xmalloc. */ extern void xmalloc_set_program_name (const char *); /* Report an allocation failure. */ extern void xmalloc_failed (size_t) ATTRIBUTE_NORETURN; /* Allocate memory without fail. If malloc fails, this will print a message to stderr (using the name set by xmalloc_set_program_name, if any) and then call xexit. */ extern void *xmalloc (size_t) ATTRIBUTE_MALLOC; /* Reallocate memory without fail. This works like xmalloc. Note, realloc type functions are not suitable for attribute malloc since they may return the same address across multiple calls. */ extern void *xrealloc (void *, size_t); /* Allocate memory without fail and set it to zero. This works like xmalloc. */ extern void *xcalloc (size_t, size_t) ATTRIBUTE_MALLOC; /* Copy a string into a memory buffer without fail. */ extern char *xstrdup (const char *) ATTRIBUTE_MALLOC; /* Copy at most N characters from string into a buffer without fail. */ extern char *xstrndup (const char *, size_t) ATTRIBUTE_MALLOC; /* Copy an existing memory buffer to a new memory buffer without fail. */ extern void *xmemdup (const void *, size_t, size_t) ATTRIBUTE_MALLOC; /* Physical memory routines. Return values are in BYTES. */ extern double physmem_total (void); extern double physmem_available (void); /* These macros provide a K&R/C89/C++-friendly way of allocating structures with nice encapsulation. The XDELETE*() macros are technically superfluous, but provided here for symmetry. Using them consistently makes it easier to update client code to use different allocators such as new/delete and new[]/delete[]. */ /* Scalar allocators. */ #define XNEW(T) ((T *) xmalloc (sizeof (T))) #define XCNEW(T) ((T *) xcalloc (1, sizeof (T))) #define XDELETE(P) free ((void*) (P)) /* Array allocators. */ #define XNEWVEC(T, N) ((T *) xmalloc (sizeof (T) * (N))) #define XCNEWVEC(T, N) ((T *) xcalloc ((N), sizeof (T))) #define XRESIZEVEC(T, P, N) ((T *) xrealloc ((void *) (P), sizeof (T) * (N))) #define XDELETEVEC(P) free ((void*) (P)) /* Allocators for variable-sized structures and raw buffers. */ #define XNEWVAR(T, S) ((T *) xmalloc ((S))) #define XCNEWVAR(T, S) ((T *) xcalloc (1, (S))) #define XRESIZEVAR(T, P, S) ((T *) xrealloc ((P), (S))) /* Type-safe obstack allocator. */ #define XOBNEW(O, T) ((T *) obstack_alloc ((O), sizeof (T))) #define XOBFINISH(O, T) ((T) obstack_finish ((O))) /* hex character manipulation routines */ #define _hex_array_size 256 #define _hex_bad 99 extern const unsigned char _hex_value[_hex_array_size]; extern void hex_init (void); #define hex_p(c) (hex_value (c) != _hex_bad) /* If you change this, note well: Some code relies on side effects in the argument being performed exactly once. */ #define hex_value(c) ((unsigned int) _hex_value[(unsigned char) (c)]) /* Flags for pex_init. These are bits to be or'ed together. */ /* Record subprocess times, if possible. */ #define PEX_RECORD_TIMES 0x1 /* Use pipes for communication between processes, if possible. */ #define PEX_USE_PIPES 0x2 /* Save files used for communication between processes. */ #define PEX_SAVE_TEMPS 0x4 /* Prepare to execute one or more programs, with standard output of each program fed to standard input of the next. FLAGS As above. PNAME The name of the program to report in error messages. TEMPBASE A base name to use for temporary files; may be NULL to use a random name. Returns NULL on error. */ extern struct pex_obj *pex_init (int flags, const char *pname, const char *tempbase); /* Flags for pex_run. These are bits to be or'ed together. */ /* Last program in pipeline. Standard output of program goes to OUTNAME, or, if OUTNAME is NULL, to standard output of caller. Do not set this if you want to call pex_read_output. After this is set, pex_run may no longer be called with the same struct pex_obj. */ #define PEX_LAST 0x1 /* Search for program in executable search path. */ #define PEX_SEARCH 0x2 /* OUTNAME is a suffix. */ #define PEX_SUFFIX 0x4 /* Send program's standard error to standard output. */ #define PEX_STDERR_TO_STDOUT 0x8 /* Input file should be opened in binary mode. This flag is ignored on Unix. */ #define PEX_BINARY_INPUT 0x10 /* Output file should be opened in binary mode. This flag is ignored on Unix. For proper behaviour PEX_BINARY_INPUT and PEX_BINARY_OUTPUT have to match appropriately--i.e., a call using PEX_BINARY_OUTPUT should be followed by a call using PEX_BINARY_INPUT. */ #define PEX_BINARY_OUTPUT 0x20 /* Capture stderr to a pipe. The output can be read by calling pex_read_err and reading from the returned FILE object. This flag may be specified only for the last program in a pipeline. This flag is supported only on Unix and Windows. */ #define PEX_STDERR_TO_PIPE 0x40 /* Capture stderr in binary mode. This flag is ignored on Unix. */ #define PEX_BINARY_ERROR 0x80 /* Execute one program. Returns NULL on success. On error returns an error string (typically just the name of a system call); the error string is statically allocated. OBJ Returned by pex_init. FLAGS As above. EXECUTABLE The program to execute. ARGV NULL terminated array of arguments to pass to the program. OUTNAME Sets the output file name as follows: PEX_SUFFIX set (OUTNAME may not be NULL): TEMPBASE parameter to pex_init not NULL: Output file name is the concatenation of TEMPBASE and OUTNAME. TEMPBASE is NULL: Output file name is a random file name ending in OUTNAME. PEX_SUFFIX not set: OUTNAME not NULL: Output file name is OUTNAME. OUTNAME NULL, TEMPBASE not NULL: Output file name is randomly chosen using TEMPBASE. OUTNAME NULL, TEMPBASE NULL: Output file name is randomly chosen. If PEX_LAST is not set, the output file name is the name to use for a temporary file holding stdout, if any (there will not be a file if PEX_USE_PIPES is set and the system supports pipes). If a file is used, it will be removed when no longer needed unless PEX_SAVE_TEMPS is set. If PEX_LAST is set, and OUTNAME is not NULL, standard output is written to the output file name. The file will not be removed. If PEX_LAST and PEX_SUFFIX are both set, TEMPBASE may not be NULL. ERRNAME If not NULL, this is the name of a file to which standard error is written. If NULL, standard error of the program is standard error of the caller. ERR On an error return, *ERR is set to an errno value, or to 0 if there is no relevant errno. */ extern const char *pex_run (struct pex_obj *obj, int flags, const char *executable, char * const *argv, const char *outname, const char *errname, int *err); /* As for pex_run (), but takes an extra parameter to enable the environment for the child process to be specified. ENV The environment for the child process, specified as an array of character pointers. Each element of the array should point to a string of the form VAR=VALUE, with the exception of the last element which must be a null pointer. */ extern const char *pex_run_in_environment (struct pex_obj *obj, int flags, const char *executable, char * const *argv, char * const *env, const char *outname, const char *errname, int *err); /* Return a stream for a temporary file to pass to the first program in the pipeline as input. The file name is chosen as for pex_run. pex_run closes the file automatically; don't close it yourself. */ extern FILE *pex_input_file (struct pex_obj *obj, int flags, const char *in_name); /* Return a stream for a pipe connected to the standard input of the first program in the pipeline. You must have passed `PEX_USE_PIPES' to `pex_init'. Close the returned stream yourself. */ extern FILE *pex_input_pipe (struct pex_obj *obj, int binary); /* Read the standard output of the last program to be executed. pex_run can not be called after this. BINARY should be non-zero if the file should be opened in binary mode; this is ignored on Unix. Returns NULL on error. Don't call fclose on the returned FILE; it will be closed by pex_free. */ extern FILE *pex_read_output (struct pex_obj *, int binary); /* Read the standard error of the last program to be executed. pex_run can not be called after this. BINARY should be non-zero if the file should be opened in binary mode; this is ignored on Unix. Returns NULL on error. Don't call fclose on the returned FILE; it will be closed by pex_free. */ extern FILE *pex_read_err (struct pex_obj *, int binary); /* Return exit status of all programs in VECTOR. COUNT indicates the size of VECTOR. The status codes in the vector are in the order of the calls to pex_run. Returns 0 on error, 1 on success. */ extern int pex_get_status (struct pex_obj *, int count, int *vector); /* Return times of all programs in VECTOR. COUNT indicates the size of VECTOR. struct pex_time is really just struct timeval, but that is not portable to all systems. Returns 0 on error, 1 on success. */ struct pex_time { unsigned long user_seconds; unsigned long user_microseconds; unsigned long system_seconds; unsigned long system_microseconds; }; extern int pex_get_times (struct pex_obj *, int count, struct pex_time *vector); /* Clean up a pex_obj. If you have not called pex_get_times or pex_get_status, this will try to kill the subprocesses. */ extern void pex_free (struct pex_obj *); /* Just execute one program. Return value is as for pex_run. FLAGS Combination of PEX_SEARCH and PEX_STDERR_TO_STDOUT. EXECUTABLE As for pex_run. ARGV As for pex_run. PNAME As for pex_init. OUTNAME As for pex_run when PEX_LAST is set. ERRNAME As for pex_run. STATUS Set to exit status on success. ERR As for pex_run. */ extern const char *pex_one (int flags, const char *executable, char * const *argv, const char *pname, const char *outname, const char *errname, int *status, int *err); /* pexecute and pwait are the old pexecute interface, still here for backward compatibility. Don't use these for new code. Instead, use pex_init/pex_run/pex_get_status/pex_free, or pex_one. */ /* Definitions used by the pexecute routine. */ #define PEXECUTE_FIRST 1 #define PEXECUTE_LAST 2 #define PEXECUTE_ONE (PEXECUTE_FIRST + PEXECUTE_LAST) #define PEXECUTE_SEARCH 4 #define PEXECUTE_VERBOSE 8 /* Execute a program. */ extern int pexecute (const char *, char * const *, const char *, const char *, char **, char **, int); /* Wait for pexecute to finish. */ extern int pwait (int, int *, int); #if !HAVE_DECL_ASPRINTF /* Like sprintf but provides a pointer to malloc'd storage, which must be freed by the caller. */ extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2; #endif #if !HAVE_DECL_VASPRINTF /* Like vsprintf but provides a pointer to malloc'd storage, which must be freed by the caller. */ extern int vasprintf (char **, const char *, va_list) ATTRIBUTE_PRINTF(2,0); #endif #if defined(HAVE_DECL_SNPRINTF) && !HAVE_DECL_SNPRINTF /* Like sprintf but prints at most N characters. */ extern int snprintf (char *, size_t, const char *, ...) ATTRIBUTE_PRINTF_3; #endif #if defined(HAVE_DECL_VSNPRINTF) && !HAVE_DECL_VSNPRINTF /* Like vsprintf but prints at most N characters. */ extern int vsnprintf (char *, size_t, const char *, va_list) ATTRIBUTE_PRINTF(3,0); #endif #if defined(HAVE_DECL_STRVERSCMP) && !HAVE_DECL_STRVERSCMP /* Compare version strings. */ extern int strverscmp (const char *, const char *); #endif #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) /* Drastically simplified alloca configurator. If we're using GCC, we use __builtin_alloca; otherwise we use the C alloca. The C alloca is always available. You can override GCC by defining USE_C_ALLOCA yourself. The canonical autoconf macro C_ALLOCA is also set/unset as it is often used to indicate whether code needs to call alloca(0). */ extern void *C_alloca (size_t) ATTRIBUTE_MALLOC; #undef alloca #if GCC_VERSION >= 2000 && !defined USE_C_ALLOCA # define alloca(x) __builtin_alloca(x) # undef C_ALLOCA # define ASTRDUP(X) \ (__extension__ ({ const char *const libiberty_optr = (X); \ const unsigned long libiberty_len = strlen (libiberty_optr) + 1; \ char *const libiberty_nptr = (char *const) alloca (libiberty_len); \ (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len); })) #else # define alloca(x) C_alloca(x) # undef USE_C_ALLOCA # define USE_C_ALLOCA 1 # undef C_ALLOCA # define C_ALLOCA 1 extern const char *libiberty_optr; extern char *libiberty_nptr; extern unsigned long libiberty_len; # define ASTRDUP(X) \ (libiberty_optr = (X), \ libiberty_len = strlen (libiberty_optr) + 1, \ libiberty_nptr = (char *) alloca (libiberty_len), \ (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len)) #endif #ifdef __cplusplus } #endif #endif /* ! defined (LIBIBERTY_H) */ nescc-1.3.4/include/md5.h000066400000000000000000000117571177770303300151160ustar00rootroot00000000000000/* md5.h - Declaration of functions and data types used for MD5 sum computing library functions. Copyright 1995, 1996, 2000 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. This program 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. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _MD5_H #define _MD5_H 1 #include #if defined HAVE_LIMITS_H || _LIBC # include #endif #include "ansidecl.h" /* The following contortions are an attempt to use the C preprocessor to determine an unsigned integral type that is 32 bits wide. An alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but doing that would require that the configure script compile and *run* the resulting executable. Locally running cross-compiled executables is usually not possible. */ #ifdef _LIBC # include typedef u_int32_t md5_uint32; typedef uintptr_t md5_uintptr; #else # define INT_MAX_32_BITS 2147483647 /* If UINT_MAX isn't defined, assume it's a 32-bit type. This should be valid for all systems GNU cares about because that doesn't include 16-bit systems, and only modern systems (that certainly have ) have 64+-bit integral types. */ # ifndef INT_MAX # define INT_MAX INT_MAX_32_BITS # endif # if INT_MAX == INT_MAX_32_BITS typedef unsigned int md5_uint32; # else # if SHRT_MAX == INT_MAX_32_BITS typedef unsigned short md5_uint32; # else # if LONG_MAX == INT_MAX_32_BITS typedef unsigned long md5_uint32; # else /* The following line is intended to evoke an error. Using #error is not portable enough. */ "Cannot determine unsigned 32-bit data type." # endif # endif # endif /* We have to make a guess about the integer type equivalent in size to pointers which should always be correct. */ typedef unsigned long int md5_uintptr; #endif /* Structure to save state of computation between the single steps. */ struct md5_ctx { md5_uint32 A; md5_uint32 B; md5_uint32 C; md5_uint32 D; md5_uint32 total[2]; md5_uint32 buflen; char buffer[128] ATTRIBUTE_ALIGNED_ALIGNOF(md5_uint32); }; /* * The following three functions are build up the low level used in * the functions `md5_stream' and `md5_buffer'. */ /* Initialize structure containing state of computation. (RFC 1321, 3.3: Step 3) */ extern void md5_init_ctx (struct md5_ctx *ctx); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is necessary that LEN is a multiple of 64!!! */ extern void md5_process_block (const void *buffer, size_t len, struct md5_ctx *ctx); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is NOT required that LEN is a multiple of 64. */ extern void md5_process_bytes (const void *buffer, size_t len, struct md5_ctx *ctx); /* Process the remaining bytes in the buffer and put result from CTX in first 16 bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. IMPORTANT: On some systems it is required that RESBUF is correctly aligned for a 32 bits value. */ extern void *md5_finish_ctx (struct md5_ctx *ctx, void *resbuf); /* Put result from CTX in first 16 bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. IMPORTANT: On some systems it is required that RESBUF is correctly aligned for a 32 bits value. */ extern void *md5_read_ctx (const struct md5_ctx *ctx, void *resbuf); /* Compute MD5 message digest for bytes read from STREAM. The resulting message digest number will be written into the 16 bytes beginning at RESBLOCK. */ extern int md5_stream (FILE *stream, void *resblock); /* Compute MD5 message digest for LEN bytes beginning at BUFFER. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *md5_buffer (const char *buffer, size_t len, void *resblock); #endif nescc-1.3.4/include/objalloc.h000066400000000000000000000075701177770303300162140ustar00rootroot00000000000000/* objalloc.h -- routines to allocate memory for objects Copyright 1997, 2001 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Solutions. This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef OBJALLOC_H #define OBJALLOC_H #include "ansidecl.h" /* These routines allocate space for an object. The assumption is that the object will want to allocate space as it goes along, but will never want to free any particular block. There is a function to free a block, which also frees all more recently allocated blocks. There is also a function to free all the allocated space. This is essentially a specialization of obstacks. The main difference is that a block may not be allocated a bit at a time. Another difference is that these routines are always built on top of malloc, and always pass an malloc failure back to the caller, unlike more recent versions of obstacks. */ /* This is what an objalloc structure looks like. Callers should not refer to these fields, nor should they allocate these structure themselves. Instead, they should only create them via objalloc_init, and only access them via the functions and macros listed below. The structure is only defined here so that we can access it via macros. */ struct objalloc { char *current_ptr; unsigned int current_space; void *chunks; }; /* Work out the required alignment. */ struct objalloc_align { char x; double d; }; #if defined (__STDC__) && __STDC__ #ifndef offsetof #include #endif #endif #ifndef offsetof #define offsetof(TYPE, MEMBER) ((unsigned long) &((TYPE *)0)->MEMBER) #endif #define OBJALLOC_ALIGN offsetof (struct objalloc_align, d) /* Create an objalloc structure. Returns NULL if malloc fails. */ extern struct objalloc *objalloc_create (void); /* Allocate space from an objalloc structure. Returns NULL if malloc fails. */ extern void *_objalloc_alloc (struct objalloc *, unsigned long); /* The macro version of objalloc_alloc. We only define this if using gcc, because otherwise we would have to evaluate the arguments multiple times, or use a temporary field as obstack.h does. */ #if defined (__GNUC__) && defined (__STDC__) && __STDC__ /* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and does not implement __extension__. But that compiler doesn't define __GNUC_MINOR__. */ #if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__) #define __extension__ #endif #define objalloc_alloc(o, l) \ __extension__ \ ({ struct objalloc *__o = (o); \ unsigned long __len = (l); \ if (__len == 0) \ __len = 1; \ __len = (__len + OBJALLOC_ALIGN - 1) &~ (OBJALLOC_ALIGN - 1); \ (__len <= __o->current_space \ ? (__o->current_ptr += __len, \ __o->current_space -= __len, \ (void *) (__o->current_ptr - __len)) \ : _objalloc_alloc (__o, __len)); }) #else /* ! __GNUC__ */ #define objalloc_alloc(o, l) _objalloc_alloc ((o), (l)) #endif /* ! __GNUC__ */ /* Free an entire objalloc structure. */ extern void objalloc_free (struct objalloc *); /* Free a block allocated by objalloc_alloc. This also frees all more recently allocated blocks. */ extern void objalloc_free_block (struct objalloc *, void *); #endif /* OBJALLOC_H */ nescc-1.3.4/include/obstack.h000066400000000000000000000506211177770303300160500ustar00rootroot00000000000000/* obstack.h - object stack macros Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@gnu.org. This program 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. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* Summary: All the apparent functions defined here are macros. The idea is that you would use these pre-tested macros to solve a very specific set of problems, and they would run fast. Caution: no side-effects in arguments please!! They may be evaluated MANY times!! These macros operate a stack of objects. Each object starts life small, and may grow to maturity. (Consider building a word syllable by syllable.) An object can move while it is growing. Once it has been "finished" it never changes address again. So the "top of the stack" is typically an immature growing object, while the rest of the stack is of mature, fixed size and fixed address objects. These routines grab large chunks of memory, using a function you supply, called `obstack_chunk_alloc'. On occasion, they free chunks, by calling `obstack_chunk_free'. You must define them and declare them before using any obstack macros. Each independent stack is represented by a `struct obstack'. Each of the obstack macros expects a pointer to such a structure as the first argument. One motivation for this package is the problem of growing char strings in symbol tables. Unless you are "fascist pig with a read-only mind" --Gosper's immortal quote from HAKMEM item 154, out of context--you would not like to put any arbitrary upper limit on the length of your symbols. In practice this often means you will build many short symbols and a few long symbols. At the time you are reading a symbol you don't know how long it is. One traditional method is to read a symbol into a buffer, realloc()ating the buffer every time you try to read a symbol that is longer than the buffer. This is beaut, but you still will want to copy the symbol from the buffer to a more permanent symbol-table entry say about half the time. With obstacks, you can work differently. Use one obstack for all symbol names. As you read a symbol, grow the name in the obstack gradually. When the name is complete, finalize it. Then, if the symbol exists already, free the newly read name. The way we do this is to take a large chunk, allocating memory from low addresses. When you want to build a symbol in the chunk you just add chars above the current "high water mark" in the chunk. When you have finished adding chars, because you got to the end of the symbol, you know how long the chars are, and you can create a new object. Mostly the chars will not burst over the highest address of the chunk, because you would typically expect a chunk to be (say) 100 times as long as an average object. In case that isn't clear, when we have enough chars to make up the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed) so we just point to it where it lies. No moving of chars is needed and this is the second win: potentially long strings need never be explicitly shuffled. Once an object is formed, it does not change its address during its lifetime. When the chars burst over a chunk boundary, we allocate a larger chunk, and then copy the partly formed object from the end of the old chunk to the beginning of the new larger chunk. We then carry on accreting characters to the end of the object as we normally would. A special macro is provided to add a single char at a time to a growing object. This allows the use of register variables, which break the ordinary 'growth' macro. Summary: We allocate large chunks. We carve out one object at a time from the current chunk. Once carved, an object never moves. We are free to append data of any size to the currently growing object. Exactly one object is growing in an obstack at any one time. You can run one obstack per control block. You may have as many control blocks as you dare. Because of the way we do it, you can `unwind' an obstack back to a previous state. (You may remove objects much as you would with a stack.) */ /* Don't do the contents of this file more than once. */ #ifndef _OBSTACK_H #define _OBSTACK_H 1 #ifdef __cplusplus extern "C" { #endif /* We use subtraction of (char *) 0 instead of casting to int because on word-addressable machines a simple cast to int may ignore the byte-within-word field of the pointer. */ #ifndef __PTR_TO_INT # define __PTR_TO_INT(P) ((P) - (char *) 0) #endif #ifndef __INT_TO_PTR # define __INT_TO_PTR(P) ((P) + (char *) 0) #endif /* We need the type of the resulting object. If __PTRDIFF_TYPE__ is defined, as with GNU C, use that; that way we don't pollute the namespace with 's symbols. Otherwise, if is available, include it and use ptrdiff_t. In traditional C, long is the best that we can do. */ #ifdef __PTRDIFF_TYPE__ # define PTR_INT_TYPE __PTRDIFF_TYPE__ #else # ifdef HAVE_STDDEF_H # include # define PTR_INT_TYPE ptrdiff_t # else # define PTR_INT_TYPE long # endif #endif #if defined _LIBC || defined HAVE_STRING_H # include # define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N)) #else # ifdef memcpy # define _obstack_memcpy(To, From, N) memcpy ((To), (char *)(From), (N)) # else # define _obstack_memcpy(To, From, N) bcopy ((char *)(From), (To), (N)) # endif #endif struct _obstack_chunk /* Lives at front of each chunk. */ { char *limit; /* 1 past end of this chunk */ struct _obstack_chunk *prev; /* address of prior chunk or NULL */ char contents[4]; /* objects begin here */ }; struct obstack /* control current object in current chunk */ { long chunk_size; /* preferred size to allocate chunks in */ struct _obstack_chunk *chunk; /* address of current struct obstack_chunk */ char *object_base; /* address of object we are building */ char *next_free; /* where to add next char to current object */ char *chunk_limit; /* address of char after current chunk */ PTR_INT_TYPE temp; /* Temporary for some macros. */ int alignment_mask; /* Mask of alignment for each object. */ /* These prototypes vary based on `use_extra_arg', and we use casts to the prototypeless function type in all assignments, but having prototypes here quiets -Wstrict-prototypes. */ struct _obstack_chunk *(*chunkfun) (void *, long); void (*freefun) (void *, struct _obstack_chunk *); void *extra_arg; /* first arg for chunk alloc/dealloc funcs */ unsigned use_extra_arg:1; /* chunk alloc/dealloc funcs take extra arg */ unsigned maybe_empty_object:1;/* There is a possibility that the current chunk contains a zero-length object. This prevents freeing the chunk if we allocate a bigger chunk to replace it. */ unsigned alloc_failed:1; /* No longer used, as we now call the failed handler on error, but retained for binary compatibility. */ }; /* Declare the external functions we use; they are in obstack.c. */ extern void _obstack_newchunk (struct obstack *, int); extern void _obstack_free (struct obstack *, void *); extern int _obstack_begin (struct obstack *, int, int, void *(*) (long), void (*) (void *)); extern int _obstack_begin_1 (struct obstack *, int, int, void *(*) (void *, long), void (*) (void *, void *), void *); extern int _obstack_memory_used (struct obstack *); /* Do the function-declarations after the structs but before defining the macros. */ void obstack_init (struct obstack *obstack); void * obstack_alloc (struct obstack *obstack, int size); void * obstack_copy (struct obstack *obstack, void *address, int size); void * obstack_copy0 (struct obstack *obstack, void *address, int size); void obstack_free (struct obstack *obstack, void *block); void obstack_blank (struct obstack *obstack, int size); void obstack_grow (struct obstack *obstack, void *data, int size); void obstack_grow0 (struct obstack *obstack, void *data, int size); void obstack_1grow (struct obstack *obstack, int data_char); void obstack_ptr_grow (struct obstack *obstack, void *data); void obstack_int_grow (struct obstack *obstack, int data); void * obstack_finish (struct obstack *obstack); int obstack_object_size (struct obstack *obstack); int obstack_room (struct obstack *obstack); void obstack_make_room (struct obstack *obstack, int size); void obstack_1grow_fast (struct obstack *obstack, int data_char); void obstack_ptr_grow_fast (struct obstack *obstack, void *data); void obstack_int_grow_fast (struct obstack *obstack, int data); void obstack_blank_fast (struct obstack *obstack, int size); void * obstack_base (struct obstack *obstack); void * obstack_next_free (struct obstack *obstack); int obstack_alignment_mask (struct obstack *obstack); int obstack_chunk_size (struct obstack *obstack); int obstack_memory_used (struct obstack *obstack); /* Error handler called when `obstack_chunk_alloc' failed to allocate more memory. This can be set to a user defined function. The default action is to print a message and abort. */ extern void (*obstack_alloc_failed_handler) (void); /* Exit value used when `print_and_abort' is used. */ extern int obstack_exit_failure; /* Pointer to beginning of object being allocated or to be allocated next. Note that this might not be the final address of the object because a new chunk might be needed to hold the final size. */ #define obstack_base(h) ((h)->object_base) /* Size for allocating ordinary chunks. */ #define obstack_chunk_size(h) ((h)->chunk_size) /* Pointer to next byte not yet allocated in current chunk. */ #define obstack_next_free(h) ((h)->next_free) /* Mask specifying low bits that should be clear in address of an object. */ #define obstack_alignment_mask(h) ((h)->alignment_mask) /* To prevent prototype warnings provide complete argument list in standard C version. */ # define obstack_init(h) \ _obstack_begin ((h), 0, 0, \ (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free) # define obstack_begin(h, size) \ _obstack_begin ((h), (size), 0, \ (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free) # define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ _obstack_begin ((h), (size), (alignment), \ (void *(*) (long)) (chunkfun), (void (*) (void *)) (freefun)) # define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ _obstack_begin_1 ((h), (size), (alignment), \ (void *(*) (void *, long)) (chunkfun), \ (void (*) (void *, void *)) (freefun), (arg)) # define obstack_chunkfun(h, newchunkfun) \ ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun)) # define obstack_freefun(h, newfreefun) \ ((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun)) #define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = (achar)) #define obstack_blank_fast(h,n) ((h)->next_free += (n)) #define obstack_memory_used(h) _obstack_memory_used (h) #if defined __GNUC__ && defined __STDC__ && __STDC__ /* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and does not implement __extension__. But that compiler doesn't define __GNUC_MINOR__. */ # if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__) # define __extension__ # endif /* For GNU C, if not -traditional, we can define these macros to compute all args only once without using a global variable. Also, we can avoid using the `temp' slot, to make faster code. */ # define obstack_object_size(OBSTACK) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ (unsigned) (__o->next_free - __o->object_base); }) # define obstack_room(OBSTACK) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ (unsigned) (__o->chunk_limit - __o->next_free); }) # define obstack_make_room(OBSTACK,length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ int __len = (length); \ if (__o->chunk_limit - __o->next_free < __len) \ _obstack_newchunk (__o, __len); \ (void) 0; }) # define obstack_empty_p(OBSTACK) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ (__o->chunk->prev == 0 && __o->next_free - __o->chunk->contents == 0); }) # define obstack_grow(OBSTACK,where,length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ int __len = (length); \ if (__o->next_free + __len > __o->chunk_limit) \ _obstack_newchunk (__o, __len); \ _obstack_memcpy (__o->next_free, (where), __len); \ __o->next_free += __len; \ (void) 0; }) # define obstack_grow0(OBSTACK,where,length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ int __len = (length); \ if (__o->next_free + __len + 1 > __o->chunk_limit) \ _obstack_newchunk (__o, __len + 1); \ _obstack_memcpy (__o->next_free, (where), __len); \ __o->next_free += __len; \ *(__o->next_free)++ = 0; \ (void) 0; }) # define obstack_1grow(OBSTACK,datum) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ if (__o->next_free + 1 > __o->chunk_limit) \ _obstack_newchunk (__o, 1); \ obstack_1grow_fast (__o, datum); \ (void) 0; }) /* These assume that the obstack alignment is good enough for pointers or ints, and that the data added so far to the current object shares that much alignment. */ # define obstack_ptr_grow(OBSTACK,datum) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ if (__o->next_free + sizeof (void *) > __o->chunk_limit) \ _obstack_newchunk (__o, sizeof (void *)); \ obstack_ptr_grow_fast (__o, datum); }) # define obstack_int_grow(OBSTACK,datum) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ if (__o->next_free + sizeof (int) > __o->chunk_limit) \ _obstack_newchunk (__o, sizeof (int)); \ obstack_int_grow_fast (__o, datum); }) # define obstack_ptr_grow_fast(OBSTACK,aptr) \ __extension__ \ ({ struct obstack *__o1 = (OBSTACK); \ *(const void **) __o1->next_free = (aptr); \ __o1->next_free += sizeof (const void *); \ (void) 0; }) # define obstack_int_grow_fast(OBSTACK,aint) \ __extension__ \ ({ struct obstack *__o1 = (OBSTACK); \ *(int *) __o1->next_free = (aint); \ __o1->next_free += sizeof (int); \ (void) 0; }) # define obstack_blank(OBSTACK,length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ int __len = (length); \ if (__o->chunk_limit - __o->next_free < __len) \ _obstack_newchunk (__o, __len); \ obstack_blank_fast (__o, __len); \ (void) 0; }) # define obstack_alloc(OBSTACK,length) \ __extension__ \ ({ struct obstack *__h = (OBSTACK); \ obstack_blank (__h, (length)); \ obstack_finish (__h); }) # define obstack_copy(OBSTACK,where,length) \ __extension__ \ ({ struct obstack *__h = (OBSTACK); \ obstack_grow (__h, (where), (length)); \ obstack_finish (__h); }) # define obstack_copy0(OBSTACK,where,length) \ __extension__ \ ({ struct obstack *__h = (OBSTACK); \ obstack_grow0 (__h, (where), (length)); \ obstack_finish (__h); }) /* The local variable is named __o1 to avoid a name conflict when obstack_blank is called. */ # define obstack_finish(OBSTACK) \ __extension__ \ ({ struct obstack *__o1 = (OBSTACK); \ void *value; \ value = (void *) __o1->object_base; \ if (__o1->next_free == value) \ __o1->maybe_empty_object = 1; \ __o1->next_free \ = __INT_TO_PTR ((__PTR_TO_INT (__o1->next_free)+__o1->alignment_mask)\ & ~ (__o1->alignment_mask)); \ if (__o1->next_free - (char *)__o1->chunk \ > __o1->chunk_limit - (char *)__o1->chunk) \ __o1->next_free = __o1->chunk_limit; \ __o1->object_base = __o1->next_free; \ value; }) # define obstack_free(OBSTACK, OBJ) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ void *__obj = (void *) (OBJ); \ if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit) \ __o->next_free = __o->object_base = (char *) __obj; \ else (obstack_free) (__o, __obj); }) #else /* not __GNUC__ or not __STDC__ */ # define obstack_object_size(h) \ (unsigned) ((h)->next_free - (h)->object_base) # define obstack_room(h) \ (unsigned) ((h)->chunk_limit - (h)->next_free) # define obstack_empty_p(h) \ ((h)->chunk->prev == 0 && (h)->next_free - (h)->chunk->contents == 0) /* Note that the call to _obstack_newchunk is enclosed in (..., 0) so that we can avoid having void expressions in the arms of the conditional expression. Casting the third operand to void was tried before, but some compilers won't accept it. */ # define obstack_make_room(h,length) \ ( (h)->temp = (length), \ (((h)->next_free + (h)->temp > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), (h)->temp), 0) : 0)) # define obstack_grow(h,where,length) \ ( (h)->temp = (length), \ (((h)->next_free + (h)->temp > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \ _obstack_memcpy ((h)->next_free, (where), (h)->temp), \ (h)->next_free += (h)->temp) # define obstack_grow0(h,where,length) \ ( (h)->temp = (length), \ (((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0), \ _obstack_memcpy ((h)->next_free, (where), (h)->temp), \ (h)->next_free += (h)->temp, \ *((h)->next_free)++ = 0) # define obstack_1grow(h,datum) \ ( (((h)->next_free + 1 > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), 1), 0) : 0), \ obstack_1grow_fast (h, datum)) # define obstack_ptr_grow(h,datum) \ ( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \ obstack_ptr_grow_fast (h, datum)) # define obstack_int_grow(h,datum) \ ( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \ obstack_int_grow_fast (h, datum)) # define obstack_ptr_grow_fast(h,aptr) \ (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr)) # define obstack_int_grow_fast(h,aint) \ (((int *) ((h)->next_free += sizeof (int)))[-1] = (aptr)) # define obstack_blank(h,length) \ ( (h)->temp = (length), \ (((h)->chunk_limit - (h)->next_free < (h)->temp) \ ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \ obstack_blank_fast (h, (h)->temp)) # define obstack_alloc(h,length) \ (obstack_blank ((h), (length)), obstack_finish ((h))) # define obstack_copy(h,where,length) \ (obstack_grow ((h), (where), (length)), obstack_finish ((h))) # define obstack_copy0(h,where,length) \ (obstack_grow0 ((h), (where), (length)), obstack_finish ((h))) # define obstack_finish(h) \ ( ((h)->next_free == (h)->object_base \ ? (((h)->maybe_empty_object = 1), 0) \ : 0), \ (h)->temp = __PTR_TO_INT ((h)->object_base), \ (h)->next_free \ = __INT_TO_PTR ((__PTR_TO_INT ((h)->next_free)+(h)->alignment_mask) \ & ~ ((h)->alignment_mask)), \ (((h)->next_free - (char *) (h)->chunk \ > (h)->chunk_limit - (char *) (h)->chunk) \ ? ((h)->next_free = (h)->chunk_limit) : 0), \ (h)->object_base = (h)->next_free, \ __INT_TO_PTR ((h)->temp)) # define obstack_free(h,obj) \ ( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \ (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\ ? (int) ((h)->next_free = (h)->object_base \ = (h)->temp + (char *) (h)->chunk) \ : (((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0), 0))) #endif /* not __GNUC__ or not __STDC__ */ #ifdef __cplusplus } /* C++ */ #endif #endif /* obstack.h */ nescc-1.3.4/include/partition.h000066400000000000000000000054171177770303300164360ustar00rootroot00000000000000/* List implementation of a partition of consecutive integers. Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by CodeSourcery, LLC. This file is part of GCC. GCC 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. GCC 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 GCC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* This package implements a partition of consecutive integers. The elements are partitioned into classes. Each class is represented by one of its elements, the canonical element, which is chosen arbitrarily from elements in the class. The principal operations on a partition are FIND, which takes an element, determines its class, and returns the canonical element for that class, and UNION, which unites the two classes that contain two given elements into a single class. The list implementation used here provides constant-time finds. By storing the size of each class with the class's canonical element, it is able to perform unions over all the classes in the partition in O (N log N) time. */ #ifndef _PARTITION_H #define _PARTITION_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "ansidecl.h" #include struct partition_elem { /* The canonical element that represents the class containing this element. */ int class_element; /* The next element in this class. Elements in each class form a circular list. */ struct partition_elem* next; /* The number of elements in this class. Valid only if this is the canonical element for its class. */ unsigned class_count; }; typedef struct partition_def { /* The number of elements in this partition. */ int num_elements; /* The elements in the partition. */ struct partition_elem elements[1]; } *partition; extern partition partition_new (int); extern void partition_delete (partition); extern int partition_union (partition, int, int); extern void partition_print (partition, FILE*); /* Returns the canonical element corresponding to the class containing ELEMENT__ in PARTITION__. */ #define partition_find(partition__, element__) \ ((partition__)->elements[(element__)].class_element) #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _PARTITION_H */ nescc-1.3.4/include/safe-ctype.h000066400000000000000000000104451177770303300164620ustar00rootroot00000000000000/* replacement macros. Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Zack Weinberg . This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* This is a compatible replacement of the standard C library's with the following properties: - Implements all isxxx() macros required by C99. - Also implements some character classes useful when parsing C-like languages. - Does not change behavior depending on the current locale. - Behaves properly for all values in the range of a signed or unsigned char. To avoid conflicts, this header defines the isxxx functions in upper case, e.g. ISALPHA not isalpha. */ #ifndef SAFE_CTYPE_H #define SAFE_CTYPE_H #ifdef isalpha #error "safe-ctype.h and ctype.h may not be used simultaneously" #endif /* Determine host character set. */ #define HOST_CHARSET_UNKNOWN 0 #define HOST_CHARSET_ASCII 1 #define HOST_CHARSET_EBCDIC 2 #if '\n' == 0x0A && ' ' == 0x20 && '0' == 0x30 \ && 'A' == 0x41 && 'a' == 0x61 && '!' == 0x21 # define HOST_CHARSET HOST_CHARSET_ASCII #else # if '\n' == 0x15 && ' ' == 0x40 && '0' == 0xF0 \ && 'A' == 0xC1 && 'a' == 0x81 && '!' == 0x5A # define HOST_CHARSET HOST_CHARSET_EBCDIC # else # define HOST_CHARSET HOST_CHARSET_UNKNOWN # endif #endif /* Categories. */ enum { /* In C99 */ _sch_isblank = 0x0001, /* space \t */ _sch_iscntrl = 0x0002, /* nonprinting characters */ _sch_isdigit = 0x0004, /* 0-9 */ _sch_islower = 0x0008, /* a-z */ _sch_isprint = 0x0010, /* any printing character including ' ' */ _sch_ispunct = 0x0020, /* all punctuation */ _sch_isspace = 0x0040, /* space \t \n \r \f \v */ _sch_isupper = 0x0080, /* A-Z */ _sch_isxdigit = 0x0100, /* 0-9A-Fa-f */ /* Extra categories useful to cpplib. */ _sch_isidst = 0x0200, /* A-Za-z_ */ _sch_isvsp = 0x0400, /* \n \r */ _sch_isnvsp = 0x0800, /* space \t \f \v \0 */ /* Combinations of the above. */ _sch_isalpha = _sch_isupper|_sch_islower, /* A-Za-z */ _sch_isalnum = _sch_isalpha|_sch_isdigit, /* A-Za-z0-9 */ _sch_isidnum = _sch_isidst|_sch_isdigit, /* A-Za-z0-9_ */ _sch_isgraph = _sch_isalnum|_sch_ispunct, /* isprint and not space */ _sch_iscppsp = _sch_isvsp|_sch_isnvsp, /* isspace + \0 */ _sch_isbasic = _sch_isprint|_sch_iscppsp /* basic charset of ISO C (plus ` and @) */ }; /* Character classification. */ extern const unsigned short _sch_istable[256]; #define _sch_test(c, bit) (_sch_istable[(c) & 0xff] & (unsigned short)(bit)) #define ISALPHA(c) _sch_test(c, _sch_isalpha) #define ISALNUM(c) _sch_test(c, _sch_isalnum) #define ISBLANK(c) _sch_test(c, _sch_isblank) #define ISCNTRL(c) _sch_test(c, _sch_iscntrl) #define ISDIGIT(c) _sch_test(c, _sch_isdigit) #define ISGRAPH(c) _sch_test(c, _sch_isgraph) #define ISLOWER(c) _sch_test(c, _sch_islower) #define ISPRINT(c) _sch_test(c, _sch_isprint) #define ISPUNCT(c) _sch_test(c, _sch_ispunct) #define ISSPACE(c) _sch_test(c, _sch_isspace) #define ISUPPER(c) _sch_test(c, _sch_isupper) #define ISXDIGIT(c) _sch_test(c, _sch_isxdigit) #define ISIDNUM(c) _sch_test(c, _sch_isidnum) #define ISIDST(c) _sch_test(c, _sch_isidst) #define IS_ISOBASIC(c) _sch_test(c, _sch_isbasic) #define IS_VSPACE(c) _sch_test(c, _sch_isvsp) #define IS_NVSPACE(c) _sch_test(c, _sch_isnvsp) #define IS_SPACE_OR_NUL(c) _sch_test(c, _sch_iscppsp) /* Character transformation. */ extern const unsigned char _sch_toupper[256]; extern const unsigned char _sch_tolower[256]; #define TOUPPER(c) _sch_toupper[(c) & 0xff] #define TOLOWER(c) _sch_tolower[(c) & 0xff] #endif /* SAFE_CTYPE_H */ nescc-1.3.4/include/sort.h000066400000000000000000000022721177770303300154100ustar00rootroot00000000000000/* Sorting algorithms. Copyright (C) 2000, 2002 Free Software Foundation, Inc. Contributed by Mark Mitchell . This file is part of GCC. GCC 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. GCC 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 GCC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef SORT_H #define SORT_H #include /* For size_t */ #ifdef __STDC__ #include #endif /* __STDC__ */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "ansidecl.h" /* Sort an array of pointers. */ extern void sort_pointers (size_t, void **, void **); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* SORT_H */ nescc-1.3.4/include/splay-tree.h000066400000000000000000000124421177770303300165060ustar00rootroot00000000000000/* A splay-tree datatype. Copyright 1998, 1999, 2000, 2002, 2007 Free Software Foundation, Inc. Contributed by Mark Mitchell (mark@markmitchell.com). This file is part of GCC. GCC 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. GCC 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 GCC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* For an easily readable description of splay-trees, see: Lewis, Harry R. and Denenberg, Larry. Data Structures and Their Algorithms. Harper-Collins, Inc. 1991. The major feature of splay trees is that all basic tree operations are amortized O(log n) time for a tree with n nodes. */ #ifndef _SPLAY_TREE_H #define _SPLAY_TREE_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "ansidecl.h" #ifndef _WIN64 typedef unsigned long int libi_uhostptr_t; typedef long int libi_shostptr_t; #else typedef unsigned long long libi_uhostptr_t; typedef long long libi_shostptr_t; #endif #ifndef GTY #define GTY(X) #endif /* Use typedefs for the key and data types to facilitate changing these types, if necessary. These types should be sufficiently wide that any pointer or scalar can be cast to these types, and then cast back, without loss of precision. */ typedef libi_uhostptr_t splay_tree_key; typedef libi_uhostptr_t splay_tree_value; /* Forward declaration for a node in the tree. */ typedef struct splay_tree_node_s *splay_tree_node; /* The type of a function which compares two splay-tree keys. The function should return values as for qsort. */ typedef int (*splay_tree_compare_fn) (splay_tree_key, splay_tree_key); /* The type of a function used to deallocate any resources associated with the key. */ typedef void (*splay_tree_delete_key_fn) (splay_tree_key); /* The type of a function used to deallocate any resources associated with the value. */ typedef void (*splay_tree_delete_value_fn) (splay_tree_value); /* The type of a function used to iterate over the tree. */ typedef int (*splay_tree_foreach_fn) (splay_tree_node, void*); /* The type of a function used to allocate memory for tree root and node structures. The first argument is the number of bytes needed; the second is a data pointer the splay tree functions pass through to the allocator. This function must never return zero. */ typedef void *(*splay_tree_allocate_fn) (int, void *); /* The type of a function used to free memory allocated using the corresponding splay_tree_allocate_fn. The first argument is the memory to be freed; the latter is a data pointer the splay tree functions pass through to the freer. */ typedef void (*splay_tree_deallocate_fn) (void *, void *); /* The nodes in the splay tree. */ struct splay_tree_node_s GTY(()) { /* The key. */ splay_tree_key GTY ((use_param1)) key; /* The value. */ splay_tree_value GTY ((use_param2)) value; /* The left and right children, respectively. */ splay_tree_node GTY ((use_params)) left; splay_tree_node GTY ((use_params)) right; }; /* The splay tree itself. */ struct splay_tree_s GTY(()) { /* The root of the tree. */ splay_tree_node GTY ((use_params)) root; /* The comparision function. */ splay_tree_compare_fn comp; /* The deallocate-key function. NULL if no cleanup is necessary. */ splay_tree_delete_key_fn delete_key; /* The deallocate-value function. NULL if no cleanup is necessary. */ splay_tree_delete_value_fn delete_value; /* Allocate/free functions, and a data pointer to pass to them. */ splay_tree_allocate_fn allocate; splay_tree_deallocate_fn deallocate; void * GTY((skip)) allocate_data; }; typedef struct splay_tree_s *splay_tree; extern splay_tree splay_tree_new (splay_tree_compare_fn, splay_tree_delete_key_fn, splay_tree_delete_value_fn); extern splay_tree splay_tree_new_with_allocator (splay_tree_compare_fn, splay_tree_delete_key_fn, splay_tree_delete_value_fn, splay_tree_allocate_fn, splay_tree_deallocate_fn, void *); extern void splay_tree_delete (splay_tree); extern splay_tree_node splay_tree_insert (splay_tree, splay_tree_key, splay_tree_value); extern void splay_tree_remove (splay_tree, splay_tree_key); extern splay_tree_node splay_tree_lookup (splay_tree, splay_tree_key); extern splay_tree_node splay_tree_predecessor (splay_tree, splay_tree_key); extern splay_tree_node splay_tree_successor (splay_tree, splay_tree_key); extern splay_tree_node splay_tree_max (splay_tree); extern splay_tree_node splay_tree_min (splay_tree); extern int splay_tree_foreach (splay_tree, splay_tree_foreach_fn, void*); extern int splay_tree_compare_ints (splay_tree_key, splay_tree_key); extern int splay_tree_compare_pointers (splay_tree_key, splay_tree_key); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _SPLAY_TREE_H */ nescc-1.3.4/include/symcat.h000066400000000000000000000035561177770303300157270ustar00rootroot00000000000000/* Symbol concatenation utilities. Copyright (C) 1998, 2000 Free Software Foundation, Inc. This program 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 of the License, or (at your option) any later version. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef SYM_CAT_H #define SYM_CAT_H #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE) #define CONCAT2(a,b) a##b #define CONCAT3(a,b,c) a##b##c #define CONCAT4(a,b,c,d) a##b##c##d #define STRINGX(s) #s #else /* Note one should never pass extra whitespace to the CONCATn macros, e.g. CONCAT2(foo, bar) because traditonal C will keep the space between the two labels instead of concatenating them. Instead, make sure to write CONCAT2(foo,bar). */ #define CONCAT2(a,b) a/**/b #define CONCAT3(a,b,c) a/**/b/**/c #define CONCAT4(a,b,c,d) a/**/b/**/c/**/d #define STRINGX(s) "s" #endif #define XCONCAT2(a,b) CONCAT2(a,b) #define XCONCAT3(a,b,c) CONCAT3(a,b,c) #define XCONCAT4(a,b,c,d) CONCAT4(a,b,c,d) /* Note the layer of indirection here is typically used to allow stringification of the expansion of macros. I.e. "#define foo bar", "XSTRING(foo)", to yield "bar". Be aware that this only works for __STDC__, not for traditional C which will still resolve to "foo". */ #define XSTRING(s) STRINGX(s) #endif /* SYM_CAT_H */ nescc-1.3.4/include/xregex.h000066400000000000000000000014171177770303300157230ustar00rootroot00000000000000/* This file redefines all regex external names before including a renamed copy of glibc's regex.h. */ #ifndef _XREGEX_H #define _XREGEX_H 1 # define regfree xregfree # define regexec xregexec # define regcomp xregcomp # define regerror xregerror # define re_set_registers xre_set_registers # define re_match_2 xre_match_2 # define re_match xre_match # define re_search xre_search # define re_compile_pattern xre_compile_pattern # define re_set_syntax xre_set_syntax # define re_search_2 xre_search_2 # define re_compile_fastmap xre_compile_fastmap # define re_syntax_options xre_syntax_options # define re_max_failures xre_max_failures # define _REGEX_RE_COMP # define re_comp xre_comp # define re_exec xre_exec #include "xregex2.h" #endif /* xregex.h */ nescc-1.3.4/include/xregex2.h000066400000000000000000000523031177770303300160050ustar00rootroot00000000000000/* Definitions for data structures and routines for the regular expression library, version 0.12. Copyright (C) 1985, 1989, 1990, 1991, 1992, 1993, 1995, 1996, 1997, 1998, 2000, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Its master source is NOT part of the C library, however. The master source lives in /gd/gnu/lib. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _REGEX_H #define _REGEX_H 1 /* Allow the use in C++ code. */ #ifdef __cplusplus extern "C" { #endif /* POSIX says that must be included (by the caller) before . */ #if !defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE && defined VMS /* VMS doesn't have `size_t' in , even though POSIX says it should be there. */ # include #endif /* The following two types have to be signed and unsigned integer type wide enough to hold a value of a pointer. For most ANSI compilers ptrdiff_t and size_t should be likely OK. Still size of these two types is 2 for Microsoft C. Ugh... */ typedef long int s_reg_t; typedef unsigned long int active_reg_t; /* The following bits are used to determine the regexp syntax we recognize. The set/not-set meanings are chosen so that Emacs syntax remains the value 0. The bits are given in alphabetical order, and the definitions shifted by one from the previous bit; thus, when we add or remove a bit, only one other definition need change. */ typedef unsigned long int reg_syntax_t; /* If this bit is not set, then \ inside a bracket expression is literal. If set, then such a \ quotes the following character. */ #define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) /* If this bit is not set, then + and ? are operators, and \+ and \? are literals. If set, then \+ and \? are operators and + and ? are literals. */ #define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) /* If this bit is set, then character classes are supported. They are: [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. If not set, then character classes are not supported. */ #define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) /* If this bit is set, then ^ and $ are always anchors (outside bracket expressions, of course). If this bit is not set, then it depends: ^ is an anchor if it is at the beginning of a regular expression or after an open-group or an alternation operator; $ is an anchor if it is at the end of a regular expression, or before a close-group or an alternation operator. This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because POSIX draft 11.2 says that * etc. in leading positions is undefined. We already implemented a previous draft which made those constructs invalid, though, so we haven't changed the code back. */ #define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) /* If this bit is set, then special characters are always special regardless of where they are in the pattern. If this bit is not set, then special characters are special only in some contexts; otherwise they are ordinary. Specifically, * + ? and intervals are only special when not after the beginning, open-group, or alternation operator. */ #define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) /* If this bit is set, then *, +, ?, and { cannot be first in an re or immediately after an alternation or begin-group operator. */ #define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) /* If this bit is set, then . matches newline. If not set, then it doesn't. */ #define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) /* If this bit is set, then . doesn't match NUL. If not set, then it does. */ #define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) /* If this bit is set, nonmatching lists [^...] do not match newline. If not set, they do. */ #define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) /* If this bit is set, either \{...\} or {...} defines an interval, depending on RE_NO_BK_BRACES. If not set, \{, \}, {, and } are literals. */ #define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) /* If this bit is set, +, ? and | aren't recognized as operators. If not set, they are. */ #define RE_LIMITED_OPS (RE_INTERVALS << 1) /* If this bit is set, newline is an alternation operator. If not set, newline is literal. */ #define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) /* If this bit is set, then `{...}' defines an interval, and \{ and \} are literals. If not set, then `\{...\}' defines an interval. */ #define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) /* If this bit is set, (...) defines a group, and \( and \) are literals. If not set, \(...\) defines a group, and ( and ) are literals. */ #define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) /* If this bit is set, then \ matches . If not set, then \ is a back-reference. */ #define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) /* If this bit is set, then | is an alternation operator, and \| is literal. If not set, then \| is an alternation operator, and | is literal. */ #define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) /* If this bit is set, then an ending range point collating higher than the starting range point, as in [z-a], is invalid. If not set, then when ending range point collates higher than the starting range point, the range is ignored. */ #define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) /* If this bit is set, then an unmatched ) is ordinary. If not set, then an unmatched ) is invalid. */ #define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) /* If this bit is set, succeed as soon as we match the whole pattern, without further backtracking. */ #define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1) /* If this bit is set, do not process the GNU regex operators. If not set, then the GNU regex operators are recognized. */ #define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1) /* If this bit is set, turn on internal regex debugging. If not set, and debugging was on, turn it off. This only works if regex.c is compiled -DDEBUG. We define this bit always, so that all that's needed to turn on debugging is to recompile regex.c; the calling code can always have this bit set, and it won't affect anything in the normal case. */ #define RE_DEBUG (RE_NO_GNU_OPS << 1) /* If this bit is set, a syntactically invalid interval is treated as a string of ordinary characters. For example, the ERE 'a{1' is treated as 'a\{1'. */ #define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1) /* This global variable defines the particular regexp syntax to use (for some interfaces). When a regexp is compiled, the syntax used is stored in the pattern buffer, so changing this does not affect already-compiled regexps. */ extern reg_syntax_t re_syntax_options; /* Define combinations of the above bits for the standard possibilities. (The [[[ comments delimit what gets put into the Texinfo file, so don't delete them!) */ /* [[[begin syntaxes]]] */ #define RE_SYNTAX_EMACS 0 #define RE_SYNTAX_AWK \ (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \ | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) #define RE_SYNTAX_GNU_AWK \ ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG) \ & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS)) #define RE_SYNTAX_POSIX_AWK \ (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ | RE_INTERVALS | RE_NO_GNU_OPS) #define RE_SYNTAX_GREP \ (RE_BK_PLUS_QM | RE_CHAR_CLASSES \ | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \ | RE_NEWLINE_ALT) #define RE_SYNTAX_EGREP \ (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \ | RE_NEWLINE_ALT | RE_NO_BK_PARENS \ | RE_NO_BK_VBAR) #define RE_SYNTAX_POSIX_EGREP \ (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES \ | RE_INVALID_INTERVAL_ORD) /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ #define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC #define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC /* Syntax bits common to both basic and extended POSIX regex syntax. */ #define _RE_SYNTAX_POSIX_COMMON \ (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ | RE_INTERVALS | RE_NO_EMPTY_RANGES) #define RE_SYNTAX_POSIX_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM) /* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this isn't minimal, since other operators, such as \`, aren't disabled. */ #define RE_SYNTAX_POSIX_MINIMAL_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) #define RE_SYNTAX_POSIX_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD) /* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is removed and RE_NO_BK_REFS is added. */ #define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) /* [[[end syntaxes]]] */ /* Maximum number of duplicates an interval can allow. Some systems (erroneously) define this in other header files, but we want our value, so remove any previous define. */ #ifdef RE_DUP_MAX # undef RE_DUP_MAX #endif /* If sizeof(int) == 2, then ((1 << 15) - 1) overflows. */ #define RE_DUP_MAX (0x7fff) /* POSIX `cflags' bits (i.e., information for `regcomp'). */ /* If this bit is set, then use extended regular expression syntax. If not set, then use basic regular expression syntax. */ #define REG_EXTENDED 1 /* If this bit is set, then ignore case when matching. If not set, then case is significant. */ #define REG_ICASE (REG_EXTENDED << 1) /* If this bit is set, then anchors do not match at newline characters in the string. If not set, then anchors do match at newlines. */ #define REG_NEWLINE (REG_ICASE << 1) /* If this bit is set, then report only success or fail in regexec. If not set, then returns differ between not matching and errors. */ #define REG_NOSUB (REG_NEWLINE << 1) /* POSIX `eflags' bits (i.e., information for regexec). */ /* If this bit is set, then the beginning-of-line operator doesn't match the beginning of the string (presumably because it's not the beginning of a line). If not set, then the beginning-of-line operator does match the beginning of the string. */ #define REG_NOTBOL 1 /* Like REG_NOTBOL, except for the end-of-line. */ #define REG_NOTEOL (1 << 1) /* If any error codes are removed, changed, or added, update the `re_error_msg' table in regex.c. */ typedef enum { #ifdef _XOPEN_SOURCE REG_ENOSYS = -1, /* This will never happen for this implementation. */ #endif REG_NOERROR = 0, /* Success. */ REG_NOMATCH, /* Didn't find a match (for regexec). */ /* POSIX regcomp return error codes. (In the order listed in the standard.) */ REG_BADPAT, /* Invalid pattern. */ REG_ECOLLATE, /* Not implemented. */ REG_ECTYPE, /* Invalid character class name. */ REG_EESCAPE, /* Trailing backslash. */ REG_ESUBREG, /* Invalid back reference. */ REG_EBRACK, /* Unmatched left bracket. */ REG_EPAREN, /* Parenthesis imbalance. */ REG_EBRACE, /* Unmatched \{. */ REG_BADBR, /* Invalid contents of \{\}. */ REG_ERANGE, /* Invalid range end. */ REG_ESPACE, /* Ran out of memory. */ REG_BADRPT, /* No preceding re for repetition op. */ /* Error codes we've added. */ REG_EEND, /* Premature end. */ REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */ REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ } reg_errcode_t; /* This data structure represents a compiled pattern. Before calling the pattern compiler, the fields `buffer', `allocated', `fastmap', `translate', and `no_sub' can be set. After the pattern has been compiled, the `re_nsub' field is available. All other fields are private to the regex routines. */ #ifndef RE_TRANSLATE_TYPE # define RE_TRANSLATE_TYPE char * #endif struct re_pattern_buffer { /* [[[begin pattern_buffer]]] */ /* Space that holds the compiled pattern. It is declared as `unsigned char *' because its elements are sometimes used as array indexes. */ unsigned char *buffer; /* Number of bytes to which `buffer' points. */ unsigned long int allocated; /* Number of bytes actually used in `buffer'. */ unsigned long int used; /* Syntax setting with which the pattern was compiled. */ reg_syntax_t syntax; /* Pointer to a fastmap, if any, otherwise zero. re_search uses the fastmap, if there is one, to skip over impossible starting points for matches. */ char *fastmap; /* Either a translate table to apply to all characters before comparing them, or zero for no translation. The translation is applied to a pattern when it is compiled and to a string when it is matched. */ RE_TRANSLATE_TYPE translate; /* Number of subexpressions found by the compiler. */ size_t re_nsub; /* Zero if this pattern cannot match the empty string, one else. Well, in truth it's used only in `re_search_2', to see whether or not we should use the fastmap, so we don't set this absolutely perfectly; see `re_compile_fastmap' (the `duplicate' case). */ unsigned can_be_null : 1; /* If REGS_UNALLOCATED, allocate space in the `regs' structure for `max (RE_NREGS, re_nsub + 1)' groups. If REGS_REALLOCATE, reallocate space if necessary. If REGS_FIXED, use what's there. */ #define REGS_UNALLOCATED 0 #define REGS_REALLOCATE 1 #define REGS_FIXED 2 unsigned regs_allocated : 2; /* Set to zero when `regex_compile' compiles a pattern; set to one by `re_compile_fastmap' if it updates the fastmap. */ unsigned fastmap_accurate : 1; /* If set, `re_match_2' does not return information about subexpressions. */ unsigned no_sub : 1; /* If set, a beginning-of-line anchor doesn't match at the beginning of the string. */ unsigned not_bol : 1; /* Similarly for an end-of-line anchor. */ unsigned not_eol : 1; /* If true, an anchor at a newline matches. */ unsigned newline_anchor : 1; /* [[[end pattern_buffer]]] */ }; typedef struct re_pattern_buffer regex_t; /* Type for byte offsets within the string. POSIX mandates this. */ typedef int regoff_t; /* This is the structure we store register match data in. See regex.texinfo for a full description of what registers match. */ struct re_registers { unsigned num_regs; regoff_t *start; regoff_t *end; }; /* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer, `re_match_2' returns information about at least this many registers the first time a `regs' structure is passed. */ #ifndef RE_NREGS # define RE_NREGS 30 #endif /* POSIX specification for registers. Aside from the different names than `re_registers', POSIX uses an array of structures, instead of a structure of arrays. */ typedef struct { regoff_t rm_so; /* Byte offset from string's start to substring's start. */ regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ } regmatch_t; /* Declarations for routines. */ /* To avoid duplicating every routine declaration -- once with a prototype (if we are ANSI), and once without (if we aren't) -- we use the following macro to declare argument types. This unfortunately clutters up the declarations a bit, but I think it's worth it. */ /* Sets the current default syntax to SYNTAX, and return the old syntax. You can also simply assign to the `re_syntax_options' variable. */ extern reg_syntax_t re_set_syntax (reg_syntax_t syntax); /* Compile the regular expression PATTERN, with length LENGTH and syntax given by the global `re_syntax_options', into the buffer BUFFER. Return NULL if successful, and an error string if not. */ extern const char *re_compile_pattern (const char *pattern, size_t length, struct re_pattern_buffer *buffer); /* Compile a fastmap for the compiled pattern in BUFFER; used to accelerate searches. Return 0 if successful and -2 if was an internal error. */ extern int re_compile_fastmap (struct re_pattern_buffer *buffer); /* Search in the string STRING (with length LENGTH) for the pattern compiled into BUFFER. Start searching at position START, for RANGE characters. Return the starting position of the match, -1 for no match, or -2 for an internal error. Also return register information in REGS (if REGS and BUFFER->no_sub are nonzero). */ extern int re_search (struct re_pattern_buffer *buffer, const char *string, int length, int start, int range, struct re_registers *regs); /* Like `re_search', but search in the concatenation of STRING1 and STRING2. Also, stop searching at index START + STOP. */ extern int re_search_2 (struct re_pattern_buffer *buffer, const char *string1, int length1, const char *string2, int length2, int start, int range, struct re_registers *regs, int stop); /* Like `re_search', but return how many characters in STRING the regexp in BUFFER matched, starting at position START. */ extern int re_match (struct re_pattern_buffer *buffer, const char *string, int length, int start, struct re_registers *regs); /* Relates to `re_match' as `re_search_2' relates to `re_search'. */ extern int re_match_2 (struct re_pattern_buffer *buffer, const char *string1, int length1, const char *string2, int length2, int start, struct re_registers *regs, int stop); /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated with malloc, and must each be at least `NUM_REGS * sizeof (regoff_t)' bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using PATTERN_BUFFER will allocate its own register data, without freeing the old data. */ extern void re_set_registers (struct re_pattern_buffer *buffer, struct re_registers *regs, unsigned num_regs, regoff_t *starts, regoff_t *ends); #if defined _REGEX_RE_COMP || defined _LIBC # ifndef _CRAY /* 4.2 bsd compatibility. */ extern char *re_comp (const char *); extern int re_exec (const char *); # endif #endif /* GCC 2.95 and later have "__restrict"; C99 compilers have "restrict", and "configure" may have defined "restrict". */ #ifndef __restrict # if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)) # if defined restrict || 199901L <= __STDC_VERSION__ # define __restrict restrict # else # define __restrict # endif # endif #endif /* GCC 3.1 and later support declaring arrays as non-overlapping using the syntax array_name[restrict] */ #ifndef __restrict_arr # if ! (3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) || defined (__GNUG__) # define __restrict_arr # else # define __restrict_arr __restrict # endif #endif /* POSIX compatibility. */ extern int regcomp (regex_t *__restrict __preg, const char *__restrict __pattern, int __cflags); #if (__GNUC__) __extension__ #endif extern int regexec (const regex_t *__restrict __preg, const char *__restrict __string, size_t __nmatch, regmatch_t __pmatch[__restrict_arr], int __eflags); extern size_t regerror (int __errcode, const regex_t *__preg, char *__errbuf, size_t __errbuf_size); extern void regfree (regex_t *__preg); #ifdef __cplusplus } #endif /* C++ */ #endif /* regex.h */ /* Local variables: make-backup-files: t version-control: t trim-versions-without-asking: nil End: */ nescc-1.3.4/include/xtensa-config.h000066400000000000000000000073511177770303300171710ustar00rootroot00000000000000/* Xtensa configuration settings. Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica. This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef XTENSA_CONFIG_H #define XTENSA_CONFIG_H /* The macros defined here match those with the same names in the Xtensa compile-time HAL (Hardware Abstraction Layer). Please refer to the Xtensa System Software Reference Manual for documentation of these macros. */ #undef XCHAL_HAVE_BE #define XCHAL_HAVE_BE 1 #undef XCHAL_HAVE_DENSITY #define XCHAL_HAVE_DENSITY 1 #undef XCHAL_HAVE_CONST16 #define XCHAL_HAVE_CONST16 0 #undef XCHAL_HAVE_ABS #define XCHAL_HAVE_ABS 1 #undef XCHAL_HAVE_ADDX #define XCHAL_HAVE_ADDX 1 #undef XCHAL_HAVE_L32R #define XCHAL_HAVE_L32R 1 #undef XSHAL_USE_ABSOLUTE_LITERALS #define XSHAL_USE_ABSOLUTE_LITERALS 0 #undef XCHAL_HAVE_MAC16 #define XCHAL_HAVE_MAC16 0 #undef XCHAL_HAVE_MUL16 #define XCHAL_HAVE_MUL16 0 #undef XCHAL_HAVE_MUL32 #define XCHAL_HAVE_MUL32 0 #undef XCHAL_HAVE_MUL32_HIGH #define XCHAL_HAVE_MUL32_HIGH 0 #undef XCHAL_HAVE_DIV32 #define XCHAL_HAVE_DIV32 0 #undef XCHAL_HAVE_NSA #define XCHAL_HAVE_NSA 1 #undef XCHAL_HAVE_MINMAX #define XCHAL_HAVE_MINMAX 0 #undef XCHAL_HAVE_SEXT #define XCHAL_HAVE_SEXT 0 #undef XCHAL_HAVE_LOOPS #define XCHAL_HAVE_LOOPS 1 #undef XCHAL_HAVE_THREADPTR #define XCHAL_HAVE_THREADPTR 1 #undef XCHAL_HAVE_RELEASE_SYNC #define XCHAL_HAVE_RELEASE_SYNC 0 #undef XCHAL_HAVE_S32C1I #define XCHAL_HAVE_S32C1I 0 #undef XCHAL_HAVE_BOOLEANS #define XCHAL_HAVE_BOOLEANS 0 #undef XCHAL_HAVE_FP #define XCHAL_HAVE_FP 0 #undef XCHAL_HAVE_FP_DIV #define XCHAL_HAVE_FP_DIV 0 #undef XCHAL_HAVE_FP_RECIP #define XCHAL_HAVE_FP_RECIP 0 #undef XCHAL_HAVE_FP_SQRT #define XCHAL_HAVE_FP_SQRT 0 #undef XCHAL_HAVE_FP_RSQRT #define XCHAL_HAVE_FP_RSQRT 0 #undef XCHAL_HAVE_WINDOWED #define XCHAL_HAVE_WINDOWED 1 #undef XCHAL_HAVE_WIDE_BRANCHES #define XCHAL_HAVE_WIDE_BRANCHES 0 #undef XCHAL_HAVE_PREDICTED_BRANCHES #define XCHAL_HAVE_PREDICTED_BRANCHES 0 #undef XCHAL_ICACHE_SIZE #define XCHAL_ICACHE_SIZE 8192 #undef XCHAL_DCACHE_SIZE #define XCHAL_DCACHE_SIZE 8192 #undef XCHAL_ICACHE_LINESIZE #define XCHAL_ICACHE_LINESIZE 16 #undef XCHAL_DCACHE_LINESIZE #define XCHAL_DCACHE_LINESIZE 16 #undef XCHAL_ICACHE_LINEWIDTH #define XCHAL_ICACHE_LINEWIDTH 4 #undef XCHAL_DCACHE_LINEWIDTH #define XCHAL_DCACHE_LINEWIDTH 4 #undef XCHAL_DCACHE_IS_WRITEBACK #define XCHAL_DCACHE_IS_WRITEBACK 0 #undef XCHAL_HAVE_MMU #define XCHAL_HAVE_MMU 1 #undef XCHAL_MMU_MIN_PTE_PAGE_SIZE #define XCHAL_MMU_MIN_PTE_PAGE_SIZE 12 #undef XCHAL_HAVE_DEBUG #define XCHAL_HAVE_DEBUG 1 #undef XCHAL_NUM_IBREAK #define XCHAL_NUM_IBREAK 2 #undef XCHAL_NUM_DBREAK #define XCHAL_NUM_DBREAK 2 #undef XCHAL_DEBUGLEVEL #define XCHAL_DEBUGLEVEL 4 #undef XCHAL_INST_FETCH_WIDTH #define XCHAL_INST_FETCH_WIDTH 4 #undef XSHAL_ABI #undef XTHAL_ABI_WINDOWED #undef XTHAL_ABI_CALL0 #define XSHAL_ABI XTHAL_ABI_WINDOWED #define XTHAL_ABI_WINDOWED 0 #define XTHAL_ABI_CALL0 1 #endif /* !XTENSA_CONFIG_H */ nescc-1.3.4/libcpp/000077500000000000000000000000001177770303300140735ustar00rootroot00000000000000nescc-1.3.4/libcpp/ChangeLog000066400000000000000000001244471177770303300156610ustar00rootroot000000000000002008-01-07 Fred Fish PR preprocessor/30363: * traditional.c (replace_args_and_push): Add local variable cxtquote, calculate the replacement text size assuming a worst case of every input character quoted with backslash, and properly handle output quoting of quote characters in actual arguments used in function-like macros. 2008-01-03 Tom Tromey PR preprocessor/34602. * directives.c (do_line): Don't try to spell EOF token. (do_linemarker): Add comment. 2007-12-11 DJ Delorie * charset.c (convert_using_iconv): Close out any shift states, returning to the initial state. 2007-12-06 Tom Tromey PR c/29172: * internal.h (struct cpp_reader) : Changed type. : Removed. * files.c (FILE_HASH_POOL_SIZE): New macro. (struct file_hash_entry_pool): New. (destroy_all_cpp_files): New function. (allocate_file_hash_entries): Allocate a file_hash_entry_pool. (new_file_hash_entry): Update. (free_file_hash_entries): New function. (_cpp_cleanup_files): Call free_file_hash_entries and destroy_all_cpp_files. (cpp_clear_file_cache): New function. * include/cpplib.h (cpp_clear_file_cache): Declare. 2007-12-03 Tom Tromey PR preprocessor/34288: * configure.ac, config.in: Rebuilt. * configure.ac: Check for ssize_t. 2007-11-30 Tom Tromey PR preprocessor/32868: * macro.c (_cpp_create_definition): Special case __STDC_FORMAT_MACROS. 2007-11-16 Michael Matz * files.c (search_path_head): Fix check for absolute paths. 2007-11-11 Tom Tromey PR c++/17557: * include/cpplib.h (cpp_included_before): Declare. * files.c (struct file_hash_entry) : New field. (_cpp_find_file): Initialize new field. (make_cpp_dir): Likewise. (cpp_included_before): New function. 2007-11-01 Tom Tromey PR preprocessor/30805: * macro.c (paste_tokens): Handle padding token. (paste_tokens): Don't abort unless padding has PASTE_LEFT flag. 2007-10-31 Tom Tromey PR preprocessor/30786: * macro.c (builtin_macro): Return result of _cpp_do__Pragma. * directives.c (_cpp_do__Pragma): Return error status. * internal.h (_cpp_do__Pragma): Update. * directives.c (get__Pragma_string): Back up if EOF seen. 2007-09-06 Tom Tromey * internal.h (struct cpp_reader) : New field. (struct cpp_reader) : Likewise. * init.c (cpp_set_line_map): New function. * line-map.c (linemap_add): Use linemap's allocator. * include/line-map.h (GTY): Define. (line_map_realloc): New typedef. (struct line_map): Mark with GTY. (struct line_maps): Likewise. (struct line_maps) : Likewise. (struct line_maps) : New field. * include/symtab.h (GTY): Conditionally define. * include/cpplib.h (cpp_set_line_map): Declare. (cpp_get_token_with_location): Declare. * macro.c (cpp_get_token): Set invocation_location on the reader. (cpp_get_token_with_location): New function. 2007-08-30 Chao-ying Fu * expr.c (interpret_float_suffix): Support hr, r, lr, llr, uhr, ur, ulr, ullr, hk, k, lk, llk, uhk, uk, ulk, ullk. (cpp_classify_number): Support decimal fixed-point constants without exponents. Warn about fixed-point constants when -pedantic. * include/cpplib.h (CPP_N_SMALL, CPP_N_MEDIUM, CPP_N_LARGE): Change comments to support fixed-point values. (CPP_N_FRACT, CPP_N_ACCUM): Define. 2007-08-18 Tom Tromey PR preprocessor/32974: * directives.c (parse_include): Don't check for EOL when processing #pragma dependency. 2007-07-30 Ollie Wild * directives-only.c: New file. * internal.h (struct _cpp_dir_only_callbacks): New. (_cpp_preprocess_dir_only): New function. * directives.c (_cpp_handle_directive): Check directives_only before disabling execution of indented directives. * files.c (_cpp_stack_file): Add directives_only check. * include/cpplib.h (struct cpp_options): Add directives_only. (cpp_init_special_builtins): New function. * init.c (cpp_init_special_builtins): New function. (cpp_init_builtins): Move builtin_array initialization to cpp_init_special_builtins. (post_options): Check directives_only before setting pfile->state.prevent_expansion = 1. * macro.c (_cpp_builtin_macro_text): Print an error if __COUNTER__ is expanded inside a directive while -fdirectives-only is enabled. * Makefile.in (libcpp_a_OBJS): Add directives-only.o. (libcpp_a_SOURCES): Add directives-only.c. 2007-07-04 Uros Bizjak * traditional.c (_cpp_scan_out_logical_line): Initialize fmacro.args, fmacro.node, fmacro.offset, fmacro.line and fmacro.args to prevent 'may be used uninitialized' warning. 2007-07-03 Uros Bizjak * include/cpplib.h (CPP_N_WIDTH_MD, CPP_N_MD_W, CPP_N_MD_Q): Add new constants. * expr.c (interpret_float_suffix): Process 'w', 'W', 'q' and 'Q' suffixes. Return CPP_N_MD_W for 'w' or 'W' suffixes and CPP_N_MD_Q for 'q' or 'Q' suffixes. 2007-06-17 Danny Smith * files.c (open_file): Prevent the call for stat from overwriting errno. 2007-06-09 Vladimir Prus * files.c (open_file): Account for the fact that on windows, opening a directory gives EACCES. 2007-06-05 Joerg Wunsch PR preprocessor/23479 * expr.c (cpp_classify_number): Implement 0b-prefixed binary integer constants. (append_digit): Likewise. * include/cpplib.h: Add CPP_N_BINARY, to be used for 0b-prefixed binary integer constants. 2007-05-31 Dave Korn PR preprocessor/14331 * lex.c (_cpp_get_fresh_line): Don't warn if no newline at EOF. 2007-05-24 Ollie Wild * macro.c (_cpp_builtin_macro_text): Handle BT_COUNTER. * pch.c (cpp_write_pch_deps): Save __COUNTER__ state. (cpp_write_pch_state): Save __COUNTER__ state. (cpp_valid_state): Check valid __COUNTER__ state. (cpp_read_state): Read new __COUNTER__ state. * include/cpplib.h (enum builtin_type): Add BT_COUNTER enumerator. * init.c (builtin_array): Add __COUNTER__/BT_COUNTER. * internal.h (struct cpp_reader): Add counter member. 2007-05-23 Simon Martin PR preprocessor/20077 * macro.c (create_iso_definition): Fixed the method to determine whether the token-pasting operator appears at the beginning or the end of a macro. 2007-05-21 Ian Lance Taylor * internal.h (struct cpp_reader): Add new fields: nonexistent_file_hash and nonexistent_file_ob. * files.c: Include "obstack.h". (find_file_in_dir): Before trying to open the file, look up the path name in the hash table of nonexistent files. After failing to open the file, add the path name to the hash table. (_cpp_find_file): Cache the results of looking up the file name starting with the quote and bracket chain heads, if we can. (nonexistent_file_hash_eq): New static function. (_cpp_init_files): Initialize pfile->nonexistent_file_hash and pfile->nonexistent_file_ob. (_cpp_cleanup_files): Free pfile->nonexistent_file_hash and pfile->nonexistent_file_ob. 2007-05-14 Janis Johnson * expr.c (cpp_classify_number): Warn about dfp constant for -pedantic. PR c/31924 * expr.c (interpret_float_suffix): Check for invalid suffix. 2007-05-02 Eric Christopher * expr.c (num_div_op): Don't overflow if the result is zero. 2007-05-02 Tom Tromey PR preprocessor/28709: * macro.c (paste_tokens): Remove PASTE_LEFT from the old lhs. 2007-03-30 Michael Meissner * directives.c (lex_macro_node_from_str): Fix alloca call to be type correct. 2007-03-30 Richard Henderson * directives.c (lex_macro_node_from_str): New. (cpp_push_definition, cpp_pop_definition): New. * include/cpplib.h (cpp_push_definition, cpp_pop_definition): Declare. 2007-03-01 Brooks Moses * Makefile.in: Add dummy install-pdf target. 2007-01-30 Tom Tromey PR preprocessor/30468: * mkdeps.c (apply_vpath): Strip successive '/'s if we stripped './'. 2007-01-30 Tom Tromey PR preprocessor/29966: * macro.c (lex_expansion_token): Save and restore cpp_reader's cur_token. (_cpp_create_definition): Don't restore cur_token here. * lex.c (_cpp_lex_token): Added assertion. 2007-01-27 Tom Tromey * configure: Rebuilt. 2007-01-12 Tom Tromey PR preprocessor/28227: * directives.c (lex_macro_node): Added 'is_def_or_undef' argument. (do_define): Update. (do_undef): Update. (do_ifdef): Update. (do_ifndef): Update. 2007-01-11 Paolo Bonzini * configure: Regenerate. 2007-01-11 Paolo Bonzini * configure: Regenerate. 2007-01-04 Tom Tromey PR preprocessor/28165: * internal.h (cpp_in_primary_file): New function. * directives.c (do_include_next): Use cpp_in_primary_file. (do_pragma_once): Likewise. (do_pragma_system_header): Likewise. 2006-12-29 Ian Lance Taylor * lex.c (_cpp_clean_line): Add uses of __builtin_expect. Don't look backward at the end of the line unless we saw a backslash. 2006-12-29 Jakub Jelinek PR preprocessor/29612 * directives.c (do_linemarker): Set pfile->buffer->sysp always, not only when new_sysp is non-zero. 2006-12-28 Tom Tromey PR preprocessor/30001: * charset.c (_cpp_convert_input): Check that to.len is greater than zero. 2006-11-20 Trevor Smigiel * configure.ac (need_64bit_hwint): Need 64bit hwint for SPU. * configure: Rebuilt. 2006-11-01 Douglas Gregor * include/cpplib.h (enum c_lang): Add CLK_GNUCXX0X and CLK_CXX0X for experimental C++0x mode. * init.c (lang_defaults): Add defaults for C++0x modes. C++0x has adopted the preprocessor changes introduced in C99. 2006-10-29 Joseph Myers * configure.ac (need_64bit_hwint): Set for i[34567]86-*-linux* depending on --enable-targets=all. * configure: Regenerate. 2006-10-12 Jakub Jelinek PR preprocessor/28709 * macro.c (paste_tokens): Do error reporting here, use BUF with the spelled LHS token as opposed to spelling it again. (paste_all_tokens): Don't report errors here, just break on failure. 2006-10-10 Brooks Moses * Makefile.in: Added empty "pdf" target. 2006-09-22 Geoffrey Keating * configure.ac: Make need_64_bit_hwint case for x86-darwin match exactly the glob in gcc/config.gcc. * configure: Regenerate. 2006-09-13 Joseph S. Myers PR c/28768 PR preprocessor/14634 * lex.c (lex_string): Pedwarn for unterminated literals. 2006-09-08 Eric Christopher * configure.ac: Add 64-bit HWI support for i?86-darwin. 2006-08-14 Steve Ellcey PR c++/28288 PR c++/14556 * include/cpplib.h: Remove ?, ?= tokens. (CPP_LAST_EQ): Change. (CPP_LAST_PUNCTUATOR): Change. * expr.c (cpp_operator): Remove MIN and MAX. (reduce): Remove CPP_MIN and CPP_MAX. (num_binary_op): Ditto. * lex.c (_cpp_lex_direct): Ditto. (cpp_avoid_paste): Remove ? as legal symbol after > or <. 2006-06-09 Jakub Jelinek PR preprocessor/27746 * directives.c (do_pragma): Handle pragma with valid namespace and invalid name coming from macro expansion. * directives.c (destringize_and_run): Initialize next field in context. PR c/27747 PR c++/27748 * directives.c (destringize_and_run): Set NO_EXPAND on the tokens. * macro.c (_cpp_backup_tokens): Fix comment typo. 2006-05-31 Daniel Jacobowitz * Makefile.in (CATALOGS): Add po/ prefix. * configure: Regenerated. 2006-05-23 Carlos O'Donell * Makefile.in: Add install-html target. Add install-html to .PHONY 2006-02-17 Grigory Zagorodnev * macro.c (_cpp_builtin_macro_text): Handle BT_TIMESTAMP. * files.c (_cpp_get_file_stat): New function. * include/cpplib.h (builtin_type): Add BT_TIMESTAMP. * init.c (builtin_array): Add support for __TIMESTAMP__/BT_TIMESTAMP. * internal.h (_cpp_get_file_stat): Prototype. (struct cpp_buffer): Add timestamp. 2006-01-23 Jakub Jelinek PR preprocessor/25717 * init.c (cpp_init_builtins): If __STDC__ will not change value between system headers and other sources, define it as a normal macro rather than a builtin. * macro.c (_cpp_builtin_macro_text) : Only check cpp_in_system_header condition. 2006-01-05 Paolo Bonzini * Makefile.in: Use -MMD instead of -MD. 2006-01-04 Dmitry Kurochkin Richard Henderson Merge from gomp branch: * directives.c (struct pragma_entry): Add is_deferred. Add ident entry to value union. (end_directive): Don't eat the line if in_deferred_pragma. (run_directive): Remove pragma hacks. (insert_pragma_entry): Remove. (new_pragma_entry): New. (register_pragma_1): Split out of register_pragma. Only handle the lookup tree and return the new entry. (cpp_register_pragma): Fill in the pragma entry here. (cpp_register_deferred_pragma): New. (register_pragma_internal): New. (_cpp_init_internal_pragmas): Use register_pragma_internal. (do_pragma): Allow pragma expansion after namespace. For deferred pragmas, don't slurp the line into a string. (destringize_and_run): Save tokens for deferred pragmas. (cpp_handle_deferred_pragma): Remove. * macro.c (builtin_macro): Remove pragma token hack. (_cpp_push_token_context): Rename from push_token_context and export. * internal.h (struct lexer_state): Add pragma_allow_expansion. (_cpp_push_token_context): Declare. * lex.c (_cpp_lex_token): Allow _cpp_handle_directive to return a token. Update the line number correctly if so. (_cpp_lex_direct): Emit CPP_PRAGMA_EOL tokens. (cpp_token_val_index): Return CPP_TOKEN_FLD_PRAGMA for pragmas. * include/cpplib.h (PRAGMA_EOL): New. (CPP_TOKEN_FLD_PRAGMA): New. (struct cpp_token): Add val.pragma. (struct cpp_options): Remove defer_pragmas. (cpp_handle_deferred_pragma): Remove. (cpp_register_deferred_pragma): Declare. 2006-01-01 Jakub Jelinek PR c++/25294 * directives.c (do_pragma): If pragma line ends with multi-line block comment, end the saved deferred pragma string before that comment. Handle embedded '\0' chars on the pragma line. 2005-12-22 Volker Reichelt PR c++/23333 * include/cpplib.h: Add PURE_ZERO to flags for the cpp_token structure. 2005-12-07 Jon Grimm Ben Elliston * include/cpplib.h (CPP_N_DFLOAT): New. * expr.c (interpret_float_suffix): Identify df, dd, and dl suffixes as decimal floating point constants. (cpp_classify_number): Disallow hexadecimal DFP constants. 2005-11-14 Gerald Pfeifer Ian Lance Taylor * include/cpplib.h (struct cpp_callbacks): Annotate error with ATTRIBUTE_FPTR_PRINTF(3,0) instead of ATTRIBUTE_PRINTF(3,0). 2005-11-09 Per Bothner Uros Bizjak PR c/24101 * init.c (read_original_filename): Temporarily set state.in_directive before calling _cpp_lex_direct for CPP_HASH tokens. 2005-11-03 James E Wilson PR preprocessor/24202 * files.c (_cpp_pop_file_buffer): Set buffer_valid to false. 2005-11-04 Joseph S. Myers * include/cpplib.h (struct cpp_callbacks): Make error take va_list* parameter. * errors.c (cpp_error): Update call to callback. 2005-11-03 Andrew Pinski PR preprocessor/22042 * macro.c (_cpp_builtin_macro_text): Lower the needed max buffer size. (cpp_quote_string): Don't octalify non printable charactors. 2005-11-03 Joseph S. Myers PR c++/17964 * include/cpplib.h (struct cpp_options): Add client_diagnostic. (struct cpp_callbacks): Add error. * errors.c (cpp_error): If client_diagnostic, use error callback. * charset.c (convert_escape): Don't use %03o in diagnostic. 2005-10-21 James E Wilson PR preprocessor/15220 * files.c (_cpp_find_file): New parameter angle_brackets. Fix all callers. Pass to open_file_failed. (open_file_failed): New parameter angle_brackets. Fix all callers. Use in print_dep assignment. * init.c (cpp_read_main_file): Pass additional arg to _cpp_find_file. * internal.h (_cpp_find_file): Add new parm to declaration. 2005-10-08 Kazu Hirata * configure.ac: Require 64-bit int for arm*-*-*eabi*. * configure: Regenerate. 2005-10-04 Ian Lance Taylor PR preprocessor/13726 * directives.c (check_eol_return_comments): New static function. (parse_include): Add buf parameter. Change all callers. (do_include_common): If not discard comments, turn on save_comments. Pass collected comments to include callback. * include/cpplib.h (struct cpp_callbacks): Add new parameter to include callback: cpp_token list. 2005-09-20 Joseph S. Myers * include/cpplib.h (struct cpp_options): Add extended_identifiers. * init.c (struct lang_flags, lang_defaults): Add extended_identifiers. (cpp_set_lang): Use it. * lex.c (forms_identifier_p): Check extended_identifiers. 2005-08-30 Jakub Jelinek PR preprocessor/20348 PR preprocessor/20356 * files.c (_cpp_find_file, search_cache): Revert 2004-06-26 and 2004-06-05 changes. 2005-07-23 Kaveh R. Ghazi * configure.ac (ACX_PROG_CC_WARNING_OPTS): add -Wmissing-format-attribute. * configure: Regenerate. 2005-06-29 Kelley Cook * all files: Update FSF address in copyright headers. * makeucnid.c (write_copyright): Update outputted FSF address. 2005-06-13 Zack Weinberg * configure.ac: Invoke ZW_CREATE_DEPDIR and ZW_PROG_COMPILER_DEPENDENCIES. * aclocal.m4, configure: Regenerate. * Makefile.in (DEPMODE, DEPDIR, depcomp, COMPILE.base, COMPILE): New variables. (distclean): Clean up $(DEPDIR) and its contents. (.c.o): Use $(COMPILE). Include $(DEPDIR)/*.Po for most object->header dependencies. 2005-05-28 Gabriel Dos Reis * configure.ac: Check declarations for asprintf and vasprintf. * config.in: Regenerate. * configure: Likewise. * charset.c (conversion_loop): Use XRESIZEVEC. (convert_no_conversion): Likewise. (convert_using_iconv): Likewise. (init_iconv_desc): Cast return value of alloca. (cpp_host_to_exec_charset): Use XNEWVEC. (emit_numeric_escape): Use XRESIZEVEC. (cpp_interpret_string): Use XNEWVEC. (cpp_interpret_string): Use XRESIZEVEC. (_cpp_interpret_identifier): Cast return value of alloca. (_cpp_convert_input): Use XNEWVEC and XRESIZEVEC. * directives.c (glue_header_name): Use XNEWVEC and XRESIZEVEC. (parse_include): Use XNEWVEC. (insert_pragma_entry): Rename local variable "new" to "new_entry". (save_registered_pragmas): Cast return value of xmemdup. (destringize_and_run): Same for alloca. (parse_assertion): Likewise. (do_assert): Cast allocated storage to proper type. (cpp_define): Likewise. (_cpp_define_builtin): Likewise. (cpp_undef): Likewise. (handle_assertion): Likewise. (cpp_push_buffer): Rename local variable "new" to "new_buffer". * expr.c (CPP_UPLUS): Cast value to type cpp_ttype. (CPP_UMINUS): Likewise. (struct cpp_operator): Rename from struct operator. (_cpp_expand_op_stack): Use XRESIZEVEC. * files.c (pch_open_file): Use XNEWVEC. (pch_open_file): Use XRESIZEVEC. (read_file_guts): Use XNEWVEC and XRESIZEVEC. (dir_name_of_file): Use XNEWVEC. (make_cpp_file): Use XCNEW. (make_cpp_dir): Likewise. (allocate_file_hash_entries): USE XNEWVEC. (cpp_included): Cast return value of htab_find_with_hash. (append_file_to_dir): Use XNEWVEC. (read_filename_string): Likewise. Use XRESIZEVEC too. (read_name_map): Cast return value of alloca. Use XRESIZEVEC. (remap_filename): Use XNEWVEC. (struct pchf_entry): Move definition out of struct pchf_data. (_cpp_save_file_entries): Use XCNEWVAR. (_cpp_read_file_entries): Use XNEWVAR. * identifiers.c (alloc_node): Use XOBNEW. * init.c (cpp_create_reader): Use XCNEW. (cpp_init_builtins): Cast of b->value to enum builtin_type. (read_original_directory): Cast return value of alloca. * lex.c (add_line_note): Use XRESIZEVEC. (warn_about_normalization): Use XNEWVEC. (_cpp_lex_direct): Cast node->directive_index to (enum cpp_ttype). (new_buff): Use XNEWVEC. * line-map.c (linemap_add): Use XRESIZEVEC. * macro.c (builtin_macro): Cast return value of alloca. (paste_tokens): Likewise. (expand_arg): Use XNEWVEC and XRESIZEVEC. (_cpp_save_parameter): Use XRESIZEVEC. (create_iso_definition): Cast allocated storage to proper type. (_cpp_create_definition): Likewise. (cpp_macro_definition): Use XRESIZEVEC. * makedepend.c (add_clm): Use XNEW. (add_dir): Likewise. * mkdeps.c (munge): Use XNEWVEC. (deps_init): Use XCNEW. (deps_add_target): Use XRESIZEVEC. (deps_add_default_target): Cast return value of alloca. (deps_add_dep): Use XRESIZEVEC. (deps_add_vpath): Likewise. Use XNEWVEC too. (deps_restore): Likewise. * pch.c (save_idents): Use XNEW and XNEWVEC. (cpp_save_state): Use XNEW. (count_defs): Cast return value of htab_find. (write_defs): Likewise. (cpp_write_pch_deps): Use XNEWVEC. (collect_ht_nodes): Use XRESIZEVEC. (cpp_valid_state): Use XNEWVEC. (save_macros): Use XRESIZEVEC. Cast return value of xmemdup. * symtab.c (ht_create): Use XCNEW. (ht_lookup_with_hash): Cast return value of obstack_copy0. (ht_expand): Use XCNEWVEC. * system.h (HAVE_DESIGNATED_INITIALIZERS): False if __cplusplus. (bool): Do not define if __cplusplus. 2005-05-12 Zack Weinberg * directives.c (#sccs table entry): Mark IN_I, consistent with #ident. (do_sccs): Delete function definition, #define to do_ident. (do_ident): Don't hardwire directive name. 2005-05-12 Ryota Kunisawa PR bootstrap/21230 * configure: Regenerate. 2005-04-27 Andris Pavenis * files.c: Include io.h for DJGPP to get prototype of setmode. 2005-04-19 Per Bothner PR preprocessor/20907 * line-map.c (linemap_line_start): Fix bug when we need to increse column_bits but can re-use the current line_map. 2005-04-19 Kaveh R. Ghazi * system.h (fopen, fdopen, freopen): Define these to the unlocked libiberty functions. 2005-04-11 Kaveh R. Ghazi * configure.ac (libcpp_UNLOCKED_FUNCS): New. (AC_CHECK_FUNCS, AC_CHECK_DECLS): Check for libcpp_UNLOCKED_FUNCS. * system.h (putchar, getc, getchar, clearerr, feof, fileno, fflush, fgetc, fgets, ferror, fread): Redefine to the associated _unlocked function. (fwrite_unlocked): Fix prototype. * configure, config.in: Regenerate. 2005-04-05 Jakub Jelinek PR preprocessor/19475 * macro.c (create_iso_definition): For < ISO C99, don't pedwarn if there is no whitespace between macro name and its replacement, but the replacement starts with a basic character set character. 2005-03-28 Andreas Jaeger * lex.c (warn_about_normalization): Cast field width to int to avoid warning. 2005-03-19 Joseph S. Myers * configure.ac: Consistently use solaris2.1[0-9]* instead of solaris2.1[0-9]. * configure: Regenerate. 2005-03-15 Geoffrey Keating * charset.c (_cpp_valid_ucn): In identifiers, reject a partial UCN rather than printing an error. 2005-03-14 Geoffrey Keating * lex.c (forms_identifier_p): Disable UCNs in C89 mode. 2005-03-14 Geoffrey Keating * init.c (cpp_create_reader): Default warn_normalize to normalized_C. * charset.c: Update for new format of ucnid.h. (ucn_valid_in_identifier): Update for new format of ucnid.h. Add NST parameter, and update it; update callers. (cpp_valid_ucn): Add NST parameter, update callers. Replace abort with cpp_error. (convert_ucn): Pass normalize_state to cpp_valid_ucn. * internal.h (struct normalize_state): New. (INITIAL_NORMALIZE_STATE): New. (NORMALIZE_STATE_RESULT): New. (NORMALIZE_STATE_UPDATE_IDNUM): New. (_cpp_valid_ucn): New. * lex.c (warn_about_normalization): New. (forms_identifier_p): Add normalize_state parameter, update callers. (lex_identifier): Add normalize_state parameter, update callers. Keep the state current. (lex_number): Likewise. (_cpp_lex_direct): Pass normalize_state to subroutines. Check it with warn_about_normalization. * makeucnid.c: New. * ucnid.h: Replace. * ucnid.pl: Remove. * ucnid.tab: Make appropriate for input to makeucnid.c. Remove comments about obsolete version of C++. * include/cpplib.h (enum cpp_normalize_level): New. (struct cpp_options): Add warn_normalize field. 2005-03-11 Geoffrey Keating * directives.c (glue_header_name): Update call to cpp_spell_token. * internal.h (_cpp_interpret_identifier): New. * charset.c (_cpp_interpret_identifier): New. (_cpp_valid_ucn): Allow UCN version of '$'. * lex.c (lex_identifier): Add extra parameter to indicate if initial character was '$' or '\'. Support identifiers with UCNs. (forms_identifier_p): Allow UCNs. (_cpp_lex_direct): Pass extra parameter to lex_identifier. (utf8_to_ucn): New. (cpp_spell_token): Add FORSTRING parameter. Use it. (cpp_token_as_text): Update call to cpp_spell_token. (cpp_output_token): Write UCNs back out. (stringify_arg): Update call to cpp_spell_token. (paste_tokens): Likewise. (cpp_macro_definition): Likewise. * macro.c (stringify_arg): Likewise. (paste_tokens): Likewise. (cpp_macro_definition): Likewise. * include/cpplib.h: Add parameter to cpp_spell_token. 2005-03-04 Jakub Jelinek PR bootstrap/20282 PR bootstrap/20305 * macro.c (replace_args, cpp_get_token): Copy whole cpp_token_u instead of just cpp_string field from it. 2005-02-28 Devang Patel * directives.c (do_line): Save sysp early before line table is realloc'ed. 2005-02-20 Zack Weinberg PR 18785 * charset.c (LAST_POSSIBLY_BASIC_SOURCE_CHAR): New helper macro. (cpp_host_to_exec_charset): New function. * include/cpplib.h: Declare cpp_host_to_exec_charset. 2005-02-19 Devang Patel * charset.c (_cpp_convert_input): Check '\r' before inserting '\n' at the end. 2005-02-15 Eric Christopher PR preprocessor/19077 * macro.c (cpp_macro_definition): Move handling of whitespace to PREV_WHITE conditional. Remove overloading of len variable. 2005-02-14 Kazu Hirata * directives.c, files.c, init.c, internal.h, macro.c, pch.c, traditional.c: Update copyright. 2005-02-14 Paolo Bonzini PR bootstrap/19818 * configure.ac: Check for declaration of basename and getopt. * config.in: Regenerate. * configure: Regenerate. * internal.h (ustrcspn): New. * macro.c (create_iso_definition): Fix allocation of memory. (padding_token): Add cast to remove const-ness. * pch.c (cpp_read_state): Use ustrcspn. 2005-02-08 Mike Stump * files.c (pchf_adder): Remove. (struct pchf_adder_info): Likewise. (_cpp_save_file_entries): Write out all files so that #import works. 2005-01-23 Joseph S. Myers * configure: Regenerate. 2005-01-11 Tobias Schlueter * include/cpplib.h (c_lang): Fix comment to say cpp_create_reader. * include/cpplib.h: Also update copyright years. 2005-01-03 Geoffrey Keating * files.c (_cpp_find_file): Add files found by search_path_exhausted to the list of all files. 2005-01-01 Gabriel Dos Reis * internal.h: Update references to Cpp lib filenames. * directives.c: Likewise. * init.c: Likewise. * macro.c: Likewise. * traditional.c: Likewise. 2004-12-15 Eric Botcazou PR preprocessor/15167 * files.c (destroy_cpp_file): New function. (should_stack_file): Make a new file if the compared file is still stacked. 2004-11-28 Nathanael Nerode PR preprocessor/17610 * directives.c (do_include_common): Error out if an empty filename is given for #include (or #include_next or #import). 2004-11-27 Roger Sayle Zack Weinberg * internal.h: Replace all uses of uchar with unsigned char. * include/cpp-id-data.h: Likewise. Guard typedef of uchar with !IN_GCC, so uchar is only defined whilst building libcpp. 2004-11-24 Kelley Cook * aclocal.m4: Regenerate. 2004-11-24 Roger Sayle PR preprocessor/15824 * configure.ac: Correct HAVE_UCHAR test to #include directly, instead of the non-existant "system.h" and "ansidecl.h". * configure: Regenerate. 2004-11-23 Daniel Jacobowitz Joseph Myers * internal.h (struct lexer_state): Add in_deferred_pragma. * directives.c (struct pragma_entry): Add allow_expansion. (insert_pragma_entry): Take allow_expansion flag. (register_pragma): Likewise. (cpp_register_pragma): Likewise. (_cpp_init_internal_pragmas): Update calls to cpp_register_pragma. (do_pragma): Honor allow_expansion. (cpp_handle_deferred_pragma): Set in_deferred_pragma. * include/cpplib.h (cpp_register_pragma): Update prototype. 2004-11-18 Daniel Jacobowitz Mark Mitchell * configure.ac (i[34567]86-*-solaris2.1[0-9]*): Set need_64bit_hwint=yes. * configure: Regenerate. 2004-11-09 Joseph S. Myers * Makefile.in ($(PACKAGE).pot): New rule. Depend on po/$(PACKAGE).pot. (po/$(PACKAGE).pot): Use ":" instead of "," in --keyword arguments. Add keywords _, N_, SYNTAX_ERROR and SYNTAX_ERROR2. Remove local srcdir path from generated file. 2004-11-04 Zack Weinberg Gerald Pfeifer * internal.h (HAVE_ICONV): Undefine if we do not have HAVE_ICONV_H as well. 2004-10-27 Zack Weinberg PR 18075 * directives.c (do_pragma): Do not defer pragmas which are unknown. (cpp_handle_deferred_pragma): Add cast to silence warning. 2004-10-14 Joseph S. Myers * errors.c (_cpp_begin_message): Print "error: " for errors. 2004-10-10 Andreas Jaeger * makedepend.c: Include mkdeps.h for prototype of deps_add_vpath. * Makefile.in (makedepend.o): Add dependency on mkdeps.h. 2004-10-08 Andrew Pinski * pch.c (cpp_write_pch_state): Remove variable z as it is not used. (cpp_read_state): Remove unused variables, m, d and mac_count. 2004-09-29 Per Bothner * directives.c (cpp_handle_deferred_pragma): Save, clear and restore cb.line_change. Otherwise do_pragma will call the line_change call-back with a meaningless line number. 2004-09-24 Zack Weinberg * configure.ac: Move AC_PROG_MAKE_SET, AC_PROG_INSTALL to programs cluster. Use ACX_PROG_CC_WARNING_OPTS, ACX_PROG_CC_WARNING_ALMOST_PEDANTIC, ACX_PROG_CC_WARNINGS_ARE_ERRORS. * aclocal.m4, configure: Regenerate. * init.c: Include localedir.h. * Makefile.in (WARN_CFLAGS, ALL_CFLAGS): New variables. (DEFS): Delete. (.c.o): Use $(ALL_CFLAGS). (localedir.h, localedir.hs): New rules. (clean): Use rm -rf to remove directories. (distclean): Also delete localedir.h and localedir.hs. (init.o): Update dependencies. 2004-09-22 Kelley Cook * Makefile.in (aclocal.m4): Update dependencies. * configure.ac (AC_CONFIG_MACRO_DIR): New. * aclocal.m4, configure: Regenerate. 2004-09-17 Zack Weinberg * charset.c (_cpp_destroy_iconv, emit_numeric_escape) (_cpp_convert_input, _cpp_default_encoding): Add comments. Some other comments in this file also tweaked. * directives.c (do_pragma): Save current buffer position before lexing the pragma keywords; don't call _cpp_backup_tokens in the defer_pragmas case. 2004-09-15 Per Bothner * include/line-map.h (line_map_start): Add parameter names so preceding comment makes sense. (linemap_add): Remove from comment mention of non-existing parameter. 2004-09-09 Matt Austern Zack Weinberg * include/cpplib.h (TTYPE_TABLE): Remove CPP_ and SPELL_ prefixes throughout. Add entry for PRAGMA. Remove unnecessary "= 0" from EQ. (enum cpp_ttype): Adjust OP and TK definitions to restore prefixes, via token-paste. (CPP_LAST_EQ, CPP_FIRST_DIGRAPH, CPP_LAST_PUNCTUATOR, CPP_LAST_CPP_OP): Change from #defines to additional cpp_ttype enumerators. (struct cpp_options): Add defer_pragmas. (cpp_handle_deferred_pragma): Prototype new interface. * internal.h (struct cpp_reader): Add directive_result. * directives.c (struct pragma_entry): Add is_internal field; give boolean fields type bool. (start_directive): Initialize pfile->directive_result.type. (_cpp_do__Pragma): Likewise. (run_directive): Do not crash if pfile->buffer->prev is NULL. (insert_pragma_entry): Add 'internal' argument; set new->is_internal from it. (register_pragma): New static function, bulk of former cpp_register_pragma here; add 'internal' argument, pass along to insert_pragma_entry. (cpp_register_pragma): Now a wrapper around register_pragma which always passes false for 'internal' argument. (_cpp_init_internal_pragmas): Call register_pragma directly, passing true for 'internal'. (do_pragma): If CPP_OPTION (pfile, defer_pragmas) and this isn't an internal pragma, save text till the end of the line as a CPP_PRAGMA token instead of executing the pragma. (cpp_handle_deferred_pragma): New interface. * lex.c (token_spellings): Adjust OP and TK definitions to match changes to cpplib.h. (_cpp_lex_token): Check for a directive-result token and return it if present. (cpp_token_val_index): Handle CPP_PRAGMA. * macro.c (cpp_builtin_macro_text): Correct comment. (builtin_macro): Handle directive-result tokens from _cpp_do__Pragma. 2004-09-06 Serge Belyshev PR preprocessor/14699 * symtab.c (ht_dump_statistics): Change type of sum_of_squares from size_t to double. 2004-08-28 Andreas Schwab Andreas Jaeger * configure.ac: Set PACKAGE correctly. * configure: Regenerated. 2004-08-25 Paolo Bonzini * Makefile.in: Add back top_builddir. 2004-08-25 Paolo Bonzini * configure.ac: Replace Automake macro invocations with manual Autoconf checks and substitutions. * configure: Regenerate. * aclocal.m4: Regenerate. * config.in: Regenerate. * Makefile.am: Removed. * Makefile.in: Heavy simplification and reorganization. 2004-08-09 Mark Mitchell * configure.ac (arm*-*-eabi*): New target. (arm*-*-symbianelf*): Likewise. * configure: Regenerated. 2004-07-24 Bernardo Innocenti * internal.h (xnew, xcnew, xnewvec, xcnewvec, xobnew): Remove. * directives.c: Use XNEW-family macros from libiberty. * lex.c: Likewise. * macro.c: Likewise. * cpplib.h (cpp_deps_style): Export enum with name. 2004-07-23 Matthias Klose * init.c (init_library): Use PACKAGE for the text domain. 2004-07-16 Andris Pavenis PR preprocessor/16366 * internal.h (struct cpp_reader): New field dir_hash. * files.c (make_cpp_dir): Use dir_hash, not file_hash. (_cpp_init_files, _cpp_cleanup_files): Update for new field. 2004-07-04 Neil Booth PR preprocessor/16192 PR preprocessor/15913 PR preprocessor/15572 * expr.c (_cpp_parse_expr): Handle remaining cases where an expression is missing. * init.c (post_options): Traditional cpp doesn't do // comments. 2004-06-30 Per Bothner * include/line-map.h (fileline): Remove old typedef. * internal.h (struct cpp_reader): Use source_location typedef instead. 2004-06-26 Zack Weinberg Partially revert patch of 2004-06-05. * files.c (search_cache): Remove pfile argument. Don't check for file that would be found by "" or <> search here... (_cpp_find_file): ...do it here, before calling find_file_in_dir. Do not apply directory-of-current-file correction to files found by this check. Rearrange code slightly. 2004-06-21 Geoffrey Keating * files.c (should_stack_file): Correct swapped parameters to call to cb.read_pch. * pch.c (cpp_valid_state): Handle -fpreprocessed. 2004-06-15 Paolo Bonzini * Makefile.in: Regenerate with automake 1.8.5. * aclocal.m4: Likewise. * configure: Regenerate. 2004-06-11 Zack Weinberg * configure.ac: Don't invoke ACX_HEADER_STDBOOL. * configure, config.in: Regenerate. * system.h: Unconditionally define bool as unsigned char, BOOL_BITFIELD as unsigned int. * .cvsignore: New file. 2004-06-09 Geoffrey Keating * traditional.c (push_replacement_text): Set macro->traditional. (save_replacement_text): Likewise. * pch.c (cpp_write_pch_state): Don't write list of defined macros. (struct save_macro_item): Delete. (struct save_macro_data): Use a character array not the previous structured format. (save_macros): Save macro as text not as internal structures. (cpp_prepare_state): Update for changes to save_macro_data. (cpp_read_state): Don't read macros defined in PCH. Restore -D macros as text. * macro.c (create_iso_definition): Honour alloc_subobject. Clear traditional flag. (_cpp_create_definition): Honour alloc_subobject. * lex.c (cpp_token_val_index): New. * internal.h: Include cpp-id-data.h. (uchar): Move definition to cpp-id-data.h. (U): Likewise. (cpp_macro): Likewise. * directives.c (struct answer): Move to cpp-id-data.h. (do_assert): Honour alloc_subobject. * include/symtab.h (struct ht): Add field 'alloc_subobject'. * include/cpplib.h (struct cpp_string): Add GTY marker. (enum cpp_token_fld_kind): New. (struct cpp_token): Add GTY markers. (cpp_token_val_index): Prototype. (CPP_HASHNODE_VALUE_IDX): New. (struct cpp_hashnode): Don't skip fields of 'value' when marking. * include/cpp-id-data.h: New file. 2004-06-09 Paolo Bonzini * Makefile.am (all-local): New. * Makefile.in: Regenerate. 2004-06-06 Roger Sayle * Makefile.am (LIBICONV): Declare. (makedepend_LDADD): Use LIBICONV. * Makefile.in: Regenerate. 2004-06-05 Andrew Pinski * Makefile.am (LIBINTL): Declare (makedepend_LDADD): Use LIBINTL. * Makefile.in: Regenerate. 2004-06-05 Zack Weinberg * Makefile.am: Add makedepend. * Makefile.in, aclocal.m4: Regenerate. * charset.c: Insert a space to avoid a warning. * directives.c: Include mkdeps.h. (_cpp_handle_directive): Reenable macro expander if appropriate. (undefine_macros): Inline body of _cpp_free_definition for speed. Do not call undef callback or _cpp_warn_if_unused_macro. (cpp_get_deps): New interface. * files.c (search_cache): Add pfile argument. Check for file that would be found by "" or <> search here... (_cpp_find_file): ...not here. Correct recorded start_dir of files found by directory-of-current-file search that would be found by "" or <> search. * init.c (cpp_add_dependency_target): Delete. * internal.h (struct lexer_state): Add discarding_output flag. * lex.c (lex_identifier): Compute hash function while scanning. * macro.c (cpp_scan_nooutput): Disable macro expansion outside directives. * makedepend.c: New file. * mkdeps.c (struct deps): Add vpath vector. (apply_vpath, deps_add_vpath): New function. (deps_free): Free vpath vector. (deps_add_dep, deps_add_target): Use apply_vpath. * symtab.c (calc_hash): Use HT_HASHSTEP and HT_FINISH. (ht_lookup_with_hash): New function. * cpplib.h, mkdeps.h: Update prototypes. * symtab.h: Update prototypes. (HT_HASHSTEP, HT_FINISH): New macros. 2004-05-29 Geoffrey Keating * symtab.c (ht_create): Set entries_owned. (ht_destroy): Honour entries_owned. (ht_expand): Likewise. (ht_load): New. * include/symtab.h (struct ht): New field 'entries_owned' (ht_load): New prototype. 2004-05-26 Paolo Bonzini PR bootstrap/15651 * configure.ac: Fix m4 quoting when picking the size of HOST_WIDE_INT. * configure: Regenerate. 2004-05-25 Paolo Bonzini * Makefile.am: the correct directory for gettext include files is given by @INCINTL@. * Makefile.in: Regenerate. 2004-05-24 Paolo Bonzini * system.h [!ENABLE_NLS]: dgettext takes two parameters. 2004-05-23 Paolo Bonzini Moved libcpp from the gcc subdirectory to the toplevel. * Makefile.am: New file. * Makefile.in: Regenerate. * configure.ac: New file. * configure: Regenerate. * config.in: Regenerate. * charset.c: Moved from gcc/cppcharset.c. Add note about brokenness of input charset detection. Adjust for change in name of cppucnid.h. * errors.c: Moved from gcc/cpperror.c. Do not include intl.h. * expr.c: Moved from gcc/cppexp.c. * files.c: Moved from gcc/cppfiles.c. Do not include intl.h. Remove #define of O_BINARY, it is in system.h. * identifiers.c: Moved from gcc/cpphash.c. * internal.h: Moved from gcc/cpphash.h. Change header guard name. All other files adjusted to match name change. * init.c: Moved from gcc/cppinit.c. (init_library) [ENABLE_NLS]: Call bindtextdomain. * lex.c: Moved from gcc/cpplex.c. * directives.c: Moved from gcc/cpplib.c. * macro.c: Moved from gcc/cppmacro.c. * pch.c: Moved from gcc/cpppch.c. Do not include intl.h. * traditional.c: Moved from gcc/cpptrad.c. * ucnid.h: Moved from gcc/cppucnid.h. Change header guard name. * ucnid.pl: Moved from gcc/cppucnid.pl. * ucnid.tab: Moved from gcc/cppucnid.tab. Change header guard name. * symtab.c: Moved from gcc/hashtable.c. * line-map.c: Moved from gcc. Do not include intl.h. * mkdeps.c: Moved from gcc. * system.h: New file. * include/cpplib.h: Moved from gcc. Change header guard name. * include/line-map.h: Moved from gcc. Change header guard name. * include/mkdeps.h: Moved from gcc. Change header guard name. * include/symtab.h: Moved from gcc/hashtable.h. Change header guard name. nescc-1.3.4/libcpp/Makefile.in000066400000000000000000000154321177770303300161450ustar00rootroot00000000000000# @configure_input@ # Makefile for libcpp. Run 'configure' to generate Makefile from Makefile.in # Copyright (C) 2004 Free Software Foundation, Inc. #This file is part of libcpp. #libcpp 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. #libcpp 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 libcpp; see the file COPYING. If not, write to #the Free Software Foundation, 51 Franklin Street, Fifth Floor, #Boston MA 02110-1301, USA. @SET_MAKE@ srcdir = @srcdir@ top_builddir = . VPATH = @srcdir@ INSTALL = @INSTALL@ AR = ar ARFLAGS = cru ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ CATALOGS = $(patsubst %,po/%,@CATALOGS@) CC = @CC@ CFLAGS = @CFLAGS@ WARN_CFLAGS = @WARN_CFLAGS@ @WARN_PEDANTIC@ @WERROR@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ EXEEXT = @EXEEXT@ GMSGFMT = @GMSGFMT@ INCINTL = @INCINTL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ PACKAGE = @PACKAGE@ RANLIB = @RANLIB@ SHELL = @SHELL@ USED_CATALOGS = @USED_CATALOGS@ XGETTEXT = @XGETTEXT@ DEPMODE = @CCDEPMODE@ DEPDIR = @DEPDIR@ datadir = @datadir@ exec_prefix = @prefix@ libdir = @libdir@ localedir = $(datadir)/locale prefix = @prefix@ MSGMERGE = msgmerge mkinstalldirs = $(SHELL) $(srcdir)/../config-aux/mkinstalldirs depcomp = $(SHELL) $(srcdir)/../config-aux/depcomp INCLUDES = -I$(srcdir) -I. -I$(srcdir)/../include @INCINTL@ \ -I$(srcdir)/include ALL_CFLAGS = $(CFLAGS) $(WARN_CFLAGS) $(INCLUDES) $(CPPFLAGS) libcpp_a_OBJS = charset.o directives.o directives-only.o errors.o \ expr.o files.o identifiers.o init.o lex.o line-map.o macro.o \ mkdeps.o pch.o symtab.o traditional.o libcpp_a_SOURCES = charset.c directives.c directives-only.c errors.c \ expr.c files.c identifiers.c init.c lex.c line-map.c macro.c \ mkdeps.c pch.c symtab.c traditional.c all: libcpp.a $(USED_CATALOGS) .SUFFIXES: .SUFFIXES: .c .gmo .o .obj .po .pox libcpp.a: $(libcpp_a_OBJS) -rm -f libcpp.a $(AR) $(ARFLAGS) libcpp.a $(libcpp_a_OBJS) $(RANLIB) libcpp.a # Rules to rebuild the configuration Makefile: $(srcdir)/Makefile.in config.status $(SHELL) ./config.status Makefile config.status: $(srcdir)/configure $(SHELL) ./config.status --recheck $(srcdir)/configure: @MAINT@ $(srcdir)/aclocal.m4 cd $(srcdir) && $(AUTOCONF) $(srcdir)/aclocal.m4: @MAINT@ $(srcdir)/../config/acx.m4 \ $(srcdir)/../config/gettext-sister.m4 $(srcdir)/../config/iconv.m4 \ $(srcdir)/../config/codeset.m4 $(srcdir)/../config/lib-ld.m4 \ $(srcdir)/../config/lib-link.m4 $(srcdir)/../config/lib-prefix.m4 \ $(srcdir)/configure.ac cd $(srcdir) && $(ACLOCAL) -I ../config config.h: stamp-h1 test -f config.h || (rm -f stamp-h1 && $(MAKE) stamp-h1) stamp-h1: $(srcdir)/config.in config.status -rm -f stamp-h1 $(SHELL) ./config.status config.h $(srcdir)/config.in: @MAINT@ $(srcdir)/configure cd $(srcdir) && $(AUTOHEADER) -rm -f stamp-h1 # It is not possible to get LOCALEDIR defined in config.h because # the value it needs to be defined to is only determined in the # Makefile. Hence we do this instead. localedir.h: localedir.hs; @true localedir.hs: Makefile echo "#define LOCALEDIR \"$(localedir)\"" > localedir.new $(srcdir)/../config-aux/move-if-change localedir.new localedir.h echo timestamp > localedir.hs # Installation rules and other phony targets # These rule has to look for .gmo modules in both srcdir and # the cwd, and has to check that we actually have a catalog # for each language, in case they weren't built or included # with the distribution. installdirs: @$(mkinstalldirs) $(DESTDIR)$(datadir); \ cats="$(CATALOGS)"; for cat in $$cats; do \ lang=`basename $$cat | sed 's/\.gmo$$//'`; \ if [ -f $$cat ] || [ -f $(srcdir)/$$cat ]; then \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkinstalldirs) $(DESTDIR)$$dir || exit 1; \ fi; \ done install-strip install: mostlyclean: -rm -f *.o clean: mostlyclean -rm -rf libcpp.a $(srcdir)/autom4te.cache distclean: clean -rm -f config.h stamp-h1 config.status config.cache config.log \ configure.lineno configure.status.lineno Makefile localedir.h \ localedir.hs $(DEPDIR)/*.Po -rmdir $(DEPDIR) maintainer-clean: distclean @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -rm -f $(srcdir)/configure $(srcdir)/aclocal.m4 check: installcheck: dvi: pdf: html: info: install-info: install-pdf: install-man: install-html: update-po: $(CATALOGS:.gmo=.pox) .PHONY: installdirs install install-strip mostlyclean clean distclean \ maintainer-clean check installcheck dvi pdf html info install-info \ install-man update-po install-html # Dependency rule. COMPILE.base = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(ALL_CFLAGS) -c ifeq ($(DEPMODE),depmode=gcc3) COMPILE = $(COMPILE.base) -o $@ -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Po else COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \ $(depcomp) $(COMPILE.base) endif # Implicit rules and I18N .c.o: $(COMPILE) $< # N.B. We do not attempt to copy these into $(srcdir). .po.gmo: -test -d po || mkdir po $(GMSGFMT) --statistics -o $@ $< # The new .po has to be gone over by hand, so we deposit it into # build/po with a different extension. # If build/po/$(PACKAGE).pot exists, use it (it was just created), # else use the one in srcdir. .po.pox: -test -d po || mkdir po $(MSGMERGE) $< `if test -f po/$(PACKAGE).pot; \ then echo po/$(PACKAGE).pot; \ else echo $(srcdir)/po/$(PACKAGE).pot; fi` -o $@ # Rule for regenerating the message template. $(PACKAGE).pot: po/$(PACKAGE).pot po/$(PACKAGE).pot: $(libcpp_a_SOURCES) -test -d $(srcdir)/po || mkdir $(srcdir)/po $(XGETTEXT) --default-domain=$(PACKAGE) \ --keyword=_ --keyword=N_ \ --keyword=cpp_error:3 --keyword=cpp_errno:3 \ --keyword=cpp_error_with_line:5 \ --keyword=SYNTAX_ERROR --keyword=SYNTAX_ERROR2 \ --copyright-holder="Free Software Foundation, Inc." \ --msgid-bugs-address="http://gcc.gnu.org/bugs.html" \ --language=c -o po/$(PACKAGE).pot.tmp $^ sed 's:$(srcdir)/::g' po/$(PACKAGE).pot rm po/$(PACKAGE).pot.tmp # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Dependencies -include $(patsubst %.o, $(DEPDIR)/%.Po, $(libcpp_a_OBJS)) # Dependencies on generated headers have to be explicit. init.o: localedir.h nescc-1.3.4/libcpp/aclocal.m4000066400000000000000000000017521177770303300157400ustar00rootroot00000000000000# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_include([../config-aux/acx.m4]) m4_include([../config-aux/codeset.m4]) m4_include([../config-aux/depstand.m4]) m4_include([../config-aux/gettext-sister.m4]) m4_include([../config-aux/iconv.m4]) m4_include([../config-aux/lead-dot.m4]) m4_include([../config-aux/lib-ld.m4]) m4_include([../config-aux/lib-link.m4]) m4_include([../config-aux/lib-prefix.m4]) m4_include([../config-aux/warnings.m4]) nescc-1.3.4/libcpp/charset.c000066400000000000000000001466561177770303300157120ustar00rootroot00000000000000/* CPP Library - charsets Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006 Free Software Foundation, Inc. Broken out of c-lex.c Apr 2003, adding valid C99 UCN ranges. This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "system.h" #include "cpplib.h" #include "internal.h" /* Character set handling for C-family languages. Terminological note: In what follows, "charset" or "character set" will be taken to mean both an abstract set of characters and an encoding for that set. The C99 standard discusses two character sets: source and execution. The source character set is used for internal processing in translation phases 1 through 4; the execution character set is used thereafter. Both are required by 5.2.1.2p1 to be multibyte encodings, not wide character encodings (see 3.7.2, 3.7.3 for the standardese meanings of these terms). Furthermore, the "basic character set" (listed in 5.2.1p3) is to be encoded in each with values one byte wide, and is to appear in the initial shift state. It is not explicitly mentioned, but there is also a "wide execution character set" used to encode wide character constants and wide string literals; this is supposed to be the result of applying the standard library function mbstowcs() to an equivalent narrow string (6.4.5p5). However, the behavior of hexadecimal and octal \-escapes is at odds with this; they are supposed to be translated directly to wchar_t values (6.4.4.4p5,6). The source character set is not necessarily the character set used to encode physical source files on disk; translation phase 1 converts from whatever that encoding is to the source character set. The presence of universal character names in C99 (6.4.3 et seq.) forces the source character set to be isomorphic to ISO 10646, that is, Unicode. There is no such constraint on the execution character set; note also that the conversion from source to execution character set does not occur for identifiers (5.1.1.2p1#5). For convenience of implementation, the source character set's encoding of the basic character set should be identical to the execution character set OF THE HOST SYSTEM's encoding of the basic character set, and it should not be a state-dependent encoding. cpplib uses UTF-8 or UTF-EBCDIC for the source character set, depending on whether the host is based on ASCII or EBCDIC (see respectively Unicode section 2.3/ISO10646 Amendment 2, and Unicode Technical Report #16). With limited exceptions, it relies on the system library's iconv() primitive to do charset conversion (specified in SUSv2). */ #if !HAVE_ICONV /* Make certain that the uses of iconv(), iconv_open(), iconv_close() below, which are guarded only by if statements with compile-time constant conditions, do not cause link errors. */ #define iconv_open(x, y) (errno = EINVAL, (iconv_t)-1) #define iconv(a,b,c,d,e) (errno = EINVAL, (size_t)-1) #define iconv_close(x) (void)0 #define ICONV_CONST #endif #if HOST_CHARSET == HOST_CHARSET_ASCII #define SOURCE_CHARSET "UTF-8" #define LAST_POSSIBLY_BASIC_SOURCE_CHAR 0x7e #elif HOST_CHARSET == HOST_CHARSET_EBCDIC #define SOURCE_CHARSET "UTF-EBCDIC" #define LAST_POSSIBLY_BASIC_SOURCE_CHAR 0xFF #else #error "Unrecognized basic host character set" #endif #ifndef EILSEQ #define EILSEQ EINVAL #endif /* This structure is used for a resizable string buffer throughout. */ /* Don't call it strbuf, as that conflicts with unistd.h on systems such as DYNIX/ptx where unistd.h includes stropts.h. */ struct _cpp_strbuf { uchar *text; size_t asize; size_t len; }; /* This is enough to hold any string that fits on a single 80-column line, even if iconv quadruples its size (e.g. conversion from ASCII to UTF-32) rounded up to a power of two. */ #define OUTBUF_BLOCK_SIZE 256 /* Conversions between UTF-8 and UTF-16/32 are implemented by custom logic. This is because a depressing number of systems lack iconv, or have have iconv libraries that do not do these conversions, so we need a fallback implementation for them. To ensure the fallback doesn't break due to neglect, it is used on all systems. UTF-32 encoding is nice and simple: a four-byte binary number, constrained to the range 00000000-7FFFFFFF to avoid questions of signedness. We do have to cope with big- and little-endian variants. UTF-16 encoding uses two-byte binary numbers, again in big- and little-endian variants, for all values in the 00000000-0000FFFF range. Values in the 00010000-0010FFFF range are encoded as pairs of two-byte numbers, called "surrogate pairs": given a number S in this range, it is mapped to a pair (H, L) as follows: H = (S - 0x10000) / 0x400 + 0xD800 L = (S - 0x10000) % 0x400 + 0xDC00 Two-byte values in the D800...DFFF range are ill-formed except as a component of a surrogate pair. Even if the encoding within a two-byte value is little-endian, the H member of the surrogate pair comes first. There is no way to encode values in the 00110000-7FFFFFFF range, which is not currently a problem as there are no assigned code points in that range; however, the author expects that it will eventually become necessary to abandon UTF-16 due to this limitation. Note also that, because of these pairs, UTF-16 does not meet the requirements of the C standard for a wide character encoding (see 3.7.3 and 6.4.4.4p11). UTF-8 encoding looks like this: value range encoded as 00000000-0000007F 0xxxxxxx 00000080-000007FF 110xxxxx 10xxxxxx 00000800-0000FFFF 1110xxxx 10xxxxxx 10xxxxxx 00010000-001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 00200000-03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 04000000-7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx Values in the 0000D800 ... 0000DFFF range (surrogates) are invalid, which means that three-byte sequences ED xx yy, with A0 <= xx <= BF, never occur. Note also that any value that can be encoded by a given row of the table can also be encoded by all successive rows, but this is not done; only the shortest possible encoding for any given value is valid. For instance, the character 07C0 could be encoded as any of DF 80, E0 9F 80, F0 80 9F 80, F8 80 80 9F 80, or FC 80 80 80 9F 80. Only the first is valid. An implementation note: the transformation from UTF-16 to UTF-8, or vice versa, is easiest done by using UTF-32 as an intermediary. */ /* Internal primitives which go from an UTF-8 byte stream to native-endian UTF-32 in a cppchar_t, or vice versa; this avoids an extra marshal/unmarshal operation in several places below. */ static inline int one_utf8_to_cppchar (const uchar **inbufp, size_t *inbytesleftp, cppchar_t *cp) { static const uchar masks[6] = { 0x7F, 0x1F, 0x0F, 0x07, 0x02, 0x01 }; static const uchar patns[6] = { 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; cppchar_t c; const uchar *inbuf = *inbufp; size_t nbytes, i; if (*inbytesleftp < 1) return EINVAL; c = *inbuf; if (c < 0x80) { *cp = c; *inbytesleftp -= 1; *inbufp += 1; return 0; } /* The number of leading 1-bits in the first byte indicates how many bytes follow. */ for (nbytes = 2; nbytes < 7; nbytes++) if ((c & ~masks[nbytes-1]) == patns[nbytes-1]) goto found; return EILSEQ; found: if (*inbytesleftp < nbytes) return EINVAL; c = (c & masks[nbytes-1]); inbuf++; for (i = 1; i < nbytes; i++) { cppchar_t n = *inbuf++; if ((n & 0xC0) != 0x80) return EILSEQ; c = ((c << 6) + (n & 0x3F)); } /* Make sure the shortest possible encoding was used. */ if (c <= 0x7F && nbytes > 1) return EILSEQ; if (c <= 0x7FF && nbytes > 2) return EILSEQ; if (c <= 0xFFFF && nbytes > 3) return EILSEQ; if (c <= 0x1FFFFF && nbytes > 4) return EILSEQ; if (c <= 0x3FFFFFF && nbytes > 5) return EILSEQ; /* Make sure the character is valid. */ if (c > 0x7FFFFFFF || (c >= 0xD800 && c <= 0xDFFF)) return EILSEQ; *cp = c; *inbufp = inbuf; *inbytesleftp -= nbytes; return 0; } static inline int one_cppchar_to_utf8 (cppchar_t c, uchar **outbufp, size_t *outbytesleftp) { static const uchar masks[6] = { 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; static const uchar limits[6] = { 0x80, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE }; size_t nbytes; uchar buf[6], *p = &buf[6]; uchar *outbuf = *outbufp; nbytes = 1; if (c < 0x80) *--p = c; else { do { *--p = ((c & 0x3F) | 0x80); c >>= 6; nbytes++; } while (c >= 0x3F || (c & limits[nbytes-1])); *--p = (c | masks[nbytes-1]); } if (*outbytesleftp < nbytes) return E2BIG; while (p < &buf[6]) *outbuf++ = *p++; *outbytesleftp -= nbytes; *outbufp = outbuf; return 0; } /* The following four functions transform one character between the two encodings named in the function name. All have the signature int (*)(iconv_t bigend, const uchar **inbufp, size_t *inbytesleftp, uchar **outbufp, size_t *outbytesleftp) BIGEND must have the value 0 or 1, coerced to (iconv_t); it is interpreted as a boolean indicating whether big-endian or little-endian encoding is to be used for the member of the pair that is not UTF-8. INBUFP, INBYTESLEFTP, OUTBUFP, OUTBYTESLEFTP work exactly as they do for iconv. The return value is either 0 for success, or an errno value for failure, which may be E2BIG (need more space), EILSEQ (ill-formed input sequence), ir EINVAL (incomplete input sequence). */ static inline int one_utf8_to_utf32 (iconv_t bigend, const uchar **inbufp, size_t *inbytesleftp, uchar **outbufp, size_t *outbytesleftp) { uchar *outbuf; cppchar_t s = 0; int rval; /* Check for space first, since we know exactly how much we need. */ if (*outbytesleftp < 4) return E2BIG; rval = one_utf8_to_cppchar (inbufp, inbytesleftp, &s); if (rval) return rval; outbuf = *outbufp; outbuf[bigend ? 3 : 0] = (s & 0x000000FF); outbuf[bigend ? 2 : 1] = (s & 0x0000FF00) >> 8; outbuf[bigend ? 1 : 2] = (s & 0x00FF0000) >> 16; outbuf[bigend ? 0 : 3] = (s & 0xFF000000) >> 24; *outbufp += 4; *outbytesleftp -= 4; return 0; } static inline int one_utf32_to_utf8 (iconv_t bigend, const uchar **inbufp, size_t *inbytesleftp, uchar **outbufp, size_t *outbytesleftp) { cppchar_t s; int rval; const uchar *inbuf; if (*inbytesleftp < 4) return EINVAL; inbuf = *inbufp; s = inbuf[bigend ? 0 : 3] << 24; s += inbuf[bigend ? 1 : 2] << 16; s += inbuf[bigend ? 2 : 1] << 8; s += inbuf[bigend ? 3 : 0]; if (s >= 0x7FFFFFFF || (s >= 0xD800 && s <= 0xDFFF)) return EILSEQ; rval = one_cppchar_to_utf8 (s, outbufp, outbytesleftp); if (rval) return rval; *inbufp += 4; *inbytesleftp -= 4; return 0; } static inline int one_utf8_to_utf16 (iconv_t bigend, const uchar **inbufp, size_t *inbytesleftp, uchar **outbufp, size_t *outbytesleftp) { int rval; cppchar_t s = 0; const uchar *save_inbuf = *inbufp; size_t save_inbytesleft = *inbytesleftp; uchar *outbuf = *outbufp; rval = one_utf8_to_cppchar (inbufp, inbytesleftp, &s); if (rval) return rval; if (s > 0x0010FFFF) { *inbufp = save_inbuf; *inbytesleftp = save_inbytesleft; return EILSEQ; } if (s < 0xFFFF) { if (*outbytesleftp < 2) { *inbufp = save_inbuf; *inbytesleftp = save_inbytesleft; return E2BIG; } outbuf[bigend ? 1 : 0] = (s & 0x00FF); outbuf[bigend ? 0 : 1] = (s & 0xFF00) >> 8; *outbufp += 2; *outbytesleftp -= 2; return 0; } else { cppchar_t hi, lo; if (*outbytesleftp < 4) { *inbufp = save_inbuf; *inbytesleftp = save_inbytesleft; return E2BIG; } hi = (s - 0x10000) / 0x400 + 0xD800; lo = (s - 0x10000) % 0x400 + 0xDC00; /* Even if we are little-endian, put the high surrogate first. ??? Matches practice? */ outbuf[bigend ? 1 : 0] = (hi & 0x00FF); outbuf[bigend ? 0 : 1] = (hi & 0xFF00) >> 8; outbuf[bigend ? 3 : 2] = (lo & 0x00FF); outbuf[bigend ? 2 : 3] = (lo & 0xFF00) >> 8; *outbufp += 4; *outbytesleftp -= 4; return 0; } } static inline int one_utf16_to_utf8 (iconv_t bigend, const uchar **inbufp, size_t *inbytesleftp, uchar **outbufp, size_t *outbytesleftp) { cppchar_t s; const uchar *inbuf = *inbufp; int rval; if (*inbytesleftp < 2) return EINVAL; s = inbuf[bigend ? 0 : 1] << 8; s += inbuf[bigend ? 1 : 0]; /* Low surrogate without immediately preceding high surrogate is invalid. */ if (s >= 0xDC00 && s <= 0xDFFF) return EILSEQ; /* High surrogate must have a following low surrogate. */ else if (s >= 0xD800 && s <= 0xDBFF) { cppchar_t hi = s, lo; if (*inbytesleftp < 4) return EINVAL; lo = inbuf[bigend ? 2 : 3] << 8; lo += inbuf[bigend ? 3 : 2]; if (lo < 0xDC00 || lo > 0xDFFF) return EILSEQ; s = (hi - 0xD800) * 0x400 + (lo - 0xDC00) + 0x10000; } rval = one_cppchar_to_utf8 (s, outbufp, outbytesleftp); if (rval) return rval; /* Success - update the input pointers (one_cppchar_to_utf8 has done the output pointers for us). */ if (s <= 0xFFFF) { *inbufp += 2; *inbytesleftp -= 2; } else { *inbufp += 4; *inbytesleftp -= 4; } return 0; } /* Helper routine for the next few functions. The 'const' on one_conversion means that we promise not to modify what function is pointed to, which lets the inliner see through it. */ static inline bool conversion_loop (int (*const one_conversion)(iconv_t, const uchar **, size_t *, uchar **, size_t *), iconv_t cd, const uchar *from, size_t flen, struct _cpp_strbuf *to) { const uchar *inbuf; uchar *outbuf; size_t inbytesleft, outbytesleft; int rval; inbuf = from; inbytesleft = flen; outbuf = to->text + to->len; outbytesleft = to->asize - to->len; for (;;) { do rval = one_conversion (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); while (inbytesleft && !rval); if (__builtin_expect (inbytesleft == 0, 1)) { to->len = to->asize - outbytesleft; return true; } if (rval != E2BIG) { errno = rval; return false; } outbytesleft += OUTBUF_BLOCK_SIZE; to->asize += OUTBUF_BLOCK_SIZE; to->text = XRESIZEVEC (uchar, to->text, to->asize); outbuf = to->text + to->asize - outbytesleft; } } /* These functions convert entire strings between character sets. They all have the signature bool (*)(iconv_t cd, const uchar *from, size_t flen, struct _cpp_strbuf *to); The input string FROM is converted as specified by the function name plus the iconv descriptor CD (which may be fake), and the result appended to TO. On any error, false is returned, otherwise true. */ /* These four use the custom conversion code above. */ static bool convert_utf8_utf16 (iconv_t cd, const uchar *from, size_t flen, struct _cpp_strbuf *to) { return conversion_loop (one_utf8_to_utf16, cd, from, flen, to); } static bool convert_utf8_utf32 (iconv_t cd, const uchar *from, size_t flen, struct _cpp_strbuf *to) { return conversion_loop (one_utf8_to_utf32, cd, from, flen, to); } static bool convert_utf16_utf8 (iconv_t cd, const uchar *from, size_t flen, struct _cpp_strbuf *to) { return conversion_loop (one_utf16_to_utf8, cd, from, flen, to); } static bool convert_utf32_utf8 (iconv_t cd, const uchar *from, size_t flen, struct _cpp_strbuf *to) { return conversion_loop (one_utf32_to_utf8, cd, from, flen, to); } /* Identity conversion, used when we have no alternative. */ static bool convert_no_conversion (iconv_t cd ATTRIBUTE_UNUSED, const uchar *from, size_t flen, struct _cpp_strbuf *to) { if (to->len + flen > to->asize) { to->asize = to->len + flen; to->text = XRESIZEVEC (uchar, to->text, to->asize); } memcpy (to->text + to->len, from, flen); to->len += flen; return true; } /* And this one uses the system iconv primitive. It's a little different, since iconv's interface is a little different. */ #if HAVE_ICONV #define CONVERT_ICONV_GROW_BUFFER \ do { \ outbytesleft += OUTBUF_BLOCK_SIZE; \ to->asize += OUTBUF_BLOCK_SIZE; \ to->text = XRESIZEVEC (uchar, to->text, to->asize); \ outbuf = (char *)to->text + to->asize - outbytesleft; \ } while (0) static bool convert_using_iconv (iconv_t cd, const uchar *from, size_t flen, struct _cpp_strbuf *to) { ICONV_CONST char *inbuf; char *outbuf; size_t inbytesleft, outbytesleft; /* Reset conversion descriptor and check that it is valid. */ if (iconv (cd, 0, 0, 0, 0) == (size_t)-1) return false; inbuf = (ICONV_CONST char *)from; inbytesleft = flen; outbuf = (char *)to->text + to->len; outbytesleft = to->asize - to->len; for (;;) { iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); if (__builtin_expect (inbytesleft == 0, 1)) { /* Close out any shift states, returning to the initial state. */ if (iconv (cd, 0, 0, &outbuf, &outbytesleft) == (size_t)-1) { if (errno != E2BIG) return false; CONVERT_ICONV_GROW_BUFFER; if (iconv (cd, 0, 0, &outbuf, &outbytesleft) == (size_t)-1) return false; } to->len = to->asize - outbytesleft; return true; } if (errno != E2BIG) return false; CONVERT_ICONV_GROW_BUFFER; } } #else #define convert_using_iconv 0 /* prevent undefined symbol error below */ #endif /* Arrange for the above custom conversion logic to be used automatically when conversion between a suitable pair of character sets is requested. */ #define APPLY_CONVERSION(CONVERTER, FROM, FLEN, TO) \ CONVERTER.func (CONVERTER.cd, FROM, FLEN, TO) struct conversion { const char *pair; convert_f func; iconv_t fake_cd; }; static const struct conversion conversion_tab[] = { { "UTF-8/UTF-32LE", convert_utf8_utf32, (iconv_t)0 }, { "UTF-8/UTF-32BE", convert_utf8_utf32, (iconv_t)1 }, { "UTF-8/UTF-16LE", convert_utf8_utf16, (iconv_t)0 }, { "UTF-8/UTF-16BE", convert_utf8_utf16, (iconv_t)1 }, { "UTF-32LE/UTF-8", convert_utf32_utf8, (iconv_t)0 }, { "UTF-32BE/UTF-8", convert_utf32_utf8, (iconv_t)1 }, { "UTF-16LE/UTF-8", convert_utf16_utf8, (iconv_t)0 }, { "UTF-16BE/UTF-8", convert_utf16_utf8, (iconv_t)1 }, }; /* Subroutine of cpp_init_iconv: initialize and return a cset_converter structure for conversion from FROM to TO. If iconv_open() fails, issue an error and return an identity converter. Silently return an identity converter if FROM and TO are identical. */ static struct cset_converter init_iconv_desc (cpp_reader *pfile, const char *to, const char *from) { struct cset_converter ret; char *pair; size_t i; if (!strcasecmp (to, from)) { ret.func = convert_no_conversion; ret.cd = (iconv_t) -1; return ret; } pair = (char *) alloca(strlen(to) + strlen(from) + 2); strcpy(pair, from); strcat(pair, "/"); strcat(pair, to); for (i = 0; i < ARRAY_SIZE (conversion_tab); i++) if (!strcasecmp (pair, conversion_tab[i].pair)) { ret.func = conversion_tab[i].func; ret.cd = conversion_tab[i].fake_cd; return ret; } /* No custom converter - try iconv. */ if (HAVE_ICONV) { ret.func = convert_using_iconv; ret.cd = iconv_open (to, from); if (ret.cd == (iconv_t) -1) { if (errno == EINVAL) cpp_error (pfile, CPP_DL_ERROR, /* FIXME should be DL_SORRY */ "conversion from %s to %s not supported by iconv", from, to); else cpp_errno (pfile, CPP_DL_ERROR, "iconv_open"); ret.func = convert_no_conversion; } } else { cpp_error (pfile, CPP_DL_ERROR, /* FIXME: should be DL_SORRY */ "no iconv implementation, cannot convert from %s to %s", from, to); ret.func = convert_no_conversion; ret.cd = (iconv_t) -1; } return ret; } /* If charset conversion is requested, initialize iconv(3) descriptors for conversion from the source character set to the execution character sets. If iconv is not present in the C library, and conversion is requested, issue an error. */ void cpp_init_iconv (cpp_reader *pfile) { const char *ncset = CPP_OPTION (pfile, narrow_charset); const char *wcset = CPP_OPTION (pfile, wide_charset); const char *default_wcset; bool be = CPP_OPTION (pfile, bytes_big_endian); if (CPP_OPTION (pfile, wchar_precision) >= 32) default_wcset = be ? "UTF-32BE" : "UTF-32LE"; else if (CPP_OPTION (pfile, wchar_precision) >= 16) default_wcset = be ? "UTF-16BE" : "UTF-16LE"; else /* This effectively means that wide strings are not supported, so don't do any conversion at all. */ default_wcset = SOURCE_CHARSET; if (!ncset) ncset = SOURCE_CHARSET; if (!wcset) wcset = default_wcset; pfile->narrow_cset_desc = init_iconv_desc (pfile, ncset, SOURCE_CHARSET); pfile->wide_cset_desc = init_iconv_desc (pfile, wcset, SOURCE_CHARSET); } /* Destroy iconv(3) descriptors set up by cpp_init_iconv, if necessary. */ void _cpp_destroy_iconv (cpp_reader *pfile) { if (HAVE_ICONV) { if (pfile->narrow_cset_desc.func == convert_using_iconv) iconv_close (pfile->narrow_cset_desc.cd); if (pfile->wide_cset_desc.func == convert_using_iconv) iconv_close (pfile->wide_cset_desc.cd); } } /* Utility routine for use by a full compiler. C is a character taken from the *basic* source character set, encoded in the host's execution encoding. Convert it to (the target's) execution encoding, and return that value. Issues an internal error if C's representation in the narrow execution character set fails to be a single-byte value (C99 5.2.1p3: "The representation of each member of the source and execution character sets shall fit in a byte.") May also issue an internal error if C fails to be a member of the basic source character set (testing this exactly is too hard, especially when the host character set is EBCDIC). */ cppchar_t cpp_host_to_exec_charset (cpp_reader *pfile, cppchar_t c) { uchar sbuf[1]; struct _cpp_strbuf tbuf; /* This test is merely an approximation, but it suffices to catch the most important thing, which is that we don't get handed a character outside the unibyte range of the host character set. */ if (c > LAST_POSSIBLY_BASIC_SOURCE_CHAR) { cpp_error (pfile, CPP_DL_ICE, "character 0x%lx is not in the basic source character set\n", (unsigned long)c); return 0; } /* Being a character in the unibyte range of the host character set, we can safely splat it into a one-byte buffer and trust that that is a well-formed string. */ sbuf[0] = c; /* This should never need to reallocate, but just in case... */ tbuf.asize = 1; tbuf.text = XNEWVEC (uchar, tbuf.asize); tbuf.len = 0; if (!APPLY_CONVERSION (pfile->narrow_cset_desc, sbuf, 1, &tbuf)) { cpp_errno (pfile, CPP_DL_ICE, "converting to execution character set"); return 0; } if (tbuf.len != 1) { cpp_error (pfile, CPP_DL_ICE, "character 0x%lx is not unibyte in execution character set", (unsigned long)c); return 0; } c = tbuf.text[0]; free(tbuf.text); return c; } /* Utility routine that computes a mask of the form 0000...111... with WIDTH 1-bits. */ static inline size_t width_to_mask (size_t width) { width = MIN (width, BITS_PER_CPPCHAR_T); if (width >= CHAR_BIT * sizeof (size_t)) return ~(size_t) 0; else return ((size_t) 1 << width) - 1; } /* A large table of unicode character information. */ enum { /* Valid in a C99 identifier? */ C99 = 1, /* Valid in a C99 identifier, but not as the first character? */ DIG = 2, /* Valid in a C++ identifier? */ CXX = 4, /* NFC representation is not valid in an identifier? */ CID = 8, /* Might be valid NFC form? */ NFC = 16, /* Might be valid NFKC form? */ NKC = 32, /* Certain preceding characters might make it not valid NFC/NKFC form? */ CTX = 64 }; static const struct { /* Bitmap of flags above. */ unsigned char flags; /* Combining class of the character. */ unsigned char combine; /* Last character in the range described by this entry. */ unsigned short end; } ucnranges[] = { #include "ucnid.h" }; /* Returns 1 if C is valid in an identifier, 2 if C is valid except at the start of an identifier, and 0 if C is not valid in an identifier. We assume C has already gone through the checks of _cpp_valid_ucn. Also update NST for C if returning nonzero. The algorithm is a simple binary search on the table defined in ucnid.h. */ static int ucn_valid_in_identifier (cpp_reader *pfile, cppchar_t c, struct normalize_state *nst) { int mn, mx, md; if (c > 0xFFFF) return 0; mn = 0; mx = ARRAY_SIZE (ucnranges) - 1; while (mx != mn) { md = (mn + mx) / 2; if (c <= ucnranges[md].end) mx = md; else mn = md + 1; } /* When -pedantic, we require the character to have been listed by the standard for the current language. Otherwise, we accept the union of the acceptable sets for C++98 and C99. */ if (! (ucnranges[mn].flags & (C99 | CXX))) return 0; if (CPP_PEDANTIC (pfile) && ((CPP_OPTION (pfile, c99) && !(ucnranges[mn].flags & C99)) || (CPP_OPTION (pfile, cplusplus) && !(ucnranges[mn].flags & CXX)))) return 0; /* Update NST. */ if (ucnranges[mn].combine != 0 && ucnranges[mn].combine < nst->prev_class) nst->level = normalized_none; else if (ucnranges[mn].flags & CTX) { bool safe; cppchar_t p = nst->previous; /* Easy cases from Bengali, Oriya, Tamil, Jannada, and Malayalam. */ if (c == 0x09BE) safe = p != 0x09C7; /* Use 09CB instead of 09C7 09BE. */ else if (c == 0x0B3E) safe = p != 0x0B47; /* Use 0B4B instead of 0B47 0B3E. */ else if (c == 0x0BBE) safe = p != 0x0BC6 && p != 0x0BC7; /* Use 0BCA/0BCB instead. */ else if (c == 0x0CC2) safe = p != 0x0CC6; /* Use 0CCA instead of 0CC6 0CC2. */ else if (c == 0x0D3E) safe = p != 0x0D46 && p != 0x0D47; /* Use 0D4A/0D4B instead. */ /* For Hangul, characters in the range AC00-D7A3 are NFC/NFKC, and are combined algorithmically from a sequence of the form 1100-1112 1161-1175 11A8-11C2 (if the third is not present, it is treated as 11A7, which is not really a valid character). Unfortunately, C99 allows (only) the NFC form, but C++ allows only the combining characters. */ else if (c >= 0x1161 && c <= 0x1175) safe = p < 0x1100 || p > 0x1112; else if (c >= 0x11A8 && c <= 0x11C2) safe = (p < 0xAC00 || p > 0xD7A3 || (p - 0xAC00) % 28 != 0); else { /* Uh-oh, someone updated ucnid.h without updating this code. */ cpp_error (pfile, CPP_DL_ICE, "Character %x might not be NFKC", c); safe = true; } if (!safe && c < 0x1161) nst->level = normalized_none; else if (!safe) nst->level = MAX (nst->level, normalized_identifier_C); } else if (ucnranges[mn].flags & NKC) ; else if (ucnranges[mn].flags & NFC) nst->level = MAX (nst->level, normalized_C); else if (ucnranges[mn].flags & CID) nst->level = MAX (nst->level, normalized_identifier_C); else nst->level = normalized_none; nst->previous = c; nst->prev_class = ucnranges[mn].combine; /* In C99, UCN digits may not begin identifiers. */ if (CPP_OPTION (pfile, c99) && (ucnranges[mn].flags & DIG)) return 2; return 1; } /* [lex.charset]: The character designated by the universal character name \UNNNNNNNN is that character whose character short name in ISO/IEC 10646 is NNNNNNNN; the character designated by the universal character name \uNNNN is that character whose character short name in ISO/IEC 10646 is 0000NNNN. If the hexadecimal value for a universal character name is less than 0x20 or in the range 0x7F-0x9F (inclusive), or if the universal character name designates a character in the basic source character set, then the program is ill-formed. *PSTR must be preceded by "\u" or "\U"; it is assumed that the buffer end is delimited by a non-hex digit. Returns zero if the UCN has not been consumed. Otherwise the nonzero value of the UCN, whether valid or invalid, is returned. Diagnostics are emitted for invalid values. PSTR is updated to point one beyond the UCN, or to the syntactically invalid character. IDENTIFIER_POS is 0 when not in an identifier, 1 for the start of an identifier, or 2 otherwise. */ cppchar_t _cpp_valid_ucn (cpp_reader *pfile, const uchar **pstr, const uchar *limit, int identifier_pos, struct normalize_state *nst) { cppchar_t result, c; unsigned int length; const uchar *str = *pstr; const uchar *base = str - 2; if (!CPP_OPTION (pfile, cplusplus) && !CPP_OPTION (pfile, c99)) cpp_error (pfile, CPP_DL_WARNING, "universal character names are only valid in C++ and C99"); else if (CPP_WTRADITIONAL (pfile) && identifier_pos == 0) cpp_error (pfile, CPP_DL_WARNING, "the meaning of '\\%c' is different in traditional C", (int) str[-1]); if (str[-1] == 'u') length = 4; else if (str[-1] == 'U') length = 8; else { cpp_error (pfile, CPP_DL_ICE, "In _cpp_valid_ucn but not a UCN"); length = 4; } result = 0; do { c = *str; if (!ISXDIGIT (c)) break; str++; result = (result << 4) + hex_value (c); } while (--length && str < limit); /* Partial UCNs are not valid in strings, but decompose into multiple tokens in identifiers, so we can't give a helpful error message in that case. */ if (length && identifier_pos) return 0; *pstr = str; if (length) { cpp_error (pfile, CPP_DL_ERROR, "incomplete universal character name %.*s", (int) (str - base), base); result = 1; } /* The standard permits $, @ and ` to be specified as UCNs. We use hex escapes so that this also works with EBCDIC hosts. */ else if ((result < 0xa0 && (result != 0x24 && result != 0x40 && result != 0x60)) || (result & 0x80000000) || (result >= 0xD800 && result <= 0xDFFF)) { cpp_error (pfile, CPP_DL_ERROR, "%.*s is not a valid universal character", (int) (str - base), base); result = 1; } else if (identifier_pos && result == 0x24 && CPP_OPTION (pfile, dollars_in_ident)) { if (CPP_OPTION (pfile, warn_dollars) && !pfile->state.skipping) { CPP_OPTION (pfile, warn_dollars) = 0; cpp_error (pfile, CPP_DL_PEDWARN, "'$' in identifier or number"); } NORMALIZE_STATE_UPDATE_IDNUM (nst); } else if (identifier_pos) { int validity = ucn_valid_in_identifier (pfile, result, nst); if (validity == 0) cpp_error (pfile, CPP_DL_ERROR, "universal character %.*s is not valid in an identifier", (int) (str - base), base); else if (validity == 2 && identifier_pos == 1) cpp_error (pfile, CPP_DL_ERROR, "universal character %.*s is not valid at the start of an identifier", (int) (str - base), base); } if (result == 0) result = 1; return result; } /* Convert an UCN, pointed to by FROM, to UTF-8 encoding, then translate it to the execution character set and write the result into TBUF. An advanced pointer is returned. Issues all relevant diagnostics. */ static const uchar * convert_ucn (cpp_reader *pfile, const uchar *from, const uchar *limit, struct _cpp_strbuf *tbuf, bool wide) { cppchar_t ucn; uchar buf[6]; uchar *bufp = buf; size_t bytesleft = 6; int rval; struct cset_converter cvt = wide ? pfile->wide_cset_desc : pfile->narrow_cset_desc; struct normalize_state nst = INITIAL_NORMALIZE_STATE; from++; /* Skip u/U. */ ucn = _cpp_valid_ucn (pfile, &from, limit, 0, &nst); rval = one_cppchar_to_utf8 (ucn, &bufp, &bytesleft); if (rval) { errno = rval; cpp_errno (pfile, CPP_DL_ERROR, "converting UCN to source character set"); } else if (!APPLY_CONVERSION (cvt, buf, 6 - bytesleft, tbuf)) cpp_errno (pfile, CPP_DL_ERROR, "converting UCN to execution character set"); return from; } /* Subroutine of convert_hex and convert_oct. N is the representation in the execution character set of a numeric escape; write it into the string buffer TBUF and update the end-of-string pointer therein. WIDE is true if it's a wide string that's being assembled in TBUF. This function issues no diagnostics and never fails. */ static void emit_numeric_escape (cpp_reader *pfile, cppchar_t n, struct _cpp_strbuf *tbuf, bool wide) { if (wide) { /* We have to render this into the target byte order, which may not be our byte order. */ bool bigend = CPP_OPTION (pfile, bytes_big_endian); size_t width = CPP_OPTION (pfile, wchar_precision); size_t cwidth = CPP_OPTION (pfile, char_precision); size_t cmask = width_to_mask (cwidth); size_t nbwc = width / cwidth; size_t i; size_t off = tbuf->len; cppchar_t c; if (tbuf->len + nbwc > tbuf->asize) { tbuf->asize += OUTBUF_BLOCK_SIZE; tbuf->text = XRESIZEVEC (uchar, tbuf->text, tbuf->asize); } for (i = 0; i < nbwc; i++) { c = n & cmask; n >>= cwidth; tbuf->text[off + (bigend ? nbwc - i - 1 : i)] = c; } tbuf->len += nbwc; } else { /* Note: this code does not handle the case where the target and host have a different number of bits in a byte. */ if (tbuf->len + 1 > tbuf->asize) { tbuf->asize += OUTBUF_BLOCK_SIZE; tbuf->text = XRESIZEVEC (uchar, tbuf->text, tbuf->asize); } tbuf->text[tbuf->len++] = n; } } /* Convert a hexadecimal escape, pointed to by FROM, to the execution character set and write it into the string buffer TBUF. Returns an advanced pointer, and issues diagnostics as necessary. No character set translation occurs; this routine always produces the execution-set character with numeric value equal to the given hex number. You can, e.g. generate surrogate pairs this way. */ static const uchar * convert_hex (cpp_reader *pfile, const uchar *from, const uchar *limit, struct _cpp_strbuf *tbuf, bool wide) { cppchar_t c, n = 0, overflow = 0; int digits_found = 0; size_t width = (wide ? CPP_OPTION (pfile, wchar_precision) : CPP_OPTION (pfile, char_precision)); size_t mask = width_to_mask (width); if (CPP_WTRADITIONAL (pfile)) cpp_error (pfile, CPP_DL_WARNING, "the meaning of '\\x' is different in traditional C"); from++; /* Skip 'x'. */ while (from < limit) { c = *from; if (! hex_p (c)) break; from++; overflow |= n ^ (n << 4 >> 4); n = (n << 4) + hex_value (c); digits_found = 1; } if (!digits_found) { cpp_error (pfile, CPP_DL_ERROR, "\\x used with no following hex digits"); return from; } if (overflow | (n != (n & mask))) { cpp_error (pfile, CPP_DL_PEDWARN, "hex escape sequence out of range"); n &= mask; } emit_numeric_escape (pfile, n, tbuf, wide); return from; } /* Convert an octal escape, pointed to by FROM, to the execution character set and write it into the string buffer TBUF. Returns an advanced pointer, and issues diagnostics as necessary. No character set translation occurs; this routine always produces the execution-set character with numeric value equal to the given octal number. */ static const uchar * convert_oct (cpp_reader *pfile, const uchar *from, const uchar *limit, struct _cpp_strbuf *tbuf, bool wide) { size_t count = 0; cppchar_t c, n = 0; size_t width = (wide ? CPP_OPTION (pfile, wchar_precision) : CPP_OPTION (pfile, char_precision)); size_t mask = width_to_mask (width); bool overflow = false; while (from < limit && count++ < 3) { c = *from; if (c < '0' || c > '7') break; from++; overflow |= n ^ (n << 3 >> 3); n = (n << 3) + c - '0'; } if (n != (n & mask)) { cpp_error (pfile, CPP_DL_PEDWARN, "octal escape sequence out of range"); n &= mask; } emit_numeric_escape (pfile, n, tbuf, wide); return from; } /* Convert an escape sequence (pointed to by FROM) to its value on the target, and to the execution character set. Do not scan past LIMIT. Write the converted value into TBUF. Returns an advanced pointer. Handles all relevant diagnostics. */ static const uchar * convert_escape (cpp_reader *pfile, const uchar *from, const uchar *limit, struct _cpp_strbuf *tbuf, bool wide) { /* Values of \a \b \e \f \n \r \t \v respectively. */ #if HOST_CHARSET == HOST_CHARSET_ASCII static const uchar charconsts[] = { 7, 8, 27, 12, 10, 13, 9, 11 }; #elif HOST_CHARSET == HOST_CHARSET_EBCDIC static const uchar charconsts[] = { 47, 22, 39, 12, 21, 13, 5, 11 }; #else #error "unknown host character set" #endif uchar c; struct cset_converter cvt = wide ? pfile->wide_cset_desc : pfile->narrow_cset_desc; c = *from; switch (c) { /* UCNs, hex escapes, and octal escapes are processed separately. */ case 'u': case 'U': return convert_ucn (pfile, from, limit, tbuf, wide); case 'x': return convert_hex (pfile, from, limit, tbuf, wide); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': return convert_oct (pfile, from, limit, tbuf, wide); /* Various letter escapes. Get the appropriate host-charset value into C. */ case '\\': case '\'': case '"': case '?': break; case '(': case '{': case '[': case '%': /* '\(', etc, can be used at the beginning of a line in a long string split onto multiple lines with \-newline, to prevent Emacs or other text editors from getting confused. '\%' can be used to prevent SCCS from mangling printf format strings. */ if (CPP_PEDANTIC (pfile)) goto unknown; break; case 'b': c = charconsts[1]; break; case 'f': c = charconsts[3]; break; case 'n': c = charconsts[4]; break; case 'r': c = charconsts[5]; break; case 't': c = charconsts[6]; break; case 'v': c = charconsts[7]; break; case 'a': if (CPP_WTRADITIONAL (pfile)) cpp_error (pfile, CPP_DL_WARNING, "the meaning of '\\a' is different in traditional C"); c = charconsts[0]; break; case 'e': case 'E': if (CPP_PEDANTIC (pfile)) cpp_error (pfile, CPP_DL_PEDWARN, "non-ISO-standard escape sequence, '\\%c'", (int) c); c = charconsts[2]; break; default: unknown: if (ISGRAPH (c)) cpp_error (pfile, CPP_DL_PEDWARN, "unknown escape sequence '\\%c'", (int) c); else { /* diagnostic.c does not support "%03o". When it does, this code can use %03o directly in the diagnostic again. */ char buf[32]; sprintf(buf, "%03o", (int) c); cpp_error (pfile, CPP_DL_PEDWARN, "unknown escape sequence: '\\%s'", buf); } } /* Now convert what we have to the execution character set. */ if (!APPLY_CONVERSION (cvt, &c, 1, tbuf)) cpp_errno (pfile, CPP_DL_ERROR, "converting escape sequence to execution character set"); return from + 1; } /* FROM is an array of cpp_string structures of length COUNT. These are to be converted from the source to the execution character set, escape sequences translated, and finally all are to be concatenated. WIDE indicates whether or not to produce a wide string. The result is written into TO. Returns true for success, false for failure. */ bool cpp_interpret_string (cpp_reader *pfile, const cpp_string *from, size_t count, cpp_string *to, bool wide) { struct _cpp_strbuf tbuf; const uchar *p, *base, *limit; size_t i; struct cset_converter cvt = wide ? pfile->wide_cset_desc : pfile->narrow_cset_desc; tbuf.asize = MAX (OUTBUF_BLOCK_SIZE, from->len); tbuf.text = XNEWVEC (uchar, tbuf.asize); tbuf.len = 0; for (i = 0; i < count; i++) { p = from[i].text; if (*p == 'L') p++; p++; /* Skip leading quote. */ limit = from[i].text + from[i].len - 1; /* Skip trailing quote. */ for (;;) { base = p; while (p < limit && *p != '\\') p++; if (p > base) { /* We have a run of normal characters; these can be fed directly to convert_cset. */ if (!APPLY_CONVERSION (cvt, base, p - base, &tbuf)) goto fail; } if (p == limit) break; p = convert_escape (pfile, p + 1, limit, &tbuf, wide); } } /* NUL-terminate the 'to' buffer and translate it to a cpp_string structure. */ emit_numeric_escape (pfile, 0, &tbuf, wide); tbuf.text = XRESIZEVEC (uchar, tbuf.text, tbuf.len); to->text = tbuf.text; to->len = tbuf.len; return true; fail: cpp_errno (pfile, CPP_DL_ERROR, "converting to execution character set"); free (tbuf.text); return false; } /* Subroutine of do_line and do_linemarker. Convert escape sequences in a string, but do not perform character set conversion. */ bool cpp_interpret_string_notranslate (cpp_reader *pfile, const cpp_string *from, size_t count, cpp_string *to, bool wide) { struct cset_converter save_narrow_cset_desc = pfile->narrow_cset_desc; bool retval; pfile->narrow_cset_desc.func = convert_no_conversion; pfile->narrow_cset_desc.cd = (iconv_t) -1; retval = cpp_interpret_string (pfile, from, count, to, wide); pfile->narrow_cset_desc = save_narrow_cset_desc; return retval; } /* Subroutine of cpp_interpret_charconst which performs the conversion to a number, for narrow strings. STR is the string structure returned by cpp_interpret_string. PCHARS_SEEN and UNSIGNEDP are as for cpp_interpret_charconst. */ static cppchar_t narrow_str_to_charconst (cpp_reader *pfile, cpp_string str, unsigned int *pchars_seen, int *unsignedp) { size_t width = CPP_OPTION (pfile, char_precision); size_t max_chars = CPP_OPTION (pfile, int_precision) / width; size_t mask = width_to_mask (width); size_t i; cppchar_t result, c; bool unsigned_p; /* The value of a multi-character character constant, or a single-character character constant whose representation in the execution character set is more than one byte long, is implementation defined. This implementation defines it to be the number formed by interpreting the byte sequence in memory as a big-endian binary number. If overflow occurs, the high bytes are lost, and a warning is issued. We don't want to process the NUL terminator handed back by cpp_interpret_string. */ result = 0; for (i = 0; i < str.len - 1; i++) { c = str.text[i] & mask; if (width < BITS_PER_CPPCHAR_T) result = (result << width) | c; else result = c; } if (i > max_chars) { i = max_chars; cpp_error (pfile, CPP_DL_WARNING, "character constant too long for its type"); } else if (i > 1 && CPP_OPTION (pfile, warn_multichar)) cpp_error (pfile, CPP_DL_WARNING, "multi-character character constant"); /* Multichar constants are of type int and therefore signed. */ if (i > 1) unsigned_p = 0; else unsigned_p = CPP_OPTION (pfile, unsigned_char); /* Truncate the constant to its natural width, and simultaneously sign- or zero-extend to the full width of cppchar_t. For single-character constants, the value is WIDTH bits wide. For multi-character constants, the value is INT_PRECISION bits wide. */ if (i > 1) width = CPP_OPTION (pfile, int_precision); if (width < BITS_PER_CPPCHAR_T) { mask = ((cppchar_t) 1 << width) - 1; if (unsigned_p || !(result & (1 << (width - 1)))) result &= mask; else result |= ~mask; } *pchars_seen = i; *unsignedp = unsigned_p; return result; } /* Subroutine of cpp_interpret_charconst which performs the conversion to a number, for wide strings. STR is the string structure returned by cpp_interpret_string. PCHARS_SEEN and UNSIGNEDP are as for cpp_interpret_charconst. */ static cppchar_t wide_str_to_charconst (cpp_reader *pfile, cpp_string str, unsigned int *pchars_seen, int *unsignedp) { bool bigend = CPP_OPTION (pfile, bytes_big_endian); size_t width = CPP_OPTION (pfile, wchar_precision); size_t cwidth = CPP_OPTION (pfile, char_precision); size_t mask = width_to_mask (width); size_t cmask = width_to_mask (cwidth); size_t nbwc = width / cwidth; size_t off, i; cppchar_t result = 0, c; /* This is finicky because the string is in the target's byte order, which may not be our byte order. Only the last character, ignoring the NUL terminator, is relevant. */ off = str.len - (nbwc * 2); result = 0; for (i = 0; i < nbwc; i++) { c = bigend ? str.text[off + i] : str.text[off + nbwc - i - 1]; result = (result << cwidth) | (c & cmask); } /* Wide character constants have type wchar_t, and a single character exactly fills a wchar_t, so a multi-character wide character constant is guaranteed to overflow. */ if (off > 0) cpp_error (pfile, CPP_DL_WARNING, "character constant too long for its type"); /* Truncate the constant to its natural width, and simultaneously sign- or zero-extend to the full width of cppchar_t. */ if (width < BITS_PER_CPPCHAR_T) { if (CPP_OPTION (pfile, unsigned_wchar) || !(result & (1 << (width - 1)))) result &= mask; else result |= ~mask; } *unsignedp = CPP_OPTION (pfile, unsigned_wchar); *pchars_seen = 1; return result; } /* Interpret a (possibly wide) character constant in TOKEN. PCHARS_SEEN points to a variable that is filled in with the number of characters seen, and UNSIGNEDP to a variable that indicates whether the result has signed type. */ cppchar_t cpp_interpret_charconst (cpp_reader *pfile, const cpp_token *token, unsigned int *pchars_seen, int *unsignedp) { cpp_string str = { 0, 0 }; bool wide = (token->type == CPP_WCHAR); cppchar_t result; /* an empty constant will appear as L'' or '' */ if (token->val.str.len == (size_t) (2 + wide)) { cpp_error (pfile, CPP_DL_ERROR, "empty character constant"); return 0; } else if (!cpp_interpret_string (pfile, &token->val.str, 1, &str, wide)) return 0; if (wide) result = wide_str_to_charconst (pfile, str, pchars_seen, unsignedp); else result = narrow_str_to_charconst (pfile, str, pchars_seen, unsignedp); if (str.text != token->val.str.text) free ((void *)str.text); return result; } /* Convert an identifier denoted by ID and LEN, which might contain UCN escapes, to the source character set, either UTF-8 or UTF-EBCDIC. Assumes that the identifier is actually a valid identifier. */ cpp_hashnode * _cpp_interpret_identifier (cpp_reader *pfile, const uchar *id, size_t len) { /* It turns out that a UCN escape always turns into fewer characters than the escape itself, so we can allocate a temporary in advance. */ uchar * buf = (uchar *) alloca (len + 1); uchar * bufp = buf; size_t idp; for (idp = 0; idp < len; idp++) if (id[idp] != '\\') *bufp++ = id[idp]; else { unsigned length = id[idp+1] == 'u' ? 4 : 8; cppchar_t value = 0; size_t bufleft = len - (bufp - buf); int rval; idp += 2; while (length && idp < len && ISXDIGIT (id[idp])) { value = (value << 4) + hex_value (id[idp]); idp++; length--; } idp--; /* Special case for EBCDIC: if the identifier contains a '$' specified using a UCN, translate it to EBCDIC. */ if (value == 0x24) { *bufp++ = '$'; continue; } rval = one_cppchar_to_utf8 (value, &bufp, &bufleft); if (rval) { errno = rval; cpp_errno (pfile, CPP_DL_ERROR, "converting UCN to source character set"); break; } } return CPP_HASHNODE (ht_lookup (pfile->hash_table, buf, bufp - buf, HT_ALLOC)); } /* Convert an input buffer (containing the complete contents of one source file) from INPUT_CHARSET to the source character set. INPUT points to the input buffer, SIZE is its allocated size, and LEN is the length of the meaningful data within the buffer. The translated buffer is returned, and *ST_SIZE is set to the length of the meaningful data within the translated buffer. INPUT is expected to have been allocated with xmalloc. This function will either return INPUT, or free it and return a pointer to another xmalloc-allocated block of memory. */ uchar * _cpp_convert_input (cpp_reader *pfile, const char *input_charset, uchar *input, size_t size, size_t len, off_t *st_size) { struct cset_converter input_cset; struct _cpp_strbuf to; input_cset = init_iconv_desc (pfile, SOURCE_CHARSET, input_charset); if (input_cset.func == convert_no_conversion) { to.text = input; to.asize = size; to.len = len; } else { to.asize = MAX (65536, len); to.text = XNEWVEC (uchar, to.asize); to.len = 0; if (!APPLY_CONVERSION (input_cset, input, len, &to)) cpp_error (pfile, CPP_DL_ERROR, "failure to convert %s to %s", CPP_OPTION (pfile, input_charset), SOURCE_CHARSET); free (input); } /* Clean up the mess. */ if (input_cset.func == convert_using_iconv) iconv_close (input_cset.cd); /* Resize buffer if we allocated substantially too much, or if we haven't enough space for the \n-terminator. */ if (to.len + 4096 < to.asize || to.len >= to.asize) to.text = XRESIZEVEC (uchar, to.text, to.len + 1); /* If the file is using old-school Mac line endings (\r only), terminate with another \r, not an \n, so that we do not mistake the \r\n sequence for a single DOS line ending and erroneously issue the "No newline at end of file" diagnostic. */ if (to.len && to.text[to.len - 1] == '\r') to.text[to.len] = '\r'; else to.text[to.len] = '\n'; *st_size = to.len; return to.text; } /* Decide on the default encoding to assume for input files. */ const char * _cpp_default_encoding (void) { const char *current_encoding = NULL; /* We disable this because the default codeset is 7-bit ASCII on most platforms, and this causes conversion failures on every file in GCC that happens to have one of the upper 128 characters in it -- most likely, as part of the name of a contributor. We should definitely recognize in-band markers of file encoding, like: - the appropriate Unicode byte-order mark (FE FF) to recognize UTF16 and UCS4 (in both big-endian and little-endian flavors) and UTF8 - a "#i", "#d", "/ *", "//", " #p" or "#p" (for #pragma) to distinguish ASCII and EBCDIC. - now we can parse something like "#pragma GCC encoding on the first line, or even Emacs/VIM's mode line tags (there's a problem here in that VIM uses the last line, and Emacs has its more elaborate "local variables" convention). - investigate whether Java has another common convention, which would be friendly to support. (Zack Weinberg and Paolo Bonzini, May 20th 2004) */ #if defined (HAVE_LOCALE_H) && defined (HAVE_LANGINFO_CODESET) && 0 setlocale (LC_CTYPE, ""); current_encoding = nl_langinfo (CODESET); #endif if (current_encoding == NULL || *current_encoding == '\0') current_encoding = SOURCE_CHARSET; return current_encoding; } nescc-1.3.4/libcpp/config.in000066400000000000000000000203661177770303300156770ustar00rootroot00000000000000/* config.in. Generated from configure.ac by autoheader. */ /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* Define if you want more run-time sanity checks. */ #undef ENABLE_CHECKING /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the `clearerr_unlocked' function. */ #undef HAVE_CLEARERR_UNLOCKED /* Define to 1 if you have the declaration of `abort', and to 0 if you don't. */ #undef HAVE_DECL_ABORT /* Define to 1 if you have the declaration of `asprintf', and to 0 if you don't. */ #undef HAVE_DECL_ASPRINTF /* Define to 1 if you have the declaration of `basename', and to 0 if you don't. */ #undef HAVE_DECL_BASENAME /* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_CLEARERR_UNLOCKED /* Define to 1 if you have the declaration of `errno', and to 0 if you don't. */ #undef HAVE_DECL_ERRNO /* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FEOF_UNLOCKED /* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FERROR_UNLOCKED /* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FFLUSH_UNLOCKED /* Define to 1 if you have the declaration of `fgetc_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FGETC_UNLOCKED /* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FGETS_UNLOCKED /* Define to 1 if you have the declaration of `fileno_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FILENO_UNLOCKED /* Define to 1 if you have the declaration of `fprintf_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FPRINTF_UNLOCKED /* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FPUTC_UNLOCKED /* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FPUTS_UNLOCKED /* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FREAD_UNLOCKED /* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FWRITE_UNLOCKED /* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_GETCHAR_UNLOCKED /* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_GETC_UNLOCKED /* Define to 1 if you have the declaration of `getopt', and to 0 if you don't. */ #undef HAVE_DECL_GETOPT /* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_PUTCHAR_UNLOCKED /* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_PUTC_UNLOCKED /* Define to 1 if you have the declaration of `vasprintf', and to 0 if you don't. */ #undef HAVE_DECL_VASPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the `feof_unlocked' function. */ #undef HAVE_FEOF_UNLOCKED /* Define to 1 if you have the `ferror_unlocked' function. */ #undef HAVE_FERROR_UNLOCKED /* Define to 1 if you have the `fflush_unlocked' function. */ #undef HAVE_FFLUSH_UNLOCKED /* Define to 1 if you have the `fgetc_unlocked' function. */ #undef HAVE_FGETC_UNLOCKED /* Define to 1 if you have the `fgets_unlocked' function. */ #undef HAVE_FGETS_UNLOCKED /* Define to 1 if you have the `fileno_unlocked' function. */ #undef HAVE_FILENO_UNLOCKED /* Define to 1 if you have the `fprintf_unlocked' function. */ #undef HAVE_FPRINTF_UNLOCKED /* Define to 1 if you have the `fputc_unlocked' function. */ #undef HAVE_FPUTC_UNLOCKED /* Define to 1 if you have the `fputs_unlocked' function. */ #undef HAVE_FPUTS_UNLOCKED /* Define to 1 if you have the `fread_unlocked' function. */ #undef HAVE_FREAD_UNLOCKED /* Define to 1 if you have the `fwrite_unlocked' function. */ #undef HAVE_FWRITE_UNLOCKED /* Define to 1 if you have the `getchar_unlocked' function. */ #undef HAVE_GETCHAR_UNLOCKED /* Define to 1 if you have the `getc_unlocked' function. */ #undef HAVE_GETC_UNLOCKED /* Define if you have the iconv() function. */ #undef HAVE_ICONV /* Define to 1 if you have the header file. */ #undef HAVE_ICONV_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if you have and nl_langinfo(CODESET). */ #undef HAVE_LANGINFO_CODESET /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if libc includes obstacks. */ #undef HAVE_OBSTACK /* Define to 1 if you have the `putchar_unlocked' function. */ #undef HAVE_PUTCHAR_UNLOCKED /* Define to 1 if you have the `putc_unlocked' function. */ #undef HAVE_PUTC_UNLOCKED /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_FILE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define if defines \`uchar'. */ #undef HAVE_UCHAR /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the widest efficient host integer type at least as wide as the target's size_t type. */ #undef HOST_WIDE_INT /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST /* Define to the name of this package. */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT /* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define if you can safely include both and . */ #undef STRING_WITH_STRINGS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to `long int' if does not define. */ #undef off_t /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to `int' if does not define. */ #undef ssize_t nescc-1.3.4/libcpp/configure000077500000000000000000006440721177770303300160170ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68 for cpplib . # # Report bugs to . # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: nescc-bugs@lists.sourceforge.net about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='cpplib' PACKAGE_TARNAME='cpplib' PACKAGE_VERSION=' ' PACKAGE_STRING='cpplib ' PACKAGE_BUGREPORT='nescc-bugs@lists.sourceforge.net' PACKAGE_URL='' ac_unique_file="ucnid.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS MAINT USED_CATALOGS PACKAGE LTLIBICONV LIBICONV CATOBJEXT GENCAT INSTOBJEXT DATADIRNAME CATALOGS POSUB GMSGFMT XGETTEXT INCINTL LIBINTL_DEP LIBINTL USE_NLS ALLOCA LIBOBJS EGREP GREP CPP CCDEPMODE DEPDIR am__leading_dot WERROR WARN_PEDANTIC WARN_CFLAGS AUTOHEADER AUTOCONF ACLOCAL RANLIB OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM SET_MAKE target_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_werror_always with_gnu_ld enable_rpath with_libiconv_prefix enable_maintainer_mode enable_checking ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures cpplib to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/cpplib] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of cpplib :";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-werror-always enable -Werror despite compiler version --disable-rpath do not hardcode runtime library paths --enable-maintainer-mode enable rules only needed by maintainers --enable-checking enable expensive run-time checks Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld default=no --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF cpplib configure generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ----------------------------------------------- ## ## Report this to nescc-bugs@lists.sourceforge.net ## ## ----------------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES # --------------------------------------------- # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. ac_fn_c_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_decl cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by cpplib $as_me , which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in ../config-aux "$srcdir"/../config-aux; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in ../config-aux \"$srcdir\"/../config-aux" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 $as_echo_n "checking target system type... " >&6; } if ${ac_cv_target+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 $as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- # Checks for programs. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing for ac_prog in aclocal do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ACLOCAL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ACLOCAL"; then ac_cv_prog_ACLOCAL="$ACLOCAL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ACLOCAL="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ACLOCAL=$ac_cv_prog_ACLOCAL if test -n "$ACLOCAL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ACLOCAL" >&5 $as_echo "$ACLOCAL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ACLOCAL" && break done test -n "$ACLOCAL" || ACLOCAL="$MISSING aclocal" for ac_prog in autoconf do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AUTOCONF+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AUTOCONF"; then ac_cv_prog_AUTOCONF="$AUTOCONF" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AUTOCONF="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AUTOCONF=$ac_cv_prog_AUTOCONF if test -n "$AUTOCONF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AUTOCONF" >&5 $as_echo "$AUTOCONF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AUTOCONF" && break done test -n "$AUTOCONF" || AUTOCONF="$MISSING autoconf" for ac_prog in autoheader do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AUTOHEADER+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AUTOHEADER"; then ac_cv_prog_AUTOHEADER="$AUTOHEADER" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AUTOHEADER="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AUTOHEADER=$ac_cv_prog_AUTOHEADER if test -n "$AUTOHEADER"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AUTOHEADER" >&5 $as_echo "$AUTOHEADER" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AUTOHEADER" && break done test -n "$AUTOHEADER" || AUTOHEADER="$MISSING autoheader" # Figure out what compiler warnings we can enable. # See config/warnings.m4 for details. WARN_CFLAGS= save_CFLAGS="$CFLAGS" for option in -W -Wall -Wwrite-strings -Wstrict-prototypes \ -Wmissing-prototypes -Wold-style-definition \ -Wmissing-format-attribute; do as_acx_Woption=`$as_echo "acx_cv_prog_cc_warning_$option" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $option" >&5 $as_echo_n "checking whether $CC supports $option... " >&6; } if eval \${$as_acx_Woption+:} false; then : $as_echo_n "(cached) " >&6 else CFLAGS="$option" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_acx_Woption=yes" else eval "$as_acx_Woption=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_acx_Woption { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if test `eval 'as_val=${'$as_acx_Woption'};$as_echo "$as_val"'` = yes; then : WARN_CFLAGS="$WARN_CFLAGS${WARN_CFLAGS:+ }$option" fi done CFLAGS="$save_CFLAGS" WARN_PEDANTIC= if test "$GCC" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -pedantic -Wno-long-long" >&5 $as_echo_n "checking whether $CC supports -pedantic -Wno-long-long... " >&6; } if ${acx_cv_prog_cc_pedantic__Wno_long_long+:} false; then : $as_echo_n "(cached) " >&6 else save_CFLAGS="$CFLAGS" CFLAGS="-pedantic -Wno-long-long" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : acx_cv_prog_cc_pedantic__Wno_long_long=yes else acx_cv_prog_cc_pedantic__Wno_long_long=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_prog_cc_pedantic__Wno_long_long" >&5 $as_echo "$acx_cv_prog_cc_pedantic__Wno_long_long" >&6; } if test $acx_cv_prog_cc_pedantic__Wno_long_long = yes; then : WARN_PEDANTIC="$WARN_PEDANTIC${WARN_PEDANTIC:+ }-pedantic -Wno-long-long" fi fi # Only enable with --enable-werror-always until existing warnings are # corrected. WERROR= # Check whether --enable-werror-always was given. if test "${enable_werror_always+set}" = set; then : enableval=$enable_werror_always; else enable_werror_always=no fi if test $enable_werror_always = yes; then : WERROR="$WERROR${WERROR:+ }-Werror" fi # Dependency checking. rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depdir" depcc="$CC" am_compiler_list= am_depcomp=$ac_aux_dir/depcomp { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do if test $depmode = none; then break; fi $as_echo "$as_me:$LINENO: trying $depmode" >&5 # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "include sub/conftest.Po" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. depcmd="depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c" echo "| $depcmd" | sed -e 's/ */ /g' >&5 if env $depcmd > conftest.err 2>&1 && grep sub/conftst6.h sub/conftest.Po >>conftest.err 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po >>conftest.err 2>&1 && ${MAKE-make} -s -f confmf >>conftest.err 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode $as_echo "$as_me:$LINENO: success" >&5 break fi fi $as_echo "$as_me:$LINENO: failure, diagnostics are:" >&5 sed -e 's/^/| /' < conftest.err >&5 done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } if test x${am_cv_CC_dependencies_compiler_type-none} = xnone then as_fn_error $? "no usable dependency style found" "$LINENO" 5 else CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type fi # Checks for header files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if ${ac_cv_header_time+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether string.h and strings.h may both be included" >&5 $as_echo_n "checking whether string.h and strings.h may both be included... " >&6; } if ${gcc_cv_header_string+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gcc_cv_header_string=yes else gcc_cv_header_string=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_header_string" >&5 $as_echo "$gcc_cv_header_string" >&6; } if test $gcc_cv_header_string = yes; then $as_echo "#define STRING_WITH_STRINGS 1" >>confdefs.h fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in iconv.h locale.h fcntl.h limits.h stddef.h \ stdlib.h strings.h string.h sys/file.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Checks for typedefs, structures, and compiler characteristics. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset cs; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for obstacks" >&5 $as_echo_n "checking for obstacks... " >&6; } if ${ac_cv_func_obstack+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #include "obstack.h" int main () { struct obstack mem; #define obstack_chunk_alloc malloc #define obstack_chunk_free free obstack_init (&mem); obstack_free (&mem, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_obstack=yes else ac_cv_func_obstack=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_obstack" >&5 $as_echo "$ac_cv_func_obstack" >&6; } if test $ac_cv_func_obstack = yes; then $as_echo "#define HAVE_OBSTACK 1" >>confdefs.h else case " $LIBOBJS " in *" obstack.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS obstack.$ac_objext" ;; esac fi ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define off_t long int _ACEOF fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" if test "x$ac_cv_type_ssize_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define ssize_t int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } if ${ac_cv_struct_tm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_tm=time.h else ac_cv_struct_tm=sys/time.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 $as_echo "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then $as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 $as_echo_n "checking size of int... " >&6; } if ${ac_cv_sizeof_int+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : else if test "$ac_cv_type_int" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_int=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 $as_echo "$ac_cv_sizeof_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 $as_echo_n "checking size of long... " >&6; } if ${ac_cv_sizeof_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 $as_echo "$ac_cv_sizeof_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF for ac_func in clearerr_unlocked feof_unlocked ferror_unlocked fflush_unlocked fgetc_unlocked fgets_unlocked fileno_unlocked fprintf_unlocked fputc_unlocked fputs_unlocked fread_unlocked fwrite_unlocked getchar_unlocked getc_unlocked putchar_unlocked putc_unlocked do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_decl "$LINENO" "abort" "ac_cv_have_decl_abort" "$ac_includes_default" if test "x$ac_cv_have_decl_abort" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_ABORT $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "asprintf" "ac_cv_have_decl_asprintf" "$ac_includes_default" if test "x$ac_cv_have_decl_asprintf" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_ASPRINTF $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "basename" "ac_cv_have_decl_basename" "$ac_includes_default" if test "x$ac_cv_have_decl_basename" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_BASENAME $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "errno" "ac_cv_have_decl_errno" "$ac_includes_default" if test "x$ac_cv_have_decl_errno" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_ERRNO $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "getopt" "ac_cv_have_decl_getopt" "$ac_includes_default" if test "x$ac_cv_have_decl_getopt" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETOPT $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "clearerr_unlocked" "ac_cv_have_decl_clearerr_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_clearerr_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_CLEARERR_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "feof_unlocked" "ac_cv_have_decl_feof_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_feof_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FEOF_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "ferror_unlocked" "ac_cv_have_decl_ferror_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_ferror_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FERROR_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "fflush_unlocked" "ac_cv_have_decl_fflush_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_fflush_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FFLUSH_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "fgetc_unlocked" "ac_cv_have_decl_fgetc_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_fgetc_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FGETC_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_fgets_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FGETS_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "fileno_unlocked" "ac_cv_have_decl_fileno_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_fileno_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FILENO_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "fprintf_unlocked" "ac_cv_have_decl_fprintf_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_fprintf_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FPRINTF_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "fputc_unlocked" "ac_cv_have_decl_fputc_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_fputc_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FPUTC_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "fputs_unlocked" "ac_cv_have_decl_fputs_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_fputs_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FPUTS_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "fread_unlocked" "ac_cv_have_decl_fread_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_fread_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FREAD_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "fwrite_unlocked" "ac_cv_have_decl_fwrite_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_fwrite_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FWRITE_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "getchar_unlocked" "ac_cv_have_decl_getchar_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_getchar_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETCHAR_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETC_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "putchar_unlocked" "ac_cv_have_decl_putchar_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_putchar_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PUTCHAR_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "putc_unlocked" "ac_cv_have_decl_putc_unlocked" "$ac_includes_default" if test "x$ac_cv_have_decl_putc_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PUTC_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default" if test "x$ac_cv_have_decl_vasprintf" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_VASPRINTF $ac_have_decl _ACEOF # Checks for library functions. # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 $as_echo_n "checking for working alloca.h... " >&6; } if ${ac_cv_working_alloca_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_working_alloca_h=yes else ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 $as_echo "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then $as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 $as_echo_n "checking for alloca... " >&6; } if ${ac_cv_func_alloca_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # ifdef HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ void *alloca (size_t); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_alloca_works=yes else ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 $as_echo "$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then $as_echo "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext $as_echo "#define C_ALLOCA 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } if ${ac_cv_os_cray+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then : ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 $as_echo "$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 $as_echo_n "checking stack direction for C alloca... " >&6; } if ${ac_cv_c_stack_direction+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_c_stack_direction=0 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction () { static char *addr = 0; auto char dummy; if (addr == 0) { addr = &dummy; return find_stack_direction (); } else return (&dummy > addr) ? 1 : -1; } int main () { return find_stack_direction () < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_stack_direction=1 else ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 $as_echo "$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 $as_echo_n "checking for nl_langinfo and CODESET... " >&6; } if ${am_cv_langinfo_codeset+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char* cs = nl_langinfo(CODESET); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_langinfo_codeset=yes else am_cv_langinfo_codeset=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 $as_echo "$am_cv_langinfo_codeset" >&6; } if test $am_cv_langinfo_codeset = yes; then $as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h fi # If we haven't got the data from the intl directory, # assume NLS is disabled. USE_NLS=no LIBINTL= LIBINTL_DEP= INCINTL= XGETTEXT= GMSGFMT= POSUB= if test -f ../intl/config.intl; then . ../intl/config.intl fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } if test x"$USE_NLS" != xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define ENABLE_NLS 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } # Look for .po and .gmo files in the source directory. CATALOGS= XLINGUAS= for cat in $srcdir/po/*.gmo $srcdir/po/*.po; do # If there aren't any .gmo files the shell will give us the # literal string "../path/to/srcdir/po/*.gmo" which has to be # weeded out. case "$cat" in *\**) continue;; esac # The quadruple backslash is collapsed to a double backslash # by the backticks, then collapsed again by the double quotes, # leaving us with one backslash in the sed expression (right # before the dot that mustn't act as a wildcard). cat=`echo $cat | sed -e "s!$srcdir/po/!!" -e "s!\\\\.po!.gmo!"` lang=`echo $cat | sed -e "s!\\\\.gmo!!"` # The user is allowed to set LINGUAS to a list of languages to # install catalogs for. If it's empty that means "all of them." if test "x$LINGUAS" = x; then CATALOGS="$CATALOGS $cat" XLINGUAS="$XLINGUAS $lang" else case "$LINGUAS" in *$lang*) CATALOGS="$CATALOGS $cat" XLINGUAS="$XLINGUAS $lang" ;; esac fi done LINGUAS="$XLINGUAS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } DATADIRNAME=share INSTOBJEXT=.mo GENCAT=gencat CATOBJEXT=.gmo fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uchar" >&5 $as_echo_n "checking for uchar... " >&6; } if ${gcc_cv_type_uchar+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { if ((uchar *)0) return 0; if (sizeof(uchar)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_uchar=yes else ac_cv_type_uchar=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_type_uchar" >&5 $as_echo "$gcc_cv_type_uchar" >&6; } if test $ac_cv_type_uchar = yes; then $as_echo "#define HAVE_UCHAR 1" >>confdefs.h fi if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 $as_echo_n "checking for ld used by GCC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$acl_cv_path_LD" if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${acl_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then acl_cv_prog_gnu_ld=yes else acl_cv_prog_gnu_ld=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if ${acl_cv_rpath+:} false; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" hardcode_direct="$acl_cv_hardcode_direct" hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi fi LIBICONV= LTLIBICONV= INCICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if ${am_cv_func_iconv+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 $as_echo_n "checking for iconv declaration... " >&6; } if ${am_cv_proto_iconv+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_cv_proto_iconv_arg1="" else am_cv_proto_iconv_arg1="const" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" fi am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_t:- }$am_cv_proto_iconv" >&5 $as_echo "${ac_t:- }$am_cv_proto_iconv" >&6; } cat >>confdefs.h <<_ACEOF #define ICONV_CONST $am_cv_proto_iconv_arg1 _ACEOF fi # More defines and substitutions. PACKAGE="$PACKAGE_TARNAME" cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF if test "x$enable_nls" != xno; then USED_CATALOGS='$(CATALOGS)' else USED_CATALOGS= fi # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; else enable_maintainer_mode=no fi if test "x$enable_maintainer_mode" = xno; then MAINT='#' else MAINT= fi # Check whether --enable-checking was given. if test "${enable_checking+set}" = set; then : enableval=$enable_checking; else enable_checking=no fi if test $enable_checking != no ; then $as_echo "#define ENABLE_CHECKING 1" >>confdefs.h fi case $target in alpha*-*-* | \ arm*-*-*eabi* | \ arm*-*-symbianelf* | \ x86_64-*-* | \ ia64-*-* | \ hppa*64*-*-* | parisc*64*-*-* | \ i[34567]86-*-darwin* | \ i[34567]86-*-solaris2.1[0-9]* | \ mips*-*-* | \ mmix-*-* | \ powerpc*-*-* | \ rs6000*-*-* | \ s390*-*-* | \ sparc64*-*-* | ultrasparc-*-freebsd* | \ sparcv9-*-solaris2* | \ sparc-*-solaris2.[789] | sparc-*-solaris2.1[0-9]* | \ spu-*-* | \ sh[123456789l]*-*-*) need_64bit_hwint=yes ;; i[34567]86-*-linux*) if test "x$enable_targets" = xall; then need_64bit_hwint=yes else need_64bit_hwint=no fi ;; *) need_64bit_hwint=no ;; esac case $need_64bit_hwint:$ac_cv_sizeof_long in *:8 | no:*) host_wide_int=long ;; *) host_wide_int='long long' ;; esac cat >>confdefs.h <<_ACEOF #define HOST_WIDE_INT long long _ACEOF # Output. ac_config_headers="$ac_config_headers config.h:config.in" ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by cpplib $as_me , which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ cpplib config.status configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # ac_aux_dir=$ac_aux_dir DEPDIR=$DEPDIR _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depdir") CONFIG_COMMANDS="$CONFIG_COMMANDS depdir" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depdir":C) $SHELL $ac_aux_dir/mkinstalldirs $DEPDIR ;; "config.h":H) echo timestamp > stamp-h1 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi nescc-1.3.4/libcpp/configure.ac000066400000000000000000000101451177770303300163620ustar00rootroot00000000000000# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) AC_INIT(cpplib, [ ], nescc-bugs@lists.sourceforge.net, cpplib) AC_CONFIG_SRCDIR(ucnid.h) AC_CONFIG_AUX_DIR(../config-aux) AC_CONFIG_MACRO_DIR(../config-aux) AC_CANONICAL_SYSTEM # Checks for programs. AC_PROG_MAKE_SET AC_PROG_INSTALL AC_PROG_CC AC_PROG_RANLIB MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing AC_CHECK_PROGS([ACLOCAL], [aclocal], [$MISSING aclocal]) AC_CHECK_PROGS([AUTOCONF], [autoconf], [$MISSING autoconf]) AC_CHECK_PROGS([AUTOHEADER], [autoheader], [$MISSING autoheader]) # Figure out what compiler warnings we can enable. # See config/warnings.m4 for details. ACX_PROG_CC_WARNING_OPTS([-W -Wall -Wwrite-strings -Wstrict-prototypes \ -Wmissing-prototypes -Wold-style-definition \ -Wmissing-format-attribute]) ACX_PROG_CC_WARNING_ALMOST_PEDANTIC([-Wno-long-long]) # Only enable with --enable-werror-always until existing warnings are # corrected. ACX_PROG_CC_WARNINGS_ARE_ERRORS([manual]) # Dependency checking. ZW_CREATE_DEPDIR ZW_PROG_COMPILER_DEPENDENCIES([CC]) # Checks for header files. AC_HEADER_TIME ACX_HEADER_STRING AC_CHECK_HEADERS(iconv.h locale.h fcntl.h limits.h stddef.h \ stdlib.h strings.h string.h sys/file.h unistd.h) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE AC_FUNC_OBSTACK AC_TYPE_OFF_T AC_TYPE_SIZE_T AC_CHECK_TYPE(ssize_t, int) AC_STRUCT_TM AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) define(libcpp_UNLOCKED_FUNCS, clearerr_unlocked feof_unlocked dnl ferror_unlocked fflush_unlocked fgetc_unlocked fgets_unlocked dnl fileno_unlocked fprintf_unlocked fputc_unlocked fputs_unlocked dnl fread_unlocked fwrite_unlocked getchar_unlocked getc_unlocked dnl putchar_unlocked putc_unlocked) AC_CHECK_FUNCS(libcpp_UNLOCKED_FUNCS) AC_CHECK_DECLS(m4_split(m4_normalize(abort asprintf basename errno getopt \ libcpp_UNLOCKED_FUNCS vasprintf))) # Checks for library functions. AC_FUNC_ALLOCA AC_HEADER_STDC AM_LANGINFO_CODESET ZW_GNU_GETTEXT_SISTER_DIR AC_CACHE_CHECK(for uchar, gcc_cv_type_uchar, [AC_TRY_COMPILE([ #include ], [if ((uchar *)0) return 0; if (sizeof(uchar)) return 0;], ac_cv_type_uchar=yes, ac_cv_type_uchar=no)]) if test $ac_cv_type_uchar = yes; then AC_DEFINE(HAVE_UCHAR, 1, [Define if defines \`uchar'.]) fi AM_ICONV # More defines and substitutions. PACKAGE="$PACKAGE_TARNAME" AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Define to the name of this package.]) AC_SUBST(PACKAGE) if test "x$enable_nls" != xno; then USED_CATALOGS='$(CATALOGS)' else USED_CATALOGS= fi AC_SUBST(USED_CATALOGS) AC_ARG_ENABLE(maintainer-mode, [ --enable-maintainer-mode enable rules only needed by maintainers],, enable_maintainer_mode=no) if test "x$enable_maintainer_mode" = xno; then MAINT='#' else MAINT= fi AC_SUBST(MAINT) AC_ARG_ENABLE(checking, [ --enable-checking enable expensive run-time checks],, enable_checking=no) if test $enable_checking != no ; then AC_DEFINE(ENABLE_CHECKING, 1, [Define if you want more run-time sanity checks.]) fi m4_changequote(,) case $target in alpha*-*-* | \ arm*-*-*eabi* | \ arm*-*-symbianelf* | \ x86_64-*-* | \ ia64-*-* | \ hppa*64*-*-* | parisc*64*-*-* | \ i[34567]86-*-darwin* | \ i[34567]86-*-solaris2.1[0-9]* | \ mips*-*-* | \ mmix-*-* | \ powerpc*-*-* | \ rs6000*-*-* | \ s390*-*-* | \ sparc64*-*-* | ultrasparc-*-freebsd* | \ sparcv9-*-solaris2* | \ sparc-*-solaris2.[789] | sparc-*-solaris2.1[0-9]* | \ spu-*-* | \ sh[123456789l]*-*-*) need_64bit_hwint=yes ;; i[34567]86-*-linux*) if test "x$enable_targets" = xall; then need_64bit_hwint=yes else need_64bit_hwint=no fi ;; *) need_64bit_hwint=no ;; esac case $need_64bit_hwint:$ac_cv_sizeof_long in *:8 | no:*) host_wide_int=long ;; *) host_wide_int='long long' ;; esac m4_changequote([,]) AC_DEFINE_UNQUOTED(HOST_WIDE_INT, long long, [Define to the widest efficient host integer type at least as wide as the target's size_t type.]) # Output. AC_CONFIG_HEADERS(config.h:config.in, [echo timestamp > stamp-h1]) AC_CONFIG_FILES(Makefile) AC_OUTPUT nescc-1.3.4/libcpp/directives-only.c000066400000000000000000000140441177770303300173620ustar00rootroot00000000000000/* CPP Library - directive only preprocessing for distributed compilation. Copyright (C) 2007 Free Software Foundation, Inc. Contributed by Ollie Wild . This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "system.h" #include "cpplib.h" #include "internal.h" /* DO (Directive only) flags. */ #define DO_BOL (1 << 0) /* At the beginning of a logical line. */ #define DO_STRING (1 << 1) /* In a string constant. */ #define DO_CHAR (1 << 2) /* In a character constant. */ #define DO_BLOCK_COMMENT (1 << 3) /* In a block comment. */ #define DO_LINE_COMMENT (1 << 4) /* In a single line "//-style" comment. */ #define DO_LINE_SPECIAL (DO_STRING | DO_CHAR | DO_LINE_COMMENT) #define DO_SPECIAL (DO_LINE_SPECIAL | DO_BLOCK_COMMENT) /* Writes out the preprocessed file, handling spacing and paste avoidance issues. */ void _cpp_preprocess_dir_only (cpp_reader *pfile, const struct _cpp_dir_only_callbacks *cb) { struct cpp_buffer *buffer; const unsigned char *cur, *base, *next_line, *rlimit; cppchar_t c, last_c; unsigned flags; int lines, col; source_location loc; restart: /* Buffer initialization ala _cpp_clean_line(). */ buffer = pfile->buffer; buffer->cur_note = buffer->notes_used = 0; buffer->cur = buffer->line_base = buffer->next_line; buffer->need_line = false; /* This isn't really needed. It prevents a compiler warning, though. */ loc = pfile->line_table->highest_line; /* Scan initialization. */ next_line = cur = base = buffer->cur; rlimit = buffer->rlimit; flags = DO_BOL; lines = 0; col = 1; for (last_c = '\n', c = *cur; cur < rlimit; last_c = c, c = *++cur, ++col) { /* Skip over escaped newlines. */ if (__builtin_expect (c == '\\', false)) { const unsigned char *tmp = cur + 1; while (is_nvspace (*tmp) && tmp < rlimit) tmp++; if (*tmp == '\r') tmp++; if (*tmp == '\n' && tmp < rlimit) { CPP_INCREMENT_LINE (pfile, 0); lines++; col = 0; cur = tmp; c = last_c; continue; } } if (__builtin_expect (last_c == '#', false) && !(flags & DO_SPECIAL)) { if (c != '#' && (flags & DO_BOL)) { struct line_maps *line_table; if (!pfile->state.skipping && next_line != base) cb->print_lines (lines, base, next_line - base); /* Prep things for directive handling. */ buffer->next_line = cur; buffer->need_line = true; _cpp_get_fresh_line (pfile); /* Ensure proper column numbering for generated error messages. */ buffer->line_base -= col - 1; _cpp_handle_directive (pfile, 0 /* ignore indented */); /* Sanitize the line settings. Duplicate #include's can mess things up. */ line_table = pfile->line_table; line_table->highest_location = line_table->highest_line; /* The if block prevents us from outputing line information when the file ends with a directive and no newline. Note that we must use pfile->buffer, not buffer. */ if (pfile->buffer->next_line < pfile->buffer->rlimit) cb->maybe_print_line (pfile->line_table->highest_line); goto restart; } flags &= ~DO_BOL; pfile->mi_valid = false; } else if (__builtin_expect (last_c == '/', false) \ && !(flags & DO_SPECIAL) && c != '*' && c != '/') { /* If a previous slash is not starting a block comment, clear the DO_BOL flag. */ flags &= ~DO_BOL; pfile->mi_valid = false; } switch (c) { case '/': if ((flags & DO_BLOCK_COMMENT) && last_c == '*') { flags &= ~DO_BLOCK_COMMENT; c = 0; } else if (!(flags & DO_SPECIAL) && last_c == '/') flags |= DO_LINE_COMMENT; else if (!(flags & DO_SPECIAL)) /* Mark the position for possible error reporting. */ LINEMAP_POSITION_FOR_COLUMN (loc, pfile->line_table, col); break; case '*': if (!(flags & DO_SPECIAL)) { if (last_c == '/') flags |= DO_BLOCK_COMMENT; else { flags &= ~DO_BOL; pfile->mi_valid = false; } } break; case '\'': case '"': { unsigned state = (c == '"') ? DO_STRING : DO_CHAR; if (!(flags & DO_SPECIAL)) { flags |= state; flags &= ~DO_BOL; pfile->mi_valid = false; } else if ((flags & state) && last_c != '\\') flags &= ~state; break; } case '\\': { if ((flags & (DO_STRING | DO_CHAR)) && last_c == '\\') c = 0; if (!(flags & DO_SPECIAL)) { flags &= ~DO_BOL; pfile->mi_valid = false; } break; } case '\n': CPP_INCREMENT_LINE (pfile, 0); lines++; col = 0; flags &= ~DO_LINE_SPECIAL; if (!(flags & DO_SPECIAL)) flags |= DO_BOL; break; case '#': next_line = cur; /* Don't update DO_BOL yet. */ break; case ' ': case '\t': case '\f': case '\v': case '\0': break; default: if (!(flags & DO_SPECIAL)) { flags &= ~DO_BOL; pfile->mi_valid = false; } break; } } if (flags & DO_BLOCK_COMMENT) cpp_error_with_line (pfile, CPP_DL_ERROR, loc, 0, "unterminated comment"); if (!pfile->state.skipping && cur != base) { /* If the file was not newline terminated, add rlimit, which is guaranteed to point to a newline, to the end of our range. */ if (cur[-1] != '\n') { cur++; CPP_INCREMENT_LINE (pfile, 0); lines++; } cb->print_lines (lines, base, cur - base); } _cpp_pop_buffer (pfile); if (pfile->buffer) goto restart; } nescc-1.3.4/libcpp/directives.c000066400000000000000000002032141177770303300164020ustar00rootroot00000000000000/* CPP Library. (Directive handling.) Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. Contributed by Per Bothner, 1994-95. Based on CCCP program by Paul Rubin, June 1986 Adapted to ANSI C, Richard Stallman, Jan 1987 This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "system.h" #include "cpplib.h" #include "internal.h" #include "mkdeps.h" #include "obstack.h" /* Stack of conditionals currently in progress (including both successful and failing conditionals). */ struct if_stack { struct if_stack *next; unsigned int line; /* Line where condition started. */ const cpp_hashnode *mi_cmacro;/* macro name for #ifndef around entire file */ bool skip_elses; /* Can future #else / #elif be skipped? */ bool was_skipping; /* If were skipping on entry. */ int type; /* Most recent conditional for diagnostics. */ }; /* Contains a registered pragma or pragma namespace. */ typedef void (*pragma_cb) (cpp_reader *); struct pragma_entry { struct pragma_entry *next; const cpp_hashnode *pragma; /* Name and length. */ bool is_nspace; bool is_internal; bool is_deferred; bool allow_expansion; union { pragma_cb handler; struct pragma_entry *space; unsigned int ident; } u; }; /* Values for the origin field of struct directive. KANDR directives come from traditional (K&R) C. STDC89 directives come from the 1989 C standard. EXTENSION directives are extensions. */ #define KANDR 0 #define STDC89 1 #define EXTENSION 2 /* Values for the flags field of struct directive. COND indicates a conditional; IF_COND an opening conditional. INCL means to treat "..." and <...> as q-char and h-char sequences respectively. IN_I means this directive should be handled even if -fpreprocessed is in effect (these are the directives with callback hooks). EXPAND is set on directives that are always macro-expanded. */ #define COND (1 << 0) #define IF_COND (1 << 1) #define INCL (1 << 2) #define IN_I (1 << 3) #define EXPAND (1 << 4) /* Defines one #-directive, including how to handle it. */ typedef void (*directive_handler) (cpp_reader *); typedef struct directive directive; struct directive { directive_handler handler; /* Function to handle directive. */ const uchar *name; /* Name of directive. */ unsigned short length; /* Length of name. */ unsigned char origin; /* Origin of directive. */ unsigned char flags; /* Flags describing this directive. */ }; /* Forward declarations. */ static void skip_rest_of_line (cpp_reader *); static void check_eol (cpp_reader *); static void start_directive (cpp_reader *); static void prepare_directive_trad (cpp_reader *); static void end_directive (cpp_reader *, int); static void directive_diagnostics (cpp_reader *, const directive *, int); static void run_directive (cpp_reader *, int, const char *, size_t); static char *glue_header_name (cpp_reader *); static const char *parse_include (cpp_reader *, int *, const cpp_token ***); static void push_conditional (cpp_reader *, int, int, const cpp_hashnode *); static unsigned int read_flag (cpp_reader *, unsigned int); static int strtoul_for_line (const uchar *, unsigned int, unsigned long *); static void do_diagnostic (cpp_reader *, int, int); static cpp_hashnode *lex_macro_node (cpp_reader *, bool); static int undefine_macros (cpp_reader *, cpp_hashnode *, void *); static void do_include_common (cpp_reader *, enum include_type); static struct pragma_entry *lookup_pragma_entry (struct pragma_entry *, const cpp_hashnode *); static int count_registered_pragmas (struct pragma_entry *); static char ** save_registered_pragmas (struct pragma_entry *, char **); static char ** restore_registered_pragmas (cpp_reader *, struct pragma_entry *, char **); static void do_pragma_once (cpp_reader *); static void do_pragma_poison (cpp_reader *); static void do_pragma_system_header (cpp_reader *); static void do_pragma_dependency (cpp_reader *); static void do_linemarker (cpp_reader *); static const cpp_token *get_token_no_padding (cpp_reader *); static const cpp_token *get__Pragma_string (cpp_reader *); static void destringize_and_run (cpp_reader *, const cpp_string *); static int parse_answer (cpp_reader *, struct answer **, int); static cpp_hashnode *parse_assertion (cpp_reader *, struct answer **, int); static struct answer ** find_answer (cpp_hashnode *, const struct answer *); static void handle_assertion (cpp_reader *, const char *, int); /* This is the table of directive handlers. It is ordered by frequency of occurrence; the numbers at the end are directive counts from all the source code I have lying around (egcs and libc CVS as of 1999-05-18, plus grub-0.5.91, linux-2.2.9, and pcmcia-cs-3.0.9). This is no longer important as directive lookup is now O(1). All extensions other than #warning and #include_next are deprecated. The name is where the extension appears to have come from. */ #define DIRECTIVE_TABLE \ D(define, T_DEFINE = 0, KANDR, IN_I) /* 270554 */ \ D(include, T_INCLUDE, KANDR, INCL | EXPAND) /* 52262 */ \ D(endif, T_ENDIF, KANDR, COND) /* 45855 */ \ D(ifdef, T_IFDEF, KANDR, COND | IF_COND) /* 22000 */ \ D(if, T_IF, KANDR, COND | IF_COND | EXPAND) /* 18162 */ \ D(else, T_ELSE, KANDR, COND) /* 9863 */ \ D(ifndef, T_IFNDEF, KANDR, COND | IF_COND) /* 9675 */ \ D(undef, T_UNDEF, KANDR, IN_I) /* 4837 */ \ D(line, T_LINE, KANDR, EXPAND) /* 2465 */ \ D(elif, T_ELIF, STDC89, COND | EXPAND) /* 610 */ \ D(error, T_ERROR, STDC89, 0) /* 475 */ \ D(pragma, T_PRAGMA, STDC89, IN_I) /* 195 */ \ D(warning, T_WARNING, EXTENSION, 0) /* 22 */ \ D(include_next, T_INCLUDE_NEXT, EXTENSION, INCL | EXPAND) /* 19 */ \ D(ident, T_IDENT, EXTENSION, IN_I) /* 11 */ \ D(import, T_IMPORT, EXTENSION, INCL | EXPAND) /* 0 ObjC */ \ D(assert, T_ASSERT, EXTENSION, 0) /* 0 SVR4 */ \ D(unassert, T_UNASSERT, EXTENSION, 0) /* 0 SVR4 */ \ D(sccs, T_SCCS, EXTENSION, IN_I) /* 0 SVR4? */ /* #sccs is synonymous with #ident. */ #define do_sccs do_ident /* Use the table to generate a series of prototypes, an enum for the directive names, and an array of directive handlers. */ #define D(name, t, o, f) static void do_##name (cpp_reader *); DIRECTIVE_TABLE #undef D #define D(n, tag, o, f) tag, enum { DIRECTIVE_TABLE N_DIRECTIVES }; #undef D #define D(name, t, origin, flags) \ { do_##name, (const uchar *) #name, \ sizeof #name - 1, origin, flags }, static const directive dtable[] = { DIRECTIVE_TABLE }; #undef D #undef DIRECTIVE_TABLE /* Wrapper struct directive for linemarkers. The origin is more or less true - the original K+R cpp did use this notation in its preprocessed output. */ static const directive linemarker_dir = { do_linemarker, U"#", 1, KANDR, IN_I }; #define SEEN_EOL() (pfile->cur_token[-1].type == CPP_EOF) /* Skip any remaining tokens in a directive. */ static void skip_rest_of_line (cpp_reader *pfile) { /* Discard all stacked contexts. */ while (pfile->context->prev) _cpp_pop_context (pfile); /* Sweep up all tokens remaining on the line. */ if (! SEEN_EOL ()) while (_cpp_lex_token (pfile)->type != CPP_EOF) ; } /* Ensure there are no stray tokens at the end of a directive. */ static void check_eol (cpp_reader *pfile) { if (! SEEN_EOL () && _cpp_lex_token (pfile)->type != CPP_EOF) cpp_error (pfile, CPP_DL_PEDWARN, "extra tokens at end of #%s directive", pfile->directive->name); } /* Ensure there are no stray tokens other than comments at the end of a directive, and gather the comments. */ static const cpp_token ** check_eol_return_comments (cpp_reader *pfile) { size_t c; size_t capacity = 8; const cpp_token **buf; buf = XNEWVEC (const cpp_token *, capacity); c = 0; if (! SEEN_EOL ()) { while (1) { const cpp_token *tok; tok = _cpp_lex_token (pfile); if (tok->type == CPP_EOF) break; if (tok->type != CPP_COMMENT) cpp_error (pfile, CPP_DL_PEDWARN, "extra tokens at end of #%s directive", pfile->directive->name); else { if (c + 1 >= capacity) { capacity *= 2; buf = XRESIZEVEC (const cpp_token *, buf, capacity); } buf[c] = tok; ++c; } } } buf[c] = NULL; return buf; } /* Called when entering a directive, _Pragma or command-line directive. */ static void start_directive (cpp_reader *pfile) { /* Setup in-directive state. */ pfile->state.in_directive = 1; pfile->state.save_comments = 0; pfile->directive_result.type = CPP_PADDING; /* Some handlers need the position of the # for diagnostics. */ pfile->directive_line = pfile->line_table->highest_line; } /* Called when leaving a directive, _Pragma or command-line directive. */ static void end_directive (cpp_reader *pfile, int skip_line) { if (pfile->state.in_deferred_pragma) ; else if (CPP_OPTION (pfile, traditional)) { /* Revert change of prepare_directive_trad. */ pfile->state.prevent_expansion--; if (pfile->directive != &dtable[T_DEFINE]) _cpp_remove_overlay (pfile); } /* We don't skip for an assembler #. */ else if (skip_line) { skip_rest_of_line (pfile); if (!pfile->keep_tokens) { pfile->cur_run = &pfile->base_run; pfile->cur_token = pfile->base_run.base; } } /* Restore state. */ pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments); pfile->state.in_directive = 0; pfile->state.in_expression = 0; pfile->state.angled_headers = 0; pfile->directive = 0; } /* Prepare to handle the directive in pfile->directive. */ static void prepare_directive_trad (cpp_reader *pfile) { if (pfile->directive != &dtable[T_DEFINE]) { bool no_expand = (pfile->directive && ! (pfile->directive->flags & EXPAND)); bool was_skipping = pfile->state.skipping; pfile->state.in_expression = (pfile->directive == &dtable[T_IF] || pfile->directive == &dtable[T_ELIF]); if (pfile->state.in_expression) pfile->state.skipping = false; if (no_expand) pfile->state.prevent_expansion++; _cpp_scan_out_logical_line (pfile, NULL); if (no_expand) pfile->state.prevent_expansion--; pfile->state.skipping = was_skipping; _cpp_overlay_buffer (pfile, pfile->out.base, pfile->out.cur - pfile->out.base); } /* Stop ISO C from expanding anything. */ pfile->state.prevent_expansion++; } /* Output diagnostics for a directive DIR. INDENTED is nonzero if the '#' was indented. */ static void directive_diagnostics (cpp_reader *pfile, const directive *dir, int indented) { /* Issue -pedantic warnings for extensions. */ if (CPP_PEDANTIC (pfile) && ! pfile->state.skipping && dir->origin == EXTENSION) cpp_error (pfile, CPP_DL_PEDWARN, "#%s is a GCC extension", dir->name); /* Traditionally, a directive is ignored unless its # is in column 1. Therefore in code intended to work with K+R compilers, directives added by C89 must have their # indented, and directives present in traditional C must not. This is true even of directives in skipped conditional blocks. #elif cannot be used at all. */ if (CPP_WTRADITIONAL (pfile)) { if (dir == &dtable[T_ELIF]) cpp_error (pfile, CPP_DL_WARNING, "suggest not using #elif in traditional C"); else if (indented && dir->origin == KANDR) cpp_error (pfile, CPP_DL_WARNING, "traditional C ignores #%s with the # indented", dir->name); else if (!indented && dir->origin != KANDR) cpp_error (pfile, CPP_DL_WARNING, "suggest hiding #%s from traditional C with an indented #", dir->name); } } /* Check if we have a known directive. INDENTED is nonzero if the '#' of the directive was indented. This function is in this file to save unnecessarily exporting dtable etc. to lex.c. Returns nonzero if the line of tokens has been handled, zero if we should continue processing the line. */ int _cpp_handle_directive (cpp_reader *pfile, int indented) { const directive *dir = 0; const cpp_token *dname; bool was_parsing_args = pfile->state.parsing_args; bool was_discarding_output = pfile->state.discarding_output; int skip = 1; if (was_discarding_output) pfile->state.prevent_expansion = 0; if (was_parsing_args) { if (CPP_OPTION (pfile, pedantic)) cpp_error (pfile, CPP_DL_PEDWARN, "embedding a directive within macro arguments is not portable"); pfile->state.parsing_args = 0; pfile->state.prevent_expansion = 0; } start_directive (pfile); dname = _cpp_lex_token (pfile); if (dname->type == CPP_NAME) { if (dname->val.node->is_directive) dir = &dtable[dname->val.node->directive_index]; } /* We do not recognize the # followed by a number extension in assembler code. */ else if (dname->type == CPP_NUMBER && CPP_OPTION (pfile, lang) != CLK_ASM) { dir = &linemarker_dir; if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, preprocessed) && ! pfile->state.skipping) cpp_error (pfile, CPP_DL_PEDWARN, "style of line directive is a GCC extension"); } if (dir) { /* If we have a directive that is not an opening conditional, invalidate any control macro. */ if (! (dir->flags & IF_COND)) pfile->mi_valid = false; /* Kluge alert. In order to be sure that code like this #define HASH # HASH define foo bar does not cause '#define foo bar' to get executed when compiled with -save-temps, we recognize directives in -fpreprocessed mode only if the # is in column 1. macro.c puts a space in front of any '#' at the start of a macro. We exclude the -fdirectives-only case because macro expansion has not been performed yet, and block comments can cause spaces to preceed the directive. */ if (CPP_OPTION (pfile, preprocessed) && !CPP_OPTION (pfile, directives_only) && (indented || !(dir->flags & IN_I))) { skip = 0; dir = 0; } else { /* In failed conditional groups, all non-conditional directives are ignored. Before doing that, whether skipping or not, we should lex angle-bracketed headers correctly, and maybe output some diagnostics. */ pfile->state.angled_headers = dir->flags & INCL; pfile->state.directive_wants_padding = dir->flags & INCL; if (! CPP_OPTION (pfile, preprocessed)) directive_diagnostics (pfile, dir, indented); if (pfile->state.skipping && !(dir->flags & COND)) dir = 0; } } else if (dname->type == CPP_EOF) ; /* CPP_EOF is the "null directive". */ else { /* An unknown directive. Don't complain about it in assembly source: we don't know where the comments are, and # may introduce assembler pseudo-ops. Don't complain about invalid directives in skipped conditional groups (6.10 p4). */ if (CPP_OPTION (pfile, lang) == CLK_ASM) skip = 0; else if (!pfile->state.skipping) cpp_error (pfile, CPP_DL_ERROR, "invalid preprocessing directive #%s", cpp_token_as_text (pfile, dname)); } pfile->directive = dir; if (CPP_OPTION (pfile, traditional)) prepare_directive_trad (pfile); if (dir) pfile->directive->handler (pfile); else if (skip == 0) _cpp_backup_tokens (pfile, 1); end_directive (pfile, skip); if (was_parsing_args) { /* Restore state when within macro args. */ pfile->state.parsing_args = 2; pfile->state.prevent_expansion = 1; } if (was_discarding_output) pfile->state.prevent_expansion = 1; return skip; } /* Directive handler wrapper used by the command line option processor. BUF is \n terminated. */ static void run_directive (cpp_reader *pfile, int dir_no, const char *buf, size_t count) { cpp_push_buffer (pfile, (const uchar *) buf, count, /* from_stage3 */ true); start_directive (pfile); /* This is a short-term fix to prevent a leading '#' being interpreted as a directive. */ _cpp_clean_line (pfile); pfile->directive = &dtable[dir_no]; if (CPP_OPTION (pfile, traditional)) prepare_directive_trad (pfile); pfile->directive->handler (pfile); end_directive (pfile, 1); _cpp_pop_buffer (pfile); } /* Checks for validity the macro name in #define, #undef, #ifdef and #ifndef directives. IS_DEF_OR_UNDEF is true if this call is processing a #define or #undefine directive, and false otherwise. */ static cpp_hashnode * lex_macro_node (cpp_reader *pfile, bool is_def_or_undef) { const cpp_token *token = _cpp_lex_token (pfile); /* The token immediately after #define must be an identifier. That identifier may not be "defined", per C99 6.10.8p4. In C++, it may not be any of the "named operators" either, per C++98 [lex.digraph], [lex.key]. Finally, the identifier may not have been poisoned. (In that case the lexer has issued the error message for us.) */ if (token->type == CPP_NAME) { cpp_hashnode *node = token->val.node; if (is_def_or_undef && node == pfile->spec_nodes.n_defined) cpp_error (pfile, CPP_DL_ERROR, "\"defined\" cannot be used as a macro name"); else if (! (node->flags & NODE_POISONED)) return node; } else if (token->flags & NAMED_OP) cpp_error (pfile, CPP_DL_ERROR, "\"%s\" cannot be used as a macro name as it is an operator in C++", NODE_NAME (token->val.node)); else if (token->type == CPP_EOF) cpp_error (pfile, CPP_DL_ERROR, "no macro name given in #%s directive", pfile->directive->name); else cpp_error (pfile, CPP_DL_ERROR, "macro names must be identifiers"); return NULL; } /* Process a #define directive. Most work is done in macro.c. */ static void do_define (cpp_reader *pfile) { cpp_hashnode *node = lex_macro_node (pfile, true); if (node) { /* If we have been requested to expand comments into macros, then re-enable saving of comments. */ pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments_in_macro_exp); if (_cpp_create_definition (pfile, node)) if (pfile->cb.define) pfile->cb.define (pfile, pfile->directive_line, node); } } /* Handle #undef. Mark the identifier NT_VOID in the hash table. */ static void do_undef (cpp_reader *pfile) { cpp_hashnode *node = lex_macro_node (pfile, true); if (node) { if (pfile->cb.undef) pfile->cb.undef (pfile, pfile->directive_line, node); /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified identifier is not currently defined as a macro name. */ if (node->type == NT_MACRO) { if (node->flags & NODE_WARN) cpp_error (pfile, CPP_DL_WARNING, "undefining \"%s\"", NODE_NAME (node)); if (CPP_OPTION (pfile, warn_unused_macros)) _cpp_warn_if_unused_macro (pfile, node, NULL); _cpp_free_definition (node); } } check_eol (pfile); } /* Undefine a single macro/assertion/whatever. */ static int undefine_macros (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *h, void *data_p ATTRIBUTE_UNUSED) { /* Body of _cpp_free_definition inlined here for speed. Macros and assertions no longer have anything to free. */ h->type = NT_VOID; h->flags &= ~(NODE_POISONED|NODE_BUILTIN|NODE_DISABLED); return 1; } /* Undefine all macros and assertions. */ void cpp_undef_all (cpp_reader *pfile) { cpp_forall_identifiers (pfile, undefine_macros, NULL); } /* Helper routine used by parse_include. Reinterpret the current line as an h-char-sequence (< ... >); we are looking at the first token after the <. Returns a malloced filename. */ static char * glue_header_name (cpp_reader *pfile) { const cpp_token *token; char *buffer; size_t len, total_len = 0, capacity = 1024; /* To avoid lexed tokens overwriting our glued name, we can only allocate from the string pool once we've lexed everything. */ buffer = XNEWVEC (char, capacity); for (;;) { token = get_token_no_padding (pfile); if (token->type == CPP_GREATER) break; if (token->type == CPP_EOF) { cpp_error (pfile, CPP_DL_ERROR, "missing terminating > character"); break; } len = cpp_token_len (token) + 2; /* Leading space, terminating \0. */ if (total_len + len > capacity) { capacity = (capacity + len) * 2; buffer = XRESIZEVEC (char, buffer, capacity); } if (token->flags & PREV_WHITE) buffer[total_len++] = ' '; total_len = (cpp_spell_token (pfile, token, (uchar *) &buffer[total_len], true) - (uchar *) buffer); } buffer[total_len] = '\0'; return buffer; } /* Returns the file name of #include, #include_next, #import and #pragma dependency. The string is malloced and the caller should free it. Returns NULL on error. */ static const char * parse_include (cpp_reader *pfile, int *pangle_brackets, const cpp_token ***buf) { char *fname; const cpp_token *header; /* Allow macro expansion. */ header = get_token_no_padding (pfile); if (header->type == CPP_STRING || header->type == CPP_HEADER_NAME) { fname = XNEWVEC (char, header->val.str.len - 1); memcpy (fname, header->val.str.text + 1, header->val.str.len - 2); fname[header->val.str.len - 2] = '\0'; *pangle_brackets = header->type == CPP_HEADER_NAME; } else if (header->type == CPP_LESS) { fname = glue_header_name (pfile); *pangle_brackets = 1; } else { const unsigned char *dir; if (pfile->directive == &dtable[T_PRAGMA]) dir = U"pragma dependency"; else dir = pfile->directive->name; cpp_error (pfile, CPP_DL_ERROR, "#%s expects \"FILENAME\" or ", dir); return NULL; } if (pfile->directive == &dtable[T_PRAGMA]) { /* This pragma allows extra tokens after the file name. */ } else if (buf == NULL || CPP_OPTION (pfile, discard_comments)) check_eol (pfile); else { /* If we are not discarding comments, then gather them while doing the eol check. */ *buf = check_eol_return_comments (pfile); } return fname; } /* Handle #include, #include_next and #import. */ static void do_include_common (cpp_reader *pfile, enum include_type type) { const char *fname; int angle_brackets; const cpp_token **buf = NULL; /* Re-enable saving of comments if requested, so that the include callback can dump comments which follow #include. */ pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments); fname = parse_include (pfile, &angle_brackets, &buf); if (!fname) { if (buf) XDELETEVEC (buf); return; } if (!*fname) { cpp_error (pfile, CPP_DL_ERROR, "empty filename in #%s", pfile->directive->name); XDELETEVEC (fname); if (buf) XDELETEVEC (buf); return; } /* Prevent #include recursion. */ if (pfile->line_table->depth >= CPP_STACK_MAX) cpp_error (pfile, CPP_DL_ERROR, "#include nested too deeply"); else { /* Get out of macro context, if we are. */ skip_rest_of_line (pfile); if (pfile->cb.include) pfile->cb.include (pfile, pfile->directive_line, pfile->directive->name, fname, angle_brackets, buf); _cpp_stack_include (pfile, fname, angle_brackets, type); } XDELETEVEC (fname); if (buf) XDELETEVEC (buf); } static void do_include (cpp_reader *pfile) { do_include_common (pfile, IT_INCLUDE); } static void do_import (cpp_reader *pfile) { do_include_common (pfile, IT_IMPORT); } static void do_include_next (cpp_reader *pfile) { enum include_type type = IT_INCLUDE_NEXT; /* If this is the primary source file, warn and use the normal search logic. */ if (cpp_in_primary_file (pfile)) { cpp_error (pfile, CPP_DL_WARNING, "#include_next in primary source file"); type = IT_INCLUDE; } do_include_common (pfile, type); } /* Subroutine of do_linemarker. Read possible flags after file name. LAST is the last flag seen; 0 if this is the first flag. Return the flag if it is valid, 0 at the end of the directive. Otherwise complain. */ static unsigned int read_flag (cpp_reader *pfile, unsigned int last) { const cpp_token *token = _cpp_lex_token (pfile); if (token->type == CPP_NUMBER && token->val.str.len == 1) { unsigned int flag = token->val.str.text[0] - '0'; if (flag > last && flag <= 4 && (flag != 4 || last == 3) && (flag != 2 || last == 0)) return flag; } if (token->type != CPP_EOF) cpp_error (pfile, CPP_DL_ERROR, "invalid flag \"%s\" in line directive", cpp_token_as_text (pfile, token)); return 0; } /* Subroutine of do_line and do_linemarker. Convert a number in STR, of length LEN, to binary; store it in NUMP, and return 0 if the number was well-formed, 1 if not. Temporary, hopefully. */ static int strtoul_for_line (const uchar *str, unsigned int len, long unsigned int *nump) { unsigned long reg = 0; uchar c; while (len--) { c = *str++; if (!ISDIGIT (c)) return 1; reg *= 10; reg += c - '0'; } *nump = reg; return 0; } /* Interpret #line command. Note that the filename string (if any) is a true string constant (escapes are interpreted), unlike in #line. */ static void do_line (cpp_reader *pfile) { const struct line_maps *line_table = pfile->line_table; const struct line_map *map = &line_table->maps[line_table->used - 1]; /* skip_rest_of_line() may cause line table to be realloc()ed so note down sysp right now. */ unsigned char map_sysp = map->sysp; const cpp_token *token; const char *new_file = map->to_file; unsigned long new_lineno; /* C99 raised the minimum limit on #line numbers. */ unsigned int cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767; /* #line commands expand macros. */ token = cpp_get_token (pfile); if (token->type != CPP_NUMBER || strtoul_for_line (token->val.str.text, token->val.str.len, &new_lineno)) { if (token->type == CPP_EOF) cpp_error (pfile, CPP_DL_ERROR, "unexpected end of file after #line"); else cpp_error (pfile, CPP_DL_ERROR, "\"%s\" after #line is not a positive integer", cpp_token_as_text (pfile, token)); return; } if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap)) cpp_error (pfile, CPP_DL_PEDWARN, "line number out of range"); token = cpp_get_token (pfile); if (token->type == CPP_STRING) { cpp_string s = { 0, 0 }; if (cpp_interpret_string_notranslate (pfile, &token->val.str, 1, &s, false)) new_file = (const char *)s.text; check_eol (pfile); } else if (token->type != CPP_EOF) { cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename", cpp_token_as_text (pfile, token)); return; } skip_rest_of_line (pfile); _cpp_do_file_change (pfile, LC_RENAME, new_file, new_lineno, map_sysp); } /* Interpret the # 44 "file" [flags] notation, which has slightly different syntax and semantics from #line: Flags are allowed, and we never complain about the line number being too big. */ static void do_linemarker (cpp_reader *pfile) { const struct line_maps *line_table = pfile->line_table; const struct line_map *map = &line_table->maps[line_table->used - 1]; const cpp_token *token; const char *new_file = map->to_file; unsigned long new_lineno; unsigned int new_sysp = map->sysp; enum lc_reason reason = LC_RENAME; int flag; /* Back up so we can get the number again. Putting this in _cpp_handle_directive risks two calls to _cpp_backup_tokens in some circumstances, which can segfault. */ _cpp_backup_tokens (pfile, 1); /* #line commands expand macros. */ token = cpp_get_token (pfile); if (token->type != CPP_NUMBER || strtoul_for_line (token->val.str.text, token->val.str.len, &new_lineno)) { /* Unlike #line, there does not seem to be a way to get an EOF here. So, it should be safe to always spell the token. */ cpp_error (pfile, CPP_DL_ERROR, "\"%s\" after # is not a positive integer", cpp_token_as_text (pfile, token)); return; } token = cpp_get_token (pfile); if (token->type == CPP_STRING) { cpp_string s = { 0, 0 }; if (cpp_interpret_string_notranslate (pfile, &token->val.str, 1, &s, false)) new_file = (const char *)s.text; new_sysp = 0; flag = read_flag (pfile, 0); if (flag == 1) { reason = LC_ENTER; /* Fake an include for cpp_included (). */ _cpp_fake_include (pfile, new_file); flag = read_flag (pfile, flag); } else if (flag == 2) { reason = LC_LEAVE; flag = read_flag (pfile, flag); } if (flag == 3) { new_sysp = 1; flag = read_flag (pfile, flag); if (flag == 4) new_sysp = 2; } pfile->buffer->sysp = new_sysp; check_eol (pfile); } else if (token->type != CPP_EOF) { cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename", cpp_token_as_text (pfile, token)); return; } skip_rest_of_line (pfile); _cpp_do_file_change (pfile, reason, new_file, new_lineno, new_sysp); } /* Arrange the file_change callback. pfile->line has changed to FILE_LINE of TO_FILE, for reason REASON. SYSP is 1 for a system header, 2 for a system header that needs to be extern "C" protected, and zero otherwise. */ void _cpp_do_file_change (cpp_reader *pfile, enum lc_reason reason, const char *to_file, unsigned int file_line, unsigned int sysp) { const struct line_map *map = linemap_add (pfile->line_table, reason, sysp, to_file, file_line); if (map != NULL) linemap_line_start (pfile->line_table, map->to_line, 127); if (pfile->cb.file_change) pfile->cb.file_change (pfile, map); } /* Report a warning or error detected by the program we are processing. Use the directive's tokens in the error message. */ static void do_diagnostic (cpp_reader *pfile, int code, int print_dir) { if (_cpp_begin_message (pfile, code, pfile->cur_token[-1].src_loc, 0)) { if (print_dir) fprintf (stderr, "#%s ", pfile->directive->name); pfile->state.prevent_expansion++; cpp_output_line (pfile, stderr); pfile->state.prevent_expansion--; } } static void do_error (cpp_reader *pfile) { do_diagnostic (pfile, CPP_DL_ERROR, 1); } static void do_warning (cpp_reader *pfile) { /* We want #warning diagnostics to be emitted in system headers too. */ do_diagnostic (pfile, CPP_DL_WARNING_SYSHDR, 1); } /* Report program identification. */ static void do_ident (cpp_reader *pfile) { const cpp_token *str = cpp_get_token (pfile); if (str->type != CPP_STRING) cpp_error (pfile, CPP_DL_ERROR, "invalid #%s directive", pfile->directive->name); else if (pfile->cb.ident) pfile->cb.ident (pfile, pfile->directive_line, &str->val.str); check_eol (pfile); } /* Lookup a PRAGMA name in a singly-linked CHAIN. Returns the matching entry, or NULL if none is found. The returned entry could be the start of a namespace chain, or a pragma. */ static struct pragma_entry * lookup_pragma_entry (struct pragma_entry *chain, const cpp_hashnode *pragma) { while (chain && chain->pragma != pragma) chain = chain->next; return chain; } /* Create and insert a blank pragma entry at the beginning of a singly-linked CHAIN. */ static struct pragma_entry * new_pragma_entry (cpp_reader *pfile, struct pragma_entry **chain) { struct pragma_entry *new_entry; new_entry = (struct pragma_entry *) _cpp_aligned_alloc (pfile, sizeof (struct pragma_entry)); memset (new_entry, 0, sizeof (struct pragma_entry)); new_entry->next = *chain; *chain = new_entry; return new_entry; } /* Register a pragma NAME in namespace SPACE. If SPACE is null, it goes in the global namespace. */ static struct pragma_entry * register_pragma_1 (cpp_reader *pfile, const char *space, const char *name, bool allow_name_expansion) { struct pragma_entry **chain = &pfile->pragmas; struct pragma_entry *entry; const cpp_hashnode *node; if (space) { node = cpp_lookup (pfile, U space, strlen (space)); entry = lookup_pragma_entry (*chain, node); if (!entry) { entry = new_pragma_entry (pfile, chain); entry->pragma = node; entry->is_nspace = true; entry->allow_expansion = allow_name_expansion; } else if (!entry->is_nspace) goto clash; else if (entry->allow_expansion != allow_name_expansion) { cpp_error (pfile, CPP_DL_ICE, "registering pragmas in namespace \"%s\" with mismatched " "name expansion", space); return NULL; } chain = &entry->u.space; } else if (allow_name_expansion) { cpp_error (pfile, CPP_DL_ICE, "registering pragma \"%s\" with name expansion " "and no namespace", name); return NULL; } /* Check for duplicates. */ node = cpp_lookup (pfile, U name, strlen (name)); entry = lookup_pragma_entry (*chain, node); if (entry == NULL) { entry = new_pragma_entry (pfile, chain); entry->pragma = node; return entry; } if (entry->is_nspace) clash: cpp_error (pfile, CPP_DL_ICE, "registering \"%s\" as both a pragma and a pragma namespace", NODE_NAME (node)); else if (space) cpp_error (pfile, CPP_DL_ICE, "#pragma %s %s is already registered", space, name); else cpp_error (pfile, CPP_DL_ICE, "#pragma %s is already registered", name); return NULL; } /* Register a cpplib internal pragma SPACE NAME with HANDLER. */ static void register_pragma_internal (cpp_reader *pfile, const char *space, const char *name, pragma_cb handler) { struct pragma_entry *entry; entry = register_pragma_1 (pfile, space, name, false); entry->is_internal = true; entry->u.handler = handler; } /* Register a pragma NAME in namespace SPACE. If SPACE is null, it goes in the global namespace. HANDLER is the handler it will call, which must be non-NULL. If ALLOW_EXPANSION is set, allow macro expansion while parsing pragma NAME. This function is exported from libcpp. */ void cpp_register_pragma (cpp_reader *pfile, const char *space, const char *name, pragma_cb handler, bool allow_expansion) { struct pragma_entry *entry; if (!handler) { cpp_error (pfile, CPP_DL_ICE, "registering pragma with NULL handler"); return; } entry = register_pragma_1 (pfile, space, name, false); if (entry) { entry->allow_expansion = allow_expansion; entry->u.handler = handler; } } /* Similarly, but create mark the pragma for deferred processing. When found, a CPP_PRAGMA token will be insertted into the stream with IDENT in the token->u.pragma slot. */ void cpp_register_deferred_pragma (cpp_reader *pfile, const char *space, const char *name, unsigned int ident, bool allow_expansion, bool allow_name_expansion) { struct pragma_entry *entry; entry = register_pragma_1 (pfile, space, name, allow_name_expansion); if (entry) { entry->is_deferred = true; entry->allow_expansion = allow_expansion; entry->u.ident = ident; } } /* Register the pragmas the preprocessor itself handles. */ void _cpp_init_internal_pragmas (cpp_reader *pfile) { /* Pragmas in the global namespace. */ register_pragma_internal (pfile, 0, "once", do_pragma_once); /* New GCC-specific pragmas should be put in the GCC namespace. */ register_pragma_internal (pfile, "GCC", "poison", do_pragma_poison); register_pragma_internal (pfile, "GCC", "system_header", do_pragma_system_header); register_pragma_internal (pfile, "GCC", "dependency", do_pragma_dependency); } /* Return the number of registered pragmas in PE. */ static int count_registered_pragmas (struct pragma_entry *pe) { int ct = 0; for (; pe != NULL; pe = pe->next) { if (pe->is_nspace) ct += count_registered_pragmas (pe->u.space); ct++; } return ct; } /* Save into SD the names of the registered pragmas referenced by PE, and return a pointer to the next free space in SD. */ static char ** save_registered_pragmas (struct pragma_entry *pe, char **sd) { for (; pe != NULL; pe = pe->next) { if (pe->is_nspace) sd = save_registered_pragmas (pe->u.space, sd); *sd++ = (char *) xmemdup (HT_STR (&pe->pragma->ident), HT_LEN (&pe->pragma->ident), HT_LEN (&pe->pragma->ident) + 1); } return sd; } /* Return a newly-allocated array which saves the names of the registered pragmas. */ char ** _cpp_save_pragma_names (cpp_reader *pfile) { int ct = count_registered_pragmas (pfile->pragmas); char **result = XNEWVEC (char *, ct); (void) save_registered_pragmas (pfile->pragmas, result); return result; } /* Restore from SD the names of the registered pragmas referenced by PE, and return a pointer to the next unused name in SD. */ static char ** restore_registered_pragmas (cpp_reader *pfile, struct pragma_entry *pe, char **sd) { for (; pe != NULL; pe = pe->next) { if (pe->is_nspace) sd = restore_registered_pragmas (pfile, pe->u.space, sd); pe->pragma = cpp_lookup (pfile, U *sd, strlen (*sd)); free (*sd); sd++; } return sd; } /* Restore the names of the registered pragmas from SAVED. */ void _cpp_restore_pragma_names (cpp_reader *pfile, char **saved) { (void) restore_registered_pragmas (pfile, pfile->pragmas, saved); free (saved); } /* Pragmata handling. We handle some, and pass the rest on to the front end. C99 defines three pragmas and says that no macro expansion is to be performed on them; whether or not macro expansion happens for other pragmas is implementation defined. This implementation allows for a mix of both, since GCC did not traditionally macro expand its (few) pragmas, whereas OpenMP specifies that macro expansion should happen. */ static void do_pragma (cpp_reader *pfile) { const struct pragma_entry *p = NULL; const cpp_token *token, *pragma_token = pfile->cur_token; cpp_token ns_token; unsigned int count = 1; pfile->state.prevent_expansion++; token = cpp_get_token (pfile); ns_token = *token; if (token->type == CPP_NAME) { p = lookup_pragma_entry (pfile->pragmas, token->val.node); if (p && p->is_nspace) { bool allow_name_expansion = p->allow_expansion; if (allow_name_expansion) pfile->state.prevent_expansion--; token = cpp_get_token (pfile); if (token->type == CPP_NAME) p = lookup_pragma_entry (p->u.space, token->val.node); else p = NULL; if (allow_name_expansion) pfile->state.prevent_expansion++; count = 2; } } if (p) { if (p->is_deferred) { pfile->directive_result.src_loc = pragma_token->src_loc; pfile->directive_result.type = CPP_PRAGMA; pfile->directive_result.flags = pragma_token->flags; pfile->directive_result.val.pragma = p->u.ident; pfile->state.in_deferred_pragma = true; pfile->state.pragma_allow_expansion = p->allow_expansion; if (!p->allow_expansion) pfile->state.prevent_expansion++; } else { /* Since the handler below doesn't get the line number, that it might need for diagnostics, make sure it has the right numbers in place. */ if (pfile->cb.line_change) (*pfile->cb.line_change) (pfile, pragma_token, false); if (p->allow_expansion) pfile->state.prevent_expansion--; (*p->u.handler) (pfile); if (p->allow_expansion) pfile->state.prevent_expansion++; } } else if (pfile->cb.def_pragma) { if (count == 1 || pfile->context->prev == NULL) _cpp_backup_tokens (pfile, count); else { /* Invalid name comes from macro expansion, _cpp_backup_tokens won't allow backing 2 tokens. */ /* ??? The token buffer is leaked. Perhaps if def_pragma hook reads both tokens, we could perhaps free it, but if it doesn't, we don't know the exact lifespan. */ cpp_token *toks = XNEWVEC (cpp_token, 2); toks[0] = ns_token; toks[0].flags |= NO_EXPAND; toks[1] = *token; toks[1].flags |= NO_EXPAND; _cpp_push_token_context (pfile, NULL, toks, 2); } pfile->cb.def_pragma (pfile, pfile->directive_line); } pfile->state.prevent_expansion--; } /* Handle #pragma once. */ static void do_pragma_once (cpp_reader *pfile) { if (cpp_in_primary_file (pfile)) cpp_error (pfile, CPP_DL_WARNING, "#pragma once in main file"); check_eol (pfile); _cpp_mark_file_once_only (pfile, pfile->buffer->file); } /* Handle #pragma GCC poison, to poison one or more identifiers so that the lexer produces a hard error for each subsequent usage. */ static void do_pragma_poison (cpp_reader *pfile) { const cpp_token *tok; cpp_hashnode *hp; pfile->state.poisoned_ok = 1; for (;;) { tok = _cpp_lex_token (pfile); if (tok->type == CPP_EOF) break; if (tok->type != CPP_NAME) { cpp_error (pfile, CPP_DL_ERROR, "invalid #pragma GCC poison directive"); break; } hp = tok->val.node; if (hp->flags & NODE_POISONED) continue; if (hp->type == NT_MACRO) cpp_error (pfile, CPP_DL_WARNING, "poisoning existing macro \"%s\"", NODE_NAME (hp)); _cpp_free_definition (hp); hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC; } pfile->state.poisoned_ok = 0; } /* Mark the current header as a system header. This will suppress some categories of warnings (notably those from -pedantic). It is intended for use in system libraries that cannot be implemented in conforming C, but cannot be certain that their headers appear in a system include directory. To prevent abuse, it is rejected in the primary source file. */ static void do_pragma_system_header (cpp_reader *pfile) { if (cpp_in_primary_file (pfile)) cpp_error (pfile, CPP_DL_WARNING, "#pragma system_header ignored outside include file"); else { check_eol (pfile); skip_rest_of_line (pfile); cpp_make_system_header (pfile, 1, 0); } } /* Check the modified date of the current include file against a specified file. Issue a diagnostic, if the specified file is newer. We use this to determine if a fixed header should be refixed. */ static void do_pragma_dependency (cpp_reader *pfile) { const char *fname; int angle_brackets, ordering; fname = parse_include (pfile, &angle_brackets, NULL); if (!fname) return; ordering = _cpp_compare_file_date (pfile, fname, angle_brackets); if (ordering < 0) cpp_error (pfile, CPP_DL_WARNING, "cannot find source file %s", fname); else if (ordering > 0) { cpp_error (pfile, CPP_DL_WARNING, "current file is older than %s", fname); if (cpp_get_token (pfile)->type != CPP_EOF) { _cpp_backup_tokens (pfile, 1); do_diagnostic (pfile, CPP_DL_WARNING, 0); } } free ((void *) fname); } /* Get a token but skip padding. */ static const cpp_token * get_token_no_padding (cpp_reader *pfile) { for (;;) { const cpp_token *result = cpp_get_token (pfile); if (result->type != CPP_PADDING) return result; } } /* Check syntax is "(string-literal)". Returns the string on success, or NULL on failure. */ static const cpp_token * get__Pragma_string (cpp_reader *pfile) { const cpp_token *string; const cpp_token *paren; paren = get_token_no_padding (pfile); if (paren->type == CPP_EOF) _cpp_backup_tokens (pfile, 1); if (paren->type != CPP_OPEN_PAREN) return NULL; string = get_token_no_padding (pfile); if (string->type == CPP_EOF) _cpp_backup_tokens (pfile, 1); if (string->type != CPP_STRING && string->type != CPP_WSTRING) return NULL; paren = get_token_no_padding (pfile); if (paren->type == CPP_EOF) _cpp_backup_tokens (pfile, 1); if (paren->type != CPP_CLOSE_PAREN) return NULL; return string; } /* Destringize IN into a temporary buffer, by removing the first \ of \" and \\ sequences, and process the result as a #pragma directive. */ static void destringize_and_run (cpp_reader *pfile, const cpp_string *in) { const unsigned char *src, *limit; char *dest, *result; cpp_context *saved_context; cpp_token *saved_cur_token; tokenrun *saved_cur_run; cpp_token *toks; int count; dest = result = (char *) alloca (in->len - 1); src = in->text + 1 + (in->text[0] == 'L'); limit = in->text + in->len - 1; while (src < limit) { /* We know there is a character following the backslash. */ if (*src == '\\' && (src[1] == '\\' || src[1] == '"')) src++; *dest++ = *src++; } *dest = '\n'; /* Ugh; an awful kludge. We are really not set up to be lexing tokens when in the middle of a macro expansion. Use a new context to force cpp_get_token to lex, and so skip_rest_of_line doesn't go beyond the end of the text. Also, remember the current lexing position so we can return to it later. Something like line-at-a-time lexing should remove the need for this. */ saved_context = pfile->context; saved_cur_token = pfile->cur_token; saved_cur_run = pfile->cur_run; pfile->context = XNEW (cpp_context); pfile->context->macro = 0; pfile->context->prev = 0; pfile->context->next = 0; /* Inline run_directive, since we need to delay the _cpp_pop_buffer until we've read all of the tokens that we want. */ cpp_push_buffer (pfile, (const uchar *) result, dest - result, /* from_stage3 */ true); /* ??? Antique Disgusting Hack. What does this do? */ if (pfile->buffer->prev) pfile->buffer->file = pfile->buffer->prev->file; start_directive (pfile); _cpp_clean_line (pfile); do_pragma (pfile); end_directive (pfile, 1); /* We always insert at least one token, the directive result. It'll either be a CPP_PADDING or a CPP_PRAGMA. In the later case, we need to insert *all* of the tokens, including the CPP_PRAGMA_EOL. */ /* If we're not handling the pragma internally, read all of the tokens from the string buffer now, while the string buffer is still installed. */ /* ??? Note that the token buffer allocated here is leaked. It's not clear to me what the true lifespan of the tokens are. It would appear that the lifespan is the entire parse of the main input stream, in which case this may not be wrong. */ if (pfile->directive_result.type == CPP_PRAGMA) { int maxcount; count = 1; maxcount = 50; toks = XNEWVEC (cpp_token, maxcount); toks[0] = pfile->directive_result; do { if (count == maxcount) { maxcount = maxcount * 3 / 2; toks = XRESIZEVEC (cpp_token, toks, maxcount); } toks[count] = *cpp_get_token (pfile); /* Macros have been already expanded by cpp_get_token if the pragma allowed expansion. */ toks[count++].flags |= NO_EXPAND; } while (toks[count-1].type != CPP_PRAGMA_EOL); } else { count = 1; toks = XNEW (cpp_token); toks[0] = pfile->directive_result; /* If we handled the entire pragma internally, make sure we get the line number correct for the next token. */ if (pfile->cb.line_change) pfile->cb.line_change (pfile, pfile->cur_token, false); } /* Finish inlining run_directive. */ pfile->buffer->file = NULL; _cpp_pop_buffer (pfile); /* Reset the old macro state before ... */ XDELETE (pfile->context); pfile->context = saved_context; pfile->cur_token = saved_cur_token; pfile->cur_run = saved_cur_run; /* ... inserting the new tokens we collected. */ _cpp_push_token_context (pfile, NULL, toks, count); } /* Handle the _Pragma operator. Return 0 on error, 1 if ok. */ int _cpp_do__Pragma (cpp_reader *pfile) { const cpp_token *string = get__Pragma_string (pfile); pfile->directive_result.type = CPP_PADDING; if (string) { destringize_and_run (pfile, &string->val.str); return 1; } cpp_error (pfile, CPP_DL_ERROR, "_Pragma takes a parenthesized string literal"); return 0; } /* Handle #ifdef. */ static void do_ifdef (cpp_reader *pfile) { int skip = 1; if (! pfile->state.skipping) { const cpp_hashnode *node = lex_macro_node (pfile, false); if (node) { skip = node->type != NT_MACRO; _cpp_mark_macro_used (node); check_eol (pfile); } } push_conditional (pfile, skip, T_IFDEF, 0); } /* Handle #ifndef. */ static void do_ifndef (cpp_reader *pfile) { int skip = 1; const cpp_hashnode *node = 0; if (! pfile->state.skipping) { node = lex_macro_node (pfile, false); if (node) { skip = node->type == NT_MACRO; _cpp_mark_macro_used (node); check_eol (pfile); } } push_conditional (pfile, skip, T_IFNDEF, node); } /* _cpp_parse_expr puts a macro in a "#if !defined ()" expression in pfile->mi_ind_cmacro so we can handle multiple-include optimizations. If macro expansion occurs in the expression, we cannot treat it as a controlling conditional, since the expansion could change in the future. That is handled by cpp_get_token. */ static void do_if (cpp_reader *pfile) { int skip = 1; if (! pfile->state.skipping) skip = _cpp_parse_expr (pfile) == false; push_conditional (pfile, skip, T_IF, pfile->mi_ind_cmacro); } /* Flip skipping state if appropriate and continue without changing if_stack; this is so that the error message for missing #endif's etc. will point to the original #if. */ static void do_else (cpp_reader *pfile) { cpp_buffer *buffer = pfile->buffer; struct if_stack *ifs = buffer->if_stack; if (ifs == NULL) cpp_error (pfile, CPP_DL_ERROR, "#else without #if"); else { if (ifs->type == T_ELSE) { cpp_error (pfile, CPP_DL_ERROR, "#else after #else"); cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0, "the conditional began here"); } ifs->type = T_ELSE; /* Skip any future (erroneous) #elses or #elifs. */ pfile->state.skipping = ifs->skip_elses; ifs->skip_elses = true; /* Invalidate any controlling macro. */ ifs->mi_cmacro = 0; /* Only check EOL if was not originally skipping. */ if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels)) check_eol (pfile); } } /* Handle a #elif directive by not changing if_stack either. See the comment above do_else. */ static void do_elif (cpp_reader *pfile) { cpp_buffer *buffer = pfile->buffer; struct if_stack *ifs = buffer->if_stack; if (ifs == NULL) cpp_error (pfile, CPP_DL_ERROR, "#elif without #if"); else { if (ifs->type == T_ELSE) { cpp_error (pfile, CPP_DL_ERROR, "#elif after #else"); cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0, "the conditional began here"); } ifs->type = T_ELIF; /* Only evaluate this if we aren't skipping elses. During evaluation, set skipping to false to get lexer warnings. */ if (ifs->skip_elses) pfile->state.skipping = 1; else { pfile->state.skipping = 0; pfile->state.skipping = ! _cpp_parse_expr (pfile); ifs->skip_elses = ! pfile->state.skipping; } /* Invalidate any controlling macro. */ ifs->mi_cmacro = 0; } } /* #endif pops the if stack and resets pfile->state.skipping. */ static void do_endif (cpp_reader *pfile) { cpp_buffer *buffer = pfile->buffer; struct if_stack *ifs = buffer->if_stack; if (ifs == NULL) cpp_error (pfile, CPP_DL_ERROR, "#endif without #if"); else { /* Only check EOL if was not originally skipping. */ if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels)) check_eol (pfile); /* If potential control macro, we go back outside again. */ if (ifs->next == 0 && ifs->mi_cmacro) { pfile->mi_valid = true; pfile->mi_cmacro = ifs->mi_cmacro; } buffer->if_stack = ifs->next; pfile->state.skipping = ifs->was_skipping; obstack_free (&pfile->buffer_ob, ifs); } } /* Push an if_stack entry for a preprocessor conditional, and set pfile->state.skipping to SKIP. If TYPE indicates the conditional is #if or #ifndef, CMACRO is a potentially controlling macro, and we need to check here that we are at the top of the file. */ static void push_conditional (cpp_reader *pfile, int skip, int type, const cpp_hashnode *cmacro) { struct if_stack *ifs; cpp_buffer *buffer = pfile->buffer; ifs = XOBNEW (&pfile->buffer_ob, struct if_stack); ifs->line = pfile->directive_line; ifs->next = buffer->if_stack; ifs->skip_elses = pfile->state.skipping || !skip; ifs->was_skipping = pfile->state.skipping; ifs->type = type; /* This condition is effectively a test for top-of-file. */ if (pfile->mi_valid && pfile->mi_cmacro == 0) ifs->mi_cmacro = cmacro; else ifs->mi_cmacro = 0; pfile->state.skipping = skip; buffer->if_stack = ifs; } /* Read the tokens of the answer into the macro pool, in a directive of type TYPE. Only commit the memory if we intend it as permanent storage, i.e. the #assert case. Returns 0 on success, and sets ANSWERP to point to the answer. */ static int parse_answer (cpp_reader *pfile, struct answer **answerp, int type) { const cpp_token *paren; struct answer *answer; unsigned int acount; /* In a conditional, it is legal to not have an open paren. We should save the following token in this case. */ paren = cpp_get_token (pfile); /* If not a paren, see if we're OK. */ if (paren->type != CPP_OPEN_PAREN) { /* In a conditional no answer is a test for any answer. It could be followed by any token. */ if (type == T_IF) { _cpp_backup_tokens (pfile, 1); return 0; } /* #unassert with no answer is valid - it removes all answers. */ if (type == T_UNASSERT && paren->type == CPP_EOF) return 0; cpp_error (pfile, CPP_DL_ERROR, "missing '(' after predicate"); return 1; } for (acount = 0;; acount++) { size_t room_needed; const cpp_token *token = cpp_get_token (pfile); cpp_token *dest; if (token->type == CPP_CLOSE_PAREN) break; if (token->type == CPP_EOF) { cpp_error (pfile, CPP_DL_ERROR, "missing ')' to complete answer"); return 1; } /* struct answer includes the space for one token. */ room_needed = (sizeof (struct answer) + acount * sizeof (cpp_token)); if (BUFF_ROOM (pfile->a_buff) < room_needed) _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (struct answer)); dest = &((struct answer *) BUFF_FRONT (pfile->a_buff))->first[acount]; *dest = *token; /* Drop whitespace at start, for answer equivalence purposes. */ if (acount == 0) dest->flags &= ~PREV_WHITE; } if (acount == 0) { cpp_error (pfile, CPP_DL_ERROR, "predicate's answer is empty"); return 1; } answer = (struct answer *) BUFF_FRONT (pfile->a_buff); answer->count = acount; answer->next = NULL; *answerp = answer; return 0; } /* Parses an assertion directive of type TYPE, returning a pointer to the hash node of the predicate, or 0 on error. If an answer was supplied, it is placed in ANSWERP, otherwise it is set to 0. */ static cpp_hashnode * parse_assertion (cpp_reader *pfile, struct answer **answerp, int type) { cpp_hashnode *result = 0; const cpp_token *predicate; /* We don't expand predicates or answers. */ pfile->state.prevent_expansion++; *answerp = 0; predicate = cpp_get_token (pfile); if (predicate->type == CPP_EOF) cpp_error (pfile, CPP_DL_ERROR, "assertion without predicate"); else if (predicate->type != CPP_NAME) cpp_error (pfile, CPP_DL_ERROR, "predicate must be an identifier"); else if (parse_answer (pfile, answerp, type) == 0) { unsigned int len = NODE_LEN (predicate->val.node); unsigned char *sym = (unsigned char *) alloca (len + 1); /* Prefix '#' to get it out of macro namespace. */ sym[0] = '#'; memcpy (sym + 1, NODE_NAME (predicate->val.node), len); result = cpp_lookup (pfile, sym, len + 1); } pfile->state.prevent_expansion--; return result; } /* Returns a pointer to the pointer to CANDIDATE in the answer chain, or a pointer to NULL if the answer is not in the chain. */ static struct answer ** find_answer (cpp_hashnode *node, const struct answer *candidate) { unsigned int i; struct answer **result; for (result = &node->value.answers; *result; result = &(*result)->next) { struct answer *answer = *result; if (answer->count == candidate->count) { for (i = 0; i < answer->count; i++) if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i])) break; if (i == answer->count) break; } } return result; } /* Test an assertion within a preprocessor conditional. Returns nonzero on failure, zero on success. On success, the result of the test is written into VALUE, otherwise the value 0. */ int _cpp_test_assertion (cpp_reader *pfile, unsigned int *value) { struct answer *answer; cpp_hashnode *node; node = parse_assertion (pfile, &answer, T_IF); /* For recovery, an erroneous assertion expression is handled as a failing assertion. */ *value = 0; if (node) *value = (node->type == NT_ASSERTION && (answer == 0 || *find_answer (node, answer) != 0)); else if (pfile->cur_token[-1].type == CPP_EOF) _cpp_backup_tokens (pfile, 1); /* We don't commit the memory for the answer - it's temporary only. */ return node == 0; } /* Handle #assert. */ static void do_assert (cpp_reader *pfile) { struct answer *new_answer; cpp_hashnode *node; node = parse_assertion (pfile, &new_answer, T_ASSERT); if (node) { size_t answer_size; /* Place the new answer in the answer list. First check there is not a duplicate. */ new_answer->next = 0; if (node->type == NT_ASSERTION) { if (*find_answer (node, new_answer)) { cpp_error (pfile, CPP_DL_WARNING, "\"%s\" re-asserted", NODE_NAME (node) + 1); return; } new_answer->next = node->value.answers; } answer_size = sizeof (struct answer) + ((new_answer->count - 1) * sizeof (cpp_token)); /* Commit or allocate storage for the object. */ if (pfile->hash_table->alloc_subobject) { struct answer *temp_answer = new_answer; new_answer = (struct answer *) pfile->hash_table->alloc_subobject (answer_size); memcpy (new_answer, temp_answer, answer_size); } else BUFF_FRONT (pfile->a_buff) += answer_size; node->type = NT_ASSERTION; node->value.answers = new_answer; check_eol (pfile); } } /* Handle #unassert. */ static void do_unassert (cpp_reader *pfile) { cpp_hashnode *node; struct answer *answer; node = parse_assertion (pfile, &answer, T_UNASSERT); /* It isn't an error to #unassert something that isn't asserted. */ if (node && node->type == NT_ASSERTION) { if (answer) { struct answer **p = find_answer (node, answer), *temp; /* Remove the answer from the list. */ temp = *p; if (temp) *p = temp->next; /* Did we free the last answer? */ if (node->value.answers == 0) node->type = NT_VOID; check_eol (pfile); } else _cpp_free_definition (node); } /* We don't commit the memory for the answer - it's temporary only. */ } /* These are for -D, -U, -A. */ /* Process the string STR as if it appeared as the body of a #define. If STR is just an identifier, define it with value 1. If STR has anything after the identifier, then it should be identifier=definition. */ void cpp_define (cpp_reader *pfile, const char *str) { char *buf, *p; size_t count; /* Copy the entire option so we can modify it. Change the first "=" in the string to a space. If there is none, tack " 1" on the end. */ count = strlen (str); buf = (char *) alloca (count + 3); memcpy (buf, str, count); p = strchr (str, '='); if (p) buf[p - str] = ' '; else { buf[count++] = ' '; buf[count++] = '1'; } buf[count] = '\n'; run_directive (pfile, T_DEFINE, buf, count); } /* Slight variant of the above for use by initialize_builtins. */ void _cpp_define_builtin (cpp_reader *pfile, const char *str) { size_t len = strlen (str); char *buf = (char *) alloca (len + 1); memcpy (buf, str, len); buf[len] = '\n'; run_directive (pfile, T_DEFINE, buf, len); } /* Process MACRO as if it appeared as the body of an #undef. */ void cpp_undef (cpp_reader *pfile, const char *macro) { size_t len = strlen (macro); char *buf = (char *) alloca (len + 1); memcpy (buf, macro, len); buf[len] = '\n'; run_directive (pfile, T_UNDEF, buf, len); } /* Like lex_macro_node, but read the input from STR. */ static cpp_hashnode * lex_macro_node_from_str (cpp_reader *pfile, const char *str) { size_t len = strlen (str); uchar *buf = (uchar *) alloca (len + 1); cpp_hashnode *node; memcpy (buf, str, len); buf[len] = '\n'; cpp_push_buffer (pfile, buf, len, true); node = lex_macro_node (pfile, true); _cpp_pop_buffer (pfile); return node; } /* If STR is a defined macro, return its definition node, else return NULL. */ cpp_macro * cpp_push_definition (cpp_reader *pfile, const char *str) { cpp_hashnode *node = lex_macro_node_from_str (pfile, str); if (node && node->type == NT_MACRO) return node->value.macro; else return NULL; } /* Replace a previous definition DFN of the macro STR. If DFN is NULL, then the macro should be undefined. */ void cpp_pop_definition (cpp_reader *pfile, const char *str, cpp_macro *dfn) { cpp_hashnode *node = lex_macro_node_from_str (pfile, str); if (node == NULL) return; if (node->type == NT_MACRO) { if (pfile->cb.undef) pfile->cb.undef (pfile, pfile->directive_line, node); if (CPP_OPTION (pfile, warn_unused_macros)) _cpp_warn_if_unused_macro (pfile, node, NULL); } if (node->type != NT_VOID) _cpp_free_definition (node); if (dfn) { node->type = NT_MACRO; node->value.macro = dfn; if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_"))) node->flags |= NODE_WARN; if (pfile->cb.define) pfile->cb.define (pfile, pfile->directive_line, node); } } /* Process the string STR as if it appeared as the body of a #assert. */ void cpp_assert (cpp_reader *pfile, const char *str) { handle_assertion (pfile, str, T_ASSERT); } /* Process STR as if it appeared as the body of an #unassert. */ void cpp_unassert (cpp_reader *pfile, const char *str) { handle_assertion (pfile, str, T_UNASSERT); } /* Common code for cpp_assert (-A) and cpp_unassert (-A-). */ static void handle_assertion (cpp_reader *pfile, const char *str, int type) { size_t count = strlen (str); const char *p = strchr (str, '='); /* Copy the entire option so we can modify it. Change the first "=" in the string to a '(', and tack a ')' on the end. */ char *buf = (char *) alloca (count + 2); memcpy (buf, str, count); if (p) { buf[p - str] = '('; buf[count++] = ')'; } buf[count] = '\n'; str = buf; run_directive (pfile, type, str, count); } /* The number of errors for a given reader. */ unsigned int cpp_errors (cpp_reader *pfile) { return pfile->errors; } /* The options structure. */ cpp_options * cpp_get_options (cpp_reader *pfile) { return &pfile->opts; } /* The callbacks structure. */ cpp_callbacks * cpp_get_callbacks (cpp_reader *pfile) { return &pfile->cb; } /* Copy the given callbacks structure to our own. */ void cpp_set_callbacks (cpp_reader *pfile, cpp_callbacks *cb) { pfile->cb = *cb; } /* The dependencies structure. (Creates one if it hasn't already been.) */ struct deps * cpp_get_deps (cpp_reader *pfile) { if (!pfile->deps) pfile->deps = deps_init (); return pfile->deps; } /* Push a new buffer on the buffer stack. Returns the new buffer; it doesn't fail. It does not generate a file change call back; that is the responsibility of the caller. */ cpp_buffer * cpp_push_buffer (cpp_reader *pfile, const uchar *buffer, size_t len, int from_stage3) { cpp_buffer *new_buffer = XOBNEW (&pfile->buffer_ob, cpp_buffer); /* Clears, amongst other things, if_stack and mi_cmacro. */ memset (new_buffer, 0, sizeof (cpp_buffer)); new_buffer->next_line = new_buffer->buf = buffer; new_buffer->rlimit = buffer + len; new_buffer->from_stage3 = from_stage3; new_buffer->prev = pfile->buffer; new_buffer->need_line = true; pfile->buffer = new_buffer; return new_buffer; } /* Pops a single buffer, with a file change call-back if appropriate. Then pushes the next -include file, if any remain. */ void _cpp_pop_buffer (cpp_reader *pfile) { cpp_buffer *buffer = pfile->buffer; struct _cpp_file *inc = buffer->file; struct if_stack *ifs; /* Walk back up the conditional stack till we reach its level at entry to this file, issuing error messages. */ for (ifs = buffer->if_stack; ifs; ifs = ifs->next) cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0, "unterminated #%s", dtable[ifs->type].name); /* In case of a missing #endif. */ pfile->state.skipping = 0; /* _cpp_do_file_change expects pfile->buffer to be the new one. */ pfile->buffer = buffer->prev; free (buffer->notes); /* Free the buffer object now; we may want to push a new buffer in _cpp_push_next_include_file. */ obstack_free (&pfile->buffer_ob, buffer); if (inc) { _cpp_pop_file_buffer (pfile, inc); _cpp_do_file_change (pfile, LC_LEAVE, 0, 0, 0); } } /* Enter all recognized directives in the hash table. */ void _cpp_init_directives (cpp_reader *pfile) { unsigned int i; cpp_hashnode *node; for (i = 0; i < (unsigned int) N_DIRECTIVES; i++) { node = cpp_lookup (pfile, dtable[i].name, dtable[i].length); node->is_directive = 1; node->directive_index = i; } } nescc-1.3.4/libcpp/errors.c000066400000000000000000000124501177770303300155550ustar00rootroot00000000000000/* Default error handlers for CPP Library. Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc. Written by Per Bothner, 1994. Based on CCCP program by Paul Rubin, June 1986 Adapted to ANSI C, Richard Stallman, Jan 1987 This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. In other words, you are welcome to use, share and improve this program. You are forbidden to forbid anyone else to use, share and improve what you give them. Help stamp out software-hoarding! */ #include "config.h" #include "system.h" #include "cpplib.h" #include "internal.h" static void print_location (cpp_reader *, source_location, unsigned int); /* Print the logical file location (LINE, COL) in preparation for a diagnostic. Outputs the #include chain if it has changed. A line of zero suppresses the include stack, and outputs the program name instead. */ static void print_location (cpp_reader *pfile, source_location line, unsigned int col) { if (line == 0) fprintf (stderr, "%s: ", progname); else { const struct line_map *map; unsigned int lin; map = linemap_lookup (pfile->line_table, line); linemap_print_containing_files (pfile->line_table, map); lin = SOURCE_LINE (map, line); if (col == 0) { col = SOURCE_COLUMN (map, line); if (col == 0) col = 1; } if (lin == 0) fprintf (stderr, "%s:", map->to_file); else if (CPP_OPTION (pfile, show_column) == 0) fprintf (stderr, "%s:%u:", map->to_file, lin); else fprintf (stderr, "%s:%u:%u:", map->to_file, lin, col); fputc (' ', stderr); } } /* Set up for a diagnostic: print the file and line, bump the error counter, etc. SRC_LOC is the logical line number; zero means to print at the location of the previously lexed token, which tends to be the correct place by default. The column number can be specified either using COLUMN or (if COLUMN==0) extracting SOURCE_COLUMN from SRC_LOC. (This may seem redundant, but is useful when pre-scanning (cleaning) a line, when we haven't yet verified whether the current line_map has a big enough max_column_hint.) Returns 0 if the error has been suppressed. */ int _cpp_begin_message (cpp_reader *pfile, int code, source_location src_loc, unsigned int column) { int level = CPP_DL_EXTRACT (code); switch (level) { case CPP_DL_WARNING: case CPP_DL_PEDWARN: if (cpp_in_system_header (pfile) && ! CPP_OPTION (pfile, warn_system_headers)) return 0; /* Fall through. */ case CPP_DL_WARNING_SYSHDR: if (CPP_OPTION (pfile, warnings_are_errors) || (level == CPP_DL_PEDWARN && CPP_OPTION (pfile, pedantic_errors))) { if (CPP_OPTION (pfile, inhibit_errors)) return 0; level = CPP_DL_ERROR; pfile->errors++; } else if (CPP_OPTION (pfile, inhibit_warnings)) return 0; break; case CPP_DL_ERROR: if (CPP_OPTION (pfile, inhibit_errors)) return 0; /* ICEs cannot be inhibited. */ case CPP_DL_ICE: pfile->errors++; break; } print_location (pfile, src_loc, column); if (CPP_DL_WARNING_P (level)) fputs (_("warning: "), stderr); else if (level == CPP_DL_ICE) fputs (_("internal error: "), stderr); else fputs (_("error: "), stderr); return 1; } /* Don't remove the blank before do, as otherwise the exgettext script will mistake this as a function definition */ #define v_message(msgid, ap) \ do { vfprintf (stderr, _(msgid), ap); putc ('\n', stderr); } while (0) /* Exported interface. */ /* Print an error at the location of the previously lexed token. */ void cpp_error (cpp_reader * pfile, int level, const char *msgid, ...) { source_location src_loc; va_list ap; va_start (ap, msgid); if (CPP_OPTION (pfile, client_diagnostic)) pfile->cb.error (pfile, level, _(msgid), &ap); else { if (CPP_OPTION (pfile, traditional)) { if (pfile->state.in_directive) src_loc = pfile->directive_line; else src_loc = pfile->line_table->highest_line; } else { src_loc = pfile->cur_token[-1].src_loc; } if (_cpp_begin_message (pfile, level, src_loc, 0)) v_message (msgid, ap); } va_end (ap); } /* Print an error at a specific location. */ void cpp_error_with_line (cpp_reader *pfile, int level, source_location src_loc, unsigned int column, const char *msgid, ...) { va_list ap; va_start (ap, msgid); if (_cpp_begin_message (pfile, level, src_loc, column)) v_message (msgid, ap); va_end (ap); } void cpp_errno (cpp_reader *pfile, int level, const char *msgid) { if (msgid[0] == '\0') msgid = _("stdout"); cpp_error (pfile, level, "%s: %s", msgid, xstrerror (errno)); } nescc-1.3.4/libcpp/expr.c000066400000000000000000001254761177770303300152340ustar00rootroot00000000000000/* Parse C expressions for cpplib. Copyright (C) 1987, 1992, 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2004 Free Software Foundation. Contributed by Per Bothner, 1994. This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "system.h" #include "cpplib.h" #include "internal.h" #define PART_PRECISION (sizeof (cpp_num_part) * CHAR_BIT) #define HALF_MASK (~(cpp_num_part) 0 >> (PART_PRECISION / 2)) #define LOW_PART(num_part) (num_part & HALF_MASK) #define HIGH_PART(num_part) (num_part >> (PART_PRECISION / 2)) struct op { const cpp_token *token; /* The token forming op (for diagnostics). */ cpp_num value; /* The value logically "right" of op. */ enum cpp_ttype op; }; /* Some simple utility routines on double integers. */ #define num_zerop(num) ((num.low | num.high) == 0) #define num_eq(num1, num2) (num1.low == num2.low && num1.high == num2.high) static bool num_positive (cpp_num, size_t); static bool num_greater_eq (cpp_num, cpp_num, size_t); static cpp_num num_trim (cpp_num, size_t); static cpp_num num_part_mul (cpp_num_part, cpp_num_part); static cpp_num num_unary_op (cpp_reader *, cpp_num, enum cpp_ttype); static cpp_num num_binary_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype); static cpp_num num_negate (cpp_num, size_t); static cpp_num num_bitwise_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype); static cpp_num num_inequality_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype); static cpp_num num_equality_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype); static cpp_num num_mul (cpp_reader *, cpp_num, cpp_num); static cpp_num num_div_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype); static cpp_num num_lshift (cpp_num, size_t, size_t); static cpp_num num_rshift (cpp_num, size_t, size_t); static cpp_num append_digit (cpp_num, int, int, size_t); static cpp_num parse_defined (cpp_reader *); static cpp_num eval_token (cpp_reader *, const cpp_token *); static struct op *reduce (cpp_reader *, struct op *, enum cpp_ttype); static unsigned int interpret_float_suffix (const uchar *, size_t); static unsigned int interpret_int_suffix (const uchar *, size_t); static void check_promotion (cpp_reader *, const struct op *); /* Token type abuse to create unary plus and minus operators. */ #define CPP_UPLUS ((enum cpp_ttype) (CPP_LAST_CPP_OP + 1)) #define CPP_UMINUS ((enum cpp_ttype) (CPP_LAST_CPP_OP + 2)) /* With -O2, gcc appears to produce nice code, moving the error message load and subsequent jump completely out of the main path. */ #define SYNTAX_ERROR(msgid) \ do { cpp_error (pfile, CPP_DL_ERROR, msgid); goto syntax_error; } while(0) #define SYNTAX_ERROR2(msgid, arg) \ do { cpp_error (pfile, CPP_DL_ERROR, msgid, arg); goto syntax_error; } \ while(0) /* Subroutine of cpp_classify_number. S points to a float suffix of length LEN, possibly zero. Returns 0 for an invalid suffix, or a flag vector describing the suffix. */ static unsigned int interpret_float_suffix (const uchar *s, size_t len) { size_t f, l, w, q, i, d; size_t r, k, u, h; f = l = w = q = i = d = 0; r = k = u = h = 0; while (len--) switch (s[len]) { case 'r': case 'R': r++; break; case 'k': case 'K': k++; break; case 'u': case 'U': u++; break; case 'h': case 'H': h++; break; case 'f': case 'F': if (d > 0) return 0; f++; break; case 'l': case 'L': if (d > 0) return 0; l++; /* If there are two Ls, they must be adjacent and the same case. */ if (l == 2 && s[len] != s[len + 1]) return 0; break; case 'w': case 'W': if (d > 0) return 0; w++; break; case 'q': case 'Q': if (d > 0) return 0; q++; break; case 'i': case 'I': case 'j': case 'J': i++; break; case 'd': case 'D': d++; break; default: return 0; } if (r + k > 1 || h > 1 || l > 2 || u > 1) return 0; if (r == 1) { if (f || i || d || w || q) return 0; return (CPP_N_FRACT | (u ? CPP_N_UNSIGNED : 0) | (h ? CPP_N_SMALL : l == 2 ? CPP_N_LARGE : l == 1 ? CPP_N_MEDIUM : 0)); } if (k == 1) { if (f || i || d || w || q) return 0; return (CPP_N_ACCUM | (u ? CPP_N_UNSIGNED : 0) | (h ? CPP_N_SMALL : l == 2 ? CPP_N_LARGE : l == 1 ? CPP_N_MEDIUM : 0)); } if (f + l + w + q > 1 || i > 1 || h + u > 0) return 0; /* Allow dd, df, dl suffixes for decimal float constants. */ if (d && ((d + f + l != 2) || i)) return 0; return ((i ? CPP_N_IMAGINARY : 0) | (f ? CPP_N_SMALL : l ? CPP_N_LARGE : w ? CPP_N_MD_W : q ? CPP_N_MD_Q : CPP_N_MEDIUM) | (d ? CPP_N_DFLOAT : 0)); } /* Subroutine of cpp_classify_number. S points to an integer suffix of length LEN, possibly zero. Returns 0 for an invalid suffix, or a flag vector describing the suffix. */ static unsigned int interpret_int_suffix (const uchar *s, size_t len) { size_t u, l, i; u = l = i = 0; while (len--) switch (s[len]) { case 'u': case 'U': u++; break; case 'i': case 'I': case 'j': case 'J': i++; break; case 'l': case 'L': l++; /* If there are two Ls, they must be adjacent and the same case. */ if (l == 2 && s[len] != s[len + 1]) return 0; break; default: return 0; } if (l > 2 || u > 1 || i > 1) return 0; return ((i ? CPP_N_IMAGINARY : 0) | (u ? CPP_N_UNSIGNED : 0) | ((l == 0) ? CPP_N_SMALL : (l == 1) ? CPP_N_MEDIUM : CPP_N_LARGE)); } /* Categorize numeric constants according to their field (integer, floating point, or invalid), radix (decimal, octal, hexadecimal), and type suffixes. */ unsigned int cpp_classify_number (cpp_reader *pfile, const cpp_token *token) { const uchar *str = token->val.str.text; const uchar *limit; unsigned int max_digit, result, radix; enum {NOT_FLOAT = 0, AFTER_POINT, AFTER_EXPON} float_flag; /* If the lexer has done its job, length one can only be a single digit. Fast-path this very common case. */ if (token->val.str.len == 1) return CPP_N_INTEGER | CPP_N_SMALL | CPP_N_DECIMAL; limit = str + token->val.str.len; float_flag = NOT_FLOAT; max_digit = 0; radix = 10; /* First, interpret the radix. */ if (*str == '0') { radix = 8; str++; /* Require at least one hex digit to classify it as hex. */ if ((*str == 'x' || *str == 'X') && (str[1] == '.' || ISXDIGIT (str[1]))) { radix = 16; str++; } else if ((*str == 'b' || *str == 'B') && (str[1] == '0' || str[1] == '1')) { radix = 2; str++; } } /* Now scan for a well-formed integer or float. */ for (;;) { unsigned int c = *str++; if (ISDIGIT (c) || (ISXDIGIT (c) && radix == 16)) { c = hex_value (c); if (c > max_digit) max_digit = c; } else if (c == '.') { if (float_flag == NOT_FLOAT) float_flag = AFTER_POINT; else SYNTAX_ERROR ("too many decimal points in number"); } else if ((radix <= 10 && (c == 'e' || c == 'E')) || (radix == 16 && (c == 'p' || c == 'P'))) { float_flag = AFTER_EXPON; break; } else { /* Start of suffix. */ str--; break; } } /* The suffix may be for decimal fixed-point constants without exponent. */ if (radix != 16 && float_flag == NOT_FLOAT) { result = interpret_float_suffix (str, limit - str); if ((result & CPP_N_FRACT) || (result & CPP_N_ACCUM)) { result |= CPP_N_FLOATING; /* We need to restore the radix to 10, if the radix is 8. */ if (radix == 8) radix = 10; if (CPP_PEDANTIC (pfile)) cpp_error (pfile, CPP_DL_PEDWARN, "fixed-point constants are a GCC extension"); goto syntax_ok; } else result = 0; } if (float_flag != NOT_FLOAT && radix == 8) radix = 10; if (max_digit >= radix) { if (radix == 2) SYNTAX_ERROR2 ("invalid digit \"%c\" in binary constant", '0' + max_digit); else SYNTAX_ERROR2 ("invalid digit \"%c\" in octal constant", '0' + max_digit); } if (float_flag != NOT_FLOAT) { if (radix == 2) { cpp_error (pfile, CPP_DL_ERROR, "invalid prefix \"0b\" for floating constant"); return CPP_N_INVALID; } if (radix == 16 && CPP_PEDANTIC (pfile) && !CPP_OPTION (pfile, c99)) cpp_error (pfile, CPP_DL_PEDWARN, "use of C99 hexadecimal floating constant"); if (float_flag == AFTER_EXPON) { if (*str == '+' || *str == '-') str++; /* Exponent is decimal, even if string is a hex float. */ if (!ISDIGIT (*str)) SYNTAX_ERROR ("exponent has no digits"); do str++; while (ISDIGIT (*str)); } else if (radix == 16) SYNTAX_ERROR ("hexadecimal floating constants require an exponent"); result = interpret_float_suffix (str, limit - str); if (result == 0) { cpp_error (pfile, CPP_DL_ERROR, "invalid suffix \"%.*s\" on floating constant", (int) (limit - str), str); return CPP_N_INVALID; } /* Traditional C didn't accept any floating suffixes. */ if (limit != str && CPP_WTRADITIONAL (pfile) && ! cpp_sys_macro_p (pfile)) cpp_error (pfile, CPP_DL_WARNING, "traditional C rejects the \"%.*s\" suffix", (int) (limit - str), str); /* Radix must be 10 for decimal floats. */ if ((result & CPP_N_DFLOAT) && radix != 10) { cpp_error (pfile, CPP_DL_ERROR, "invalid suffix \"%.*s\" with hexadecimal floating constant", (int) (limit - str), str); return CPP_N_INVALID; } if ((result & (CPP_N_FRACT | CPP_N_ACCUM)) && CPP_PEDANTIC (pfile)) cpp_error (pfile, CPP_DL_PEDWARN, "fixed-point constants are a GCC extension"); if ((result & CPP_N_DFLOAT) && CPP_PEDANTIC (pfile)) cpp_error (pfile, CPP_DL_PEDWARN, "decimal float constants are a GCC extension"); result |= CPP_N_FLOATING; } else { result = interpret_int_suffix (str, limit - str); if (result == 0) { cpp_error (pfile, CPP_DL_ERROR, "invalid suffix \"%.*s\" on integer constant", (int) (limit - str), str); return CPP_N_INVALID; } /* Traditional C only accepted the 'L' suffix. Suppress warning about 'LL' with -Wno-long-long. */ if (CPP_WTRADITIONAL (pfile) && ! cpp_sys_macro_p (pfile)) { int u_or_i = (result & (CPP_N_UNSIGNED|CPP_N_IMAGINARY)); int large = (result & CPP_N_WIDTH) == CPP_N_LARGE; if (u_or_i || (large && CPP_OPTION (pfile, warn_long_long))) cpp_error (pfile, CPP_DL_WARNING, "traditional C rejects the \"%.*s\" suffix", (int) (limit - str), str); } if ((result & CPP_N_WIDTH) == CPP_N_LARGE && ! CPP_OPTION (pfile, c99) && CPP_OPTION (pfile, warn_long_long)) cpp_error (pfile, CPP_DL_PEDWARN, "use of C99 long long integer constant"); result |= CPP_N_INTEGER; } syntax_ok: if ((result & CPP_N_IMAGINARY) && CPP_PEDANTIC (pfile)) cpp_error (pfile, CPP_DL_PEDWARN, "imaginary constants are a GCC extension"); if (radix == 2 && CPP_PEDANTIC (pfile)) cpp_error (pfile, CPP_DL_PEDWARN, "binary constants are a GCC extension"); if (radix == 10) result |= CPP_N_DECIMAL; else if (radix == 16) result |= CPP_N_HEX; else if (radix == 2) result |= CPP_N_BINARY; else result |= CPP_N_OCTAL; return result; syntax_error: return CPP_N_INVALID; } /* cpp_interpret_integer converts an integer constant into a cpp_num, of precision options->precision. We do not provide any interface for decimal->float conversion, because the preprocessor doesn't need it and we don't want to drag in GCC's floating point emulator. */ cpp_num cpp_interpret_integer (cpp_reader *pfile, const cpp_token *token, unsigned int type) { const uchar *p, *end; cpp_num result; result.low = 0; result.high = 0; result.unsignedp = !!(type & CPP_N_UNSIGNED); result.overflow = false; p = token->val.str.text; end = p + token->val.str.len; /* Common case of a single digit. */ if (token->val.str.len == 1) result.low = p[0] - '0'; else { cpp_num_part max; size_t precision = CPP_OPTION (pfile, precision); unsigned int base = 10, c = 0; bool overflow = false; if ((type & CPP_N_RADIX) == CPP_N_OCTAL) { base = 8; p++; } else if ((type & CPP_N_RADIX) == CPP_N_HEX) { base = 16; p += 2; } else if ((type & CPP_N_RADIX) == CPP_N_BINARY) { base = 2; p += 2; } /* We can add a digit to numbers strictly less than this without needing the precision and slowness of double integers. */ max = ~(cpp_num_part) 0; if (precision < PART_PRECISION) max >>= PART_PRECISION - precision; max = (max - base + 1) / base + 1; for (; p < end; p++) { c = *p; if (ISDIGIT (c) || (base == 16 && ISXDIGIT (c))) c = hex_value (c); else break; /* Strict inequality for when max is set to zero. */ if (result.low < max) result.low = result.low * base + c; else { result = append_digit (result, c, base, precision); overflow |= result.overflow; max = 0; } } if (overflow) cpp_error (pfile, CPP_DL_PEDWARN, "integer constant is too large for its type"); /* If too big to be signed, consider it unsigned. Only warn for decimal numbers. Traditional numbers were always signed (but we still honor an explicit U suffix); but we only have traditional semantics in directives. */ else if (!result.unsignedp && !(CPP_OPTION (pfile, traditional) && pfile->state.in_directive) && !num_positive (result, precision)) { if (base == 10) cpp_error (pfile, CPP_DL_WARNING, "integer constant is so large that it is unsigned"); result.unsignedp = true; } } return result; } /* Append DIGIT to NUM, a number of PRECISION bits being read in base BASE. */ static cpp_num append_digit (cpp_num num, int digit, int base, size_t precision) { cpp_num result; unsigned int shift; bool overflow; cpp_num_part add_high, add_low; /* Multiply by 2, 8 or 16. Catching this overflow here means we don't need to worry about add_high overflowing. */ switch (base) { case 2: shift = 1; break; case 16: shift = 4; break; default: shift = 3; } overflow = !!(num.high >> (PART_PRECISION - shift)); result.high = num.high << shift; result.low = num.low << shift; result.high |= num.low >> (PART_PRECISION - shift); result.unsignedp = num.unsignedp; if (base == 10) { add_low = num.low << 1; add_high = (num.high << 1) + (num.low >> (PART_PRECISION - 1)); } else add_high = add_low = 0; if (add_low + digit < add_low) add_high++; add_low += digit; if (result.low + add_low < result.low) add_high++; if (result.high + add_high < result.high) overflow = true; result.low += add_low; result.high += add_high; result.overflow = overflow; /* The above code catches overflow of a cpp_num type. This catches overflow of the (possibly shorter) target precision. */ num.low = result.low; num.high = result.high; result = num_trim (result, precision); if (!num_eq (result, num)) result.overflow = true; return result; } /* Handle meeting "defined" in a preprocessor expression. */ static cpp_num parse_defined (cpp_reader *pfile) { cpp_num result; int paren = 0; cpp_hashnode *node = 0; const cpp_token *token; cpp_context *initial_context = pfile->context; /* Don't expand macros. */ pfile->state.prevent_expansion++; token = cpp_get_token (pfile); if (token->type == CPP_OPEN_PAREN) { paren = 1; token = cpp_get_token (pfile); } if (token->type == CPP_NAME) { node = token->val.node; if (paren && cpp_get_token (pfile)->type != CPP_CLOSE_PAREN) { cpp_error (pfile, CPP_DL_ERROR, "missing ')' after \"defined\""); node = 0; } } else { cpp_error (pfile, CPP_DL_ERROR, "operator \"defined\" requires an identifier"); if (token->flags & NAMED_OP) { cpp_token op; op.flags = 0; op.type = token->type; cpp_error (pfile, CPP_DL_ERROR, "(\"%s\" is an alternative token for \"%s\" in C++)", cpp_token_as_text (pfile, token), cpp_token_as_text (pfile, &op)); } } if (node) { if (pfile->context != initial_context && CPP_PEDANTIC (pfile)) cpp_error (pfile, CPP_DL_WARNING, "this use of \"defined\" may not be portable"); _cpp_mark_macro_used (node); /* A possible controlling macro of the form #if !defined (). _cpp_parse_expr checks there was no other junk on the line. */ pfile->mi_ind_cmacro = node; } pfile->state.prevent_expansion--; result.unsignedp = false; result.high = 0; result.overflow = false; result.low = node && node->type == NT_MACRO; return result; } /* Convert a token into a CPP_NUMBER (an interpreted preprocessing number or character constant, or the result of the "defined" or "#" operators). */ static cpp_num eval_token (cpp_reader *pfile, const cpp_token *token) { cpp_num result; unsigned int temp; int unsignedp = 0; result.unsignedp = false; result.overflow = false; switch (token->type) { case CPP_NUMBER: temp = cpp_classify_number (pfile, token); switch (temp & CPP_N_CATEGORY) { case CPP_N_FLOATING: cpp_error (pfile, CPP_DL_ERROR, "floating constant in preprocessor expression"); break; case CPP_N_INTEGER: if (!(temp & CPP_N_IMAGINARY)) return cpp_interpret_integer (pfile, token, temp); cpp_error (pfile, CPP_DL_ERROR, "imaginary number in preprocessor expression"); break; case CPP_N_INVALID: /* Error already issued. */ break; } result.high = result.low = 0; break; case CPP_WCHAR: case CPP_CHAR: { cppchar_t cc = cpp_interpret_charconst (pfile, token, &temp, &unsignedp); result.high = 0; result.low = cc; /* Sign-extend the result if necessary. */ if (!unsignedp && (cppchar_signed_t) cc < 0) { if (PART_PRECISION > BITS_PER_CPPCHAR_T) result.low |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - BITS_PER_CPPCHAR_T)); result.high = ~(cpp_num_part) 0; result = num_trim (result, CPP_OPTION (pfile, precision)); } } break; case CPP_NAME: if (token->val.node == pfile->spec_nodes.n_defined) return parse_defined (pfile); else if (CPP_OPTION (pfile, cplusplus) && (token->val.node == pfile->spec_nodes.n_true || token->val.node == pfile->spec_nodes.n_false)) { result.high = 0; result.low = (token->val.node == pfile->spec_nodes.n_true); } else { result.high = 0; result.low = 0; if (CPP_OPTION (pfile, warn_undef) && !pfile->state.skip_eval) cpp_error (pfile, CPP_DL_WARNING, "\"%s\" is not defined", NODE_NAME (token->val.node)); } break; default: /* CPP_HASH */ _cpp_test_assertion (pfile, &temp); result.high = 0; result.low = temp; } result.unsignedp = !!unsignedp; return result; } /* Operator precedence and flags table. After an operator is returned from the lexer, if it has priority less than the operator on the top of the stack, we reduce the stack by one operator and repeat the test. Since equal priorities do not reduce, this is naturally right-associative. We handle left-associative operators by decrementing the priority of just-lexed operators by one, but retaining the priority of operators already on the stack. The remaining cases are '(' and ')'. We handle '(' by skipping the reduction phase completely. ')' is given lower priority than everything else, including '(', effectively forcing a reduction of the parenthesized expression. If there is a matching '(', the routine reduce() exits immediately. If the normal exit route sees a ')', then there cannot have been a matching '(' and an error message is output. The parser assumes all shifted operators require a left operand unless the flag NO_L_OPERAND is set. These semantics are automatic; any extra semantics need to be handled with operator-specific code. */ /* Flags. If CHECK_PROMOTION, we warn if the effective sign of an operand changes because of integer promotions. */ #define NO_L_OPERAND (1 << 0) #define LEFT_ASSOC (1 << 1) #define CHECK_PROMOTION (1 << 2) /* Operator to priority map. Must be in the same order as the first N entries of enum cpp_ttype. */ static const struct cpp_operator { uchar prio; uchar flags; } optab[] = { /* EQ */ {0, 0}, /* Shouldn't happen. */ /* NOT */ {16, NO_L_OPERAND}, /* GREATER */ {12, LEFT_ASSOC | CHECK_PROMOTION}, /* LESS */ {12, LEFT_ASSOC | CHECK_PROMOTION}, /* PLUS */ {14, LEFT_ASSOC | CHECK_PROMOTION}, /* MINUS */ {14, LEFT_ASSOC | CHECK_PROMOTION}, /* MULT */ {15, LEFT_ASSOC | CHECK_PROMOTION}, /* DIV */ {15, LEFT_ASSOC | CHECK_PROMOTION}, /* MOD */ {15, LEFT_ASSOC | CHECK_PROMOTION}, /* AND */ {9, LEFT_ASSOC | CHECK_PROMOTION}, /* OR */ {7, LEFT_ASSOC | CHECK_PROMOTION}, /* XOR */ {8, LEFT_ASSOC | CHECK_PROMOTION}, /* RSHIFT */ {13, LEFT_ASSOC}, /* LSHIFT */ {13, LEFT_ASSOC}, /* COMPL */ {16, NO_L_OPERAND}, /* AND_AND */ {6, LEFT_ASSOC}, /* OR_OR */ {5, LEFT_ASSOC}, /* QUERY */ {3, 0}, /* COLON */ {4, LEFT_ASSOC | CHECK_PROMOTION}, /* COMMA */ {2, LEFT_ASSOC}, /* OPEN_PAREN */ {1, NO_L_OPERAND}, /* CLOSE_PAREN */ {0, 0}, /* EOF */ {0, 0}, /* EQ_EQ */ {11, LEFT_ASSOC}, /* NOT_EQ */ {11, LEFT_ASSOC}, /* GREATER_EQ */ {12, LEFT_ASSOC | CHECK_PROMOTION}, /* LESS_EQ */ {12, LEFT_ASSOC | CHECK_PROMOTION}, /* UPLUS */ {16, NO_L_OPERAND}, /* UMINUS */ {16, NO_L_OPERAND} }; /* Parse and evaluate a C expression, reading from PFILE. Returns the truth value of the expression. The implementation is an operator precedence parser, i.e. a bottom-up parser, using a stack for not-yet-reduced tokens. The stack base is op_stack, and the current stack pointer is 'top'. There is a stack element for each operator (only), and the most recently pushed operator is 'top->op'. An operand (value) is stored in the 'value' field of the stack element of the operator that precedes it. */ bool _cpp_parse_expr (cpp_reader *pfile) { struct op *top = pfile->op_stack; unsigned int lex_count; bool saw_leading_not, want_value = true; pfile->state.skip_eval = 0; /* Set up detection of #if ! defined(). */ pfile->mi_ind_cmacro = 0; saw_leading_not = false; lex_count = 0; /* Lowest priority operator prevents further reductions. */ top->op = CPP_EOF; for (;;) { struct op op; lex_count++; op.token = cpp_get_token (pfile); op.op = op.token->type; switch (op.op) { /* These tokens convert into values. */ case CPP_NUMBER: case CPP_CHAR: case CPP_WCHAR: case CPP_NAME: case CPP_HASH: if (!want_value) SYNTAX_ERROR2 ("missing binary operator before token \"%s\"", cpp_token_as_text (pfile, op.token)); want_value = false; top->value = eval_token (pfile, op.token); continue; case CPP_NOT: saw_leading_not = lex_count == 1; break; case CPP_PLUS: if (want_value) op.op = CPP_UPLUS; break; case CPP_MINUS: if (want_value) op.op = CPP_UMINUS; break; default: if ((int) op.op <= (int) CPP_EQ || (int) op.op >= (int) CPP_PLUS_EQ) SYNTAX_ERROR2 ("token \"%s\" is not valid in preprocessor expressions", cpp_token_as_text (pfile, op.token)); break; } /* Check we have a value or operator as appropriate. */ if (optab[op.op].flags & NO_L_OPERAND) { if (!want_value) SYNTAX_ERROR2 ("missing binary operator before token \"%s\"", cpp_token_as_text (pfile, op.token)); } else if (want_value) { /* We want a number (or expression) and haven't got one. Try to emit a specific diagnostic. */ if (op.op == CPP_CLOSE_PAREN && top->op == CPP_OPEN_PAREN) SYNTAX_ERROR ("missing expression between '(' and ')'"); if (op.op == CPP_EOF && top->op == CPP_EOF) SYNTAX_ERROR ("#if with no expression"); if (top->op != CPP_EOF && top->op != CPP_OPEN_PAREN) SYNTAX_ERROR2 ("operator '%s' has no right operand", cpp_token_as_text (pfile, top->token)); else if (op.op == CPP_CLOSE_PAREN || op.op == CPP_EOF) /* Complain about missing paren during reduction. */; else SYNTAX_ERROR2 ("operator '%s' has no left operand", cpp_token_as_text (pfile, op.token)); } top = reduce (pfile, top, op.op); if (!top) goto syntax_error; if (op.op == CPP_EOF) break; switch (op.op) { case CPP_CLOSE_PAREN: continue; case CPP_OR_OR: if (!num_zerop (top->value)) pfile->state.skip_eval++; break; case CPP_AND_AND: case CPP_QUERY: if (num_zerop (top->value)) pfile->state.skip_eval++; break; case CPP_COLON: if (top->op != CPP_QUERY) SYNTAX_ERROR (" ':' without preceding '?'"); if (!num_zerop (top[-1].value)) /* Was '?' condition true? */ pfile->state.skip_eval++; else pfile->state.skip_eval--; default: break; } want_value = true; /* Check for and handle stack overflow. */ if (++top == pfile->op_limit) top = _cpp_expand_op_stack (pfile); top->op = op.op; top->token = op.token; } /* The controlling macro expression is only valid if we called lex 3 times: and . push_conditional () checks that we are at top-of-file. */ if (pfile->mi_ind_cmacro && !(saw_leading_not && lex_count == 3)) pfile->mi_ind_cmacro = 0; if (top != pfile->op_stack) { cpp_error (pfile, CPP_DL_ICE, "unbalanced stack in #if"); syntax_error: return false; /* Return false on syntax error. */ } return !num_zerop (top->value); } /* Reduce the operator / value stack if possible, in preparation for pushing operator OP. Returns NULL on error, otherwise the top of the stack. */ static struct op * reduce (cpp_reader *pfile, struct op *top, enum cpp_ttype op) { unsigned int prio; if (top->op <= CPP_EQ || top->op > CPP_LAST_CPP_OP + 2) { bad_op: cpp_error (pfile, CPP_DL_ICE, "impossible operator '%u'", top->op); return 0; } if (op == CPP_OPEN_PAREN) return top; /* Decrement the priority of left-associative operators to force a reduction with operators of otherwise equal priority. */ prio = optab[op].prio - ((optab[op].flags & LEFT_ASSOC) != 0); while (prio < optab[top->op].prio) { if (CPP_OPTION (pfile, warn_num_sign_change) && optab[top->op].flags & CHECK_PROMOTION) check_promotion (pfile, top); switch (top->op) { case CPP_UPLUS: case CPP_UMINUS: case CPP_NOT: case CPP_COMPL: top[-1].value = num_unary_op (pfile, top->value, top->op); break; case CPP_PLUS: case CPP_MINUS: case CPP_RSHIFT: case CPP_LSHIFT: case CPP_COMMA: top[-1].value = num_binary_op (pfile, top[-1].value, top->value, top->op); break; case CPP_GREATER: case CPP_LESS: case CPP_GREATER_EQ: case CPP_LESS_EQ: top[-1].value = num_inequality_op (pfile, top[-1].value, top->value, top->op); break; case CPP_EQ_EQ: case CPP_NOT_EQ: top[-1].value = num_equality_op (pfile, top[-1].value, top->value, top->op); break; case CPP_AND: case CPP_OR: case CPP_XOR: top[-1].value = num_bitwise_op (pfile, top[-1].value, top->value, top->op); break; case CPP_MULT: top[-1].value = num_mul (pfile, top[-1].value, top->value); break; case CPP_DIV: case CPP_MOD: top[-1].value = num_div_op (pfile, top[-1].value, top->value, top->op); break; case CPP_OR_OR: top--; if (!num_zerop (top->value)) pfile->state.skip_eval--; top->value.low = (!num_zerop (top->value) || !num_zerop (top[1].value)); top->value.high = 0; top->value.unsignedp = false; top->value.overflow = false; continue; case CPP_AND_AND: top--; if (num_zerop (top->value)) pfile->state.skip_eval--; top->value.low = (!num_zerop (top->value) && !num_zerop (top[1].value)); top->value.high = 0; top->value.unsignedp = false; top->value.overflow = false; continue; case CPP_OPEN_PAREN: if (op != CPP_CLOSE_PAREN) { cpp_error (pfile, CPP_DL_ERROR, "missing ')' in expression"); return 0; } top--; top->value = top[1].value; return top; case CPP_COLON: top -= 2; if (!num_zerop (top->value)) { pfile->state.skip_eval--; top->value = top[1].value; } else top->value = top[2].value; top->value.unsignedp = (top[1].value.unsignedp || top[2].value.unsignedp); continue; case CPP_QUERY: cpp_error (pfile, CPP_DL_ERROR, "'?' without following ':'"); return 0; default: goto bad_op; } top--; if (top->value.overflow && !pfile->state.skip_eval) cpp_error (pfile, CPP_DL_PEDWARN, "integer overflow in preprocessor expression"); } if (op == CPP_CLOSE_PAREN) { cpp_error (pfile, CPP_DL_ERROR, "missing '(' in expression"); return 0; } return top; } /* Returns the position of the old top of stack after expansion. */ struct op * _cpp_expand_op_stack (cpp_reader *pfile) { size_t old_size = (size_t) (pfile->op_limit - pfile->op_stack); size_t new_size = old_size * 2 + 20; pfile->op_stack = XRESIZEVEC (struct op, pfile->op_stack, new_size); pfile->op_limit = pfile->op_stack + new_size; return pfile->op_stack + old_size; } /* Emits a warning if the effective sign of either operand of OP changes because of integer promotions. */ static void check_promotion (cpp_reader *pfile, const struct op *op) { if (op->value.unsignedp == op[-1].value.unsignedp) return; if (op->value.unsignedp) { if (!num_positive (op[-1].value, CPP_OPTION (pfile, precision))) cpp_error (pfile, CPP_DL_WARNING, "the left operand of \"%s\" changes sign when promoted", cpp_token_as_text (pfile, op->token)); } else if (!num_positive (op->value, CPP_OPTION (pfile, precision))) cpp_error (pfile, CPP_DL_WARNING, "the right operand of \"%s\" changes sign when promoted", cpp_token_as_text (pfile, op->token)); } /* Clears the unused high order bits of the number pointed to by PNUM. */ static cpp_num num_trim (cpp_num num, size_t precision) { if (precision > PART_PRECISION) { precision -= PART_PRECISION; if (precision < PART_PRECISION) num.high &= ((cpp_num_part) 1 << precision) - 1; } else { if (precision < PART_PRECISION) num.low &= ((cpp_num_part) 1 << precision) - 1; num.high = 0; } return num; } /* True iff A (presumed signed) >= 0. */ static bool num_positive (cpp_num num, size_t precision) { if (precision > PART_PRECISION) { precision -= PART_PRECISION; return (num.high & (cpp_num_part) 1 << (precision - 1)) == 0; } return (num.low & (cpp_num_part) 1 << (precision - 1)) == 0; } /* Sign extend a number, with PRECISION significant bits and all others assumed clear, to fill out a cpp_num structure. */ cpp_num cpp_num_sign_extend (cpp_num num, size_t precision) { if (!num.unsignedp) { if (precision > PART_PRECISION) { precision -= PART_PRECISION; if (precision < PART_PRECISION && (num.high & (cpp_num_part) 1 << (precision - 1))) num.high |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - precision)); } else if (num.low & (cpp_num_part) 1 << (precision - 1)) { if (precision < PART_PRECISION) num.low |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - precision)); num.high = ~(cpp_num_part) 0; } } return num; } /* Returns the negative of NUM. */ static cpp_num num_negate (cpp_num num, size_t precision) { cpp_num copy; copy = num; num.high = ~num.high; num.low = ~num.low; if (++num.low == 0) num.high++; num = num_trim (num, precision); num.overflow = (!num.unsignedp && num_eq (num, copy) && !num_zerop (num)); return num; } /* Returns true if A >= B. */ static bool num_greater_eq (cpp_num pa, cpp_num pb, size_t precision) { bool unsignedp; unsignedp = pa.unsignedp || pb.unsignedp; if (!unsignedp) { /* Both numbers have signed type. If they are of different sign, the answer is the sign of A. */ unsignedp = num_positive (pa, precision); if (unsignedp != num_positive (pb, precision)) return unsignedp; /* Otherwise we can do an unsigned comparison. */ } return (pa.high > pb.high) || (pa.high == pb.high && pa.low >= pb.low); } /* Returns LHS OP RHS, where OP is a bit-wise operation. */ static cpp_num num_bitwise_op (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_num lhs, cpp_num rhs, enum cpp_ttype op) { lhs.overflow = false; lhs.unsignedp = lhs.unsignedp || rhs.unsignedp; /* As excess precision is zeroed, there is no need to num_trim () as these operations cannot introduce a set bit there. */ if (op == CPP_AND) { lhs.low &= rhs.low; lhs.high &= rhs.high; } else if (op == CPP_OR) { lhs.low |= rhs.low; lhs.high |= rhs.high; } else { lhs.low ^= rhs.low; lhs.high ^= rhs.high; } return lhs; } /* Returns LHS OP RHS, where OP is an inequality. */ static cpp_num num_inequality_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op) { bool gte = num_greater_eq (lhs, rhs, CPP_OPTION (pfile, precision)); if (op == CPP_GREATER_EQ) lhs.low = gte; else if (op == CPP_LESS) lhs.low = !gte; else if (op == CPP_GREATER) lhs.low = gte && !num_eq (lhs, rhs); else /* CPP_LESS_EQ. */ lhs.low = !gte || num_eq (lhs, rhs); lhs.high = 0; lhs.overflow = false; lhs.unsignedp = false; return lhs; } /* Returns LHS OP RHS, where OP is == or !=. */ static cpp_num num_equality_op (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_num lhs, cpp_num rhs, enum cpp_ttype op) { /* Work around a 3.0.4 bug; see PR 6950. */ bool eq = num_eq (lhs, rhs); if (op == CPP_NOT_EQ) eq = !eq; lhs.low = eq; lhs.high = 0; lhs.overflow = false; lhs.unsignedp = false; return lhs; } /* Shift NUM, of width PRECISION, right by N bits. */ static cpp_num num_rshift (cpp_num num, size_t precision, size_t n) { cpp_num_part sign_mask; bool x = num_positive (num, precision); if (num.unsignedp || x) sign_mask = 0; else sign_mask = ~(cpp_num_part) 0; if (n >= precision) num.high = num.low = sign_mask; else { /* Sign-extend. */ if (precision < PART_PRECISION) num.high = sign_mask, num.low |= sign_mask << precision; else if (precision < 2 * PART_PRECISION) num.high |= sign_mask << (precision - PART_PRECISION); if (n >= PART_PRECISION) { n -= PART_PRECISION; num.low = num.high; num.high = sign_mask; } if (n) { num.low = (num.low >> n) | (num.high << (PART_PRECISION - n)); num.high = (num.high >> n) | (sign_mask << (PART_PRECISION - n)); } } num = num_trim (num, precision); num.overflow = false; return num; } /* Shift NUM, of width PRECISION, left by N bits. */ static cpp_num num_lshift (cpp_num num, size_t precision, size_t n) { if (n >= precision) { num.overflow = !num.unsignedp && !num_zerop (num); num.high = num.low = 0; } else { cpp_num orig, maybe_orig; size_t m = n; orig = num; if (m >= PART_PRECISION) { m -= PART_PRECISION; num.high = num.low; num.low = 0; } if (m) { num.high = (num.high << m) | (num.low >> (PART_PRECISION - m)); num.low <<= m; } num = num_trim (num, precision); if (num.unsignedp) num.overflow = false; else { maybe_orig = num_rshift (num, precision, n); num.overflow = !num_eq (orig, maybe_orig); } } return num; } /* The four unary operators: +, -, ! and ~. */ static cpp_num num_unary_op (cpp_reader *pfile, cpp_num num, enum cpp_ttype op) { switch (op) { case CPP_UPLUS: if (CPP_WTRADITIONAL (pfile) && !pfile->state.skip_eval) cpp_error (pfile, CPP_DL_WARNING, "traditional C rejects the unary plus operator"); num.overflow = false; break; case CPP_UMINUS: num = num_negate (num, CPP_OPTION (pfile, precision)); break; case CPP_COMPL: num.high = ~num.high; num.low = ~num.low; num = num_trim (num, CPP_OPTION (pfile, precision)); num.overflow = false; break; default: /* case CPP_NOT: */ num.low = num_zerop (num); num.high = 0; num.overflow = false; num.unsignedp = false; break; } return num; } /* The various binary operators. */ static cpp_num num_binary_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op) { cpp_num result; size_t precision = CPP_OPTION (pfile, precision); size_t n; switch (op) { /* Shifts. */ case CPP_LSHIFT: case CPP_RSHIFT: if (!rhs.unsignedp && !num_positive (rhs, precision)) { /* A negative shift is a positive shift the other way. */ if (op == CPP_LSHIFT) op = CPP_RSHIFT; else op = CPP_LSHIFT; rhs = num_negate (rhs, precision); } if (rhs.high) n = ~0; /* Maximal. */ else n = rhs.low; if (op == CPP_LSHIFT) lhs = num_lshift (lhs, precision, n); else lhs = num_rshift (lhs, precision, n); break; /* Arithmetic. */ case CPP_MINUS: rhs = num_negate (rhs, precision); case CPP_PLUS: result.low = lhs.low + rhs.low; result.high = lhs.high + rhs.high; if (result.low < lhs.low) result.high++; result.unsignedp = lhs.unsignedp || rhs.unsignedp; result.overflow = false; result = num_trim (result, precision); if (!result.unsignedp) { bool lhsp = num_positive (lhs, precision); result.overflow = (lhsp == num_positive (rhs, precision) && lhsp != num_positive (result, precision)); } return result; /* Comma. */ default: /* case CPP_COMMA: */ if (CPP_PEDANTIC (pfile) && (!CPP_OPTION (pfile, c99) || !pfile->state.skip_eval)) cpp_error (pfile, CPP_DL_PEDWARN, "comma operator in operand of #if"); lhs = rhs; break; } return lhs; } /* Multiplies two unsigned cpp_num_parts to give a cpp_num. This cannot overflow. */ static cpp_num num_part_mul (cpp_num_part lhs, cpp_num_part rhs) { cpp_num result; cpp_num_part middle[2], temp; result.low = LOW_PART (lhs) * LOW_PART (rhs); result.high = HIGH_PART (lhs) * HIGH_PART (rhs); middle[0] = LOW_PART (lhs) * HIGH_PART (rhs); middle[1] = HIGH_PART (lhs) * LOW_PART (rhs); temp = result.low; result.low += LOW_PART (middle[0]) << (PART_PRECISION / 2); if (result.low < temp) result.high++; temp = result.low; result.low += LOW_PART (middle[1]) << (PART_PRECISION / 2); if (result.low < temp) result.high++; result.high += HIGH_PART (middle[0]); result.high += HIGH_PART (middle[1]); result.unsignedp = true; result.overflow = false; return result; } /* Multiply two preprocessing numbers. */ static cpp_num num_mul (cpp_reader *pfile, cpp_num lhs, cpp_num rhs) { cpp_num result, temp; bool unsignedp = lhs.unsignedp || rhs.unsignedp; bool overflow, negate = false; size_t precision = CPP_OPTION (pfile, precision); /* Prepare for unsigned multiplication. */ if (!unsignedp) { if (!num_positive (lhs, precision)) negate = !negate, lhs = num_negate (lhs, precision); if (!num_positive (rhs, precision)) negate = !negate, rhs = num_negate (rhs, precision); } overflow = lhs.high && rhs.high; result = num_part_mul (lhs.low, rhs.low); temp = num_part_mul (lhs.high, rhs.low); result.high += temp.low; if (temp.high) overflow = true; temp = num_part_mul (lhs.low, rhs.high); result.high += temp.low; if (temp.high) overflow = true; temp.low = result.low, temp.high = result.high; result = num_trim (result, precision); if (!num_eq (result, temp)) overflow = true; if (negate) result = num_negate (result, precision); if (unsignedp) result.overflow = false; else result.overflow = overflow || (num_positive (result, precision) ^ !negate && !num_zerop (result)); result.unsignedp = unsignedp; return result; } /* Divide two preprocessing numbers, returning the answer or the remainder depending upon OP. */ static cpp_num num_div_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op) { cpp_num result, sub; cpp_num_part mask; bool unsignedp = lhs.unsignedp || rhs.unsignedp; bool negate = false, lhs_neg = false; size_t i, precision = CPP_OPTION (pfile, precision); /* Prepare for unsigned division. */ if (!unsignedp) { if (!num_positive (lhs, precision)) negate = !negate, lhs_neg = true, lhs = num_negate (lhs, precision); if (!num_positive (rhs, precision)) negate = !negate, rhs = num_negate (rhs, precision); } /* Find the high bit. */ if (rhs.high) { i = precision - 1; mask = (cpp_num_part) 1 << (i - PART_PRECISION); for (; ; i--, mask >>= 1) if (rhs.high & mask) break; } else if (rhs.low) { if (precision > PART_PRECISION) i = precision - PART_PRECISION - 1; else i = precision - 1; mask = (cpp_num_part) 1 << i; for (; ; i--, mask >>= 1) if (rhs.low & mask) break; } else { if (!pfile->state.skip_eval) cpp_error (pfile, CPP_DL_ERROR, "division by zero in #if"); return lhs; } /* First nonzero bit of RHS is bit I. Do naive division by shifting the RHS fully left, and subtracting from LHS if LHS is at least as big, and then repeating but with one less shift. This is not very efficient, but is easy to understand. */ rhs.unsignedp = true; lhs.unsignedp = true; i = precision - i - 1; sub = num_lshift (rhs, precision, i); result.high = result.low = 0; for (;;) { if (num_greater_eq (lhs, sub, precision)) { lhs = num_binary_op (pfile, lhs, sub, CPP_MINUS); if (i >= PART_PRECISION) result.high |= (cpp_num_part) 1 << (i - PART_PRECISION); else result.low |= (cpp_num_part) 1 << i; } if (i-- == 0) break; sub.low = (sub.low >> 1) | (sub.high << (PART_PRECISION - 1)); sub.high >>= 1; } /* We divide so that the remainder has the sign of the LHS. */ if (op == CPP_DIV) { result.unsignedp = unsignedp; result.overflow = false; if (!unsignedp) { if (negate) result = num_negate (result, precision); result.overflow = (num_positive (result, precision) ^ !negate && !num_zerop (result)); } return result; } /* CPP_MOD. */ lhs.unsignedp = unsignedp; lhs.overflow = false; if (lhs_neg) lhs = num_negate (lhs, precision); return lhs; } nescc-1.3.4/libcpp/files.c000066400000000000000000001411771177770303300153540ustar00rootroot00000000000000/* Part of CPP library. File handling. Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. Written by Per Bothner, 1994. Based on CCCP program by Paul Rubin, June 1986 Adapted to ANSI C, Richard Stallman, Jan 1987 Split out of cpplib.c, Zack Weinberg, Oct 1998 Reimplemented, Neil Booth, Jul 2003 This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "system.h" #include "cpplib.h" #include "internal.h" #include "mkdeps.h" #include "obstack.h" #include "hashtab.h" #include "md5.h" #include /* Variable length record files on VMS will have a stat size that includes record control characters that won't be included in the read size. */ #ifdef VMS # define FAB_C_VAR 2 /* variable length records (see Starlet fabdef.h) */ # define STAT_SIZE_RELIABLE(ST) ((ST).st_fab_rfm != FAB_C_VAR) #else # define STAT_SIZE_RELIABLE(ST) true #endif #ifdef __DJGPP__ #include /* For DJGPP redirected input is opened in text mode. */ # define set_stdin_to_binary_mode() \ if (! isatty (0)) setmode (0, O_BINARY) #else # define set_stdin_to_binary_mode() /* Nothing */ #endif /* This structure represents a file searched for by CPP, whether it exists or not. An instance may be pointed to by more than one file_hash_entry; at present no reference count is kept. */ struct _cpp_file { /* Filename as given to #include or command line switch. */ const char *name; /* The full path used to find the file. */ const char *path; /* The full path of the pch file. */ const char *pchname; /* The file's path with the basename stripped. NULL if it hasn't been calculated yet. */ const char *dir_name; /* Chain through all files. */ struct _cpp_file *next_file; /* The contents of NAME after calling read_file(). */ const uchar *buffer; /* The macro, if any, preventing re-inclusion. */ const cpp_hashnode *cmacro; /* The directory in the search path where FILE was found. Used for #include_next and determining whether a header is a system header. */ cpp_dir *dir; /* As filled in by stat(2) for the file. */ struct stat st; /* File descriptor. Invalid if -1, otherwise open. */ int fd; /* Zero if this file was successfully opened and stat()-ed, otherwise errno obtained from failure. */ int err_no; /* Number of times the file has been stacked for preprocessing. */ unsigned short stack_count; /* If opened with #import or contains #pragma once. */ bool once_only; /* If read() failed before. */ bool dont_read; /* If this file is the main file. */ bool main_file; /* If BUFFER above contains the true contents of the file. */ bool buffer_valid; /* File is a PCH (on return from find_include_file). */ bool pch; }; /* A singly-linked list for all searches for a given file name, with its head pointed to by a slot in FILE_HASH. The file name is what appeared between the quotes in a #include directive; it can be determined implicitly from the hash table location or explicitly from FILE->name. FILE is a structure containing details about the file that was found with that search, or details of how the search failed. START_DIR is the starting location of the search in the include chain. The current directories for "" includes are also hashed in the hash table and therefore unique. Files that are looked up without using a search path, such as absolute filenames and file names from the command line share a special starting directory so they don't cause cache hits with normal include-chain lookups. If START_DIR is NULL then the entry is for a directory, not a file, and the directory is in DIR. Since the starting point in a file lookup chain is never NULL, this means that simple pointer comparisons against START_DIR can be made to determine cache hits in file lookups. If a cache lookup fails because of e.g. an extra "./" in the path, then nothing will break. It is just less efficient as CPP will have to do more work re-preprocessing the file, and/or comparing its contents against earlier once-only files. */ struct file_hash_entry { struct file_hash_entry *next; cpp_dir *start_dir; source_location location; union { _cpp_file *file; cpp_dir *dir; } u; }; /* Number of entries to put in a file_hash_entry pool. */ #define FILE_HASH_POOL_SIZE 127 /* A file hash entry pool. We allocate file_hash_entry object from one of these. */ struct file_hash_entry_pool { /* Number of entries used from this pool. */ unsigned int file_hash_entries_used; /* Next pool in the chain; used when freeing. */ struct file_hash_entry_pool *next; /* The memory pool. */ struct file_hash_entry pool[FILE_HASH_POOL_SIZE]; }; static bool open_file (_cpp_file *file); static bool pch_open_file (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch); static bool find_file_in_dir (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch); static bool read_file_guts (cpp_reader *pfile, _cpp_file *file); static bool read_file (cpp_reader *pfile, _cpp_file *file); static bool should_stack_file (cpp_reader *, _cpp_file *file, bool import); static struct cpp_dir *search_path_head (cpp_reader *, const char *fname, int angle_brackets, enum include_type); static const char *dir_name_of_file (_cpp_file *file); static void open_file_failed (cpp_reader *pfile, _cpp_file *file, int); static struct file_hash_entry *search_cache (struct file_hash_entry *head, const cpp_dir *start_dir); static _cpp_file *make_cpp_file (cpp_reader *, cpp_dir *, const char *fname); static void destroy_cpp_file (_cpp_file *); static cpp_dir *make_cpp_dir (cpp_reader *, const char *dir_name, int sysp); static void allocate_file_hash_entries (cpp_reader *pfile); static struct file_hash_entry *new_file_hash_entry (cpp_reader *pfile); static int report_missing_guard (void **slot, void *b); static hashval_t file_hash_hash (const void *p); static int file_hash_eq (const void *p, const void *q); static char *read_filename_string (int ch, FILE *f); static void read_name_map (cpp_dir *dir); static char *remap_filename (cpp_reader *pfile, _cpp_file *file); static char *append_file_to_dir (const char *fname, cpp_dir *dir); static bool validate_pch (cpp_reader *, _cpp_file *file, const char *pchname); static int pchf_save_compare (const void *e1, const void *e2); static int pchf_compare (const void *d_p, const void *e_p); static bool check_file_against_entries (cpp_reader *, _cpp_file *, bool); /* Given a filename in FILE->PATH, with the empty string interpreted as , open it. On success FILE contains an open file descriptor and stat information for the file. On failure the file descriptor is -1 and the appropriate errno is also stored in FILE. Returns TRUE iff successful. We used to open files in nonblocking mode, but that caused more problems than it solved. Do take care not to acquire a controlling terminal by mistake (this can't happen on sane systems, but paranoia is a virtue). Use the three-argument form of open even though we aren't specifying O_CREAT, to defend against broken system headers. O_BINARY tells some runtime libraries (notably DJGPP) not to do newline translation; we can handle DOS line breaks just fine ourselves. */ static bool open_file (_cpp_file *file) { if (file->path[0] == '\0') { file->fd = 0; set_stdin_to_binary_mode (); } else file->fd = open (file->path, O_RDONLY | O_NOCTTY | O_BINARY, 0666); if (file->fd != -1) { if (fstat (file->fd, &file->st) == 0) { if (!S_ISDIR (file->st.st_mode)) { file->err_no = 0; return true; } /* Ignore a directory and continue the search. The file we're looking for may be elsewhere in the search path. */ errno = ENOENT; } close (file->fd); file->fd = -1; } #if defined(_WIN32) && !defined(__CYGWIN__) else if (errno == EACCES) { /* On most UNIX systems, open succeeds on a directory. Above, we check if we have opened a directory and if so, set errno to ENOENT. However, on Windows, opening a directory fails with EACCES. We want to return ENOENT in that case too. */ if (stat (file->path, &file->st) == 0 && S_ISDIR (file->st.st_mode)) errno = ENOENT; else /* The call to stat may have reset errno. */ errno = EACCES; } #endif else if (errno == ENOTDIR) errno = ENOENT; file->err_no = errno; return false; } /* Temporary PCH intercept of opening a file. Try to find a PCH file based on FILE->name and FILE->dir, and test those found for validity using PFILE->cb.valid_pch. Return true iff a valid file is found. Set *INVALID_PCH if a PCH file is found but wasn't valid. */ static bool pch_open_file (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch) { static const char extension[] = ".gch"; const char *path = file->path; size_t len, flen; char *pchname; struct stat st; bool valid = false; /* No PCH on or if not requested. */ if (file->name[0] == '\0' || !pfile->cb.valid_pch) return false; flen = strlen (path); len = flen + sizeof (extension); pchname = XNEWVEC (char, len); memcpy (pchname, path, flen); memcpy (pchname + flen, extension, sizeof (extension)); if (stat (pchname, &st) == 0) { DIR *pchdir; struct dirent *d; size_t dlen, plen = len; if (!S_ISDIR (st.st_mode)) valid = validate_pch (pfile, file, pchname); else if ((pchdir = opendir (pchname)) != NULL) { pchname[plen - 1] = '/'; while ((d = readdir (pchdir)) != NULL) { dlen = strlen (d->d_name) + 1; if ((strcmp (d->d_name, ".") == 0) || (strcmp (d->d_name, "..") == 0)) continue; if (dlen + plen > len) { len += dlen + 64; pchname = XRESIZEVEC (char, pchname, len); } memcpy (pchname + plen, d->d_name, dlen); valid = validate_pch (pfile, file, pchname); if (valid) break; } closedir (pchdir); } if (valid) file->pch = true; else *invalid_pch = true; } if (valid) file->pchname = pchname; else free (pchname); return valid; } /* Try to open the path FILE->name appended to FILE->dir. This is where remap and PCH intercept the file lookup process. Return true if the file was found, whether or not the open was successful. Set *INVALID_PCH to true if a PCH file is found but wasn't valid. */ static bool find_file_in_dir (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch) { char *path; if (CPP_OPTION (pfile, remap) && (path = remap_filename (pfile, file))) ; else if (file->dir->construct) path = file->dir->construct (file->name, file->dir); else path = append_file_to_dir (file->name, file->dir); if (path) { hashval_t hv = htab_hash_string (path); char *copy; void **pp; if (htab_find_with_hash (pfile->nonexistent_file_hash, path, hv) != NULL) { file->err_no = ENOENT; return false; } file->path = path; if (pch_open_file (pfile, file, invalid_pch)) return true; if (open_file (file)) return true; if (file->err_no != ENOENT) { open_file_failed (pfile, file, 0); return true; } /* We copy the path name onto an obstack partly so that we don't leak the memory, but mostly so that we don't fragment the heap. */ copy = obstack_copy0 (&pfile->nonexistent_file_ob, path, strlen (path)); free (path); pp = htab_find_slot_with_hash (pfile->nonexistent_file_hash, copy, hv, INSERT); *pp = copy; file->path = file->name; } else { file->err_no = ENOENT; file->path = NULL; } return false; } /* Return tue iff the missing_header callback found the given HEADER. */ static bool search_path_exhausted (cpp_reader *pfile, const char *header, _cpp_file *file) { missing_header_cb func = pfile->cb.missing_header; /* When the regular search path doesn't work, try context dependent headers search paths. */ if (func && file->dir == NULL) { if ((file->path = func (pfile, header, &file->dir)) != NULL) { if (open_file (file)) return true; free ((void *)file->path); } file->path = file->name; } return false; } bool _cpp_find_failed (_cpp_file *file) { return file->err_no != 0; } /* Given a filename FNAME search for such a file in the include path starting from START_DIR. If FNAME is the empty string it is interpreted as STDIN if START_DIR is PFILE->no_search_path. If the file is not found in the file cache fall back to the O/S and add the result to our cache. If the file was not found in the filesystem, or there was an error opening it, then ERR_NO is nonzero and FD is -1. If the file was found, then ERR_NO is zero and FD could be -1 or an open file descriptor. FD can be -1 if the file was found in the cache and had previously been closed. To open it again pass the return value to open_file(). */ _cpp_file * _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool fake, int angle_brackets) { struct file_hash_entry *entry, **hash_slot; _cpp_file *file; bool invalid_pch = false; bool saw_bracket_include = false; bool saw_quote_include = false; struct cpp_dir *found_in_cache = NULL; /* Ensure we get no confusion between cached files and directories. */ if (start_dir == NULL) cpp_error (pfile, CPP_DL_ICE, "NULL directory in find_file"); hash_slot = (struct file_hash_entry **) htab_find_slot_with_hash (pfile->file_hash, fname, htab_hash_string (fname), INSERT); /* First check the cache before we resort to memory allocation. */ entry = search_cache (*hash_slot, start_dir); if (entry) return entry->u.file; file = make_cpp_file (pfile, start_dir, fname); /* Try each path in the include chain. */ for (; !fake ;) { if (find_file_in_dir (pfile, file, &invalid_pch)) break; file->dir = file->dir->next; if (file->dir == NULL) { if (search_path_exhausted (pfile, fname, file)) { /* Although this file must not go in the cache, because the file found might depend on things (like the current file) that aren't represented in the cache, it still has to go in the list of all files so that #import works. */ file->next_file = pfile->all_files; pfile->all_files = file; return file; } open_file_failed (pfile, file, angle_brackets); if (invalid_pch) { cpp_error (pfile, CPP_DL_ERROR, "one or more PCH files were found, but they were invalid"); if (!cpp_get_options (pfile)->warn_invalid_pch) cpp_error (pfile, CPP_DL_ERROR, "use -Winvalid-pch for more information"); } break; } /* Only check the cache for the starting location (done above) and the quote and bracket chain heads because there are no other possible starting points for searches. */ if (file->dir == pfile->bracket_include) saw_bracket_include = true; else if (file->dir == pfile->quote_include) saw_quote_include = true; else continue; entry = search_cache (*hash_slot, file->dir); if (entry) { found_in_cache = file->dir; break; } } if (entry) { /* Cache for START_DIR too, sharing the _cpp_file structure. */ free ((char *) file->name); free (file); file = entry->u.file; } else { /* This is a new file; put it in the list. */ file->next_file = pfile->all_files; pfile->all_files = file; } /* Store this new result in the hash table. */ entry = new_file_hash_entry (pfile); entry->next = *hash_slot; entry->start_dir = start_dir; entry->location = pfile->line_table->highest_location; entry->u.file = file; *hash_slot = entry; /* If we passed the quote or bracket chain heads, cache them also. This speeds up processing if there are lots of -I options. */ if (saw_bracket_include && pfile->bracket_include != start_dir && found_in_cache != pfile->bracket_include) { entry = new_file_hash_entry (pfile); entry->next = *hash_slot; entry->start_dir = pfile->bracket_include; entry->location = pfile->line_table->highest_location; entry->u.file = file; *hash_slot = entry; } if (saw_quote_include && pfile->quote_include != start_dir && found_in_cache != pfile->quote_include) { entry = new_file_hash_entry (pfile); entry->next = *hash_slot; entry->start_dir = pfile->quote_include; entry->location = pfile->line_table->highest_location; entry->u.file = file; *hash_slot = entry; } return file; } /* Read a file into FILE->buffer, returning true on success. If FILE->fd is something weird, like a block device, we don't want to read it at all. Don't even try to figure out what something is, except for plain files and block devices, since there is no reliable portable way of doing this. FIXME: Flush file cache and try again if we run out of memory. */ static bool read_file_guts (cpp_reader *pfile, _cpp_file *file) { ssize_t size, total, count; uchar *buf; bool regular; if (S_ISBLK (file->st.st_mode)) { cpp_error (pfile, CPP_DL_ERROR, "%s is a block device", file->path); return false; } regular = S_ISREG (file->st.st_mode); if (regular) { /* off_t might have a wider range than ssize_t - in other words, the max size of a file might be bigger than the address space. We can't handle a file that large. (Anyone with a single source file bigger than 2GB needs to rethink their coding style.) Some systems (e.g. AIX 4.1) define SSIZE_MAX to be much smaller than the actual range of the type. Use INTTYPE_MAXIMUM unconditionally to ensure this does not bite us. */ if (file->st.st_size > INTTYPE_MAXIMUM (ssize_t)) { cpp_error (pfile, CPP_DL_ERROR, "%s is too large", file->path); return false; } size = file->st.st_size; } else /* 8 kilobytes is a sensible starting size. It ought to be bigger than the kernel pipe buffer, and it's definitely bigger than the majority of C source files. */ size = 8 * 1024; buf = XNEWVEC (uchar, size + 1); total = 0; while ((count = read (file->fd, buf + total, size - total)) > 0) { total += count; if (total == size) { if (regular) break; size *= 2; buf = XRESIZEVEC (uchar, buf, size + 1); } } if (count < 0) { cpp_errno (pfile, CPP_DL_ERROR, file->path); return false; } if (regular && total != size && STAT_SIZE_RELIABLE (file->st)) cpp_error (pfile, CPP_DL_WARNING, "%s is shorter than expected", file->path); file->buffer = _cpp_convert_input (pfile, CPP_OPTION (pfile, input_charset), buf, size, total, &file->st.st_size); file->buffer_valid = true; return true; } /* Convenience wrapper around read_file_guts that opens the file if necessary and closes the file descriptor after reading. FILE must have been passed through find_file() at some stage. */ static bool read_file (cpp_reader *pfile, _cpp_file *file) { /* If we already have its contents in memory, succeed immediately. */ if (file->buffer_valid) return true; /* If an earlier read failed for some reason don't try again. */ if (file->dont_read || file->err_no) return false; if (file->fd == -1 && !open_file (file)) { open_file_failed (pfile, file, 0); return false; } file->dont_read = !read_file_guts (pfile, file); close (file->fd); file->fd = -1; return !file->dont_read; } /* Returns TRUE if FILE's contents have been successfully placed in FILE->buffer and the file should be stacked, otherwise false. */ static bool should_stack_file (cpp_reader *pfile, _cpp_file *file, bool import) { _cpp_file *f; /* Skip once-only files. */ if (file->once_only) return false; /* We must mark the file once-only if #import now, before header guard checks. Otherwise, undefining the header guard might cause the file to be re-stacked. */ if (import) { _cpp_mark_file_once_only (pfile, file); /* Don't stack files that have been stacked before. */ if (file->stack_count) return false; } /* Skip if the file had a header guard and the macro is defined. PCH relies on this appearing before the PCH handler below. */ if (file->cmacro && file->cmacro->type == NT_MACRO) return false; /* Handle PCH files immediately; don't stack them. */ if (file->pch) { pfile->cb.read_pch (pfile, file->pchname, file->fd, file->path); close (file->fd); file->fd = -1; return false; } if (!read_file (pfile, file)) return false; /* Check the file against the PCH file. This is done before checking against files we've already seen, since it may save on I/O. */ if (check_file_against_entries (pfile, file, import)) { /* If this isn't a #import, but yet we can't include the file, that means that it was #import-ed in the PCH file, so we can never include it again. */ if (! import) _cpp_mark_file_once_only (pfile, file); return false; } /* Now we've read the file's contents, we can stack it if there are no once-only files. */ if (!pfile->seen_once_only) return true; /* We may have read the file under a different name. Look for likely candidates and compare file contents to be sure. */ for (f = pfile->all_files; f; f = f->next_file) { if (f == file) continue; if ((import || f->once_only) && f->err_no == 0 && f->st.st_mtime == file->st.st_mtime && f->st.st_size == file->st.st_size) { _cpp_file *ref_file; bool same_file_p = false; if (f->buffer && !f->buffer_valid) { /* We already have a buffer but it is not valid, because the file is still stacked. Make a new one. */ ref_file = make_cpp_file (pfile, f->dir, f->name); ref_file->path = f->path; } else /* The file is not stacked anymore. We can reuse it. */ ref_file = f; same_file_p = read_file (pfile, ref_file) /* Size might have changed in read_file(). */ && ref_file->st.st_size == file->st.st_size && !memcmp (ref_file->buffer, file->buffer, file->st.st_size); if (f->buffer && !f->buffer_valid) { ref_file->path = 0; destroy_cpp_file (ref_file); } if (same_file_p) break; } } return f == NULL; } /* Place the file referenced by FILE into a new buffer on the buffer stack if possible. IMPORT is true if this stacking attempt is because of a #import directive. Returns true if a buffer is stacked. */ bool _cpp_stack_file (cpp_reader *pfile, _cpp_file *file, bool import) { cpp_buffer *buffer; int sysp; if (!should_stack_file (pfile, file, import)) return false; if (pfile->buffer == NULL || file->dir == NULL) sysp = 0; else sysp = MAX (pfile->buffer->sysp, file->dir->sysp); /* Add the file to the dependencies on its first inclusion. */ if (CPP_OPTION (pfile, deps.style) > !!sysp && !file->stack_count) { if (!file->main_file || !CPP_OPTION (pfile, deps.ignore_main_file)) deps_add_dep (pfile->deps, file->path); } /* Clear buffer_valid since _cpp_clean_line messes it up. */ file->buffer_valid = false; file->stack_count++; /* Stack the buffer. */ buffer = cpp_push_buffer (pfile, file->buffer, file->st.st_size, CPP_OPTION (pfile, preprocessed) && !CPP_OPTION (pfile, directives_only)); buffer->file = file; buffer->sysp = sysp; /* Initialize controlling macro state. */ pfile->mi_valid = true; pfile->mi_cmacro = 0; /* Generate the call back. */ _cpp_do_file_change (pfile, LC_ENTER, file->path, 1, sysp); return true; } /* Mark FILE to be included once only. */ void _cpp_mark_file_once_only (cpp_reader *pfile, _cpp_file *file) { pfile->seen_once_only = true; file->once_only = true; } /* Return the directory from which searching for FNAME should start, considering the directive TYPE and ANGLE_BRACKETS. If there is nothing left in the path, returns NULL. */ static struct cpp_dir * search_path_head (cpp_reader *pfile, const char *fname, int angle_brackets, enum include_type type) { cpp_dir *dir; _cpp_file *file; if (IS_ABSOLUTE_PATH (fname)) return &pfile->no_search_path; /* pfile->buffer is NULL when processing an -include command-line flag. */ file = pfile->buffer == NULL ? pfile->main_file : pfile->buffer->file; /* For #include_next, skip in the search path past the dir in which the current file was found, but if it was found via an absolute path use the normal search logic. */ if (type == IT_INCLUDE_NEXT && file->dir && file->dir != &pfile->no_search_path) dir = file->dir->next; else if (angle_brackets) dir = pfile->bracket_include; else if (type == IT_CMDLINE) /* -include and -imacros use the #include "" chain with the preprocessor's cwd prepended. */ return make_cpp_dir (pfile, "./", false); else if (pfile->quote_ignores_source_dir) dir = pfile->quote_include; else return make_cpp_dir (pfile, dir_name_of_file (file), pfile->buffer ? pfile->buffer->sysp : 0); if (dir == NULL) cpp_error (pfile, CPP_DL_ERROR, "no include path in which to search for %s", fname); return dir; } /* Strip the basename from the file's path. It ends with a slash if of nonzero length. Note that this procedure also works for , which is represented by the empty string. */ static const char * dir_name_of_file (_cpp_file *file) { if (!file->dir_name) { size_t len = lbasename (file->path) - file->path; char *dir_name = XNEWVEC (char, len + 1); memcpy (dir_name, file->path, len); dir_name[len] = '\0'; file->dir_name = dir_name; } return file->dir_name; } /* Handles #include-family directives (distinguished by TYPE), including HEADER, and the command line -imacros and -include. Returns true if a buffer was stacked. */ bool _cpp_stack_include (cpp_reader *pfile, const char *fname, int angle_brackets, enum include_type type) { struct cpp_dir *dir; _cpp_file *file; dir = search_path_head (pfile, fname, angle_brackets, type); if (!dir) return false; file = _cpp_find_file (pfile, fname, dir, false, angle_brackets); /* Compensate for the increment in linemap_add. In the case of a normal #include, we're currently at the start of the line *following* the #include. A separate source_location for this location makes no sense (until we do the LC_LEAVE), and complicates LAST_SOURCE_LINE_LOCATION. This does not apply if we found a PCH file (in which case linemap_add is not called) or we were included from the command-line. */ if (! file->pch && file->err_no == 0 && type != IT_CMDLINE) pfile->line_table->highest_location--; return _cpp_stack_file (pfile, file, type == IT_IMPORT); } /* Could not open FILE. The complication is dependency output. */ static void open_file_failed (cpp_reader *pfile, _cpp_file *file, int angle_brackets) { int sysp = pfile->line_table->highest_line > 1 && pfile->buffer ? pfile->buffer->sysp : 0; bool print_dep = CPP_OPTION (pfile, deps.style) > (angle_brackets || !!sysp); errno = file->err_no; if (print_dep && CPP_OPTION (pfile, deps.missing_files) && errno == ENOENT) deps_add_dep (pfile->deps, file->name); else { /* If we are outputting dependencies but not for this file then don't error because we can still produce correct output. */ if (CPP_OPTION (pfile, deps.style) && ! print_dep) cpp_errno (pfile, CPP_DL_WARNING, file->path); else cpp_errno (pfile, CPP_DL_ERROR, file->path); } } /* Search in the chain beginning at HEAD for a file whose search path started at START_DIR != NULL. */ static struct file_hash_entry * search_cache (struct file_hash_entry *head, const cpp_dir *start_dir) { while (head && head->start_dir != start_dir) head = head->next; return head; } /* Allocate a new _cpp_file structure. */ static _cpp_file * make_cpp_file (cpp_reader *pfile, cpp_dir *dir, const char *fname) { _cpp_file *file; file = XCNEW (_cpp_file); file->main_file = !pfile->buffer; file->fd = -1; file->dir = dir; file->name = xstrdup (fname); return file; } /* Release a _cpp_file structure. */ static void destroy_cpp_file (_cpp_file *file) { if (file->buffer) free ((void *) file->buffer); free ((void *) file->name); free (file); } /* Release all the files allocated by this reader. */ static void destroy_all_cpp_files (cpp_reader *pfile) { _cpp_file *iter = pfile->all_files; while (iter) { _cpp_file *next = iter->next_file; destroy_cpp_file (iter); iter = next; } } /* A hash of directory names. The directory names are the path names of files which contain a #include "", the included file name is appended to this directories. To avoid duplicate entries we follow the convention that all non-empty directory names should end in a '/'. DIR_NAME must be stored in permanently allocated memory. */ static cpp_dir * make_cpp_dir (cpp_reader *pfile, const char *dir_name, int sysp) { struct file_hash_entry *entry, **hash_slot; cpp_dir *dir; hash_slot = (struct file_hash_entry **) htab_find_slot_with_hash (pfile->dir_hash, dir_name, htab_hash_string (dir_name), INSERT); /* Have we already hashed this directory? */ for (entry = *hash_slot; entry; entry = entry->next) if (entry->start_dir == NULL) return entry->u.dir; dir = XCNEW (cpp_dir); dir->next = pfile->quote_include; dir->name = (char *) dir_name; dir->len = strlen (dir_name); dir->sysp = sysp; dir->construct = 0; /* Store this new result in the hash table. */ entry = new_file_hash_entry (pfile); entry->next = *hash_slot; entry->start_dir = NULL; entry->location = pfile->line_table->highest_location; entry->u.dir = dir; *hash_slot = entry; return dir; } /* Create a new block of memory for file hash entries. */ static void allocate_file_hash_entries (cpp_reader *pfile) { struct file_hash_entry_pool *pool = XNEW (struct file_hash_entry_pool); pool->file_hash_entries_used = 0; pool->next = pfile->file_hash_entries; pfile->file_hash_entries = pool; } /* Return a new file hash entry. */ static struct file_hash_entry * new_file_hash_entry (cpp_reader *pfile) { unsigned int idx; if (pfile->file_hash_entries->file_hash_entries_used == FILE_HASH_POOL_SIZE) allocate_file_hash_entries (pfile); idx = pfile->file_hash_entries->file_hash_entries_used++; return &pfile->file_hash_entries->pool[idx]; } /* Free the file hash entry pools. */ static void free_file_hash_entries (cpp_reader *pfile) { struct file_hash_entry_pool *iter = pfile->file_hash_entries; while (iter) { struct file_hash_entry_pool *next = iter->next; free (iter); iter = next; } } /* Returns TRUE if a file FNAME has ever been successfully opened. This routine is not intended to correctly handle filenames aliased by links or redundant . or .. traversals etc. */ bool cpp_included (cpp_reader *pfile, const char *fname) { struct file_hash_entry *entry; entry = (struct file_hash_entry *) htab_find_with_hash (pfile->file_hash, fname, htab_hash_string (fname)); while (entry && (entry->start_dir == NULL || entry->u.file->err_no)) entry = entry->next; return entry != NULL; } /* Returns TRUE if a file FNAME has ever been successfully opened before LOCATION. This routine is not intended to correctly handle filenames aliased by links or redundant . or .. traversals etc. */ bool cpp_included_before (cpp_reader *pfile, const char *fname, source_location location) { struct file_hash_entry *entry; entry = (struct file_hash_entry *) htab_find_with_hash (pfile->file_hash, fname, htab_hash_string (fname)); while (entry && (entry->start_dir == NULL || entry->u.file->err_no || entry->location > location)) entry = entry->next; return entry != NULL; } /* Calculate the hash value of a file hash entry P. */ static hashval_t file_hash_hash (const void *p) { struct file_hash_entry *entry = (struct file_hash_entry *) p; const char *hname; if (entry->start_dir) hname = entry->u.file->name; else hname = entry->u.dir->name; return htab_hash_string (hname); } /* Compare a string Q against a file hash entry P. */ static int file_hash_eq (const void *p, const void *q) { struct file_hash_entry *entry = (struct file_hash_entry *) p; const char *fname = (const char *) q; const char *hname; if (entry->start_dir) hname = entry->u.file->name; else hname = entry->u.dir->name; return strcmp (hname, fname) == 0; } /* Compare entries in the nonexistent file hash table. These are just strings. */ static int nonexistent_file_hash_eq (const void *p, const void *q) { return strcmp (p, q) == 0; } /* Initialize everything in this source file. */ void _cpp_init_files (cpp_reader *pfile) { pfile->file_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq, NULL, xcalloc, free); pfile->dir_hash = htab_create_alloc (127, file_hash_hash, file_hash_eq, NULL, xcalloc, free); allocate_file_hash_entries (pfile); pfile->nonexistent_file_hash = htab_create_alloc (127, htab_hash_string, nonexistent_file_hash_eq, NULL, xcalloc, free); _obstack_begin (&pfile->nonexistent_file_ob, 0, 0, (void *(*) (long)) xmalloc, (void (*) (void *)) free); } /* Finalize everything in this source file. */ void _cpp_cleanup_files (cpp_reader *pfile) { htab_delete (pfile->file_hash); htab_delete (pfile->dir_hash); htab_delete (pfile->nonexistent_file_hash); obstack_free (&pfile->nonexistent_file_ob, 0); free_file_hash_entries (pfile); destroy_all_cpp_files (pfile); } /* Make the parser forget about files it has seen. This can be useful for resetting the parser to start another run. */ void cpp_clear_file_cache (cpp_reader *pfile) { _cpp_cleanup_files (pfile); pfile->file_hash_entries = NULL; pfile->all_files = NULL; _cpp_init_files (pfile); } /* Enter a file name in the hash for the sake of cpp_included. */ void _cpp_fake_include (cpp_reader *pfile, const char *fname) { _cpp_find_file (pfile, fname, pfile->buffer->file->dir, true, 0); } /* Not everyone who wants to set system-header-ness on a buffer can see the details of a buffer. This is an exported interface because fix-header needs it. */ void cpp_make_system_header (cpp_reader *pfile, int syshdr, int externc) { int flags = 0; const struct line_maps *line_table = pfile->line_table; const struct line_map *map = &line_table->maps[line_table->used-1]; /* 1 = system header, 2 = system header to be treated as C. */ if (syshdr) flags = 1 + (externc != 0); pfile->buffer->sysp = flags; _cpp_do_file_change (pfile, LC_RENAME, map->to_file, SOURCE_LINE (map, pfile->line_table->highest_line), flags); } /* Allow the client to change the current file. Used by the front end to achieve pseudo-file names like . If REASON is LC_LEAVE, then NEW_NAME must be NULL. */ void cpp_change_file (cpp_reader *pfile, enum lc_reason reason, const char *new_name) { _cpp_do_file_change (pfile, reason, new_name, 1, 0); } /* Callback function for htab_traverse. */ static int report_missing_guard (void **slot, void *b) { struct file_hash_entry *entry = (struct file_hash_entry *) *slot; int *bannerp = (int *) b; /* Skip directories. */ if (entry->start_dir != NULL) { _cpp_file *file = entry->u.file; /* We don't want MI guard advice for the main file. */ if (file->cmacro == NULL && file->stack_count == 1 && !file->main_file) { if (*bannerp == 0) { fputs (_("Multiple include guards may be useful for:\n"), stderr); *bannerp = 1; } fputs (entry->u.file->path, stderr); putc ('\n', stderr); } } return 0; } /* Report on all files that might benefit from a multiple include guard. Triggered by -H. */ void _cpp_report_missing_guards (cpp_reader *pfile) { int banner = 0; htab_traverse (pfile->file_hash, report_missing_guard, &banner); } /* Locate HEADER, and determine whether it is newer than the current file. If it cannot be located or dated, return -1, if it is newer, return 1, otherwise 0. */ int _cpp_compare_file_date (cpp_reader *pfile, const char *fname, int angle_brackets) { _cpp_file *file; struct cpp_dir *dir; dir = search_path_head (pfile, fname, angle_brackets, IT_INCLUDE); if (!dir) return -1; file = _cpp_find_file (pfile, fname, dir, false, angle_brackets); if (file->err_no) return -1; if (file->fd != -1) { close (file->fd); file->fd = -1; } return file->st.st_mtime > pfile->buffer->file->st.st_mtime; } /* Pushes the given file onto the buffer stack. Returns nonzero if successful. */ bool cpp_push_include (cpp_reader *pfile, const char *fname) { return _cpp_stack_include (pfile, fname, false, IT_CMDLINE); } /* Do appropriate cleanup when a file INC's buffer is popped off the input stack. */ void _cpp_pop_file_buffer (cpp_reader *pfile, _cpp_file *file) { /* Record the inclusion-preventing macro, which could be NULL meaning no controlling macro. */ if (pfile->mi_valid && file->cmacro == NULL) file->cmacro = pfile->mi_cmacro; /* Invalidate control macros in the #including file. */ pfile->mi_valid = false; if (file->buffer) { free ((void *) file->buffer); file->buffer = NULL; file->buffer_valid = false; } } /* Inteface to file statistics record in _cpp_file structure. */ struct stat * _cpp_get_file_stat (_cpp_file *file) { return &file->st; } /* Set the include chain for "" to QUOTE, for <> to BRACKET. If QUOTE_IGNORES_SOURCE_DIR, then "" includes do not look in the directory of the including file. If BRACKET does not lie in the QUOTE chain, it is set to QUOTE. */ void cpp_set_include_chains (cpp_reader *pfile, cpp_dir *quote, cpp_dir *bracket, int quote_ignores_source_dir) { pfile->quote_include = quote; pfile->bracket_include = quote; pfile->quote_ignores_source_dir = quote_ignores_source_dir; for (; quote; quote = quote->next) { quote->name_map = NULL; quote->len = strlen (quote->name); if (quote == bracket) pfile->bracket_include = bracket; } } /* Append the file name to the directory to create the path, but don't turn / into // or // into ///; // may be a namespace escape. */ static char * append_file_to_dir (const char *fname, cpp_dir *dir) { size_t dlen, flen; char *path; dlen = dir->len; flen = strlen (fname); path = XNEWVEC (char, dlen + 1 + flen + 1); memcpy (path, dir->name, dlen); if (dlen && path[dlen - 1] != '/') path[dlen++] = '/'; memcpy (&path[dlen], fname, flen + 1); return path; } /* Read a space delimited string of unlimited length from a stdio file F. */ static char * read_filename_string (int ch, FILE *f) { char *alloc, *set; int len; len = 20; set = alloc = XNEWVEC (char, len + 1); if (! is_space (ch)) { *set++ = ch; while ((ch = getc (f)) != EOF && ! is_space (ch)) { if (set - alloc == len) { len *= 2; alloc = XRESIZEVEC (char, alloc, len + 1); set = alloc + len / 2; } *set++ = ch; } } *set = '\0'; ungetc (ch, f); return alloc; } /* Read the file name map file for DIR. */ static void read_name_map (cpp_dir *dir) { static const char FILE_NAME_MAP_FILE[] = "header.gcc"; char *name; FILE *f; size_t len, count = 0, room = 9; len = dir->len; name = (char *) alloca (len + sizeof (FILE_NAME_MAP_FILE) + 1); memcpy (name, dir->name, len); if (len && name[len - 1] != '/') name[len++] = '/'; strcpy (name + len, FILE_NAME_MAP_FILE); f = fopen (name, "r"); dir->name_map = XNEWVEC (const char *, room); /* Silently return NULL if we cannot open. */ if (f) { int ch; while ((ch = getc (f)) != EOF) { char *to; if (is_space (ch)) continue; if (count + 2 > room) { room += 8; dir->name_map = XRESIZEVEC (const char *, dir->name_map, room); } dir->name_map[count] = read_filename_string (ch, f); while ((ch = getc (f)) != EOF && is_hspace (ch)) ; to = read_filename_string (ch, f); if (IS_ABSOLUTE_PATH (to)) dir->name_map[count + 1] = to; else { dir->name_map[count + 1] = append_file_to_dir (to, dir); free (to); } count += 2; while ((ch = getc (f)) != '\n') if (ch == EOF) break; } fclose (f); } /* Terminate the list of maps. */ dir->name_map[count] = NULL; } /* Remap a FILE's name based on the file_name_map, if any, for FILE->dir. If the file name has any directory separators, recursively check those directories too. */ static char * remap_filename (cpp_reader *pfile, _cpp_file *file) { const char *fname, *p; char *new_dir; cpp_dir *dir; size_t index, len; dir = file->dir; fname = file->name; for (;;) { if (!dir->name_map) read_name_map (dir); for (index = 0; dir->name_map[index]; index += 2) if (!strcmp (dir->name_map[index], fname)) return xstrdup (dir->name_map[index + 1]); p = strchr (fname, '/'); if (!p || p == fname) return NULL; len = dir->len + (p - fname + 1); new_dir = XNEWVEC (char, len + 1); memcpy (new_dir, dir->name, dir->len); memcpy (new_dir + dir->len, fname, p - fname + 1); new_dir[len] = '\0'; dir = make_cpp_dir (pfile, new_dir, dir->sysp); fname = p + 1; } } /* Returns true if PCHNAME is a valid PCH file for FILE. */ static bool validate_pch (cpp_reader *pfile, _cpp_file *file, const char *pchname) { const char *saved_path = file->path; bool valid = false; file->path = pchname; if (open_file (file)) { valid = 1 & pfile->cb.valid_pch (pfile, pchname, file->fd); if (!valid) { close (file->fd); file->fd = -1; } if (CPP_OPTION (pfile, print_include_names)) { unsigned int i; for (i = 1; i < pfile->line_table->depth; i++) putc ('.', stderr); fprintf (stderr, "%c %s\n", valid ? '!' : 'x', pchname); } } file->path = saved_path; return valid; } /* Get the path associated with the _cpp_file F. The path includes the base name from the include directive and the directory it was found in via the search path. */ const char * cpp_get_path (struct _cpp_file *f) { return f->path; } /* Get the directory associated with the _cpp_file F. */ cpp_dir * cpp_get_dir (struct _cpp_file *f) { return f->dir; } /* Get the cpp_buffer currently associated with the cpp_reader PFILE. */ cpp_buffer * cpp_get_buffer (cpp_reader *pfile) { return pfile->buffer; } /* Get the _cpp_file associated with the cpp_buffer B. */ _cpp_file * cpp_get_file (cpp_buffer *b) { return b->file; } /* Get the previous cpp_buffer given a cpp_buffer B. The previous buffer is the buffer that included the given buffer. */ cpp_buffer * cpp_get_prev (cpp_buffer *b) { return b->prev; } /* This data structure holds the list of header files that were seen while the PCH was being built. The 'entries' field is kept sorted in memcmp() order; yes, this means that on little-endian systems, it's sorted initially by the least-significant byte of 'size', but that's OK. The code does rely on having entries with the same size next to each other. */ struct pchf_entry { /* The size of this file. This is used to save running a MD5 checksum if the sizes don't match. */ off_t size; /* The MD5 checksum of this file. */ unsigned char sum[16]; /* Is this file to be included only once? */ bool once_only; }; struct pchf_data { /* Number of pchf_entry structures. */ size_t count; /* Are there any values with once_only set? This is used as an optimisation, it means we don't have to search the structure if we're processing a regular #include. */ bool have_once_only; struct pchf_entry entries[1]; }; static struct pchf_data *pchf; /* A qsort ordering function for pchf_entry structures. */ static int pchf_save_compare (const void *e1, const void *e2) { return memcmp (e1, e2, sizeof (struct pchf_entry)); } /* Create and write to F a pchf_data structure. */ bool _cpp_save_file_entries (cpp_reader *pfile, FILE *fp) { size_t count = 0; struct pchf_data *result; size_t result_size; _cpp_file *f; for (f = pfile->all_files; f; f = f->next_file) ++count; result_size = (sizeof (struct pchf_data) + sizeof (struct pchf_entry) * (count - 1)); result = XCNEWVAR (struct pchf_data, result_size); result->count = 0; result->have_once_only = false; for (f = pfile->all_files; f; f = f->next_file) { size_t count; /* This should probably never happen, since if a read error occurred the PCH file shouldn't be written... */ if (f->dont_read || f->err_no) continue; if (f->stack_count == 0) continue; count = result->count++; result->entries[count].once_only = f->once_only; /* |= is avoided in the next line because of an HP C compiler bug */ result->have_once_only = result->have_once_only | f->once_only; if (f->buffer_valid) md5_buffer ((const char *)f->buffer, f->st.st_size, result->entries[count].sum); else { FILE *ff; int oldfd = f->fd; if (!open_file (f)) { open_file_failed (pfile, f, 0); return false; } ff = fdopen (f->fd, "rb"); md5_stream (ff, result->entries[count].sum); fclose (ff); f->fd = oldfd; } result->entries[count].size = f->st.st_size; } result_size = (sizeof (struct pchf_data) + sizeof (struct pchf_entry) * (result->count - 1)); qsort (result->entries, result->count, sizeof (struct pchf_entry), pchf_save_compare); return fwrite (result, result_size, 1, fp) == 1; } /* Read the pchf_data structure from F. */ bool _cpp_read_file_entries (cpp_reader *pfile ATTRIBUTE_UNUSED, FILE *f) { struct pchf_data d; if (fread (&d, sizeof (struct pchf_data) - sizeof (struct pchf_entry), 1, f) != 1) return false; pchf = XNEWVAR (struct pchf_data, sizeof (struct pchf_data) + sizeof (struct pchf_entry) * (d.count - 1)); memcpy (pchf, &d, sizeof (struct pchf_data) - sizeof (struct pchf_entry)); if (fread (pchf->entries, sizeof (struct pchf_entry), d.count, f) != d.count) return false; return true; } /* The parameters for pchf_compare. */ struct pchf_compare_data { /* The size of the file we're looking for. */ off_t size; /* The MD5 checksum of the file, if it's been computed. */ unsigned char sum[16]; /* Is SUM valid? */ bool sum_computed; /* Do we need to worry about entries that don't have ONCE_ONLY set? */ bool check_included; /* The file that we're searching for. */ _cpp_file *f; }; /* bsearch comparison function; look for D_P in E_P. */ static int pchf_compare (const void *d_p, const void *e_p) { const struct pchf_entry *e = (const struct pchf_entry *)e_p; struct pchf_compare_data *d = (struct pchf_compare_data *)d_p; int result; result = memcmp (&d->size, &e->size, sizeof (off_t)); if (result != 0) return result; if (! d->sum_computed) { _cpp_file *const f = d->f; md5_buffer ((const char *)f->buffer, f->st.st_size, d->sum); d->sum_computed = true; } result = memcmp (d->sum, e->sum, 16); if (result != 0) return result; if (d->check_included || e->once_only) return 0; else return 1; } /* Check that F is not in a list read from a PCH file (if any). Assumes that f->buffer_valid is true. Return TRUE if the file should not be read. */ static bool check_file_against_entries (cpp_reader *pfile ATTRIBUTE_UNUSED, _cpp_file *f, bool check_included) { struct pchf_compare_data d; if (pchf == NULL || (! check_included && ! pchf->have_once_only)) return false; d.size = f->st.st_size; d.sum_computed = false; d.f = f; d.check_included = check_included; return bsearch (&d, pchf->entries, pchf->count, sizeof (struct pchf_entry), pchf_compare) != NULL; } nescc-1.3.4/libcpp/identifiers.c000066400000000000000000000072471177770303300165560ustar00rootroot00000000000000/* Hash tables for the CPP library. Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Written by Per Bothner, 1994. Based on CCCP program by Paul Rubin, June 1986 Adapted to ANSI C, Richard Stallman, Jan 1987 This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. In other words, you are welcome to use, share and improve this program. You are forbidden to forbid anyone else to use, share and improve what you give them. Help stamp out software-hoarding! */ #include "config.h" #include "system.h" #include "cpplib.h" #include "internal.h" static cpp_hashnode *alloc_node (hash_table *); /* Return an identifier node for hashtable.c. Used by cpplib except when integrated with the C front ends. */ static cpp_hashnode * alloc_node (hash_table *table) { cpp_hashnode *node; node = XOBNEW (&table->pfile->hash_ob, cpp_hashnode); memset (node, 0, sizeof (cpp_hashnode)); return node; } /* Set up the identifier hash table. Use TABLE if non-null, otherwise create our own. */ void _cpp_init_hashtable (cpp_reader *pfile, hash_table *table) { struct spec_nodes *s; if (table == NULL) { pfile->our_hashtable = 1; table = ht_create (13); /* 8K (=2^13) entries. */ table->alloc_node = (hashnode (*) (hash_table *)) alloc_node; _obstack_begin (&pfile->hash_ob, 0, 0, (void *(*) (long)) xmalloc, (void (*) (void *)) free); } table->pfile = pfile; pfile->hash_table = table; /* Now we can initialize things that use the hash table. */ _cpp_init_directives (pfile); _cpp_init_internal_pragmas (pfile); s = &pfile->spec_nodes; s->n_defined = cpp_lookup (pfile, DSC("defined")); s->n_true = cpp_lookup (pfile, DSC("true")); s->n_false = cpp_lookup (pfile, DSC("false")); s->n__VA_ARGS__ = cpp_lookup (pfile, DSC("__VA_ARGS__")); s->n__VA_ARGS__->flags |= NODE_DIAGNOSTIC; } /* Tear down the identifier hash table. */ void _cpp_destroy_hashtable (cpp_reader *pfile) { if (pfile->our_hashtable) { ht_destroy (pfile->hash_table); obstack_free (&pfile->hash_ob, 0); } } /* Returns the hash entry for the STR of length LEN, creating one if necessary. */ cpp_hashnode * cpp_lookup (cpp_reader *pfile, const unsigned char *str, unsigned int len) { /* ht_lookup cannot return NULL. */ return CPP_HASHNODE (ht_lookup (pfile->hash_table, str, len, HT_ALLOC)); } /* Determine whether the str STR, of length LEN, is a defined macro. */ int cpp_defined (cpp_reader *pfile, const unsigned char *str, int len) { cpp_hashnode *node; node = CPP_HASHNODE (ht_lookup (pfile->hash_table, str, len, HT_NO_INSERT)); /* If it's of type NT_MACRO, it cannot be poisoned. */ return node && node->type == NT_MACRO; } /* For all nodes in the hashtable, callback CB with parameters PFILE, the node, and V. */ void cpp_forall_identifiers (cpp_reader *pfile, cpp_cb cb, void *v) { /* We don't need a proxy since the hash table's identifier comes first in cpp_hashnode. */ ht_forall (pfile->hash_table, (ht_cb) cb, v); } nescc-1.3.4/libcpp/include/000077500000000000000000000000001177770303300155165ustar00rootroot00000000000000nescc-1.3.4/libcpp/include/cpp-id-data.h000066400000000000000000000047431177770303300177620ustar00rootroot00000000000000/* Structures that hang off cpp_identifier, for PCH. Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "cpplib.h" #if !defined (HAVE_UCHAR) && !defined (IN_GCC) typedef unsigned char uchar; #endif #define U (const unsigned char *) /* Intended use: U"string" */ /* Chained list of answers to an assertion. */ struct answer GTY(()) { struct answer *next; unsigned int count; cpp_token GTY ((length ("%h.count"))) first[1]; }; /* Each macro definition is recorded in a cpp_macro structure. Variadic macros cannot occur with traditional cpp. */ struct cpp_macro GTY(()) { /* Parameters, if any. */ cpp_hashnode ** GTY ((nested_ptr (union tree_node, "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL", "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL"), length ("%h.paramc"))) params; /* Replacement tokens (ISO) or replacement text (traditional). See comment at top of cpptrad.c for how traditional function-like macros are encoded. */ union cpp_macro_u { cpp_token * GTY ((tag ("0"), length ("%0.count"))) tokens; const unsigned char * GTY ((tag ("1"))) text; } GTY ((desc ("%1.traditional"))) exp; /* Definition line number. */ source_location line; /* Number of tokens in expansion, or bytes for traditional macros. */ unsigned int count; /* Number of parameters. */ unsigned short paramc; /* If a function-like macro. */ unsigned int fun_like : 1; /* If a variadic macro. */ unsigned int variadic : 1; /* If macro defined in system header. */ unsigned int syshdr : 1; /* Nonzero if it has been expanded or had its existence tested. */ unsigned int used : 1; /* Indicate which field of 'exp' is in use. */ unsigned int traditional : 1; }; nescc-1.3.4/libcpp/include/cpplib.h000066400000000000000000000764351177770303300171570ustar00rootroot00000000000000/* Definitions for CPP library. Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. Written by Per Bothner, 1994-95. This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. In other words, you are welcome to use, share and improve this program. You are forbidden to forbid anyone else to use, share and improve what you give them. Help stamp out software-hoarding! */ #ifndef LIBCPP_CPPLIB_H #define LIBCPP_CPPLIB_H #include #include "symtab.h" #include "line-map.h" #ifdef __cplusplus extern "C" { #endif typedef struct cpp_reader cpp_reader; typedef struct cpp_buffer cpp_buffer; typedef struct cpp_options cpp_options; typedef struct cpp_token cpp_token; typedef struct cpp_string cpp_string; typedef struct cpp_hashnode cpp_hashnode; typedef struct cpp_macro cpp_macro; typedef struct cpp_callbacks cpp_callbacks; typedef struct cpp_dir cpp_dir; struct answer; struct _cpp_file; /* The first three groups, apart from '=', can appear in preprocessor expressions (+= and -= are used to indicate unary + and - resp.). This allows a lookup table to be implemented in _cpp_parse_expr. The first group, to CPP_LAST_EQ, can be immediately followed by an '='. The lexer needs operators ending in '=', like ">>=", to be in the same order as their counterparts without the '=', like ">>". See the cpp_operator table optab in expr.c if you change the order or add or remove anything in the first group. */ #define TTYPE_TABLE \ OP(EQ, "=") \ OP(NOT, "!") \ OP(GREATER, ">") /* compare */ \ OP(LESS, "<") \ OP(PLUS, "+") /* math */ \ OP(MINUS, "-") \ OP(MULT, "*") \ OP(DIV, "/") \ OP(MOD, "%") \ OP(AND, "&") /* bit ops */ \ OP(OR, "|") \ OP(XOR, "^") \ OP(RSHIFT, ">>") \ OP(LSHIFT, "<<") \ \ OP(COMPL, "~") \ OP(AND_AND, "&&") /* logical */ \ OP(OR_OR, "||") \ OP(QUERY, "?") \ OP(COLON, ":") \ OP(COMMA, ",") /* grouping */ \ OP(OPEN_PAREN, "(") \ OP(CLOSE_PAREN, ")") \ TK(EOF, NONE) \ OP(EQ_EQ, "==") /* compare */ \ OP(NOT_EQ, "!=") \ OP(GREATER_EQ, ">=") \ OP(LESS_EQ, "<=") \ \ /* These two are unary + / - in preprocessor expressions. */ \ OP(PLUS_EQ, "+=") /* math */ \ OP(MINUS_EQ, "-=") \ \ OP(MULT_EQ, "*=") \ OP(DIV_EQ, "/=") \ OP(MOD_EQ, "%=") \ OP(AND_EQ, "&=") /* bit ops */ \ OP(OR_EQ, "|=") \ OP(XOR_EQ, "^=") \ OP(RSHIFT_EQ, ">>=") \ OP(LSHIFT_EQ, "<<=") \ /* Digraphs together, beginning with CPP_FIRST_DIGRAPH. */ \ OP(HASH, "#") /* digraphs */ \ OP(PASTE, "##") \ OP(OPEN_SQUARE, "[") \ OP(CLOSE_SQUARE, "]") \ OP(OPEN_BRACE, "{") \ OP(CLOSE_BRACE, "}") \ /* The remainder of the punctuation. Order is not significant. */ \ OP(SEMICOLON, ";") /* structure */ \ OP(ELLIPSIS, "...") \ OP(PLUS_PLUS, "++") /* increment */ \ OP(MINUS_MINUS, "--") \ OP(DEREF, "->") /* accessors */ \ OP(FERED, "<-") /* wiring */ \ OP(DOT, ".") \ OP(SCOPE, "::") \ OP(DEREF_STAR, "->*") \ OP(DOT_STAR, ".*") \ OP(ATSIGN, "@") /* used in Objective-C */ \ \ TK(NAME, IDENT) /* word */ \ TK(AT_NAME, IDENT) /* @word - Objective-C */ \ TK(NUMBER, LITERAL) /* 34_be+ta */ \ \ TK(CHAR, LITERAL) /* 'char' */ \ TK(WCHAR, LITERAL) /* L'char' */ \ TK(OTHER, LITERAL) /* stray punctuation */ \ \ TK(STRING, LITERAL) /* "string" */ \ TK(WSTRING, LITERAL) /* L"string" */ \ TK(OBJC_STRING, LITERAL) /* @"string" - Objective-C */ \ TK(HEADER_NAME, LITERAL) /* in #include */ \ \ TK(COMMENT, LITERAL) /* Only if output comments. */ \ /* SPELL_LITERAL happens to DTRT. */ \ TK(MACRO_ARG, NONE) /* Macro argument. */ \ TK(PRAGMA, NONE) /* Only for deferred pragmas. */ \ TK(PRAGMA_EOL, NONE) /* End-of-line for deferred pragmas. */ \ TK(PADDING, NONE) /* Whitespace for -E. */ #define OP(e, s) CPP_ ## e, #define TK(e, s) CPP_ ## e, enum cpp_ttype { TTYPE_TABLE N_TTYPES, /* Positions in the table. */ CPP_LAST_EQ = CPP_LSHIFT, CPP_FIRST_DIGRAPH = CPP_HASH, CPP_LAST_PUNCTUATOR= CPP_ATSIGN, CPP_LAST_CPP_OP = CPP_LESS_EQ }; #undef OP #undef TK /* C language kind, used when calling cpp_create_reader. */ enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_STDC89, CLK_STDC94, CLK_STDC99, CLK_GNUCXX, CLK_CXX98, CLK_GNUCXX0X, CLK_CXX0X, CLK_ASM}; /* Payload of a NUMBER, STRING, CHAR or COMMENT token. */ struct cpp_string GTY(()) { unsigned int len; const unsigned char *text; }; /* Flags for the cpp_token structure. */ #define PREV_WHITE (1 << 0) /* If whitespace before this token. */ #define DIGRAPH (1 << 1) /* If it was a digraph. */ #define STRINGIFY_ARG (1 << 2) /* If macro argument to be stringified. */ #define PASTE_LEFT (1 << 3) /* If on LHS of a ## operator. */ #define NAMED_OP (1 << 4) /* C++ named operators. */ #define NO_EXPAND (1 << 5) /* Do not macro-expand this token. */ #define BOL (1 << 6) /* Token at beginning of line. */ #define PURE_ZERO (1 << 7) /* Single 0 digit, used by the C++ frontend, set in c-lex.c. */ /* Specify which field, if any, of the cpp_token union is used. */ enum cpp_token_fld_kind { CPP_TOKEN_FLD_NODE, CPP_TOKEN_FLD_SOURCE, CPP_TOKEN_FLD_STR, CPP_TOKEN_FLD_ARG_NO, CPP_TOKEN_FLD_PRAGMA, CPP_TOKEN_FLD_NONE }; /* A preprocessing token. This has been carefully packed and should occupy 16 bytes on 32-bit hosts and 24 bytes on 64-bit hosts. */ struct cpp_token GTY(()) { source_location src_loc; /* Location of first char of token. */ ENUM_BITFIELD(cpp_ttype) type : CHAR_BIT; /* token type */ unsigned char flags; /* flags - see above */ union cpp_token_u { /* An identifier. */ cpp_hashnode * GTY ((nested_ptr (union tree_node, "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL", "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL"), tag ("CPP_TOKEN_FLD_NODE"))) node; /* Inherit padding from this token. */ cpp_token * GTY ((tag ("CPP_TOKEN_FLD_SOURCE"))) source; /* A string, or number. */ struct cpp_string GTY ((tag ("CPP_TOKEN_FLD_STR"))) str; /* Argument no. for a CPP_MACRO_ARG. */ unsigned int GTY ((tag ("CPP_TOKEN_FLD_ARG_NO"))) arg_no; /* Caller-supplied identifier for a CPP_PRAGMA. */ unsigned int GTY ((tag ("CPP_TOKEN_FLD_PRAGMA"))) pragma; } GTY ((desc ("cpp_token_val_index (&%1)"))) val; }; /* Say which field is in use. */ extern enum cpp_token_fld_kind cpp_token_val_index (cpp_token *tok); /* A type wide enough to hold any multibyte source character. cpplib's character constant interpreter requires an unsigned type. Also, a typedef for the signed equivalent. The width of this type is capped at 32 bits; there do exist targets where wchar_t is 64 bits, but only in a non-default mode, and there would be no meaningful interpretation for a wchar_t value greater than 2^32 anyway -- the widest wide-character encoding around is ISO 10646, which stops at 2^31. */ #if CHAR_BIT * SIZEOF_INT >= 32 # define CPPCHAR_SIGNED_T int #elif CHAR_BIT * SIZEOF_LONG >= 32 # define CPPCHAR_SIGNED_T long #else # error "Cannot find a least-32-bit signed integer type" #endif typedef unsigned CPPCHAR_SIGNED_T cppchar_t; typedef CPPCHAR_SIGNED_T cppchar_signed_t; /* Style of header dependencies to generate. */ enum cpp_deps_style { DEPS_NONE = 0, DEPS_USER, DEPS_SYSTEM }; /* The possible normalization levels, from most restrictive to least. */ enum cpp_normalize_level { /* In NFKC. */ normalized_KC = 0, /* In NFC. */ normalized_C, /* In NFC, except for subsequences where being in NFC would make the identifier invalid. */ normalized_identifier_C, /* Not normalized at all. */ normalized_none }; /* This structure is nested inside struct cpp_reader, and carries all the options visible to the command line. */ struct cpp_options { /* Characters between tab stops. */ unsigned int tabstop; /* The language we're preprocessing. */ enum c_lang lang; /* Nonzero means use extra default include directories for C++. */ unsigned char cplusplus; /* Nonzero means handle cplusplus style comments. */ unsigned char cplusplus_comments; /* Nonzero means define __OBJC__, treat @ as a special token, and use the OBJC[PLUS]_INCLUDE_PATH environment variable. */ unsigned char objc; /* Nonzero means don't copy comments into the output file. */ unsigned char discard_comments; /* Nonzero means don't copy comments into the output file during macro expansion. */ unsigned char discard_comments_in_macro_exp; /* Nonzero means process the ISO trigraph sequences. */ unsigned char trigraphs; /* Nonzero means process the ISO digraph sequences. */ unsigned char digraphs; /* Nonzero means to allow hexadecimal floats and LL suffixes. */ unsigned char extended_numbers; /* Nonzero means print names of header files (-H). */ unsigned char print_include_names; /* Nonzero means cpp_pedwarn causes a hard error. */ unsigned char pedantic_errors; /* Nonzero means don't print warning messages. */ unsigned char inhibit_warnings; /* Nonzero means complain about deprecated features. */ unsigned char warn_deprecated; /* Nonzero means don't suppress warnings from system headers. */ unsigned char warn_system_headers; /* Nonzero means don't print error messages. Has no option to select it, but can be set by a user of cpplib (e.g. fix-header). */ unsigned char inhibit_errors; /* Nonzero means warn if slash-star appears in a comment. */ unsigned char warn_comments; /* Nonzero means warn if a user-supplied include directory does not exist. */ unsigned char warn_missing_include_dirs; /* Nonzero means warn if there are any trigraphs. */ unsigned char warn_trigraphs; /* Nonzero means warn about multicharacter charconsts. */ unsigned char warn_multichar; /* Nonzero means warn about various incompatibilities with traditional C. */ unsigned char warn_traditional; /* Nonzero means warn about long long numeric constants. */ unsigned char warn_long_long; /* Nonzero means warn about text after an #endif (or #else). */ unsigned char warn_endif_labels; /* Nonzero means warn about implicit sign changes owing to integer promotions. */ unsigned char warn_num_sign_change; /* Zero means don't warn about __VA_ARGS__ usage in c89 pedantic mode. Presumably the usage is protected by the appropriate #ifdef. */ unsigned char warn_variadic_macros; /* Nonzero means turn warnings into errors. */ unsigned char warnings_are_errors; /* Nonzero means we should look for header.gcc files that remap file names. */ unsigned char remap; /* Zero means dollar signs are punctuation. */ unsigned char dollars_in_ident; /* Nonzero means UCNs are accepted in identifiers. */ unsigned char extended_identifiers; /* True if we should warn about dollars in identifiers or numbers for this translation unit. */ unsigned char warn_dollars; /* Nonzero means warn if undefined identifiers are evaluated in an #if. */ unsigned char warn_undef; /* Nonzero means warn of unused macros from the main file. */ unsigned char warn_unused_macros; /* Nonzero for the 1999 C Standard, including corrigenda and amendments. */ unsigned char c99; /* Nonzero if we are conforming to a specific C or C++ standard. */ unsigned char std; /* Nonzero means give all the error messages the ANSI standard requires. */ unsigned char pedantic; /* Nonzero means we're looking at already preprocessed code, so don't bother trying to do macro expansion and whatnot. */ unsigned char preprocessed; /* Print column number in error messages. */ unsigned char show_column; /* Nonzero means handle C++ alternate operator names. */ unsigned char operator_names; /* True for traditional preprocessing. */ unsigned char traditional; /* Holds the name of the target (execution) character set. */ const char *narrow_charset; /* Holds the name of the target wide character set. */ const char *wide_charset; /* Holds the name of the input character set. */ const char *input_charset; /* The minimum permitted level of normalization before a warning is generated. */ enum cpp_normalize_level warn_normalize; /* True to warn about precompiled header files we couldn't use. */ bool warn_invalid_pch; /* True if dependencies should be restored from a precompiled header. */ bool restore_pch_deps; /* Dependency generation. */ struct { /* Style of header dependencies to generate. */ enum cpp_deps_style style; /* Assume missing files are generated files. */ bool missing_files; /* Generate phony targets for each dependency apart from the first one. */ bool phony_targets; /* If true, no dependency is generated on the main file. */ bool ignore_main_file; } deps; /* Target-specific features set by the front end or client. */ /* Precision for target CPP arithmetic, target characters, target ints and target wide characters, respectively. */ size_t precision, char_precision, int_precision, wchar_precision; /* True means chars (wide chars) are unsigned. */ bool unsigned_char, unsigned_wchar; /* True if the most significant byte in a word has the lowest address in memory. */ bool bytes_big_endian; /* Nonzero means __STDC__ should have the value 0 in system headers. */ unsigned char stdc_0_in_system_headers; /* True means error callback should be used for diagnostics. */ bool client_diagnostic; /* True disables tokenization outside of preprocessing directives. */ bool directives_only; }; /* Callback for header lookup for HEADER, which is the name of a source file. It is used as a method of last resort to find headers that are not otherwise found during the normal include processing. The return value is the malloced name of a header to try and open, if any, or NULL otherwise. This callback is called only if the header is otherwise unfound. */ typedef const char *(*missing_header_cb)(cpp_reader *, const char *header, cpp_dir **); /* Call backs to cpplib client. */ struct cpp_callbacks { /* Called when a new line of preprocessed output is started. */ void (*line_change) (cpp_reader *, const cpp_token *, int); /* Called when switching to/from a new file. The line_map is for the new file. It is NULL if there is no new file. (In C this happens when done with + and also when done with a main file.) This can be used for resource cleanup. */ void (*file_change) (cpp_reader *, const struct line_map *); void (*dir_change) (cpp_reader *, const char *); void (*include) (cpp_reader *, unsigned int, const unsigned char *, const char *, int, const cpp_token **); void (*define) (cpp_reader *, unsigned int, cpp_hashnode *); void (*undef) (cpp_reader *, unsigned int, cpp_hashnode *); void (*ident) (cpp_reader *, unsigned int, const cpp_string *); void (*def_pragma) (cpp_reader *, unsigned int); int (*valid_pch) (cpp_reader *, const char *, int); void (*read_pch) (cpp_reader *, const char *, int, const char *); missing_header_cb missing_header; /* Called to emit a diagnostic if client_diagnostic option is true. This callback receives the translated message. */ void (*error) (cpp_reader *, int, const char *, va_list *) ATTRIBUTE_FPTR_PRINTF(3,0); }; /* Chain of directories to look for include files in. */ struct cpp_dir { /* NULL-terminated singly-linked list. */ struct cpp_dir *next; /* NAME of the directory, NUL-terminated. */ char *name; unsigned int len; /* One if a system header, two if a system header that has extern "C" guards for C++. */ unsigned char sysp; /* Mapping of file names for this directory for MS-DOS and related platforms. A NULL-terminated array of (from, to) pairs. */ const char **name_map; /* Routine to construct pathname, given the search path name and the HEADER we are trying to find, return a constructed pathname to try and open. If this is NULL, the constructed pathname is as constructed by append_file_to_dir. */ char *(*construct) (const char *header, cpp_dir *dir); /* The C front end uses these to recognize duplicated directories in the search path. */ ino_t ino; dev_t dev; /* Is this a user-supplied directory? */ bool user_supplied_p; }; /* Name under which this program was invoked. */ extern const char *progname; /* The structure of a node in the hash table. The hash table has entries for all identifiers: either macros defined by #define commands (type NT_MACRO), assertions created with #assert (NT_ASSERTION), or neither of the above (NT_VOID). Builtin macros like __LINE__ are flagged NODE_BUILTIN. Poisoned identifiers are flagged NODE_POISONED. NODE_OPERATOR (C++ only) indicates an identifier that behaves like an operator such as "xor". NODE_DIAGNOSTIC is for speed in lex_token: it indicates a diagnostic may be required for this node. Currently this only applies to __VA_ARGS__ and poisoned identifiers. */ /* Hash node flags. */ #define NODE_OPERATOR (1 << 0) /* C++ named operator. */ #define NODE_POISONED (1 << 1) /* Poisoned identifier. */ #define NODE_BUILTIN (1 << 2) /* Builtin macro. */ #define NODE_DIAGNOSTIC (1 << 3) /* Possible diagnostic when lexed. */ #define NODE_WARN (1 << 4) /* Warn if redefined or undefined. */ #define NODE_DISABLED (1 << 5) /* A disabled macro. */ #define NODE_MACRO_ARG (1 << 6) /* Used during #define processing. */ /* Different flavors of hash node. */ enum node_type { NT_VOID = 0, /* No definition yet. */ NT_MACRO, /* A macro of some form. */ NT_ASSERTION /* Predicate for #assert. */ }; /* Different flavors of builtin macro. _Pragma is an operator, but we handle it with the builtin code for efficiency reasons. */ enum builtin_type { BT_SPECLINE = 0, /* `__LINE__' */ BT_DATE, /* `__DATE__' */ BT_FILE, /* `__FILE__' */ BT_BASE_FILE, /* `__BASE_FILE__' */ BT_INCLUDE_LEVEL, /* `__INCLUDE_LEVEL__' */ BT_TIME, /* `__TIME__' */ BT_STDC, /* `__STDC__' */ BT_PRAGMA, /* `_Pragma' operator */ BT_TIMESTAMP, /* `__TIMESTAMP__' */ BT_COUNTER /* `__COUNTER__' */ }; #define CPP_HASHNODE(HNODE) ((cpp_hashnode *) (HNODE)) #define HT_NODE(NODE) ((ht_identifier *) (NODE)) #define NODE_LEN(NODE) HT_LEN (&(NODE)->ident) #define NODE_NAME(NODE) HT_STR (&(NODE)->ident) /* Specify which field, if any, of the union is used. */ enum { NTV_MACRO, NTV_ANSWER, NTV_BUILTIN, NTV_ARGUMENT, NTV_NONE }; #define CPP_HASHNODE_VALUE_IDX(HNODE) \ ((HNODE.flags & NODE_MACRO_ARG) ? NTV_ARGUMENT \ : HNODE.type == NT_MACRO ? ((HNODE.flags & NODE_BUILTIN) \ ? NTV_BUILTIN : NTV_MACRO) \ : HNODE.type == NT_ASSERTION ? NTV_ANSWER \ : NTV_NONE) /* The common part of an identifier node shared amongst all 3 C front ends. Also used to store CPP identifiers, which are a superset of identifiers in the grammatical sense. */ union _cpp_hashnode_value GTY(()) { /* If a macro. */ cpp_macro * GTY((tag ("NTV_MACRO"))) macro; /* Answers to an assertion. */ struct answer * GTY ((tag ("NTV_ANSWER"))) answers; /* Code for a builtin macro. */ enum builtin_type GTY ((tag ("NTV_BUILTIN"))) builtin; /* Macro argument index. */ unsigned short GTY ((tag ("NTV_ARGUMENT"))) arg_index; }; struct cpp_hashnode GTY(()) { struct ht_identifier ident; unsigned int is_directive : 1; unsigned int directive_index : 7; /* If is_directive, then index into directive table. Otherwise, a NODE_OPERATOR. */ unsigned char rid_code; /* Rid code - for front ends. */ ENUM_BITFIELD(node_type) type : 8; /* CPP node type. */ unsigned char flags; /* CPP flags. */ union _cpp_hashnode_value GTY ((desc ("CPP_HASHNODE_VALUE_IDX (%1)"))) value; }; /* Call this first to get a handle to pass to other functions. If you want cpplib to manage its own hashtable, pass in a NULL pointer. Otherwise you should pass in an initialized hash table that cpplib will share; this technique is used by the C front ends. */ extern cpp_reader *cpp_create_reader (enum c_lang, struct ht *, struct line_maps *); /* Reset the cpp_reader's line_map. This is only used after reading a PCH file. */ extern void cpp_set_line_map (cpp_reader *, struct line_maps *); /* Call this to change the selected language standard (e.g. because of command line options). */ extern void cpp_set_lang (cpp_reader *, enum c_lang); /* Set the include paths. */ extern void cpp_set_include_chains (cpp_reader *, cpp_dir *, cpp_dir *, int); /* Call these to get pointers to the options, callback, and deps structures for a given reader. These pointers are good until you call cpp_finish on that reader. You can either edit the callbacks through the pointer returned from cpp_get_callbacks, or set them with cpp_set_callbacks. */ extern cpp_options *cpp_get_options (cpp_reader *); extern cpp_callbacks *cpp_get_callbacks (cpp_reader *); extern void cpp_set_callbacks (cpp_reader *, cpp_callbacks *); extern struct deps *cpp_get_deps (cpp_reader *); /* This function reads the file, but does not start preprocessing. It returns the name of the original file; this is the same as the input file, except for preprocessed input. This will generate at least one file change callback, and possibly a line change callback too. If there was an error opening the file, it returns NULL. */ extern const char *cpp_read_main_file (cpp_reader *, const char *); /* Set up built-ins with special behavior. Use cpp_init_builtins() instead unless your know what you are doing. */ extern void cpp_init_special_builtins (cpp_reader *); /* Set up built-ins like __FILE__. */ extern void cpp_init_builtins (cpp_reader *, int); /* This is called after options have been parsed, and partially processed. */ extern void cpp_post_options (cpp_reader *); /* Set up translation to the target character set. */ extern void cpp_init_iconv (cpp_reader *); /* Call this to finish preprocessing. If you requested dependency generation, pass an open stream to write the information to, otherwise NULL. It is your responsibility to close the stream. Returns cpp_errors (pfile). */ extern int cpp_finish (cpp_reader *, FILE *deps_stream); /* Call this to release the handle at the end of preprocessing. Any use of the handle after this function returns is invalid. Returns cpp_errors (pfile). */ extern void cpp_destroy (cpp_reader *); /* Error count. */ extern unsigned int cpp_errors (cpp_reader *); extern unsigned int cpp_token_len (const cpp_token *); extern unsigned char *cpp_token_as_text (cpp_reader *, const cpp_token *); extern unsigned char *cpp_spell_token (cpp_reader *, const cpp_token *, unsigned char *, bool); extern void cpp_register_pragma (cpp_reader *, const char *, const char *, void (*) (cpp_reader *), bool); extern void cpp_register_deferred_pragma (cpp_reader *, const char *, const char *, unsigned, bool, bool); extern int cpp_avoid_paste (cpp_reader *, const cpp_token *, const cpp_token *); extern const cpp_token *cpp_get_token (cpp_reader *); extern const cpp_token *cpp_get_token_with_location (cpp_reader *, source_location *); extern const unsigned char *cpp_macro_definition (cpp_reader *, const cpp_hashnode *); extern void _cpp_backup_tokens (cpp_reader *, unsigned int); /* Evaluate a CPP_CHAR or CPP_WCHAR token. */ extern cppchar_t cpp_interpret_charconst (cpp_reader *, const cpp_token *, unsigned int *, int *); /* Evaluate a vector of CPP_STRING or CPP_WSTRING tokens. */ extern bool cpp_interpret_string (cpp_reader *, const cpp_string *, size_t, cpp_string *, bool); extern bool cpp_interpret_string_notranslate (cpp_reader *, const cpp_string *, size_t, cpp_string *, bool); /* Convert a host character constant to the execution character set. */ extern cppchar_t cpp_host_to_exec_charset (cpp_reader *, cppchar_t); /* Used to register macros and assertions, perhaps from the command line. The text is the same as the command line argument. */ extern void cpp_define (cpp_reader *, const char *); extern void cpp_assert (cpp_reader *, const char *); extern void cpp_undef (cpp_reader *, const char *); extern void cpp_unassert (cpp_reader *, const char *); extern cpp_macro *cpp_push_definition (cpp_reader *, const char *); extern void cpp_pop_definition (cpp_reader *, const char *, cpp_macro *); /* Undefine all macros and assertions. */ extern void cpp_undef_all (cpp_reader *); extern cpp_buffer *cpp_push_buffer (cpp_reader *, const unsigned char *, size_t, int); extern int cpp_defined (cpp_reader *, const unsigned char *, int); /* A preprocessing number. Code assumes that any unused high bits of the double integer are set to zero. */ typedef unsigned HOST_WIDE_INT cpp_num_part; typedef struct cpp_num cpp_num; struct cpp_num { cpp_num_part high; cpp_num_part low; bool unsignedp; /* True if value should be treated as unsigned. */ bool overflow; /* True if the most recent calculation overflowed. */ }; /* cpplib provides two interfaces for interpretation of preprocessing numbers. cpp_classify_number categorizes numeric constants according to their field (integer, floating point, or invalid), radix (decimal, octal, hexadecimal), and type suffixes. */ #define CPP_N_CATEGORY 0x000F #define CPP_N_INVALID 0x0000 #define CPP_N_INTEGER 0x0001 #define CPP_N_FLOATING 0x0002 #define CPP_N_WIDTH 0x00F0 #define CPP_N_SMALL 0x0010 /* int, float, shrot _Fract/Accum */ #define CPP_N_MEDIUM 0x0020 /* long, double, long _Fract/_Accum. */ #define CPP_N_LARGE 0x0040 /* long long, long double, long long _Fract/Accum. */ #define CPP_N_WIDTH_MD 0xF0000 /* machine defined. */ #define CPP_N_MD_W 0x10000 #define CPP_N_MD_Q 0x20000 #define CPP_N_RADIX 0x0F00 #define CPP_N_DECIMAL 0x0100 #define CPP_N_HEX 0x0200 #define CPP_N_OCTAL 0x0400 #define CPP_N_BINARY 0x0800 #define CPP_N_UNSIGNED 0x1000 /* Properties. */ #define CPP_N_IMAGINARY 0x2000 #define CPP_N_DFLOAT 0x4000 #define CPP_N_FRACT 0x100000 /* Fract types. */ #define CPP_N_ACCUM 0x200000 /* Accum types. */ /* Classify a CPP_NUMBER token. The return value is a combination of the flags from the above sets. */ extern unsigned cpp_classify_number (cpp_reader *, const cpp_token *); /* Evaluate a token classified as category CPP_N_INTEGER. */ extern cpp_num cpp_interpret_integer (cpp_reader *, const cpp_token *, unsigned int type); /* Sign extend a number, with PRECISION significant bits and all others assumed clear, to fill out a cpp_num structure. */ cpp_num cpp_num_sign_extend (cpp_num, size_t); /* Diagnostic levels. To get a diagnostic without associating a position in the translation unit with it, use cpp_error_with_line with a line number of zero. */ /* Warning, an error with -Werror. */ #define CPP_DL_WARNING 0x00 /* Same as CPP_DL_WARNING, except it is not suppressed in system headers. */ #define CPP_DL_WARNING_SYSHDR 0x01 /* Warning, an error with -pedantic-errors or -Werror. */ #define CPP_DL_PEDWARN 0x02 /* An error. */ #define CPP_DL_ERROR 0x03 /* An internal consistency check failed. Prints "internal error: ", otherwise the same as CPP_DL_ERROR. */ #define CPP_DL_ICE 0x04 /* Extracts a diagnostic level from an int. */ #define CPP_DL_EXTRACT(l) (l & 0xf) /* Nonzero if a diagnostic level is one of the warnings. */ #define CPP_DL_WARNING_P(l) (CPP_DL_EXTRACT (l) >= CPP_DL_WARNING \ && CPP_DL_EXTRACT (l) <= CPP_DL_PEDWARN) /* Output a diagnostic of some kind. */ extern void cpp_error (cpp_reader *, int, const char *msgid, ...) ATTRIBUTE_PRINTF_3; /* Output a diagnostic with "MSGID: " preceding the error string of errno. No location is printed. */ extern void cpp_errno (cpp_reader *, int, const char *msgid); /* Same as cpp_error, except additionally specifies a position as a (translation unit) physical line and physical column. If the line is zero, then no location is printed. */ extern void cpp_error_with_line (cpp_reader *, int, source_location, unsigned, const char *msgid, ...) ATTRIBUTE_PRINTF_5; /* In cpplex.c */ extern int cpp_ideq (const cpp_token *, const char *); extern void cpp_output_line (cpp_reader *, FILE *); extern void cpp_output_token (const cpp_token *, FILE *); extern const char *cpp_type2name (enum cpp_ttype); /* Returns the value of an escape sequence, truncated to the correct target precision. PSTR points to the input pointer, which is just after the backslash. LIMIT is how much text we have. WIDE is true if the escape sequence is part of a wide character constant or string literal. Handles all relevant diagnostics. */ extern cppchar_t cpp_parse_escape (cpp_reader *, const unsigned char ** pstr, const unsigned char *limit, int wide); /* In cpphash.c */ /* Lookup an identifier in the hashtable. Puts the identifier in the table if it is not already there. */ extern cpp_hashnode *cpp_lookup (cpp_reader *, const unsigned char *, unsigned int); typedef int (*cpp_cb) (cpp_reader *, cpp_hashnode *, void *); extern void cpp_forall_identifiers (cpp_reader *, cpp_cb, void *); /* In cppmacro.c */ extern void cpp_scan_nooutput (cpp_reader *); extern int cpp_sys_macro_p (cpp_reader *); extern unsigned char *cpp_quote_string (unsigned char *, const unsigned char *, unsigned int); /* In cppfiles.c */ extern bool cpp_included (cpp_reader *, const char *); extern bool cpp_included_before (cpp_reader *, const char *, source_location); extern void cpp_make_system_header (cpp_reader *, int, int); extern bool cpp_push_include (cpp_reader *, const char *); extern void cpp_change_file (cpp_reader *, enum lc_reason, const char *); extern const char *cpp_get_path (struct _cpp_file *); extern cpp_dir *cpp_get_dir (struct _cpp_file *); extern cpp_buffer *cpp_get_buffer (cpp_reader *); extern struct _cpp_file *cpp_get_file (cpp_buffer *); extern cpp_buffer *cpp_get_prev (cpp_buffer *); extern void cpp_clear_file_cache (cpp_reader *); /* In cpppch.c */ struct save_macro_data; extern int cpp_save_state (cpp_reader *, FILE *); extern int cpp_write_pch_deps (cpp_reader *, FILE *); extern int cpp_write_pch_state (cpp_reader *, FILE *); extern int cpp_valid_state (cpp_reader *, const char *, int); extern void cpp_prepare_state (cpp_reader *, struct save_macro_data **); extern int cpp_read_state (cpp_reader *, const char *, FILE *, struct save_macro_data *); #ifdef __cplusplus } #endif #endif /* ! LIBCPP_CPPLIB_H */ nescc-1.3.4/libcpp/include/line-map.h000066400000000000000000000166601177770303300174020ustar00rootroot00000000000000/* Map logical line numbers to (source file, line number) pairs. Copyright (C) 2001, 2003, 2004, 2007 Free Software Foundation, Inc. This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. In other words, you are welcome to use, share and improve this program. You are forbidden to forbid anyone else to use, share and improve what you give them. Help stamp out software-hoarding! */ #ifndef LIBCPP_LINE_MAP_H #define LIBCPP_LINE_MAP_H #ifndef GTY #define GTY(x) /* nothing */ #endif /* Reason for adding a line change with add_line_map (). LC_ENTER is when including a new file, e.g. a #include directive in C. LC_LEAVE is when reaching a file's end. LC_RENAME is when a file name or line number changes for neither of the above reasons (e.g. a #line directive in C). */ enum lc_reason {LC_ENTER = 0, LC_LEAVE, LC_RENAME}; /* A logical line/column number, i.e. an "index" into a line_map. */ /* Long-term, we want to use this to replace struct location_s (in input.h), and effectively typedef source_location location_t. */ typedef unsigned int source_location; /* Memory allocation function typedef. Works like xrealloc. */ typedef void *(*line_map_realloc) (void *, size_t); /* Physical source file TO_FILE at line TO_LINE at column 0 is represented by the logical START_LOCATION. TO_LINE+L at column C is represented by START_LOCATION+(L*(1<start_location) >> (MAP)->column_bits) + (MAP)->to_line) #define SOURCE_COLUMN(MAP, LINE) \ (((LINE) - (MAP)->start_location) & ((1 << (MAP)->column_bits) - 1)) /* Returns the last source line within a map. This is the (last) line of the #include, or other directive, that caused a map change. */ #define LAST_SOURCE_LINE(MAP) \ SOURCE_LINE (MAP, LAST_SOURCE_LINE_LOCATION (MAP)) #define LAST_SOURCE_LINE_LOCATION(MAP) \ ((((MAP)[1].start_location - 1 - (MAP)->start_location) \ & ~((1 << (MAP)->column_bits) - 1)) \ + (MAP)->start_location) /* Returns the map a given map was included from. */ #define INCLUDED_FROM(SET, MAP) (&(SET)->maps[(MAP)->included_from]) /* Nonzero if the map is at the bottom of the include stack. */ #define MAIN_FILE_P(MAP) ((MAP)->included_from < 0) /* Set LOC to a source position that is the same line as the most recent linemap_line_start, but with the specified TO_COLUMN column number. */ #define LINEMAP_POSITION_FOR_COLUMN(LOC, SET, TO_COLUMN) { \ unsigned int to_column = (TO_COLUMN); \ struct line_maps *set = (SET); \ if (__builtin_expect (to_column >= set->max_column_hint, 0)) \ (LOC) = linemap_position_for_column (set, to_column); \ else { \ source_location r = set->highest_line; \ r = r + to_column; \ if (r >= set->highest_location) \ set->highest_location = r; \ (LOC) = r; \ }} extern source_location linemap_position_for_column (struct line_maps *set, unsigned int to_column); #endif /* !LIBCPP_LINE_MAP_H */ nescc-1.3.4/libcpp/include/mkdeps.h000066400000000000000000000066701177770303300171630ustar00rootroot00000000000000/* Dependency generator for Makefile fragments. Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc. Contributed by Zack Weinberg, Mar 2000 This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. In other words, you are welcome to use, share and improve this program. You are forbidden to forbid anyone else to use, share and improve what you give them. Help stamp out software-hoarding! */ #ifndef LIBCPP_MKDEPS_H #define LIBCPP_MKDEPS_H /* This is the data structure used by all the functions in mkdeps.c. It's quite straightforward, but should be treated as opaque. */ struct deps; /* Create a deps buffer. */ extern struct deps *deps_init (void); /* Destroy a deps buffer. */ extern void deps_free (struct deps *); /* Add a set of "vpath" directories. The second argument is a colon- separated list of pathnames, like you would set Make's VPATH variable to. If a dependency or target name begins with any of these pathnames (and the next path element is not "..") that pathname is stripped off. */ extern void deps_add_vpath (struct deps *, const char *); /* Add a target (appears on left side of the colon) to the deps list. Takes a boolean indicating whether to quote the target for MAKE. */ extern void deps_add_target (struct deps *, const char *, int); /* Sets the default target if none has been given already. An empty string as the default target is interpreted as stdin. */ extern void deps_add_default_target (struct deps *, const char *); /* Add a dependency (appears on the right side of the colon) to the deps list. Dependencies will be printed in the order that they were entered with this function. By convention, the first dependency entered should be the primary source file. */ extern void deps_add_dep (struct deps *, const char *); /* Write out a deps buffer to a specified file. The third argument is the number of columns to word-wrap at (0 means don't wrap). */ extern void deps_write (const struct deps *, FILE *, unsigned int); /* Write out a deps buffer to a file, in a form that can be read back with deps_restore. Returns nonzero on error, in which case the error number will be in errno. */ extern int deps_save (struct deps *, FILE *); /* Read back dependency information written with deps_save into the deps buffer. The third argument may be NULL, in which case the dependency information is just skipped, or it may be a filename, in which case that filename is skipped. */ extern int deps_restore (struct deps *, FILE *, const char *); /* For each dependency *except the first*, emit a dummy rule for that file, causing it to depend on nothing. This is used to work around the intermediate-file deletion misfeature in Make, in some automatic dependency schemes. */ extern void deps_phony_targets (const struct deps *, FILE *); #endif /* ! LIBCPP_MKDEPS_H */ nescc-1.3.4/libcpp/include/symtab.h000066400000000000000000000063541177770303300171760ustar00rootroot00000000000000/* Hash tables. Copyright (C) 2000, 2001, 2003, 2004, 2007 Free Software Foundation, Inc. This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef LIBCPP_SYMTAB_H #define LIBCPP_SYMTAB_H #include "obstack.h" #ifndef GTY #define GTY(x) /* nothing */ #endif /* This is what each hash table entry points to. It may be embedded deeply within another object. */ typedef struct ht_identifier ht_identifier; struct ht_identifier GTY(()) { const unsigned char *str; unsigned int len; unsigned int hash_value; }; #define HT_LEN(NODE) ((NODE)->len) #define HT_STR(NODE) ((NODE)->str) typedef struct ht hash_table; typedef struct ht_identifier *hashnode; enum ht_lookup_option {HT_NO_INSERT = 0, HT_ALLOC, HT_ALLOCED}; /* An identifier hash table for cpplib and the front ends. */ struct ht { /* Identifiers are allocated from here. */ struct obstack stack; hashnode *entries; /* Call back, allocate a node. */ hashnode (*alloc_node) (hash_table *); /* Call back, allocate something that hangs off a node like a cpp_macro. NULL means use the usual allocator. */ void * (*alloc_subobject) (size_t); unsigned int nslots; /* Total slots in the entries array. */ unsigned int nelements; /* Number of live elements. */ /* Link to reader, if any. For the benefit of cpplib. */ struct cpp_reader *pfile; /* Table usage statistics. */ unsigned int searches; unsigned int collisions; /* Should 'entries' be freed when it is no longer needed? */ bool entries_owned; }; /* Initialize the hashtable with 2 ^ order entries. */ extern hash_table *ht_create (unsigned int order); /* Frees all memory associated with a hash table. */ extern void ht_destroy (hash_table *); extern hashnode ht_lookup (hash_table *, const unsigned char *, size_t, enum ht_lookup_option); extern hashnode ht_lookup_with_hash (hash_table *, const unsigned char *, size_t, unsigned int, enum ht_lookup_option); #define HT_HASHSTEP(r, c) ((r) * 67 + ((c) - 113)); #define HT_HASHFINISH(r, len) ((r) + (len)) /* For all nodes in TABLE, make a callback. The callback takes TABLE->PFILE, the node, and a PTR, and the callback sequence stops if the callback returns zero. */ typedef int (*ht_cb) (struct cpp_reader *, hashnode, const void *); extern void ht_forall (hash_table *, ht_cb, const void *); /* Restore the hash table. */ extern void ht_load (hash_table *ht, hashnode *entries, unsigned int nslots, unsigned int nelements, bool own); /* Dump allocation statistics to stderr. */ extern void ht_dump_statistics (hash_table *); #endif /* LIBCPP_SYMTAB_H */ nescc-1.3.4/libcpp/init.c000066400000000000000000000477131177770303300152160ustar00rootroot00000000000000/* CPP Library. Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. Contributed by Per Bothner, 1994-95. Based on CCCP program by Paul Rubin, June 1986 Adapted to ANSI C, Richard Stallman, Jan 1987 This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "system.h" #include "cpplib.h" #include "internal.h" #include "mkdeps.h" #include "localedir.h" static void init_library (void); static void mark_named_operators (cpp_reader *); static void read_original_filename (cpp_reader *); static void read_original_directory (cpp_reader *); static void post_options (cpp_reader *); /* If we have designated initializers (GCC >2.7) these tables can be initialized, constant data. Otherwise, they have to be filled in at runtime. */ #if HAVE_DESIGNATED_INITIALIZERS #define init_trigraph_map() /* Nothing. */ #define TRIGRAPH_MAP \ __extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { #define END }; #define s(p, v) [p] = v, #else #define TRIGRAPH_MAP uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \ static void init_trigraph_map (void) { \ unsigned char *x = _cpp_trigraph_map; #define END } #define s(p, v) x[p] = v; #endif TRIGRAPH_MAP s('=', '#') s(')', ']') s('!', '|') s('(', '[') s('\'', '^') s('>', '}') s('/', '\\') s('<', '{') s('-', '~') END #undef s #undef END #undef TRIGRAPH_MAP /* A set of booleans indicating what CPP features each source language requires. */ struct lang_flags { char c99; char cplusplus; char extended_numbers; char extended_identifiers; char std; char cplusplus_comments; char digraphs; }; static const struct lang_flags lang_defaults[] = { /* c99 c++ xnum xid std // digr */ /* GNUC89 */ { 0, 0, 1, 0, 0, 1, 1 }, /* GNUC99 */ { 1, 0, 1, 0, 0, 1, 1 }, /* STDC89 */ { 0, 0, 0, 0, 1, 0, 0 }, /* STDC94 */ { 0, 0, 0, 0, 1, 0, 1 }, /* STDC99 */ { 1, 0, 1, 0, 1, 1, 1 }, /* GNUCXX */ { 0, 1, 1, 0, 0, 1, 1 }, /* CXX98 */ { 0, 1, 1, 0, 1, 1, 1 }, /* GNUCXX0X */ { 1, 1, 1, 0, 0, 1, 1 }, /* CXX0X */ { 1, 1, 1, 0, 1, 1, 1 }, /* ASM */ { 0, 0, 1, 0, 0, 1, 0 } /* xid should be 1 for GNUC99, STDC99, GNUCXX, CXX98, GNUCXX0X, and CXX0X when no longer experimental (when all uses of identifiers in the compiler have been audited for correct handling of extended identifiers). */ }; /* Sets internal flags correctly for a given language. */ void cpp_set_lang (cpp_reader *pfile, enum c_lang lang) { const struct lang_flags *l = &lang_defaults[(int) lang]; CPP_OPTION (pfile, lang) = lang; CPP_OPTION (pfile, c99) = l->c99; CPP_OPTION (pfile, cplusplus) = l->cplusplus; CPP_OPTION (pfile, extended_numbers) = l->extended_numbers; CPP_OPTION (pfile, extended_identifiers) = l->extended_identifiers; CPP_OPTION (pfile, std) = l->std; CPP_OPTION (pfile, trigraphs) = l->std; CPP_OPTION (pfile, cplusplus_comments) = l->cplusplus_comments; CPP_OPTION (pfile, digraphs) = l->digraphs; } /* Initialize library global state. */ static void init_library (void) { static int initialized = 0; if (! initialized) { initialized = 1; /* Set up the trigraph map. This doesn't need to do anything if we were compiled with a compiler that supports C99 designated initializers. */ init_trigraph_map (); #ifdef ENABLE_NLS (void) bindtextdomain (PACKAGE, LOCALEDIR); #endif } } /* Initialize a cpp_reader structure. */ cpp_reader * cpp_create_reader (enum c_lang lang, hash_table *table, struct line_maps *line_table) { cpp_reader *pfile; /* Initialize this instance of the library if it hasn't been already. */ init_library (); pfile = XCNEW (cpp_reader); cpp_set_lang (pfile, lang); CPP_OPTION (pfile, warn_multichar) = 1; CPP_OPTION (pfile, discard_comments) = 1; CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1; CPP_OPTION (pfile, show_column) = 1; CPP_OPTION (pfile, tabstop) = 8; CPP_OPTION (pfile, operator_names) = 1; CPP_OPTION (pfile, warn_trigraphs) = 2; CPP_OPTION (pfile, warn_endif_labels) = 1; CPP_OPTION (pfile, warn_deprecated) = 1; CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99); CPP_OPTION (pfile, dollars_in_ident) = 1; CPP_OPTION (pfile, warn_dollars) = 1; CPP_OPTION (pfile, warn_variadic_macros) = 1; CPP_OPTION (pfile, warn_normalize) = normalized_C; /* Default CPP arithmetic to something sensible for the host for the benefit of dumb users like fix-header. */ CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long); CPP_OPTION (pfile, char_precision) = CHAR_BIT; CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int); CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int); CPP_OPTION (pfile, unsigned_char) = 0; CPP_OPTION (pfile, unsigned_wchar) = 1; CPP_OPTION (pfile, bytes_big_endian) = 1; /* does not matter */ /* Default to no charset conversion. */ CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding (); CPP_OPTION (pfile, wide_charset) = 0; /* Default the input character set to UTF-8. */ CPP_OPTION (pfile, input_charset) = _cpp_default_encoding (); /* A fake empty "directory" used as the starting point for files looked up without a search path. Name cannot be '/' because we don't want to prepend anything at all to filenames using it. All other entries are correct zero-initialized. */ pfile->no_search_path.name = (char *) ""; /* Initialize the line map. */ pfile->line_table = line_table; /* Initialize lexer state. */ pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments); /* Set up static tokens. */ pfile->avoid_paste.type = CPP_PADDING; pfile->avoid_paste.val.source = NULL; pfile->eof.type = CPP_EOF; pfile->eof.flags = 0; /* Create a token buffer for the lexer. */ _cpp_init_tokenrun (&pfile->base_run, 250); pfile->cur_run = &pfile->base_run; pfile->cur_token = pfile->base_run.base; /* Initialize the base context. */ pfile->context = &pfile->base_context; pfile->base_context.macro = 0; pfile->base_context.prev = pfile->base_context.next = 0; /* Aligned and unaligned storage. */ pfile->a_buff = _cpp_get_buff (pfile, 0); pfile->u_buff = _cpp_get_buff (pfile, 0); /* The expression parser stack. */ _cpp_expand_op_stack (pfile); /* Initialize the buffer obstack. */ _obstack_begin (&pfile->buffer_ob, 0, 0, (void *(*) (long)) xmalloc, (void (*) (void *)) free); _cpp_init_files (pfile); _cpp_init_hashtable (pfile, table); return pfile; } /* Set the line_table entry in PFILE. This is called after reading a PCH file, as the old line_table will be incorrect. */ void cpp_set_line_map (cpp_reader *pfile, struct line_maps *line_table) { pfile->line_table = line_table; } /* Free resources used by PFILE. Accessing PFILE after this function returns leads to undefined behavior. Returns the error count. */ void cpp_destroy (cpp_reader *pfile) { cpp_context *context, *contextn; tokenrun *run, *runn; free (pfile->op_stack); while (CPP_BUFFER (pfile) != NULL) _cpp_pop_buffer (pfile); if (pfile->out.base) free (pfile->out.base); if (pfile->macro_buffer) { free (pfile->macro_buffer); pfile->macro_buffer = NULL; pfile->macro_buffer_len = 0; } if (pfile->deps) deps_free (pfile->deps); obstack_free (&pfile->buffer_ob, 0); _cpp_destroy_hashtable (pfile); _cpp_cleanup_files (pfile); _cpp_destroy_iconv (pfile); _cpp_free_buff (pfile->a_buff); _cpp_free_buff (pfile->u_buff); _cpp_free_buff (pfile->free_buffs); for (run = &pfile->base_run; run; run = runn) { runn = run->next; free (run->base); if (run != &pfile->base_run) free (run); } for (context = pfile->base_context.next; context; context = contextn) { contextn = context->next; free (context); } free (pfile); } /* This structure defines one built-in identifier. A node will be entered in the hash table under the name NAME, with value VALUE. There are two tables of these. builtin_array holds all the "builtin" macros: these are handled by builtin_macro() in macro.c. Builtin is somewhat of a misnomer -- the property of interest is that these macros require special code to compute their expansions. The value is a "builtin_type" enumerator. operator_array holds the C++ named operators. These are keywords which act as aliases for punctuators. In C++, they cannot be altered through #define, and #if recognizes them as operators. In C, these are not entered into the hash table at all (but see ). The value is a token-type enumerator. */ struct builtin { const uchar *name; unsigned short len; unsigned short value; }; #define B(n, t) { DSC(n), t } static const struct builtin builtin_array[] = { B("__TIMESTAMP__", BT_TIMESTAMP), B("__TIME__", BT_TIME), B("__DATE__", BT_DATE), B("__FILE__", BT_FILE), B("__BASE_FILE__", BT_BASE_FILE), B("__LINE__", BT_SPECLINE), B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL), B("__COUNTER__", BT_COUNTER), /* Keep builtins not used for -traditional-cpp at the end, and update init_builtins() if any more are added. */ B("_Pragma", BT_PRAGMA), B("__STDC__", BT_STDC), }; static const struct builtin operator_array[] = { B("and", CPP_AND_AND), B("and_eq", CPP_AND_EQ), B("bitand", CPP_AND), B("bitor", CPP_OR), B("compl", CPP_COMPL), B("not", CPP_NOT), B("not_eq", CPP_NOT_EQ), B("or", CPP_OR_OR), B("or_eq", CPP_OR_EQ), B("xor", CPP_XOR), B("xor_eq", CPP_XOR_EQ) }; #undef B /* Mark the C++ named operators in the hash table. */ static void mark_named_operators (cpp_reader *pfile) { const struct builtin *b; for (b = operator_array; b < (operator_array + ARRAY_SIZE (operator_array)); b++) { cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len); hp->flags |= NODE_OPERATOR; hp->is_directive = 0; hp->directive_index = b->value; } } void cpp_init_special_builtins (cpp_reader *pfile) { const struct builtin *b; size_t n = ARRAY_SIZE (builtin_array); if (CPP_OPTION (pfile, traditional)) n -= 2; else if (! CPP_OPTION (pfile, stdc_0_in_system_headers) || CPP_OPTION (pfile, std)) n--; for (b = builtin_array; b < builtin_array + n; b++) { cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len); hp->type = NT_MACRO; hp->flags |= NODE_BUILTIN | NODE_WARN; hp->value.builtin = (enum builtin_type) b->value; } } /* Read the builtins table above and enter them, and language-specific macros, into the hash table. HOSTED is true if this is a hosted environment. */ void cpp_init_builtins (cpp_reader *pfile, int hosted) { cpp_init_special_builtins (pfile); if (!CPP_OPTION (pfile, traditional) && (! CPP_OPTION (pfile, stdc_0_in_system_headers) || CPP_OPTION (pfile, std))) _cpp_define_builtin (pfile, "__STDC__ 1"); if (CPP_OPTION (pfile, cplusplus)) _cpp_define_builtin (pfile, "__cplusplus 1"); else if (CPP_OPTION (pfile, lang) == CLK_ASM) _cpp_define_builtin (pfile, "__ASSEMBLER__ 1"); else if (CPP_OPTION (pfile, lang) == CLK_STDC94) _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L"); else if (CPP_OPTION (pfile, c99)) _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L"); if (hosted) _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1"); else _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0"); if (CPP_OPTION (pfile, objc)) _cpp_define_builtin (pfile, "__OBJC__ 1"); } /* Sanity-checks are dependent on command-line options, so it is called as a subroutine of cpp_read_main_file (). */ #if ENABLE_CHECKING static void sanity_checks (cpp_reader *); static void sanity_checks (cpp_reader *pfile) { cppchar_t test = 0; size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part); /* Sanity checks for assumptions about CPP arithmetic and target type precisions made by cpplib. */ test--; if (test < 1) cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type"); if (CPP_OPTION (pfile, precision) > max_precision) cpp_error (pfile, CPP_DL_ICE, "preprocessor arithmetic has maximum precision of %lu bits;" " target requires %lu bits", (unsigned long) max_precision, (unsigned long) CPP_OPTION (pfile, precision)); if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision)) cpp_error (pfile, CPP_DL_ICE, "CPP arithmetic must be at least as precise as a target int"); if (CPP_OPTION (pfile, char_precision) < 8) cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide"); if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision)) cpp_error (pfile, CPP_DL_ICE, "target wchar_t is narrower than target char"); if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision)) cpp_error (pfile, CPP_DL_ICE, "target int is narrower than target char"); /* This is assumed in eval_token() and could be fixed if necessary. */ if (sizeof (cppchar_t) > sizeof (cpp_num_part)) cpp_error (pfile, CPP_DL_ICE, "CPP half-integer narrower than CPP character"); if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T) cpp_error (pfile, CPP_DL_ICE, "CPP on this host cannot handle wide character constants over" " %lu bits, but the target requires %lu bits", (unsigned long) BITS_PER_CPPCHAR_T, (unsigned long) CPP_OPTION (pfile, wchar_precision)); } #else # define sanity_checks(PFILE) #endif /* This is called after options have been parsed, and partially processed. */ void cpp_post_options (cpp_reader *pfile) { sanity_checks (pfile); post_options (pfile); /* Mark named operators before handling command line macros. */ if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names)) mark_named_operators (pfile); } /* Setup for processing input from the file named FNAME, or stdin if it is the empty string. Return the original filename on success (e.g. foo.i->foo.c), or NULL on failure. */ const char * cpp_read_main_file (cpp_reader *pfile, const char *fname) { if (CPP_OPTION (pfile, deps.style) != DEPS_NONE) { if (!pfile->deps) pfile->deps = deps_init (); /* Set the default target (if there is none already). */ deps_add_default_target (pfile->deps, fname); } pfile->main_file = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0); if (_cpp_find_failed (pfile->main_file)) return NULL; _cpp_stack_file (pfile, pfile->main_file, false); /* For foo.i, read the original filename foo.c now, for the benefit of the front ends. */ if (CPP_OPTION (pfile, preprocessed)) { read_original_filename (pfile); fname = pfile->line_table->maps[pfile->line_table->used-1].to_file; } return fname; } /* For preprocessed files, if the first tokens are of the form # NUM. handle the directive so we know the original file name. This will generate file_change callbacks, which the front ends must handle appropriately given their state of initialization. */ static void read_original_filename (cpp_reader *pfile) { const cpp_token *token, *token1; /* Lex ahead; if the first tokens are of the form # NUM, then process the directive, otherwise back up. */ token = _cpp_lex_direct (pfile); if (token->type == CPP_HASH) { pfile->state.in_directive = 1; token1 = _cpp_lex_direct (pfile); _cpp_backup_tokens (pfile, 1); pfile->state.in_directive = 0; /* If it's a #line directive, handle it. */ if (token1->type == CPP_NUMBER) { _cpp_handle_directive (pfile, token->flags & PREV_WHITE); read_original_directory (pfile); return; } } /* Backup as if nothing happened. */ _cpp_backup_tokens (pfile, 1); } /* For preprocessed files, if the tokens following the first filename line is of the form # "/path/name//", handle the directive so we know the original current directory. */ static void read_original_directory (cpp_reader *pfile) { const cpp_token *hash, *token; /* Lex ahead; if the first tokens are of the form # NUM, then process the directive, otherwise back up. */ hash = _cpp_lex_direct (pfile); if (hash->type != CPP_HASH) { _cpp_backup_tokens (pfile, 1); return; } token = _cpp_lex_direct (pfile); if (token->type != CPP_NUMBER) { _cpp_backup_tokens (pfile, 2); return; } token = _cpp_lex_direct (pfile); if (token->type != CPP_STRING || ! (token->val.str.len >= 5 && token->val.str.text[token->val.str.len-2] == '/' && token->val.str.text[token->val.str.len-3] == '/')) { _cpp_backup_tokens (pfile, 3); return; } if (pfile->cb.dir_change) { char *debugdir = (char *) alloca (token->val.str.len - 3); memcpy (debugdir, (const char *) token->val.str.text + 1, token->val.str.len - 4); debugdir[token->val.str.len - 4] = '\0'; pfile->cb.dir_change (pfile, debugdir); } } /* This is called at the end of preprocessing. It pops the last buffer and writes dependency output, and returns the number of errors. Maybe it should also reset state, such that you could call cpp_start_read with a new filename to restart processing. */ int cpp_finish (cpp_reader *pfile, FILE *deps_stream) { /* Warn about unused macros before popping the final buffer. */ if (CPP_OPTION (pfile, warn_unused_macros)) cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL); /* lex.c leaves the final buffer on the stack. This it so that it returns an unending stream of CPP_EOFs to the client. If we popped the buffer, we'd dereference a NULL buffer pointer and segfault. It's nice to allow the client to do worry-free excess cpp_get_token calls. */ while (pfile->buffer) _cpp_pop_buffer (pfile); /* Don't write the deps file if there are errors. */ if (CPP_OPTION (pfile, deps.style) != DEPS_NONE && deps_stream && pfile->errors == 0) { deps_write (pfile->deps, deps_stream, 72); if (CPP_OPTION (pfile, deps.phony_targets)) deps_phony_targets (pfile->deps, deps_stream); } /* Report on headers that could use multiple include guards. */ if (CPP_OPTION (pfile, print_include_names)) _cpp_report_missing_guards (pfile); return pfile->errors; } static void post_options (cpp_reader *pfile) { /* -Wtraditional is not useful in C++ mode. */ if (CPP_OPTION (pfile, cplusplus)) CPP_OPTION (pfile, warn_traditional) = 0; /* Permanently disable macro expansion if we are rescanning preprocessed text. Read preprocesed source in ISO mode. */ if (CPP_OPTION (pfile, preprocessed)) { if (!CPP_OPTION (pfile, directives_only)) pfile->state.prevent_expansion = 1; CPP_OPTION (pfile, traditional) = 0; } if (CPP_OPTION (pfile, warn_trigraphs) == 2) CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs); if (CPP_OPTION (pfile, traditional)) { CPP_OPTION (pfile, cplusplus_comments) = 0; /* Traditional CPP does not accurately track column information. */ CPP_OPTION (pfile, show_column) = 0; CPP_OPTION (pfile, trigraphs) = 0; CPP_OPTION (pfile, warn_trigraphs) = 0; } } nescc-1.3.4/libcpp/internal.h000066400000000000000000000543171177770303300160720ustar00rootroot00000000000000/* Part of CPP library. Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* This header defines all the internal data structures and functions that need to be visible across files. It should not be used outside cpplib. */ #ifndef LIBCPP_INTERNAL_H #define LIBCPP_INTERNAL_H #include "symtab.h" #include "cpp-id-data.h" #ifndef HAVE_ICONV_H #undef HAVE_ICONV #endif #if HAVE_ICONV #include #else #define HAVE_ICONV 0 typedef int iconv_t; /* dummy */ #endif struct directive; /* Deliberately incomplete. */ struct pending_option; struct op; struct _cpp_strbuf; typedef bool (*convert_f) (iconv_t, const unsigned char *, size_t, struct _cpp_strbuf *); struct cset_converter { convert_f func; iconv_t cd; }; #define BITS_PER_CPPCHAR_T (CHAR_BIT * sizeof (cppchar_t)) /* Test if a sign is valid within a preprocessing number. */ #define VALID_SIGN(c, prevc) \ (((c) == '+' || (c) == '-') && \ ((prevc) == 'e' || (prevc) == 'E' \ || (((prevc) == 'p' || (prevc) == 'P') \ && CPP_OPTION (pfile, extended_numbers)))) #define CPP_OPTION(PFILE, OPTION) ((PFILE)->opts.OPTION) #define CPP_BUFFER(PFILE) ((PFILE)->buffer) #define CPP_BUF_COLUMN(BUF, CUR) ((CUR) - (BUF)->line_base) #define CPP_BUF_COL(BUF) CPP_BUF_COLUMN(BUF, (BUF)->cur) #define CPP_INCREMENT_LINE(PFILE, COLS_HINT) do { \ const struct line_maps *line_table = PFILE->line_table; \ const struct line_map *map = &line_table->maps[line_table->used-1]; \ unsigned int line = SOURCE_LINE (map, line_table->highest_line); \ linemap_line_start (PFILE->line_table, line + 1, COLS_HINT); \ } while (0) /* Maximum nesting of cpp_buffers. We use a static limit, partly for efficiency, and partly to limit runaway recursion. */ #define CPP_STACK_MAX 200 /* Host alignment handling. */ struct dummy { char c; union { double d; int *p; } u; }; #define DEFAULT_ALIGNMENT offsetof (struct dummy, u) #define CPP_ALIGN2(size, align) (((size) + ((align) - 1)) & ~((align) - 1)) #define CPP_ALIGN(size) CPP_ALIGN2 (size, DEFAULT_ALIGNMENT) #define _cpp_mark_macro_used(NODE) do { \ if ((NODE)->type == NT_MACRO && !((NODE)->flags & NODE_BUILTIN)) \ (NODE)->value.macro->used = 1; } while (0) /* A generic memory buffer, and operations on it. */ typedef struct _cpp_buff _cpp_buff; struct _cpp_buff { struct _cpp_buff *next; unsigned char *base, *cur, *limit; }; extern _cpp_buff *_cpp_get_buff (cpp_reader *, size_t); extern void _cpp_release_buff (cpp_reader *, _cpp_buff *); extern void _cpp_extend_buff (cpp_reader *, _cpp_buff **, size_t); extern _cpp_buff *_cpp_append_extend_buff (cpp_reader *, _cpp_buff *, size_t); extern void _cpp_free_buff (_cpp_buff *); extern unsigned char *_cpp_aligned_alloc (cpp_reader *, size_t); extern unsigned char *_cpp_unaligned_alloc (cpp_reader *, size_t); #define BUFF_ROOM(BUFF) (size_t) ((BUFF)->limit - (BUFF)->cur) #define BUFF_FRONT(BUFF) ((BUFF)->cur) #define BUFF_LIMIT(BUFF) ((BUFF)->limit) /* #include types. */ enum include_type {IT_INCLUDE, IT_INCLUDE_NEXT, IT_IMPORT, IT_CMDLINE}; union utoken { const cpp_token *token; const cpp_token **ptoken; }; /* A "run" of tokens; part of a chain of runs. */ typedef struct tokenrun tokenrun; struct tokenrun { tokenrun *next, *prev; cpp_token *base, *limit; }; /* Accessor macros for struct cpp_context. */ #define FIRST(c) ((c)->u.iso.first) #define LAST(c) ((c)->u.iso.last) #define CUR(c) ((c)->u.trad.cur) #define RLIMIT(c) ((c)->u.trad.rlimit) typedef struct cpp_context cpp_context; struct cpp_context { /* Doubly-linked list. */ cpp_context *next, *prev; union { /* For ISO macro expansion. Contexts other than the base context are contiguous tokens. e.g. macro expansions, expanded argument tokens. */ struct { union utoken first; union utoken last; } iso; /* For traditional macro expansion. */ struct { const unsigned char *cur; const unsigned char *rlimit; } trad; } u; /* If non-NULL, a buffer used for storage related to this context. When the context is popped, the buffer is released. */ _cpp_buff *buff; /* For a macro context, the macro node, otherwise NULL. */ cpp_hashnode *macro; /* True if utoken element is token, else ptoken. */ bool direct_p; }; struct lexer_state { /* Nonzero if first token on line is CPP_HASH. */ unsigned char in_directive; /* Nonzero if in a directive that will handle padding tokens itself. #include needs this to avoid problems with computed include and spacing between tokens. */ unsigned char directive_wants_padding; /* True if we are skipping a failed conditional group. */ unsigned char skipping; /* Nonzero if in a directive that takes angle-bracketed headers. */ unsigned char angled_headers; /* Nonzero if in a #if or #elif directive. */ unsigned char in_expression; /* Nonzero to save comments. Turned off if discard_comments, and in all directives apart from #define. */ unsigned char save_comments; /* Nonzero if lexing __VA_ARGS__ is valid. */ unsigned char va_args_ok; /* Nonzero if lexing poisoned identifiers is valid. */ unsigned char poisoned_ok; /* Nonzero to prevent macro expansion. */ unsigned char prevent_expansion; /* Nonzero when parsing arguments to a function-like macro. */ unsigned char parsing_args; /* Nonzero if prevent_expansion is true only because output is being discarded. */ unsigned char discarding_output; /* Nonzero to skip evaluating part of an expression. */ unsigned int skip_eval; /* Nonzero when handling a deferred pragma. */ unsigned char in_deferred_pragma; /* Nonzero if the deferred pragma being handled allows macro expansion. */ unsigned char pragma_allow_expansion; }; /* Special nodes - identifiers with predefined significance. */ struct spec_nodes { cpp_hashnode *n_defined; /* defined operator */ cpp_hashnode *n_true; /* C++ keyword true */ cpp_hashnode *n_false; /* C++ keyword false */ cpp_hashnode *n__VA_ARGS__; /* C99 vararg macros */ }; typedef struct _cpp_line_note _cpp_line_note; struct _cpp_line_note { /* Location in the clean line the note refers to. */ const unsigned char *pos; /* Type of note. The 9 'from' trigraph characters represent those trigraphs, '\\' an escaped newline, ' ' an escaped newline with intervening space, and anything else is invalid. */ unsigned int type; }; /* Represents the contents of a file cpplib has read in. */ struct cpp_buffer { const unsigned char *cur; /* Current location. */ const unsigned char *line_base; /* Start of current physical line. */ const unsigned char *next_line; /* Start of to-be-cleaned logical line. */ const unsigned char *buf; /* Entire character buffer. */ const unsigned char *rlimit; /* Writable byte at end of file. */ _cpp_line_note *notes; /* Array of notes. */ unsigned int cur_note; /* Next note to process. */ unsigned int notes_used; /* Number of notes. */ unsigned int notes_cap; /* Size of allocated array. */ struct cpp_buffer *prev; /* Pointer into the file table; non-NULL if this is a file buffer. Used for include_next and to record control macros. */ struct _cpp_file *file; /* Saved value of __TIMESTAMP__ macro - date and time of last modification of the assotiated file. */ const unsigned char *timestamp; /* Value of if_stack at start of this file. Used to prohibit unmatched #endif (etc) in an include file. */ struct if_stack *if_stack; /* True if we need to get the next clean line. */ bool need_line; /* True if we have already warned about C++ comments in this file. The warning happens only for C89 extended mode with -pedantic on, or for -Wtraditional, and only once per file (otherwise it would be far too noisy). */ unsigned int warned_cplusplus_comments : 1; /* True if we don't process trigraphs and escaped newlines. True for preprocessed input, command line directives, and _Pragma buffers. */ unsigned int from_stage3 : 1; /* At EOF, a buffer is automatically popped. If RETURN_AT_EOF is true, a CPP_EOF token is then returned. Otherwise, the next token from the enclosing buffer is returned. */ unsigned int return_at_eof : 1; /* One for a system header, two for a C system header file that therefore needs to be extern "C" protected in C++, and zero otherwise. */ unsigned char sysp; /* The directory of the this buffer's file. Its NAME member is not allocated, so we don't need to worry about freeing it. */ struct cpp_dir dir; /* Descriptor for converting from the input character set to the source character set. */ struct cset_converter input_cset_desc; }; /* A cpp_reader encapsulates the "state" of a pre-processor run. Applying cpp_get_token repeatedly yields a stream of pre-processor tokens. Usually, there is only one cpp_reader object active. */ struct cpp_reader { /* Top of buffer stack. */ cpp_buffer *buffer; /* Overlaid buffer (can be different after processing #include). */ cpp_buffer *overlaid_buffer; /* Lexer state. */ struct lexer_state state; /* Source line tracking. */ struct line_maps *line_table; /* The line of the '#' of the current directive. */ source_location directive_line; /* Memory buffers. */ _cpp_buff *a_buff; /* Aligned permanent storage. */ _cpp_buff *u_buff; /* Unaligned permanent storage. */ _cpp_buff *free_buffs; /* Free buffer chain. */ /* Context stack. */ struct cpp_context base_context; struct cpp_context *context; /* If in_directive, the directive if known. */ const struct directive *directive; /* Token generated while handling a directive, if any. */ cpp_token directive_result; /* When expanding a macro at top-level, this is the location of the macro invocation. */ source_location invocation_location; /* True if this call to cpp_get_token should consider setting invocation_location. */ bool set_invocation_location; /* Search paths for include files. */ struct cpp_dir *quote_include; /* "" */ struct cpp_dir *bracket_include; /* <> */ struct cpp_dir no_search_path; /* No path. */ /* Chain of all hashed _cpp_file instances. */ struct _cpp_file *all_files; struct _cpp_file *main_file; /* File and directory hash table. */ struct htab *file_hash; struct htab *dir_hash; struct file_hash_entry_pool *file_hash_entries; /* Negative path lookup hash table. */ struct htab *nonexistent_file_hash; struct obstack nonexistent_file_ob; /* Nonzero means don't look for #include "foo" the source-file directory. */ bool quote_ignores_source_dir; /* Nonzero if any file has contained #pragma once or #import has been used. */ bool seen_once_only; /* Multiple include optimization. */ const cpp_hashnode *mi_cmacro; const cpp_hashnode *mi_ind_cmacro; bool mi_valid; /* Lexing. */ cpp_token *cur_token; tokenrun base_run, *cur_run; unsigned int lookaheads; /* Nonzero prevents the lexer from re-using the token runs. */ unsigned int keep_tokens; /* Error counter for exit code. */ unsigned int errors; /* Buffer to hold macro definition string. */ unsigned char *macro_buffer; unsigned int macro_buffer_len; /* Descriptor for converting from the source character set to the execution character set. */ struct cset_converter narrow_cset_desc; /* Descriptor for converting from the source character set to the wide execution character set. */ struct cset_converter wide_cset_desc; /* Date and time text. Calculated together if either is requested. */ const unsigned char *date; const unsigned char *time; /* EOF token, and a token forcing paste avoidance. */ cpp_token avoid_paste; cpp_token eof; /* Opaque handle to the dependencies of mkdeps.c. */ struct deps *deps; /* Obstack holding all macro hash nodes. This never shrinks. See identifiers.c */ struct obstack hash_ob; /* Obstack holding buffer and conditional structures. This is a real stack. See directives.c. */ struct obstack buffer_ob; /* Pragma table - dynamic, because a library user can add to the list of recognized pragmas. */ struct pragma_entry *pragmas; /* Call backs to cpplib client. */ struct cpp_callbacks cb; /* Identifier hash table. */ struct ht *hash_table; /* Expression parser stack. */ struct op *op_stack, *op_limit; /* User visible options. */ struct cpp_options opts; /* Special nodes - identifiers with predefined significance to the preprocessor. */ struct spec_nodes spec_nodes; /* Whether cpplib owns the hashtable. */ bool our_hashtable; /* Traditional preprocessing output buffer (a logical line). */ struct { unsigned char *base; unsigned char *limit; unsigned char *cur; source_location first_line; } out; /* Used for buffer overlays by traditional.c. */ const unsigned char *saved_cur, *saved_rlimit, *saved_line_base; /* A saved list of the defined macros, for dependency checking of precompiled headers. */ struct cpp_savedstate *savedstate; /* Next value of __COUNTER__ macro. */ unsigned int counter; }; /* Character classes. Based on the more primitive macros in safe-ctype.h. If the definition of `numchar' looks odd to you, please look up the definition of a pp-number in the C standard [section 6.4.8 of C99]. In the unlikely event that characters other than \r and \n enter the set is_vspace, the macro handle_newline() in lex.c must be updated. */ #define _dollar_ok(x) ((x) == '$' && CPP_OPTION (pfile, dollars_in_ident)) #define is_idchar(x) (ISIDNUM(x) || _dollar_ok(x)) #define is_numchar(x) ISIDNUM(x) #define is_idstart(x) (ISIDST(x) || _dollar_ok(x)) #define is_numstart(x) ISDIGIT(x) #define is_hspace(x) ISBLANK(x) #define is_vspace(x) IS_VSPACE(x) #define is_nvspace(x) IS_NVSPACE(x) #define is_space(x) IS_SPACE_OR_NUL(x) /* This table is constant if it can be initialized at compile time, which is the case if cpp was compiled with GCC >=2.7, or another compiler that supports C99. */ #if HAVE_DESIGNATED_INITIALIZERS extern const unsigned char _cpp_trigraph_map[UCHAR_MAX + 1]; #else extern unsigned char _cpp_trigraph_map[UCHAR_MAX + 1]; #endif /* Macros. */ static inline int cpp_in_system_header (cpp_reader *); static inline int cpp_in_system_header (cpp_reader *pfile) { return pfile->buffer ? pfile->buffer->sysp : 0; } #define CPP_PEDANTIC(PF) CPP_OPTION (PF, pedantic) #define CPP_WTRADITIONAL(PF) CPP_OPTION (PF, warn_traditional) static inline int cpp_in_primary_file (cpp_reader *); static inline int cpp_in_primary_file (cpp_reader *pfile) { return pfile->line_table->depth == 1; } /* In errors.c */ extern int _cpp_begin_message (cpp_reader *, int, source_location, unsigned int); /* In macro.c */ extern void _cpp_free_definition (cpp_hashnode *); extern bool _cpp_create_definition (cpp_reader *, cpp_hashnode *); extern void _cpp_pop_context (cpp_reader *); extern void _cpp_push_text_context (cpp_reader *, cpp_hashnode *, const unsigned char *, size_t); extern bool _cpp_save_parameter (cpp_reader *, cpp_macro *, cpp_hashnode *); extern bool _cpp_arguments_ok (cpp_reader *, cpp_macro *, const cpp_hashnode *, unsigned int); extern const unsigned char *_cpp_builtin_macro_text (cpp_reader *, cpp_hashnode *); extern int _cpp_warn_if_unused_macro (cpp_reader *, cpp_hashnode *, void *); extern void _cpp_push_token_context (cpp_reader *, cpp_hashnode *, const cpp_token *, unsigned int); /* In identifiers.c */ extern void _cpp_init_hashtable (cpp_reader *, hash_table *); extern void _cpp_destroy_hashtable (cpp_reader *); /* In files.c */ typedef struct _cpp_file _cpp_file; extern _cpp_file *_cpp_find_file (cpp_reader *, const char *, cpp_dir *, bool, int); extern bool _cpp_find_failed (_cpp_file *); extern void _cpp_mark_file_once_only (cpp_reader *, struct _cpp_file *); extern void _cpp_fake_include (cpp_reader *, const char *); extern bool _cpp_stack_file (cpp_reader *, _cpp_file*, bool); extern bool _cpp_stack_include (cpp_reader *, const char *, int, enum include_type); extern int _cpp_compare_file_date (cpp_reader *, const char *, int); extern void _cpp_report_missing_guards (cpp_reader *); extern void _cpp_init_files (cpp_reader *); extern void _cpp_cleanup_files (cpp_reader *); extern void _cpp_pop_file_buffer (cpp_reader *, struct _cpp_file *); extern bool _cpp_save_file_entries (cpp_reader *pfile, FILE *f); extern bool _cpp_read_file_entries (cpp_reader *, FILE *); extern struct stat *_cpp_get_file_stat (_cpp_file *); /* In expr.c */ extern bool _cpp_parse_expr (cpp_reader *); extern struct op *_cpp_expand_op_stack (cpp_reader *); /* In lex.c */ extern void _cpp_process_line_notes (cpp_reader *, int); extern void _cpp_clean_line (cpp_reader *); extern bool _cpp_get_fresh_line (cpp_reader *); extern bool _cpp_skip_block_comment (cpp_reader *); extern cpp_token *_cpp_temp_token (cpp_reader *); extern const cpp_token *_cpp_lex_token (cpp_reader *); extern cpp_token *_cpp_lex_direct (cpp_reader *); extern int _cpp_equiv_tokens (const cpp_token *, const cpp_token *); extern void _cpp_init_tokenrun (tokenrun *, unsigned int); /* In init.c. */ extern void _cpp_maybe_push_include_file (cpp_reader *); /* In directives.c */ extern int _cpp_test_assertion (cpp_reader *, unsigned int *); extern int _cpp_handle_directive (cpp_reader *, int); extern void _cpp_define_builtin (cpp_reader *, const char *); extern char ** _cpp_save_pragma_names (cpp_reader *); extern void _cpp_restore_pragma_names (cpp_reader *, char **); extern int _cpp_do__Pragma (cpp_reader *); extern void _cpp_init_directives (cpp_reader *); extern void _cpp_init_internal_pragmas (cpp_reader *); extern void _cpp_do_file_change (cpp_reader *, enum lc_reason, const char *, unsigned int, unsigned int); extern void _cpp_pop_buffer (cpp_reader *); /* In directives.c */ struct _cpp_dir_only_callbacks { /* Called to print a block of lines. */ void (*print_lines) (int, const void *, size_t); void (*maybe_print_line) (source_location); }; extern void _cpp_preprocess_dir_only (cpp_reader *, const struct _cpp_dir_only_callbacks *); /* In traditional.c. */ extern bool _cpp_scan_out_logical_line (cpp_reader *, cpp_macro *); extern bool _cpp_read_logical_line_trad (cpp_reader *); extern void _cpp_overlay_buffer (cpp_reader *pfile, const unsigned char *, size_t); extern void _cpp_remove_overlay (cpp_reader *); extern bool _cpp_create_trad_definition (cpp_reader *, cpp_macro *); extern bool _cpp_expansions_different_trad (const cpp_macro *, const cpp_macro *); extern unsigned char *_cpp_copy_replacement_text (const cpp_macro *, unsigned char *); extern size_t _cpp_replacement_text_len (const cpp_macro *); /* In charset.c. */ /* The normalization state at this point in the sequence. It starts initialized to all zeros, and at the end 'level' is the normalization level of the sequence. */ struct normalize_state { /* The previous character. */ cppchar_t previous; /* The combining class of the previous character. */ unsigned char prev_class; /* The lowest normalization level so far. */ enum cpp_normalize_level level; }; #define INITIAL_NORMALIZE_STATE { 0, 0, normalized_KC } #define NORMALIZE_STATE_RESULT(st) ((st)->level) /* We saw a character that matches ISIDNUM(), update a normalize_state appropriately. */ #define NORMALIZE_STATE_UPDATE_IDNUM(st) \ ((st)->previous = 0, (st)->prev_class = 0) extern cppchar_t _cpp_valid_ucn (cpp_reader *, const unsigned char **, const unsigned char *, int, struct normalize_state *state); extern void _cpp_destroy_iconv (cpp_reader *); extern unsigned char *_cpp_convert_input (cpp_reader *, const char *, unsigned char *, size_t, size_t, off_t *); extern const char *_cpp_default_encoding (void); extern cpp_hashnode * _cpp_interpret_identifier (cpp_reader *pfile, const unsigned char *id, size_t len); /* Utility routines and macros. */ #define DSC(str) (const unsigned char *)str, sizeof str - 1 /* These are inline functions instead of macros so we can get type checking. */ static inline int ustrcmp (const unsigned char *, const unsigned char *); static inline int ustrncmp (const unsigned char *, const unsigned char *, size_t); static inline size_t ustrlen (const unsigned char *); static inline unsigned char *uxstrdup (const unsigned char *); static inline unsigned char *ustrchr (const unsigned char *, int); static inline int ufputs (const unsigned char *, FILE *); /* Use a const char for the second parameter since it is usually a literal. */ static inline int ustrcspn (const unsigned char *, const char *); static inline int ustrcmp (const unsigned char *s1, const unsigned char *s2) { return strcmp ((const char *)s1, (const char *)s2); } static inline int ustrncmp (const unsigned char *s1, const unsigned char *s2, size_t n) { return strncmp ((const char *)s1, (const char *)s2, n); } static inline int ustrcspn (const unsigned char *s1, const char *s2) { return strcspn ((const char *)s1, s2); } static inline size_t ustrlen (const unsigned char *s1) { return strlen ((const char *)s1); } static inline unsigned char * uxstrdup (const unsigned char *s1) { return (unsigned char *) xstrdup ((const char *)s1); } static inline unsigned char * ustrchr (const unsigned char *s1, int c) { return (unsigned char *) strchr ((const char *)s1, c); } static inline int ufputs (const unsigned char *s, FILE *f) { return fputs ((const char *)s, f); } #endif /* ! LIBCPP_INTERNAL_H */ nescc-1.3.4/libcpp/lex.c000066400000000000000000001341561177770303300150410ustar00rootroot00000000000000/* CPP Library - lexical analysis. Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. Contributed by Per Bothner, 1994-95. Based on CCCP program by Paul Rubin, June 1986 Adapted to ANSI C, Richard Stallman, Jan 1987 Broken out to separate file, Zack Weinberg, Mar 2000 This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "system.h" #include "cpplib.h" #include "internal.h" enum spell_type { SPELL_OPERATOR = 0, SPELL_IDENT, SPELL_LITERAL, SPELL_NONE }; struct token_spelling { enum spell_type category; const unsigned char *name; }; static const unsigned char *const digraph_spellings[] = { U"%:", U"%:%:", U"<:", U":>", U"<%", U"%>" }; #define OP(e, s) { SPELL_OPERATOR, U s }, #define TK(e, s) { SPELL_ ## s, U #e }, static const struct token_spelling token_spellings[N_TTYPES] = { TTYPE_TABLE }; #undef OP #undef TK #define TOKEN_SPELL(token) (token_spellings[(token)->type].category) #define TOKEN_NAME(token) (token_spellings[(token)->type].name) static void add_line_note (cpp_buffer *, const uchar *, unsigned int); static int skip_line_comment (cpp_reader *); static void skip_whitespace (cpp_reader *, cppchar_t); static void lex_string (cpp_reader *, cpp_token *, const uchar *); static void save_comment (cpp_reader *, cpp_token *, const uchar *, cppchar_t); static void create_literal (cpp_reader *, cpp_token *, const uchar *, unsigned int, enum cpp_ttype); static bool warn_in_comment (cpp_reader *, _cpp_line_note *); static int name_p (cpp_reader *, const cpp_string *); static tokenrun *next_tokenrun (tokenrun *); static _cpp_buff *new_buff (size_t); /* Utility routine: Compares, the token TOKEN to the NUL-terminated string STRING. TOKEN must be a CPP_NAME. Returns 1 for equal, 0 for unequal. */ int cpp_ideq (const cpp_token *token, const char *string) { if (token->type != CPP_NAME) return 0; return !ustrcmp (NODE_NAME (token->val.node), (const uchar *) string); } /* Record a note TYPE at byte POS into the current cleaned logical line. */ static void add_line_note (cpp_buffer *buffer, const uchar *pos, unsigned int type) { if (buffer->notes_used == buffer->notes_cap) { buffer->notes_cap = buffer->notes_cap * 2 + 200; buffer->notes = XRESIZEVEC (_cpp_line_note, buffer->notes, buffer->notes_cap); } buffer->notes[buffer->notes_used].pos = pos; buffer->notes[buffer->notes_used].type = type; buffer->notes_used++; } /* Returns with a logical line that contains no escaped newlines or trigraphs. This is a time-critical inner loop. */ void _cpp_clean_line (cpp_reader *pfile) { cpp_buffer *buffer; const uchar *s; uchar c, *d, *p; buffer = pfile->buffer; buffer->cur_note = buffer->notes_used = 0; buffer->cur = buffer->line_base = buffer->next_line; buffer->need_line = false; s = buffer->next_line - 1; if (!buffer->from_stage3) { const uchar *pbackslash = NULL; /* Short circuit for the common case of an un-escaped line with no trigraphs. The primary win here is by not writing any data back to memory until we have to. */ for (;;) { c = *++s; if (__builtin_expect (c == '\n', false) || __builtin_expect (c == '\r', false)) { d = (uchar *) s; if (__builtin_expect (s == buffer->rlimit, false)) goto done; /* DOS line ending? */ if (__builtin_expect (c == '\r', false) && s[1] == '\n') { s++; if (s == buffer->rlimit) goto done; } if (__builtin_expect (pbackslash == NULL, true)) goto done; /* Check for escaped newline. */ p = d; while (is_nvspace (p[-1])) p--; if (p - 1 != pbackslash) goto done; /* Have an escaped newline; process it and proceed to the slow path. */ add_line_note (buffer, p - 1, p != d ? ' ' : '\\'); d = p - 2; buffer->next_line = p - 1; break; } if (__builtin_expect (c == '\\', false)) pbackslash = s; else if (__builtin_expect (c == '?', false) && __builtin_expect (s[1] == '?', false) && _cpp_trigraph_map[s[2]]) { /* Have a trigraph. We may or may not have to convert it. Add a line note regardless, for -Wtrigraphs. */ add_line_note (buffer, s, s[2]); if (CPP_OPTION (pfile, trigraphs)) { /* We do, and that means we have to switch to the slow path. */ d = (uchar *) s; *d = _cpp_trigraph_map[s[2]]; s += 2; break; } } } for (;;) { c = *++s; *++d = c; if (c == '\n' || c == '\r') { /* Handle DOS line endings. */ if (c == '\r' && s != buffer->rlimit && s[1] == '\n') s++; if (s == buffer->rlimit) break; /* Escaped? */ p = d; while (p != buffer->next_line && is_nvspace (p[-1])) p--; if (p == buffer->next_line || p[-1] != '\\') break; add_line_note (buffer, p - 1, p != d ? ' ': '\\'); d = p - 2; buffer->next_line = p - 1; } else if (c == '?' && s[1] == '?' && _cpp_trigraph_map[s[2]]) { /* Add a note regardless, for the benefit of -Wtrigraphs. */ add_line_note (buffer, d, s[2]); if (CPP_OPTION (pfile, trigraphs)) { *d = _cpp_trigraph_map[s[2]]; s += 2; } } } } else { do s++; while (*s != '\n' && *s != '\r'); d = (uchar *) s; /* Handle DOS line endings. */ if (*s == '\r' && s != buffer->rlimit && s[1] == '\n') s++; } done: *d = '\n'; /* A sentinel note that should never be processed. */ add_line_note (buffer, d + 1, '\n'); buffer->next_line = s + 1; } /* Return true if the trigraph indicated by NOTE should be warned about in a comment. */ static bool warn_in_comment (cpp_reader *pfile, _cpp_line_note *note) { const uchar *p; /* Within comments we don't warn about trigraphs, unless the trigraph forms an escaped newline, as that may change behavior. */ if (note->type != '/') return false; /* If -trigraphs, then this was an escaped newline iff the next note is coincident. */ if (CPP_OPTION (pfile, trigraphs)) return note[1].pos == note->pos; /* Otherwise, see if this forms an escaped newline. */ p = note->pos + 3; while (is_nvspace (*p)) p++; /* There might have been escaped newlines between the trigraph and the newline we found. Hence the position test. */ return (*p == '\n' && p < note[1].pos); } /* Process the notes created by add_line_note as far as the current location. */ void _cpp_process_line_notes (cpp_reader *pfile, int in_comment) { cpp_buffer *buffer = pfile->buffer; for (;;) { _cpp_line_note *note = &buffer->notes[buffer->cur_note]; unsigned int col; if (note->pos > buffer->cur) break; buffer->cur_note++; col = CPP_BUF_COLUMN (buffer, note->pos + 1); if (note->type == '\\' || note->type == ' ') { if (note->type == ' ' && !in_comment) cpp_error_with_line (pfile, CPP_DL_WARNING, pfile->line_table->highest_line, col, "backslash and newline separated by space"); if (buffer->next_line > buffer->rlimit) { cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->line_table->highest_line, col, "backslash-newline at end of file"); /* Prevent "no newline at end of file" warning. */ buffer->next_line = buffer->rlimit; } buffer->line_base = note->pos; CPP_INCREMENT_LINE (pfile, 0); } else if (_cpp_trigraph_map[note->type]) { if (CPP_OPTION (pfile, warn_trigraphs) && (!in_comment || warn_in_comment (pfile, note))) { if (CPP_OPTION (pfile, trigraphs)) cpp_error_with_line (pfile, CPP_DL_WARNING, pfile->line_table->highest_line, col, "trigraph ??%c converted to %c", note->type, (int) _cpp_trigraph_map[note->type]); else { cpp_error_with_line (pfile, CPP_DL_WARNING, pfile->line_table->highest_line, col, "trigraph ??%c ignored, use -trigraphs to enable", note->type); } } } else abort (); } } /* Skip a C-style block comment. We find the end of the comment by seeing if an asterisk is before every '/' we encounter. Returns nonzero if comment terminated by EOF, zero otherwise. Buffer->cur points to the initial asterisk of the comment. */ bool _cpp_skip_block_comment (cpp_reader *pfile) { cpp_buffer *buffer = pfile->buffer; const uchar *cur = buffer->cur; uchar c; cur++; if (*cur == '/') cur++; for (;;) { /* People like decorating comments with '*', so check for '/' instead for efficiency. */ c = *cur++; if (c == '/') { if (cur[-2] == '*') break; /* Warn about potential nested comments, but not if the '/' comes immediately before the true comment delimiter. Don't bother to get it right across escaped newlines. */ if (CPP_OPTION (pfile, warn_comments) && cur[0] == '*' && cur[1] != '/') { buffer->cur = cur; cpp_error_with_line (pfile, CPP_DL_WARNING, pfile->line_table->highest_line, CPP_BUF_COL (buffer), "\"/*\" within comment"); } } else if (c == '\n') { unsigned int cols; buffer->cur = cur - 1; _cpp_process_line_notes (pfile, true); if (buffer->next_line >= buffer->rlimit) return true; _cpp_clean_line (pfile); cols = buffer->next_line - buffer->line_base; CPP_INCREMENT_LINE (pfile, cols); cur = buffer->cur; } } buffer->cur = cur; _cpp_process_line_notes (pfile, true); return false; } /* Skip a C++ line comment, leaving buffer->cur pointing to the terminating newline. Handles escaped newlines. Returns nonzero if a multiline comment. */ static int skip_line_comment (cpp_reader *pfile) { cpp_buffer *buffer = pfile->buffer; unsigned int orig_line = pfile->line_table->highest_line; while (*buffer->cur != '\n') buffer->cur++; _cpp_process_line_notes (pfile, true); return orig_line != pfile->line_table->highest_line; } /* Skips whitespace, saving the next non-whitespace character. */ static void skip_whitespace (cpp_reader *pfile, cppchar_t c) { cpp_buffer *buffer = pfile->buffer; bool saw_NUL = false; do { /* Horizontal space always OK. */ if (c == ' ' || c == '\t') ; /* Just \f \v or \0 left. */ else if (c == '\0') saw_NUL = true; else if (pfile->state.in_directive && CPP_PEDANTIC (pfile)) cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->line_table->highest_line, CPP_BUF_COL (buffer), "%s in preprocessing directive", c == '\f' ? "form feed" : "vertical tab"); c = *buffer->cur++; } /* We only want non-vertical space, i.e. ' ' \t \f \v \0. */ while (is_nvspace (c)); if (saw_NUL) cpp_error (pfile, CPP_DL_WARNING, "null character(s) ignored"); buffer->cur--; } /* See if the characters of a number token are valid in a name (no '.', '+' or '-'). */ static int name_p (cpp_reader *pfile, const cpp_string *string) { unsigned int i; for (i = 0; i < string->len; i++) if (!is_idchar (string->text[i])) return 0; return 1; } /* After parsing an identifier or other sequence, produce a warning about sequences not in NFC/NFKC. */ static void warn_about_normalization (cpp_reader *pfile, const cpp_token *token, const struct normalize_state *s) { if (CPP_OPTION (pfile, warn_normalize) < NORMALIZE_STATE_RESULT (s) && !pfile->state.skipping) { /* Make sure that the token is printed using UCNs, even if we'd otherwise happily print UTF-8. */ unsigned char *buf = XNEWVEC (unsigned char, cpp_token_len (token)); size_t sz; sz = cpp_spell_token (pfile, token, buf, false) - buf; if (NORMALIZE_STATE_RESULT (s) == normalized_C) cpp_error_with_line (pfile, CPP_DL_WARNING, token->src_loc, 0, "`%.*s' is not in NFKC", (int) sz, buf); else cpp_error_with_line (pfile, CPP_DL_WARNING, token->src_loc, 0, "`%.*s' is not in NFC", (int) sz, buf); } } /* Returns TRUE if the sequence starting at buffer->cur is invalid in an identifier. FIRST is TRUE if this starts an identifier. */ static bool forms_identifier_p (cpp_reader *pfile, int first, struct normalize_state *state) { cpp_buffer *buffer = pfile->buffer; if (*buffer->cur == '$') { if (!CPP_OPTION (pfile, dollars_in_ident)) return false; buffer->cur++; if (CPP_OPTION (pfile, warn_dollars) && !pfile->state.skipping) { CPP_OPTION (pfile, warn_dollars) = 0; cpp_error (pfile, CPP_DL_PEDWARN, "'$' in identifier or number"); } return true; } /* Is this a syntactically valid UCN? */ if (CPP_OPTION (pfile, extended_identifiers) && *buffer->cur == '\\' && (buffer->cur[1] == 'u' || buffer->cur[1] == 'U')) { buffer->cur += 2; if (_cpp_valid_ucn (pfile, &buffer->cur, buffer->rlimit, 1 + !first, state)) return true; buffer->cur -= 2; } return false; } /* Lex an identifier starting at BUFFER->CUR - 1. */ static cpp_hashnode * lex_identifier (cpp_reader *pfile, const uchar *base, bool starts_ucn, struct normalize_state *nst) { cpp_hashnode *result; const uchar *cur; unsigned int len; unsigned int hash = HT_HASHSTEP (0, *base); cur = pfile->buffer->cur; if (! starts_ucn) while (ISIDNUM (*cur)) { hash = HT_HASHSTEP (hash, *cur); cur++; } pfile->buffer->cur = cur; if (starts_ucn || forms_identifier_p (pfile, false, nst)) { /* Slower version for identifiers containing UCNs (or $). */ do { while (ISIDNUM (*pfile->buffer->cur)) { pfile->buffer->cur++; NORMALIZE_STATE_UPDATE_IDNUM (nst); } } while (forms_identifier_p (pfile, false, nst)); result = _cpp_interpret_identifier (pfile, base, pfile->buffer->cur - base); } else { len = cur - base; hash = HT_HASHFINISH (hash, len); result = (cpp_hashnode *) ht_lookup_with_hash (pfile->hash_table, base, len, hash, HT_ALLOC); } /* Rarely, identifiers require diagnostics when lexed. */ if (__builtin_expect ((result->flags & NODE_DIAGNOSTIC) && !pfile->state.skipping, 0)) { /* It is allowed to poison the same identifier twice. */ if ((result->flags & NODE_POISONED) && !pfile->state.poisoned_ok) cpp_error (pfile, CPP_DL_ERROR, "attempt to use poisoned \"%s\"", NODE_NAME (result)); /* Constraint 6.10.3.5: __VA_ARGS__ should only appear in the replacement list of a variadic macro. */ if (result == pfile->spec_nodes.n__VA_ARGS__ && !pfile->state.va_args_ok) cpp_error (pfile, CPP_DL_PEDWARN, "__VA_ARGS__ can only appear in the expansion" " of a C99 variadic macro"); } return result; } /* Lex a number to NUMBER starting at BUFFER->CUR - 1. */ static void lex_number (cpp_reader *pfile, cpp_string *number, struct normalize_state *nst) { const uchar *cur; const uchar *base; uchar *dest; base = pfile->buffer->cur - 1; do { cur = pfile->buffer->cur; /* N.B. ISIDNUM does not include $. */ while (ISIDNUM (*cur) || *cur == '.' || VALID_SIGN (*cur, cur[-1])) { cur++; NORMALIZE_STATE_UPDATE_IDNUM (nst); } pfile->buffer->cur = cur; } while (forms_identifier_p (pfile, false, nst)); number->len = cur - base; dest = _cpp_unaligned_alloc (pfile, number->len + 1); memcpy (dest, base, number->len); dest[number->len] = '\0'; number->text = dest; } /* Create a token of type TYPE with a literal spelling. */ static void create_literal (cpp_reader *pfile, cpp_token *token, const uchar *base, unsigned int len, enum cpp_ttype type) { uchar *dest = _cpp_unaligned_alloc (pfile, len + 1); memcpy (dest, base, len); dest[len] = '\0'; token->type = type; token->val.str.len = len; token->val.str.text = dest; } /* Lexes a string, character constant, or angle-bracketed header file name. The stored string contains the spelling, including opening quote and leading any leading 'L'. It returns the type of the literal, or CPP_OTHER if it was not properly terminated. The spelling is NUL-terminated, but it is not guaranteed that this is the first NUL since embedded NULs are preserved. */ static void lex_string (cpp_reader *pfile, cpp_token *token, const uchar *base) { bool saw_NUL = false; const uchar *cur; cppchar_t terminator; enum cpp_ttype type; cur = base; terminator = *cur++; if (terminator == 'L') terminator = *cur++; if (terminator == '\"') type = *base == 'L' ? CPP_WSTRING: CPP_STRING; else if (terminator == '\'') type = *base == 'L' ? CPP_WCHAR: CPP_CHAR; else terminator = '>', type = CPP_HEADER_NAME; for (;;) { cppchar_t c = *cur++; /* In #include-style directives, terminators are not escapable. */ if (c == '\\' && !pfile->state.angled_headers && *cur != '\n') cur++; else if (c == terminator) break; else if (c == '\n') { cur--; type = CPP_OTHER; break; } else if (c == '\0') saw_NUL = true; } if (saw_NUL && !pfile->state.skipping) cpp_error (pfile, CPP_DL_WARNING, "null character(s) preserved in literal"); if (type == CPP_OTHER && CPP_OPTION (pfile, lang) != CLK_ASM) cpp_error (pfile, CPP_DL_PEDWARN, "missing terminating %c character", (int) terminator); pfile->buffer->cur = cur; create_literal (pfile, token, base, cur - base, type); } /* The stored comment includes the comment start and any terminator. */ static void save_comment (cpp_reader *pfile, cpp_token *token, const unsigned char *from, cppchar_t type) { unsigned char *buffer; unsigned int len, clen; len = pfile->buffer->cur - from + 1; /* + 1 for the initial '/'. */ /* C++ comments probably (not definitely) have moved past a new line, which we don't want to save in the comment. */ if (is_vspace (pfile->buffer->cur[-1])) len--; /* If we are currently in a directive, then we need to store all C++ comments as C comments internally, and so we need to allocate a little extra space in that case. Note that the only time we encounter a directive here is when we are saving comments in a "#define". */ clen = (pfile->state.in_directive && type == '/') ? len + 2 : len; buffer = _cpp_unaligned_alloc (pfile, clen); token->type = CPP_COMMENT; token->val.str.len = clen; token->val.str.text = buffer; buffer[0] = '/'; memcpy (buffer + 1, from, len - 1); /* Finish conversion to a C comment, if necessary. */ if (pfile->state.in_directive && type == '/') { buffer[1] = '*'; buffer[clen - 2] = '*'; buffer[clen - 1] = '/'; } } /* Allocate COUNT tokens for RUN. */ void _cpp_init_tokenrun (tokenrun *run, unsigned int count) { run->base = XNEWVEC (cpp_token, count); run->limit = run->base + count; run->next = NULL; } /* Returns the next tokenrun, or creates one if there is none. */ static tokenrun * next_tokenrun (tokenrun *run) { if (run->next == NULL) { run->next = XNEW (tokenrun); run->next->prev = run; _cpp_init_tokenrun (run->next, 250); } return run->next; } /* Allocate a single token that is invalidated at the same time as the rest of the tokens on the line. Has its line and col set to the same as the last lexed token, so that diagnostics appear in the right place. */ cpp_token * _cpp_temp_token (cpp_reader *pfile) { cpp_token *old, *result; old = pfile->cur_token - 1; if (pfile->cur_token == pfile->cur_run->limit) { pfile->cur_run = next_tokenrun (pfile->cur_run); pfile->cur_token = pfile->cur_run->base; } result = pfile->cur_token++; result->src_loc = old->src_loc; return result; } /* Lex a token into RESULT (external interface). Takes care of issues like directive handling, token lookahead, multiple include optimization and skipping. */ const cpp_token * _cpp_lex_token (cpp_reader *pfile) { cpp_token *result; for (;;) { if (pfile->cur_token == pfile->cur_run->limit) { pfile->cur_run = next_tokenrun (pfile->cur_run); pfile->cur_token = pfile->cur_run->base; } /* We assume that the current token is somewhere in the current run. */ if (pfile->cur_token < pfile->cur_run->base || pfile->cur_token >= pfile->cur_run->limit) abort (); if (pfile->lookaheads) { pfile->lookaheads--; result = pfile->cur_token++; } else result = _cpp_lex_direct (pfile); if (result->flags & BOL) { /* Is this a directive. If _cpp_handle_directive returns false, it is an assembler #. */ if (result->type == CPP_HASH /* 6.10.3 p 11: Directives in a list of macro arguments gives undefined behavior. This implementation handles the directive as normal. */ && pfile->state.parsing_args != 1) { if (_cpp_handle_directive (pfile, result->flags & PREV_WHITE)) { if (pfile->directive_result.type == CPP_PADDING) continue; result = &pfile->directive_result; } } else if (pfile->state.in_deferred_pragma) result = &pfile->directive_result; if (pfile->cb.line_change && !pfile->state.skipping) pfile->cb.line_change (pfile, result, pfile->state.parsing_args); } /* We don't skip tokens in directives. */ if (pfile->state.in_directive || pfile->state.in_deferred_pragma) break; /* Outside a directive, invalidate controlling macros. At file EOF, _cpp_lex_direct takes care of popping the buffer, so we never get here and MI optimization works. */ pfile->mi_valid = false; if (!pfile->state.skipping || result->type == CPP_EOF) break; } return result; } /* Returns true if a fresh line has been loaded. */ bool _cpp_get_fresh_line (cpp_reader *pfile) { int return_at_eof; /* We can't get a new line until we leave the current directive. */ if (pfile->state.in_directive) return false; for (;;) { cpp_buffer *buffer = pfile->buffer; if (!buffer->need_line) return true; if (buffer->next_line < buffer->rlimit) { _cpp_clean_line (pfile); return true; } /* First, get out of parsing arguments state. */ if (pfile->state.parsing_args) return false; /* End of buffer. Non-empty files should end in a newline. */ if (buffer->buf != buffer->rlimit && buffer->next_line > buffer->rlimit && !buffer->from_stage3) { /* Clip to buffer size. */ buffer->next_line = buffer->rlimit; } return_at_eof = buffer->return_at_eof; _cpp_pop_buffer (pfile); if (pfile->buffer == NULL || return_at_eof) return false; } } #define IF_NEXT_IS(CHAR, THEN_TYPE, ELSE_TYPE) \ do \ { \ result->type = ELSE_TYPE; \ if (*buffer->cur == CHAR) \ buffer->cur++, result->type = THEN_TYPE; \ } \ while (0) /* Lex a token into pfile->cur_token, which is also incremented, to get diagnostics pointing to the correct location. Does not handle issues such as token lookahead, multiple-include optimization, directives, skipping etc. This function is only suitable for use by _cpp_lex_token, and in special cases like lex_expansion_token which doesn't care for any of these issues. When meeting a newline, returns CPP_EOF if parsing a directive, otherwise returns to the start of the token buffer if permissible. Returns the location of the lexed token. */ cpp_token * _cpp_lex_direct (cpp_reader *pfile) { cppchar_t c; cpp_buffer *buffer; const unsigned char *comment_start; cpp_token *result = pfile->cur_token++; fresh_line: result->flags = 0; buffer = pfile->buffer; if (buffer->need_line) { if (pfile->state.in_deferred_pragma) { result->type = CPP_PRAGMA_EOL; pfile->state.in_deferred_pragma = false; if (!pfile->state.pragma_allow_expansion) pfile->state.prevent_expansion--; return result; } if (!_cpp_get_fresh_line (pfile)) { result->type = CPP_EOF; if (!pfile->state.in_directive) { /* Tell the compiler the line number of the EOF token. */ result->src_loc = pfile->line_table->highest_line; result->flags = BOL; } return result; } if (!pfile->keep_tokens) { pfile->cur_run = &pfile->base_run; result = pfile->base_run.base; pfile->cur_token = result + 1; } result->flags = BOL; if (pfile->state.parsing_args == 2) result->flags |= PREV_WHITE; } buffer = pfile->buffer; update_tokens_line: result->src_loc = pfile->line_table->highest_line; skipped_white: if (buffer->cur >= buffer->notes[buffer->cur_note].pos && !pfile->overlaid_buffer) { _cpp_process_line_notes (pfile, false); result->src_loc = pfile->line_table->highest_line; } c = *buffer->cur++; LINEMAP_POSITION_FOR_COLUMN (result->src_loc, pfile->line_table, CPP_BUF_COLUMN (buffer, buffer->cur)); switch (c) { case ' ': case '\t': case '\f': case '\v': case '\0': result->flags |= PREV_WHITE; skip_whitespace (pfile, c); goto skipped_white; case '\n': if (buffer->cur < buffer->rlimit) CPP_INCREMENT_LINE (pfile, 0); buffer->need_line = true; goto fresh_line; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { struct normalize_state nst = INITIAL_NORMALIZE_STATE; result->type = CPP_NUMBER; lex_number (pfile, &result->val.str, &nst); warn_about_normalization (pfile, result, &nst); break; } case 'L': /* 'L' may introduce wide characters or strings. */ if (*buffer->cur == '\'' || *buffer->cur == '"') { lex_string (pfile, result, buffer->cur - 1); break; } /* Fall through. */ case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': result->type = CPP_NAME; { struct normalize_state nst = INITIAL_NORMALIZE_STATE; result->val.node = lex_identifier (pfile, buffer->cur - 1, false, &nst); warn_about_normalization (pfile, result, &nst); } /* Convert named operators to their proper types. */ if (result->val.node->flags & NODE_OPERATOR) { result->flags |= NAMED_OP; result->type = (enum cpp_ttype) result->val.node->directive_index; } break; case '\'': case '"': lex_string (pfile, result, buffer->cur - 1); break; case '/': /* A potential block or line comment. */ comment_start = buffer->cur; c = *buffer->cur; if (c == '*') { if (_cpp_skip_block_comment (pfile)) cpp_error (pfile, CPP_DL_ERROR, "unterminated comment"); } else if (c == '/' && (CPP_OPTION (pfile, cplusplus_comments) || cpp_in_system_header (pfile))) { /* Warn about comments only if pedantically GNUC89, and not in system headers. */ if (CPP_OPTION (pfile, lang) == CLK_GNUC89 && CPP_PEDANTIC (pfile) && ! buffer->warned_cplusplus_comments) { cpp_error (pfile, CPP_DL_PEDWARN, "C++ style comments are not allowed in ISO C90"); cpp_error (pfile, CPP_DL_PEDWARN, "(this will be reported only once per input file)"); buffer->warned_cplusplus_comments = 1; } if (skip_line_comment (pfile) && CPP_OPTION (pfile, warn_comments)) cpp_error (pfile, CPP_DL_WARNING, "multi-line comment"); } else if (c == '=') { buffer->cur++; result->type = CPP_DIV_EQ; break; } else { result->type = CPP_DIV; break; } if (!pfile->state.save_comments) { result->flags |= PREV_WHITE; goto update_tokens_line; } /* Save the comment as a token in its own right. */ save_comment (pfile, result, comment_start, c); break; case '<': if (pfile->state.angled_headers) { lex_string (pfile, result, buffer->cur - 1); break; } result->type = CPP_LESS; if (*buffer->cur == '=') buffer->cur++, result->type = CPP_LESS_EQ; else if (*buffer->cur == '-') buffer->cur++, result->type = CPP_FERED; else if (*buffer->cur == '<') { buffer->cur++; IF_NEXT_IS ('=', CPP_LSHIFT_EQ, CPP_LSHIFT); } else if (CPP_OPTION (pfile, digraphs)) { if (*buffer->cur == ':') { buffer->cur++; result->flags |= DIGRAPH; result->type = CPP_OPEN_SQUARE; } else if (*buffer->cur == '%') { buffer->cur++; result->flags |= DIGRAPH; result->type = CPP_OPEN_BRACE; } } break; case '>': result->type = CPP_GREATER; if (*buffer->cur == '=') buffer->cur++, result->type = CPP_GREATER_EQ; else if (*buffer->cur == '>') { buffer->cur++; IF_NEXT_IS ('=', CPP_RSHIFT_EQ, CPP_RSHIFT); } break; case '%': result->type = CPP_MOD; if (*buffer->cur == '=') buffer->cur++, result->type = CPP_MOD_EQ; else if (CPP_OPTION (pfile, digraphs)) { if (*buffer->cur == ':') { buffer->cur++; result->flags |= DIGRAPH; result->type = CPP_HASH; if (*buffer->cur == '%' && buffer->cur[1] == ':') buffer->cur += 2, result->type = CPP_PASTE; } else if (*buffer->cur == '>') { buffer->cur++; result->flags |= DIGRAPH; result->type = CPP_CLOSE_BRACE; } } break; case '.': result->type = CPP_DOT; if (ISDIGIT (*buffer->cur)) { struct normalize_state nst = INITIAL_NORMALIZE_STATE; result->type = CPP_NUMBER; lex_number (pfile, &result->val.str, &nst); warn_about_normalization (pfile, result, &nst); } else if (*buffer->cur == '.' && buffer->cur[1] == '.') buffer->cur += 2, result->type = CPP_ELLIPSIS; else if (*buffer->cur == '*' && CPP_OPTION (pfile, cplusplus)) buffer->cur++, result->type = CPP_DOT_STAR; break; case '+': result->type = CPP_PLUS; if (*buffer->cur == '+') buffer->cur++, result->type = CPP_PLUS_PLUS; else if (*buffer->cur == '=') buffer->cur++, result->type = CPP_PLUS_EQ; break; case '-': result->type = CPP_MINUS; if (*buffer->cur == '>') { buffer->cur++; result->type = CPP_DEREF; if (*buffer->cur == '*' && CPP_OPTION (pfile, cplusplus)) buffer->cur++, result->type = CPP_DEREF_STAR; } else if (*buffer->cur == '-') buffer->cur++, result->type = CPP_MINUS_MINUS; else if (*buffer->cur == '=') buffer->cur++, result->type = CPP_MINUS_EQ; break; case '&': result->type = CPP_AND; if (*buffer->cur == '&') buffer->cur++, result->type = CPP_AND_AND; else if (*buffer->cur == '=') buffer->cur++, result->type = CPP_AND_EQ; break; case '|': result->type = CPP_OR; if (*buffer->cur == '|') buffer->cur++, result->type = CPP_OR_OR; else if (*buffer->cur == '=') buffer->cur++, result->type = CPP_OR_EQ; break; case ':': result->type = CPP_COLON; if (*buffer->cur == ':' && CPP_OPTION (pfile, cplusplus)) buffer->cur++, result->type = CPP_SCOPE; else if (*buffer->cur == '>' && CPP_OPTION (pfile, digraphs)) { buffer->cur++; result->flags |= DIGRAPH; result->type = CPP_CLOSE_SQUARE; } break; case '*': IF_NEXT_IS ('=', CPP_MULT_EQ, CPP_MULT); break; case '=': IF_NEXT_IS ('=', CPP_EQ_EQ, CPP_EQ); break; case '!': IF_NEXT_IS ('=', CPP_NOT_EQ, CPP_NOT); break; case '^': IF_NEXT_IS ('=', CPP_XOR_EQ, CPP_XOR); break; case '#': IF_NEXT_IS ('#', CPP_PASTE, CPP_HASH); break; case '?': result->type = CPP_QUERY; break; case '~': result->type = CPP_COMPL; break; case ',': result->type = CPP_COMMA; break; case '(': result->type = CPP_OPEN_PAREN; break; case ')': result->type = CPP_CLOSE_PAREN; break; case '[': result->type = CPP_OPEN_SQUARE; break; case ']': result->type = CPP_CLOSE_SQUARE; break; case '{': result->type = CPP_OPEN_BRACE; break; case '}': result->type = CPP_CLOSE_BRACE; break; case ';': result->type = CPP_SEMICOLON; break; /* @ is a punctuator in Objective-C. */ case '@': result->type = CPP_ATSIGN; break; case '$': case '\\': { const uchar *base = --buffer->cur; struct normalize_state nst = INITIAL_NORMALIZE_STATE; if (forms_identifier_p (pfile, true, &nst)) { result->type = CPP_NAME; result->val.node = lex_identifier (pfile, base, true, &nst); warn_about_normalization (pfile, result, &nst); break; } buffer->cur++; } default: create_literal (pfile, result, buffer->cur - 1, 1, CPP_OTHER); break; } return result; } /* An upper bound on the number of bytes needed to spell TOKEN. Does not include preceding whitespace. */ unsigned int cpp_token_len (const cpp_token *token) { unsigned int len; switch (TOKEN_SPELL (token)) { default: len = 4; break; case SPELL_LITERAL: len = token->val.str.len; break; case SPELL_IDENT: len = NODE_LEN (token->val.node) * 10; break; } return len; } /* Parse UTF-8 out of NAMEP and place a \U escape in BUFFER. Return the number of bytes read out of NAME. (There are always 10 bytes written to BUFFER.) */ static size_t utf8_to_ucn (unsigned char *buffer, const unsigned char *name) { int j; int ucn_len = 0; int ucn_len_c; unsigned t; unsigned long utf32; /* Compute the length of the UTF-8 sequence. */ for (t = *name; t & 0x80; t <<= 1) ucn_len++; utf32 = *name & (0x7F >> ucn_len); for (ucn_len_c = 1; ucn_len_c < ucn_len; ucn_len_c++) { utf32 = (utf32 << 6) | (*++name & 0x3F); /* Ill-formed UTF-8. */ if ((*name & ~0x3F) != 0x80) abort (); } *buffer++ = '\\'; *buffer++ = 'U'; for (j = 7; j >= 0; j--) *buffer++ = "0123456789abcdef"[(utf32 >> (4 * j)) & 0xF]; return ucn_len; } /* Write the spelling of a token TOKEN to BUFFER. The buffer must already contain the enough space to hold the token's spelling. Returns a pointer to the character after the last character written. FORSTRING is true if this is to be the spelling after translation phase 1 (this is different for UCNs). FIXME: Would be nice if we didn't need the PFILE argument. */ unsigned char * cpp_spell_token (cpp_reader *pfile, const cpp_token *token, unsigned char *buffer, bool forstring) { switch (TOKEN_SPELL (token)) { case SPELL_OPERATOR: { const unsigned char *spelling; unsigned char c; if (token->flags & DIGRAPH) spelling = digraph_spellings[(int) token->type - (int) CPP_FIRST_DIGRAPH]; else if (token->flags & NAMED_OP) goto spell_ident; else spelling = TOKEN_NAME (token); while ((c = *spelling++) != '\0') *buffer++ = c; } break; spell_ident: case SPELL_IDENT: if (forstring) { memcpy (buffer, NODE_NAME (token->val.node), NODE_LEN (token->val.node)); buffer += NODE_LEN (token->val.node); } else { size_t i; const unsigned char * name = NODE_NAME (token->val.node); for (i = 0; i < NODE_LEN (token->val.node); i++) if (name[i] & ~0x7F) { i += utf8_to_ucn (buffer, name + i) - 1; buffer += 10; } else *buffer++ = NODE_NAME (token->val.node)[i]; } break; case SPELL_LITERAL: memcpy (buffer, token->val.str.text, token->val.str.len); buffer += token->val.str.len; break; case SPELL_NONE: cpp_error (pfile, CPP_DL_ICE, "unspellable token %s", TOKEN_NAME (token)); break; } return buffer; } /* Returns TOKEN spelt as a null-terminated string. The string is freed when the reader is destroyed. Useful for diagnostics. */ unsigned char * cpp_token_as_text (cpp_reader *pfile, const cpp_token *token) { unsigned int len = cpp_token_len (token) + 1; unsigned char *start = _cpp_unaligned_alloc (pfile, len), *end; end = cpp_spell_token (pfile, token, start, false); end[0] = '\0'; return start; } /* Used by C front ends, which really should move to using cpp_token_as_text. */ const char * cpp_type2name (enum cpp_ttype type) { return (const char *) token_spellings[type].name; } /* Writes the spelling of token to FP, without any preceding space. Separated from cpp_spell_token for efficiency - to avoid stdio double-buffering. */ void cpp_output_token (const cpp_token *token, FILE *fp) { switch (TOKEN_SPELL (token)) { case SPELL_OPERATOR: { const unsigned char *spelling; int c; if (token->flags & DIGRAPH) spelling = digraph_spellings[(int) token->type - (int) CPP_FIRST_DIGRAPH]; else if (token->flags & NAMED_OP) goto spell_ident; else spelling = TOKEN_NAME (token); c = *spelling; do putc (c, fp); while ((c = *++spelling) != '\0'); } break; spell_ident: case SPELL_IDENT: { size_t i; const unsigned char * name = NODE_NAME (token->val.node); for (i = 0; i < NODE_LEN (token->val.node); i++) if (name[i] & ~0x7F) { unsigned char buffer[10]; i += utf8_to_ucn (buffer, name + i) - 1; fwrite (buffer, 1, 10, fp); } else fputc (NODE_NAME (token->val.node)[i], fp); } break; case SPELL_LITERAL: fwrite (token->val.str.text, 1, token->val.str.len, fp); break; case SPELL_NONE: /* An error, most probably. */ break; } } /* Compare two tokens. */ int _cpp_equiv_tokens (const cpp_token *a, const cpp_token *b) { if (a->type == b->type && a->flags == b->flags) switch (TOKEN_SPELL (a)) { default: /* Keep compiler happy. */ case SPELL_OPERATOR: return 1; case SPELL_NONE: return (a->type != CPP_MACRO_ARG || a->val.arg_no == b->val.arg_no); case SPELL_IDENT: return a->val.node == b->val.node; case SPELL_LITERAL: return (a->val.str.len == b->val.str.len && !memcmp (a->val.str.text, b->val.str.text, a->val.str.len)); } return 0; } /* Returns nonzero if a space should be inserted to avoid an accidental token paste for output. For simplicity, it is conservative, and occasionally advises a space where one is not needed, e.g. "." and ".2". */ int cpp_avoid_paste (cpp_reader *pfile, const cpp_token *token1, const cpp_token *token2) { enum cpp_ttype a = token1->type, b = token2->type; cppchar_t c; if (token1->flags & NAMED_OP) a = CPP_NAME; if (token2->flags & NAMED_OP) b = CPP_NAME; c = EOF; if (token2->flags & DIGRAPH) c = digraph_spellings[(int) b - (int) CPP_FIRST_DIGRAPH][0]; else if (token_spellings[b].category == SPELL_OPERATOR) c = token_spellings[b].name[0]; /* Quickly get everything that can paste with an '='. */ if ((int) a <= (int) CPP_LAST_EQ && c == '=') return 1; switch (a) { case CPP_GREATER: return c == '>'; case CPP_LESS: return c == '<' || c == '%' || c == ':'; case CPP_PLUS: return c == '+'; case CPP_MINUS: return c == '-' || c == '>'; case CPP_DIV: return c == '/' || c == '*'; /* Comments. */ case CPP_MOD: return c == ':' || c == '>'; case CPP_AND: return c == '&'; case CPP_OR: return c == '|'; case CPP_COLON: return c == ':' || c == '>'; case CPP_DEREF: return c == '*'; case CPP_DOT: return c == '.' || c == '%' || b == CPP_NUMBER; case CPP_HASH: return c == '#' || c == '%'; /* Digraph form. */ case CPP_NAME: return ((b == CPP_NUMBER && name_p (pfile, &token2->val.str)) || b == CPP_NAME || b == CPP_CHAR || b == CPP_STRING); /* L */ case CPP_NUMBER: return (b == CPP_NUMBER || b == CPP_NAME || c == '.' || c == '+' || c == '-'); /* UCNs */ case CPP_OTHER: return ((token1->val.str.text[0] == '\\' && b == CPP_NAME) || (CPP_OPTION (pfile, objc) && token1->val.str.text[0] == '@' && (b == CPP_NAME || b == CPP_STRING))); default: break; } return 0; } /* Output all the remaining tokens on the current line, and a newline character, to FP. Leading whitespace is removed. If there are macros, special token padding is not performed. */ void cpp_output_line (cpp_reader *pfile, FILE *fp) { const cpp_token *token; token = cpp_get_token (pfile); while (token->type != CPP_EOF) { cpp_output_token (token, fp); token = cpp_get_token (pfile); if (token->flags & PREV_WHITE) putc (' ', fp); } putc ('\n', fp); } /* Memory buffers. Changing these three constants can have a dramatic effect on performance. The values here are reasonable defaults, but might be tuned. If you adjust them, be sure to test across a range of uses of cpplib, including heavy nested function-like macro expansion. Also check the change in peak memory usage (NJAMD is a good tool for this). */ #define MIN_BUFF_SIZE 8000 #define BUFF_SIZE_UPPER_BOUND(MIN_SIZE) (MIN_BUFF_SIZE + (MIN_SIZE) * 3 / 2) #define EXTENDED_BUFF_SIZE(BUFF, MIN_EXTRA) \ (MIN_EXTRA + ((BUFF)->limit - (BUFF)->cur) * 2) #if MIN_BUFF_SIZE > BUFF_SIZE_UPPER_BOUND (0) #error BUFF_SIZE_UPPER_BOUND must be at least as large as MIN_BUFF_SIZE! #endif /* Create a new allocation buffer. Place the control block at the end of the buffer, so that buffer overflows will cause immediate chaos. */ static _cpp_buff * new_buff (size_t len) { _cpp_buff *result; unsigned char *base; if (len < MIN_BUFF_SIZE) len = MIN_BUFF_SIZE; len = CPP_ALIGN (len); base = XNEWVEC (unsigned char, len + sizeof (_cpp_buff)); result = (_cpp_buff *) (base + len); result->base = base; result->cur = base; result->limit = base + len; result->next = NULL; return result; } /* Place a chain of unwanted allocation buffers on the free list. */ void _cpp_release_buff (cpp_reader *pfile, _cpp_buff *buff) { _cpp_buff *end = buff; while (end->next) end = end->next; end->next = pfile->free_buffs; pfile->free_buffs = buff; } /* Return a free buffer of size at least MIN_SIZE. */ _cpp_buff * _cpp_get_buff (cpp_reader *pfile, size_t min_size) { _cpp_buff *result, **p; for (p = &pfile->free_buffs;; p = &(*p)->next) { size_t size; if (*p == NULL) return new_buff (min_size); result = *p; size = result->limit - result->base; /* Return a buffer that's big enough, but don't waste one that's way too big. */ if (size >= min_size && size <= BUFF_SIZE_UPPER_BOUND (min_size)) break; } *p = result->next; result->next = NULL; result->cur = result->base; return result; } /* Creates a new buffer with enough space to hold the uncommitted remaining bytes of BUFF, and at least MIN_EXTRA more bytes. Copies the excess bytes to the new buffer. Chains the new buffer after BUFF, and returns the new buffer. */ _cpp_buff * _cpp_append_extend_buff (cpp_reader *pfile, _cpp_buff *buff, size_t min_extra) { size_t size = EXTENDED_BUFF_SIZE (buff, min_extra); _cpp_buff *new_buff = _cpp_get_buff (pfile, size); buff->next = new_buff; memcpy (new_buff->base, buff->cur, BUFF_ROOM (buff)); return new_buff; } /* Creates a new buffer with enough space to hold the uncommitted remaining bytes of the buffer pointed to by BUFF, and at least MIN_EXTRA more bytes. Copies the excess bytes to the new buffer. Chains the new buffer before the buffer pointed to by BUFF, and updates the pointer to point to the new buffer. */ void _cpp_extend_buff (cpp_reader *pfile, _cpp_buff **pbuff, size_t min_extra) { _cpp_buff *new_buff, *old_buff = *pbuff; size_t size = EXTENDED_BUFF_SIZE (old_buff, min_extra); new_buff = _cpp_get_buff (pfile, size); memcpy (new_buff->base, old_buff->cur, BUFF_ROOM (old_buff)); new_buff->next = old_buff; *pbuff = new_buff; } /* Free a chain of buffers starting at BUFF. */ void _cpp_free_buff (_cpp_buff *buff) { _cpp_buff *next; for (; buff; buff = next) { next = buff->next; free (buff->base); } } /* Allocate permanent, unaligned storage of length LEN. */ unsigned char * _cpp_unaligned_alloc (cpp_reader *pfile, size_t len) { _cpp_buff *buff = pfile->u_buff; unsigned char *result = buff->cur; if (len > (size_t) (buff->limit - result)) { buff = _cpp_get_buff (pfile, len); buff->next = pfile->u_buff; pfile->u_buff = buff; result = buff->cur; } buff->cur = result + len; return result; } /* Allocate permanent, unaligned storage of length LEN from a_buff. That buffer is used for growing allocations when saving macro replacement lists in a #define, and when parsing an answer to an assertion in #assert, #unassert or #if (and therefore possibly whilst expanding macros). It therefore must not be used by any code that they might call: specifically the lexer and the guts of the macro expander. All existing other uses clearly fit this restriction: storing registered pragmas during initialization. */ unsigned char * _cpp_aligned_alloc (cpp_reader *pfile, size_t len) { _cpp_buff *buff = pfile->a_buff; unsigned char *result = buff->cur; if (len > (size_t) (buff->limit - result)) { buff = _cpp_get_buff (pfile, len); buff->next = pfile->a_buff; pfile->a_buff = buff; result = buff->cur; } buff->cur = result + len; return result; } /* Say which field of TOK is in use. */ enum cpp_token_fld_kind cpp_token_val_index (cpp_token *tok) { switch (TOKEN_SPELL (tok)) { case SPELL_IDENT: return CPP_TOKEN_FLD_NODE; case SPELL_LITERAL: return CPP_TOKEN_FLD_STR; case SPELL_NONE: if (tok->type == CPP_MACRO_ARG) return CPP_TOKEN_FLD_ARG_NO; else if (tok->type == CPP_PADDING) return CPP_TOKEN_FLD_SOURCE; else if (tok->type == CPP_PRAGMA) return CPP_TOKEN_FLD_PRAGMA; /* else fall through */ default: return CPP_TOKEN_FLD_NONE; } } nescc-1.3.4/libcpp/line-map.c000066400000000000000000000236751177770303300157560ustar00rootroot00000000000000/* Map logical line numbers to (source file, line number) pairs. Copyright (C) 2001, 2003, 2004, 2007 Free Software Foundation, Inc. This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. In other words, you are welcome to use, share and improve this program. You are forbidden to forbid anyone else to use, share and improve what you give them. Help stamp out software-hoarding! */ #include "config.h" #include "system.h" #include "line-map.h" static void trace_include (const struct line_maps *, const struct line_map *); /* Initialize a line map set. */ void linemap_init (struct line_maps *set) { set->maps = NULL; set->allocated = 0; set->used = 0; set->last_listed = -1; set->trace_includes = false; set->depth = 0; set->cache = 0; set->highest_location = 0; set->highest_line = 0; set->max_column_hint = 0; } /* Check for and warn about line_maps entered but not exited. */ void linemap_check_files_exited (struct line_maps *set) { struct line_map *map; /* Depending upon whether we are handling preprocessed input or not, this can be a user error or an ICE. */ for (map = &set->maps[set->used - 1]; ! MAIN_FILE_P (map); map = INCLUDED_FROM (set, map)) fprintf (stderr, "line-map.c: file \"%s\" entered but not left\n", map->to_file); } /* Free a line map set. */ void linemap_free (struct line_maps *set) { if (set->maps) { linemap_check_files_exited (set); free (set->maps); } } /* Add a mapping of logical source line to physical source file and line number. The text pointed to by TO_FILE must have a lifetime at least as long as the final call to lookup_line (). An empty TO_FILE means standard input. If reason is LC_LEAVE, and TO_FILE is NULL, then TO_FILE, TO_LINE and SYSP are given their natural values considering the file we are returning to. FROM_LINE should be monotonic increasing across calls to this function. A call to this function can relocate the previous set of A call to this function can relocate the previous set of maps, so any stored line_map pointers should not be used. */ const struct line_map * linemap_add (struct line_maps *set, enum lc_reason reason, unsigned int sysp, const char *to_file, unsigned int to_line) { struct line_map *map; source_location start_location = set->highest_location + 1; if (set->used && start_location < set->maps[set->used - 1].start_location) abort (); if (set->used == set->allocated) { line_map_realloc reallocator = set->reallocator ? set->reallocator : xrealloc; set->allocated = 2 * set->allocated + 256; set->maps = (struct line_map *) (*reallocator) (set->maps, set->allocated * sizeof (struct line_map)); memset (&set->maps[set->used], 0, ((set->allocated - set->used) * sizeof (struct line_map))); } map = &set->maps[set->used]; if (to_file && *to_file == '\0') to_file = ""; /* If we don't keep our line maps consistent, we can easily segfault. Don't rely on the client to do it for us. */ if (set->depth == 0) reason = LC_ENTER; else if (reason == LC_LEAVE) { struct line_map *from; bool error; if (MAIN_FILE_P (map - 1)) { if (to_file == NULL) { set->depth--; return NULL; } error = true; reason = LC_RENAME; from = map - 1; } else { from = INCLUDED_FROM (set, map - 1); error = to_file && strcmp (from->to_file, to_file); } /* Depending upon whether we are handling preprocessed input or not, this can be a user error or an ICE. */ if (error) fprintf (stderr, "line-map.c: file \"%s\" left but not entered\n", to_file); /* A TO_FILE of NULL is special - we use the natural values. */ if (error || to_file == NULL) { to_file = from->to_file; to_line = SOURCE_LINE (from, from[1].start_location); sysp = from->sysp; } } map->reason = reason; map->sysp = sysp; map->start_location = start_location; map->to_file = to_file; map->to_line = to_line; set->cache = set->used++; map->column_bits = 0; set->highest_location = start_location; set->highest_line = start_location; set->max_column_hint = 0; if (reason == LC_ENTER) { map->included_from = set->depth == 0 ? -1 : (int) (set->used - 2); set->depth++; if (set->trace_includes) trace_include (set, map); } else if (reason == LC_RENAME) map->included_from = map[-1].included_from; else if (reason == LC_LEAVE) { set->depth--; map->included_from = INCLUDED_FROM (set, map - 1)->included_from; } return map; } source_location linemap_line_start (struct line_maps *set, unsigned int to_line, unsigned int max_column_hint) { struct line_map *map = &set->maps[set->used - 1]; source_location highest = set->highest_location; source_location r; unsigned int last_line = SOURCE_LINE (map, set->highest_line); int line_delta = to_line - last_line; bool add_map = false; if (line_delta < 0 || (line_delta > 10 && line_delta * map->column_bits > 1000) || (max_column_hint >= (1U << map->column_bits)) || (max_column_hint <= 80 && map->column_bits >= 10)) { add_map = true; } else max_column_hint = set->max_column_hint; if (add_map) { int column_bits; if (max_column_hint > 100000 || highest > 0xC0000000) { /* If the column number is ridiculous or we've allocated a huge number of source_locations, give up on column numbers. */ max_column_hint = 0; if (highest >0xF0000000) return 0; column_bits = 0; } else { column_bits = 7; while (max_column_hint >= (1U << column_bits)) column_bits++; max_column_hint = 1U << column_bits; } /* Allocate the new line_map. However, if the current map only has a single line we can sometimes just increase its column_bits instead. */ if (line_delta < 0 || last_line != map->to_line || SOURCE_COLUMN (map, highest) >= (1U << column_bits)) map = (struct line_map*) linemap_add (set, LC_RENAME, map->sysp, map->to_file, to_line); map->column_bits = column_bits; r = map->start_location + ((to_line - map->to_line) << column_bits); } else r = highest - SOURCE_COLUMN (map, highest) + (line_delta << map->column_bits); set->highest_line = r; if (r > set->highest_location) set->highest_location = r; set->max_column_hint = max_column_hint; return r; } source_location linemap_position_for_column (struct line_maps *set, unsigned int to_column) { source_location r = set->highest_line; if (to_column >= set->max_column_hint) { if (r >= 0xC000000 || to_column > 100000) { /* Running low on source_locations - disable column numbers. */ return r; } else { struct line_map *map = &set->maps[set->used - 1]; r = linemap_line_start (set, SOURCE_LINE (map, r), to_column + 50); } } r = r + to_column; if (r >= set->highest_location) set->highest_location = r; return r; } /* Given a logical line, returns the map from which the corresponding (source file, line) pair can be deduced. Since the set is built chronologically, the logical lines are monotonic increasing, and so the list is sorted and we can use a binary search. */ const struct line_map * linemap_lookup (struct line_maps *set, source_location line) { unsigned int md, mn, mx; const struct line_map *cached; mn = set->cache; mx = set->used; cached = &set->maps[mn]; /* We should get a segfault if no line_maps have been added yet. */ if (line >= cached->start_location) { if (mn + 1 == mx || line < cached[1].start_location) return cached; } else { mx = mn; mn = 0; } while (mx - mn > 1) { md = (mn + mx) / 2; if (set->maps[md].start_location > line) mx = md; else mn = md; } set->cache = mn; return &set->maps[mn]; } /* Print the file names and line numbers of the #include commands which led to the map MAP, if any, to stderr. Nothing is output if the most recently listed stack is the same as the current one. */ void linemap_print_containing_files (struct line_maps *set, const struct line_map *map) { if (MAIN_FILE_P (map) || set->last_listed == map->included_from) return; set->last_listed = map->included_from; map = INCLUDED_FROM (set, map); fprintf (stderr, _("In file included from %s:%u"), map->to_file, LAST_SOURCE_LINE (map)); while (! MAIN_FILE_P (map)) { map = INCLUDED_FROM (set, map); /* Translators note: this message is used in conjunction with "In file included from %s:%ld" and some other tricks. We want something like this: | In file included from sys/select.h:123, | from sys/types.h:234, | from userfile.c:31: | bits/select.h:45: with all the "from"s lined up. The trailing comma is at the beginning of this message, and the trailing colon is not translated. */ fprintf (stderr, _(",\n from %s:%u"), map->to_file, LAST_SOURCE_LINE (map)); } fputs (":\n", stderr); } /* Print an include trace, for e.g. the -H option of the preprocessor. */ static void trace_include (const struct line_maps *set, const struct line_map *map) { unsigned int i = set->depth; while (--i) putc ('.', stderr); fprintf (stderr, " %s\n", map->to_file); } nescc-1.3.4/libcpp/macro.c000066400000000000000000001536511177770303300153530ustar00rootroot00000000000000/* Part of CPP library. (Macro and #define handling.) Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. Written by Per Bothner, 1994. Based on CCCP program by Paul Rubin, June 1986 Adapted to ANSI C, Richard Stallman, Jan 1987 This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. In other words, you are welcome to use, share and improve this program. You are forbidden to forbid anyone else to use, share and improve what you give them. Help stamp out software-hoarding! */ #include "config.h" #include "system.h" #include "cpplib.h" #include "internal.h" typedef struct macro_arg macro_arg; struct macro_arg { const cpp_token **first; /* First token in unexpanded argument. */ const cpp_token **expanded; /* Macro-expanded argument. */ const cpp_token *stringified; /* Stringified argument. */ unsigned int count; /* # of tokens in argument. */ unsigned int expanded_count; /* # of tokens in expanded argument. */ }; /* Macro expansion. */ static int enter_macro_context (cpp_reader *, cpp_hashnode *); static int builtin_macro (cpp_reader *, cpp_hashnode *); static void push_ptoken_context (cpp_reader *, cpp_hashnode *, _cpp_buff *, const cpp_token **, unsigned int); static _cpp_buff *collect_args (cpp_reader *, const cpp_hashnode *); static cpp_context *next_context (cpp_reader *); static const cpp_token *padding_token (cpp_reader *, const cpp_token *); static void expand_arg (cpp_reader *, macro_arg *); static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int); static const cpp_token *stringify_arg (cpp_reader *, macro_arg *); static void paste_all_tokens (cpp_reader *, const cpp_token *); static bool paste_tokens (cpp_reader *, const cpp_token **, const cpp_token *); static void replace_args (cpp_reader *, cpp_hashnode *, cpp_macro *, macro_arg *); static _cpp_buff *funlike_invocation_p (cpp_reader *, cpp_hashnode *); static bool create_iso_definition (cpp_reader *, cpp_macro *); /* #define directive parsing and handling. */ static cpp_token *alloc_expansion_token (cpp_reader *, cpp_macro *); static cpp_token *lex_expansion_token (cpp_reader *, cpp_macro *); static bool warn_of_redefinition (cpp_reader *, const cpp_hashnode *, const cpp_macro *); static bool parse_params (cpp_reader *, cpp_macro *); static void check_trad_stringification (cpp_reader *, const cpp_macro *, const cpp_string *); /* Emits a warning if NODE is a macro defined in the main file that has not been used. */ int _cpp_warn_if_unused_macro (cpp_reader *pfile, cpp_hashnode *node, void *v ATTRIBUTE_UNUSED) { if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN)) { cpp_macro *macro = node->value.macro; if (!macro->used && MAIN_FILE_P (linemap_lookup (pfile->line_table, macro->line))) cpp_error_with_line (pfile, CPP_DL_WARNING, macro->line, 0, "macro \"%s\" is not used", NODE_NAME (node)); } return 1; } /* Allocates and returns a CPP_STRING token, containing TEXT of length LEN, after null-terminating it. TEXT must be in permanent storage. */ static const cpp_token * new_string_token (cpp_reader *pfile, unsigned char *text, unsigned int len) { cpp_token *token = _cpp_temp_token (pfile); text[len] = '\0'; token->type = CPP_STRING; token->val.str.len = len; token->val.str.text = text; token->flags = 0; return token; } static const char * const monthnames[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; /* Helper function for builtin_macro. Returns the text generated by a builtin macro. */ const uchar * _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node) { const struct line_map *map; const uchar *result = NULL; unsigned int number = 1; switch (node->value.builtin) { default: cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"", NODE_NAME (node)); break; case BT_TIMESTAMP: { cpp_buffer *pbuffer = cpp_get_buffer (pfile); if (pbuffer->timestamp == NULL) { /* Initialize timestamp value of the assotiated file. */ struct _cpp_file *file = cpp_get_file (pbuffer); if (file) { /* Generate __TIMESTAMP__ string, that represents the date and time of the last modification of the current source file. The string constant looks like "Sun Sep 16 01:03:52 1973". */ struct tm *tb = NULL; struct stat *st = _cpp_get_file_stat (file); if (st) tb = localtime (&st->st_mtime); if (tb) { char *str = asctime (tb); size_t len = strlen (str); unsigned char *buf = _cpp_unaligned_alloc (pfile, len + 2); buf[0] = '"'; strcpy ((char *) buf + 1, str); buf[len] = '"'; pbuffer->timestamp = buf; } else { cpp_errno (pfile, CPP_DL_WARNING, "could not determine file timestamp"); pbuffer->timestamp = U"\"??? ??? ?? ??:??:?? ????\""; } } } result = pbuffer->timestamp; } break; case BT_FILE: case BT_BASE_FILE: { unsigned int len; const char *name; uchar *buf; map = linemap_lookup (pfile->line_table, pfile->line_table->highest_line); if (node->value.builtin == BT_BASE_FILE) while (! MAIN_FILE_P (map)) map = INCLUDED_FROM (pfile->line_table, map); name = map->to_file; len = strlen (name); buf = _cpp_unaligned_alloc (pfile, len * 2 + 3); result = buf; *buf = '"'; buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len); *buf++ = '"'; *buf = '\0'; } break; case BT_INCLUDE_LEVEL: /* The line map depth counts the primary source as level 1, but historically __INCLUDE_DEPTH__ has called the primary source level 0. */ number = pfile->line_table->depth - 1; break; case BT_SPECLINE: map = &pfile->line_table->maps[pfile->line_table->used-1]; /* If __LINE__ is embedded in a macro, it must expand to the line of the macro's invocation, not its definition. Otherwise things like assert() will not work properly. */ if (CPP_OPTION (pfile, traditional)) number = pfile->line_table->highest_line; else number = pfile->cur_token[-1].src_loc; number = SOURCE_LINE (map, number); break; /* __STDC__ has the value 1 under normal circumstances. However, if (a) we are in a system header, (b) the option stdc_0_in_system_headers is true (set by target config), and (c) we are not in strictly conforming mode, then it has the value 0. (b) and (c) are already checked in cpp_init_builtins. */ case BT_STDC: if (cpp_in_system_header (pfile)) number = 0; else number = 1; break; case BT_DATE: case BT_TIME: if (pfile->date == NULL) { /* Allocate __DATE__ and __TIME__ strings from permanent storage. We only do this once, and don't generate them at init time, because time() and localtime() are very slow on some systems. */ time_t tt; struct tm *tb = NULL; /* (time_t) -1 is a legitimate value for "number of seconds since the Epoch", so we have to do a little dance to distinguish that from a genuine error. */ errno = 0; tt = time(NULL); if (tt != (time_t)-1 || errno == 0) tb = localtime (&tt); if (tb) { pfile->date = _cpp_unaligned_alloc (pfile, sizeof ("\"Oct 11 1347\"")); sprintf ((char *) pfile->date, "\"%s %2d %4d\"", monthnames[tb->tm_mon], tb->tm_mday, tb->tm_year + 1900); pfile->time = _cpp_unaligned_alloc (pfile, sizeof ("\"12:34:56\"")); sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"", tb->tm_hour, tb->tm_min, tb->tm_sec); } else { cpp_errno (pfile, CPP_DL_WARNING, "could not determine date and time"); pfile->date = U"\"??? ?? ????\""; pfile->time = U"\"??:??:??\""; } } if (node->value.builtin == BT_DATE) result = pfile->date; else result = pfile->time; break; case BT_COUNTER: if (CPP_OPTION (pfile, directives_only) && pfile->state.in_directive) cpp_error (pfile, CPP_DL_ERROR, "__COUNTER__ expanded inside directive with -fdirectives-only"); number = pfile->counter++; break; } if (result == NULL) { /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */ result = _cpp_unaligned_alloc (pfile, 21); sprintf ((char *) result, "%u", number); } return result; } /* Convert builtin macros like __FILE__ to a token and push it on the context stack. Also handles _Pragma, for which a new token may not be created. Returns 1 if it generates a new token context, 0 to return the token to the caller. */ static int builtin_macro (cpp_reader *pfile, cpp_hashnode *node) { const uchar *buf; size_t len; char *nbuf; if (node->value.builtin == BT_PRAGMA) { /* Don't interpret _Pragma within directives. The standard is not clear on this, but to me this makes most sense. */ if (pfile->state.in_directive) return 0; return _cpp_do__Pragma (pfile); } buf = _cpp_builtin_macro_text (pfile, node); len = ustrlen (buf); nbuf = (char *) alloca (len + 1); memcpy (nbuf, buf, len); nbuf[len]='\n'; cpp_push_buffer (pfile, (uchar *) nbuf, len, /* from_stage3 */ true); _cpp_clean_line (pfile); /* Set pfile->cur_token as required by _cpp_lex_direct. */ pfile->cur_token = _cpp_temp_token (pfile); _cpp_push_token_context (pfile, NULL, _cpp_lex_direct (pfile), 1); if (pfile->buffer->cur != pfile->buffer->rlimit) cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"", NODE_NAME (node)); _cpp_pop_buffer (pfile); return 1; } /* Copies SRC, of length LEN, to DEST, adding backslashes before all backslashes and double quotes. DEST must be of sufficient size. Returns a pointer to the end of the string. */ uchar * cpp_quote_string (uchar *dest, const uchar *src, unsigned int len) { while (len--) { uchar c = *src++; if (c == '\\' || c == '"') { *dest++ = '\\'; *dest++ = c; } else *dest++ = c; } return dest; } /* Convert a token sequence ARG to a single string token according to the rules of the ISO C #-operator. */ static const cpp_token * stringify_arg (cpp_reader *pfile, macro_arg *arg) { unsigned char *dest; unsigned int i, escape_it, backslash_count = 0; const cpp_token *source = NULL; size_t len; if (BUFF_ROOM (pfile->u_buff) < 3) _cpp_extend_buff (pfile, &pfile->u_buff, 3); dest = BUFF_FRONT (pfile->u_buff); *dest++ = '"'; /* Loop, reading in the argument's tokens. */ for (i = 0; i < arg->count; i++) { const cpp_token *token = arg->first[i]; if (token->type == CPP_PADDING) { if (source == NULL) source = token->val.source; continue; } escape_it = (token->type == CPP_STRING || token->type == CPP_WSTRING || token->type == CPP_CHAR || token->type == CPP_WCHAR); /* Room for each char being written in octal, initial space and final quote and NUL. */ len = cpp_token_len (token); if (escape_it) len *= 4; len += 3; if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len) { size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff); _cpp_extend_buff (pfile, &pfile->u_buff, len); dest = BUFF_FRONT (pfile->u_buff) + len_so_far; } /* Leading white space? */ if (dest - 1 != BUFF_FRONT (pfile->u_buff)) { if (source == NULL) source = token; if (source->flags & PREV_WHITE) *dest++ = ' '; } source = NULL; if (escape_it) { _cpp_buff *buff = _cpp_get_buff (pfile, len); unsigned char *buf = BUFF_FRONT (buff); len = cpp_spell_token (pfile, token, buf, true) - buf; dest = cpp_quote_string (dest, buf, len); _cpp_release_buff (pfile, buff); } else dest = cpp_spell_token (pfile, token, dest, true); if (token->type == CPP_OTHER && token->val.str.text[0] == '\\') backslash_count++; else backslash_count = 0; } /* Ignore the final \ of invalid string literals. */ if (backslash_count & 1) { cpp_error (pfile, CPP_DL_WARNING, "invalid string literal, ignoring final '\\'"); dest--; } /* Commit the memory, including NUL, and return the token. */ *dest++ = '"'; len = dest - BUFF_FRONT (pfile->u_buff); BUFF_FRONT (pfile->u_buff) = dest + 1; return new_string_token (pfile, dest - len, len); } /* Try to paste two tokens. On success, return nonzero. In any case, PLHS is updated to point to the pasted token, which is guaranteed to not have the PASTE_LEFT flag set. */ static bool paste_tokens (cpp_reader *pfile, const cpp_token **plhs, const cpp_token *rhs) { unsigned char *buf, *end, *lhsend; cpp_token *lhs; unsigned int len; len = cpp_token_len (*plhs) + cpp_token_len (rhs) + 1; buf = (unsigned char *) alloca (len); end = lhsend = cpp_spell_token (pfile, *plhs, buf, false); /* Avoid comment headers, since they are still processed in stage 3. It is simpler to insert a space here, rather than modifying the lexer to ignore comments in some circumstances. Simply returning false doesn't work, since we want to clear the PASTE_LEFT flag. */ if ((*plhs)->type == CPP_DIV && rhs->type != CPP_EQ) *end++ = ' '; /* In one obscure case we might see padding here. */ if (rhs->type != CPP_PADDING) end = cpp_spell_token (pfile, rhs, end, false); *end = '\n'; cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true); _cpp_clean_line (pfile); /* Set pfile->cur_token as required by _cpp_lex_direct. */ pfile->cur_token = _cpp_temp_token (pfile); lhs = _cpp_lex_direct (pfile); if (pfile->buffer->cur != pfile->buffer->rlimit) { source_location saved_loc = lhs->src_loc; _cpp_pop_buffer (pfile); _cpp_backup_tokens (pfile, 1); *lhsend = '\0'; /* We have to remove the PASTE_LEFT flag from the old lhs, but we want to keep the new location. */ *lhs = **plhs; *plhs = lhs; lhs->src_loc = saved_loc; lhs->flags &= ~PASTE_LEFT; /* Mandatory error for all apart from assembler. */ if (CPP_OPTION (pfile, lang) != CLK_ASM) cpp_error (pfile, CPP_DL_ERROR, "pasting \"%s\" and \"%s\" does not give a valid preprocessing token", buf, cpp_token_as_text (pfile, rhs)); return false; } *plhs = lhs; _cpp_pop_buffer (pfile); return true; } /* Handles an arbitrarily long sequence of ## operators, with initial operand LHS. This implementation is left-associative, non-recursive, and finishes a paste before handling succeeding ones. If a paste fails, we back up to the RHS of the failing ## operator before pushing the context containing the result of prior successful pastes, with the effect that the RHS appears in the output stream after the pasted LHS normally. */ static void paste_all_tokens (cpp_reader *pfile, const cpp_token *lhs) { const cpp_token *rhs; cpp_context *context = pfile->context; do { /* Take the token directly from the current context. We can do this, because we are in the replacement list of either an object-like macro, or a function-like macro with arguments inserted. In either case, the constraints to #define guarantee we have at least one more token. */ if (context->direct_p) rhs = FIRST (context).token++; else rhs = *FIRST (context).ptoken++; if (rhs->type == CPP_PADDING) { if (rhs->flags & PASTE_LEFT) abort (); } if (!paste_tokens (pfile, &lhs, rhs)) break; } while (rhs->flags & PASTE_LEFT); /* Put the resulting token in its own context. */ _cpp_push_token_context (pfile, NULL, lhs, 1); } /* Returns TRUE if the number of arguments ARGC supplied in an invocation of the MACRO referenced by NODE is valid. An empty invocation to a macro with no parameters should pass ARGC as zero. Note that MACRO cannot necessarily be deduced from NODE, in case NODE was redefined whilst collecting arguments. */ bool _cpp_arguments_ok (cpp_reader *pfile, cpp_macro *macro, const cpp_hashnode *node, unsigned int argc) { if (argc == macro->paramc) return true; if (argc < macro->paramc) { /* As an extension, a rest argument is allowed to not appear in the invocation at all. e.g. #define debug(format, args...) something debug("string"); This is exactly the same as if there had been an empty rest argument - debug("string", ). */ if (argc + 1 == macro->paramc && macro->variadic) { if (CPP_PEDANTIC (pfile) && ! macro->syshdr) cpp_error (pfile, CPP_DL_PEDWARN, "ISO C99 requires rest arguments to be used"); return true; } cpp_error (pfile, CPP_DL_ERROR, "macro \"%s\" requires %u arguments, but only %u given", NODE_NAME (node), macro->paramc, argc); } else cpp_error (pfile, CPP_DL_ERROR, "macro \"%s\" passed %u arguments, but takes just %u", NODE_NAME (node), argc, macro->paramc); return false; } /* Reads and returns the arguments to a function-like macro invocation. Assumes the opening parenthesis has been processed. If there is an error, emits an appropriate diagnostic and returns NULL. Each argument is terminated by a CPP_EOF token, for the future benefit of expand_arg(). */ static _cpp_buff * collect_args (cpp_reader *pfile, const cpp_hashnode *node) { _cpp_buff *buff, *base_buff; cpp_macro *macro; macro_arg *args, *arg; const cpp_token *token; unsigned int argc; macro = node->value.macro; if (macro->paramc) argc = macro->paramc; else argc = 1; buff = _cpp_get_buff (pfile, argc * (50 * sizeof (cpp_token *) + sizeof (macro_arg))); base_buff = buff; args = (macro_arg *) buff->base; memset (args, 0, argc * sizeof (macro_arg)); buff->cur = (unsigned char *) &args[argc]; arg = args, argc = 0; /* Collect the tokens making up each argument. We don't yet know how many arguments have been supplied, whether too many or too few. Hence the slightly bizarre usage of "argc" and "arg". */ do { unsigned int paren_depth = 0; unsigned int ntokens = 0; argc++; arg->first = (const cpp_token **) buff->cur; for (;;) { /* Require space for 2 new tokens (including a CPP_EOF). */ if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit) { buff = _cpp_append_extend_buff (pfile, buff, 1000 * sizeof (cpp_token *)); arg->first = (const cpp_token **) buff->cur; } token = cpp_get_token (pfile); if (token->type == CPP_PADDING) { /* Drop leading padding. */ if (ntokens == 0) continue; } else if (token->type == CPP_OPEN_PAREN) paren_depth++; else if (token->type == CPP_CLOSE_PAREN) { if (paren_depth-- == 0) break; } else if (token->type == CPP_COMMA) { /* A comma does not terminate an argument within parentheses or as part of a variable argument. */ if (paren_depth == 0 && ! (macro->variadic && argc == macro->paramc)) break; } else if (token->type == CPP_EOF || (token->type == CPP_HASH && token->flags & BOL)) break; arg->first[ntokens++] = token; } /* Drop trailing padding. */ while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING) ntokens--; arg->count = ntokens; arg->first[ntokens] = &pfile->eof; /* Terminate the argument. Excess arguments loop back and overwrite the final legitimate argument, before failing. */ if (argc <= macro->paramc) { buff->cur = (unsigned char *) &arg->first[ntokens + 1]; if (argc != macro->paramc) arg++; } } while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF); if (token->type == CPP_EOF) { /* We still need the CPP_EOF to end directives, and to end pre-expansion of a macro argument. Step back is not unconditional, since we don't want to return a CPP_EOF to our callers at the end of an -include-d file. */ if (pfile->context->prev || pfile->state.in_directive) _cpp_backup_tokens (pfile, 1); cpp_error (pfile, CPP_DL_ERROR, "unterminated argument list invoking macro \"%s\"", NODE_NAME (node)); } else { /* A single empty argument is counted as no argument. */ if (argc == 1 && macro->paramc == 0 && args[0].count == 0) argc = 0; if (_cpp_arguments_ok (pfile, macro, node, argc)) { /* GCC has special semantics for , ## b where b is a varargs parameter: we remove the comma if b was omitted entirely. If b was merely an empty argument, the comma is retained. If the macro takes just one (varargs) parameter, then we retain the comma only if we are standards conforming. If FIRST is NULL replace_args () swallows the comma. */ if (macro->variadic && (argc < macro->paramc || (argc == 1 && args[0].count == 0 && !CPP_OPTION (pfile, std)))) args[macro->paramc - 1].first = NULL; return base_buff; } } /* An error occurred. */ _cpp_release_buff (pfile, base_buff); return NULL; } /* Search for an opening parenthesis to the macro of NODE, in such a way that, if none is found, we don't lose the information in any intervening padding tokens. If we find the parenthesis, collect the arguments and return the buffer containing them. */ static _cpp_buff * funlike_invocation_p (cpp_reader *pfile, cpp_hashnode *node) { const cpp_token *token, *padding = NULL; for (;;) { token = cpp_get_token (pfile); if (token->type != CPP_PADDING) break; if (padding == NULL || (!(padding->flags & PREV_WHITE) && token->val.source == NULL)) padding = token; } if (token->type == CPP_OPEN_PAREN) { pfile->state.parsing_args = 2; return collect_args (pfile, node); } /* CPP_EOF can be the end of macro arguments, or the end of the file. We mustn't back up over the latter. Ugh. */ if (token->type != CPP_EOF || token == &pfile->eof) { /* Back up. We may have skipped padding, in which case backing up more than one token when expanding macros is in general too difficult. We re-insert it in its own context. */ _cpp_backup_tokens (pfile, 1); if (padding) _cpp_push_token_context (pfile, NULL, padding, 1); } return NULL; } /* Push the context of a macro with hash entry NODE onto the context stack. If we can successfully expand the macro, we push a context containing its yet-to-be-rescanned replacement list and return one. Otherwise, we don't push a context and return zero. */ static int enter_macro_context (cpp_reader *pfile, cpp_hashnode *node) { /* The presence of a macro invalidates a file's controlling macro. */ pfile->mi_valid = false; pfile->state.angled_headers = false; /* Handle standard macros. */ if (! (node->flags & NODE_BUILTIN)) { cpp_macro *macro = node->value.macro; if (macro->fun_like) { _cpp_buff *buff; pfile->state.prevent_expansion++; pfile->keep_tokens++; pfile->state.parsing_args = 1; buff = funlike_invocation_p (pfile, node); pfile->state.parsing_args = 0; pfile->keep_tokens--; pfile->state.prevent_expansion--; if (buff == NULL) { if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr) cpp_error (pfile, CPP_DL_WARNING, "function-like macro \"%s\" must be used with arguments in traditional C", NODE_NAME (node)); return 0; } if (macro->paramc > 0) replace_args (pfile, node, macro, (macro_arg *) buff->base); _cpp_release_buff (pfile, buff); } /* Disable the macro within its expansion. */ node->flags |= NODE_DISABLED; macro->used = 1; if (macro->paramc == 0) _cpp_push_token_context (pfile, node, macro->exp.tokens, macro->count); return 1; } /* Handle built-in macros and the _Pragma operator. */ return builtin_macro (pfile, node); } /* Replace the parameters in a function-like macro of NODE with the actual ARGS, and place the result in a newly pushed token context. Expand each argument before replacing, unless it is operated upon by the # or ## operators. */ static void replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro, macro_arg *args) { unsigned int i, total; const cpp_token *src, *limit; const cpp_token **dest, **first; macro_arg *arg; _cpp_buff *buff; /* First, fully macro-expand arguments, calculating the number of tokens in the final expansion as we go. The ordering of the if statements below is subtle; we must handle stringification before pasting. */ total = macro->count; limit = macro->exp.tokens + macro->count; for (src = macro->exp.tokens; src < limit; src++) if (src->type == CPP_MACRO_ARG) { /* Leading and trailing padding tokens. */ total += 2; /* We have an argument. If it is not being stringified or pasted it is macro-replaced before insertion. */ arg = &args[src->val.arg_no - 1]; if (src->flags & STRINGIFY_ARG) { if (!arg->stringified) arg->stringified = stringify_arg (pfile, arg); } else if ((src->flags & PASTE_LEFT) || (src > macro->exp.tokens && (src[-1].flags & PASTE_LEFT))) total += arg->count - 1; else { if (!arg->expanded) expand_arg (pfile, arg); total += arg->expanded_count - 1; } } /* Now allocate space for the expansion, copy the tokens and replace the arguments. */ buff = _cpp_get_buff (pfile, total * sizeof (cpp_token *)); first = (const cpp_token **) buff->base; dest = first; for (src = macro->exp.tokens; src < limit; src++) { unsigned int count; const cpp_token **from, **paste_flag; if (src->type != CPP_MACRO_ARG) { *dest++ = src; continue; } paste_flag = 0; arg = &args[src->val.arg_no - 1]; if (src->flags & STRINGIFY_ARG) count = 1, from = &arg->stringified; else if (src->flags & PASTE_LEFT) count = arg->count, from = arg->first; else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT)) { count = arg->count, from = arg->first; if (dest != first) { if (dest[-1]->type == CPP_COMMA && macro->variadic && src->val.arg_no == macro->paramc) { /* Swallow a pasted comma if from == NULL, otherwise drop the paste flag. */ if (from == NULL) dest--; else paste_flag = dest - 1; } /* Remove the paste flag if the RHS is a placemarker. */ else if (count == 0) paste_flag = dest - 1; } } else count = arg->expanded_count, from = arg->expanded; /* Padding on the left of an argument (unless RHS of ##). */ if ((!pfile->state.in_directive || pfile->state.directive_wants_padding) && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT)) *dest++ = padding_token (pfile, src); if (count) { memcpy (dest, from, count * sizeof (cpp_token *)); dest += count; /* With a non-empty argument on the LHS of ##, the last token should be flagged PASTE_LEFT. */ if (src->flags & PASTE_LEFT) paste_flag = dest - 1; } /* Avoid paste on RHS (even case count == 0). */ if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT)) *dest++ = &pfile->avoid_paste; /* Add a new paste flag, or remove an unwanted one. */ if (paste_flag) { cpp_token *token = _cpp_temp_token (pfile); token->type = (*paste_flag)->type; token->val = (*paste_flag)->val; if (src->flags & PASTE_LEFT) token->flags = (*paste_flag)->flags | PASTE_LEFT; else token->flags = (*paste_flag)->flags & ~PASTE_LEFT; *paste_flag = token; } } /* Free the expanded arguments. */ for (i = 0; i < macro->paramc; i++) if (args[i].expanded) free (args[i].expanded); push_ptoken_context (pfile, node, buff, first, dest - first); } /* Return a special padding token, with padding inherited from SOURCE. */ static const cpp_token * padding_token (cpp_reader *pfile, const cpp_token *source) { cpp_token *result = _cpp_temp_token (pfile); result->type = CPP_PADDING; /* Data in GCed data structures cannot be made const so far, so we need a cast here. */ result->val.source = (cpp_token *) source; result->flags = 0; return result; } /* Get a new uninitialized context. Create a new one if we cannot re-use an old one. */ static cpp_context * next_context (cpp_reader *pfile) { cpp_context *result = pfile->context->next; if (result == 0) { result = XNEW (cpp_context); result->prev = pfile->context; result->next = 0; pfile->context->next = result; } pfile->context = result; return result; } /* Push a list of pointers to tokens. */ static void push_ptoken_context (cpp_reader *pfile, cpp_hashnode *macro, _cpp_buff *buff, const cpp_token **first, unsigned int count) { cpp_context *context = next_context (pfile); context->direct_p = false; context->macro = macro; context->buff = buff; FIRST (context).ptoken = first; LAST (context).ptoken = first + count; } /* Push a list of tokens. */ void _cpp_push_token_context (cpp_reader *pfile, cpp_hashnode *macro, const cpp_token *first, unsigned int count) { cpp_context *context = next_context (pfile); context->direct_p = true; context->macro = macro; context->buff = NULL; FIRST (context).token = first; LAST (context).token = first + count; } /* Push a traditional macro's replacement text. */ void _cpp_push_text_context (cpp_reader *pfile, cpp_hashnode *macro, const uchar *start, size_t len) { cpp_context *context = next_context (pfile); context->direct_p = true; context->macro = macro; context->buff = NULL; CUR (context) = start; RLIMIT (context) = start + len; macro->flags |= NODE_DISABLED; } /* Expand an argument ARG before replacing parameters in a function-like macro. This works by pushing a context with the argument's tokens, and then expanding that into a temporary buffer as if it were a normal part of the token stream. collect_args() has terminated the argument's tokens with a CPP_EOF so that we know when we have fully expanded the argument. */ static void expand_arg (cpp_reader *pfile, macro_arg *arg) { unsigned int capacity; bool saved_warn_trad; if (arg->count == 0) return; /* Don't warn about funlike macros when pre-expanding. */ saved_warn_trad = CPP_WTRADITIONAL (pfile); CPP_WTRADITIONAL (pfile) = 0; /* Loop, reading in the arguments. */ capacity = 256; arg->expanded = XNEWVEC (const cpp_token *, capacity); push_ptoken_context (pfile, NULL, NULL, arg->first, arg->count + 1); for (;;) { const cpp_token *token; if (arg->expanded_count + 1 >= capacity) { capacity *= 2; arg->expanded = XRESIZEVEC (const cpp_token *, arg->expanded, capacity); } token = cpp_get_token (pfile); if (token->type == CPP_EOF) break; arg->expanded[arg->expanded_count++] = token; } _cpp_pop_context (pfile); CPP_WTRADITIONAL (pfile) = saved_warn_trad; } /* Pop the current context off the stack, re-enabling the macro if the context represented a macro's replacement list. The context structure is not freed so that we can re-use it later. */ void _cpp_pop_context (cpp_reader *pfile) { cpp_context *context = pfile->context; if (context->macro) context->macro->flags &= ~NODE_DISABLED; if (context->buff) _cpp_release_buff (pfile, context->buff); pfile->context = context->prev; } /* External routine to get a token. Also used nearly everywhere internally, except for places where we know we can safely call _cpp_lex_token directly, such as lexing a directive name. Macro expansions and directives are transparently handled, including entering included files. Thus tokens are post-macro expansion, and after any intervening directives. External callers see CPP_EOF only at EOF. Internal callers also see it when meeting a directive inside a macro call, when at the end of a directive and state.in_directive is still 1, and at the end of argument pre-expansion. */ const cpp_token * cpp_get_token (cpp_reader *pfile) { const cpp_token *result; bool can_set = pfile->set_invocation_location; pfile->set_invocation_location = false; for (;;) { cpp_hashnode *node; cpp_context *context = pfile->context; /* Context->prev == 0 <=> base context. */ if (!context->prev) result = _cpp_lex_token (pfile); else if (FIRST (context).token != LAST (context).token) { if (context->direct_p) result = FIRST (context).token++; else result = *FIRST (context).ptoken++; if (result->flags & PASTE_LEFT) { paste_all_tokens (pfile, result); if (pfile->state.in_directive) continue; return padding_token (pfile, result); } } else { _cpp_pop_context (pfile); if (pfile->state.in_directive) continue; return &pfile->avoid_paste; } if (pfile->state.in_directive && result->type == CPP_COMMENT) continue; if (result->type != CPP_NAME) break; node = result->val.node; if (node->type != NT_MACRO || (result->flags & NO_EXPAND)) break; if (!(node->flags & NODE_DISABLED)) { /* If not in a macro context, and we're going to start an expansion, record the location. */ if (can_set && !context->macro) pfile->invocation_location = result->src_loc; if (!pfile->state.prevent_expansion && enter_macro_context (pfile, node)) { if (pfile->state.in_directive) continue; return padding_token (pfile, result); } } else { /* Flag this token as always unexpandable. FIXME: move this to collect_args()?. */ cpp_token *t = _cpp_temp_token (pfile); t->type = result->type; t->flags = result->flags | NO_EXPAND; t->val = result->val; result = t; } break; } return result; } /* Like cpp_get_token, but also returns a location separate from the one provided by the returned token. LOC is an out parameter; *LOC is set to the location "as expected by the user". This matters when a token results from macro expansion -- the token's location will indicate where the macro is defined, but *LOC will be the location of the start of the expansion. */ const cpp_token * cpp_get_token_with_location (cpp_reader *pfile, source_location *loc) { const cpp_token *result; pfile->set_invocation_location = true; result = cpp_get_token (pfile); if (pfile->context->macro) *loc = pfile->invocation_location; else *loc = result->src_loc; return result; } /* Returns true if we're expanding an object-like macro that was defined in a system header. Just checks the macro at the top of the stack. Used for diagnostic suppression. */ int cpp_sys_macro_p (cpp_reader *pfile) { cpp_hashnode *node = pfile->context->macro; return node && node->value.macro && node->value.macro->syshdr; } /* Read each token in, until end of the current file. Directives are transparently processed. */ void cpp_scan_nooutput (cpp_reader *pfile) { /* Request a CPP_EOF token at the end of this file, rather than transparently continuing with the including file. */ pfile->buffer->return_at_eof = true; pfile->state.discarding_output++; pfile->state.prevent_expansion++; if (CPP_OPTION (pfile, traditional)) while (_cpp_read_logical_line_trad (pfile)) ; else while (cpp_get_token (pfile)->type != CPP_EOF) ; pfile->state.discarding_output--; pfile->state.prevent_expansion--; } /* Step back one (or more) tokens. Can only step back more than 1 if they are from the lexer, and not from macro expansion. */ void _cpp_backup_tokens (cpp_reader *pfile, unsigned int count) { if (pfile->context->prev == NULL) { pfile->lookaheads += count; while (count--) { pfile->cur_token--; if (pfile->cur_token == pfile->cur_run->base /* Possible with -fpreprocessed and no leading #line. */ && pfile->cur_run->prev != NULL) { pfile->cur_run = pfile->cur_run->prev; pfile->cur_token = pfile->cur_run->limit; } } } else { if (count != 1) abort (); if (pfile->context->direct_p) FIRST (pfile->context).token--; else FIRST (pfile->context).ptoken--; } } /* #define directive parsing and handling. */ /* Returns nonzero if a macro redefinition warning is required. */ static bool warn_of_redefinition (cpp_reader *pfile, const cpp_hashnode *node, const cpp_macro *macro2) { const cpp_macro *macro1; unsigned int i; /* Some redefinitions need to be warned about regardless. */ if (node->flags & NODE_WARN) return true; /* Redefinition of a macro is allowed if and only if the old and new definitions are the same. (6.10.3 paragraph 2). */ macro1 = node->value.macro; /* Don't check count here as it can be different in valid traditional redefinitions with just whitespace differences. */ if (macro1->paramc != macro2->paramc || macro1->fun_like != macro2->fun_like || macro1->variadic != macro2->variadic) return true; /* Check parameter spellings. */ for (i = 0; i < macro1->paramc; i++) if (macro1->params[i] != macro2->params[i]) return true; /* Check the replacement text or tokens. */ if (CPP_OPTION (pfile, traditional)) return _cpp_expansions_different_trad (macro1, macro2); if (macro1->count != macro2->count) return true; for (i = 0; i < macro1->count; i++) if (!_cpp_equiv_tokens (¯o1->exp.tokens[i], ¯o2->exp.tokens[i])) return true; return false; } /* Free the definition of hashnode H. */ void _cpp_free_definition (cpp_hashnode *h) { /* Macros and assertions no longer have anything to free. */ h->type = NT_VOID; /* Clear builtin flag in case of redefinition. */ h->flags &= ~(NODE_BUILTIN | NODE_DISABLED); } /* Save parameter NODE to the parameter list of macro MACRO. Returns zero on success, nonzero if the parameter is a duplicate. */ bool _cpp_save_parameter (cpp_reader *pfile, cpp_macro *macro, cpp_hashnode *node) { unsigned int len; /* Constraint 6.10.3.6 - duplicate parameter names. */ if (node->flags & NODE_MACRO_ARG) { cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"", NODE_NAME (node)); return true; } if (BUFF_ROOM (pfile->a_buff) < (macro->paramc + 1) * sizeof (cpp_hashnode *)) _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *)); ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node; node->flags |= NODE_MACRO_ARG; len = macro->paramc * sizeof (union _cpp_hashnode_value); if (len > pfile->macro_buffer_len) { pfile->macro_buffer = XRESIZEVEC (unsigned char, pfile->macro_buffer, len); pfile->macro_buffer_len = len; } ((union _cpp_hashnode_value *) pfile->macro_buffer)[macro->paramc - 1] = node->value; node->value.arg_index = macro->paramc; return false; } /* Check the syntax of the parameters in a MACRO definition. Returns false if an error occurs. */ static bool parse_params (cpp_reader *pfile, cpp_macro *macro) { unsigned int prev_ident = 0; for (;;) { const cpp_token *token = _cpp_lex_token (pfile); switch (token->type) { default: /* Allow/ignore comments in parameter lists if we are preserving comments in macro expansions. */ if (token->type == CPP_COMMENT && ! CPP_OPTION (pfile, discard_comments_in_macro_exp)) continue; cpp_error (pfile, CPP_DL_ERROR, "\"%s\" may not appear in macro parameter list", cpp_token_as_text (pfile, token)); return false; case CPP_NAME: if (prev_ident) { cpp_error (pfile, CPP_DL_ERROR, "macro parameters must be comma-separated"); return false; } prev_ident = 1; if (_cpp_save_parameter (pfile, macro, token->val.node)) return false; continue; case CPP_CLOSE_PAREN: if (prev_ident || macro->paramc == 0) return true; /* Fall through to pick up the error. */ case CPP_COMMA: if (!prev_ident) { cpp_error (pfile, CPP_DL_ERROR, "parameter name missing"); return false; } prev_ident = 0; continue; case CPP_ELLIPSIS: macro->variadic = 1; if (!prev_ident) { _cpp_save_parameter (pfile, macro, pfile->spec_nodes.n__VA_ARGS__); pfile->state.va_args_ok = 1; if (! CPP_OPTION (pfile, c99) && CPP_OPTION (pfile, pedantic) && CPP_OPTION (pfile, warn_variadic_macros)) cpp_error (pfile, CPP_DL_PEDWARN, "anonymous variadic macros were introduced in C99"); } else if (CPP_OPTION (pfile, pedantic) && CPP_OPTION (pfile, warn_variadic_macros)) cpp_error (pfile, CPP_DL_PEDWARN, "ISO C does not permit named variadic macros"); /* We're at the end, and just expect a closing parenthesis. */ token = _cpp_lex_token (pfile); if (token->type == CPP_CLOSE_PAREN) return true; /* Fall through. */ case CPP_EOF: cpp_error (pfile, CPP_DL_ERROR, "missing ')' in macro parameter list"); return false; } } } /* Allocate room for a token from a macro's replacement list. */ static cpp_token * alloc_expansion_token (cpp_reader *pfile, cpp_macro *macro) { if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token)) _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token)); return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++]; } /* Lex a token from the expansion of MACRO, but mark parameters as we find them and warn of traditional stringification. */ static cpp_token * lex_expansion_token (cpp_reader *pfile, cpp_macro *macro) { cpp_token *token, *saved_cur_token; saved_cur_token = pfile->cur_token; pfile->cur_token = alloc_expansion_token (pfile, macro); token = _cpp_lex_direct (pfile); pfile->cur_token = saved_cur_token; /* Is this a parameter? */ if (token->type == CPP_NAME && (token->val.node->flags & NODE_MACRO_ARG) != 0) { token->type = CPP_MACRO_ARG; token->val.arg_no = token->val.node->value.arg_index; } else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0 && (token->type == CPP_STRING || token->type == CPP_CHAR)) check_trad_stringification (pfile, macro, &token->val.str); return token; } static bool create_iso_definition (cpp_reader *pfile, cpp_macro *macro) { cpp_token *token; const cpp_token *ctoken; bool following_paste_op = false; const char *paste_op_error_msg = N_("'##' cannot appear at either end of a macro expansion"); /* Get the first token of the expansion (or the '(' of a function-like macro). */ ctoken = _cpp_lex_token (pfile); if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE)) { bool ok = parse_params (pfile, macro); macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff); if (!ok) return false; /* Success. Commit or allocate the parameter array. */ if (pfile->hash_table->alloc_subobject) { cpp_hashnode **params = (cpp_hashnode **) pfile->hash_table->alloc_subobject (sizeof (cpp_hashnode *) * macro->paramc); memcpy (params, macro->params, sizeof (cpp_hashnode *) * macro->paramc); macro->params = params; } else BUFF_FRONT (pfile->a_buff) = (uchar *) ¯o->params[macro->paramc]; macro->fun_like = 1; } else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE)) { /* While ISO C99 requires whitespace before replacement text in a macro definition, ISO C90 with TC1 allows there characters from the basic source character set. */ if (CPP_OPTION (pfile, c99)) cpp_error (pfile, CPP_DL_PEDWARN, "ISO C99 requires whitespace after the macro name"); else { int warntype = CPP_DL_WARNING; switch (ctoken->type) { case CPP_ATSIGN: case CPP_AT_NAME: case CPP_OBJC_STRING: /* '@' is not in basic character set. */ warntype = CPP_DL_PEDWARN; break; case CPP_OTHER: /* Basic character set sans letters, digits and _. */ if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~", ctoken->val.str.text[0]) == NULL) warntype = CPP_DL_PEDWARN; break; default: /* All other tokens start with a character from basic character set. */ break; } cpp_error (pfile, warntype, "missing whitespace after the macro name"); } } if (macro->fun_like) token = lex_expansion_token (pfile, macro); else { token = alloc_expansion_token (pfile, macro); *token = *ctoken; } for (;;) { /* Check the stringifying # constraint 6.10.3.2.1 of function-like macros when lexing the subsequent token. */ if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like) { if (token->type == CPP_MACRO_ARG) { token->flags &= ~PREV_WHITE; token->flags |= STRINGIFY_ARG; token->flags |= token[-1].flags & PREV_WHITE; token[-1] = token[0]; macro->count--; } /* Let assembler get away with murder. */ else if (CPP_OPTION (pfile, lang) != CLK_ASM) { cpp_error (pfile, CPP_DL_ERROR, "'#' is not followed by a macro parameter"); return false; } } if (token->type == CPP_EOF) { /* Paste operator constraint 6.10.3.3.1: Token-paste ##, can appear in both object-like and function-like macros, but not at the end. */ if (following_paste_op) { cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg); return false; } break; } /* Paste operator constraint 6.10.3.3.1. */ if (token->type == CPP_PASTE) { /* Token-paste ##, can appear in both object-like and function-like macros, but not at the beginning. */ if (macro->count == 1) { cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg); return false; } --macro->count; token[-1].flags |= PASTE_LEFT; } following_paste_op = (token->type == CPP_PASTE); token = lex_expansion_token (pfile, macro); } macro->exp.tokens = (cpp_token *) BUFF_FRONT (pfile->a_buff); macro->traditional = 0; /* Don't count the CPP_EOF. */ macro->count--; /* Clear whitespace on first token for warn_of_redefinition(). */ if (macro->count) macro->exp.tokens[0].flags &= ~PREV_WHITE; /* Commit or allocate the memory. */ if (pfile->hash_table->alloc_subobject) { cpp_token *tokns = (cpp_token *) pfile->hash_table->alloc_subobject (sizeof (cpp_token) * macro->count); memcpy (tokns, macro->exp.tokens, sizeof (cpp_token) * macro->count); macro->exp.tokens = tokns; } else BUFF_FRONT (pfile->a_buff) = (uchar *) ¯o->exp.tokens[macro->count]; return true; } /* Parse a macro and save its expansion. Returns nonzero on success. */ bool _cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node) { cpp_macro *macro; unsigned int i; bool ok; if (pfile->hash_table->alloc_subobject) macro = (cpp_macro *) pfile->hash_table->alloc_subobject (sizeof (cpp_macro)); else macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro)); macro->line = pfile->directive_line; macro->params = 0; macro->paramc = 0; macro->variadic = 0; macro->used = !CPP_OPTION (pfile, warn_unused_macros); macro->count = 0; macro->fun_like = 0; /* To suppress some diagnostics. */ macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0; if (CPP_OPTION (pfile, traditional)) ok = _cpp_create_trad_definition (pfile, macro); else { ok = create_iso_definition (pfile, macro); /* We set the type for SEEN_EOL() in directives.c. Longer term we should lex the whole line before coming here, and just copy the expansion. */ /* Stop the lexer accepting __VA_ARGS__. */ pfile->state.va_args_ok = 0; } /* Clear the fast argument lookup indices. */ for (i = macro->paramc; i-- > 0; ) { struct cpp_hashnode *node = macro->params[i]; node->flags &= ~ NODE_MACRO_ARG; node->value = ((union _cpp_hashnode_value *) pfile->macro_buffer)[i]; } if (!ok) return ok; if (node->type == NT_MACRO) { if (CPP_OPTION (pfile, warn_unused_macros)) _cpp_warn_if_unused_macro (pfile, node, NULL); if (warn_of_redefinition (pfile, node, macro)) { cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->directive_line, 0, "\"%s\" redefined", NODE_NAME (node)); if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN)) cpp_error_with_line (pfile, CPP_DL_PEDWARN, node->value.macro->line, 0, "this is the location of the previous definition"); } } if (node->type != NT_VOID) _cpp_free_definition (node); /* Enter definition in hash table. */ node->type = NT_MACRO; node->value.macro = macro; if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_")) && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_FORMAT_MACROS")) node->flags |= NODE_WARN; return ok; } /* Warn if a token in STRING matches one of a function-like MACRO's parameters. */ static void check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro, const cpp_string *string) { unsigned int i, len; const uchar *p, *q, *limit; /* Loop over the string. */ limit = string->text + string->len - 1; for (p = string->text + 1; p < limit; p = q) { /* Find the start of an identifier. */ while (p < limit && !is_idstart (*p)) p++; /* Find the end of the identifier. */ q = p; while (q < limit && is_idchar (*q)) q++; len = q - p; /* Loop over the function macro arguments to see if the identifier inside the string matches one of them. */ for (i = 0; i < macro->paramc; i++) { const cpp_hashnode *node = macro->params[i]; if (NODE_LEN (node) == len && !memcmp (p, NODE_NAME (node), len)) { cpp_error (pfile, CPP_DL_WARNING, "macro argument \"%s\" would be stringified in traditional C", NODE_NAME (node)); break; } } } } /* Returns the name, arguments and expansion of a macro, in a format suitable to be read back in again, and therefore also for DWARF 2 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION". Caller is expected to generate the "#define" bit if needed. The returned text is temporary, and automatically freed later. */ const unsigned char * cpp_macro_definition (cpp_reader *pfile, const cpp_hashnode *node) { unsigned int i, len; const cpp_macro *macro = node->value.macro; unsigned char *buffer; if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN)) { cpp_error (pfile, CPP_DL_ICE, "invalid hash type %d in cpp_macro_definition", node->type); return 0; } /* Calculate length. */ len = NODE_LEN (node) + 2; /* ' ' and NUL. */ if (macro->fun_like) { len += 4; /* "()" plus possible final ".." of named varargs (we have + 1 below). */ for (i = 0; i < macro->paramc; i++) len += NODE_LEN (macro->params[i]) + 1; /* "," */ } /* This should match below where we fill in the buffer. */ if (CPP_OPTION (pfile, traditional)) len += _cpp_replacement_text_len (macro); else { for (i = 0; i < macro->count; i++) { cpp_token *token = ¯o->exp.tokens[i]; if (token->type == CPP_MACRO_ARG) len += NODE_LEN (macro->params[token->val.arg_no - 1]); else len += cpp_token_len (token); if (token->flags & STRINGIFY_ARG) len++; /* "#" */ if (token->flags & PASTE_LEFT) len += 3; /* " ##" */ if (token->flags & PREV_WHITE) len++; /* " " */ } } if (len > pfile->macro_buffer_len) { pfile->macro_buffer = XRESIZEVEC (unsigned char, pfile->macro_buffer, len); pfile->macro_buffer_len = len; } /* Fill in the buffer. Start with the macro name. */ buffer = pfile->macro_buffer; memcpy (buffer, NODE_NAME (node), NODE_LEN (node)); buffer += NODE_LEN (node); /* Parameter names. */ if (macro->fun_like) { *buffer++ = '('; for (i = 0; i < macro->paramc; i++) { cpp_hashnode *param = macro->params[i]; if (param != pfile->spec_nodes.n__VA_ARGS__) { memcpy (buffer, NODE_NAME (param), NODE_LEN (param)); buffer += NODE_LEN (param); } if (i + 1 < macro->paramc) /* Don't emit a space after the comma here; we're trying to emit a Dwarf-friendly definition, and the Dwarf spec forbids spaces in the argument list. */ *buffer++ = ','; else if (macro->variadic) *buffer++ = '.', *buffer++ = '.', *buffer++ = '.'; } *buffer++ = ')'; } /* The Dwarf spec requires a space after the macro name, even if the definition is the empty string. */ *buffer++ = ' '; if (CPP_OPTION (pfile, traditional)) buffer = _cpp_copy_replacement_text (macro, buffer); else if (macro->count) /* Expansion tokens. */ { for (i = 0; i < macro->count; i++) { cpp_token *token = ¯o->exp.tokens[i]; if (token->flags & PREV_WHITE) *buffer++ = ' '; if (token->flags & STRINGIFY_ARG) *buffer++ = '#'; if (token->type == CPP_MACRO_ARG) { memcpy (buffer, NODE_NAME (macro->params[token->val.arg_no - 1]), NODE_LEN (macro->params[token->val.arg_no - 1])); buffer += NODE_LEN (macro->params[token->val.arg_no - 1]); } else buffer = cpp_spell_token (pfile, token, buffer, false); if (token->flags & PASTE_LEFT) { *buffer++ = ' '; *buffer++ = '#'; *buffer++ = '#'; /* Next has PREV_WHITE; see _cpp_create_definition. */ } } } *buffer = '\0'; return pfile->macro_buffer; } nescc-1.3.4/libcpp/makeucnid.c000066400000000000000000000237521177770303300162100ustar00rootroot00000000000000/* Make ucnid.h from various sources. Copyright (C) 2005 Free Software Foundation, Inc. This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Run this program as ./makeucnid ucnid.tab UnicodeData.txt DerivedNormalizationProps.txt \ > ucnid.h */ #include #include #include #include #include enum { C99 = 1, CXX = 2, digit = 4, not_NFC = 8, not_NFKC = 16, maybe_not_NFC = 32 }; static unsigned flags[65536]; static unsigned short decomp[65536][2]; static unsigned char combining_value[65536]; /* Die! */ static void fail (const char *s) { fprintf (stderr, "%s\n", s); exit (1); } /* Read ucnid.tab and set the C99 and CXX flags in header[]. */ static void read_ucnid (const char *fname) { FILE *f = fopen (fname, "r"); unsigned fl = 0; if (!f) fail ("opening ucnid.tab"); for (;;) { char line[256]; if (!fgets (line, sizeof (line), f)) break; if (strcmp (line, "[C99]\n") == 0) fl = C99; else if (strcmp (line, "[CXX]\n") == 0) fl = CXX; else if (isxdigit (line[0])) { char *l = line; while (*l) { unsigned long start, end; char *endptr; start = strtoul (l, &endptr, 16); if (endptr == l || (*endptr != '-' && ! isspace (*endptr))) fail ("parsing ucnid.tab [1]"); l = endptr; if (*l != '-') end = start; else { end = strtoul (l + 1, &endptr, 16); if (end < start) fail ("parsing ucnid.tab, end before start"); l = endptr; if (! isspace (*l)) fail ("parsing ucnid.tab, junk after range"); } while (isspace (*l)) l++; if (end > 0xFFFF) fail ("parsing ucnid.tab, end too large"); while (start <= end) flags[start++] |= fl; } } } if (ferror (f)) fail ("reading ucnid.tab"); fclose (f); } /* Read UnicodeData.txt and set the 'digit' flag, and also fill in the 'decomp' table to be the decompositions of characters for which both the character decomposed and all the code points in the decomposition are either C99 or CXX. */ static void read_table (char *fname) { FILE * f = fopen (fname, "r"); if (!f) fail ("opening UnicodeData.txt"); for (;;) { char line[256]; unsigned long codepoint, this_decomp[4]; char *l; int i; int decomp_useful; if (!fgets (line, sizeof (line), f)) break; codepoint = strtoul (line, &l, 16); if (l == line || *l != ';') fail ("parsing UnicodeData.txt, reading code point"); if (codepoint > 0xffff || ! (flags[codepoint] & (C99 | CXX))) continue; do { l++; } while (*l != ';'); /* Category value; things starting with 'N' are numbers of some kind. */ if (*++l == 'N') flags[codepoint] |= digit; do { l++; } while (*l != ';'); /* Canonical combining class; in NFC/NFKC, they must be increasing (or zero). */ if (! isdigit (*++l)) fail ("parsing UnicodeData.txt, combining class not number"); combining_value[codepoint] = strtoul (l, &l, 10); if (*l++ != ';') fail ("parsing UnicodeData.txt, junk after combining class"); /* Skip over bidi value. */ do { l++; } while (*l != ';'); /* Decomposition mapping. */ decomp_useful = flags[codepoint]; if (*++l == '<') /* Compatibility mapping. */ continue; for (i = 0; i < 4; i++) { if (*l == ';') break; if (!isxdigit (*l)) fail ("parsing UnicodeData.txt, decomposition format"); this_decomp[i] = strtoul (l, &l, 16); decomp_useful &= flags[this_decomp[i]]; while (isspace (*l)) l++; } if (i > 2) /* Decomposition too long. */ fail ("parsing UnicodeData.txt, decomposition too long"); if (decomp_useful) while (--i >= 0) decomp[codepoint][i] = this_decomp[i]; } if (ferror (f)) fail ("reading UnicodeData.txt"); fclose (f); } /* Read DerivedNormalizationProps.txt and set the flags that say whether a character is in NFC, NFKC, or is context-dependent. */ static void read_derived (const char *fname) { FILE * f = fopen (fname, "r"); if (!f) fail ("opening DerivedNormalizationProps.txt"); for (;;) { char line[256]; unsigned long start, end; char *l; bool not_NFC_p, not_NFKC_p, maybe_not_NFC_p; if (!fgets (line, sizeof (line), f)) break; not_NFC_p = (strstr (line, "; NFC_QC; N") != NULL); not_NFKC_p = (strstr (line, "; NFKC_QC; N") != NULL); maybe_not_NFC_p = (strstr (line, "; NFC_QC; M") != NULL); if (! not_NFC_p && ! not_NFKC_p && ! maybe_not_NFC_p) continue; start = strtoul (line, &l, 16); if (l == line) fail ("parsing DerivedNormalizationProps.txt, reading start"); if (start > 0xffff) continue; if (*l == '.' && l[1] == '.') end = strtoul (l + 2, &l, 16); else end = start; while (start <= end) flags[start++] |= ((not_NFC_p ? not_NFC : 0) | (not_NFKC_p ? not_NFKC : 0) | (maybe_not_NFC_p ? maybe_not_NFC : 0) ); } if (ferror (f)) fail ("reading DerivedNormalizationProps.txt"); fclose (f); } /* Write out the table. The table consists of two words per entry. The first word is the flags for the unicode code points up to and including the second word. */ static void write_table (void) { unsigned i; unsigned last_flag = flags[0]; bool really_safe = decomp[0][0] == 0; unsigned char last_combine = combining_value[0]; for (i = 1; i <= 65536; i++) if (i == 65536 || (flags[i] != last_flag && ((flags[i] | last_flag) & (C99 | CXX))) || really_safe != (decomp[i][0] == 0) || combining_value[i] != last_combine) { printf ("{ %s|%s|%s|%s|%s|%s|%s, %3d, %#06x },\n", last_flag & C99 ? "C99" : " 0", last_flag & digit ? "DIG" : " 0", last_flag & CXX ? "CXX" : " 0", really_safe ? "CID" : " 0", last_flag & not_NFC ? " 0" : "NFC", last_flag & not_NFKC ? " 0" : "NKC", last_flag & maybe_not_NFC ? "CTX" : " 0", combining_value[i - 1], i - 1); last_flag = flags[i]; last_combine = combining_value[0]; really_safe = decomp[i][0] == 0; } } /* Print out the huge copyright notice. */ static void write_copyright (void) { static const char copyright[] = "\ /* Unicode characters and various properties.\n\ Copyright (C) 2003, 2005 Free Software Foundation, Inc.\n\ \n\ This program is free software; you can redistribute it and/or modify it\n\ under the terms of the GNU General Public License as published by the\n\ Free Software Foundation; either version 2, or (at your option) any\n\ later version.\n\ \n\ This program is distributed in the hope that it will be useful,\n\ but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ GNU General Public License for more details.\n\ \n\ You should have received a copy of the GNU General Public License\n\ along with this program; if not, write to the Free Software\n\ Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n\ \n\ \n\ Copyright (C) 1991-2005 Unicode, Inc. All rights reserved.\n\ Distributed under the Terms of Use in\n\ http://www.unicode.org/copyright.html.\n\ \n\ Permission is hereby granted, free of charge, to any person\n\ obtaining a copy of the Unicode data files and any associated\n\ documentation (the \"Data Files\") or Unicode software and any\n\ associated documentation (the \"Software\") to deal in the Data Files\n\ or Software without restriction, including without limitation the\n\ rights to use, copy, modify, merge, publish, distribute, and/or\n\ sell copies of the Data Files or Software, and to permit persons to\n\ whom the Data Files or Software are furnished to do so, provided\n\ that (a) the above copyright notice(s) and this permission notice\n\ appear with all copies of the Data Files or Software, (b) both the\n\ above copyright notice(s) and this permission notice appear in\n\ associated documentation, and (c) there is clear notice in each\n\ modified Data File or in the Software as well as in the\n\ documentation associated with the Data File(s) or Software that the\n\ data or software has been modified.\n\ \n\ THE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY\n\ OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n\ WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n\ NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE\n\ COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR\n\ ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY\n\ DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\n\ WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS\n\ ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE\n\ OF THE DATA FILES OR SOFTWARE.\n\ \n\ Except as contained in this notice, the name of a copyright holder\n\ shall not be used in advertising or otherwise to promote the sale,\n\ use or other dealings in these Data Files or Software without prior\n\ written authorization of the copyright holder. */\n"; puts (copyright); } /* Main program. */ int main(int argc, char ** argv) { if (argc != 4) fail ("too few arguments to makeucn"); read_ucnid (argv[1]); read_table (argv[2]); read_derived (argv[3]); write_copyright (); write_table (); return 0; } nescc-1.3.4/libcpp/mkdeps.c000066400000000000000000000232651177770303300155320ustar00rootroot00000000000000/* Dependency generator for Makefile fragments. Copyright (C) 2000, 2001, 2003, 2007 Free Software Foundation, Inc. Contributed by Zack Weinberg, Mar 2000 This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. In other words, you are welcome to use, share and improve this program. You are forbidden to forbid anyone else to use, share and improve what you give them. Help stamp out software-hoarding! */ #include "config.h" #include "system.h" #include "mkdeps.h" /* Keep this structure local to this file, so clients don't find it easy to start making assumptions. */ struct deps { const char **targetv; unsigned int ntargets; /* number of slots actually occupied */ unsigned int targets_size; /* amt of allocated space - in words */ const char **depv; unsigned int ndeps; unsigned int deps_size; const char **vpathv; size_t *vpathlv; unsigned int nvpaths; unsigned int vpaths_size; }; static const char *munge (const char *); /* Given a filename, quote characters in that filename which are significant to Make. Note that it's not possible to quote all such characters - e.g. \n, %, *, ?, [, \ (in some contexts), and ~ are not properly handled. It isn't possible to get this right in any current version of Make. (??? Still true? Old comment referred to 3.76.1.) */ static const char * munge (const char *filename) { int len; const char *p, *q; char *dst, *buffer; for (p = filename, len = 0; *p; p++, len++) { switch (*p) { case ' ': case '\t': /* GNU make uses a weird quoting scheme for white space. A space or tab preceded by 2N+1 backslashes represents N backslashes followed by space; a space or tab preceded by 2N backslashes represents N backslashes at the end of a file name; and backslashes in other contexts should not be doubled. */ for (q = p - 1; filename <= q && *q == '\\'; q--) len++; len++; break; case '$': /* '$' is quoted by doubling it. */ len++; break; } } /* Now we know how big to make the buffer. */ buffer = XNEWVEC (char, len + 1); for (p = filename, dst = buffer; *p; p++, dst++) { switch (*p) { case ' ': case '\t': for (q = p - 1; filename <= q && *q == '\\'; q--) *dst++ = '\\'; *dst++ = '\\'; break; case '$': *dst++ = '$'; break; default: /* nothing */; } *dst = *p; } *dst = '\0'; return buffer; } /* If T begins with any of the partial pathnames listed in d->vpathv, then advance T to point beyond that pathname. */ static const char * apply_vpath (struct deps *d, const char *t) { if (d->vpathv) { unsigned int i; for (i = 0; i < d->nvpaths; i++) { if (!strncmp (d->vpathv[i], t, d->vpathlv[i])) { const char *p = t + d->vpathlv[i]; if (!IS_DIR_SEPARATOR (*p)) goto not_this_one; /* Do not simplify $(vpath)/../whatever. ??? Might not be necessary. */ if (p[1] == '.' && p[2] == '.' && IS_DIR_SEPARATOR (p[3])) goto not_this_one; /* found a match */ t = t + d->vpathlv[i] + 1; break; } not_this_one:; } } /* Remove leading ./ in any case. */ while (t[0] == '.' && IS_DIR_SEPARATOR (t[1])) { t += 2; /* If we removed a leading ./, then also remove any /s after the first. */ while (IS_DIR_SEPARATOR (t[0])) ++t; } return t; } /* Public routines. */ struct deps * deps_init (void) { return XCNEW (struct deps); } void deps_free (struct deps *d) { unsigned int i; if (d->targetv) { for (i = 0; i < d->ntargets; i++) free ((void *) d->targetv[i]); free (d->targetv); } if (d->depv) { for (i = 0; i < d->ndeps; i++) free ((void *) d->depv[i]); free (d->depv); } if (d->vpathv) { for (i = 0; i < d->nvpaths; i++) free ((void *) d->vpathv[i]); free (d->vpathv); free (d->vpathlv); } free (d); } /* Adds a target T. We make a copy, so it need not be a permanent string. QUOTE is true if the string should be quoted. */ void deps_add_target (struct deps *d, const char *t, int quote) { if (d->ntargets == d->targets_size) { d->targets_size = d->targets_size * 2 + 4; d->targetv = XRESIZEVEC (const char *, d->targetv, d->targets_size); } t = apply_vpath (d, t); if (quote) t = munge (t); /* Also makes permanent copy. */ else t = xstrdup (t); d->targetv[d->ntargets++] = t; } /* Sets the default target if none has been given already. An empty string as the default target in interpreted as stdin. The string is quoted for MAKE. */ void deps_add_default_target (struct deps *d, const char *tgt) { /* Only if we have no targets. */ if (d->ntargets) return; if (tgt[0] == '\0') deps_add_target (d, "-", 1); else { #ifndef TARGET_OBJECT_SUFFIX # define TARGET_OBJECT_SUFFIX ".o" #endif const char *start = lbasename (tgt); char *o = (char *) alloca (strlen (start) + strlen (TARGET_OBJECT_SUFFIX) + 1); char *suffix; strcpy (o, start); suffix = strrchr (o, '.'); if (!suffix) suffix = o + strlen (o); strcpy (suffix, TARGET_OBJECT_SUFFIX); deps_add_target (d, o, 1); } } void deps_add_dep (struct deps *d, const char *t) { t = munge (apply_vpath (d, t)); /* Also makes permanent copy. */ if (d->ndeps == d->deps_size) { d->deps_size = d->deps_size * 2 + 8; d->depv = XRESIZEVEC (const char *, d->depv, d->deps_size); } d->depv[d->ndeps++] = t; } void deps_add_vpath (struct deps *d, const char *vpath) { const char *elem, *p; char *copy; size_t len; for (elem = vpath; *elem; elem = p) { for (p = elem; *p && *p != ':'; p++); len = p - elem; copy = XNEWVEC (char, len + 1); memcpy (copy, elem, len); copy[len] = '\0'; if (*p == ':') p++; if (d->nvpaths == d->vpaths_size) { d->vpaths_size = d->vpaths_size * 2 + 8; d->vpathv = XRESIZEVEC (const char *, d->vpathv, d->vpaths_size); d->vpathlv = XRESIZEVEC (size_t, d->vpathlv, d->vpaths_size); } d->vpathv[d->nvpaths] = copy; d->vpathlv[d->nvpaths] = len; d->nvpaths++; } } void deps_write (const struct deps *d, FILE *fp, unsigned int colmax) { unsigned int size, i, column; column = 0; if (colmax && colmax < 34) colmax = 34; for (i = 0; i < d->ntargets; i++) { size = strlen (d->targetv[i]); column += size; if (colmax && column > colmax) { fputs (" \\\n ", fp); column = 1 + size; } if (i) { putc (' ', fp); column++; } fputs (d->targetv[i], fp); } putc (':', fp); putc (' ', fp); column += 2; for (i = 0; i < d->ndeps; i++) { size = strlen (d->depv[i]); column += size; if (colmax && column > colmax) { fputs (" \\\n ", fp); column = 1 + size; } if (i) { putc (' ', fp); column++; } fputs (d->depv[i], fp); } putc ('\n', fp); } void deps_phony_targets (const struct deps *d, FILE *fp) { unsigned int i; for (i = 1; i < d->ndeps; i++) { putc ('\n', fp); fputs (d->depv[i], fp); putc (':', fp); putc ('\n', fp); } } /* Write out a deps buffer to a file, in a form that can be read back with deps_restore. Returns nonzero on error, in which case the error number will be in errno. */ int deps_save (struct deps *deps, FILE *f) { unsigned int i; /* The cppreader structure contains makefile dependences. Write out this structure. */ /* The number of dependences. */ if (fwrite (&deps->ndeps, sizeof (deps->ndeps), 1, f) != 1) return -1; /* The length of each dependence followed by the string. */ for (i = 0; i < deps->ndeps; i++) { size_t num_to_write = strlen (deps->depv[i]); if (fwrite (&num_to_write, sizeof (size_t), 1, f) != 1) return -1; if (fwrite (deps->depv[i], num_to_write, 1, f) != 1) return -1; } return 0; } /* Read back dependency information written with deps_save into the deps buffer. The third argument may be NULL, in which case the dependency information is just skipped, or it may be a filename, in which case that filename is skipped. */ int deps_restore (struct deps *deps, FILE *fd, const char *self) { unsigned int i, count; size_t num_to_read; size_t buf_size = 512; char *buf = XNEWVEC (char, buf_size); /* Number of dependences. */ if (fread (&count, 1, sizeof (count), fd) != sizeof (count)) return -1; /* The length of each dependence string, followed by the string. */ for (i = 0; i < count; i++) { /* Read in # bytes in string. */ if (fread (&num_to_read, 1, sizeof (size_t), fd) != sizeof (size_t)) return -1; if (buf_size < num_to_read + 1) { buf_size = num_to_read + 1 + 127; buf = XRESIZEVEC (char, buf, buf_size); } if (fread (buf, 1, num_to_read, fd) != num_to_read) return -1; buf[num_to_read] = '\0'; /* Generate makefile dependencies from .pch if -nopch-deps. */ if (self != NULL && strcmp (buf, self) != 0) deps_add_dep (deps, buf); } free (buf); return 0; } nescc-1.3.4/libcpp/pch.c000066400000000000000000000455201177770303300150170ustar00rootroot00000000000000/* Part of CPP library. (Precompiled header reading/writing.) Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "system.h" #include "cpplib.h" #include "internal.h" #include "hashtab.h" #include "mkdeps.h" static int write_macdef (cpp_reader *, cpp_hashnode *, void *); static int save_idents (cpp_reader *, cpp_hashnode *, void *); static hashval_t hashmem (const void *, size_t); static hashval_t cpp_string_hash (const void *); static int cpp_string_eq (const void *, const void *); static int count_defs (cpp_reader *, cpp_hashnode *, void *); static int comp_hashnodes (const void *, const void *); static int collect_ht_nodes (cpp_reader *, cpp_hashnode *, void *); static int write_defs (cpp_reader *, cpp_hashnode *, void *); static int save_macros (cpp_reader *, cpp_hashnode *, void *); /* This structure represents a macro definition on disk. */ struct macrodef_struct { unsigned int definition_length; unsigned short name_length; unsigned short flags; }; /* This is how we write out a macro definition. Suitable for being called by cpp_forall_identifiers. */ static int write_macdef (cpp_reader *pfile, cpp_hashnode *hn, void *file_p) { FILE *f = (FILE *) file_p; switch (hn->type) { case NT_VOID: if (! (hn->flags & NODE_POISONED)) return 1; case NT_MACRO: if ((hn->flags & NODE_BUILTIN)) return 1; { struct macrodef_struct s; const unsigned char *defn; s.name_length = NODE_LEN (hn); s.flags = hn->flags & NODE_POISONED; if (hn->type == NT_MACRO) { defn = cpp_macro_definition (pfile, hn); s.definition_length = ustrlen (defn); } else { defn = NODE_NAME (hn); s.definition_length = s.name_length; } if (fwrite (&s, sizeof (s), 1, f) != 1 || fwrite (defn, 1, s.definition_length, f) != s.definition_length) { cpp_errno (pfile, CPP_DL_ERROR, "while writing precompiled header"); return 0; } } return 1; case NT_ASSERTION: /* Not currently implemented. */ return 1; default: abort (); } } /* This structure records the names of the defined macros. It's also used as a callback structure for size_initial_idents and save_idents. */ struct cpp_savedstate { /* A hash table of the defined identifiers. */ htab_t definedhash; /* The size of the definitions of those identifiers (the size of 'definedstrs'). */ size_t hashsize; /* Number of definitions */ size_t n_defs; /* Array of definitions. In cpp_write_pch_deps it is used for sorting. */ cpp_hashnode **defs; /* Space for the next definition. Definitions are null-terminated strings. */ unsigned char *definedstrs; }; /* Save this identifier into the state: put it in the hash table, put the definition in 'definedstrs'. */ static int save_idents (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *hn, void *ss_p) { struct cpp_savedstate *const ss = (struct cpp_savedstate *)ss_p; if (hn->type != NT_VOID) { struct cpp_string news; void **slot; news.len = NODE_LEN (hn); news.text= NODE_NAME (hn); slot = htab_find_slot (ss->definedhash, &news, INSERT); if (*slot == NULL) { struct cpp_string *sp; unsigned char *text; sp = XNEW (struct cpp_string); *slot = sp; sp->len = NODE_LEN (hn); sp->text = text = XNEWVEC (unsigned char, NODE_LEN (hn)); memcpy (text, NODE_NAME (hn), NODE_LEN (hn)); } } return 1; } /* Hash some memory in a generic way. */ static hashval_t hashmem (const void *p_p, size_t sz) { const unsigned char *p = (const unsigned char *)p_p; size_t i; hashval_t h; h = 0; for (i = 0; i < sz; i++) h = h * 67 - (*p++ - 113); return h; } /* Hash a cpp string for the hashtable machinery. */ static hashval_t cpp_string_hash (const void *a_p) { const struct cpp_string *a = (const struct cpp_string *) a_p; return hashmem (a->text, a->len); } /* Compare two cpp strings for the hashtable machinery. */ static int cpp_string_eq (const void *a_p, const void *b_p) { const struct cpp_string *a = (const struct cpp_string *) a_p; const struct cpp_string *b = (const struct cpp_string *) b_p; return (a->len == b->len && memcmp (a->text, b->text, a->len) == 0); } /* Save the current definitions of the cpp_reader for dependency checking purposes. When writing a precompiled header, this should be called at the same point in the compilation as cpp_valid_state would be called when reading the precompiled header back in. */ int cpp_save_state (cpp_reader *r, FILE *f) { /* Save the list of non-void identifiers for the dependency checking. */ r->savedstate = XNEW (struct cpp_savedstate); r->savedstate->definedhash = htab_create (100, cpp_string_hash, cpp_string_eq, NULL); cpp_forall_identifiers (r, save_idents, r->savedstate); /* Write out the list of defined identifiers. */ cpp_forall_identifiers (r, write_macdef, f); return 0; } /* Calculate the 'hashsize' field of the saved state. */ static int count_defs (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *hn, void *ss_p) { struct cpp_savedstate *const ss = (struct cpp_savedstate *)ss_p; switch (hn->type) { case NT_MACRO: if (hn->flags & NODE_BUILTIN) return 1; /* else fall through. */ case NT_VOID: { struct cpp_string news; void **slot; news.len = NODE_LEN (hn); news.text = NODE_NAME (hn); slot = (void **) htab_find (ss->definedhash, &news); if (slot == NULL) { ss->hashsize += NODE_LEN (hn) + 1; ss->n_defs += 1; } } return 1; case NT_ASSERTION: /* Not currently implemented. */ return 1; default: abort (); } } /* Collect the identifiers into the state's string table. */ static int write_defs (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *hn, void *ss_p) { struct cpp_savedstate *const ss = (struct cpp_savedstate *)ss_p; switch (hn->type) { case NT_MACRO: if (hn->flags & NODE_BUILTIN) return 1; /* else fall through. */ case NT_VOID: { struct cpp_string news; void **slot; news.len = NODE_LEN (hn); news.text = NODE_NAME (hn); slot = (void **) htab_find (ss->definedhash, &news); if (slot == NULL) { ss->defs[ss->n_defs] = hn; ss->n_defs += 1; } } return 1; case NT_ASSERTION: /* Not currently implemented. */ return 1; default: abort (); } } /* Comparison function for qsort. The arguments point to pointers of type ht_hashnode *. */ static int comp_hashnodes (const void *px, const void *py) { cpp_hashnode *x = *(cpp_hashnode **) px; cpp_hashnode *y = *(cpp_hashnode **) py; return ustrcmp (NODE_NAME (x), NODE_NAME (y)); } /* Write out the remainder of the dependency information. This should be called after the PCH is ready to be saved. */ int cpp_write_pch_deps (cpp_reader *r, FILE *f) { struct macrodef_struct z; struct cpp_savedstate *const ss = r->savedstate; unsigned char *definedstrs; size_t i; /* Collect the list of identifiers which have been seen and weren't defined to anything previously. */ ss->hashsize = 0; ss->n_defs = 0; cpp_forall_identifiers (r, count_defs, ss); ss->defs = XNEWVEC (cpp_hashnode *, ss->n_defs); ss->n_defs = 0; cpp_forall_identifiers (r, write_defs, ss); /* Sort the list, copy it into a buffer, and write it out. */ qsort (ss->defs, ss->n_defs, sizeof (cpp_hashnode *), &comp_hashnodes); definedstrs = ss->definedstrs = XNEWVEC (unsigned char, ss->hashsize); for (i = 0; i < ss->n_defs; ++i) { size_t len = NODE_LEN (ss->defs[i]); memcpy (definedstrs, NODE_NAME (ss->defs[i]), len + 1); definedstrs += len + 1; } memset (&z, 0, sizeof (z)); z.definition_length = ss->hashsize; if (fwrite (&z, sizeof (z), 1, f) != 1 || fwrite (ss->definedstrs, ss->hashsize, 1, f) != 1) { cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header"); return -1; } free (ss->definedstrs); /* Free the saved state. */ free (ss); r->savedstate = NULL; /* Save the next value of __COUNTER__. */ if (fwrite (&r->counter, sizeof (r->counter), 1, f) != 1) { cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header"); return -1; } return 0; } /* Write out the definitions of the preprocessor, in a form suitable for cpp_read_state. */ int cpp_write_pch_state (cpp_reader *r, FILE *f) { if (!r->deps) r->deps = deps_init (); if (deps_save (r->deps, f) != 0) { cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header"); return -1; } if (! _cpp_save_file_entries (r, f)) { cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header"); return -1; } /* Save the next __COUNTER__ value. When we include a precompiled header, we need to start at the offset we would have if the header had been included normally. */ if (fwrite (&r->counter, sizeof (r->counter), 1, f) != 1) { cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header"); return -1; } return 0; } /* Data structure to transform hash table nodes into a sorted list */ struct ht_node_list { /* Array of nodes */ cpp_hashnode **defs; /* Number of nodes in the array */ size_t n_defs; /* Size of the allocated array */ size_t asize; }; /* Callback for collecting identifiers from hash table */ static int collect_ht_nodes (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *hn, void *nl_p) { struct ht_node_list *const nl = (struct ht_node_list *)nl_p; if (hn->type != NT_VOID || hn->flags & NODE_POISONED) { if (nl->n_defs == nl->asize) { nl->asize *= 2; nl->defs = XRESIZEVEC (cpp_hashnode *, nl->defs, nl->asize); } nl->defs[nl->n_defs] = hn; ++nl->n_defs; } return 1; } /* Return nonzero if FD is a precompiled header which is consistent with the preprocessor's current definitions. It will be consistent when: - anything that was defined just before the PCH was generated is defined the same way now; and - anything that was not defined then, but is defined now, was not used by the PCH. NAME is used to print warnings if `warn_invalid_pch' is set in the reader's flags. */ int cpp_valid_state (cpp_reader *r, const char *name, int fd) { struct macrodef_struct m; size_t namebufsz = 256; unsigned char *namebuf = XNEWVEC (unsigned char, namebufsz); unsigned char *undeftab = NULL; struct ht_node_list nl = { 0, 0, 0 }; unsigned char *first, *last; unsigned int i; unsigned int counter; /* Read in the list of identifiers that must be defined Check that they are defined in the same way. */ for (;;) { cpp_hashnode *h; const unsigned char *newdefn; if (read (fd, &m, sizeof (m)) != sizeof (m)) goto error; if (m.name_length == 0) break; /* If this file is already preprocessed, there won't be any macros defined, and that's OK. */ if (CPP_OPTION (r, preprocessed)) { if (lseek (fd, m.definition_length, SEEK_CUR) == -1) goto error; continue; } if (m.definition_length > namebufsz) { free (namebuf); namebufsz = m.definition_length + 256; namebuf = XNEWVEC (unsigned char, namebufsz); } if ((size_t)read (fd, namebuf, m.definition_length) != m.definition_length) goto error; h = cpp_lookup (r, namebuf, m.name_length); if (m.flags & NODE_POISONED || h->type != NT_MACRO || h->flags & NODE_POISONED) { if (CPP_OPTION (r, warn_invalid_pch)) cpp_error (r, CPP_DL_WARNING_SYSHDR, "%s: not used because `%.*s' not defined", name, m.name_length, namebuf); goto fail; } newdefn = cpp_macro_definition (r, h); if (m.definition_length != ustrlen (newdefn) || memcmp (namebuf, newdefn, m.definition_length) != 0) { if (CPP_OPTION (r, warn_invalid_pch)) cpp_error (r, CPP_DL_WARNING_SYSHDR, "%s: not used because `%.*s' defined as `%s' not `%.*s'", name, m.name_length, namebuf, newdefn + m.name_length, m.definition_length - m.name_length, namebuf + m.name_length); goto fail; } } free (namebuf); namebuf = NULL; /* Read in the list of identifiers that must not be defined. Check that they really aren't. */ undeftab = XNEWVEC (unsigned char, m.definition_length); if ((size_t) read (fd, undeftab, m.definition_length) != m.definition_length) goto error; /* Collect identifiers from the current hash table. */ nl.n_defs = 0; nl.asize = 10; nl.defs = XNEWVEC (cpp_hashnode *, nl.asize); cpp_forall_identifiers (r, &collect_ht_nodes, &nl); qsort (nl.defs, nl.n_defs, sizeof (cpp_hashnode *), &comp_hashnodes); /* Loop through nl.defs and undeftab, both of which are sorted lists. There should be no matches. */ first = undeftab; last = undeftab + m.definition_length; i = 0; while (first < last && i < nl.n_defs) { int cmp = ustrcmp (first, NODE_NAME (nl.defs[i])); if (cmp < 0) first += ustrlen (first) + 1; else if (cmp > 0) ++i; else { if (CPP_OPTION (r, warn_invalid_pch)) cpp_error (r, CPP_DL_WARNING_SYSHDR, "%s: not used because `%s' is defined", name, first); goto fail; } } free(nl.defs); nl.defs = NULL; free (undeftab); undeftab = NULL; /* Read in the next value of __COUNTER__. Check that (a) __COUNTER__ was not used in the pch or (b) __COUNTER__ has not been used in this translation unit. */ if (read (fd, &counter, sizeof (counter)) != sizeof (counter)) goto error; if (counter && r->counter) { if (CPP_OPTION (r, warn_invalid_pch)) cpp_error (r, CPP_DL_WARNING_SYSHDR, "%s: not used because `__COUNTER__' is invalid", name); goto fail; } /* We win! */ return 0; error: cpp_errno (r, CPP_DL_ERROR, "while reading precompiled header"); return -1; fail: if (namebuf != NULL) free (namebuf); if (undeftab != NULL) free (undeftab); if (nl.defs != NULL) free (nl.defs); return 1; } /* Save all the existing macros. */ struct save_macro_data { uchar **defns; size_t count; size_t array_size; char **saved_pragmas; }; /* Save the definition of a single macro, so that it will persist across a PCH restore. Because macro data is in GCed memory, which will be blown away by PCH, it must be temporarily copied to malloced memory. (The macros will refer to identifier nodes which are also GCed and so on, so the copying is done by turning them into self-contained strings.) The assumption is that most macro definitions will come from the PCH file, not from the compilation before the PCH file is loaded, so it doesn't matter that this is a little expensive. It would reduce the cost even further if macros defined in the PCH file were not saved in this way, but this is not done (yet), except for builtins, and for #assert by default. */ static int save_macros (cpp_reader *r, cpp_hashnode *h, void *data_p) { struct save_macro_data *data = (struct save_macro_data *)data_p; if (h->type != NT_VOID && (h->flags & NODE_BUILTIN) == 0) { if (data->count == data->array_size) { data->array_size *= 2; data->defns = XRESIZEVEC (uchar *, data->defns, (data->array_size)); } switch (h->type) { case NT_ASSERTION: /* Not currently implemented. */ return 1; case NT_MACRO: { const uchar * defn = cpp_macro_definition (r, h); size_t defnlen = ustrlen (defn); data->defns[data->count] = (uchar *) xmemdup (defn, defnlen, defnlen + 2); data->defns[data->count][defnlen] = '\n'; } break; default: abort (); } data->count++; } return 1; } /* Prepare to restore the state, by saving the currently-defined macros in 'data'. */ void cpp_prepare_state (cpp_reader *r, struct save_macro_data **data) { struct save_macro_data *d = XNEW (struct save_macro_data); d->array_size = 512; d->defns = XNEWVEC (uchar *, d->array_size); d->count = 0; cpp_forall_identifiers (r, save_macros, d); d->saved_pragmas = _cpp_save_pragma_names (r); *data = d; } /* Given a precompiled header that was previously determined to be valid, apply all its definitions (and undefinitions) to the current state. DEPNAME is passed to deps_restore. */ int cpp_read_state (cpp_reader *r, const char *name, FILE *f, struct save_macro_data *data) { size_t i; struct lexer_state old_state; unsigned int counter; /* Restore spec_nodes, which will be full of references to the old hashtable entries and so will now be invalid. */ { struct spec_nodes *s = &r->spec_nodes; s->n_defined = cpp_lookup (r, DSC("defined")); s->n_true = cpp_lookup (r, DSC("true")); s->n_false = cpp_lookup (r, DSC("false")); s->n__VA_ARGS__ = cpp_lookup (r, DSC("__VA_ARGS__")); } old_state = r->state; r->state.in_directive = 1; r->state.prevent_expansion = 1; r->state.angled_headers = 0; /* Run through the carefully-saved macros, insert them. */ for (i = 0; i < data->count; i++) { cpp_hashnode *h; size_t namelen; uchar *defn; namelen = ustrcspn (data->defns[i], "( \n"); h = cpp_lookup (r, data->defns[i], namelen); defn = data->defns[i] + namelen; /* The PCH file is valid, so we know that if there is a definition from the PCH file it must be the same as the one we had originally, and so do not need to restore it. */ if (h->type == NT_VOID) { if (cpp_push_buffer (r, defn, ustrchr (defn, '\n') - defn, true) != NULL) { _cpp_clean_line (r); if (!_cpp_create_definition (r, h)) abort (); _cpp_pop_buffer (r); } else abort (); } free (data->defns[i]); } r->state = old_state; _cpp_restore_pragma_names (r, data->saved_pragmas); free (data); if (deps_restore (r->deps, f, CPP_OPTION (r, restore_pch_deps) ? name : NULL) != 0) goto error; if (! _cpp_read_file_entries (r, f)) goto error; if (fread (&counter, sizeof (counter), 1, f) != 1) goto error; if (!r->counter) r->counter = counter; return 0; error: cpp_errno (r, CPP_DL_ERROR, "while reading precompiled header"); return -1; } nescc-1.3.4/libcpp/po/000077500000000000000000000000001177770303300145115ustar00rootroot00000000000000nescc-1.3.4/libcpp/po/ChangeLog000066400000000000000000000110561177770303300162660ustar00rootroot000000000000002007-12-05 Joseph S. Myers * vi.po: Update. 2007-11-15 Joseph S. Myers * es.po: Update. 2007-11-11 Joseph S. Myers * de.po, zh_CN.po: Update. 2007-11-10 Joseph S. Myers * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po, sv.po, tr.po, uk,po, vi.po, zh_CN.po, zh_TW.po: Update. 2007-11-08 Joseph S. Myers * cpplib.pot: Regenerate. 2007-10-21 Joseph S. Myers * es.po, vi.po: Update. 2007-10-10 Joseph S. Myers * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po, sv.po, tr.po, uk,po, vi.po, zh_CN.po, zh_TW.po: Update. 2007-08-21 Joseph S. Myers * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po, sv.po, tr.po, vi.po, zh_CN.po, zh_TW.po: Update. * uk.po: New. 2007-06-26 Joseph S. Myers * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po, rw.po, sv.po, tr.po, vi.po, zh_CN.po, zh_TW.po: Update. 2007-03-07 Joseph S. Myers * cpplib.pot: Regenerate. 2006-10-22 Joseph S. Myers * cpplib.pot: Regenerate. 2006-09-03 Joseph S. Myers * vi.po: Update. 2006-06-24 Joseph S. Myers * sv.po: Update. 2006-06-24 Joseph S. Myers * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po, rw.po, sv.po, tr.po, vi.po, zh_CN.po, zh_TW.po: Update. 2006-04-21 Joseph S. Myers * de.po: Update. 2006-03-31 Joseph S. Myers * sv.po: Update. 2006-03-13 Joseph S. Myers * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po, rw.po, sv.po, tr.po, vi.po, zh_CN.po: Update. * zh_TW.po: New file. 2005-12-06 Joseph S. Myers * vi.po: Update. 2005-12-03 Joseph S. Myers * zh_CN.po: New file. 2005-12-01 Joseph S. Myers * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po, rw.po, sv.po, tr.po, vi.po: Update. 2005-11-20 Joseph S. Myers * cpplib.pot: Regenerate. 2005-09-04 Joseph S. Myers * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po, rw.po, sv.po, tr.po, vi.po: Update. 2005-06-18 Joseph S. Myers * tr.po, vi.po: Update. 2005-06-16 Joseph S. Myers * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po, rw.po, sv.po, tr.po, vi.po: Update. 2005-06-14 Joseph S. Myers * fr.po, sv.po: Update. 2005-06-07 Jakub Jelinek * cpplib.pot: Regenerate. 2005-05-05 Joseph S. Myers * nl.po: Update. 2005-04-27 Joseph S. Myers * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po, rw.po, sv.po, tr.po, vi.po: Update. 2005-04-06 Joseph S. Myers * rw.po: New file. 2005-03-29 Joseph S. Myers * de.po: Update. 2005-03-04 Joseph S. Myers * tr.po: Update. * vi.po: New file. 2005-03-04 Joseph S. Myers * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po, sv.po, tr.po: Update. 2005-02-25 Joseph S. Myers * cpplib.pot: Regenerate. 2004-12-15 Joseph S. Myers * fr.po: Update. 2004-12-04 Joseph S. Myers * tr.po: Update. 2004-12-02 Joseph S. Myers * es.po: Update. 2004-12-01 Joseph S. Myers * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po, sv.po, tr.po: Update. 2004-11-27 Joseph S. Myers * cpplib.pot: Regenerate. 2004-11-09 Joseph S. Myers * cpplib.pot: Regenerate. 2004-05-23 Paolo Bonzini * be.po: Extracted from gcc/po/be.po. * ca.po: Extracted from gcc/po/ca.po. * da.po: Extracted from gcc/po/da.po. * de.po: Extracted from gcc/po/de.po. * el.po: Extracted from gcc/po/el.po. * es.po: Extracted from gcc/po/es.po. * fr.po: Extracted from gcc/po/fr.po. * ja.po: Extracted from gcc/po/ja.po. * nl.po: Extracted from gcc/po/nl.po. * sv.po: Extracted from gcc/po/sv.po. * tr.po: Extracted from gcc/po/tr.po. nescc-1.3.4/libcpp/po/be.po000066400000000000000000002423471177770303300154530ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2002 Free Software Foundation, Inc. # Ales Nyakhaychyk , 2002. # msgid "" msgstr "" "Project-Id-Version: gcc 3.1\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2007-11-08 21:08+0000\n" "PO-Revision-Date: 2002-05-17 15:54+0200\n" "Last-Translator: Ales Nyakhaychyk \n" "Language-Team: Belarusian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: charset.c:654 #, c-format msgid "conversion from %s to %s not supported by iconv" msgstr "" #: charset.c:657 msgid "iconv_open" msgstr "" #: charset.c:665 #, c-format msgid "no iconv implementation, cannot convert from %s to %s" msgstr "" #: charset.c:742 #, c-format msgid "character 0x%lx is not in the basic source character set\n" msgstr "" #: charset.c:759 charset.c:1352 msgid "converting to execution character set" msgstr "" #: charset.c:765 #, c-format msgid "character 0x%lx is not unibyte in execution character set" msgstr "" #: charset.c:889 #, c-format msgid "Character %x might not be NFKC" msgstr "" #: charset.c:949 msgid "universal character names are only valid in C++ and C99" msgstr "" #: charset.c:952 #, c-format msgid "the meaning of '\\%c' is different in traditional C" msgstr "" #: charset.c:961 msgid "In _cpp_valid_ucn but not a UCN" msgstr "" #: charset.c:986 #, c-format msgid "incomplete universal character name %.*s" msgstr "" #: charset.c:998 #, fuzzy, c-format msgid "%.*s is not a valid universal character" msgstr "\"%s\" - гэта не пачатак дэкларацыі" #: charset.c:1008 lex.c:484 msgid "'$' in identifier or number" msgstr "" #: charset.c:1018 #, c-format msgid "universal character %.*s is not valid in an identifier" msgstr "" #: charset.c:1022 #, c-format msgid "universal character %.*s is not valid at the start of an identifier" msgstr "" #: charset.c:1056 charset.c:1571 msgid "converting UCN to source character set" msgstr "" #: charset.c:1060 msgid "converting UCN to execution character set" msgstr "" #: charset.c:1132 msgid "the meaning of '\\x' is different in traditional C" msgstr "" #: charset.c:1149 msgid "\\x used with no following hex digits" msgstr "" #: charset.c:1156 msgid "hex escape sequence out of range" msgstr "" #: charset.c:1195 msgid "octal escape sequence out of range" msgstr "" #: charset.c:1263 msgid "the meaning of '\\a' is different in traditional C" msgstr "" #: charset.c:1270 #, c-format msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "" #: charset.c:1278 #, c-format msgid "unknown escape sequence '\\%c'" msgstr "невядомая ESC-паслядоўнасць '\\%c'" #: charset.c:1286 #, fuzzy, c-format msgid "unknown escape sequence: '\\%s'" msgstr "невядомая ESC-паслядоўнасць '\\%c'" #: charset.c:1293 msgid "converting escape sequence to execution character set" msgstr "" #: charset.c:1415 charset.c:1478 #, fuzzy msgid "character constant too long for its type" msgstr "сімвальная канстанта вельмі доўгая" #: charset.c:1418 msgid "multi-character character constant" msgstr "мнагасімвальная сімвальная канстанта" #: charset.c:1510 msgid "empty character constant" msgstr "пустая сімвальная канстанта" #: charset.c:1612 #, c-format msgid "failure to convert %s to %s" msgstr "" #: directives.c:215 directives.c:241 #, c-format msgid "extra tokens at end of #%s directive" msgstr "" #: directives.c:344 #, c-format msgid "#%s is a GCC extension" msgstr "" #: directives.c:356 msgid "suggest not using #elif in traditional C" msgstr "" #: directives.c:359 #, c-format msgid "traditional C ignores #%s with the # indented" msgstr "" #: directives.c:363 #, c-format msgid "suggest hiding #%s from traditional C with an indented #" msgstr "" #: directives.c:389 msgid "embedding a directive within macro arguments is not portable" msgstr "" #: directives.c:409 msgid "style of line directive is a GCC extension" msgstr "" #: directives.c:464 #, c-format msgid "invalid preprocessing directive #%s" msgstr "" #: directives.c:532 msgid "\"defined\" cannot be used as a macro name" msgstr "" #: directives.c:538 #, c-format msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "" #: directives.c:541 #, c-format msgid "no macro name given in #%s directive" msgstr "" #: directives.c:544 msgid "macro names must be identifiers" msgstr "" #: directives.c:585 #, c-format msgid "undefining \"%s\"" msgstr "" #: directives.c:640 msgid "missing terminating > character" msgstr "" #: directives.c:695 #, c-format msgid "#%s expects \"FILENAME\" or " msgstr "" #: directives.c:739 #, c-format msgid "empty filename in #%s" msgstr "" #: directives.c:749 msgid "#include nested too deeply" msgstr "" #: directives.c:790 msgid "#include_next in primary source file" msgstr "" #: directives.c:816 #, c-format msgid "invalid flag \"%s\" in line directive" msgstr "" #: directives.c:868 #, c-format msgid "\"%s\" after #line is not a positive integer" msgstr "" #: directives.c:874 msgid "line number out of range" msgstr "" #: directives.c:887 directives.c:964 #, c-format msgid "\"%s\" is not a valid filename" msgstr "" #: directives.c:924 #, c-format msgid "\"%s\" after # is not a positive integer" msgstr "" #: directives.c:1026 #, fuzzy, c-format msgid "invalid #%s directive" msgstr "нерэчаісны ініцыялізатар" #: directives.c:1089 #, c-format msgid "registering pragmas in namespace \"%s\" with mismatched name expansion" msgstr "" #: directives.c:1098 #, c-format msgid "registering pragma \"%s\" with name expansion and no namespace" msgstr "" #: directives.c:1116 #, c-format msgid "registering \"%s\" as both a pragma and a pragma namespace" msgstr "" #: directives.c:1119 #, fuzzy, c-format msgid "#pragma %s %s is already registered" msgstr "Клас \"%s\" ужо існуе" #: directives.c:1122 #, c-format msgid "#pragma %s is already registered" msgstr "" #: directives.c:1152 msgid "registering pragma with NULL handler" msgstr "" #: directives.c:1362 msgid "#pragma once in main file" msgstr "" #: directives.c:1385 msgid "invalid #pragma GCC poison directive" msgstr "" #: directives.c:1394 #, c-format msgid "poisoning existing macro \"%s\"" msgstr "" #: directives.c:1413 msgid "#pragma system_header ignored outside include file" msgstr "" #: directives.c:1437 #, fuzzy, c-format msgid "cannot find source file %s" msgstr "не магу знайсці крыніцу %s" #: directives.c:1441 #, c-format msgid "current file is older than %s" msgstr "" #: directives.c:1620 msgid "_Pragma takes a parenthesized string literal" msgstr "" #: directives.c:1693 msgid "#else without #if" msgstr "" #: directives.c:1698 msgid "#else after #else" msgstr "" #: directives.c:1700 directives.c:1733 msgid "the conditional began here" msgstr "" #: directives.c:1726 msgid "#elif without #if" msgstr "" #: directives.c:1731 msgid "#elif after #else" msgstr "" #: directives.c:1761 msgid "#endif without #if" msgstr "" #: directives.c:1838 msgid "missing '(' after predicate" msgstr "" #: directives.c:1853 msgid "missing ')' to complete answer" msgstr "" #: directives.c:1873 msgid "predicate's answer is empty" msgstr "" #: directives.c:1900 msgid "assertion without predicate" msgstr "" #: directives.c:1902 msgid "predicate must be an identifier" msgstr "" #: directives.c:1988 #, c-format msgid "\"%s\" re-asserted" msgstr "" #: directives.c:2271 #, c-format msgid "unterminated #%s" msgstr "" #: directives-only.c:221 lex.c:1016 traditional.c:162 msgid "unterminated comment" msgstr "незавершаныя каментарыі" #: errors.c:118 msgid "warning: " msgstr "" #: errors.c:120 msgid "internal error: " msgstr "" #: errors.c:122 msgid "error: " msgstr "" #: errors.c:186 #, fuzzy msgid "stdout" msgstr "структура" #: errors.c:188 #, c-format msgid "%s: %s" msgstr "" #: expr.c:261 msgid "too many decimal points in number" msgstr "" #: expr.c:290 expr.c:365 msgid "fixed-point constants are a GCC extension" msgstr "" #: expr.c:303 #, fuzzy, c-format msgid "invalid digit \"%c\" in binary constant" msgstr "`%E' - нерэчаісная нязьменная тыпу string" #: expr.c:305 #, fuzzy, c-format msgid "invalid digit \"%c\" in octal constant" msgstr "`%E' - нерэчаісная нязьменная тыпу string" #: expr.c:313 #, fuzzy msgid "invalid prefix \"0b\" for floating constant" msgstr "`%E' - нерэчаісная нязьменная тыпу string" #: expr.c:319 msgid "use of C99 hexadecimal floating constant" msgstr "" #: expr.c:328 msgid "exponent has no digits" msgstr "" #: expr.c:335 msgid "hexadecimal floating constants require an exponent" msgstr "" #: expr.c:341 #, fuzzy, c-format msgid "invalid suffix \"%.*s\" on floating constant" msgstr "`%E' - нерэчаісная нязьменная тыпу string" #: expr.c:351 expr.c:393 #, c-format msgid "traditional C rejects the \"%.*s\" suffix" msgstr "" #: expr.c:358 #, c-format msgid "invalid suffix \"%.*s\" with hexadecimal floating constant" msgstr "" #: expr.c:369 msgid "decimal float constants are a GCC extension" msgstr "" #: expr.c:379 #, fuzzy, c-format msgid "invalid suffix \"%.*s\" on integer constant" msgstr "`%E' - нерэчаісная нязьменная тыпу string" #: expr.c:401 msgid "use of C99 long long integer constant" msgstr "" #: expr.c:409 msgid "imaginary constants are a GCC extension" msgstr "" #: expr.c:412 msgid "binary constants are a GCC extension" msgstr "" #: expr.c:505 msgid "integer constant is too large for its type" msgstr "" #: expr.c:517 msgid "integer constant is so large that it is unsigned" msgstr "" #: expr.c:612 msgid "missing ')' after \"defined\"" msgstr "" #: expr.c:619 msgid "operator \"defined\" requires an identifier" msgstr "" #: expr.c:627 #, c-format msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "" #: expr.c:637 msgid "this use of \"defined\" may not be portable" msgstr "" #: expr.c:676 msgid "floating constant in preprocessor expression" msgstr "" #: expr.c:682 msgid "imaginary number in preprocessor expression" msgstr "" #: expr.c:727 #, c-format msgid "\"%s\" is not defined" msgstr "" #: expr.c:855 expr.c:884 #, fuzzy, c-format msgid "missing binary operator before token \"%s\"" msgstr "прапушчан прабел пасля нумара \"%.*s\"" #: expr.c:875 #, c-format msgid "token \"%s\" is not valid in preprocessor expressions" msgstr "" #: expr.c:892 msgid "missing expression between '(' and ')'" msgstr "" #: expr.c:895 msgid "#if with no expression" msgstr "" #: expr.c:898 #, c-format msgid "operator '%s' has no right operand" msgstr "" #: expr.c:903 #, c-format msgid "operator '%s' has no left operand" msgstr "" #: expr.c:929 msgid " ':' without preceding '?'" msgstr "" #: expr.c:956 msgid "unbalanced stack in #if" msgstr "" #: expr.c:975 #, fuzzy, c-format msgid "impossible operator '%u'" msgstr "немагчымы апэратар '%s'" #: expr.c:1065 msgid "missing ')' in expression" msgstr "" #: expr.c:1086 msgid "'?' without following ':'" msgstr "" #: expr.c:1096 msgid "integer overflow in preprocessor expression" msgstr "" #: expr.c:1101 msgid "missing '(' in expression" msgstr "" #: expr.c:1133 #, c-format msgid "the left operand of \"%s\" changes sign when promoted" msgstr "" #: expr.c:1138 #, c-format msgid "the right operand of \"%s\" changes sign when promoted" msgstr "" #: expr.c:1397 msgid "traditional C rejects the unary plus operator" msgstr "" #: expr.c:1480 msgid "comma operator in operand of #if" msgstr "" #: expr.c:1612 msgid "division by zero in #if" msgstr "" #: files.c:442 msgid "NULL directory in find_file" msgstr "" #: files.c:480 msgid "one or more PCH files were found, but they were invalid" msgstr "" #: files.c:483 msgid "use -Winvalid-pch for more information" msgstr "" #: files.c:570 #, c-format msgid "%s is a block device" msgstr "%s - гэта блёчная прылада" #: files.c:587 #, c-format msgid "%s is too large" msgstr "%s - вельмі вялікі" #: files.c:622 #, c-format msgid "%s is shorter than expected" msgstr "" #: files.c:852 #, c-format msgid "no include path in which to search for %s" msgstr "" #: files.c:1157 msgid "Multiple include guards may be useful for:\n" msgstr "" #: init.c:426 msgid "cppchar_t must be an unsigned type" msgstr "" #: init.c:430 #, c-format msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits" msgstr "" #: init.c:437 msgid "CPP arithmetic must be at least as precise as a target int" msgstr "" #: init.c:440 msgid "target char is less than 8 bits wide" msgstr "" #: init.c:444 msgid "target wchar_t is narrower than target char" msgstr "" #: init.c:448 msgid "target int is narrower than target char" msgstr "" #: init.c:453 msgid "CPP half-integer narrower than CPP character" msgstr "" #: init.c:457 #, c-format msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits" msgstr "" #: lex.c:283 msgid "backslash and newline separated by space" msgstr "" #: lex.c:288 msgid "backslash-newline at end of file" msgstr "" #: lex.c:303 #, c-format msgid "trigraph ??%c converted to %c" msgstr "" #: lex.c:310 #, c-format msgid "trigraph ??%c ignored, use -trigraphs to enable" msgstr "" #: lex.c:356 msgid "\"/*\" within comment" msgstr "" #: lex.c:414 #, c-format msgid "%s in preprocessing directive" msgstr "" #: lex.c:423 msgid "null character(s) ignored" msgstr "" #: lex.c:460 #, c-format msgid "`%.*s' is not in NFKC" msgstr "" #: lex.c:463 #, fuzzy, c-format msgid "`%.*s' is not in NFC" msgstr "`%D' - гэта ня функцыя," #: lex.c:551 #, c-format msgid "attempt to use poisoned \"%s\"" msgstr "" #: lex.c:559 msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "" #: lex.c:659 msgid "null character(s) preserved in literal" msgstr "" #: lex.c:662 #, c-format msgid "missing terminating %c character" msgstr "прапушчан завяршаючы сімвал %c" #: lex.c:1027 msgid "C++ style comments are not allowed in ISO C90" msgstr "" #: lex.c:1029 msgid "(this will be reported only once per input file)" msgstr "" #: lex.c:1034 msgid "multi-line comment" msgstr "" #: lex.c:1347 #, fuzzy, c-format msgid "unspellable token %s" msgstr "немагу адчыніць файл \"%s\"" #: line-map.c:320 #, c-format msgid "In file included from %s:%u" msgstr "" #: line-map.c:338 #, c-format msgid "" ",\n" " from %s:%u" msgstr "" #: macro.c:84 #, c-format msgid "macro \"%s\" is not used" msgstr "" #: macro.c:123 macro.c:319 #, c-format msgid "invalid built-in macro \"%s\"" msgstr "" #: macro.c:157 #, fuzzy msgid "could not determine file timestamp" msgstr "не магу знайсці крыніцу %s\n" #: macro.c:254 #, fuzzy msgid "could not determine date and time" msgstr "Немагчыма адчыніць файл з дадзенымі %s.\n" #: macro.c:270 msgid "__COUNTER__ expanded inside directive with -fdirectives-only" msgstr "" #: macro.c:423 msgid "invalid string literal, ignoring final '\\'" msgstr "" #: macro.c:483 #, c-format msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "" #: macro.c:558 msgid "ISO C99 requires rest arguments to be used" msgstr "" #: macro.c:563 #, c-format msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "" #: macro.c:568 #, c-format msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "" #: macro.c:679 traditional.c:680 #, c-format msgid "unterminated argument list invoking macro \"%s\"" msgstr "" #: macro.c:782 #, c-format msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "" #: macro.c:1325 #, c-format msgid "duplicate macro parameter \"%s\"" msgstr "" #: macro.c:1371 #, c-format msgid "\"%s\" may not appear in macro parameter list" msgstr "" #: macro.c:1379 msgid "macro parameters must be comma-separated" msgstr "" #: macro.c:1396 msgid "parameter name missing" msgstr "" #: macro.c:1413 msgid "anonymous variadic macros were introduced in C99" msgstr "" #: macro.c:1418 msgid "ISO C does not permit named variadic macros" msgstr "" #: macro.c:1427 msgid "missing ')' in macro parameter list" msgstr "" #: macro.c:1476 msgid "'##' cannot appear at either end of a macro expansion" msgstr "" #: macro.c:1510 msgid "ISO C99 requires whitespace after the macro name" msgstr "" #: macro.c:1534 #, fuzzy msgid "missing whitespace after the macro name" msgstr "прапушчан прабел пасля нумара \"%.*s\"" #: macro.c:1564 msgid "'#' is not followed by a macro parameter" msgstr "" #: macro.c:1683 #, c-format msgid "\"%s\" redefined" msgstr "" #: macro.c:1688 msgid "this is the location of the previous definition" msgstr "" #: macro.c:1738 #, c-format msgid "macro argument \"%s\" would be stringified in traditional C" msgstr "" #: macro.c:1761 #, c-format msgid "invalid hash type %d in cpp_macro_definition" msgstr "" #: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377 msgid "while writing precompiled header" msgstr "" #: pch.c:485 #, fuzzy, c-format msgid "%s: not used because `%.*s' not defined" msgstr "адмеціна `%s' выкарыстоўвываецца, але ня вызначана" #: pch.c:497 #, c-format msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'" msgstr "" #: pch.c:538 #, c-format msgid "%s: not used because `%s' is defined" msgstr "" #: pch.c:558 #, c-format msgid "%s: not used because `__COUNTER__' is invalid" msgstr "" #: pch.c:567 pch.c:737 msgid "while reading precompiled header" msgstr "" #: traditional.c:750 #, c-format msgid "detected recursion whilst expanding macro \"%s\"" msgstr "" #: traditional.c:917 msgid "syntax error in macro parameter list" msgstr "" #~ msgid "wrong number of arguments specified for `%s' attribute" #~ msgstr "памылковая колькасьць аргументаў, зададзеных для атрыбута `%s'" #~ msgid "`%s' attribute ignored" #~ msgstr "\"%s\" атрыбут ігнарыруецца" #~ msgid "unknown machine mode `%s'" #~ msgstr "невядомы рэжым машыны \"%s\"" #~ msgid "no data type for mode `%s'" #~ msgstr "няма тыпа дадзеных для рэжыма \"%s\"" #~ msgid "section of `%s' conflicts with previous declaration" #~ msgstr "секцыя \"%s\" канфліктуе з папярэдняй дэкларацыяй" #~ msgid "section attributes are not supported for this target" #~ msgstr "атрыбуты секцыі не падтрымліваюцца для гэтай мэты" #, fuzzy #~ msgid "`%s' attribute ignored for `%s'" #~ msgstr "\"%s\" атрыбут ігнарыруецца" #, fuzzy #~ msgid "second arg to `__builtin_prefetch' must be a constant" #~ msgstr "аргумент `__builtin_args_info' павінен быць канстантай" #, fuzzy #~ msgid "third arg to `__builtin_prefetch' must be a constant" #~ msgstr "аргумент `__builtin_args_info' павінен быць канстантай" #~ msgid "__builtin_saveregs not supported by this target" #~ msgstr "__buitin_saveregs не падтрымліваецца гэтай мэтай" #~ msgid "argument of `__builtin_args_info' must be constant" #~ msgstr "аргумент `__builtin_args_info' павінен быць канстантай" #~ msgid "argument of `__builtin_args_info' out of range" #~ msgstr "аргумент `__builtin_args_info' выйшаў за межы" #~ msgid "missing argument in `__builtin_args_info'" #~ msgstr "прапушчан аргумент у `__builtin_args_info'" #~ msgid "`va_start' used in function with fixed args" #~ msgstr "" #~ "`va_start' выкарыстоўвываецца ў функцыі з нязьменнай\n" #~ " колькасьцю аргументаў" #~ msgid "`__builtin_next_arg' called without an argument" #~ msgstr "\"__buitin_next_arg\" выклікаецца без аргумента" #~ msgid "invalid use of `restrict'" #~ msgstr "нявернае выкарыстанне \"restict\"" #, fuzzy #~ msgid "cannot disable built-in function `%s'" #~ msgstr "не магу ініцыялізаваць сяброўскую функцыю \"%s\"" #~ msgid "too few arguments to function `%s'" #~ msgstr "нехапае аргументаў у функцыі \"%s\"" #~ msgid "too many arguments to function `%s'" #~ msgstr "вельмі шмат аргумэнтаў у функцыі `%s'" #, fuzzy #~ msgid "ISO C++ forbids taking the address of a label" #~ msgstr "ISO C не дазваляе пусты ізыходны файл" #, fuzzy #~ msgid "ISO C forbids taking the address of a label" #~ msgstr "ISO C не дазваляе пусты ізыходны файл" #~ msgid "unknown C standard `%s'" #~ msgstr "невядомы C стандарт `%s'" #~ msgid "label `%s' defined but not used" #~ msgstr "адмеціна `%s' вызначана, але ня выкарыстоўваецца" #, fuzzy #~ msgid "previous declaration of function `%s' with attribute noinline" #~ msgstr "няма папярэдняга аб'яўлення для \"%s\"" #, fuzzy #~ msgid "previous declaration of function `%s' was inline" #~ msgstr "няма папярэдняга аб'яўлення для \"%s\"" #, fuzzy #~ msgid "a parameter" #~ msgstr "невыкарыстаемы параметр \"%s\"" #, fuzzy #~ msgid "a global declaration" #~ msgstr "Нерэчаіснае абвяшчэнне" #~ msgid "duplicate label declaration `%s'" #~ msgstr "паўторнае абвяшчэньне адмеціны `%s'" #~ msgid "this is a previous declaration" #~ msgstr "гэта папярэдняе абвяшчэньне" #~ msgid "empty declaration" #~ msgstr "пустое абвяшчэньне" #, fuzzy #~ msgid "ISO C89 does not support `[*]' array declarators" #~ msgstr "ISO C89 не падтрымлівае \"long long\"" #~ msgid "`%s' is usually a function" #~ msgstr "`%s' - звычайна функцыя" #~ msgid "parameter `%s' is initialized" #~ msgstr "параметр \"%s\" ініцыялізаваны" #~ msgid "`long long long' is too long for GCC" #~ msgstr "`long long long' - вельмі доўга для GCC" #~ msgid "ISO C89 does not support `long long'" #~ msgstr "ISO C89 не падтрымлівае `long long'" #~ msgid "duplicate `%s'" #~ msgstr "паўтарэньне `%s'" #~ msgid "long, short, signed or unsigned invalid for `%s'" #~ msgstr "long, short, signed ці unsigned нерэчаісны для \"%s\"" #~ msgid "complex invalid for `%s'" #~ msgstr "complex нерэчаісны для \"%s\"" #~ msgid "ISO C89 does not support complex types" #~ msgstr "ISO C89 не падтрымлівае комлексныя тыпы" #~ msgid "ISO C does not support plain `complex' meaning `double complex'" #~ msgstr "ISO C не падтрымлівае просты \"complex\" у значэнні \"double complex\"" #~ msgid "ISO C does not support complex integer types" #~ msgstr "ISO C не падтрымлівае комлексныя цэлалікавыя тыпы" #~ msgid "duplicate `const'" #~ msgstr "паўтарэнне \"const\"" #~ msgid "duplicate `restrict'" #~ msgstr "паўтарэнне \"restrict\"" #~ msgid "duplicate `volatile'" #~ msgstr "паўтарэнне \"volatile\"" #~ msgid "size of array `%s' is negative" #~ msgstr "памер масіва \"%s\" адмоўны" #~ msgid "size of array `%s' is too large" #~ msgstr "памер масіва \"%s\" вельмі вялікі" #, fuzzy #~ msgid "redefinition of `struct %s'" #~ msgstr "перанакіраванне stdout: %s" #~ msgid "union" #~ msgstr "аб'яднанне" #~ msgid "structure" #~ msgstr "структура" #~ msgid "members" #~ msgstr "члены" #~ msgid "bit-field `%s' has invalid type" #~ msgstr "бітавае поле \"%s\" мае нерэчаісны тып" #~ msgid "no previous prototype for `%s'" #~ msgstr "няма папярэдняга прататыпа для \"%s\"" #~ msgid "no previous declaration for `%s'" #~ msgstr "няма папярэдняга аб'яўлення для \"%s\"" #~ msgid "return type of `%s' is not `int'" #~ msgstr "вяртаемы тып \"%s\" не \"int\"" #~ msgid "first argument of `%s' should be `int'" #~ msgstr "першым аргументам \"%s\" павінен быць \"int\"" #~ msgid "second argument of `%s' should be `char **'" #~ msgstr "другім аргументам \"%s\" павінен быць \"char **\"" #~ msgid "size of return value of `%s' is %u bytes" #~ msgstr "памер вяртаемага значэння \"%s\" %u байт" #~ msgid "size of return value of `%s' is larger than %d bytes" #~ msgstr "памер вяртаемага значэння \"%s\" больш чым %d байт" #~ msgid "function does not return string type" #~ msgstr "функцыя не вяртае тып string" #~ msgid "`0' flag" #~ msgstr "'0' флаг" #~ msgid "`O' modifier" #~ msgstr "'O' мадыфікатар" #~ msgid "%s does not support %s" #~ msgstr "%s не падтрымлівае %s" #~ msgid "syntax error" #~ msgstr "сінтаксічная памылка" #, fuzzy #~ msgid "syntax error: cannot back up" #~ msgstr "сінтаксічная памылка" #~ msgid "ISO C forbids an empty source file" #~ msgstr "ISO C не дазваляе пусты ізыходны файл" #, fuzzy #~ msgid "first argument to __builtin_choose_expr not a constant" #~ msgstr "аргумент `__builtin_args_info' павінен быць канстантай" #~ msgid "`%s' is not at beginning of declaration" #~ msgstr "\"%s\" - гэта не пачатак дэкларацыі" #~ msgid "ISO C forbids label declarations" #~ msgstr "ISO C не дазваляе дэкларацыі метак (label)" #~ msgid "empty body in an else-statement" #~ msgstr "пустое цела ў else-выражэнні" #~ msgid "ISO C forbids `goto *expr;'" #~ msgstr "ISO C не падтрымлівае \"goto *expr;\"" #~ msgid "parse error" #~ msgstr "граматычная памылка" #~ msgid "%s at end of input" #~ msgstr "%s на прыканцы ўводу" #~ msgid "%s before %s'%c'" #~ msgstr "%s перад %s'%c'" #~ msgid "%s before %s'\\x%x'" #~ msgstr "%s перад %s'\\x%x'" #~ msgid "%s before \"%s\"" #~ msgstr "%s перад \"%s\"" #~ msgid "%s before '%s' token" #~ msgstr "%s перад знакам '%s'" #, fuzzy #~ msgid "YYDEBUG not defined" #~ msgstr "YYDEBUG не вызначан." #, fuzzy #~ msgid "#pragma pack(push[, id], ) is not supported on this target" #~ msgstr "атрыбуты секцыі не падтрымліваюцца для гэтай мэты" #, fuzzy #~ msgid "#pragma pack(pop[, id], ) is not supported on this target" #~ msgstr "атрыбуты секцыі не падтрымліваюцца для гэтай мэты" #, fuzzy #~ msgid "asm declaration conficts with previous rename" #~ msgstr "секцыя \"%s\" канфліктуе з папярэдняй дэкларацыяй" #~ msgid "destructor needed for `%#D'" #~ msgstr "дэструктару неабходны \"%#D\"" #~ msgid "`%s' has an incomplete type" #~ msgstr "\"%s\" мае незавершаны тып" #~ msgid "`%s' undeclared (first use in this function)" #~ msgstr "\"%s\" не абвешчан (першае выкарыстанне ў гэтай функцыі)" #~ msgid "(Each undeclared identifier is reported only once" #~ msgstr "(Аб кожным неабвешчаным ідэнтыфікатары паведамляецца" #~ msgid "for each function it appears in.)" #~ msgstr "адзін раз для кожнай функцыі, дзе ён з'яўляецца.)" #~ msgid "too many arguments to function" #~ msgstr "вельмі шмат аргументаў у функцыі" #~ msgid "too few arguments to function" #~ msgstr "не хапае аргументаў у функцыі" #~ msgid "ISO C does not support `++' and `--' on complex types" #~ msgstr "ISO C не падтрымлівае \"++\" і \"--\" для тыпу complex" #, fuzzy #~ msgid "wrong type argument to increment" #~ msgstr "не хапае аргументаў у функцыі" #, fuzzy #~ msgid "cannot take address of bit-field `%s'" #~ msgstr "не магу атрымаць адрас бітавага поля \"%s\"" #~ msgid "initialization" #~ msgstr "ініцыялізацыя" #~ msgid "invalid initializer" #~ msgstr "нерэчаісны ініцыялізатар" #~ msgid "missing initializer" #~ msgstr "прапушчан ініцыялізатар" #~ msgid "return" #~ msgstr "вяртанне" #~ msgid "called from here" #~ msgstr "выклікана адсюль" #~ msgid "internal error" #~ msgstr "унутраная памылка" #~ msgid "no arguments" #~ msgstr "няма аргументаў" #~ msgid "%d constructor(s) found\n" #~ msgstr "%d канструктар(аў) знойдзен(а)\n" #~ msgid "%d destructor(s) found\n" #~ msgstr "%d дэструктар(аў) знойдзен(а)\n" #~ msgid "[cannot find %s]" #~ msgstr "[нельга знайсці %s]" #~ msgid "cannot find `%s'" #~ msgstr "нельга знайсці \"%s\"" #~ msgid "redirecting stdout: %s" #~ msgstr "перанакіраванне stdout: %s" #~ msgid "cannot find `nm'" #~ msgstr "нельга знайсці \"nm\"" #~ msgid "pipe" #~ msgstr "канвеер" #~ msgid "unable to open file '%s'" #~ msgstr "немагу адчыніць файл \"%s\"" #~ msgid "not found\n" #~ msgstr "не знойдзена\n" #~ msgid "bad magic number in file '%s'" #~ msgstr "дрэнная магічная лічба ў файле \"%s\"" #~ msgid "cannot find `ldd'" #~ msgstr "не магу знайсці \"ldd\"" #, fuzzy #~ msgid "library lib%s not found" #~ msgstr "Бібліятэка lib%s не знойдзена" #~ msgid "bad magic number" #~ msgstr "дрэнны \"магічны\" нумар" #~ msgid "bad header version" #~ msgstr "дрэнная версія загалоўка" #~ msgid "unsupported version" #~ msgstr "непадтрымліваемая версія" #, fuzzy #~ msgid "missing binary operator" #~ msgstr "прапушчан ініцыялізатар" #~ msgid "%s: Not a directory" #~ msgstr "%s: не дырэкторыя" #, fuzzy #~ msgid "changing search order for system directory \"%s\"" #~ msgstr "немагчыма стварыць дырэкторыю \"%s\"" #, fuzzy #~ msgid "argument missing after %s" #~ msgstr "аргумент для \"%s\" прапушчан" #, fuzzy #~ msgid "output filename specified twice" #~ msgstr "не зададзены ўваходзячыя файлы" #, fuzzy #~ msgid "unknown string token %s\n" #~ msgstr "невядомая назва рэгістра: %s\n" #, fuzzy #~ msgid "unknown escape sequence: '\\%03o'" #~ msgstr "невядомая ESC-паслядоўнасць '\\%c'" #, fuzzy #~ msgid "invalid option %s" #~ msgstr "Нерэчаісны выбар %s" #~ msgid "too many input files" #~ msgstr "вельмі шмат уваходзячых файлаў" #~ msgid "%s:%d: warning: " #~ msgstr "%s:%d: увага: " #~ msgid "%s: warning: " #~ msgstr "%s: увага: " #~ msgid "%s: %s: " #~ msgstr "%s: %s: " #, fuzzy #~ msgid "In member function `%s':" #~ msgstr "у функцыі \"%s\":" #~ msgid "In function `%s':" #~ msgstr "у функцыі \"%s\":" #~ msgid "compilation terminated.\n" #~ msgstr "кампіляцыя завершана.\n" #~ msgid "In file included from %s:%d" #~ msgstr "У файле уключаным з %s:%d" #~ msgid ":\n" #~ msgstr ":\n" #~ msgid "can't get current directory" #~ msgstr "не магу атрымаць бягучую дырэкторыю" #~ msgid "abort in %s, at %s:%d" #~ msgstr "спынена ў %s, ля %s:%d" #~ msgid "invalid %%-code" #~ msgstr "нерэчаісны %%-код" #~ msgid "unused parameter `%s'" #~ msgstr "невыкарыстаемы параметр \"%s\"" #, fuzzy #~ msgid "missing argument to `%s' option" #~ msgstr "аргумент для \"%s\" прапушчан" #, fuzzy #~ msgid "extraneous argument to `%s' option" #~ msgstr "аргумент для \"%s\" прапушчан" #~ msgid "-pipe not supported" #~ msgstr "-pipe не падтрымліваецца" #~ msgid "# %s %.2f %.2f\n" #~ msgstr "# %s %.2f %.2f\n" #~ msgid "Usage: %s [options] file...\n" #~ msgstr "Выкарыстанне: %s [выбары] файл...\n" #~ msgid "Options:\n" #~ msgstr "Выбары:\n" #~ msgid " --help Display this information\n" #~ msgstr " --help Адлюстраваць гэту інфармацыю\n" #~ msgid " -dumpversion Display the version of the compiler\n" #~ msgstr " -dumpversion Адлюстраваць версію кампілятара\n" #, fuzzy #~ msgid " -specs= Override built-in specs with the contents of \n" #~ msgstr " -o <файл> Памясціць вывад у <файл>\n" #~ msgid " -o Place the output into \n" #~ msgstr " -o <файл> Памясціць вывад у <файл>\n" #, fuzzy #~ msgid "argument to `-l' is missing" #~ msgstr "аргумент для \"-x\" прапушчан" #~ msgid "argument to `-x' is missing" #~ msgstr "аргумент для \"-x\" прапушчан" #~ msgid "argument to `-%s' is missing" #~ msgstr "аргумент для \"-%s\" прапушчан" #, fuzzy #~ msgid "invalid specification! Bug in cc" #~ msgstr "Нерэчаісная спецыфікацыя! Памылка ў cc." #~ msgid "%s\n" #~ msgstr "%s\n" #, fuzzy #~ msgid "spec failure: unrecognized spec option '%c'" #~ msgstr "нераспазнаны выбар \"-%s\"" #~ msgid "unrecognized option `-%s'" #~ msgstr "нераспазнаны выбар \"-%s\"" #~ msgid "programs: %s\n" #~ msgstr "праграмы: %s\n" #~ msgid "libraries: %s\n" #~ msgstr "бібліятэкі: %s\n" #~ msgid "" #~ "\n" #~ "For bug reporting instructions, please see:\n" #~ msgstr "" #~ "\n" #~ "Інструкцыі для паведамленняў аб памылках глядзіце тут:\n" #~ msgid "gcc version %s\n" #~ msgstr "версія gcc %s\n" #, fuzzy #~ msgid "no input files" #~ msgstr "няма ўваходзячых файлаў" #~ msgid "%s: %s compiler not installed on this system" #~ msgstr "%s: %s кампілятар не ўсталяваны на гэтай сістэме" #~ msgid "language %s not recognized" #~ msgstr "мова %s не распазнана" #, fuzzy #~ msgid "internal gcc abort" #~ msgstr "унутраная памылка" #, fuzzy #~ msgid " -h, --help Print this help, then exit\n" #~ msgstr " --help Адлюстраваць гэту інфармацыю\n" #, fuzzy #~ msgid " -v, --version Print version number, then exit\n" #~ msgstr " -dumpversion Адлюстраваць версію кампілятара\n" #, fuzzy #~ msgid " -n, --no-output Do not create an output file\n" #~ msgstr " -o <файл> Памясціць вывад у <файл>\n" #, fuzzy #~ msgid "" #~ "\n" #~ "For bug reporting instructions, please see:\n" #~ "%s.\n" #~ msgstr "" #~ "\n" #~ "Інструкцыі для паведамленняў аб памылках глядзіце тут:\n" #~ msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n" #~ msgstr "Copyright (C) 2001 Free Software Foundation, Inc.\n" #~ msgid "can't open %s" #~ msgstr "немагчыма адчыніць %s" #~ msgid "invalid parameter `%s'" #~ msgstr "нерэчаісны парамэтр `%s'" #~ msgid "%s: internal abort\n" #~ msgstr "%s: унутраная памылка (датэрміновае завяршэньне)\n" #~ msgid "%s: compiling `%s'\n" #~ msgstr "%s: кампілюецца \"%s\"\n" #~ msgid "%s: can't delete file `%s': %s\n" #~ msgstr "%s: немагчыма знішчыць файл \"%s\": %s\n" #~ msgid "%s: %d: warning: no extern definition for `%s'\n" #~ msgstr "%s: %d: увага: няма знешняга (extern) абвяшчэння для \"%s\"\n" #~ msgid "%s: can't open file `%s' for reading: %s\n" #~ msgstr "%s: немагчыма адчыніць файл `%s' для чытаньня: %s\n" #~ msgid "" #~ "\n" #~ "%s: error reading input file `%s': %s\n" #~ msgstr "" #~ "\n" #~ "%s: памылка чытаньня файла ўводу `%s': %s\n" #~ msgid "%s: warning: file `%s' already saved in `%s'\n" #~ msgstr "%s: увага: файл \"%s\" ужо запісан у \"%s\"\n" #~ msgid "%s: can't change mode of file `%s': %s\n" #~ msgstr "%s: немагчыма зьмяніць рэжым файла `%s': %s\n" #~ msgid "%s: input file names must have .c suffixes: %s\n" #~ msgstr "%s: файл уводу павінен мець суфікс .c: %s\n" #~ msgid "floating point overflow" #~ msgstr "перапаўненьне плаваючай кропкі" #~ msgid "unknown register name: %s" #~ msgstr "невядомая назва рэгістра: %s" #, fuzzy #~ msgid "could not find a spill register" #~ msgstr "Не выкарыстоўваць рэгістра sb" #, fuzzy #~ msgid "unrecognizable insn:" #~ msgstr "нераспазнаны выбар \"-%s\"" #, fuzzy #~ msgid "duplicate asm operand name '%s'" #~ msgstr "паўторнае абвяшчэнне меткі \"%s\"" #, fuzzy #~ msgid "undefined named operand '%s'" #~ msgstr "нераспазнаны аператар %s" #~ msgid "unused variable `%s'" #~ msgstr "невыкарыстоўваемая пераменная \"%s\"" #~ msgid "size of `%s' is %d bytes" #~ msgstr "памер \"%s\" - %d байт" #~ msgid "size of `%s' is larger than %d bytes" #~ msgstr "памер \"%s\" больш чам %d байт" #~ msgid "Enable exception handling" #~ msgstr "Уключыць апрацоўку выключэньняў" #~ msgid "Insert stack checking code into the program" #~ msgstr "Уключаць код правэркі стэку ў праграму" #~ msgid "Enable SSA optimizations" #~ msgstr "Уключаць SSA аптымізацыю" #, fuzzy #~ msgid "Do not recognize any built in functions" #~ msgstr "Не генерыраваць сімвальныя інструкцыі" #, fuzzy #~ msgid "invalid option `%s'" #~ msgstr "Нерэчаісны выбар \"%s\"" #, fuzzy #~ msgid "internal error: %s" #~ msgstr "Унутраная памылка: %s" #~ msgid "" #~ "\n" #~ "Language specific options:\n" #~ msgstr "" #~ "\n" #~ "Выбары, спецыфічныя для мовы:\n" #~ msgid "" #~ "\n" #~ " Options for %s:\n" #~ msgstr "" #~ "\n" #~ " Выбары для %s:\n" #, fuzzy #~ msgid "unrecognized option `%s'" #~ msgstr "нераспазнаны выбар \"-%s\"" #, fuzzy #~ msgid "-Wid-clash-LEN is no longer supported" #~ msgstr "-pipe не падтрымліваецца." #~ msgid "`%s': unknown or unsupported -g option" #~ msgstr "\"%s\" : невядомы ці непадтрымліваемы выбар -g" #~ msgid "invalid --param option: %s" #~ msgstr "нерэчаісны выбар --param : %s" #~ msgid "" #~ "%s%s%s version %s (%s)\n" #~ "%s\tcompiled by GNU C version %s.\n" #~ "%s%s%s version %s (%s) compiled by CC.\n" #~ msgstr "" #~ "%s%s%s версія %s (%s)\n" #~ "%s\tзкампілявана GNU C версія %s.\n" #~ "%s%s%s версія %s (%s) зкампілявана CC.\n" #~ msgid "options enabled: " #~ msgstr "выбары ўключаны:" #~ msgid "can't open %s for writing" #~ msgstr "немагчыма адчыніць %s для запісу" #, fuzzy #~ msgid "ignoring command line option '%s'" #~ msgstr "Нераспазнаны выбар \"%s\"" #, fuzzy #~ msgid "-ffunction-sections not supported for this target" #~ msgstr "атрыбуты секцыі не падтрымліваюцца для гэтай мэты" #, fuzzy #~ msgid "-fdata-sections not supported for this target" #~ msgstr "атрыбуты секцыі не падтрымліваюцца для гэтай мэты" #, fuzzy #~ msgid "-fprefetch-loop-arrays not supported for this target" #~ msgstr "атрыбуты секцыі не падтрымліваюцца для гэтай мэты" #~ msgid "error writing to %s" #~ msgstr "памылка запісу ў %s" #, fuzzy #~ msgid "invalid character constant in #if" #~ msgstr "сімвальная канстанта вельмі доўгая" #~ msgid "usage: %s [switches] input output" #~ msgstr "выкарыстаньне: %s [выключальнікі] увод вывад" #~ msgid "#error%.*s" #~ msgstr "#памылка%.*s" #~ msgid "#warning%.*s" #~ msgstr "#увага%.*s" #~ msgid "unbalanced #endif" #~ msgstr "незбалансаваны #endif" #~ msgid "invalid register name for `%s'" #~ msgstr "нерэчаісная назва рэгістра `%s'" #~ msgid "optimization turned on" #~ msgstr "аптымізацыя уключана" #~ msgid "optimization turned off" #~ msgstr "аптымізацыя выключана" #~ msgid "invalid %%Q value" #~ msgstr "дрэннае %%Q значэнне" #~ msgid "invalid %%C value" #~ msgstr "нерэчаіснае значэньне %%C" #~ msgid "invalid %%N value" #~ msgstr "нерэчаіснае значэньне %%N" #~ msgid "invalid %%M value" #~ msgstr "нерэчаіснае значэньне %%M" #~ msgid "invalid %%m value" #~ msgstr "нерэчаіснае значэньне %%m" #~ msgid "invalid %%L value" #~ msgstr "нерэчаіснае значэньне %%L" #~ msgid "invalid %%O value" #~ msgstr "нерэчаіснае значэньне %%O" #~ msgid "invalid %%P value" #~ msgstr "нерэчаіснае значэньне %%P" #~ msgid "invalid %%V value" #~ msgstr "нерэчаіснае значэньне %%V" #, fuzzy #~ msgid "-f%s ignored for Unicos/Mk (not supported)" #~ msgstr "-pipe не падтрымліваецца." #, fuzzy #~ msgid "-mieee not supported on Unicos/Mk" #~ msgstr "-pipe не падтрымліваецца" #~ msgid "invalid %%H value" #~ msgstr "нерэчаіснае значэньне %%H" #, fuzzy #~ msgid "invalid %%J value" #~ msgstr "дрэннае %%Q значэнне" #~ msgid "invalid %%r value" #~ msgstr "нерэчаіснае значэньне %%r" #~ msgid "invalid %%R value" #~ msgstr "нерэчаіснае значэньне %%R" #~ msgid "invalid %%h value" #~ msgstr "нерэчаіснае значэньне %%h" #~ msgid "invalid %%U value" #~ msgstr "нерэчаіснае значэньне %%U" #~ msgid "invalid %%s value" #~ msgstr "нерэчаіснае значэньне %%v" #~ msgid "invalid %%E value" #~ msgstr "нерэчаіснае значэньне %%E" #~ msgid "invalid %%xn code" #~ msgstr "нерэчаіснае значэньне %%xn" #~ msgid "Use hardware fp" #~ msgstr "Выкарыстоўваць апаратную плаваючую кропку" #~ msgid "Do not use hardware fp" #~ msgstr "Не выкарыстоўваць апаратную плаваючую кропку" #, fuzzy #~ msgid "argument of `%s' attribute is not a string constant" #~ msgstr "аргумент `__builtin_args_info' павінен быць канстантай" #, fuzzy #~ msgid "invalid operand to %%R code" #~ msgstr "нерэчаісны %%-код" #, fuzzy #~ msgid "invalid operand to %%H/%%L code" #~ msgstr "нерэчаісны %%-код" #, fuzzy #~ msgid "invalid operand to %%U code" #~ msgstr "нерэчаісны %%-код" #, fuzzy #~ msgid "invalid operand to %%V code" #~ msgstr "нерэчаісны %%-код" #, fuzzy #~ msgid "target CPU does not support THUMB instructions" #~ msgstr "ISO C не падтрымлівае комлексныя цэлалікавыя тыпы" #, fuzzy #~ msgid "`%s' attribute only applies to functions" #~ msgstr "\"%s\" звычайна функцыя" #, fuzzy #~ msgid "invalid insn:" #~ msgstr "Нерэчаісны выбар %s" #~ msgid "internal error: bad register: %d" #~ msgstr "унутраная памылка: дрэнны рэгістр: %d" #~ msgid "unrecognized address" #~ msgstr "нераспазнаны адрас" #, fuzzy #~ msgid "unrecognized supposed constant" #~ msgstr "нераспазнаны выбар \"-%s\"" #, fuzzy #~ msgid "Do not use condition codes from normal instructions" #~ msgstr "Не генерыраваць сімвальныя інструкцыі" #, fuzzy #~ msgid "Generate code for the specified chip or CPU version" #~ msgstr "Генерыраваць код для дадзенага ЦП" #, fuzzy #~ msgid "Do not make adjacent short instructions parallel" #~ msgstr "Не генерыраваць сімвальныя інструкцыі" #~ msgid "invalid mode for gen_tst_reg" #~ msgstr "нерэчаісны рэжым для gen_tst_reg" #, fuzzy #~ msgid "Don't pass parameters in registers" #~ msgstr "Не выкарыстоўваць рэгістра sb" #, fuzzy #~ msgid "Generate code for near calls" #~ msgstr "Генерыраваць код для Intel as" #, fuzzy #~ msgid "Don't generate code for near calls" #~ msgstr "Генерыраваць код для Intel as" #, fuzzy #~ msgid "Generate code for near jumps" #~ msgstr "Генерыраваць код для Intel as" #, fuzzy #~ msgid "Don't generate code for near jumps" #~ msgstr "Генерыраваць код для Intel as" #, fuzzy #~ msgid "Generate code for a bit-manipulation unit" #~ msgstr "Генерыраваць код для Intel as" #, fuzzy #~ msgid "Don't generate code for a bit-manipulation unit" #~ msgstr "Не генерыраваць сімвальныя інструкцыі" #, fuzzy #~ msgid "Generate code for memory map1" #~ msgstr "Генерыраваць код для Intel as" #, fuzzy #~ msgid "Generate code for memory map2" #~ msgstr "Генерыраваць код для Intel as" #, fuzzy #~ msgid "Generate code for memory map3" #~ msgstr "Генерыраваць код для Intel as" #, fuzzy #~ msgid "Generate code for memory map4" #~ msgstr "Генерыраваць код для Intel as" #, fuzzy #~ msgid "-ms2600 is used without -ms" #~ msgstr "-ms2600 ужываецца без -ms." #~ msgid "Do not generate char instructions" #~ msgstr "Не генерыраваць сімвальныя інструкцыі" #, fuzzy #~ msgid "argument to `%s' attribute larger than %d" #~ msgstr "памер \"%s\" больш чам %d байт" #, fuzzy #~ msgid "invalid operand code `%c'" #~ msgstr "Нерэчаісны выбар \"%s\"" #, fuzzy #~ msgid "unknown insn mode" #~ msgstr "невядомы рэжым машыны \"%s\"" #, fuzzy #~ msgid "`%s' attribute only applies to variables" #~ msgstr "\"%s\" атрыбут ігнарыруецца" #~ msgid "Create GUI application" #~ msgstr "Стварыць GUI прыдатак" #~ msgid "Create console application" #~ msgstr "Стварыць кансольны прыдатак" #~ msgid "Generate code for a DLL" #~ msgstr "Стварыць код для DLL" #~ msgid "Generate code for given CPU" #~ msgstr "Генерыраваць код для дадзенага ЦП" #~ msgid "Use given assembler dialect" #~ msgstr "Выкарыстоўвываць зададзены дыялект асэмблера" #~ msgid "Generate ELF output" #~ msgstr "Стварыць ELF-вывад" #~ msgid "Generate code for GNU as" #~ msgstr "Генерыраваць код для GNU as" #~ msgid "Generate code for Intel as" #~ msgstr "Генерыраваць код для Intel as" #~ msgid "Generate code for GNU ld" #~ msgstr "Генерыраваць код для GNU ld" #~ msgid "Generate code for Intel ld" #~ msgstr "Генерыраваць код для Intel ld" #~ msgid "Generate code without GP reg" #~ msgstr "Генерыраваць код без GP reg" #, fuzzy #~ msgid "invalid argument of `%s' attribute" #~ msgstr "нявернае выкарыстанне \"restict\"" #, fuzzy #~ msgid "invalid operand to %%s code" #~ msgstr "нерэчаісны %%-код" #, fuzzy #~ msgid "invalid operand to %%p code" #~ msgstr "нерэчаісны %%-код" #, fuzzy #~ msgid "invalid operand to %%T/%%B code" #~ msgstr "нерэчаісны %%-код" #, fuzzy #~ msgid "invalid operand to %%N code" #~ msgstr "нерэчаісны %%-код" #~ msgid "bad address" #~ msgstr "дрэнны адрас" #, fuzzy #~ msgid "lo_sum not of register" #~ msgstr "Не выкарыстоўваць рэгістра sb" #, fuzzy #~ msgid "invalid register in the instruction" #~ msgstr "нявернае выкарыстанне \"restict\"" #, fuzzy #~ msgid "invalid rotate insn" #~ msgstr "Нерэчаісны выбар %s" #~ msgid "Generate code for a 68020" #~ msgstr "Ствараць код для 68020" #~ msgid "Generate code for a 68000" #~ msgstr "Ствараць код для 68000" #, fuzzy #~ msgid "Do not use the bit-field instructions" #~ msgstr "Не генерыраваць сімвальныя інструкцыі" #, fuzzy #~ msgid "Generate code for a Sun FPA" #~ msgstr "Стварыць код для DLL" #, fuzzy #~ msgid "Do not generate code for a Sun FPA" #~ msgstr "Стварыць код для DLL" #, fuzzy #~ msgid "Generate code for a Sun Sky board" #~ msgstr "Стварыць код для DLL" #~ msgid "Generate code for a 68881" #~ msgstr "Ствараць код для 68881" #~ msgid "Generate code for a 68030" #~ msgstr "Ствараць код для 68030" #~ msgid "Generate code for a 68040" #~ msgstr "Ствараць код для 68040" #~ msgid "Generate code for a 68060" #~ msgstr "Ствараць код для 68060" #~ msgid "Generate code for a 520X" #~ msgstr "Ствараць код для 520X" #~ msgid "Generate code for a 68851" #~ msgstr "Ствараць код для 68851" #~ msgid "Do no generate code for a 68851" #~ msgstr "Не ствараць код для 68851" #~ msgid "Generate code for a 68302" #~ msgstr "Ствараць код для 68302" #~ msgid "Generate code for a 68332" #~ msgstr "Ствараць код для 68332" #~ msgid "Generate code for a cpu32" #~ msgstr "Ствараць код для цп32" #~ msgid "invalid %%x/X value" #~ msgstr "нерэчаіснае значэньне %%x/X" #~ msgid "invalid %%o value" #~ msgstr "нерэчаіснае значэньне %%o" #, fuzzy #~ msgid "invalid %%s/S value" #~ msgstr "дрэннае %%Q значэнне" #, fuzzy #~ msgid "invalid %%P operand" #~ msgstr "нерэчаісны %%-код" #, fuzzy #~ msgid "invalid %%D value" #~ msgstr "дрэннае %%Q значэнне" #, fuzzy #~ msgid "invalid option `-mshort-data-%s'" #~ msgstr "Нерэчаісны выбар \"%s\"" #, fuzzy #~ msgid "invalid option `-mstack-increment=%s'" #~ msgstr "Нерэчаісны выбар \"%s\"" #, fuzzy #~ msgid "invalid option `entry%s'" #~ msgstr "Нерэчаісны выбар \"%s\"" #, fuzzy #~ msgid "can't rewind temp file" #~ msgstr "немагчыма стварыць часовы файл" #, fuzzy #~ msgid "can't write to output file" #~ msgstr "не магу запісаць ў %s" #, fuzzy #~ msgid "can't read from temp file" #~ msgstr "не магу прачытаць з %s" #, fuzzy #~ msgid "can't close temp file" #~ msgstr "немагчыма зачыніць уваходзячы файл %s" #~ msgid "Use GNU as" #~ msgstr "Выкарыстоўваць GNU як" #~ msgid "Use symbolic register names" #~ msgstr "Ужываць сімвалічныя назвы рэгістраў" #~ msgid "Don't use symbolic register names" #~ msgstr "Не ўжываць сімвалічныя назва рэгістраў" #~ msgid "Output compiler statistics" #~ msgstr "Вывесці статыстыку капілятара" #~ msgid "Don't output compiler statistics" #~ msgstr "Не выводзіць статыстыку кампілятара" #~ msgid "Use hardware floating point" #~ msgstr "Выкарыстоўваць апаратную \"плаваючую кропку\"" #~ msgid "Use 64-bit FP registers" #~ msgstr "Выкарыстоўваць 64-бітныя FP-рэгістры" #~ msgid "Use 32-bit FP registers" #~ msgstr "Выкарыстоўваць 32-бітныя FP-рэгістры" #~ msgid "Use 64-bit general registers" #~ msgstr "Выкарыстоўваць 64-бітныя галоўныя рэгістры" #~ msgid "Use 32-bit general registers" #~ msgstr "Выкарыстоўваць 32-бітныя галоўныя рэгістры" #~ msgid "Use Irix PIC" #~ msgstr "Выкарыстоўваць Irix PIC" #~ msgid "Don't use Irix PIC" #~ msgstr "Не выкарыстоўваць Irix PIC" #~ msgid "Use OSF PIC" #~ msgstr "Выкарыстоўваць OSF PIC" #~ msgid "Don't use OSF PIC" #~ msgstr "Не выкарыстоўваць OSF PIC" #~ msgid "Optimize for 3900" #~ msgstr "Аптымізаваць для 3900" #~ msgid "Optimize for 4650" #~ msgstr "Аптымізаваць для 4650" #, fuzzy #~ msgid "-f%s not supported: ignored" #~ msgstr "-pipe не падтрымліваецца" #~ msgid "Target the AM33 processor" #~ msgstr "Мэта - AM33 працэсар" #~ msgid "Don't use hardware fp" #~ msgstr "Не выкарыстоўваць апаратную fp" #~ msgid "Optimize for 32532 cpu" #~ msgstr "Аптымізаваць для 32532 ЦП" #~ msgid "Optimize for 32332 cpu" #~ msgstr "Аптымізаваць для 32332 ЦП" #~ msgid "Optimize for 32032" #~ msgstr "Аптымізаваць для 32032 ЦП" #~ msgid "Do not use register sb" #~ msgstr "Не выкарыстоўваць рэгістра sb" #, fuzzy #~ msgid "Do not use bit-field instructions" #~ msgstr "Не генерыраваць сімвальныя інструкцыі" #~ msgid "Use 32 bit int" #~ msgstr "Выкарыстоўваць 32-х бітны int" #~ msgid "Use 16 bit int" #~ msgstr "Выкарыстоўваць 16-ці бітны int" #~ msgid "Use 32 bit float" #~ msgstr "Выкарыстоўваць 32-х бітны float" #~ msgid "Use 64 bit float" #~ msgstr "Выкарыстоўваць 64-х бітны float" #~ msgid "Use UNIX assembler syntax" #~ msgstr "Выкарыстоўваць UNIX-сінтакс для асэмблера" #~ msgid "Use DEC assembler syntax" #~ msgstr "Выкарыстоўваць DEC-сінтакс для асэмблера" #, fuzzy #~ msgid "unknown ABI specified: '%s'" #~ msgstr "невядомы рэжым машыны \"%s\"" #, fuzzy #~ msgid "argument 1 of __builtin_altivec_predicate must be a constant" #~ msgstr "аргумент `__builtin_args_info' павінен быць канстантай" #, fuzzy #~ msgid "argument 1 of __builtin_altivec_predicate is out of range" #~ msgstr "аргумент `__builtin_args_info' выйшаў за межы" #, fuzzy #~ msgid "argument 3 of `%s' must be a 2-bit literal" #~ msgstr "першым аргументам \"%s\" павінен быць \"int\"" #~ msgid "Don't use AltiVec instructions" #~ msgstr "Не выкарыстоўваць інструкцыі AltiVec" #~ msgid "Don't use EABI" #~ msgstr "Не выкарыстоўваць EABI" #~ msgid "Use alternate register names" #~ msgstr "Выкарыстоўвываць альтэрнатыўныя назвы рэгістраў" #~ msgid "Don't use alternate register names" #~ msgstr "Не выкарыстоўвываць альтэрнатыўныя назвы рэгістраў" #, fuzzy #~ msgid "Don't use bras" #~ msgstr "Не выкарыстоўваць Irix PIC" #, fuzzy #~ msgid "__builtin_saveregs not supported by this subtarget" #~ msgstr "__buitin_saveregs не падтрымліваецца гэтай мэтай" #, fuzzy #~ msgid "Profiling is not supported on this target." #~ msgstr "__buitin_saveregs не падтрымліваецца гэтай мэтай" #~ msgid "invalid %%Y operand" #~ msgstr "нерэчаісны %%Y аперанд" #~ msgid "invalid %%A operand" #~ msgstr "нерэчаісны %%A аперанд" #~ msgid "invalid %%B operand" #~ msgstr "нерэчаісны %%B аперанд" #~ msgid "invalid %%c operand" #~ msgstr "нерэчаісны %%c аперанд" #~ msgid "invalid %%C operand" #~ msgstr "нерэчаісны %%C аперанд" #~ msgid "invalid %%d operand" #~ msgstr "нерэчаісны %%d аперанд" #~ msgid "invalid %%D operand" #~ msgstr "нерэчаісны %%D аперанд" #~ msgid "invalid %%f operand" #~ msgstr "нерэчаісны %%f аперанд" #~ msgid "Optimize for Cypress processors" #~ msgstr "Аптымізацыя для Cypress працэсараў" #~ msgid "Optimize for SparcLite processors" #~ msgstr "Аптымізацыя для SparcLite працэсараў" #~ msgid "Optimize for F930 processors" #~ msgstr "Аптымізацыя для F930 працэсараў" #~ msgid "Optimize for F934 processors" #~ msgstr "Аптымізацыя для F934 працэсараў" #~ msgid "Optimize for SuperSparc processors" #~ msgstr "Аптымізацыя для SuperSparc працэсараў" #~ msgid "unrecognized section name \"%s\"" #~ msgstr "нераспазнаная назва сэкцыі \"%s\"" #~ msgid "%s=%s is too large" #~ msgstr "%s=%s вельмі вялікі" #~ msgid "invalid mask" #~ msgstr "нерэчаісная маска" #~ msgid "invalid address" #~ msgstr "нерэчаісны адрас" #, fuzzy #~ msgid "no register in address" #~ msgstr "невядомая назва рэгістра: %s" #, fuzzy #~ msgid "Do not use the Xtensa boolean register option" #~ msgstr "Не ўжываць сімвалічныя назва рэгістраў" #, fuzzy #~ msgid "Use the Xtensa floating-point unit" #~ msgstr "Выкарыстоўваць апаратную \"плаваючую кропку\"" #, fuzzy #~ msgid "%s for `%T %s' operator" #~ msgstr "%s перад знакам \"%s\"" #, fuzzy #~ msgid "%s for `%T %s %T' operator" #~ msgstr "%s перад знакам \"%s\"" #, fuzzy #~ msgid "%s for `%s %T' operator" #~ msgstr "%s перад знакам \"%s\"" #, fuzzy #~ msgid "duplicate enum value `%D'" #~ msgstr "паўтарэнне \"volatile\"" #, fuzzy #~ msgid "duplicate nested type `%D'" #~ msgstr "паўтарэнне \"restrict\"" #, fuzzy #~ msgid "duplicate member `%D'" #~ msgstr "паўтарэнне \"%s\"" #, fuzzy #~ msgid "`%D' invalid in `%T'" #~ msgstr "Нерэчаісны выбар \"%s\"" #, fuzzy #~ msgid "`%D' invalid in `%#T'" #~ msgstr "Нерэчаісны выбар \"%s\"" #~ msgid "previous definition of `%#T'" #~ msgstr "папярэдняе вызначэньне `%#T'" #, fuzzy #~ msgid "bit-field `%#D' with non-integral type" #~ msgstr "бітавае поле \"%s\" мае нерэчаісны тып" #, fuzzy #~ msgid "field `%D' invalidly declared method type" #~ msgstr "бітавае поле \"%s\" мае нерэчаісны тып" #, fuzzy #~ msgid "field `%D' invalidly declared offset type" #~ msgstr "бітавае поле \"%s\" мае нерэчаісны тып" #, fuzzy #~ msgid "field `%D' declared static in union" #~ msgstr "\"%s\" не абвешчан (першае выкарыстанне ў гэтай функцыі)" #~ msgid "declaration of `%#D'" #~ msgstr "абвяшчэньне `%#D'" #~ msgid "converting from `%T' to `%T'" #~ msgstr "пераўтварэньне з `%T' у `%T'" #~ msgid "conflicts with previous declaration `%#D'" #~ msgstr "канфлікт з папярэднім абвяшчэньнем `%#D'" #~ msgid "label `%D' used but not defined" #~ msgstr "адмеціна `%D' выкарыстоўвываецца, але ня вызначана" #~ msgid "label `%D' defined but not used" #~ msgstr "адмеціна `%D' вызначана, але не выкарыстоўваецца" #~ msgid "previous declaration of `%D'" #~ msgstr "папярэдняе абвяшчэньне `%D'" #, fuzzy #~ msgid "shadowing %s function `%#D'" #~ msgstr "у функцыі \"%s\":" #, fuzzy #~ msgid "conflicts with built-in declaration `%#D'" #~ msgstr "паўторнае абвяшчэнне меткі \"%s\"" #~ msgid "new declaration `%#D'" #~ msgstr "новае абвяшчэньне `%#D'" #, fuzzy #~ msgid "ambiguates built-in declaration `%#D'" #~ msgstr "паўторнае абвяшчэнне меткі \"%s\"" #~ msgid "previous declaration of `%#D'" #~ msgstr "папярэдняе абвяшчэньне `%#D'" #~ msgid "declaration of template `%#D'" #~ msgstr "абвяшчэньне шаблёну `%#D'" #, fuzzy #~ msgid "ambiguates old declaration `%#D'" #~ msgstr "паўторнае абвяшчэнне меткі \"%s\"" #, fuzzy #~ msgid "previous declaration `%#D' here" #~ msgstr "няма папярэдняга аб'яўлення для \"%s\"" #, fuzzy #~ msgid "previous declaration as `%#D'" #~ msgstr "няма папярэдняга аб'яўлення для \"%s\"" #, fuzzy #~ msgid "prototype for `%#D'" #~ msgstr "няма папярэдняга прататыпа для \"%s\"" #, fuzzy #~ msgid "previous declaration of `%#D' with %L linkage" #~ msgstr "няма папярэдняга аб'яўлення для \"%s\"" #, fuzzy #~ msgid "after previous specification in `%#D'" #~ msgstr "няма папярэдняга аб'яўлення для \"%s\"" #, fuzzy #~ msgid "previous non-inline declaration here" #~ msgstr "няма папярэдняга аб'яўлення для \"%s\"" #, fuzzy #~ msgid "than previous declaration `%F'" #~ msgstr "няма папярэдняга аб'яўлення для \"%s\"" #, fuzzy #~ msgid "`%#D' used prior to declaration" #~ msgstr "\"%s\" - гэта не пачатак дэкларацыі" #, fuzzy #~ msgid "redeclaration of `wchar_t' as `%T'" #~ msgstr "няма папярэдняга аб'яўлення для \"%s\"" #, fuzzy #~ msgid "invalid redeclaration of `%D'" #~ msgstr "Нерэчаіснае абвяшчэнне" #~ msgid "as `%D'" #~ msgstr "як `%D'" #, fuzzy #~ msgid "previous external decl of `%#D'" #~ msgstr "няма папярэдняга аб'яўлення для \"%s\"" #, fuzzy #~ msgid "global declaration `%#D'" #~ msgstr "паўторнае абвяшчэнне меткі \"%s\"" #, fuzzy #~ msgid "`%#D' hides constructor for `%#T'" #~ msgstr "дэструктару неабходны \"%#D\"" #, fuzzy #~ msgid "`%#D' conflicts with previous using declaration `%#D'" #~ msgstr "секцыя \"%s\" канфліктуе з папярэдняй дэкларацыяй" #, fuzzy #~ msgid "previous non-function declaration `%#D'" #~ msgstr "няма папярэдняга аб'яўлення для \"%s\"" #, fuzzy #~ msgid "conflicts with function declaration `%#D'" #~ msgstr "секцыя \"%s\" канфліктуе з папярэдняй дэкларацыяй" #, fuzzy #~ msgid "implicit declaration of function `%#D'" #~ msgstr "няма папярэдняга аб'яўлення для \"%s\"" #~ msgid " from here" #~ msgstr " адсюль" #, fuzzy #~ msgid " skips initialization of `%#D'" #~ msgstr "ініцыялізацыя" #, fuzzy #~ msgid "duplicate label `%D'" #~ msgstr "паўтарэнне \"%s\"" #~ msgid "invalid use of `%D'" #~ msgstr "нерэчаіснае выкарыстаньне `%D'" #, fuzzy #~ msgid "typedef `%D' is initialized" #~ msgstr "параметр \"%s\" ініцыялізаваны" #, fuzzy #~ msgid "variable `%#D' has initializer but incomplete type" #~ msgstr "\"%s\" мае незавершаны тып" #, fuzzy #~ msgid "elements of array `%#D' have incomplete type" #~ msgstr "\"%s\" мае незавершаны тып" #, fuzzy #~ msgid "cannot initialize `%T' from `%T'" #~ msgstr "не магу ініцыялізаваць сяброўскую функцыю \"%s\"" #~ msgid "array size missing in `%D'" #~ msgstr "прапушчан памер масіва ў `%D'" #~ msgid "zero-size array `%D'" #~ msgstr "нулявы памер масіва `%D'" #, fuzzy #~ msgid "uninitialized const `%D'" #~ msgstr "не магу ініцыялізаваць сяброўскую функцыю \"%s\"" #, fuzzy #~ msgid "`%D' has incomplete type" #~ msgstr "\"%s\" мае незавершаны тып" #, fuzzy #~ msgid "cannot initialize `%D' to namespace `%D'" #~ msgstr "не магу ініцыялізаваць сяброўскую функцыю \"%s\"" #, fuzzy #~ msgid "shadowing previous type declaration of `%#D'" #~ msgstr "няма папярэдняга аб'яўлення для \"%s\"" #, fuzzy #~ msgid "`%D' declared with an exception specification" #~ msgstr "\"%s\" не абвешчан (першае выкарыстанне ў гэтай функцыі)" #~ msgid "`main' must return `int'" #~ msgstr "`main' павінна вяртаць `int'" #~ msgid "size of array `%D' has non-integer type" #~ msgstr "памер масіва `%D' не цэлалікавы тып" #, fuzzy #~ msgid "size of array has non-integer type" #~ msgstr "памер масіва \"%s\" адмоўны" #~ msgid "size of array `%D' is negative" #~ msgstr "памер масіва `%D' - адмоўны" #~ msgid "size of array is negative" #~ msgstr "адмоўны памер масіва " #, fuzzy #~ msgid "ISO C++ forbids zero-size array" #~ msgstr "ISO C не дазваляе дэкларацыі метак (label)" #, fuzzy #~ msgid "size of array `%D' is not an integral constant-expression" #~ msgstr "памер масіва \"%s\" адмоўны" #, fuzzy #~ msgid "ISO C++ forbids variable-size array" #~ msgstr "ISO C не дазваляе дэкларацыі метак (label)" #~ msgid "invalid declarator" #~ msgstr "нерэчаісны абвяшчальнік" #~ msgid "multiple declarations `%T' and `%T'" #~ msgstr "неаднолькавае абвяшчэньне `%T' і `%T'" #~ msgid "ISO C++ does not support `long long'" #~ msgstr "ISO C++ не падтрымлівае \"long long\"" #, fuzzy #~ msgid "ISO C++ forbids declaration of `%s' with no type" #~ msgstr "ISO C не дазваляе дэкларацыі метак (label)" #, fuzzy #~ msgid "size of member `%D' is not constant" #~ msgstr "тып параметра \"%s\" не аб'яўлены" #~ msgid "can't initialize friend function `%s'" #~ msgstr "не магу ініцыялізаваць сяброўскую функцыю \"%s\"" #~ msgid "virtual functions cannot be friends" #~ msgstr "віртуальныя функцыі не могуць быць сяброўскімі" #, fuzzy #~ msgid "can't define friend function `%s' in a local class definition" #~ msgstr "не магу ініцыялізаваць сяброўскую функцыю \"%s\"" #, fuzzy #~ msgid "template parameters cannot be friends" #~ msgstr "віртуальныя функцыі не могуць быць сяброўскімі" #~ msgid "invalid use of `::'" #~ msgstr "нерэчаіснае выкарыстаньне `::'" #, fuzzy #~ msgid "function `%D' cannot be declared friend" #~ msgstr "віртуальныя функцыі не могуць быць сяброўскімі" #, fuzzy #~ msgid "function `%D' declared virtual inside a union" #~ msgstr "\"%s\" не абвешчан (першае выкарыстанне ў гэтай функцыі)" #, fuzzy #~ msgid "field `%D' has incomplete type" #~ msgstr "\"%s\" мае незавершаны тып" #, fuzzy #~ msgid "name `%T' has incomplete type" #~ msgstr "\"%s\" мае незавершаны тып" #~ msgid "default argument for `%#D' has type `%T'" #~ msgstr "звычайны аргумэнт для `%#D' мае тып `%T'" #, fuzzy #~ msgid "parameter `%D' invalidly declared method type" #~ msgstr "тып параметра \"%s\" не аб'яўлены" #, fuzzy #~ msgid "parameter `%D' invalidly declared offset type" #~ msgstr "тып параметра \"%s\" не аб'яўлены" #, fuzzy #~ msgid "use of enum `%#D' without previous declaration" #~ msgstr "секцыя \"%s\" канфліктуе з папярэдняй дэкларацыяй" #~ msgid "previous definition here" #~ msgstr "папярэдняе вызначэньне" #, fuzzy #~ msgid "return type `%#T' is incomplete" #~ msgstr "вяртаемы тып \"%s\" не \"int\"" #, fuzzy #~ msgid "semicolon missing after declaration of `%#T'" #~ msgstr "Не магу знайсці дэкларацыю інтэрфейса для \"%s\"" #, fuzzy #~ msgid "`%D' implicitly declared before its definition" #~ msgstr "\"%s\" не абвешчан (першае выкарыстанне ў гэтай функцыі)" #, fuzzy #~ msgid "parameter `%D' declared void" #~ msgstr "тып параметра \"%s\" не аб'яўлены" #, fuzzy #~ msgid "duplicate type qualifiers in %s declaration" #~ msgstr "паўторнае абвяшчэнне меткі \"%s\"" #, fuzzy #~ msgid "deleting `%T' is undefined" #~ msgstr "метка \"%s\" ужываецца, але не вызначана" #, fuzzy #~ msgid "template declaration of `%#D'" #~ msgstr "пустое абвяшчэнне" #, fuzzy #~ msgid "invalid data member initialization" #~ msgstr "нерэчаісны ініцыялізатар" #, fuzzy #~ msgid "initializer specified for non-member function `%D'" #~ msgstr "не магу ініцыялізаваць сяброўскую функцыю \"%s\"" #, fuzzy #~ msgid "invalid initializer for virtual method `%D'" #~ msgstr "нерэчаісны ініцыялізатар" #, fuzzy #~ msgid "use of `%D' is ambiguous" #~ msgstr "памер \"%s\" - %d байт" #, fuzzy #~ msgid "unknown namespace `%D'" #~ msgstr "невядомы рэжым машыны \"%s\"" #, fuzzy #~ msgid "namespace `%D' not allowed in using-declaration" #~ msgstr "\"%s\" - гэта не пачатак дэкларацыі" #, fuzzy #~ msgid "`%D' is already a friend of class `%T'" #~ msgstr "не знойдзен клас \"%s\"" #, fuzzy #~ msgid "previous friend declaration of `%D'" #~ msgstr "няма папярэдняга аб'яўлення для \"%s\"" #, fuzzy #~ msgid "template parameter type `%T' declared `friend'" #~ msgstr "тып параметра \"%s\" не аб'яўлены" #, fuzzy #~ msgid "member initializers for `%#D'" #~ msgstr "complex нерэчаісны для \"%s\"" #, fuzzy #~ msgid "base initializers for `%#T'" #~ msgstr "не магу ініцыялізаваць сяброўскую функцыю \"%s\"" #, fuzzy #~ msgid "base class `%T' already initialized" #~ msgstr "Клас \"%s\" ужо існуе" #, fuzzy #~ msgid "bad array initializer" #~ msgstr "нерэчаісны ініцыялізатар" #, fuzzy #~ msgid "`%T' is not an aggregate type" #~ msgstr "\"%s\" мае незавершаны тып" #, fuzzy #~ msgid "invalid use of non-static field `%D'" #~ msgstr "нявернае выкарыстанне \"restict\"" #, fuzzy #~ msgid "invalid use of member `%D'" #~ msgstr "нявернае выкарыстанне \"restict\"" #, fuzzy #~ msgid "no method `%T::%D'" #~ msgstr "у метадзе \"%s\":" #, fuzzy #~ msgid "can't find class$" #~ msgstr "Не магу знайсці клас \"%s\"" #, fuzzy #~ msgid "semicolon missing after declaration of `%T'" #~ msgstr "Не магу знайсці дэкларацыю інтэрфейса для \"%s\"" #, fuzzy #~ msgid "`%D' not defined" #~ msgstr "YYDEBUG не вызначан." #, fuzzy #~ msgid "`%D' was not declared in this scope" #~ msgstr "\"%s\" не абвешчан (першае выкарыстанне ў гэтай функцыі)" #, fuzzy #~ msgid "`%D' undeclared (first use this function)" #~ msgstr "\"%s\" не абвешчан (першае выкарыстанне ў гэтай функцыі)" #, fuzzy #~ msgid "`::%D' undeclared (first use here)" #~ msgstr "\"%s\" не абвешчан (першае выкарыстанне ў гэтай функцыі)" #, fuzzy #~ msgid "no type `%D' in `%T'" #~ msgstr "вяртаемы тып \"%s\" не \"int\"" #, fuzzy #~ msgid "invalid member template declaration `%D'" #~ msgstr "паўторнае абвяшчэнне меткі \"%s\"" #, fuzzy #~ msgid "`%D' is not a function template" #~ msgstr "\"%s\" звычайна функцыя" #, fuzzy #~ msgid "no default argument for `%D'" #~ msgstr "нехапае аргументаў у функцыі \"%s\"" #, fuzzy #~ msgid "`%T' is not a template type" #~ msgstr "\"%s\" мае незавершаны тып" #~ msgid "previous declaration `%D'" #~ msgstr "папярэдняе абвяшчэньне `%D'" #, fuzzy #~ msgid "template parameter `%#D'" #~ msgstr "невыкарыстаемы параметр \"%s\"" #, fuzzy #~ msgid "provided for `%D'" #~ msgstr "дэструктару неабходны \"%#D\"" #, fuzzy #~ msgid "template argument %d is invalid" #~ msgstr "параметр \"%s\" ініцыялізаваны" #, fuzzy #~ msgid "for template declaration `%D'" #~ msgstr "пустое абвяшчэнне" #~ msgid "invalid parameter type `%T'" #~ msgstr "нерэчаісны тып парамэтра `%T'" #~ msgid "in declaration `%D'" #~ msgstr "у абвяшчэньні `%D'" #, fuzzy #~ msgid "explicit specialization here" #~ msgstr "ініцыялізацыя" #, fuzzy #~ msgid "duplicate explicit instantiation of `%#D'" #~ msgstr "паўторнае абвяшчэнне меткі \"%s\"" #, fuzzy #~ msgid "duplicate explicit instantiation of `%#T'" #~ msgstr "паўторнае абвяшчэнне меткі \"%s\"" #, fuzzy #~ msgid "type of asm operand `%E' could not be determined" #~ msgstr "тып параметра \"%s\" не аб'яўлены" #, fuzzy #~ msgid "base initializer for `%T'" #~ msgstr "не магу ініцыялізаваць сяброўскую функцыю \"%s\"" #~ msgid "%s before `%s'" #~ msgstr "%s перад \"%s\"" #~ msgid "%s before `%c'" #~ msgstr "%s перад '%c'" #~ msgid "%s before `\\%o'" #~ msgstr "%s перад \"\\%o\"" #~ msgid "%s before `%s' token" #~ msgstr "%s перад знакам \"%s\"" #, fuzzy #~ msgid "`%s' attribute is not supported on this platform" #~ msgstr "атрыбуты секцыі не падтрымліваюцца для гэтай мэты" #, fuzzy #~ msgid "`sizeof' applied to incomplete type `%T'" #~ msgstr "\"%s\" мае незавершаны тып" #, fuzzy #~ msgid "`%E' cannot be used as a function" #~ msgstr "\"%s\" звычайна функцыя" #, fuzzy #~ msgid "too many arguments to %s `%+#D'" #~ msgstr "вельмі шмат аргументаў у функцыі \"%s\"" #, fuzzy #~ msgid "too few arguments to %s `%+#D'" #~ msgstr "нехапае аргументаў у функцыі \"%s\"" #, fuzzy #~ msgid "attempt to take address of bit-field structure member `%D'" #~ msgstr "не магу атрымаць адрас бітавага поля \"%s\"" #, fuzzy #~ msgid "cannot %s a pointer to incomplete type `%T'" #~ msgstr "\"%s\" мае незавершаны тып" #, fuzzy #~ msgid "invalid cast to function type `%T'" #~ msgstr "Нерэчаісны выбар \"%s\"" #, fuzzy #~ msgid "invalid use of undefined type `%#T'" #~ msgstr "нявернае выкарыстанне \"restict\"" #, fuzzy #~ msgid "forward declaration of `%#T'" #~ msgstr "няма папярэдняга аб'яўлення для \"%s\"" #~ msgid "invalid use of `%T'" #~ msgstr "нерэчаіснае выкарыстаньне `%T'" #, fuzzy #~ msgid "invalid use of template type parameter" #~ msgstr "нявернае выкарыстанне \"restict\"" #, fuzzy #~ msgid "missing initializer for member `%D'" #~ msgstr "прапушчан ініцыялізатар" #, fuzzy #~ msgid "member `%D' with uninitialized const fields" #~ msgstr "параметр \"%s\" ініцыялізаваны" #, fuzzy #~ msgid "member `%D' is uninitialized reference" #~ msgstr "параметр \"%s\" ініцыялізаваны" #~ msgid "warning:" #~ msgstr "увага:" #, fuzzy #~ msgid "In statement function" #~ msgstr "вельмі шмат аргументаў у функцыі" #~ msgid "argument to `%s' missing" #~ msgstr "аргумент для \"%s\" прапушчан" #, fuzzy #~ msgid "Implicit declaration of `%A' at %0" #~ msgstr "паўторнае абвяшчэнне меткі \"%s\"" #~ msgid "Unknown escape sequence `\\%A' at %0" #~ msgstr "Невядомая ESC-паслядоўнасьць `\\%A' at %0" #, fuzzy #~ msgid "Unterminated escape sequence `\\' at %0" #~ msgstr "невядомая ESC-паслядоўнасць '\\%c'" #, fuzzy #~ msgid "non-ISO escape sequence `\\%c'" #~ msgstr "невядомая ESC-паслядоўнасць '\\%c'" #, fuzzy #~ msgid "Zero-length character constant at %0" #~ msgstr "пустая сімвальная канстанта" #, fuzzy #~ msgid "Character constant at %0 has no closing apostrophe at %1" #~ msgstr "сімвальная канстанта вельмі доўгая" #, fuzzy #~ msgid "Unable to open INCLUDE file `%A' at %0" #~ msgstr "немагу адчыніць файл \"%s\"" #, fuzzy #~ msgid "Truncating characters on right side of character constant at %0" #~ msgstr "мнагасімвальная сімвальная канстанта" #, fuzzy #~ msgid "Array `%A' at %0 is too large to handle" #~ msgstr "памер масіва \"%s\" вельмі вялікі" #, fuzzy #~ msgid "Statement function `%A' defined at %0 is not used" #~ msgstr "метка \"%s\" вызначана, але не выкарыстоўваецца" #~ msgid "In function" #~ msgstr "У функцыі" #~ msgid "In program" #~ msgstr "У праграме" #~ msgid "In construct" #~ msgstr "У канструкцыі" #~ msgid "field '%s' not found in class" #~ msgstr "поле \"%s\" не знойдзена ў класе" #~ msgid "abstract method in non-abstract class" #~ msgstr "абстрактны метад у неабстрактным класе" #~ msgid "method '%s' not found in class" #~ msgstr "метад \"%s\" не знойдзен у класе" #~ msgid "failed to find class '%s'" #~ msgstr "не знойдзен клас \"%s\"" #~ msgid "missing field '%s' in '%s'" #~ msgstr "прапушчана поле '%s' у '%s'" #, fuzzy #~ msgid "mismatching signature for field '%s' in '%s'" #~ msgstr "Прапушчана поле \"%s\" у \"%s\"" #, fuzzy #~ msgid "can't expand %s" #~ msgstr "не магу прачытаць з %s" #~ msgid "can't close %s" #~ msgstr "не магу зачыніць %s" #~ msgid "cannot find file for class %s" #~ msgstr "немагчыма знайсьці файл для кляса %s" #~ msgid "no input file specified" #~ msgstr "не зададзены ўваходзячыя файлы" #~ msgid "can't close input file %s" #~ msgstr "немагчыма зачыніць уваходзячы файл %s" #~ msgid "bad zip/jar file %s" #~ msgstr "дрэнны zip/jar файл \"%s\"" #, fuzzy #~ msgid "field initializer type mismatch" #~ msgstr "нерэчаісны ініцыялізатар" #~ msgid "can't create directory %s" #~ msgstr "немагчыма стварыць дырэкторыю \"%s\"" #~ msgid "can't open output file `%s'" #~ msgstr "немагчыма адчыніць файл уводу `%s'" #~ msgid "file not found `%s'" #~ msgstr "файл `%s' ня знойдзен" #~ msgid "cannot create temporary file" #~ msgstr "немагчыма стварыць часовы файл" #, fuzzy #~ msgid "can't mangle %s" #~ msgstr "не магу зачыніць %s" #~ msgid "Missing name" #~ msgstr "Прапушчана назва" #~ msgid "Missing class name" #~ msgstr "Прапушчана назва класа" #~ msgid "Invalid declaration" #~ msgstr "Нерэчаіснае абвяшчэнне" #~ msgid "Missing identifier" #~ msgstr "Прапушчан ідэнтыфікатар" #~ msgid "unregistered operator %s" #~ msgstr "нераспазнаны аператар %s" #, fuzzy #~ msgid "cannot find protocol declaration for `%s'" #~ msgstr "Не магу знайсці дэкларацыю пратакола для \"%s\"" #, fuzzy #~ msgid "cannot find interface declaration for `%s'" #~ msgstr "Не магу знайсці дэкларацыю інтэрфейса для \"%s\"" #, fuzzy #~ msgid "cannot find reference tag for class `%s'" #~ msgstr "Не магу знайсці файл для класа %s." #~ msgid "cannot find class `%s'" #~ msgstr "немагчыма знайсьці кляс `%s'" #~ msgid "class `%s' already exists" #~ msgstr "кляс `%s' ужо існуе" #, fuzzy #~ msgid "cannot find interface declaration for `%s', superclass of `%s'" #~ msgstr "Не магу знайсці дэкларацыю інтэрфейса для \"%s\"" #, fuzzy #~ msgid "circular inheritance in interface declaration for `%s'" #~ msgstr "Не магу знайсці дэкларацыю інтэрфейса для \"%s\"" #, fuzzy #~ msgid "cannot find class (factory) method" #~ msgstr "не магу знайсці метад." #, fuzzy #~ msgid "method `%s' not implemented by protocol" #~ msgstr "метад \"%s\" не знойдзен у класе" #~ msgid "cannot find method" #~ msgstr "немагчыма знайсьці мэтад" #, fuzzy #~ msgid "duplicate definition of class method `%s'" #~ msgstr "паўторнае абвяшчэнне меткі \"%s\"" #, fuzzy #~ msgid "duplicate declaration of class method `%s'" #~ msgstr "паўторнае абвяшчэнне меткі \"%s\"" #, fuzzy #~ msgid "duplicate declaration of instance method `%s'" #~ msgstr "паўторнае абвяшчэнне меткі \"%s\"" #~ msgid "-pipe is not supported" #~ msgstr "-pipe не падтрымліваецца" #~ msgid "-mhard-float not supported" #~ msgstr "-mhard-float не падтрымліваецца" nescc-1.3.4/libcpp/po/ca.po000066400000000000000000000614231177770303300154420ustar00rootroot00000000000000# translation of cpplib-4.0.1.po to Catalan # Catalan translation of gcc. # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # This file is distributed under the same license as the gcc package. # # Gilles MATEU , 2002. # Gilles MATEU , 2003. # Gilles MATEU , 2004. # Mateu Gilles , 2005. msgid "" msgstr "" "Project-Id-Version: cpplib-4.0.1\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2007-11-08 21:08+0000\n" "PO-Revision-Date: 2005-11-25 22:56+0100\n" "Last-Translator: Mateu Gilles \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: charset.c:654 #, c-format msgid "conversion from %s to %s not supported by iconv" msgstr "iconv no dona suport a la conversi de %s a %s" #: charset.c:657 msgid "iconv_open" msgstr "iconv_open" #: charset.c:665 #, c-format msgid "no iconv implementation, cannot convert from %s to %s" msgstr "cap implementaci de iconv, no es pot convertir de %s a %s" #: charset.c:742 #, c-format msgid "character 0x%lx is not in the basic source character set\n" msgstr "el carcter 0x%lx no s en el joc de carcters de base\n" #: charset.c:759 charset.c:1352 msgid "converting to execution character set" msgstr "convertint al joc de carcters d'execuci" #: charset.c:765 #, c-format msgid "character 0x%lx is not unibyte in execution character set" msgstr "el carcter 0x%lx no s mono octet en el joc de carcters d'execuci" #: charset.c:889 #, c-format msgid "Character %x might not be NFKC" msgstr "" #: charset.c:949 msgid "universal character names are only valid in C++ and C99" msgstr "els noms de carcter universals noms sn vlids en C++ i C99" #: charset.c:952 #, c-format msgid "the meaning of '\\%c' is different in traditional C" msgstr "el significat de \"\\%c\" s diferent en C tradicional" #: charset.c:961 msgid "In _cpp_valid_ucn but not a UCN" msgstr "" #: charset.c:986 #, c-format msgid "incomplete universal character name %.*s" msgstr "el nom de carcter universal %.*s s incomplet" #: charset.c:998 #, c-format msgid "%.*s is not a valid universal character" msgstr "%.*s no s un carcter universal vlid" #: charset.c:1008 lex.c:484 msgid "'$' in identifier or number" msgstr "\"$\" en un identificador o un nombre" #: charset.c:1018 #, c-format msgid "universal character %.*s is not valid in an identifier" msgstr "el nom de carcter universal %.*s no s vlid en un identificador" #: charset.c:1022 #, c-format msgid "universal character %.*s is not valid at the start of an identifier" msgstr "el nom de carcter universal %.*s no s vlid a l'inici d'un identificador" #: charset.c:1056 charset.c:1571 msgid "converting UCN to source character set" msgstr "convertint UCN al joc font de carcters" #: charset.c:1060 msgid "converting UCN to execution character set" msgstr "convertint UCN al joc de carcters d'execuci" #: charset.c:1132 msgid "the meaning of '\\x' is different in traditional C" msgstr "el significat de \"\\x\" s diferent en C tradicional" #: charset.c:1149 msgid "\\x used with no following hex digits" msgstr "es va usar \\x sense dgits hexadecimales a continuaci" #: charset.c:1156 msgid "hex escape sequence out of range" msgstr "seqncia d'escapa hexadecimal fora de rang" #: charset.c:1195 msgid "octal escape sequence out of range" msgstr "seqncia d'escapa octal fora de rang" #: charset.c:1263 msgid "the meaning of '\\a' is different in traditional C" msgstr "el significat de \"\\a\" s diferent en C tradicional" #: charset.c:1270 #, c-format msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "seqncia d'escapa que no s estndard ISO, \"\\%c\"" #: charset.c:1278 #, c-format msgid "unknown escape sequence '\\%c'" msgstr "seqncia d'escapa \"\\%c\" desconeguda" #: charset.c:1286 #, fuzzy, c-format msgid "unknown escape sequence: '\\%s'" msgstr "seqncia d'escapa \"\\%c\" desconeguda" #: charset.c:1293 msgid "converting escape sequence to execution character set" msgstr "convertint una seqncia d'escapa al joc de carcters d'execuci" #: charset.c:1415 charset.c:1478 msgid "character constant too long for its type" msgstr "constant de carcter massa gran pel seu tipus" #: charset.c:1418 msgid "multi-character character constant" msgstr "constant de carcter amb mltiples carcters" #: charset.c:1510 msgid "empty character constant" msgstr "constant de carter buida" #: charset.c:1612 #, c-format msgid "failure to convert %s to %s" msgstr "fallada convertint %s a %s" #: directives.c:215 directives.c:241 #, c-format msgid "extra tokens at end of #%s directive" msgstr "elements superflus al final de la directiva #%s" #: directives.c:344 #, c-format msgid "#%s is a GCC extension" msgstr "#%s s una extenci del GCC" #: directives.c:356 msgid "suggest not using #elif in traditional C" msgstr "es suggereix no usar #elif en C tradicional" #: directives.c:359 #, c-format msgid "traditional C ignores #%s with the # indented" msgstr "C tradicional ignora #%s amb el # indentat" #: directives.c:363 #, c-format msgid "suggest hiding #%s from traditional C with an indented #" msgstr "es suggereix ocultar #%s del C tradicional amb el # indentat" #: directives.c:389 msgid "embedding a directive within macro arguments is not portable" msgstr "l'incrustaci d'una directiva entre arguments de macro no s portable" #: directives.c:409 msgid "style of line directive is a GCC extension" msgstr "la directiva d'estil de lnia s una extenci del GCC" #: directives.c:464 #, c-format msgid "invalid preprocessing directive #%s" msgstr "directiva de preprocessament #%s invlida" #: directives.c:532 msgid "\"defined\" cannot be used as a macro name" msgstr "\"defined\" no es pot usar com un nom de macro" #: directives.c:538 #, c-format msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "no es pot usar \"%s\" com un nom de macro perqu s un operador en C++" #: directives.c:541 #, c-format msgid "no macro name given in #%s directive" msgstr "no es va donar un nom de macro en la directiva #%s" #: directives.c:544 msgid "macro names must be identifiers" msgstr "els noms de macro han de ser identificadors" #: directives.c:585 #, c-format msgid "undefining \"%s\"" msgstr "esborrant la definici de \"%s\"" #: directives.c:640 msgid "missing terminating > character" msgstr "falta el carcter de terminaci >" #: directives.c:695 #, c-format msgid "#%s expects \"FILENAME\" or " msgstr "#%s espera \"NOM_DE_FITXER\" o " #: directives.c:739 #, c-format msgid "empty filename in #%s" msgstr "nom de fitxer buit en #%s" #: directives.c:749 msgid "#include nested too deeply" msgstr "#include niat amb massa profunditat" #: directives.c:790 msgid "#include_next in primary source file" msgstr "#include_next en el fitxer font primari" #: directives.c:816 #, c-format msgid "invalid flag \"%s\" in line directive" msgstr "indicador \"%s\" invlid en la directiva de lnia" #: directives.c:868 #, c-format msgid "\"%s\" after #line is not a positive integer" msgstr "\"%s\" desprs de #line no s un enter positiu" #: directives.c:874 msgid "line number out of range" msgstr "nombre de lnia fora de rang" #: directives.c:887 directives.c:964 #, c-format msgid "\"%s\" is not a valid filename" msgstr "\"%s\" no s un nom de fitxer vlid" #: directives.c:924 #, c-format msgid "\"%s\" after # is not a positive integer" msgstr "\"%s\" desprs de # no s un enter positiu" #: directives.c:1026 #, fuzzy, c-format msgid "invalid #%s directive" msgstr "directiva #ident invlida" #: directives.c:1089 #, c-format msgid "registering pragmas in namespace \"%s\" with mismatched name expansion" msgstr "" #: directives.c:1098 #, fuzzy, c-format msgid "registering pragma \"%s\" with name expansion and no namespace" msgstr "desant \"%s\" com a pragma i espai de noms de pragma" #: directives.c:1116 #, c-format msgid "registering \"%s\" as both a pragma and a pragma namespace" msgstr "desant \"%s\" com a pragma i espai de noms de pragma" #: directives.c:1119 #, c-format msgid "#pragma %s %s is already registered" msgstr "ja s'ha desat #pragma %s %s" #: directives.c:1122 #, c-format msgid "#pragma %s is already registered" msgstr "ja s'ha desat #pragma %s" #: directives.c:1152 msgid "registering pragma with NULL handler" msgstr "" #: directives.c:1362 msgid "#pragma once in main file" msgstr "#pragma una vegada en el fitxer principal" #: directives.c:1385 msgid "invalid #pragma GCC poison directive" msgstr "directiva #pragma de GCC enverinada invlida" #: directives.c:1394 #, c-format msgid "poisoning existing macro \"%s\"" msgstr "enverinant la macro existent \"%s\"" #: directives.c:1413 msgid "#pragma system_header ignored outside include file" msgstr "#pragma system_header ignorat fora del fitxer d'inclusi" #: directives.c:1437 #, c-format msgid "cannot find source file %s" msgstr "no es pot trobar la font %s" #: directives.c:1441 #, c-format msgid "current file is older than %s" msgstr "el fitxer actual s ms vell que %s" #: directives.c:1620 msgid "_Pragma takes a parenthesized string literal" msgstr "_Pragma pren una cadena literal entre parntesis" #: directives.c:1693 msgid "#else without #if" msgstr "#else sense #if" #: directives.c:1698 msgid "#else after #else" msgstr "#else desprs de #else" #: directives.c:1700 directives.c:1733 msgid "the conditional began here" msgstr "el condicional va comenar aqu" #: directives.c:1726 msgid "#elif without #if" msgstr "#elif sense #if" #: directives.c:1731 msgid "#elif after #else" msgstr "#elif desprs de #else" #: directives.c:1761 msgid "#endif without #if" msgstr "#endif sense #if" #: directives.c:1838 msgid "missing '(' after predicate" msgstr "falta \"(\" abans del predicat" #: directives.c:1853 msgid "missing ')' to complete answer" msgstr "falta \")\" per a completar la resposta" #: directives.c:1873 msgid "predicate's answer is empty" msgstr "el predicat de la resposta est buit" #: directives.c:1900 msgid "assertion without predicate" msgstr "afirmaci sense predicat" #: directives.c:1902 msgid "predicate must be an identifier" msgstr "el predicat ha de ser un identificador" #: directives.c:1988 #, c-format msgid "\"%s\" re-asserted" msgstr "\"%s\" reafirmat" #: directives.c:2271 #, c-format msgid "unterminated #%s" msgstr "#%s sense acabar" #: directives-only.c:221 lex.c:1016 traditional.c:162 msgid "unterminated comment" msgstr "comentari sense acabar" #: errors.c:118 msgid "warning: " msgstr "avs: " #: errors.c:120 msgid "internal error: " msgstr "error intern: " #: errors.c:122 msgid "error: " msgstr "error: " #: errors.c:186 msgid "stdout" msgstr "stdout" #: errors.c:188 #, c-format msgid "%s: %s" msgstr "%s: %s" #: expr.c:261 msgid "too many decimal points in number" msgstr "nombre amb massa punts decimals" #: expr.c:290 expr.c:365 #, fuzzy msgid "fixed-point constants are a GCC extension" msgstr "les constants imaginries sn una extensi d'el GCC" #: expr.c:303 #, fuzzy, c-format msgid "invalid digit \"%c\" in binary constant" msgstr "dgit \"%c\" invlid en la constant octal" #: expr.c:305 #, c-format msgid "invalid digit \"%c\" in octal constant" msgstr "dgit \"%c\" invlid en la constant octal" #: expr.c:313 #, fuzzy msgid "invalid prefix \"0b\" for floating constant" msgstr "sufix \"%.*s\" invlid en la constant de coma flotant" #: expr.c:319 msgid "use of C99 hexadecimal floating constant" msgstr "s d'una constant de coma flotant hexadecimal C99" #: expr.c:328 msgid "exponent has no digits" msgstr "exponent no t dgits" #: expr.c:335 msgid "hexadecimal floating constants require an exponent" msgstr "la constant de coma flotant hexadecimal requereix un exponent" #: expr.c:341 #, c-format msgid "invalid suffix \"%.*s\" on floating constant" msgstr "sufix \"%.*s\" invlid en la constant de coma flotant" #: expr.c:351 expr.c:393 #, c-format msgid "traditional C rejects the \"%.*s\" suffix" msgstr "el C tradicional rebutja el sufix \"%.*s\"" #: expr.c:358 #, fuzzy, c-format msgid "invalid suffix \"%.*s\" with hexadecimal floating constant" msgstr "sufix \"%.*s\" invlid en la constant de coma flotant" #: expr.c:369 #, fuzzy msgid "decimal float constants are a GCC extension" msgstr "les constants imaginries sn una extensi d'el GCC" #: expr.c:379 #, c-format msgid "invalid suffix \"%.*s\" on integer constant" msgstr "sufix \"%.*s\" invlid en constant entera" #: expr.c:401 msgid "use of C99 long long integer constant" msgstr "s d'una constant entera long long C99" #: expr.c:409 msgid "imaginary constants are a GCC extension" msgstr "les constants imaginries sn una extensi d'el GCC" #: expr.c:412 #, fuzzy msgid "binary constants are a GCC extension" msgstr "les constants imaginries sn una extensi d'el GCC" #: expr.c:505 msgid "integer constant is too large for its type" msgstr "la constant entera s massa gran pel seu tipus" #: expr.c:517 msgid "integer constant is so large that it is unsigned" msgstr "la constant entera s tan gran que s unsigned" #: expr.c:612 msgid "missing ')' after \"defined\"" msgstr "\")\" faltant desprs de \"defined\"" #: expr.c:619 msgid "operator \"defined\" requires an identifier" msgstr "l'operador \"defined\" requereix un identificador" #: expr.c:627 #, c-format msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "(\"%s\" s un element alternatiu per a \"%s\" en C++)" #: expr.c:637 msgid "this use of \"defined\" may not be portable" msgstr "aquest s de \"defined\" podria no ser portable" #: expr.c:676 msgid "floating constant in preprocessor expression" msgstr "constant de coma flotant en l'expressi del preprocessador" #: expr.c:682 msgid "imaginary number in preprocessor expression" msgstr "nombre imaginari en l'expressi del preprocessador" #: expr.c:727 #, c-format msgid "\"%s\" is not defined" msgstr "\"%s\" no s definit" #: expr.c:855 expr.c:884 #, c-format msgid "missing binary operator before token \"%s\"" msgstr "operador binari faltant abans de l'element \"%s\"" #: expr.c:875 #, c-format msgid "token \"%s\" is not valid in preprocessor expressions" msgstr "l'element \"%s\" no s vlid en les expressions del preprocesador" #: expr.c:892 msgid "missing expression between '(' and ')'" msgstr "expressin faltant entre \"(\" i \")\"" #: expr.c:895 msgid "#if with no expression" msgstr "#if sense expressi" #: expr.c:898 #, c-format msgid "operator '%s' has no right operand" msgstr "l'operador \"%s\" no t operant de dreta" #: expr.c:903 #, c-format msgid "operator '%s' has no left operand" msgstr "l'operador \"%s\" no t operant d'esquera" #: expr.c:929 msgid " ':' without preceding '?'" msgstr " \":\" sense \"?\" precedent" #: expr.c:956 msgid "unbalanced stack in #if" msgstr "pila desequilibrada en #if" #: expr.c:975 #, c-format msgid "impossible operator '%u'" msgstr "operador \"%u\" impossible" #: expr.c:1065 msgid "missing ')' in expression" msgstr "\")\" faltant en l'expressi" #: expr.c:1086 msgid "'?' without following ':'" msgstr " \"?\" sense el \":\" segent" #: expr.c:1096 msgid "integer overflow in preprocessor expression" msgstr "desbordament d'enter en l'expressi del preprocessador" #: expr.c:1101 msgid "missing '(' in expression" msgstr "\"(\" faltant en l'expressi" #: expr.c:1133 #, c-format msgid "the left operand of \"%s\" changes sign when promoted" msgstr "l'operant esquera de \"%s\" canvia el signe quan s promogut" #: expr.c:1138 #, c-format msgid "the right operand of \"%s\" changes sign when promoted" msgstr "l'operant dreta de \"%s\" canvia el signe quan s promogut" #: expr.c:1397 msgid "traditional C rejects the unary plus operator" msgstr "C tradicional rebutja l'operador unari ms" #: expr.c:1480 msgid "comma operator in operand of #if" msgstr "operador coma en operant de #if" #: expr.c:1612 msgid "division by zero in #if" msgstr "divisi per zero en #if" #: files.c:442 msgid "NULL directory in find_file" msgstr "directori NULL en find_file" #: files.c:480 msgid "one or more PCH files were found, but they were invalid" msgstr "un o ms fitxers PCH varen ser trobats, per varen ser invlids" #: files.c:483 msgid "use -Winvalid-pch for more information" msgstr "usi -Winvalid-pch per a ms informaci" #: files.c:570 #, c-format msgid "%s is a block device" msgstr "%s s un dispositiu de blocs" #: files.c:587 #, c-format msgid "%s is too large" msgstr "%s s massa gran" #: files.c:622 #, c-format msgid "%s is shorter than expected" msgstr "%s s ms curt qu'esperat" #: files.c:852 #, c-format msgid "no include path in which to search for %s" msgstr "no hi ha ruta d'inclusi en la qual cercar %s" #: files.c:1157 msgid "Multiple include guards may be useful for:\n" msgstr "Mltiples gurdies d'inclusi poden ser tils per a:\n" #: init.c:426 msgid "cppchar_t must be an unsigned type" msgstr "cppchar_t ha de ser d'un tipus unsigned" #: init.c:430 #, c-format msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits" msgstr "l'aritmtica del preprocesador t una precisi mxima de %lu bits; l'objectiu requereix %lu bits" #: init.c:437 msgid "CPP arithmetic must be at least as precise as a target int" msgstr "l'aritmtica de CPP ha de ser almenys tan precisa com un int de l'objectiu" #: init.c:440 msgid "target char is less than 8 bits wide" msgstr "el char de l'objectiu t menys de 8 bits d'ampliaria" #: init.c:444 msgid "target wchar_t is narrower than target char" msgstr "el wchar_t de l'objectiu s ms estret qu'el char de l'objectiu" #: init.c:448 msgid "target int is narrower than target char" msgstr "el int de l'objectiu s ms estret qu'el char de l'objectiu" #: init.c:453 msgid "CPP half-integer narrower than CPP character" msgstr "el half-integer de CPP s ms estret que el carcter de CPP" #: init.c:457 #, c-format msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits" msgstr "CPP no pot manejar constants de carcter amples ms enll de %lu bits en aquest ordinador, per l'objectiu requereix %lu bits" #: lex.c:283 msgid "backslash and newline separated by space" msgstr "barra invertida i fi de lnia separats per un espai" #: lex.c:288 msgid "backslash-newline at end of file" msgstr "barra invertida i nova lnia al final del fitxer" #: lex.c:303 #, c-format msgid "trigraph ??%c converted to %c" msgstr "trigraph ??%c convertit a %c" #: lex.c:310 #, c-format msgid "trigraph ??%c ignored, use -trigraphs to enable" msgstr "s'ignora el trigraph ??%c, usi -trigraphs per permetre-ho" #: lex.c:356 msgid "\"/*\" within comment" msgstr "\"/*\" dintre d'un comentari" #: lex.c:414 #, c-format msgid "%s in preprocessing directive" msgstr "%s en una directiva de preprocessament" #: lex.c:423 msgid "null character(s) ignored" msgstr "carter(es) nul(s) ignorats" #: lex.c:460 #, fuzzy, c-format msgid "`%.*s' is not in NFKC" msgstr "\"%s\" no s definit" #: lex.c:463 #, fuzzy, c-format msgid "`%.*s' is not in NFC" msgstr "\"%s\" no s definit" #: lex.c:551 #, c-format msgid "attempt to use poisoned \"%s\"" msgstr "intent d'usar \"%s\" enverinat" #: lex.c:559 msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "__VA_ARGS__ solament pot aparixer en l'expansi d'una macro variadic C99" #: lex.c:659 msgid "null character(s) preserved in literal" msgstr "carcter(es) nul(s) preservats en la literal" #: lex.c:662 #, fuzzy, c-format msgid "missing terminating %c character" msgstr "falta el carcter de terminaci >" #: lex.c:1027 msgid "C++ style comments are not allowed in ISO C90" msgstr "els comentaris d'estil C++ no sn permesos en ISO C90" #: lex.c:1029 msgid "(this will be reported only once per input file)" msgstr "(aix es reportar solament una vegada per cada fitxer d'entrada)" #: lex.c:1034 msgid "multi-line comment" msgstr "comentari en mltiples lnies" #: lex.c:1347 #, c-format msgid "unspellable token %s" msgstr "Element %s impronunciable" #: line-map.c:320 #, c-format msgid "In file included from %s:%u" msgstr "En el fitxer incls ds de %s:%u" #: line-map.c:338 #, c-format msgid "" ",\n" " from %s:%u" msgstr "" ",\n" " ds de %s:%u" #: macro.c:84 #, c-format msgid "macro \"%s\" is not used" msgstr "no s'usa la macro \"%s\"" #: macro.c:123 macro.c:319 #, c-format msgid "invalid built-in macro \"%s\"" msgstr "macro interna \"%s\" invlida" #: macro.c:157 #, fuzzy msgid "could not determine file timestamp" msgstr "no es pot determinar la data i l'hora" #: macro.c:254 msgid "could not determine date and time" msgstr "no es pot determinar la data i l'hora" #: macro.c:270 msgid "__COUNTER__ expanded inside directive with -fdirectives-only" msgstr "" #: macro.c:423 msgid "invalid string literal, ignoring final '\\'" msgstr "cadena literal invlida, s'ignora el \"\\\" final" #: macro.c:483 #, c-format msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "enganxar \"%s\" i \"%s\" no dna un element de preprocessament vlid" #: macro.c:558 msgid "ISO C99 requires rest arguments to be used" msgstr "ISO C99 requereix que la resta dels arguments sigui usat" #: macro.c:563 #, c-format msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "la macro \"%s\" requereix %u arguments, per noms %u passats" #: macro.c:568 #, c-format msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "la macro \"%s\" va rebre %u arguments, per en va prendre solament %u" #: macro.c:679 traditional.c:680 #, c-format msgid "unterminated argument list invoking macro \"%s\"" msgstr "llista d'arguments sense acabar a l'invocar la macro \"%s\"" #: macro.c:782 #, c-format msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "la funci de macro \"%s\" s'ha d'usar amb arguments en C tradicional" #: macro.c:1325 #, c-format msgid "duplicate macro parameter \"%s\"" msgstr "parmetre de macro \"%s\" duplicat" #: macro.c:1371 #, c-format msgid "\"%s\" may not appear in macro parameter list" msgstr "\"%s\" podria faltar en la llista de parmetre de macro" #: macro.c:1379 msgid "macro parameters must be comma-separated" msgstr "els parmetres de macro han de ser separats per comes" #: macro.c:1396 msgid "parameter name missing" msgstr "falta el nom del parmetre" #: macro.c:1413 msgid "anonymous variadic macros were introduced in C99" msgstr "els macros variadic annims es van introduir en C99" #: macro.c:1418 msgid "ISO C does not permit named variadic macros" msgstr "ISO C no permet macros variadic nomenats" #: macro.c:1427 msgid "missing ')' in macro parameter list" msgstr "\")\" faltant en la llista de parmetres de macro" #: macro.c:1476 msgid "'##' cannot appear at either end of a macro expansion" msgstr "\"##\" no pot apareixer en o al final d'una expansi de macro" #: macro.c:1510 msgid "ISO C99 requires whitespace after the macro name" msgstr "ISO C99 requereix espais en blanc desprs del nom de macro" #: macro.c:1534 msgid "missing whitespace after the macro name" msgstr "espais en blanc faltant desprs del nom de macro" #: macro.c:1564 msgid "'#' is not followed by a macro parameter" msgstr "\"#\" no s seguit per un parmetre de macro" #: macro.c:1683 #, c-format msgid "\"%s\" redefined" msgstr "\"%s\" re-definit" #: macro.c:1688 msgid "this is the location of the previous definition" msgstr "aquesta s la ubicaci de la definici prvia" #: macro.c:1738 #, c-format msgid "macro argument \"%s\" would be stringified in traditional C" msgstr "l'argument de macro \"%s\" hauria de ser convertit en cadena en C traditional" #: macro.c:1761 #, c-format msgid "invalid hash type %d in cpp_macro_definition" msgstr "tipus de hash %d invlid en cpp_macro_definition" #: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377 msgid "while writing precompiled header" msgstr "mentre escrivint capalera precompilada" #: pch.c:485 #, c-format msgid "%s: not used because `%.*s' not defined" msgstr "%s: no utilitzat perqu \"%.*s\" no est definit" #: pch.c:497 #, c-format msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'" msgstr "%s: no utilitzat perqu \"%.*s\" est definit com a \"%s\" i no com a \"%.*s\"" #: pch.c:538 #, c-format msgid "%s: not used because `%s' is defined" msgstr "%s: no utilitzat perqu \"%s\" s definit" #: pch.c:558 #, fuzzy, c-format msgid "%s: not used because `__COUNTER__' is invalid" msgstr "%s: no utilitzat perqu \"%s\" s definit" #: pch.c:567 pch.c:737 msgid "while reading precompiled header" msgstr "mentre llegint capalera precompilada" #: traditional.c:750 #, c-format msgid "detected recursion whilst expanding macro \"%s\"" msgstr "whilst recursiu detectat en expandint la macro \"%s\"" #: traditional.c:917 msgid "syntax error in macro parameter list" msgstr "error sintctic en la llista de parmetre de macro" #~ msgid "unknown escape sequence: '\\%03o'" #~ msgstr "seqncia d'escapa desconeguda: '\\%03o'" #~ msgid "no newline at end of file" #~ msgstr "no hi ha carcter de fi de lnia al final del fitxer" nescc-1.3.4/libcpp/po/cpplib.pot000066400000000000000000000404671177770303300165210ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2007-11-08 21:08+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: charset.c:654 #, c-format msgid "conversion from %s to %s not supported by iconv" msgstr "" #: charset.c:657 msgid "iconv_open" msgstr "" #: charset.c:665 #, c-format msgid "no iconv implementation, cannot convert from %s to %s" msgstr "" #: charset.c:742 #, c-format msgid "character 0x%lx is not in the basic source character set\n" msgstr "" #: charset.c:759 #: charset.c:1352 msgid "converting to execution character set" msgstr "" #: charset.c:765 #, c-format msgid "character 0x%lx is not unibyte in execution character set" msgstr "" #: charset.c:889 #, c-format msgid "Character %x might not be NFKC" msgstr "" #: charset.c:949 msgid "universal character names are only valid in C++ and C99" msgstr "" #: charset.c:952 #, c-format msgid "the meaning of '\\%c' is different in traditional C" msgstr "" #: charset.c:961 msgid "In _cpp_valid_ucn but not a UCN" msgstr "" #: charset.c:986 #, c-format msgid "incomplete universal character name %.*s" msgstr "" #: charset.c:998 #, c-format msgid "%.*s is not a valid universal character" msgstr "" #: charset.c:1008 #: lex.c:484 msgid "'$' in identifier or number" msgstr "" #: charset.c:1018 #, c-format msgid "universal character %.*s is not valid in an identifier" msgstr "" #: charset.c:1022 #, c-format msgid "universal character %.*s is not valid at the start of an identifier" msgstr "" #: charset.c:1056 #: charset.c:1571 msgid "converting UCN to source character set" msgstr "" #: charset.c:1060 msgid "converting UCN to execution character set" msgstr "" #: charset.c:1132 msgid "the meaning of '\\x' is different in traditional C" msgstr "" #: charset.c:1149 msgid "\\x used with no following hex digits" msgstr "" #: charset.c:1156 msgid "hex escape sequence out of range" msgstr "" #: charset.c:1195 msgid "octal escape sequence out of range" msgstr "" #: charset.c:1263 msgid "the meaning of '\\a' is different in traditional C" msgstr "" #: charset.c:1270 #, c-format msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "" #: charset.c:1278 #, c-format msgid "unknown escape sequence '\\%c'" msgstr "" #: charset.c:1286 #, c-format msgid "unknown escape sequence: '\\%s'" msgstr "" #: charset.c:1293 msgid "converting escape sequence to execution character set" msgstr "" #: charset.c:1415 #: charset.c:1478 msgid "character constant too long for its type" msgstr "" #: charset.c:1418 msgid "multi-character character constant" msgstr "" #: charset.c:1510 msgid "empty character constant" msgstr "" #: charset.c:1612 #, c-format msgid "failure to convert %s to %s" msgstr "" #: directives.c:215 #: directives.c:241 #, c-format msgid "extra tokens at end of #%s directive" msgstr "" #: directives.c:344 #, c-format msgid "#%s is a GCC extension" msgstr "" #: directives.c:356 msgid "suggest not using #elif in traditional C" msgstr "" #: directives.c:359 #, c-format msgid "traditional C ignores #%s with the # indented" msgstr "" #: directives.c:363 #, c-format msgid "suggest hiding #%s from traditional C with an indented #" msgstr "" #: directives.c:389 msgid "embedding a directive within macro arguments is not portable" msgstr "" #: directives.c:409 msgid "style of line directive is a GCC extension" msgstr "" #: directives.c:464 #, c-format msgid "invalid preprocessing directive #%s" msgstr "" #: directives.c:532 msgid "\"defined\" cannot be used as a macro name" msgstr "" #: directives.c:538 #, c-format msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "" #: directives.c:541 #, c-format msgid "no macro name given in #%s directive" msgstr "" #: directives.c:544 msgid "macro names must be identifiers" msgstr "" #: directives.c:585 #, c-format msgid "undefining \"%s\"" msgstr "" #: directives.c:640 msgid "missing terminating > character" msgstr "" #: directives.c:695 #, c-format msgid "#%s expects \"FILENAME\" or " msgstr "" #: directives.c:739 #, c-format msgid "empty filename in #%s" msgstr "" #: directives.c:749 msgid "#include nested too deeply" msgstr "" #: directives.c:790 msgid "#include_next in primary source file" msgstr "" #: directives.c:816 #, c-format msgid "invalid flag \"%s\" in line directive" msgstr "" #: directives.c:868 #, c-format msgid "\"%s\" after #line is not a positive integer" msgstr "" #: directives.c:874 msgid "line number out of range" msgstr "" #: directives.c:887 #: directives.c:964 #, c-format msgid "\"%s\" is not a valid filename" msgstr "" #: directives.c:924 #, c-format msgid "\"%s\" after # is not a positive integer" msgstr "" #: directives.c:1026 #, c-format msgid "invalid #%s directive" msgstr "" #: directives.c:1089 #, c-format msgid "registering pragmas in namespace \"%s\" with mismatched name expansion" msgstr "" #: directives.c:1098 #, c-format msgid "registering pragma \"%s\" with name expansion and no namespace" msgstr "" #: directives.c:1116 #, c-format msgid "registering \"%s\" as both a pragma and a pragma namespace" msgstr "" #: directives.c:1119 #, c-format msgid "#pragma %s %s is already registered" msgstr "" #: directives.c:1122 #, c-format msgid "#pragma %s is already registered" msgstr "" #: directives.c:1152 msgid "registering pragma with NULL handler" msgstr "" #: directives.c:1362 msgid "#pragma once in main file" msgstr "" #: directives.c:1385 msgid "invalid #pragma GCC poison directive" msgstr "" #: directives.c:1394 #, c-format msgid "poisoning existing macro \"%s\"" msgstr "" #: directives.c:1413 msgid "#pragma system_header ignored outside include file" msgstr "" #: directives.c:1437 #, c-format msgid "cannot find source file %s" msgstr "" #: directives.c:1441 #, c-format msgid "current file is older than %s" msgstr "" #: directives.c:1620 msgid "_Pragma takes a parenthesized string literal" msgstr "" #: directives.c:1693 msgid "#else without #if" msgstr "" #: directives.c:1698 msgid "#else after #else" msgstr "" #: directives.c:1700 #: directives.c:1733 msgid "the conditional began here" msgstr "" #: directives.c:1726 msgid "#elif without #if" msgstr "" #: directives.c:1731 msgid "#elif after #else" msgstr "" #: directives.c:1761 msgid "#endif without #if" msgstr "" #: directives.c:1838 msgid "missing '(' after predicate" msgstr "" #: directives.c:1853 msgid "missing ')' to complete answer" msgstr "" #: directives.c:1873 msgid "predicate's answer is empty" msgstr "" #: directives.c:1900 msgid "assertion without predicate" msgstr "" #: directives.c:1902 msgid "predicate must be an identifier" msgstr "" #: directives.c:1988 #, c-format msgid "\"%s\" re-asserted" msgstr "" #: directives.c:2271 #, c-format msgid "unterminated #%s" msgstr "" #: directives-only.c:221 #: lex.c:1016 #: traditional.c:162 msgid "unterminated comment" msgstr "" #: errors.c:118 msgid "warning: " msgstr "" #: errors.c:120 msgid "internal error: " msgstr "" #: errors.c:122 msgid "error: " msgstr "" #: errors.c:186 msgid "stdout" msgstr "" #: errors.c:188 #, c-format msgid "%s: %s" msgstr "" #: expr.c:261 msgid "too many decimal points in number" msgstr "" #: expr.c:290 #: expr.c:365 msgid "fixed-point constants are a GCC extension" msgstr "" #: expr.c:303 #, c-format msgid "invalid digit \"%c\" in binary constant" msgstr "" #: expr.c:305 #, c-format msgid "invalid digit \"%c\" in octal constant" msgstr "" #: expr.c:313 msgid "invalid prefix \"0b\" for floating constant" msgstr "" #: expr.c:319 msgid "use of C99 hexadecimal floating constant" msgstr "" #: expr.c:328 msgid "exponent has no digits" msgstr "" #: expr.c:335 msgid "hexadecimal floating constants require an exponent" msgstr "" #: expr.c:341 #, c-format msgid "invalid suffix \"%.*s\" on floating constant" msgstr "" #: expr.c:351 #: expr.c:393 #, c-format msgid "traditional C rejects the \"%.*s\" suffix" msgstr "" #: expr.c:358 #, c-format msgid "invalid suffix \"%.*s\" with hexadecimal floating constant" msgstr "" #: expr.c:369 msgid "decimal float constants are a GCC extension" msgstr "" #: expr.c:379 #, c-format msgid "invalid suffix \"%.*s\" on integer constant" msgstr "" #: expr.c:401 msgid "use of C99 long long integer constant" msgstr "" #: expr.c:409 msgid "imaginary constants are a GCC extension" msgstr "" #: expr.c:412 msgid "binary constants are a GCC extension" msgstr "" #: expr.c:505 msgid "integer constant is too large for its type" msgstr "" #: expr.c:517 msgid "integer constant is so large that it is unsigned" msgstr "" #: expr.c:612 msgid "missing ')' after \"defined\"" msgstr "" #: expr.c:619 msgid "operator \"defined\" requires an identifier" msgstr "" #: expr.c:627 #, c-format msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "" #: expr.c:637 msgid "this use of \"defined\" may not be portable" msgstr "" #: expr.c:676 msgid "floating constant in preprocessor expression" msgstr "" #: expr.c:682 msgid "imaginary number in preprocessor expression" msgstr "" #: expr.c:727 #, c-format msgid "\"%s\" is not defined" msgstr "" #: expr.c:855 #: expr.c:884 #, c-format msgid "missing binary operator before token \"%s\"" msgstr "" #: expr.c:875 #, c-format msgid "token \"%s\" is not valid in preprocessor expressions" msgstr "" #: expr.c:892 msgid "missing expression between '(' and ')'" msgstr "" #: expr.c:895 msgid "#if with no expression" msgstr "" #: expr.c:898 #, c-format msgid "operator '%s' has no right operand" msgstr "" #: expr.c:903 #, c-format msgid "operator '%s' has no left operand" msgstr "" #: expr.c:929 msgid " ':' without preceding '?'" msgstr "" #: expr.c:956 msgid "unbalanced stack in #if" msgstr "" #: expr.c:975 #, c-format msgid "impossible operator '%u'" msgstr "" #: expr.c:1065 msgid "missing ')' in expression" msgstr "" #: expr.c:1086 msgid "'?' without following ':'" msgstr "" #: expr.c:1096 msgid "integer overflow in preprocessor expression" msgstr "" #: expr.c:1101 msgid "missing '(' in expression" msgstr "" #: expr.c:1133 #, c-format msgid "the left operand of \"%s\" changes sign when promoted" msgstr "" #: expr.c:1138 #, c-format msgid "the right operand of \"%s\" changes sign when promoted" msgstr "" #: expr.c:1397 msgid "traditional C rejects the unary plus operator" msgstr "" #: expr.c:1480 msgid "comma operator in operand of #if" msgstr "" #: expr.c:1612 msgid "division by zero in #if" msgstr "" #: files.c:442 msgid "NULL directory in find_file" msgstr "" #: files.c:480 msgid "one or more PCH files were found, but they were invalid" msgstr "" #: files.c:483 msgid "use -Winvalid-pch for more information" msgstr "" #: files.c:570 #, c-format msgid "%s is a block device" msgstr "" #: files.c:587 #, c-format msgid "%s is too large" msgstr "" #: files.c:622 #, c-format msgid "%s is shorter than expected" msgstr "" #: files.c:852 #, c-format msgid "no include path in which to search for %s" msgstr "" #: files.c:1157 msgid "Multiple include guards may be useful for:\n" msgstr "" #: init.c:426 msgid "cppchar_t must be an unsigned type" msgstr "" #: init.c:430 #, c-format msgid "" "preprocessor arithmetic has maximum precision of %lu bits; target requires %" "lu bits" msgstr "" #: init.c:437 msgid "CPP arithmetic must be at least as precise as a target int" msgstr "" #: init.c:440 msgid "target char is less than 8 bits wide" msgstr "" #: init.c:444 msgid "target wchar_t is narrower than target char" msgstr "" #: init.c:448 msgid "target int is narrower than target char" msgstr "" #: init.c:453 msgid "CPP half-integer narrower than CPP character" msgstr "" #: init.c:457 #, c-format msgid "" "CPP on this host cannot handle wide character constants over %lu bits, but " "the target requires %lu bits" msgstr "" #: lex.c:283 msgid "backslash and newline separated by space" msgstr "" #: lex.c:288 msgid "backslash-newline at end of file" msgstr "" #: lex.c:303 #, c-format msgid "trigraph ??%c converted to %c" msgstr "" #: lex.c:310 #, c-format msgid "trigraph ??%c ignored, use -trigraphs to enable" msgstr "" #: lex.c:356 msgid "\"/*\" within comment" msgstr "" #: lex.c:414 #, c-format msgid "%s in preprocessing directive" msgstr "" #: lex.c:423 msgid "null character(s) ignored" msgstr "" #: lex.c:460 #, c-format msgid "`%.*s' is not in NFKC" msgstr "" #: lex.c:463 #, c-format msgid "`%.*s' is not in NFC" msgstr "" #: lex.c:551 #, c-format msgid "attempt to use poisoned \"%s\"" msgstr "" #: lex.c:559 msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "" #: lex.c:659 msgid "null character(s) preserved in literal" msgstr "" #: lex.c:662 #, c-format msgid "missing terminating %c character" msgstr "" #: lex.c:1027 msgid "C++ style comments are not allowed in ISO C90" msgstr "" #: lex.c:1029 msgid "(this will be reported only once per input file)" msgstr "" #: lex.c:1034 msgid "multi-line comment" msgstr "" #: lex.c:1347 #, c-format msgid "unspellable token %s" msgstr "" #: line-map.c:320 #, c-format msgid "In file included from %s:%u" msgstr "" #: line-map.c:338 #, c-format msgid "" ",\n" " from %s:%u" msgstr "" #: macro.c:84 #, c-format msgid "macro \"%s\" is not used" msgstr "" #: macro.c:123 #: macro.c:319 #, c-format msgid "invalid built-in macro \"%s\"" msgstr "" #: macro.c:157 msgid "could not determine file timestamp" msgstr "" #: macro.c:254 msgid "could not determine date and time" msgstr "" #: macro.c:270 msgid "__COUNTER__ expanded inside directive with -fdirectives-only" msgstr "" #: macro.c:423 msgid "invalid string literal, ignoring final '\\'" msgstr "" #: macro.c:483 #, c-format msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "" #: macro.c:558 msgid "ISO C99 requires rest arguments to be used" msgstr "" #: macro.c:563 #, c-format msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "" #: macro.c:568 #, c-format msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "" #: macro.c:679 #: traditional.c:680 #, c-format msgid "unterminated argument list invoking macro \"%s\"" msgstr "" #: macro.c:782 #, c-format msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "" #: macro.c:1325 #, c-format msgid "duplicate macro parameter \"%s\"" msgstr "" #: macro.c:1371 #, c-format msgid "\"%s\" may not appear in macro parameter list" msgstr "" #: macro.c:1379 msgid "macro parameters must be comma-separated" msgstr "" #: macro.c:1396 msgid "parameter name missing" msgstr "" #: macro.c:1413 msgid "anonymous variadic macros were introduced in C99" msgstr "" #: macro.c:1418 msgid "ISO C does not permit named variadic macros" msgstr "" #: macro.c:1427 msgid "missing ')' in macro parameter list" msgstr "" #: macro.c:1476 msgid "'##' cannot appear at either end of a macro expansion" msgstr "" #: macro.c:1510 msgid "ISO C99 requires whitespace after the macro name" msgstr "" #: macro.c:1534 msgid "missing whitespace after the macro name" msgstr "" #: macro.c:1564 msgid "'#' is not followed by a macro parameter" msgstr "" #: macro.c:1683 #, c-format msgid "\"%s\" redefined" msgstr "" #: macro.c:1688 msgid "this is the location of the previous definition" msgstr "" #: macro.c:1738 #, c-format msgid "macro argument \"%s\" would be stringified in traditional C" msgstr "" #: macro.c:1761 #, c-format msgid "invalid hash type %d in cpp_macro_definition" msgstr "" #: pch.c:84 #: pch.c:332 #: pch.c:344 #: pch.c:362 #: pch.c:368 #: pch.c:377 msgid "while writing precompiled header" msgstr "" #: pch.c:485 #, c-format msgid "%s: not used because `%.*s' not defined" msgstr "" #: pch.c:497 #, c-format msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'" msgstr "" #: pch.c:538 #, c-format msgid "%s: not used because `%s' is defined" msgstr "" #: pch.c:558 #, c-format msgid "%s: not used because `__COUNTER__' is invalid" msgstr "" #: pch.c:567 #: pch.c:737 msgid "while reading precompiled header" msgstr "" #: traditional.c:750 #, c-format msgid "detected recursion whilst expanding macro \"%s\"" msgstr "" #: traditional.c:917 msgid "syntax error in macro parameter list" msgstr "" nescc-1.3.4/libcpp/po/da.po000066400000000000000000022145361177770303300154520ustar00rootroot00000000000000# Danish version of GCC strings. # Copyright (C) 2002, 03 Free Software Foundation, Inc. # Ole Laursen , 2001, 02, 03. # # Konventioner: # # ABI -> binr grnseflade # ANSI -> (har jeg tilladt mig at opdatere til (modsvarer Info-hjlpen)) ISO # access -> tilgangs- # aggregate -> en variabel af en sammensat type (fx struct, class) # ambigeous -> tvetydig # arg, argument -> parameter (for ikke at blande sammen med diskussionsargument) # array -> tabel # assembler -> maskinkodeoverstter # assertion -> postulat # attribute -> egenskab # base class -> stamklasse # basic block -> basisblok (funktioner deles op i disse under oversttelsen) # braces -> krllede paranteser # braced-group -> stningsblok # branch -> forgrening # buffer -> mellemlager # cast -> typetildeling, omtvingelse af typen # con-/destructor -> kon-/destruktionsfunktion # conflicting -> modstridende # convert -> konvertere, omdanne # declared -> erklret # defaults to -> antages at vre # dereference -> flge # discard -> fjerne # discard -> kassere # driver -> styringsprogram # duplicate -> optrder mere end n gang; mangfoldiggre # edge list -> kantliste # elt -> udtrykstr # endian -> endet (fx storendet, lillendet) # endianness -> endethed # exception handling -> hndtering af undtagelser # excess -> for mange # expansion -> udfoldning # extra -> (ret ofte) overskydende # floating point -> kommatal # formals -> parametre # format string -> formateringsstreng # forward -> forhnd (f.eks. forhndserklring) # frame table -> rammetabel # friend -> ven(ne-) # gp (general purpose) register -> alment register (havde frst brug- med, med det er overfldigt) # hard register -> hardware-register # have no effect -> udvirker intet # identifier -> kaldenavn # incompatible -> uforenelig, passer ikke # incomplete -> ufuldstndig # initialize -> tildele startvrdi, klargre # initializer -> startvrdi # initializer list -> klargringsliste # inline -> integrede, indbygges (eller som reserveret ord: inline) # instance -> instans (fx af en klasse) # issue (fx warnings) -> fremkom med # iterator -> lkkevariabel # junk -> ragelse # keyword -> reserveret ord # label -> etiket # linking -> sammenkdning # lvalue -> venstrevrdi # macro -> makro # malformed -> forkert udformet, misdannet # member function/method -> [medlems]funktion (metode i Objective C) # mismatch -> passer ikke med # mmap -> indlse # modifier, qualifier -> modifikation # multiple inheritance -> multipel nedarvning # newline -> linjeskift # non-numeric -> ikke et tal # null character -> nultegn # null pointer -> nul[-]henvisning # offset -> forskydning # opcodes (til ovenstende) -> instruktioner # out of range -> uden for det gyldige (til tider mulige) interval # overflow -> (til tider) lber over # overlap -> [interval]sammenfald # overloading -> flertydiggrelse # padding -> udfylning # pass -> overbringe (fx parametre), videregive # pointer -> henvisning[svariabel] # preprocessor -> prprocessor # profiling -> profilering # promote -> forfremme # request -> (til tider) foresprgsel # return -> returnerer # schedule -> planlg # scope -> virkningsfelt # shadowing -> skygger for # shift -> skift # specified -> (oftest) angivet # specifier -> anvisning, angivelse # stab -> stik (?) # statement -> stning # storage class -> lagringsklasse # strict -> nje # string -> streng # subscript -> indeks, opslag # target -> ml[arkitektur] # template -> skabelon # thrown -> kastet # token -> symbol # top-level -> verste niveau # trigraphs ('??%c'-dimser) -> trigrafer # undefine -> glemme definitionen # undefined blahblah -> blahblah er ikke defineret # underscore -> understreg # universal-character-name -> universelt tegn[navn] # unsigned -> uden fortegn # varargs -> variable parameterlister # variadic macro -> makro med vilkrligt antal parametre # variabels -> variabler (med afslutnings-r) # vtable -> virtuel tabel # wide character -> bredtegn # white space -> mellemrum # whitespace -> mellemrum # # Reserverede ord ofte ikke oversat, ej heller er der anbragt ' omkring # (fx unsigned -> unsigned; derimod function -> funktion). Forkortelser # som decl (for declaration) og arg (for argument) er oversat uforkortet # - der er jo masser af plads at tage af. # msgid "" msgstr "" "Project-Id-Version: gcc 3.3\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2007-11-08 21:08+0000\n" "PO-Revision-Date: 2003-05-25 18:00+0200\n" "Last-Translator: Ole Laursen \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: charset.c:654 #, fuzzy, c-format msgid "conversion from %s to %s not supported by iconv" msgstr "konvertering fra NaN til unsigned int" #: charset.c:657 msgid "iconv_open" msgstr "" #: charset.c:665 #, c-format msgid "no iconv implementation, cannot convert from %s to %s" msgstr "" #: charset.c:742 #, fuzzy, c-format msgid "character 0x%lx is not in the basic source character set\n" msgstr "universelt tegnnavn str for '%c', som er en del af det basale kildekodetegnst" #: charset.c:759 charset.c:1352 msgid "converting to execution character set" msgstr "" #: charset.c:765 #, c-format msgid "character 0x%lx is not unibyte in execution character set" msgstr "" #: charset.c:889 #, c-format msgid "Character %x might not be NFKC" msgstr "" #: charset.c:949 #, fuzzy msgid "universal character names are only valid in C++ and C99" msgstr "universelt tegn '\\U%08x' er ikke gyldigt i kaldenavne" #: charset.c:952 #, c-format msgid "the meaning of '\\%c' is different in traditional C" msgstr "betydningen af '\\%c' er anderledes i traditionel C" #: charset.c:961 msgid "In _cpp_valid_ucn but not a UCN" msgstr "" #: charset.c:986 #, fuzzy, c-format msgid "incomplete universal character name %.*s" msgstr "ufuldstndigt universelt tegnnavn" #: charset.c:998 #, fuzzy, c-format msgid "%.*s is not a valid universal character" msgstr "'%T::%D' er ikke en gyldig erklrer" #: charset.c:1008 lex.c:484 #, fuzzy msgid "'$' in identifier or number" msgstr "'$'-tegn i kaldenavn eller tal" #: charset.c:1018 #, fuzzy, c-format msgid "universal character %.*s is not valid in an identifier" msgstr "universelt tegn '\\U%08x' er ikke gyldigt i kaldenavne" #: charset.c:1022 #, fuzzy, c-format msgid "universal character %.*s is not valid at the start of an identifier" msgstr "universelt tegn '\\U%08x' er ikke gyldigt i kaldenavne" #: charset.c:1056 charset.c:1571 #, fuzzy msgid "converting UCN to source character set" msgstr "konverterer NULL til en ikke-henvisningstype" #: charset.c:1060 #, fuzzy msgid "converting UCN to execution character set" msgstr "konverterer NULL til en ikke-henvisningstype" #: charset.c:1132 msgid "the meaning of '\\x' is different in traditional C" msgstr "betydningen af '\\x' er anderledes i traditionel C" #: charset.c:1149 msgid "\\x used with no following hex digits" msgstr "\\x angivet uden efterflgende hexadecimale cifre" #: charset.c:1156 msgid "hex escape sequence out of range" msgstr "den hexadecimale undvigesekvens er uden for det gyldige interval" #: charset.c:1195 msgid "octal escape sequence out of range" msgstr "den oktale undvigesekvens er uden for det gyldige interval" #: charset.c:1263 msgid "the meaning of '\\a' is different in traditional C" msgstr "betydningen af '\\a' er anderledes i traditionel C" #: charset.c:1270 #, c-format msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "undvigesekvensen '\\%c' er ikke ISO-standard" #: charset.c:1278 #, c-format msgid "unknown escape sequence '\\%c'" msgstr "ukendt undvigesekvensen '\\%c'" #: charset.c:1286 #, fuzzy, c-format msgid "unknown escape sequence: '\\%s'" msgstr "ukendt undvigesekvensen '\\%c'" #: charset.c:1293 #, fuzzy msgid "converting escape sequence to execution character set" msgstr "undvigesekvens er uden for det gyldig interval for tegn" #: charset.c:1415 charset.c:1478 msgid "character constant too long for its type" msgstr "tegnkonstanten er for lang for dens type" #: charset.c:1418 msgid "multi-character character constant" msgstr "flerbyte-tegnkonstant" #: charset.c:1510 msgid "empty character constant" msgstr "tom tegnkonstant" #: charset.c:1612 #, fuzzy, c-format msgid "failure to convert %s to %s" msgstr "kunne ikke konvertere '%E' til '%T'" #: directives.c:215 directives.c:241 #, c-format msgid "extra tokens at end of #%s directive" msgstr "ekstra symboler i slutningen af #%s-direktiv" #: directives.c:344 #, c-format msgid "#%s is a GCC extension" msgstr "#%s er en GCC-udvidelse" #: directives.c:356 msgid "suggest not using #elif in traditional C" msgstr "foreslr undladelse af brug af #elif i traditionel C" #: directives.c:359 #, c-format msgid "traditional C ignores #%s with the # indented" msgstr "traditionel C ignorerer #%s nr '#' er indrykket" #: directives.c:363 #, c-format msgid "suggest hiding #%s from traditional C with an indented #" msgstr "foreslr at skjule #%s fra traditionel C vha. indrykket '#'" #: directives.c:389 msgid "embedding a directive within macro arguments is not portable" msgstr "indlejring af et direktiv inden i makroparametre er ikke portabelt" #: directives.c:409 msgid "style of line directive is a GCC extension" msgstr "linjestilsdirektiv er en GCC-udvidelse" #: directives.c:464 #, c-format msgid "invalid preprocessing directive #%s" msgstr "ugyldigt prprocessordirektiv #%s" #: directives.c:532 msgid "\"defined\" cannot be used as a macro name" msgstr "\"defined\" kan ikke bruges som makronavn" #: directives.c:538 #, c-format msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "\"%s\" kan ikke bruges som et makronavn da det er en operator i C++" #: directives.c:541 #, c-format msgid "no macro name given in #%s directive" msgstr "intet makronavn angivet i direktivet #%s" #: directives.c:544 msgid "macro names must be identifiers" msgstr "makronavne skal vre kaldenavne" #: directives.c:585 #, c-format msgid "undefining \"%s\"" msgstr "glemmer definitionen af \"%s\"" #: directives.c:640 msgid "missing terminating > character" msgstr "manglende afsluttende '>'-tegn" #: directives.c:695 #, c-format msgid "#%s expects \"FILENAME\" or " msgstr "#%s forventer \"FILNAVN\" eller " #: directives.c:739 #, fuzzy, c-format msgid "empty filename in #%s" msgstr "tomt filnavn i #%s" #: directives.c:749 msgid "#include nested too deeply" msgstr "#include indlejret for dybt" #: directives.c:790 msgid "#include_next in primary source file" msgstr "#include_next i den primre kildekodefil" #: directives.c:816 #, c-format msgid "invalid flag \"%s\" in line directive" msgstr "ugyldigt flag \"%s\" i linjedirektiv" #: directives.c:868 #, c-format msgid "\"%s\" after #line is not a positive integer" msgstr "\"%s\" efter #line er ikke et positivt heltal" #: directives.c:874 msgid "line number out of range" msgstr "linjenummer er uden for det gyldige interval" #: directives.c:887 directives.c:964 #, c-format msgid "\"%s\" is not a valid filename" msgstr "\"%s\" er ikke et ugyldigt filnavn" #: directives.c:924 #, c-format msgid "\"%s\" after # is not a positive integer" msgstr "\"%s\" efter # er ikke et positivt heltal" #: directives.c:1026 #, fuzzy, c-format msgid "invalid #%s directive" msgstr "ugyldigt #ident-direktiv" #: directives.c:1089 #, c-format msgid "registering pragmas in namespace \"%s\" with mismatched name expansion" msgstr "" #: directives.c:1098 #, fuzzy, c-format msgid "registering pragma \"%s\" with name expansion and no namespace" msgstr "registrerer \"%s\" som bde et pragma og som et pragmanavnerum" #: directives.c:1116 #, c-format msgid "registering \"%s\" as both a pragma and a pragma namespace" msgstr "registrerer \"%s\" som bde et pragma og som et pragmanavnerum" #: directives.c:1119 #, c-format msgid "#pragma %s %s is already registered" msgstr "#pragma %s %s er allerede registreret" #: directives.c:1122 #, c-format msgid "#pragma %s is already registered" msgstr "#pragma %s er allerede registreret" #: directives.c:1152 msgid "registering pragma with NULL handler" msgstr "" #: directives.c:1362 msgid "#pragma once in main file" msgstr "'#pragma once' i hovedfil" #: directives.c:1385 msgid "invalid #pragma GCC poison directive" msgstr "ugyldigt #pragma GCC poison-direktiv" #: directives.c:1394 #, c-format msgid "poisoning existing macro \"%s\"" msgstr "forgifter eksisterende makro \"%s\"" #: directives.c:1413 msgid "#pragma system_header ignored outside include file" msgstr "'#pragma system_header' ignoreret uden for inkluderingsfil" #: directives.c:1437 #, fuzzy, c-format msgid "cannot find source file %s" msgstr "kan ikke finde kilden %s" #: directives.c:1441 #, c-format msgid "current file is older than %s" msgstr "aktuel fil er ldre end %s" #: directives.c:1620 msgid "_Pragma takes a parenthesized string literal" msgstr "_Pragma tager en strengkonstant med paranteser omkring" #: directives.c:1693 msgid "#else without #if" msgstr "#else uden #if" #: directives.c:1698 msgid "#else after #else" msgstr "#else efter #else" #: directives.c:1700 directives.c:1733 msgid "the conditional began here" msgstr "betingelsen begyndte her" #: directives.c:1726 msgid "#elif without #if" msgstr "#elif uden #if" #: directives.c:1731 msgid "#elif after #else" msgstr "#elif efter #else" #: directives.c:1761 msgid "#endif without #if" msgstr "#endif uden #if" #: directives.c:1838 msgid "missing '(' after predicate" msgstr "manglende '(' efter udsagn" #: directives.c:1853 msgid "missing ')' to complete answer" msgstr "manglende ')' til at fuldfre svar" #: directives.c:1873 msgid "predicate's answer is empty" msgstr "udsagnets svar et tomt" #: directives.c:1900 msgid "assertion without predicate" msgstr "postulat uden udsagn" #: directives.c:1902 msgid "predicate must be an identifier" msgstr "udsagn skal vre et kaldenavn" #: directives.c:1988 #, c-format msgid "\"%s\" re-asserted" msgstr "\"%s\" genpostuleret" #: directives.c:2271 #, c-format msgid "unterminated #%s" msgstr "uafsluttet #%s" #: directives-only.c:221 lex.c:1016 traditional.c:162 msgid "unterminated comment" msgstr "uafsluttet kommentar" #: errors.c:118 msgid "warning: " msgstr "advarsel: " #: errors.c:120 msgid "internal error: " msgstr "intern fejl: " #: errors.c:122 #, fuzzy msgid "error: " msgstr "intern fejl: " #: errors.c:186 msgid "stdout" msgstr "std-ud" #: errors.c:188 #, c-format msgid "%s: %s" msgstr "%s: %s" #: expr.c:261 msgid "too many decimal points in number" msgstr "for mange decimalkommaer i tal" #: expr.c:290 expr.c:365 #, fuzzy msgid "fixed-point constants are a GCC extension" msgstr "imaginre konstanter er en GCC-udvidelse" #: expr.c:303 #, fuzzy, c-format msgid "invalid digit \"%c\" in binary constant" msgstr "ugyldig ciffer \"%c\" i oktal konstant" #: expr.c:305 #, c-format msgid "invalid digit \"%c\" in octal constant" msgstr "ugyldig ciffer \"%c\" i oktal konstant" #: expr.c:313 #, fuzzy msgid "invalid prefix \"0b\" for floating constant" msgstr "ugyldig endelse \"%.*s\" i kommatalskonstant" #: expr.c:319 msgid "use of C99 hexadecimal floating constant" msgstr "brug af C99 hexadecimal kommatalskonstant" #: expr.c:328 msgid "exponent has no digits" msgstr "der er ingen cifre i eksponent" #: expr.c:335 msgid "hexadecimal floating constants require an exponent" msgstr "hexadecimal kommatalskonstant skal have en eksponent" #: expr.c:341 #, c-format msgid "invalid suffix \"%.*s\" on floating constant" msgstr "ugyldig endelse \"%.*s\" i kommatalskonstant" #: expr.c:351 expr.c:393 #, c-format msgid "traditional C rejects the \"%.*s\" suffix" msgstr "traditionel C tillader ikke endelsen \"%.*s\"" #: expr.c:358 #, fuzzy, c-format msgid "invalid suffix \"%.*s\" with hexadecimal floating constant" msgstr "ugyldig endelse \"%.*s\" i kommatalskonstant" #: expr.c:369 #, fuzzy msgid "decimal float constants are a GCC extension" msgstr "imaginre konstanter er en GCC-udvidelse" #: expr.c:379 #, c-format msgid "invalid suffix \"%.*s\" on integer constant" msgstr "ugyldig endelse \"%.*s\" i heltalskonstant" #: expr.c:401 msgid "use of C99 long long integer constant" msgstr "brug af ISO C99 long long-heltalskonstanter" #: expr.c:409 msgid "imaginary constants are a GCC extension" msgstr "imaginre konstanter er en GCC-udvidelse" #: expr.c:412 #, fuzzy msgid "binary constants are a GCC extension" msgstr "imaginre konstanter er en GCC-udvidelse" #: expr.c:505 msgid "integer constant is too large for its type" msgstr "heltalskonstanten er for stor for dens type" #: expr.c:517 msgid "integer constant is so large that it is unsigned" msgstr "heltalskonstanten er s stor at den er unsigned" #: expr.c:612 msgid "missing ')' after \"defined\"" msgstr "manglende ')' efter \"defined\"" #: expr.c:619 msgid "operator \"defined\" requires an identifier" msgstr "operatoren \"defined\" krver et kaldenavn" #: expr.c:627 #, c-format msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "(\"%s\" er et alternativt symbol for \"%s\" i C++)" #: expr.c:637 msgid "this use of \"defined\" may not be portable" msgstr "denne brug af \"defined\" er muligvis ikke portabel" #: expr.c:676 msgid "floating constant in preprocessor expression" msgstr "kommatalskonstant i prprocessorudtryk" #: expr.c:682 msgid "imaginary number in preprocessor expression" msgstr "imaginrt tal i prprocessorudtryk" #: expr.c:727 #, c-format msgid "\"%s\" is not defined" msgstr "\"%s\" er ikke defineret" #: expr.c:855 expr.c:884 #, c-format msgid "missing binary operator before token \"%s\"" msgstr "manglende binr operator fr symbolet \"%s\"" #: expr.c:875 #, c-format msgid "token \"%s\" is not valid in preprocessor expressions" msgstr "symbolet \"%s\" er ikke gyldigt i prprocessorudtryk" #: expr.c:892 #, fuzzy msgid "missing expression between '(' and ')'" msgstr "tomt udtryk mellem '(' og ')'" #: expr.c:895 msgid "#if with no expression" msgstr "#if uden noget udtryk" #: expr.c:898 #, c-format msgid "operator '%s' has no right operand" msgstr "operatoren '%s' har ikke nogen hjre operand" #: expr.c:903 #, c-format msgid "operator '%s' has no left operand" msgstr "operatoren '%s' har ikke nogen venstre operand" #: expr.c:929 msgid " ':' without preceding '?'" msgstr " ':' uden forudgende '?'" #: expr.c:956 msgid "unbalanced stack in #if" msgstr "uafbalanceret stak i #if" #: expr.c:975 #, c-format msgid "impossible operator '%u'" msgstr "umulig operator '%u'" #: expr.c:1065 msgid "missing ')' in expression" msgstr "manglende ')' i udtryk" #: expr.c:1086 msgid "'?' without following ':'" msgstr "'?' uden efterflgende ':'" #: expr.c:1096 msgid "integer overflow in preprocessor expression" msgstr "heltallet lber over i prprocessorudtrykket" #: expr.c:1101 msgid "missing '(' in expression" msgstr "manglende '(' i udtryk" #: expr.c:1133 #, c-format msgid "the left operand of \"%s\" changes sign when promoted" msgstr "den venstre operand til \"%s\" ndrer fortegn ved forfremmelse" #: expr.c:1138 #, c-format msgid "the right operand of \"%s\" changes sign when promoted" msgstr "den hjre operand til \"%s\" ndrer fortegn ved forfremmelse" #: expr.c:1397 msgid "traditional C rejects the unary plus operator" msgstr "traditionel C tillader ikke operatoren unr plus" #: expr.c:1480 msgid "comma operator in operand of #if" msgstr "kommeoperator i en operand til #if" #: expr.c:1612 msgid "division by zero in #if" msgstr "division med nul i #if" #: files.c:442 msgid "NULL directory in find_file" msgstr "" #: files.c:480 msgid "one or more PCH files were found, but they were invalid" msgstr "" #: files.c:483 msgid "use -Winvalid-pch for more information" msgstr "" #: files.c:570 #, c-format msgid "%s is a block device" msgstr "%s er en blokenhed" #: files.c:587 #, c-format msgid "%s is too large" msgstr "%s er for stor" #: files.c:622 #, c-format msgid "%s is shorter than expected" msgstr "%s er kortere end forventet" #: files.c:852 #, fuzzy, c-format msgid "no include path in which to search for %s" msgstr "der er ingen inkluderingssti at finde %s i" #: files.c:1157 msgid "Multiple include guards may be useful for:\n" msgstr "Flere inkluderingsvagter kan vre nyttige til:\n" #: init.c:426 msgid "cppchar_t must be an unsigned type" msgstr "cppchar_t skal vre en unsigned type" #: init.c:430 #, c-format msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits" msgstr "prprocessorberegning har en maksimal prcision p %lu bit; mlarkitektur krver %lu bit" #: init.c:437 msgid "CPP arithmetic must be at least as precise as a target int" msgstr "CPP-beregning skal vre mindst lige s prcis som en mlarkitekturs int" #: init.c:440 msgid "target char is less than 8 bits wide" msgstr "mlarkitekturs char er mindre end 8 bit bred" #: init.c:444 msgid "target wchar_t is narrower than target char" msgstr "mlarkitekturs wchar_t er mindre end mlarkitekturs char" #: init.c:448 msgid "target int is narrower than target char" msgstr "mlarkitekturs int er mindre end mlarkitekturs char" #: init.c:453 msgid "CPP half-integer narrower than CPP character" msgstr "CPP-halvheltal er mindre end CPP-tegn" #: init.c:457 #, c-format msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits" msgstr "CPP p denne vrt kan ikke hndtere bredtegnkonstanter over %lu bit, men mlarkitekturen krver %lu bit" #: lex.c:283 msgid "backslash and newline separated by space" msgstr "omvendt skrstreg og linjeskift er adskilt af mellemrum" #: lex.c:288 msgid "backslash-newline at end of file" msgstr "omvendt skrstreg efterfulgt af linjeskift ved slutningen af filen" #: lex.c:303 #, c-format msgid "trigraph ??%c converted to %c" msgstr "trigrafen ??%c konverteret til %c" #: lex.c:310 #, fuzzy, c-format msgid "trigraph ??%c ignored, use -trigraphs to enable" msgstr "trigrafen ??%c ignoreret" #: lex.c:356 msgid "\"/*\" within comment" msgstr "\"/*\" i en kommentar" #: lex.c:414 #, c-format msgid "%s in preprocessing directive" msgstr "%s i prprocessordirektiv" #: lex.c:423 msgid "null character(s) ignored" msgstr "nultegn ignoreret" #: lex.c:460 #, fuzzy, c-format msgid "`%.*s' is not in NFKC" msgstr "\"%s\" er ikke defineret" #: lex.c:463 #, fuzzy, c-format msgid "`%.*s' is not in NFC" msgstr "\"%s\" er ikke defineret" #: lex.c:551 #, c-format msgid "attempt to use poisoned \"%s\"" msgstr "forsg p at bruge forgiftet \"%s\"" #: lex.c:559 msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "__VA_ARGS__ kan kun optrde i udfoldelsen af en C99-makro med vilkrligt antal parametre" #: lex.c:659 msgid "null character(s) preserved in literal" msgstr "nultegn bevaret i strengkonstant" #: lex.c:662 #, c-format msgid "missing terminating %c character" msgstr "manglende afsluttende '%c'-tegn" #: lex.c:1027 msgid "C++ style comments are not allowed in ISO C90" msgstr "kommentarer i C++-stil er ikke tilladt i ISO C90" #: lex.c:1029 msgid "(this will be reported only once per input file)" msgstr "(dette rapporteres kun en enkelt gang per inddatafil)" #: lex.c:1034 msgid "multi-line comment" msgstr "flerlinjers kommentar" #: lex.c:1347 #, c-format msgid "unspellable token %s" msgstr "symbol %s kan ikke staves" #: line-map.c:320 #, c-format msgid "In file included from %s:%u" msgstr "I filen inkluderet af %s:%u" #: line-map.c:338 #, c-format msgid "" ",\n" " from %s:%u" msgstr "" ",\n" " af %s:%u" #: macro.c:84 #, c-format msgid "macro \"%s\" is not used" msgstr "makroen \"%s\" bliver ikke brugt" #: macro.c:123 macro.c:319 #, c-format msgid "invalid built-in macro \"%s\"" msgstr "ugyldig indbygget makro \"%s\"" #: macro.c:157 #, fuzzy msgid "could not determine file timestamp" msgstr "kunne ikke bestemme dato og tid" #: macro.c:254 msgid "could not determine date and time" msgstr "kunne ikke bestemme dato og tid" #: macro.c:270 msgid "__COUNTER__ expanded inside directive with -fdirectives-only" msgstr "" #: macro.c:423 msgid "invalid string literal, ignoring final '\\'" msgstr "ugyldig strengkonstant, ignorerer afsluttende '\\'" #: macro.c:483 #, c-format msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "indsttelse af \"%s\" og \"%s\" giver ikke et gyldigt prprocessorsymbol" #: macro.c:558 msgid "ISO C99 requires rest arguments to be used" msgstr "ISO C99 pkrver at restparametrene skal bruges" #: macro.c:563 #, c-format msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "makroen \"%s\" krver %u parametre, men modtager kun %u" #: macro.c:568 #, c-format msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "makroen \"%s\" bliver viderebragt %u parametre, men tager kun mod %u" #: macro.c:679 traditional.c:680 #, c-format msgid "unterminated argument list invoking macro \"%s\"" msgstr "uafsluttet parameterliste ved kald af makroen \"%s\"" #: macro.c:782 #, c-format msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "funktionsagtig makro \"%s\" skal bruges med parametre i traditionel C" #: macro.c:1325 #, c-format msgid "duplicate macro parameter \"%s\"" msgstr "makroparameternavnet \"%s\" optrder mere end n gang" #: macro.c:1371 #, c-format msgid "\"%s\" may not appear in macro parameter list" msgstr "\"%s\" m ikke optrde i makroparameterliste" #: macro.c:1379 msgid "macro parameters must be comma-separated" msgstr "makroparametre skal vre komma-adskilte" #: macro.c:1396 msgid "parameter name missing" msgstr "parameternavn mangler" #: macro.c:1413 msgid "anonymous variadic macros were introduced in C99" msgstr "anonyme makroer med vilkrligt antal parametre blev introduceret i C99" #: macro.c:1418 msgid "ISO C does not permit named variadic macros" msgstr "ISO C tillader ikke navngivne makroer med vilkrligt antal parametre" #: macro.c:1427 msgid "missing ')' in macro parameter list" msgstr "manglende ')' i makroparameterliste" #: macro.c:1476 msgid "'##' cannot appear at either end of a macro expansion" msgstr "'##' m ikke optrde ved nogen af enderne i en makrokrop" #: macro.c:1510 #, fuzzy msgid "ISO C99 requires whitespace after the macro name" msgstr "ISO C pkrver mellemrum efter makronavnet" #: macro.c:1534 #, fuzzy msgid "missing whitespace after the macro name" msgstr "ISO C pkrver mellemrum efter makronavnet" #: macro.c:1564 msgid "'#' is not followed by a macro parameter" msgstr "'#' efterflges ikke af en makroparameter" #: macro.c:1683 #, c-format msgid "\"%s\" redefined" msgstr "\"%s\" omdefineret" #: macro.c:1688 msgid "this is the location of the previous definition" msgstr "den foregende definition er her" #: macro.c:1738 #, c-format msgid "macro argument \"%s\" would be stringified in traditional C" msgstr "makroparameteren \"%s\" ville blive gjort til en streng i traditionel C" #: macro.c:1761 #, c-format msgid "invalid hash type %d in cpp_macro_definition" msgstr "ugyldig hashtype %d i cpp_macro_definition" #: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377 msgid "while writing precompiled header" msgstr "" #: pch.c:485 #, fuzzy, c-format msgid "%s: not used because `%.*s' not defined" msgstr "etiketten '%s' er benyttet, men ikke defineret" #: pch.c:497 #, c-format msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'" msgstr "" #: pch.c:538 #, fuzzy, c-format msgid "%s: not used because `%s' is defined" msgstr "'%s' brugt, men aldrig defineret" #: pch.c:558 #, c-format msgid "%s: not used because `__COUNTER__' is invalid" msgstr "" #: pch.c:567 pch.c:737 msgid "while reading precompiled header" msgstr "" #: traditional.c:750 #, c-format msgid "detected recursion whilst expanding macro \"%s\"" msgstr "opdagede rekursion ved udfoldelse af makroen \"%s\"" #: traditional.c:917 #, fuzzy msgid "syntax error in macro parameter list" msgstr "\"%s\" m ikke optrde i makroparameterliste" #~ msgid "`%s' attribute directive ignored" #~ msgstr "egenskabsdirektivet '%s' ignoreret" #~ msgid "wrong number of arguments specified for `%s' attribute" #~ msgstr "forkert antal parametre angivet til egenskaben '%s'" #~ msgid "`%s' attribute does not apply to types" #~ msgstr "egenskaben '%s' kan ikke anvendes p typer" #~ msgid "`%s' attribute only applies to function types" #~ msgstr "egenskaben '%s' kan kun anvendes sammen med funktionstyper" #~ msgid "`%s' attribute ignored" #~ msgstr "egenskaben '%s' ignoreret" #~ msgid "offset outside bounds of constant string" #~ msgstr "forskydning udenfor grnserne af konstant streng" #~ msgid "second arg to `__builtin_prefetch' must be a constant" #~ msgstr "den anden parameter til '__builtin_prefetch' skal vre en konstant" #~ msgid "invalid second arg to __builtin_prefetch; using zero" #~ msgstr "ugyldig anden parameter til '__builtin_prefetch'; benytter nul" #~ msgid "third arg to `__builtin_prefetch' must be a constant" #~ msgstr "en tredje parameter til '__builtin_prefetch' skal vre en konstant" #~ msgid "invalid third arg to __builtin_prefetch; using zero" #~ msgstr "ugyldig tredje parameter til '__builtin_prefetch'; benytter nul" #~ msgid "__builtin_saveregs not supported by this target" #~ msgstr "__builtin_saveregs understttes ikke af denne mlarkitektur" #~ msgid "argument of `__builtin_args_info' must be constant" #~ msgstr "parameteren til '__builtin_args_info' skal vre konstant" #~ msgid "argument of `__builtin_args_info' out of range" #~ msgstr "parameteren til '__builtin_args_info' er uden for det gyldige interval" #~ msgid "missing argument in `__builtin_args_info'" #~ msgstr "manglende parameter i '__builtin_args_info'" #~ msgid "`va_start' used in function with fixed args" #~ msgstr "`va_start' benyttet i en funktion med fast antal parametre" #~ msgid "second parameter of `va_start' not last named argument" #~ msgstr "den anden parameter til 'va_start' er ikke den sidste navngivne parameter" #~ msgid "`__builtin_next_arg' called without an argument" #~ msgstr "`__builtin_next_arg' kaldt uden en parameter" #~ msgid "too many arguments to function `va_start'" #~ msgstr "for mange parametre til funktionen 'va_start'" #~ msgid "first argument to `va_arg' not of type `va_list'" #~ msgstr "den frste parameter til 'va_arg' er ikke af typen 'va_list'" #~ msgid "`%s' is promoted to `%s' when passed through `...'" #~ msgstr "'%s' forfremmes til '%s' ved overbringelse gennem '...'" #~ msgid "(so you should pass `%s' not `%s' to `va_arg')" #~ msgstr "(s du skal overbring '%s' ikke '%s' til 'va_arg')" #~ msgid "invalid arg to `__builtin_frame_address'" #~ msgstr "ugyldig parameter til '__builtin_frame_address'" #~ msgid "invalid arg to `__builtin_return_address'" #~ msgstr "ugyldig parameter til '__builtin_return_address'" #~ msgid "unsupported arg to `__builtin_frame_address'" #~ msgstr "ikke-understttet parameter til '__builtin_frame_address'" #~ msgid "unsupported arg to `__builtin_return_address'" #~ msgstr "ikke-understttet parameter til '__builtin_return_address'" #~ msgid "second arg to `__builtin_expect' must be a constant" #~ msgstr "den anden parameter til '__builtin_expect' skal vre en konstant" #~ msgid "__builtin_longjmp second argument must be 1" #~ msgstr "den anden paramter til '__builtin_longjmp' skal vre 1" #~ msgid "built-in function `%s' not currently supported" #~ msgstr "den indbyggede funktion '%s' understttes i jeblikket ikke" #~ msgid "target format does not support infinity" #~ msgstr "mlprocessoren understtter ikke uendelig" #~ msgid "`%s' is not defined outside of function scope" #~ msgstr "'%s' er ikke defineret uden for funktionsvirkefelt" #~ msgid "string length `%d' is greater than the length `%d' ISO C%d compilers are required to support" #~ msgstr "strenglngden '%d' er strre end den lngde p '%d' som ISO C%d-oversttere er plagt at understtte" #~ msgid "concatenation of string literals with __FUNCTION__ is deprecated" #~ msgstr "sammenstning af strengkonstanter med __FUNCTION__ er forldet" #~ msgid "overflow in constant expression" #~ msgstr "overlb i konstant udtryk" #~ msgid "integer overflow in expression" #~ msgstr "heltalsoverlb i udtryk" #~ msgid "floating point overflow in expression" #~ msgstr "kommatalsoverlb i udtryk" #~ msgid "vector overflow in expression" #~ msgstr "vektoroverlb i udtryk" #~ msgid "large integer implicitly truncated to unsigned type" #~ msgstr "stort heltal forkortes underforstet til type uden fortegn" #~ msgid "negative integer implicitly converted to unsigned type" #~ msgstr "negativt heltal forkortes underforstet til type uden fortegn" #~ msgid "overflow in implicit constant conversion" #~ msgstr "overlb i underforstet konstant konvertering" #~ msgid "operation on `%s' may be undefined" #~ msgstr "brug af '%s' er muligvis ikke defineret" #~ msgid "expression statement has incomplete type" #~ msgstr "udtrykket er af en ufuldstndig type" #~ msgid "case label does not reduce to an integer constant" #~ msgstr "case-etiketten kan ikke reduceres til en heltalskonstant" #~ msgid "invalid truth-value expression" #~ msgstr "ugyldigt sandhedsvrdiudtryk" #~ msgid "invalid operands to binary %s" #~ msgstr "ugyldige operander til binr %s" #~ msgid "comparison is always false due to limited range of data type" #~ msgstr "sammenligning er altid falsk p grund af den begrnsede rkkevidde af datatypen" #~ msgid "comparison is always true due to limited range of data type" #~ msgstr "sammenligning er altid sand p grund af den begrnsede rkkevidde af datatypen" #~ msgid "comparison of unsigned expression >= 0 is always true" #~ msgstr "sammenligning med unsigned udtryk >= 0 er altid sand" #~ msgid "comparison of unsigned expression < 0 is always false" #~ msgstr "sammenligning med unsigned udtryk < 0 er altid falsk" #~ msgid "pointer of type `void *' used in arithmetic" #~ msgstr "henvisning af typen 'void *' benyttet i udregning" #~ msgid "pointer to a function used in arithmetic" #~ msgstr "henvisning til en funktion benyttet i udregning" #~ msgid "pointer to member function used in arithmetic" #~ msgstr "henvisning til en medlemsfunktion benyttet i udregning" #~ msgid "pointer to a member used in arithmetic" #~ msgstr "henvisning til et medlem benyttet i udregning" #~ msgid "struct type value used where scalar is required" #~ msgstr "vrdi af struct-type angivet hvor skalar er pkrvet" #~ msgid "union type value used where scalar is required" #~ msgstr "vrdi af union-type angivet hvor skalar er pkrvet" #~ msgid "array type value used where scalar is required" #~ msgstr "vrdi af tabeltype angivet hvor skalar er pkrvet" #~ msgid "suggest parentheses around assignment used as truth value" #~ msgstr "foreslr paranteser omkring tildeling der er benyttet som boolsk vrdi" #~ msgid "invalid use of `restrict'" #~ msgstr "ugyldig brug af 'restrict'" #~ msgid "invalid application of `sizeof' to a function type" #~ msgstr "ugyldig anvendelse af 'sizeof' p en funktionstype" #~ msgid "invalid application of `%s' to a void type" #~ msgstr "ugyldig anvendelse af '%s' p en void-type" #~ msgid "invalid application of `%s' to an incomplete type" #~ msgstr "ugyldig anvendelse af '%s' p en ufuldstndig type" #~ msgid "`__alignof' applied to a bit-field" #~ msgstr "'__alignof' benyttet p et bitfelt" #~ msgid "cannot disable built-in function `%s'" #~ msgstr "kan ikke deaktivere den indbyggede funktion '%s'" #~ msgid "too few arguments to function `%s'" #~ msgstr "for f parametre til funktionen '%s'" #~ msgid "too many arguments to function `%s'" #~ msgstr "for mange parametre til funktionen '%s'" #~ msgid "non-floating-point argument to function `%s'" #~ msgstr "parameter der ikke er et kommatal, til funktionen '%s'" #~ msgid "pointers are not permitted as case values" #~ msgstr "henvisningsvariabler er ikke tilladt som case-vrdier" #~ msgid "ISO C++ forbids range expressions in switch statements" #~ msgstr "ISO C++ forbyder intervaludtryk i switch-stninger" #~ msgid "ISO C forbids range expressions in switch statements" #~ msgstr "ISO C forbyder intervaludtryk i switch-stninger" #~ msgid "empty range specified" #~ msgstr "tomt interval angivet" #~ msgid "duplicate (or overlapping) case value" #~ msgstr "case-vrdi optrder mere end n gang (mske pga. intervalsammenfald)" #~ msgid "this is the first entry overlapping that value" #~ msgstr "dette er det frste punkt som falder sammen med den vrdi" #~ msgid "duplicate case value" #~ msgstr "case-vrdi optrder mere end n gang" #~ msgid "previously used here" #~ msgstr "tidligere benyttet her" #~ msgid "multiple default labels in one switch" #~ msgstr "flere default-etiketter i n switch-konstruktion" #~ msgid "this is the first default label" #~ msgstr "dette er den frste default-etiket" #~ msgid "ISO C++ forbids taking the address of a label" #~ msgstr "ISO C++ forbyder at tage adressen af en etiket" #~ msgid "ISO C forbids taking the address of a label" #~ msgstr "ISO C forbyder at tage adressen af en etiket" #~ msgid "declaration of `%s' shadows %s" #~ msgstr "erklring af '%s' skygger for '%s'" #~ msgid "unknown machine mode `%s'" #~ msgstr "ukendt maskintilstand '%s'" #~ msgid "no data type for mode `%s'" #~ msgstr "ingen datatype til tilstanden '%s'" #~ msgid "unable to emulate '%s'" #~ msgstr "kunne ikke emulere '%s'" #~ msgid "section attribute cannot be specified for local variables" #~ msgstr "sektionsegenskaben kan ikke angives for lokale variabler" #~ msgid "section of `%s' conflicts with previous declaration" #~ msgstr "sektionen '%s' strider mod tidligere erklring" #~ msgid "section attribute not allowed for `%s'" #~ msgstr "sektionsegenskaben er ikke tilladt for '%s'" #~ msgid "section attributes are not supported for this target" #~ msgstr "sektionsegenskaber understttes ikke p denne mlarkitektur" #~ msgid "requested alignment is not a constant" #~ msgstr "angivet justering er ikke en konstant" #~ msgid "requested alignment is not a power of 2" #~ msgstr "angivet justering er ikke en potens af 2" #~ msgid "requested alignment is too large" #~ msgstr "angivet justering er for stor" #~ msgid "alignment may not be specified for `%s'" #~ msgstr "justering m ikke angives for '%s'" #~ msgid "`%s' defined both normally and as an alias" #~ msgstr "'%s' er defineret bde normalt og som et alias" #~ msgid "alias arg not a string" #~ msgstr "aliasparameter er ikke en streng" #~ msgid "visibility arg not a string" #~ msgstr "synlighedsparameter er ikke en streng" #~ msgid "visibility arg must be one of \"default\", \"hidden\", \"protected\" or \"internal\"" #~ msgstr "synlighedsparameter skal vre en af \"default\", \"hidden\", \"protected\" eller \"internal\"" #~ msgid "tls_model arg not a string" #~ msgstr "tls_model-parameter er ikke en streng" #~ msgid "tls_model arg must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"" #~ msgstr "tls_model-parameter skal vre en af \"local-exec\", \"initial-exec\", \"local-dynamic\" eller \"global-dynamic\"" #~ msgid "`%s' attribute applies only to functions" #~ msgstr "'%s'-egenskaben kan kun anvendes sammen med funktioner" #~ msgid "can't set `%s' attribute after definition" #~ msgstr "kan ikke angive '%s'-egenskaben efter definitionen" #~ msgid "`%s' attribute ignored for `%s'" #~ msgstr "'%s'-egenskaben ignoreret for '%s'" #~ msgid "invalid vector type for attribute `%s'" #~ msgstr "ugyldig vektortype for egenskaben '%s'" #~ msgid "no vector mode with the size and type specified could be found" #~ msgstr "ingen vektortilstand med den angivne strrelse og typen kunne findes" #~ msgid "nonnull attribute without arguments on a non-prototype" #~ msgstr "ikke-nul egenskab uden parametre til en ikke-prototype" #~ msgid "nonnull argument has invalid operand number (arg %lu)" #~ msgstr "ikke-nul parameter har ugyldig operandnummer (parameter %lu)" #~ msgid "nonnull argument with out-of-range operand number (arg %lu, operand %lu)" #~ msgstr "ikke-nul parameter med operandnummer uden for det gyldig interval (parameter %lu, operand %lu)" #~ msgid "nonnull argument references non-pointer operand (arg %lu, operand %lu)" #~ msgstr "ikke-nul parameter refererer til ikke-henvisningsoperand (parameter %lu, operand %lu)" #~ msgid "null argument where non-null required (arg %lu)" #~ msgstr "nulparameter hvor ikke-nul er pkrvet (parameter %lu)" #~ msgid "void value not ignored as it ought to be" #~ msgstr "tom vrdi er ikke ignoreret som den burde vre" #~ msgid "conversion to non-scalar type requested" #~ msgstr "konvertering til ikke-skalartype udbedt" #~ msgid "array `%s' assumed to have one element" #~ msgstr "tabellen '%s' antages kun at have t element" #~ msgid "`struct %s' incomplete in scope ending here" #~ msgstr "'struct %s' er ufuldstndig ved virkefeltets afslutning her" #~ msgid "`union %s' incomplete in scope ending here" #~ msgstr "'union %s' er ufuldstndig ved virkefeltets afslutning her" #~ msgid "`enum %s' incomplete in scope ending here" #~ msgstr "'enum %s' er ufuldstndig ved virkefeltets afslutning her" #~ msgid "label `%s' defined but not used" #~ msgstr "etiketten '%s' er defineret, men ikke benyttet" #~ msgid "function `%s' redeclared as inline" #~ msgstr "funktionen '%s' omerklret som inline" #~ msgid "previous declaration of function `%s' with attribute noinline" #~ msgstr "tidligere erklring af funktionen '%s' med egenskaben noinline" #~ msgid "function `%s' redeclared with attribute noinline" #~ msgstr "funktionen '%s' omerklret med egenskaben noinline" #~ msgid "previous declaration of function `%s' was inline" #~ msgstr "tidligere erklring af funktionen '%s' var inline" # shadowing betyder at en funktion har samme navn og dermed skjuler en anden #~ msgid "shadowing built-in function `%s'" #~ msgstr "skygger for den indbyggede funktion '%s'" #~ msgid "shadowing library function `%s'" #~ msgstr "skygger for biblioteksfunktionen '%s'" #~ msgid "library function `%s' declared as non-function" #~ msgstr "biblioteksfunktionen '%s' er erklret som noget der ikke er en funktion" #~ msgid "built-in function `%s' declared as non-function" #~ msgstr "den indbyggede funktion '%s' er erklret som noget der ikke er en funktion" #~ msgid "`%s' redeclared as different kind of symbol" #~ msgstr "'%s' omerklret som en anden form for symbol" #~ msgid "previous declaration of `%s'" #~ msgstr "'%s' er tidligere erklret" #~ msgid "conflicting types for built-in function `%s'" #~ msgstr "modstridende typer for den indbyggede funktion '%s'" #~ msgid "conflicting types for `%s'" #~ msgstr "modstridende typer for '%s'" #~ msgid "a parameter list with an ellipsis can't match an empty parameter name list declaration" #~ msgstr "en parameterliste med '...' passer ikke til en erklring med en tom parameterliste" #~ msgid "an argument type that has a default promotion can't match an empty parameter name list declaration" #~ msgstr "en parametertype med automatisk forfremmelse passer ikke til en erklring med en tom parameterliste" #~ msgid "thread-local declaration of `%s' follows non thread-local declaration" #~ msgstr "trdlokal erklring af '%s' flger ikke-trdlokal erklring" #~ msgid "non thread-local declaration of `%s' follows thread-local declaration" #~ msgstr "ikke-trdlokal erklring af '%s' flger trdlokal erklring" #~ msgid "redefinition of `%s'" #~ msgstr "omdefinering af '%s'" #~ msgid "redeclaration of `%s'" #~ msgstr "omerklring af '%s'" #~ msgid "conflicting declarations of `%s'" #~ msgstr "modstridende erklringer af '%s'" #~ msgid "prototype for `%s' follows" #~ msgstr "prototypen for '%s' flger" #~ msgid "non-prototype definition here" #~ msgstr "definition uden prototype her" #~ msgid "prototype for `%s' follows and number of arguments doesn't match" #~ msgstr "prototypen for '%s' flger og antallet af parametre passer ikke" #~ msgid "prototype for `%s' follows and argument %d doesn't match" #~ msgstr "prototypen for '%s' flger og den %d. parameter passer ikke" #~ msgid "`%s' declared inline after being called" #~ msgstr "'%s' er erklret inline efter at vre blevet kaldt" #~ msgid "`%s' declared inline after its definition" #~ msgstr "'%s' er erklret inline efter dens definition" # anden 'declaration' er underforstet i engelsk original #~ msgid "static declaration for `%s' follows non-static" #~ msgstr "static-erklring af '%s' flger erklring uden static" #~ msgid "non-static declaration for `%s' follows static" #~ msgstr "erklring uden static af '%s' flger static-erklring" #~ msgid "const declaration for `%s' follows non-const" #~ msgstr "const-erklring af '%s' flger ikke-konstant erklring" #~ msgid "type qualifiers for `%s' conflict with previous decl" #~ msgstr "typemodifikationer for '%s' strider mod tidligere erklring" #~ msgid "redundant redeclaration of `%s' in same scope" #~ msgstr "overfldig omerklring af '%s' i samme virkefelt" #~ msgid "declaration of `%s' shadows a parameter" #~ msgstr "erklring af '%s' skygger for en parameter" #~ msgid "declaration of `%s' shadows a symbol from the parameter list" #~ msgstr "erklring af '%s' skygger for et symbol fra parameterlisten" #~ msgid "a parameter" #~ msgstr "en parameter" #~ msgid "a previous local" #~ msgstr "en tidligere lokal variabel" #~ msgid "a global declaration" #~ msgstr "en global erklring" #~ msgid "nested extern declaration of `%s'" #~ msgstr "indlejret extern-erklring af '%s'" #~ msgid "`%s' used prior to declaration" #~ msgstr "'%s' benyttes fr erklringen" #~ msgid "`%s' was declared implicitly `extern' and later `static'" #~ msgstr "'%s' blev underforstet erklret 'extern' og derefter 'static'" #~ msgid "type mismatch with previous external decl" #~ msgstr "typen passer ikke med tidligere ekstern erklring" #~ msgid "previous external decl of `%s'" #~ msgstr "tidligere ekstern erklring af '%s'" #~ msgid "type mismatch with previous implicit declaration" #~ msgstr "typen passer ikke med tidligere underforstet erklring" #~ msgid "previous implicit declaration of `%s'" #~ msgstr "tidligere underforstet erklring af '%s'" #~ msgid "`%s' was previously implicitly declared to return `int'" #~ msgstr "'%s' blev tidligere underforstet erklret til at returnere 'int'" #~ msgid "`%s' was declared `extern' and later `static'" #~ msgstr "'%s' blev erklret 'extern' og derefter 'static'" #~ msgid "extern declaration of `%s' doesn't match global one" #~ msgstr "extern-erklring af '%s' passer ikke med den globale" #~ msgid "`%s' locally external but globally static" #~ msgstr "'%s' er lokalt ekstern, men globalt statisk" #~ msgid "function `%s' was previously declared within a block" #~ msgstr "funktionen '%s' blev tidligere erklret inden for en blok" #~ msgid "implicit declaration of function `%s'" #~ msgstr "underforstet erklring af funktionen '%s'" #~ msgid "label %s referenced outside of any function" #~ msgstr "der er blevet henvist til etiketten '%s' uden for en funktion" #~ msgid "duplicate label declaration `%s'" #~ msgstr "etiketten '%s' er blevet erklret mere end n gang" #~ msgid "this is a previous declaration" #~ msgstr "dette er en tidligere erklring" #~ msgid "unnamed struct/union that defines no instances" #~ msgstr "unavngiven struct/union som ikke definerer nogen instanser" #~ msgid "useless keyword or type name in empty declaration" #~ msgstr "ubrugeligt reserveret ord eller typenavn i tom erklring" #~ msgid "two types specified in one empty declaration" #~ msgstr "to typer angivet i n tom erklring" #~ msgid "empty declaration" #~ msgstr "tom erklring" #~ msgid "ISO C90 does not support `static' or type qualifiers in parameter array declarators" #~ msgstr "ISO C90 understtter ikke 'static' eller typemodifikationer i parametertabelerklringer" #~ msgid "ISO C90 does not support `[*]' array declarators" #~ msgstr "ISO C90 understtter ikke tabelerklringer med '[*]'" #~ msgid "GCC does not yet properly implement `[*]' array declarators" #~ msgstr "GCC understtter endnu ikke ordentligt tabelerklringer med '[*]'" #~ msgid "static or type qualifiers in abstract declarator" #~ msgstr "static eller typemodifikationer i abstrakt erklring" #~ msgid "`%s' is usually a function" #~ msgstr "'%s' er sdvanligvis en funktion" # init dkker over vrditildeling her - samme for de nste mange #~ msgid "typedef `%s' is initialized (use __typeof__ instead)" #~ msgstr "typedef '%s' bliver tildelt en vrdi (benyt __typeof__ i stedet)" #~ msgid "function `%s' is initialized like a variable" #~ msgstr "funktionen '%s' bliver tildelt en startvrdi som en variabel" #~ msgid "parameter `%s' is initialized" #~ msgstr "parameteren '%s' bliver tildelt en startvrdi" #~ msgid "variable-sized object may not be initialized" #~ msgstr "et objekt af variabel strrelse m ikke tildeles en startvrdi" #~ msgid "variable `%s' has initializer but incomplete type" #~ msgstr "variablen '%s' bliver tildelt en startvrdi, men er af en ufuldstndig type" #~ msgid "elements of array `%s' have incomplete type" #~ msgstr "elementer i tabellen '%s' er af en ufuldstndig type" #~ msgid "declaration of `%s' has `extern' and is initialized" #~ msgstr "erklringen af '%s' indeholder 'extern' og variablen bliver tildelt en startvrdi" #~ msgid "inline function `%s' given attribute noinline" #~ msgstr "inline funktion '%s' givet egenskaben noinline" #~ msgid "initializer fails to determine size of `%s'" #~ msgstr "startvrdien giver ikke strrelsen af '%s'" #~ msgid "array size missing in `%s'" #~ msgstr "tabelstrrelsen mangler i '%s'" #~ msgid "zero or negative size array `%s'" #~ msgstr "nul eller negativ strrelse for tabellen '%s'" #~ msgid "storage size of `%s' isn't known" #~ msgstr "lagringsstrrelsen af '%s' er ikke kendt" #~ msgid "storage size of `%s' isn't constant" #~ msgstr "lagringsstrrelsen af '%s' er ikke konstant" #~ msgid "ignoring asm-specifier for non-static local variable `%s'" #~ msgstr "ignorerer asm-anvisning til den ikke-statiske, lokale variabel '%s'" #~ msgid "ISO C forbids parameter `%s' shadowing typedef" #~ msgstr "ISO C forbyder at parameteren '%s' skygger for typedef" #~ msgid "`long long long' is too long for GCC" #~ msgstr "'long long long' er for langt for GCC" #~ msgid "ISO C90 does not support `long long'" #~ msgstr "ISO C90 understtter ikke 'long long'" #~ msgid "duplicate `%s'" #~ msgstr "'%s' optrder mere end n gang" #~ msgid "`__thread' before `extern'" #~ msgstr "'__thread' fr 'extern'" #~ msgid "`__thread' before `static'" #~ msgstr "'__thread' fr 'static'" #~ msgid "two or more data types in declaration of `%s'" #~ msgstr "mere end n datatype i erklringen af '%s'" #~ msgid "`%s' fails to be a typedef or built in type" #~ msgstr "'%s' er hverken en typedef eller en indbygget type" #~ msgid "type defaults to `int' in declaration of `%s'" #~ msgstr "typen antages at vre 'int' i erklringen af '%s'" #~ msgid "both long and short specified for `%s'" #~ msgstr "bde long og short er angivet for '%s'" #~ msgid "long or short specified with char for `%s'" #~ msgstr "long eller short angivet samtidig med char for '%s'" #~ msgid "long or short specified with floating type for `%s'" #~ msgstr "long eller short angivet samtidig med en kommatalstype for '%s'" #~ msgid "the only valid combination is `long double'" #~ msgstr "den eneste gyldige kombination er 'long double'" #~ msgid "both signed and unsigned specified for `%s'" #~ msgstr "bde signed og unsigned er angivet for '%s'" #~ msgid "long, short, signed or unsigned invalid for `%s'" #~ msgstr "long, short, signed og unsigned er ugyldige for '%s'" #~ msgid "long, short, signed or unsigned used invalidly for `%s'" #~ msgstr "long, short, signed og unsigned er benyttet p ugyldig vis for '%s'" #~ msgid "complex invalid for `%s'" #~ msgstr "complex ugyldig for '%s'" #~ msgid "ISO C90 does not support complex types" #~ msgstr "ISO C90 understtter ikke komplekse typer" #~ msgid "ISO C does not support plain `complex' meaning `double complex'" #~ msgstr "ISO C understtter ikke at blot 'complex' betyder 'double complex'" #~ msgid "ISO C does not support complex integer types" #~ msgstr "ISO C understtter ikke komplekse heltalstyper" #~ msgid "duplicate `const'" #~ msgstr "'const' optrder mere end n gang" #~ msgid "duplicate `restrict'" #~ msgstr "'restrict' optrder mere end n gang" #~ msgid "duplicate `volatile'" #~ msgstr "'volatile' optrder mere end n gang" #~ msgid "multiple storage classes in declaration of `%s'" #~ msgstr "flere lagringsklasser optrder i erklringen af '%s'" #~ msgid "function definition declared `auto'" #~ msgstr "'auto' er phftet funktionsdefinitionen" #~ msgid "function definition declared `register'" #~ msgstr "'register' er phftet funktionsdefinitionen" #~ msgid "function definition declared `typedef'" #~ msgstr "'typedef' er phftet funktionsdefinitionen" #~ msgid "function definition declared `__thread'" #~ msgstr "'__thread' er phftet funktionsdefinitionen" #~ msgid "storage class specified for structure field `%s'" #~ msgstr "lagringsklasse angivet for strukturfelt '%s'" #~ msgid "storage class specified for parameter `%s'" #~ msgstr "lagringsklasse angivet for parameter '%s'" #~ msgid "storage class specified for typename" #~ msgstr "lagringsklasse angivet for typenavn" #~ msgid "`%s' initialized and declared `extern'" #~ msgstr "'%s' bliver tildelt en startvrdi og er samtidig erklret 'extern'" #~ msgid "`%s' has both `extern' and initializer" #~ msgstr "'%s' er erklret 'extern', men bliver tildelt en startvrdi" #~ msgid "top-level declaration of `%s' specifies `auto'" #~ msgstr "erklring af '%s' p verste niveau angiver 'auto'" #~ msgid "nested function `%s' declared `extern'" #~ msgstr "indlejret funktion '%s' er erklret 'extern'" #~ msgid "function-scope `%s' implicitly auto and declared `__thread'" #~ msgstr "'%s' i funktionsvirkefelt underforstet auto og erklret '__thread'" #~ msgid "static or type qualifiers in non-parameter array declarator" #~ msgstr "static eller typemodifikationer i ikke-parametertabelerklring" #~ msgid "declaration of `%s' as array of voids" #~ msgstr "'%s' erklret som en tabel af void" #~ msgid "declaration of `%s' as array of functions" #~ msgstr "'%s' erklret som en tabel af funktioner" #~ msgid "invalid use of structure with flexible array member" #~ msgstr "ugyldig brug af struktur med fleksibelt tabelmedlem" #~ msgid "size of array `%s' has non-integer type" #~ msgstr "strrelsen af tabellen '%s' er ikke af en heltalstype" #~ msgid "ISO C forbids zero-size array `%s'" #~ msgstr "ISO C forbyder tabellen '%s' med strrelsen nul" #~ msgid "size of array `%s' is negative" #~ msgstr "strrelsen af tabellen '%s' er negativ" #~ msgid "ISO C90 forbids array `%s' whose size can't be evaluated" #~ msgstr "ISO C90 forbyder tabellen '%s' hvis strrelse ikke kan bestemmes" #~ msgid "ISO C90 forbids variable-size array `%s'" #~ msgstr "ISO C90 forbyder tabellen '%s' med variabel strrelse" #~ msgid "size of array `%s' is too large" #~ msgstr "strrelsen af tabellen '%s' er for stor" #~ msgid "ISO C90 does not support flexible array members" #~ msgstr "ISO C90 understtter ikke fleksible tabelmedlemmer" #~ msgid "array type has incomplete element type" #~ msgstr "tabeltypen er af en ufuldstndig type" #~ msgid "ISO C forbids const or volatile function types" #~ msgstr "ISO C forbyder const eller volatile funktionstyper" #~ msgid "`%s' declared as function returning a function" #~ msgstr "'%s' er erklret som en funktion der returnerer en funktion" #~ msgid "`%s' declared as function returning an array" #~ msgstr "'%s' er erklret som en funktion der returnerer en tabel" #~ msgid "ISO C forbids qualified void function return type" #~ msgstr "ISO C forbyder void funktionsreturtype med modifikationer" #~ msgid "type qualifiers ignored on function return type" #~ msgstr "typemodifikationer ignoreret i funktionsreturtypen" #~ msgid "ISO C forbids qualified function types" #~ msgstr "ISO C forbyder funktionsreturtype med modifikationer" #~ msgid "invalid type modifier within pointer declarator" #~ msgstr "ugyldig typemodifikation i erklring af henvisning" #~ msgid "variable or field `%s' declared void" #~ msgstr "variabel eller felt '%s' erklret void" #~ msgid "attributes in parameter array declarator ignored" #~ msgstr "egenskaber i parametertabelerklring ignoreret" #~ msgid "invalid type modifier within array declarator" #~ msgstr "ugyldig typemodifikation i tabelerklring" #~ msgid "field `%s' declared as a function" #~ msgstr "feltet '%s' er erklret som en funktion" #~ msgid "field `%s' has incomplete type" #~ msgstr "feltet '%s' er af en ufuldstndig type" #~ msgid "invalid storage class for function `%s'" #~ msgstr "ugyldig lagringsklasse for funktion '%s'" #~ msgid "`noreturn' function returns non-void value" #~ msgstr "en funktion uden returtype returnerer en ikke-tom vrdi" # at overstte inline med et udsagnsord her bliver vist for tvetydigt #~ msgid "cannot inline function `main'" #~ msgstr "funktionen 'main' kan ikke vre inline" #~ msgid "variable `%s' declared `inline'" #~ msgstr "variablen '%s' er erklret 'inline'" #~ msgid "thread-local storage not supported for this target" #~ msgstr "trdlokal lagring understttes ikke p mlarkitekturen" #~ msgid "function declaration isn't a prototype" #~ msgstr "funktionserklringen er ikke en prototype" #~ msgid "parameter names (without types) in function declaration" #~ msgstr "parameternavne (uden typer) i funktionserklringen" #~ msgid "parameter `%s' has incomplete type" #~ msgstr "parameteren '%s' er af en ufuldstndig type" #~ msgid "parameter has incomplete type" #~ msgstr "parameteren er af en ufuldstndig type" # engelsk original uprcis (hvordan kan man henvise til en type?) #~ msgid "parameter `%s' points to incomplete type" #~ msgstr "parameteren '%s' er en henvisning til en ufuldstndig type" #~ msgid "parameter points to incomplete type" #~ msgstr "parameteren er en henvisning til en ufuldstndig type" #~ msgid "parameter `%s' has just a forward declaration" #~ msgstr "parameteren '%s' har kun en forhndserklring" #~ msgid "`void' in parameter list must be the entire list" #~ msgstr "'void' i en parameterliste skal udgre hele listen" #~ msgid "`struct %s' declared inside parameter list" #~ msgstr "'struct %s' erklret inde i en parameterliste" #~ msgid "`union %s' declared inside parameter list" #~ msgstr "'union %s' erklret inde i en parameterliste" #~ msgid "`enum %s' declared inside parameter list" #~ msgstr "'enum %s' erklret inde i en parameterliste" #~ msgid "anonymous struct declared inside parameter list" #~ msgstr "anonym struct erklret inde i en parameterliste" #~ msgid "anonymous union declared inside parameter list" #~ msgstr "anonym union erklret inde i en parameterliste" #~ msgid "anonymous enum declared inside parameter list" #~ msgstr "anonym enum erklret inde i en parameterliste" #~ msgid "its scope is only this definition or declaration, which is probably not what you want" #~ msgstr "dens virkefelt er kun denne definition eller erklring hvilket sandsynligvis ikke er hvad du nsker." #~ msgid "redefinition of `union %s'" #~ msgstr "omdefinering af 'union %s'" #~ msgid "redefinition of `struct %s'" #~ msgstr "omdefinering af 'struct %s'" #~ msgid "declaration does not declare anything" #~ msgstr "erklring erklrer ikke noget" # engelsk original forkortet #~ msgid "%s defined inside parms" #~ msgstr "%s defineret inden i parameterliste" #~ msgid "union" #~ msgstr "union" #~ msgid "structure" #~ msgstr "struktur" #~ msgid "%s has no %s" #~ msgstr "%s har ingen %s" #~ msgid "struct" #~ msgstr "struct" #~ msgid "named members" #~ msgstr "navngivne medlemmer" #~ msgid "members" #~ msgstr "medlemmer" #~ msgid "nested redefinition of `%s'" #~ msgstr "indlejret omdefinering af '%s'" #~ msgid "bit-field `%s' width not an integer constant" #~ msgstr "bredden af bitfeltet '%s' er ikke en heltalskonstant" #~ msgid "bit-field `%s' has invalid type" #~ msgstr "bitfeltet '%s' er af en ufuldstndig type" #~ msgid "bit-field `%s' type invalid in ISO C" #~ msgstr "typen af bitfeltet '%s' er ugyldig i ISO C" #~ msgid "negative width in bit-field `%s'" #~ msgstr "negativ bredde i bitfeltet '%s'" #~ msgid "width of `%s' exceeds its type" #~ msgstr "bredden af '%s' overstiger typen" #~ msgid "zero width for bit-field `%s'" #~ msgstr "en bredde p nul for bitfeltet '%s'" # RETMIG: find p et eller andet med prcisionen #~ msgid "`%s' is narrower than values of its type" #~ msgstr "'%s' er smallere end vrdier af dens type" #~ msgid "flexible array member in union" #~ msgstr "fleksibelt tabelmedlem i union" #~ msgid "flexible array member not at end of struct" #~ msgstr "fleksibelt tabelmedlem ikke i slutningen af struktur" #~ msgid "flexible array member in otherwise empty struct" #~ msgstr "fleksibelt tabelmedlem i ellers tom struktur" #~ msgid "duplicate member `%s'" #~ msgstr "medlemmet '%s' optrder mere end n gang" #~ msgid "union cannot be made transparent" #~ msgstr "union kan ikke ikke gres gennemsigtig" #~ msgid "redeclaration of `enum %s'" #~ msgstr "omerklring af 'enum %s'" # original forkortet #~ msgid "enum defined inside parms" #~ msgstr "enum defineret inden i parameterliste" #~ msgid "enumeration values exceed range of largest integer" #~ msgstr "enum-vrdier overstige rkkevidden af det strste heltal" #~ msgid "enumerator value for `%s' not integer constant" #~ msgstr "enum-vrdien for '%s' er ikke en heltalskonstant" #~ msgid "overflow in enumeration values" #~ msgstr "enum-vrdier for store" #~ msgid "ISO C restricts enumerator values to range of `int'" #~ msgstr "ISO C begrnser enum-vrdier til rkkevidden af 'int'" #~ msgid "return type is an incomplete type" #~ msgstr "returtypen er en ufuldstndig type" #~ msgid "return type defaults to `int'" #~ msgstr "returtypen antages at vre 'int'" #~ msgid "no previous prototype for `%s'" #~ msgstr "ingen tidligere prototype for '%s'" #~ msgid "`%s' was used with no prototype before its definition" #~ msgstr "'%s' blev brugt uden en prototype fr dens definition" #~ msgid "no previous declaration for `%s'" #~ msgstr "ingen tidligere erklring af '%s'" #~ msgid "`%s' was used with no declaration before its definition" #~ msgstr "'%s' blev brugt uden en erklring fr dens definition" #~ msgid "return type of `%s' is not `int'" #~ msgstr "returtypen til '%s' er ikke 'int'" #~ msgid "first argument of `%s' should be `int'" #~ msgstr "den frste parameter til '%s' skal vre 'int'" #~ msgid "second argument of `%s' should be `char **'" #~ msgstr "den anden parameter til '%s' skal vre 'char **'" #~ msgid "third argument of `%s' should probably be `char **'" #~ msgstr "den tredje parameter til '%s' skal sandsynligvis vre 'char **'" #~ msgid "`%s' takes only zero or two arguments" #~ msgstr "'%s' tager kun mod to eller ingen parametre" #~ msgid "`%s' is normally a non-static function" #~ msgstr "'%s' er normalt en ikke-statisk funktion" #~ msgid "parm types given both in parmlist and separately" #~ msgstr "parametertyper angivet bde i parameterliste og separat" #~ msgid "parameter name omitted" #~ msgstr "parameternavn udeladt" #~ msgid "parameter `%s' declared void" #~ msgstr "parameteren '%s' erklret void" #~ msgid "parameter name missing from parameter list" #~ msgstr "parameternavn mangler fra parameterliste" #~ msgid "multiple parameters named `%s'" #~ msgstr "flere parametre ved navn '%s'" #~ msgid "type of `%s' defaults to `int'" #~ msgstr "typen til '%s' antages at vre 'int'" #~ msgid "declaration for parameter `%s' but no such parameter" #~ msgstr "erklring af parameteren '%s', men ingen sdan parameter" #~ msgid "number of arguments doesn't match prototype" #~ msgstr "antallet af parametre passer ikke til prototypen" #~ msgid "promoted argument `%s' doesn't match prototype" #~ msgstr "den forfremmede parameter '%s' passer ikke til prototypen" #~ msgid "argument `%s' doesn't match prototype" #~ msgstr "parameteren '%s' passer ikke til prototypen" #~ msgid "no return statement in function returning non-void" #~ msgstr "ingen return-stning i en funktion der ikke returnerer void" #~ msgid "this function may return with or without a value" #~ msgstr "denne funktion kan returnere med eller uden en vrdi" #~ msgid "size of return value of `%s' is %u bytes" #~ msgstr "strrelsen af returtypen til '%s' er %u byte" #~ msgid "size of return value of `%s' is larger than %d bytes" #~ msgstr "strrelsen af returtypen til '%s' er strre end %d byte" #~ msgid "`for' loop initial declaration used outside C99 mode" #~ msgstr "begyndelseserklring i 'for'-lkke benyttet uden for C99-tilstand" #~ msgid "`struct %s' declared in `for' loop initial declaration" #~ msgstr "'struct %s' erklret i begyndelseserklring i 'for'-lkke" #~ msgid "`union %s' declared in `for' loop initial declaration" #~ msgstr "'union %s' erklret i begyndelseserklring i 'for'-lkke" #~ msgid "`enum %s' declared in `for' loop initial declaration" #~ msgstr "'enum %s' erklret i begyndelseserklring i 'for'-lkke" #~ msgid "declaration of non-variable `%s' in `for' loop initial declaration" #~ msgstr "erklring af '%s' der ikke er en variabel, i begyndelseserklring i 'for'-lkke" #~ msgid "declaration of static variable `%s' in `for' loop initial declaration" #~ msgstr "erklring af '%s' der er en statisk variabel, i begyndelseserklring i 'for'-lkke" #~ msgid "declaration of `extern' variable `%s' in `for' loop initial declaration" #~ msgstr "erklring af '%s' der er en 'extern'-variabel, i begyndelseserklring i 'for'-lkke" #~ msgid "format string arg not a string type" #~ msgstr "formateringsstrengsparameter er ikke af en strengtype" #~ msgid "args to be formatted is not '...'" #~ msgstr "parametrene der skal formateres, er ikke '...'" #~ msgid "strftime formats cannot format arguments" #~ msgstr "strftime-formater kan ikke formatere parametre" #~ msgid "format string has invalid operand number" #~ msgstr "formateringsstrengen har et ugyldigt operandtal" #~ msgid "function does not return string type" #~ msgstr "funktionen returnerer ikke en strengtype" #~ msgid "unrecognized format specifier" #~ msgstr "ukendt formateringsanvisning" #~ msgid "`%s' is an unrecognized format function type" #~ msgstr "'%s' er en ukendt formateringsfunktionstype" #~ msgid "format string arg follows the args to be formatted" #~ msgstr "formateringsstrengsparameter efterflger parametrene der skal formateres" # her er der tale om en signalering #~ msgid "` ' flag" #~ msgstr "' '-flag" #~ msgid "the ` ' printf flag" #~ msgstr "' '-printf-flaget" #~ msgid "`+' flag" #~ msgstr "'+'-flag" #~ msgid "the `+' printf flag" #~ msgstr "'+'-printf-flaget" #~ msgid "`#' flag" #~ msgstr "'#'-flag" #~ msgid "the `#' printf flag" #~ msgstr "'#'-printf-flaget" #~ msgid "`0' flag" #~ msgstr "'0'-flag" #~ msgid "the `0' printf flag" #~ msgstr "'0'-printf-flaget" #~ msgid "`-' flag" #~ msgstr "'-'-flag" #~ msgid "the `-' printf flag" #~ msgstr "'-'-printf-flaget" #~ msgid "`'' flag" #~ msgstr "'''-flag" #~ msgid "the `'' printf flag" #~ msgstr "'''-printf-flaget" #~ msgid "`I' flag" #~ msgstr "'I'-flag" #~ msgid "the `I' printf flag" #~ msgstr "'I'-printf-flaget" #~ msgid "field width" #~ msgstr "feltbredde" #~ msgid "field width in printf format" #~ msgstr "feltbredde i printf-formatering" #~ msgid "precision" #~ msgstr "prcision" #~ msgid "precision in printf format" #~ msgstr "prcision i printf-formatering" #~ msgid "length modifier" #~ msgstr "lngdetilpasning" #~ msgid "length modifier in printf format" #~ msgstr "lngdetilpasning i printf-formatering" #~ msgid "assignment suppression" #~ msgstr "tildelingsundertrykkelse" #~ msgid "the assignment suppression scanf feature" #~ msgstr "den tildelingsundertrykkende scanf-facilitet" #~ msgid "`a' flag" #~ msgstr "'a'-flag" #~ msgid "the `a' scanf flag" #~ msgstr "'a'-scanf-flaget" #~ msgid "field width in scanf format" #~ msgstr "feltbredde i scanf-formatering" #~ msgid "length modifier in scanf format" #~ msgstr "lngdetilpasning i scanf-formatering" #~ msgid "the `'' scanf flag" #~ msgstr "'''-scanf-flaget" #~ msgid "the `I' scanf flag" #~ msgstr "'I'-scanf-flaget" #~ msgid "`_' flag" #~ msgstr "'_'-flag" #~ msgid "the `_' strftime flag" #~ msgstr "'_'-strftime-flaget" #~ msgid "the `-' strftime flag" #~ msgstr "'-'-strftime-flaget" #~ msgid "the `0' strftime flag" #~ msgstr "'0'-strftime-flaget" #~ msgid "`^' flag" #~ msgstr "'^'-flag" #~ msgid "the `^' strftime flag" #~ msgstr "'^'-strftime-flaget" #~ msgid "the `#' strftime flag" #~ msgstr "'#'-strftime-flaget" #~ msgid "field width in strftime format" #~ msgstr "feltbredde i strftime-formatering" #~ msgid "`E' modifier" #~ msgstr "'E'-modifikation" #~ msgid "the `E' strftime modifier" #~ msgstr "'E'-strftime-modifikationen" #~ msgid "`O' modifier" #~ msgstr "'O'-modifikation" #~ msgid "the `O' strftime modifier" #~ msgstr "'O'-strftime-modifikationen" #~ msgid "the `O' modifier" #~ msgstr "'O'-modifikation" #~ msgid "fill character" #~ msgstr "udfyldningstegn" #~ msgid "fill character in strfmon format" #~ msgstr "udfyldningstegn i strfmon-formatering" #~ msgid "the `^' strfmon flag" #~ msgstr "'^'-strfmon-flaget" #~ msgid "the `+' strfmon flag" #~ msgstr "'+'-strfmon-flaget" #~ msgid "`(' flag" #~ msgstr "'('-flag" #~ msgid "the `(' strfmon flag" #~ msgstr "'('-strfmon-flaget" #~ msgid "`!' flag" #~ msgstr "'!'-flag" #~ msgid "the `!' strfmon flag" #~ msgstr "'!'-strfmon-flaget" #~ msgid "the `-' strfmon flag" #~ msgstr "'-'-strfmon-flaget" #~ msgid "field width in strfmon format" #~ msgstr "feltbredde i strfmon-formatering" #~ msgid "left precision" #~ msgstr "venstreprcision" #~ msgid "left precision in strfmon format" #~ msgstr "venstreprcision i strfmon-formatering" #~ msgid "right precision" #~ msgstr "hjreprcision" #~ msgid "right precision in strfmon format" #~ msgstr "hjreprcision i strfmon-formatering" #~ msgid "length modifier in strfmon format" #~ msgstr "lngdemodifikation i strfmon-formatering" #~ msgid "function might be possible candidate for `%s' format attribute" #~ msgstr "funktion er en mulig kandidat til '%s'-formateringsegenskab" #~ msgid "missing $ operand number in format" #~ msgstr "manglende $-operandnummer i formatering" #~ msgid "%s does not support %%n$ operand number formats" #~ msgstr "%s understtter ikke %%n$-operandnummerformateringer" #~ msgid "operand number out of range in format" #~ msgstr "operandnummer uden for det gyldige interval" #~ msgid "format argument %d used more than once in %s format" #~ msgstr "formateringsparameter %d brugt mere end en gang i %s-formatering" #~ msgid "format argument %d unused before used argument %d in $-style format" #~ msgstr "formateringsparameter %d ubenyttet fr den brugte parameter %d i formatering med $" #~ msgid "format not a string literal, format string not checked" #~ msgstr "formatering er ikke en strengkonstant, formateringsstrengen er ikke kontrolleret" #~ msgid "format not a string literal and no format arguments" #~ msgstr "formatering er ikke en strengkonstant og der er ingen formateringsparametre" #~ msgid "format not a string literal, argument types not checked" #~ msgstr "formatering er ikke en strengkonstant, parametertyper er ikke kontrolleret" #~ msgid "too many arguments for format" #~ msgstr "for mange parametre til formatering" #~ msgid "unused arguments in $-style format" #~ msgstr "ubenyttede parametre i formatering med $" #~ msgid "zero-length %s format string" #~ msgstr "formateringsstreng %s med lngden nul" #~ msgid "format is a wide character string" #~ msgstr "formatering er en bredtegnsstreng" #~ msgid "unterminated format string" #~ msgstr "uafsluttet formateringsstreng" #~ msgid "embedded `\\0' in format" #~ msgstr "indlejret '\\0' i formatering" #~ msgid "spurious trailing `%%' in format" #~ msgstr "mystisk afsluttende '%%' i formatering" #~ msgid "repeated %s in format" #~ msgstr "gentaget %s i formatering" #~ msgid "missing fill character at end of strfmon format" #~ msgstr "mangler fyldtegn i slutningen af strfmon-formatering" #~ msgid "too few arguments for format" #~ msgstr "for f parametre til formatering" #~ msgid "zero width in %s format" #~ msgstr "bredde p nul i %s-formatering" #~ msgid "empty left precision in %s format" #~ msgstr "tom venstreprcision i %s-formatering" #~ msgid "field precision" #~ msgstr "feltprcision" #~ msgid "empty precision in %s format" #~ msgstr "tom prcision i %s-formatering" #~ msgid "%s does not support the `%s' %s length modifier" #~ msgstr "%s understtter ikke '%s' %s-lngdemodifikationen" #~ msgid "conversion lacks type at end of format" #~ msgstr "konvertering mangler type i slutningen af formatering" #~ msgid "unknown conversion type character `%c' in format" #~ msgstr "ukendt konverteringstypetegn '%c' i formatering" #~ msgid "unknown conversion type character 0x%x in format" #~ msgstr "ukendt konverteringstypetegn 0x%x i formatering" #~ msgid "%s does not support the `%%%c' %s format" #~ msgstr "%s understtter ikke '%%%c' %s-formateringen" #~ msgid "%s used with `%%%c' %s format" #~ msgstr "%s brugt med '%%%c' %s-formatering" #~ msgid "%s does not support %s" #~ msgstr "%s understtter ikke %s" #~ msgid "%s does not support %s with the `%%%c' %s format" #~ msgstr "%s understtter ikke %s med '%%%c' %s-formateringen" #~ msgid "%s ignored with %s and `%%%c' %s format" #~ msgstr "%s ignoreret med %s og '%%%c' %s-formatering" #~ msgid "%s ignored with %s in %s format" #~ msgstr "%s ignoreret med %s i %s-formatering" #~ msgid "use of %s and %s together with `%%%c' %s format" #~ msgstr "brug af %s og %s sammen med '%%%c' %s-formatering" #~ msgid "use of %s and %s together in %s format" #~ msgstr "brug af %s og %s sammen i %s-formatering" #~ msgid "`%%%c' yields only last 2 digits of year in some locales" #~ msgstr "'%%%c' giver kun de to sidste cifre af ret under nogle regionalindstillinger" #~ msgid "`%%%c' yields only last 2 digits of year" #~ msgstr "'%%%c' giver kun de to sidste cifre af ret" #~ msgid "no closing `]' for `%%[' format" #~ msgstr "ingen afsluttende '[' til '%%['-formatering" #~ msgid "use of `%s' length modifier with `%c' type character" #~ msgstr "brug af '%s'-lngdemodifikation med '%c'-typetegn" #~ msgid "%s does not support the `%%%s%c' %s format" #~ msgstr "%s understtter ikke '%%%s%c' %s-formateringen" #~ msgid "operand number specified with suppressed assignment" #~ msgstr "operandnummer angivet med undertrykt tildeling" #~ msgid "operand number specified for format taking no argument" #~ msgstr "operandnummer angiver for formatering der ikke tager mod parametre" #~ msgid "writing through null pointer (arg %d)" #~ msgstr "skrivning gennem nulhenvisning (parameter %d)" #~ msgid "reading through null pointer (arg %d)" #~ msgstr "lsning gennem nulhenvisning (parameter %d)" #~ msgid "writing into constant object (arg %d)" #~ msgstr "skrivning til konstant objekt (parameter %d)" #~ msgid "extra type qualifiers in format argument (arg %d)" #~ msgstr "ekstra typemodifikationer i formateringsparameter (parameter %d)" #~ msgid "format argument is not a pointer (arg %d)" #~ msgstr "formateringsparameter er ikke en henvisning (parameter %d)" #~ msgid "format argument is not a pointer to a pointer (arg %d)" #~ msgstr "formateringsparameter er ikke en henvisning til en henvisning (parameter %d)" #~ msgid "pointer" #~ msgstr "henvisning" #~ msgid "different type" #~ msgstr "anden type" #~ msgid "%s is not type %s (arg %d)" #~ msgstr "%s er ikke af typen %s (parameter %d)" #~ msgid "%s format, %s arg (arg %d)" #~ msgstr "%s-formatering, %s-parameter (parameter %d)" #~ msgid "YYDEBUG not defined" #~ msgstr "YYDEBUG ikke defineret" #~ msgid "badly nested C headers from preprocessor" #~ msgstr "ugyldigt indlejrede C-inkluderingsfiler fra prprocessoren" #~ msgid "ignoring #pragma %s %s" #~ msgstr "ignorerer #pragma %s %s" #~ msgid "universal-character-name '\\u%04x' not valid in identifier" #~ msgstr "universelt tegn '\\u%04x' er ikke gyldigt i kaldenavne" #~ msgid "stray '%c' in program" #~ msgstr "vildfaren '%c' i program" #~ msgid "stray '\\%o' in program" #~ msgstr "vildfaren '\\%o' i program" #~ msgid "this decimal constant is unsigned only in ISO C90" #~ msgstr "denne kommatalskonstant er kun unsigned i ISO C90" #~ msgid "this decimal constant would be unsigned in ISO C90" #~ msgstr "denne kommatalskonstant ville vre unsigned i ISO C90" #~ msgid "integer constant is too large for \"%s\" type" #~ msgstr "heltalskonstanten er for stor til typen '%s'" #~ msgid "floating constant exceeds range of \"%s\"" #~ msgstr "kommatalskonstant overskrider intervallet for '%s'" #~ msgid "ignoring invalid multibyte character" #~ msgstr "ignorerer ugyldigt flerbyte-tegn" #~ msgid "missing argument to \"-%s\"" #~ msgstr "der mangler en parameter til tilvalget '-%s'" #~ msgid "no class name specified with \"-%s\"" #~ msgstr "intet klassenavn angivet med '-%s'" #~ msgid "missing filename after \"-%s\"" #~ msgstr "et filnavn mangler efter '-%s'" #~ msgid "missing target after \"-%s\"" #~ msgstr "et ml mangler efter '-%s'" #~ msgid "options array incorrectly sorted: %s is before %s" #~ msgstr "tilvalgstabel sorteret forkert: %s er fr %s" #~ msgid "too many filenames given. Type %s --help for usage" #~ msgstr "for mange filnavne angivet - vejledning i brug kan fs med '%s --help'" #~ msgid "-Wno-strict-prototypes is not supported in C++" #~ msgstr "-Wno-strict-prototypes er ikke understttet i C++" #~ msgid "switch \"%s\" is no longer supported" #~ msgstr "tilvalget '%s' understttes ikke lngere" #~ msgid "switch \"%s\" is deprecated, please see documentation for details" #~ msgstr "tilvalget '%s' er forldet, se venligst dokumentationen for detaljer" #~ msgid "-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)" #~ msgstr "-fhandle-exceptions er blevet omdbt til -fexceptions (og er nu til som standard)" #~ msgid "output filename specified twice" #~ msgstr "uddatafilnavnet er angivet to gange" #~ msgid "-Wformat-y2k ignored without -Wformat" #~ msgstr "-Wformat-y2k ignoreret uden -Wformat" #~ msgid "-Wformat-extra-args ignored without -Wformat" #~ msgstr "-Wformat-extra-args ignoreret uden -Wformat" #~ msgid "-Wformat-zero-length ignored without -Wformat" #~ msgstr "-Wformat-zero-length ignoreret uden -Wformat" #~ msgid "-Wformat-nonliteral ignored without -Wformat" #~ msgstr "-Wformat-nonliteral ignoreret uden -Wformat" #~ msgid "-Wformat-security ignored without -Wformat" #~ msgstr "-Wformat-security ignoreret uden -Wformat" #~ msgid "-Wmissing-format-attribute ignored without -Wformat" #~ msgstr "-Wmissing-format-attribute ignoreret uden -Wformat" #~ msgid "opening output file %s" #~ msgstr "bner uddatafilen %s" #~ msgid "opening dependency file %s" #~ msgstr "bner afhngighedsfilen %s" #~ msgid "closing dependency file %s" #~ msgstr "lukker afhngighedsfilen %s" #~ msgid "when writing output to %s" #~ msgstr "ved skrivning af uddata til %s" #~ msgid "to generate dependencies you must specify either -M or -MM" #~ msgstr "for at generere afhngigheder skal du angive enten -M eller -MM" #~ msgid "\"-%s\" is valid for %s but not for %s" #~ msgstr "'-%s' er gyldigt for %s, men ikke for %s" # den fulde tekst til disse bidder findes ogs senere #~ msgid "" #~ "Switches:\n" #~ " -include Include the contents of before other files\n" #~ " -imacros Accept definition of macros in \n" #~ " -iprefix Specify as a prefix for next two options\n" #~ " -iwithprefix Add to the end of the system include path\n" #~ " -iwithprefixbefore Add to the end of the main include path\n" #~ " -isystem Add to the start of the system include path\n" #~ msgstr "" #~ "Tilvalg:\n" #~ " -include Inkludr indholdet af fr andre filer\n" #~ " -imacros Ls makrodefinitionerne i \n" #~ " -iprefix Angiv som et prfiks til de nste to tilvalg\n" #~ " -iwithprefix Fj til slutningen af systeminkluderingsstien\n" #~ " -withprefixbefore Fj til slutningen af den alm. inkluderingssti\n" #~ " -isystem Fj til begyndelsen af systeminkluderingsstien\n" #~ msgid "" #~ " -idirafter Add to the end of the system include path\n" #~ " -I Add to the end of the main include path\n" #~ " -I- Fine-grained include path control; see info docs\n" #~ " -nostdinc Do not search system include directories\n" #~ " (dirs specified with -isystem will still be used)\n" #~ " -nostdinc++ Do not search system include directories for C++\n" #~ " -o Put output into \n" #~ msgstr "" #~ " -idirafter Fj til slutningen af systeminkluderingsstien\n" #~ " -I Fj til slutningen af den alm. inkluderingssti\n" #~ " -I- Nje kontrolleret inkluderingssti; se info-hjlpen\n" #~ " -nostdinc Sg ikke i systeminkluderingskataloger\n" #~ " (kataloger angivet med -isystem sges dog stadig)\n" #~ " -nostdinc++ Sg ikke i systeminkluderingskataloger til C++\n" #~ " -o Send uddata til \n" #~ msgid "" #~ " -trigraphs Support ISO C trigraphs\n" #~ " -std= Specify the conformance standard; one of:\n" #~ " gnu89, gnu99, c89, c99, iso9899:1990,\n" #~ " iso9899:199409, iso9899:1999, c++98\n" #~ " -w Inhibit warning messages\n" #~ " -W[no-]trigraphs Warn if trigraphs are encountered\n" #~ " -W[no-]comment{s} Warn if one comment starts inside another\n" #~ msgstr "" #~ " -trigraphs Understt ISO C trigrafer\n" #~ " -std= Angiv at koden retter sig efter en af standarderne:\n" #~ " gnu89, gnu99, c89, c99, iso9899:1990,\n" #~ " iso9899:199409, iso9899:1999, c++98\n" #~ " -w Undertryk advarselsmeddelelser\n" #~ " -W[no-]trigraphs Advar hvis trigrafer mdes\n" #~ " -W[no-]comment{s} Advar hvis en kommentar begynder inden i en anden\n" #~ msgid "" #~ " -W[no-]traditional Warn about features not present in traditional C\n" #~ " -W[no-]undef Warn if an undefined macro is used by #if\n" #~ " -W[no-]import Warn about the use of the #import directive\n" #~ msgstr "" #~ " -W[no-]traditional Advar om utilgngelige faciliteter i traditionel C\n" #~ " -W[no-]undef Advar hvis en ikkedefineret makro bruges med #if\n" #~ " -W[no-]import Advar om brug af #import-direktivet\n" #~ msgid "" #~ " -W[no-]error Treat all warnings as errors\n" #~ " -W[no-]system-headers Do not suppress warnings from system headers\n" #~ " -W[no-]all Enable most preprocessor warnings\n" #~ msgstr "" #~ " -W[no-]error Behandl alle advarsler som fejl\n" #~ " -W[no-]system-headers Undertryk ikke advarsler fra systeminkluderingsfiler\n" #~ " -W[no-]all Sl alle prprocessoradvarsler til\n" #~ msgid "" #~ " -M Generate make dependencies\n" #~ " -MM As -M, but ignore system header files\n" #~ " -MD Generate make dependencies and compile\n" #~ " -MMD As -MD, but ignore system header files\n" #~ " -MF Write dependency output to the given file\n" #~ " -MG Treat missing header file as generated files\n" #~ msgstr "" #~ " -M Generr afhngigheder til make\n" #~ " -MM Som -M, men ignorr systeminkluderingsfiler\n" #~ " -MD Generer make-afhngigheder og overst\n" #~ " -MMD Som -MD, men ignorr systeminkluderingsfiler\n" #~ " -MF Skriv afhnghedsuddata til den givne fil\n" #~ " -MG Behandl manglende inkl.-filer som genererede filer\n" # make kalder phony targets for falske ml #~ msgid "" #~ " -MP\t\t\t Generate phony targets for all headers\n" #~ " -MQ Add a MAKE-quoted target\n" #~ " -MT Add an unquoted target\n" #~ msgstr "" #~ " -MP Generr \"falske\" ml for alle inkluderingsfiler\n" #~ " -MQ Tilfj et MAKE-ml i anfrselstegn\n" #~ " -MT Tilfj et ml uden anfrselstegn\n" #~ msgid "" #~ " -D Define a with string '1' as its value\n" #~ " -D= Define a with as its value\n" #~ " -A= Assert the to \n" #~ " -A-= Disable the to \n" #~ " -U Undefine \n" #~ " -v Display the version number\n" #~ msgstr "" #~ " -D Definr makroen med strengen '1' som vrdi\n" #~ " -D= Definr makroen med vrdien \n" #~ " -A= Angiv at er svar p \n" #~ " -A-= Angiv at ikke er svar p \n" #~ " -U Glem definitionen af \n" #~ " -v Skriv versionsnummeret\n" #~ msgid "" #~ " -H Print the name of header files as they are used\n" #~ " -C Do not discard comments\n" #~ " -dM Display a list of macro definitions active at end\n" #~ " -dD Preserve macro definitions in output\n" #~ " -dN As -dD except that only the names are preserved\n" #~ " -dI Include #include directives in the output\n" #~ msgstr "" #~ " -H Skriv navnene p inkluderingsfilerne nr de bruges\n" #~ " -C Fjern ikke kommentarer\n" #~ " -dM Vis til sidst de aktive makrodefinitioner\n" #~ " -dD Bevar makrodefinitioner i uddata\n" #~ " -dN Som -dD bortset fra at kun navnene bevares\n" #~ " -dI Inkludr #include-anvisninger i uddata\n" #~ msgid "" #~ " -f[no-]preprocessed Treat the input file as already preprocessed\n" #~ " -ftabstop= Distance between tab stops for column reporting\n" #~ " -P Do not generate #line directives\n" #~ " -remap Remap file names when including files\n" #~ " --help Display this information\n" #~ msgstr "" #~ " -f[no-]preprocessed Behandl inddatafilen som allerede prprocesseret\n" #~ " -ftabstop= Afstand mellem tabulatorstop i kolonnerapportering\n" #~ " -P Generr ikke #line-angivelser\n" #~ " -remap Omdan filnavne ved filinkludering\n" #~ " --help Vis denne vejledning\n" #~ msgid "syntax error" #~ msgstr "syntaksfejl" #~ msgid "syntax error: cannot back up" #~ msgstr "syntaksfejl: kan ikke g tilbage" #~ msgid "ISO C forbids an empty source file" #~ msgstr "ISO C forbyder en tom kildefil" #~ msgid "argument of `asm' is not a constant string" #~ msgstr "parameteren til 'asm' er ikke en konstant streng" #~ msgid "ISO C forbids data definition with no type or storage class" #~ msgstr "ISO C forbyder definition af data uden angivelse af type eller lagringsklasse" #~ msgid "data definition has no type or storage class" #~ msgstr "definition af data uden angivelse af type eller lagringsklasse" #~ msgid "ISO C does not allow extra `;' outside of a function" #~ msgstr "ISO C tillader ikke ekstra ';' uden for funktioner" #~ msgid "`sizeof' applied to a bit-field" #~ msgstr "'sizeof' benyttet p et bitfelt" #~ msgid "ISO C forbids omitting the middle term of a ?: expression" #~ msgstr "ISO C forbyder udeladelse af den midterste del af et '?:'-udtryk" #~ msgid "ISO C89 forbids compound literals" #~ msgstr "ISO C89 forbyder sammensatte konstanter" #~ msgid "ISO C forbids braced-groups within expressions" #~ msgstr "ISO C forbyder stningsblokke inden i udtryk" #~ msgid "first argument to __builtin_choose_expr not a constant" #~ msgstr "frste parameter til '__builtin_choose_expr' skal vre en konstant" #~ msgid "traditional C rejects ISO C style function definitions" #~ msgstr "traditionel C tillader ikke ISO C-functionsdefinitioner" #~ msgid "`%s' is not at beginning of declaration" #~ msgstr "'%s' er ikke ved begyndelsen af erklringen" #~ msgid "ISO C forbids empty initializer braces" #~ msgstr "ISO C forbyder tom startvrdiblok" #~ msgid "ISO C89 forbids specifying subobject to initialize" #~ msgstr "ISO C89 forbyder angivelse af underobjekt til klargring" # RETMIG: hm, gad vide om dette er rigtigt #~ msgid "obsolete use of designated initializer without `='" #~ msgstr "forldet brug af udpeget startvrdi uden '='" #~ msgid "obsolete use of designated initializer with `:'" #~ msgstr "forldet brug af udpeget startvrdi med ':'" #~ msgid "ISO C forbids specifying range of elements to initialize" #~ msgstr "ISO C forbyder angivelse af interval af elementer til klargring" #~ msgid "ISO C forbids nested functions" #~ msgstr "ISO C forbyder indlejrede funktioner" #~ msgid "ISO C forbids forward references to `enum' types" #~ msgstr "ISO C forbyder forhndsreferencer til 'enum'-typer" #~ msgid "comma at end of enumerator list" #~ msgstr "komma i slutningen af enum-liste" #~ msgid "no semicolon at end of struct or union" #~ msgstr "intet semikolon i slutningen af struct eller union" #~ msgid "extra semicolon in struct or union specified" #~ msgstr "ekstra semikolon angivet i struct eller union" #~ msgid "ISO C doesn't support unnamed structs/unions" #~ msgstr "ISO C understtter ikke unavngivne struct/union-konstruktioner" #~ msgid "ISO C forbids member declarations with no members" #~ msgstr "ISO C forbyder medlemserklringer uden medlemmer" #~ msgid "deprecated use of label at end of compound statement" #~ msgstr "forldet brug af etiket i slutningen af sammensat stning" #~ msgid "ISO C89 forbids mixed declarations and code" #~ msgstr "ISO C89 forbyder blandede erklringer og kode" #~ msgid "ISO C forbids label declarations" #~ msgstr "ISO C forbyder etiketerklringer" #~ msgid "braced-group within expression allowed only inside a function" #~ msgstr "stningsblokke i udtryk er kun tilladt inde i en funktion" #~ msgid "empty body in an else-statement" #~ msgstr "tom krop i en else-stning" #~ msgid "ISO C forbids `goto *expr;'" #~ msgstr "ISO C forbyder 'goto *udtryk;'" #~ msgid "ISO C forbids forward parameter declarations" #~ msgstr "ISO C forbyder forhndsparametererklringer" #~ msgid "ISO C requires a named argument before `...'" #~ msgstr "ISO C pkrver en navngiven parameter fr '...'" #~ msgid "`...' in old-style identifier list" #~ msgstr "'...' i gammeldags liste af kaldenavne" #~ msgid "parse error; also virtual memory exhausted" #~ msgstr "tolkningsfejl; desuden lbet tr for virtuel hukommelse" #~ msgid "parse error" #~ msgstr "tolkningsfejl" #~ msgid "parser stack overflow" #~ msgstr "overlb i tolkerens stak" #~ msgid "%s at end of input" #~ msgstr "%s ved slutning af inddata" #~ msgid "%s before %s'%c'" #~ msgstr "%s fr %s'%c'" #~ msgid "%s before %s'\\x%x'" #~ msgstr "%s fr %s'\\x%x'" #~ msgid "%s before string constant" #~ msgstr "%s fr strengkonstant" #~ msgid "%s before numeric constant" #~ msgstr "%s fr talkonstant" #~ msgid "%s before \"%s\"" #~ msgstr "%s fr \"%s\"" #~ msgid "%s before '%s' token" #~ msgstr "%s fr symbolet '%s'" #~ msgid "traditional C rejects string concatenation" #~ msgstr "traditionel C tillader ikke strengsammenstning" #~ msgid "syntax error at '%s' token" #~ msgstr "syntaksfejl ved symbolet '%s'" #~ msgid "#pragma pack (pop) encountered without matching #pragma pack (push, )" #~ msgstr "'#pragma pack (pop)' mdt uden tilsvarende '#pragma pack (push, )'" #~ msgid "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, )" #~ msgstr "'#pragma pack(pop, %s)' mdt uden tilsvarende '#pragma pack(push, %s, )'" #~ msgid "#pragma pack(push[, id], ) is not supported on this target" #~ msgstr "#pragma pack(push[, id], ) understttes ikke p mlarkitekturen" #~ msgid "#pragma pack(pop[, id], ) is not supported on this target" #~ msgstr "#pragma pack(pop[, id], ) understttes ikke p mlarkitekturen" #~ msgid "missing '(' after '#pragma pack' - ignored" #~ msgstr "manglende '(' efter '#pragma pack' - ignoreret" #~ msgid "malformed '#pragma pack' - ignored" #~ msgstr "forkert udformet '#pragma pack' - ignoreret" #~ msgid "malformed '#pragma pack(push[, id], )' - ignored" #~ msgstr "forkert udformet '#pragma pack(push[, id], )' - ignoreret" #~ msgid "malformed '#pragma pack(pop[, id])' - ignored" #~ msgstr "forkert udformet '#pragma pack(pop[, id])' - ignoreret" #~ msgid "unknown action '%s' for '#pragma pack' - ignored" #~ msgstr "ukendt handling '%s' for '#pragma pack' - ignoreret" #~ msgid "junk at end of '#pragma pack'" #~ msgstr "ragelse i slutningen af '#pragma pack'" #~ msgid "alignment must be a small power of two, not %d" #~ msgstr "justering skal vre en lille potens af to, ikke %d" #~ msgid "applying #pragma weak `%s' after first use results in unspecified behavior" #~ msgstr "anvendelse af #pragma weak '%s' efter frste brug resulterer i ikke-defineret opfrsel" #~ msgid "malformed #pragma weak, ignored" #~ msgstr "forkert udformet '#pragma weak' - ignoreret" #~ msgid "junk at end of #pragma weak" #~ msgstr "ragelse i slutningen af '#pragma weak'" #~ msgid "malformed #pragma redefine_extname, ignored" #~ msgstr "forkert udformet '#pragma redefine_extname' - ignoreret" #~ msgid "junk at end of #pragma redefine_extname" #~ msgstr "ragelse i slutningen af '#pragma redefine_extname'" #~ msgid "#pragma redefine_extname conflicts with declaration" #~ msgstr "#pragma redefine_extname er i konflikt med erklring" #~ msgid "malformed #pragma extern_prefix, ignored" #~ msgstr "forkert udformet '#pragma extern_prefix' - ignoreret" #~ msgid "junk at end of #pragma extern_prefix" #~ msgstr "ragelse i slutningen af '#pragma extern_prefix'" #~ msgid "asm declaration conflicts with previous rename" #~ msgstr "asm-erklring er i konflikt med tidligere omdbelse" #~ msgid "break statement not within loop or switch" #~ msgstr "break-stning befinder sig ikke i en lkke- eller switch-konstruktion" #~ msgid "continue statement not within a loop" #~ msgstr "continue-stning befinder sig ikke i en lkke" #~ msgid "destructor needed for `%#D'" #~ msgstr "destruktionsfunktion pkrvet til '%#D'" #~ msgid "where case label appears here" #~ msgstr "hvor case-etiket optrder her" #~ msgid "(enclose actions of previous case statements requiring destructors in their own scope.)" #~ msgstr "(indesluttede handlinger fra tidligere case-stninger krver destruktionsfunktioner i deres eget virkefelt)" #~ msgid "%s qualifier ignored on asm" #~ msgstr "%s-modifikation ignoreret ved asm" #~ msgid "`%s' has an incomplete type" #~ msgstr "'%s' er af en ufuldstndig type" #~ msgid "invalid use of void expression" #~ msgstr "ugyldig brug af void-udtryk" #~ msgid "invalid use of flexible array member" #~ msgstr "ugyldig brug af fleksibelt tabelmedlem" #~ msgid "invalid use of array with unspecified bounds" #~ msgstr "ugyldig brug af tabel uden angivne grnser" #~ msgid "invalid use of undefined type `%s %s'" #~ msgstr "ugyldig brug af en type '%s %s' der ikke er defineret" #~ msgid "invalid use of incomplete typedef `%s'" #~ msgstr "ugyldig brug af ufuldstndig typedef '%s'" #~ msgid "function types not truly compatible in ISO C" #~ msgstr "funktionstyper ikke er fuldt ud forenelige i ISO C" #~ msgid "types are not quite compatible" #~ msgstr "typer er ikke helt forenelige" #~ msgid "arithmetic on pointer to an incomplete type" #~ msgstr "beregninger udfrt p en henvisning til en ufuldstndig type" #~ msgid "%s has no member named `%s'" #~ msgstr "%s har intet medlem ved navn '%s'" #~ msgid "request for member `%s' in something not a structure or union" #~ msgstr "foresprgsel efter medlemmet '%s' i noget der hverken er en union eller en struktur" #~ msgid "dereferencing pointer to incomplete type" #~ msgstr "forsg p at flge en henvisning til en variabel af en ufuldstndig type" #~ msgid "dereferencing `void *' pointer" #~ msgstr "forsg p at flge en 'void *'-henvisning" #~ msgid "invalid type argument of `%s'" #~ msgstr "ugyldig typeparameter '%s'" #~ msgid "subscript missing in array reference" #~ msgstr "indeks mangler i tabelopslag" #~ msgid "array subscript has type `char'" #~ msgstr "tabelindeks er af typen 'char'" #~ msgid "array subscript is not an integer" #~ msgstr "tabelindeks er ikke et heltal" #~ msgid "ISO C forbids subscripting `register' array" #~ msgstr "ISO C forbyder opslag i 'register'-tabel" #~ msgid "ISO C90 forbids subscripting non-lvalue array" #~ msgstr "ISO C90 forbyder opslag i tabel der ikke er venstrevrdi" #~ msgid "subscript has type `char'" #~ msgstr "indeks er af typen 'char'" #~ msgid "subscripted value is neither array nor pointer" #~ msgstr "vrdien der er pfrt et indeks, er hverken en tabel eller en henvisningsvariabel" #~ msgid "`%s' undeclared here (not in a function)" #~ msgstr "'%s' ikke erklret her (ikke i en funktion)" #~ msgid "`%s' undeclared (first use in this function)" #~ msgstr "'%s' er ikke erklret (frst benyttet i denne funktion)" #~ msgid "(Each undeclared identifier is reported only once" #~ msgstr "(et kaldenavn der ikke er erklret, rapporteres kun n gang" #~ msgid "for each function it appears in.)" #~ msgstr "per funktion)" #~ msgid "local declaration of `%s' hides instance variable" #~ msgstr "den lokale erklring af funktionen '%s' skjuler instansvariabel" #~ msgid "called object is not a function" #~ msgstr "det kaldte objekt er ikke en funktion" #~ msgid "too many arguments to function" #~ msgstr "for mange parametre til funktionen" #~ msgid "type of formal parameter %d is incomplete" #~ msgstr "typen af den formelle parameter %d er ufuldstndig" #~ msgid "%s as integer rather than floating due to prototype" #~ msgstr "%s som heltal i stedet for kommatal p grund af prototypen" #~ msgid "%s as integer rather than complex due to prototype" #~ msgstr "%s som heltal i stedet for complex p grund af prototypen" #~ msgid "%s as complex rather than floating due to prototype" #~ msgstr "%s som complex i stedet for kommatal p grund af prototypen" #~ msgid "%s as floating rather than integer due to prototype" #~ msgstr "%s som kommatal i stedet for heltal p grund af prototypen" #~ msgid "%s as complex rather than integer due to prototype" #~ msgstr "%s som complex i stedet for heltal p grund af prototypen" #~ msgid "%s as floating rather than complex due to prototype" #~ msgstr "%s som kommatal i stedet for complex p grund af prototypen" #~ msgid "%s as `float' rather than `double' due to prototype" #~ msgstr "%s som float i stedet for double p grund af prototypen" #~ msgid "%s with different width due to prototype" #~ msgstr "%s med anderledes bredde p grund af prototypen" #~ msgid "%s as unsigned due to prototype" #~ msgstr "%s som unsigned p grund af prototypen" #~ msgid "%s as signed due to prototype" #~ msgstr "%s som signed p grund af prototypen" #~ msgid "too few arguments to function" #~ msgstr "for f parametre til funktionen" #~ msgid "suggest parentheses around + or - inside shift" #~ msgstr "foreslr paranteser omkring + eller - inden i skifteoperation" #~ msgid "suggest parentheses around && within ||" #~ msgstr "foreslr paranteser omkring && inden i ||" #~ msgid "suggest parentheses around arithmetic in operand of |" #~ msgstr "foreslr paranteser omkring beregning i operand til |" #~ msgid "suggest parentheses around comparison in operand of |" #~ msgstr "foreslr paranteser omkring sammenligning i operand til |" #~ msgid "suggest parentheses around arithmetic in operand of ^" #~ msgstr "foreslr paranteser omkring beregning i operand til ^" #~ msgid "suggest parentheses around comparison in operand of ^" #~ msgstr "foreslr paranteser omkring sammenligning i operand til ^" #~ msgid "suggest parentheses around + or - in operand of &" #~ msgstr "foreslr paranteser omkring + eller - i operand til &" #~ msgid "suggest parentheses around comparison in operand of &" #~ msgstr "foreslr paranteser omkring sammenligning i operand til &" #~ msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" #~ msgstr "sammenligninger som 'x <= y <= z' flger ikke den matematiske betydning" #~ msgid "division by zero" #~ msgstr "division med nul" #~ msgid "right shift count is negative" #~ msgstr "hjreskiftsantal er negativ" #~ msgid "right shift count >= width of type" #~ msgstr "hjreskiftsantal er strre end bredden af typen" #~ msgid "left shift count is negative" #~ msgstr "venstreskiftsantal er negativ" #~ msgid "left shift count >= width of type" #~ msgstr "venstreskiftsantal er strre end bredden af typen" #~ msgid "shift count is negative" #~ msgstr "skifteantal er negativ" #~ msgid "shift count >= width of type" #~ msgstr "skifteantal er strre end bredden af typen" #~ msgid "comparing floating point with == or != is unsafe" #~ msgstr "sammenligning af kommatal med == eller != er ikke sikkert" #~ msgid "ISO C forbids comparison of `void *' with function pointer" #~ msgstr "ISO C forbyder sammenligning af 'void *' med funktionshenvisning" #~ msgid "comparison of distinct pointer types lacks a cast" #~ msgstr "sammenligning med forskellige henvisningstyper mangler en typeomtvingelse" #~ msgid "comparison between pointer and integer" #~ msgstr "sammenligning mellem henvisningsvariabel og heltal" #~ msgid "ISO C forbids ordered comparisons of pointers to functions" #~ msgstr "ISO C forbyder ordnede sammenligninger af henvisninger til funktioner" #~ msgid "comparison of complete and incomplete pointers" #~ msgstr "sammenligning mellem en fuldstndig og ufuldstndig henvisning" #~ msgid "ordered comparison of pointer with integer zero" #~ msgstr "ordnet sammenligning af henvisning med heltallet nul" #~ msgid "unordered comparison on non-floating point argument" #~ msgstr "uordnet sammenligning af ikke-kommatalsparameter" #~ msgid "comparison between signed and unsigned" #~ msgstr "sammenligning mellem signed og unsigned" #~ msgid "comparison of promoted ~unsigned with constant" #~ msgstr "sammenligning af forfremmet ~unsigned med konstant" #~ msgid "comparison of promoted ~unsigned with unsigned" #~ msgstr "sammenligning af forfremmet ~unsigned med unsigned" #~ msgid "pointer of type `void *' used in subtraction" #~ msgstr "henvisning af typen 'void *' benyttet i subtraktion" #~ msgid "pointer to a function used in subtraction" #~ msgstr "henvisning til en funktion benyttet i subtraktion" #~ msgid "wrong type argument to unary plus" #~ msgstr "forkert parametertype til unrt plus" #~ msgid "wrong type argument to unary minus" #~ msgstr "forkert parametertype til unrt minus" #~ msgid "ISO C does not support `~' for complex conjugation" #~ msgstr "ISO C understtter ikke '~' til compleks-konjugering" #~ msgid "wrong type argument to bit-complement" #~ msgstr "forkert parametertype til bitkomplement" #~ msgid "wrong type argument to abs" #~ msgstr "forkert parametertype til abs" #~ msgid "wrong type argument to conjugation" #~ msgstr "forkert parametertype til konjugation" #~ msgid "wrong type argument to unary exclamation mark" #~ msgstr "forkert parametertype til unrt udrbstegn" #~ msgid "ISO C does not support `++' and `--' on complex types" #~ msgstr "ISO C understtter ikke '++' og '--' for complex-typer" # man kan ikke stikke en forgelse (++) en type som parameter, 'type # argument' skal opfattes p en anden mde #~ msgid "wrong type argument to increment" #~ msgstr "forkert parametertype til forgelse" #~ msgid "wrong type argument to decrement" #~ msgstr "forkert parametertype til formindskelse" #~ msgid "increment of pointer to unknown structure" #~ msgstr "forgelse af henvisning til en ukendt struktur" #~ msgid "decrement of pointer to unknown structure" #~ msgstr "formindskelse af henvisning til en ukendt struktur" # RETMIG: hvad betyder dette? #~ msgid "ISO C forbids the address of a cast expression" #~ msgstr "ISO C forbyder adressen af et typeomtvingningsudtryk" #~ msgid "invalid lvalue in unary `&'" #~ msgstr "ugyldig venstrevrdi i unr '&'" #~ msgid "attempt to take address of bit-field structure member `%s'" #~ msgstr "forsg p at finde adressen af bitfeltstrukturmedlemmet '%s'" #~ msgid "%s" #~ msgstr "%s" #~ msgid "ISO C forbids use of conditional expressions as lvalues" #~ msgstr "ISO C forbyder brug af betingede udtryk som venstrevrdier" #~ msgid "ISO C forbids use of compound expressions as lvalues" #~ msgstr "ISO C forbyder brug af sammensatte udtryk som venstrevrdier" #~ msgid "ISO C forbids use of cast expressions as lvalues" #~ msgstr "ISO C forbyder brug af typeomtvingningsudtryk som venstrevrdier" # RETMIG: lettere klodset konstruktion #~ msgid "%s of read-only member `%s'" #~ msgstr "%s af medlemmet '%s' der kun m lses" #~ msgid "%s of read-only variable `%s'" #~ msgstr "%s af variablen '%s' der kun m lses" #~ msgid "%s of read-only location" #~ msgstr "%s af placering der kun m lses" #~ msgid "cannot take address of bit-field `%s'" #~ msgstr "kan ikke finde adressen af bitfeltet '%s'" #~ msgid "global register variable `%s' used in nested function" #~ msgstr "global registervariabel '%s' benyttet i indlejret funktion" #~ msgid "register variable `%s' used in nested function" #~ msgstr "registervariabel '%s' benyttet i indlejret funktion" #~ msgid "address of global register variable `%s' requested" #~ msgstr "foresprgsel efter adressen af den globale registervariabel '%s'" #~ msgid "cannot put object with volatile field into register" #~ msgstr "kan ikke anbringe et objekt med et volatile-felt i et register" #~ msgid "address of register variable `%s' requested" #~ msgstr "foresprgsel efter adressen af registervariablen '%s'" #~ msgid "signed and unsigned type in conditional expression" #~ msgstr "signed og unsigned type i betinget udtryk" #~ msgid "ISO C forbids conditional expr with only one void side" #~ msgstr "ISO C forbyder betingede udtryk med kun n tom side" #~ msgid "ISO C forbids conditional expr between `void *' and function pointer" #~ msgstr "ISO C++ forbyder betinget udtryk mellem 'void *' og funktionshenvisning" #~ msgid "pointer type mismatch in conditional expression" #~ msgstr "henvisningstyperne i betingelsesudtrykket passer ikke sammen" #~ msgid "pointer/integer type mismatch in conditional expression" #~ msgstr "henvisnings- og heltalstype i betingelsesudtrykket passer ikke sammen" #~ msgid "type mismatch in conditional expression" #~ msgstr "typerne i betingelsesudtrykket passer ikke sammen" #~ msgid "left-hand operand of comma expression has no effect" #~ msgstr "venstreoperanden til kommaudtrykket har ingen virkning" #~ msgid "cast specifies array type" #~ msgstr "typetildelingen angiver en tabeltype" #~ msgid "cast specifies function type" #~ msgstr "typetildelingen angiver en funktionstype" #~ msgid "ISO C forbids casting nonscalar to the same type" #~ msgstr "ISO C forbyder omtvingelse af ikke-skalar til den samme type" #~ msgid "ISO C forbids casts to union type" #~ msgstr "ISO C forbyder omtvingelse til uniontype" #~ msgid "cast to union type from type not present in union" #~ msgstr "typetildeling til en uniontype fra en type der ikke findes i union'en" #~ msgid "cast adds new qualifiers to function type" #~ msgstr "typeomtvingning tilfjer modifikationer til en funktionstype" #~ msgid "cast discards qualifiers from pointer target type" #~ msgstr "typeomtvingelse kasserer modifikationer p henvisningsmlets type" #~ msgid "cast increases required alignment of target type" #~ msgstr "typeomtvingelse forger den pkrvne justering af mltypen" #~ msgid "cast from pointer to integer of different size" #~ msgstr "typeomtvingelse fra henvisning til heltal af en anden strrelse" #~ msgid "cast does not match function type" #~ msgstr "typeomtvingelse passer ikke til funktionstype" #~ msgid "cast to pointer from integer of different size" #~ msgstr "typeomtvingelse fra heltal til henvisning af en anden strrelse" #~ msgid "type-punning to incomplete type might break strict-aliasing rules" #~ msgstr "typeomtvingning af ufuldstndig type bryder muligvis strenge aliasregler" #~ msgid "dereferencing type-punned pointer will break strict-aliasing rules" #~ msgstr "flgning af en typeomtvunget henvisning vil bryde strenge aliasregler" #~ msgid "invalid lvalue in assignment" #~ msgstr "ugyldig venstrevrdi i tildeling" #~ msgid "assignment" #~ msgstr "tildeling" #~ msgid "cannot pass rvalue to reference parameter" #~ msgstr "kan ikke videregive hjrevrdi til referenceparameter" #~ msgid "%s makes qualified function pointer from unqualified" #~ msgstr "%s opretter en funktionshenvisning med modifikationer fra n uden" #~ msgid "%s discards qualifiers from pointer target type" #~ msgstr "%s kasserer modifikationer p henvisningsmlets type" #~ msgid "ISO C prohibits argument conversion to union type" #~ msgstr "ISO C forbyder parameterkonvertering til uniontype" #~ msgid "ISO C forbids %s between function pointer and `void *'" #~ msgstr "ISO C forbyder %s mellem funktionshenvisning og 'void *'" #~ msgid "pointer targets in %s differ in signedness" #~ msgstr "fortegnene i henvisningsml i %s er forskellige" #~ msgid "%s from incompatible pointer type" #~ msgstr "%s fra en henvisningstype der ikke er forenelig med mlets" #~ msgid "%s makes pointer from integer without a cast" #~ msgstr "%s opretter en henvisningsvariabel ud fra et heltal uden en typeomtvingning" #~ msgid "%s makes integer from pointer without a cast" #~ msgstr "%s opretter et heltal ud fra en henvisningsvariabel uden en typeomtvingning" #~ msgid "incompatible type for argument %d of `%s'" #~ msgstr "typen af den %d. parameter i '%s' passer ikke" #~ msgid "incompatible type for argument %d of indirect function call" #~ msgstr "typen af den %d. parameter i det indirekte funktionskald passer ikke" #~ msgid "incompatible types in %s" #~ msgstr "uforenelige typer i %s" #~ msgid "passing arg of `%s'" #~ msgstr "videregiver parameter til '%s'" #~ msgid "passing arg of pointer to function" #~ msgstr "videregiver parameter af henvisning til funktion" #~ msgid "passing arg %d of `%s'" #~ msgstr "videregiver den %d. parameter til '%s'" #~ msgid "passing arg %d of pointer to function" #~ msgstr "videregiver den %d. parameter af henvisning til funktion" #~ msgid "initializer for static variable is not constant" #~ msgstr "startvrdien for den statiske variabel er ikke en konstant" #~ msgid "initializer for static variable uses complicated arithmetic" #~ msgstr "startvrdien for den statiske variabel benytter komplicerede beregninger" #~ msgid "aggregate initializer is not constant" #~ msgstr "startvrdi til variabel af en sammensat type er ikke en konstant" #~ msgid "aggregate initializer uses complicated arithmetic" #~ msgstr "startvrdien til variabel af en sammensat type benytter komplicerede beregninger" # 'automatic aggregate' betyder automatisk allokerede variabler, dvs. # ganske almindelige lokale variabler (kan evt. erklres med 'auto') #~ msgid "traditional C rejects automatic aggregate initialization" #~ msgstr "traditionel C forbyder klargring af auto-variabler af sammensatte typer" #~ msgid "(near initialization for `%s')" #~ msgstr "(i nrheden af klargringen af '%s')" #~ msgid "char-array initialized from wide string" #~ msgstr "char-tabel fr tildelt startvrdi fra en bred streng" #~ msgid "int-array initialized from non-wide string" #~ msgstr "int-tabel fr tildelt startvrdi fra en ikke-bred streng" #~ msgid "initializer-string for array of chars is too long" #~ msgstr "startvrdistrengen til char-tabellen er for lang" #~ msgid "array initialized from non-constant array expression" #~ msgstr "tabel fr tildelt en startvrdi fra et tabeludtryk der ikke er konstant" #~ msgid "initializer element is not constant" #~ msgstr "startvrdielement er ikke en konstant" #~ msgid "initialization" #~ msgstr "klargring" #~ msgid "initializer element is not computable at load time" #~ msgstr "startvrdielement kan ikke beregnes ved indlsningstidspunktet" #~ msgid "invalid initializer" #~ msgstr "ugyldig startvrdi" #~ msgid "extra brace group at end of initializer" #~ msgstr "overskydende krllede paranteser ved slutningen af startvrdien" #~ msgid "missing braces around initializer" #~ msgstr "krllede paranteser mangler omkring startvrdien" #~ msgid "braces around scalar initializer" #~ msgstr "krllede paranteser omkring skalarstartvrdi" # RETMIG: eller er det fleksibel tabel-medlem #~ msgid "initialization of flexible array member in a nested context" #~ msgstr "klargring af fleksibelt tabelmedlem i en indlejret kontekst" #~ msgid "initialization of a flexible array member" #~ msgstr "klargring af fleksibelt tabelmedlem" #~ msgid "missing initializer" #~ msgstr "manglende startvrdi" #~ msgid "empty scalar initializer" #~ msgstr "tom skalarstartvrdi" #~ msgid "extra elements in scalar initializer" #~ msgstr "overskydende elementer i skalarstarvrdi" #~ msgid "initialization designators may not nest" #~ msgstr "klargringstegn m ikke indlejres" #~ msgid "array index in non-array initializer" #~ msgstr "tabelindeks i en startvrdi der ikke er en tabel" # RETMIG: record? #~ msgid "field name not in record or union initializer" #~ msgstr "feltnavn ikke i struktur- eller union-startvrdi" #~ msgid "nonconstant array index in initializer" #~ msgstr "tabelindekset i startvrdien er ikke en konstant" #~ msgid "array index in initializer exceeds array bounds" #~ msgstr "tabelindeks i startvrdi overskrider tabelgrnser" #~ msgid "empty index range in initializer" #~ msgstr "tomt indeksinterval i startvrdi" #~ msgid "array index range in initializer exceeds array bounds" #~ msgstr "tabelindeksinterval i startvrdi overskrider tabelgrnser" #~ msgid "unknown field `%s' specified in initializer" #~ msgstr "ukendt felt '%s' angivet i startvrdi" #~ msgid "initialized field with side-effects overwritten" #~ msgstr "klargjort felt med bivirkninger overskrevet" #~ msgid "excess elements in char array initializer" #~ msgstr "for mange elementer i char-tabelstartvrdien" #~ msgid "excess elements in struct initializer" #~ msgstr "for mange elementer i struct-startvrdi" #~ msgid "non-static initialization of a flexible array member" #~ msgstr "ikke-statisk klargring af fleksibelt tabelmedlem" #~ msgid "excess elements in union initializer" #~ msgstr "for mange elementer i union-startvrdi" #~ msgid "traditional C rejects initialization of unions" #~ msgstr "traditionel C forbyder tildeling af startvrdi til unioner" #~ msgid "excess elements in array initializer" #~ msgstr "for mange elementer i tabelstartvrdi" #~ msgid "excess elements in vector initializer" #~ msgstr "for mange elementer i vektorstartvrdi" #~ msgid "excess elements in scalar initializer" #~ msgstr "for mange elementer i skalarstartvrdi" #~ msgid "asm template is not a string constant" #~ msgstr "asm-stning er ikke en strengkonstant" #~ msgid "invalid lvalue in asm statement" #~ msgstr "ugyldig venstrevrdi i asm-stning" #~ msgid "modification by `asm'" #~ msgstr "ndring af 'asm'" #~ msgid "function declared `noreturn' has a `return' statement" #~ msgstr "funktion der er erklret 'noreturn' har en 'return'-stning" #~ msgid "`return' with no value, in function returning non-void" #~ msgstr "'return' uden nogen vrdi i en funktion der ikke returnerer void" #~ msgid "`return' with a value, in function returning void" #~ msgstr "'return' med en vrdi i en funktion der returnerer void" #~ msgid "return" #~ msgstr "returnering" #~ msgid "function returns address of local variable" #~ msgstr "funktion returnerer adressen p en lokal variabel" #~ msgid "switch quantity not an integer" #~ msgstr "switch-strrelsen er ikke et heltal" #~ msgid "`long' switch expression not converted to `int' in ISO C" #~ msgstr "'long'-udtryk i switch konverteres ikke til 'int' i ISO C" #~ msgid "case label not within a switch statement" #~ msgstr "case-etiket befinder sig ikke inden i en switch-stning" #~ msgid "`default' label not within a switch statement" #~ msgstr "'default'-etiket befinder sig ikke inden i en switch-stning" #~ msgid "inlining failed in call to `%s'" #~ msgstr "indlejring mislykkedes i kald til '%s'" #~ msgid "called from here" #~ msgstr "kaldt herfra" #~ msgid "can't inline call to `%s'" #~ msgstr "kan ikke indlejre kald til '%s'" #~ msgid "function call has aggregate value" #~ msgstr "funktionskald har en sammensat vrdi" #~ msgid "Size of loop %d should be %d, not %d." #~ msgstr "Strrelsen af lkke %d burde vre %d, ikke %d." #~ msgid "Bb %d do not belong to loop %d." #~ msgstr "Basisblok %d hrer ikke til lkke %d." #~ msgid "Loop %d's header does not have exactly 2 entries." #~ msgstr "Lkke %d's hoved har ikke prcis 2 elementer." #~ msgid "Loop %d's latch does not have exactly 1 successor." #~ msgstr "Lkke %d's ende har ikke prcis 1 efterflger." #~ msgid "Loop %d's latch does not have header as successor." #~ msgstr "Lkke %d's ende har ikke hoved som efterflger." #~ msgid "Loop %d's latch does not belong directly to it." #~ msgstr "Lkke %d's ende tilhrer ikke direkte lkken." #~ msgid "Loop %d's header does not belong directly to it." #~ msgstr "Lkke %d's hoved tilhrer ikke direkte lkken." #~ msgid "bb %d on wrong place" #~ msgstr "basisblok %d ved et forkerte sted" #~ msgid "prev_bb of %d should be %d, not %d" #~ msgstr "prev_bb for %d br vre %d, ikke %d" #~ msgid "end insn %d for block %d not found in the insn stream" #~ msgstr "slutinstruktion %d for blok %d ikke fundet i instruktionsstrmmen" #~ msgid "insn %d is in multiple basic blocks (%d and %d)" #~ msgstr "instruktion %d er i flere basisblokke (%d og %d)" #~ msgid "head insn %d for block %d not found in the insn stream" #~ msgstr "hovedinstruktion %d for blok %d ikke fundet i instruktionsstrmmen" #~ msgid "verify_flow_info: REG_BR_PROB does not match cfg %i %i" #~ msgstr "verify_flow_info: REG_BR_PROB passer ikke til konf. %i %i" #~ msgid "verify_flow_info: Wrong count of block %i %i" #~ msgstr "verify_flow_info: Ukorrekt antal af blok %i %i" #~ msgid "verify_flow_info: Wrong frequency of block %i %i" #~ msgstr "verify_flow_info: Ukorrekt frekvens af blok %i %i" #~ msgid "verify_flow_info: Duplicate edge %i->%i" #~ msgstr "verify_flow_info: Dobbelt kant %i->%i" #~ msgid "verify_flow_info: Wrong probability of edge %i->%i %i" #~ msgstr "verify_flow_info: Ukorrekt sandsynlighed for kant %i->%i %i" #~ msgid "verify_flow_info: Wrong count of edge %i->%i %i" #~ msgstr "verify_flow_info: Ukorrekt antal for kant %i->%i %i" #~ msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i" #~ msgstr "verify_flow_info: Ukorrekte blokke til fald-gennem %i->%i" #~ msgid "verify_flow_info: Incorrect fallthru %i->%i" #~ msgstr "verify_flow_info: Ukorrekt fald-gennem %i->%i" #~ msgid "wrong insn in the fallthru edge" #~ msgstr "forkert instruktion i fald-gennem-kant" #~ msgid "verify_flow_info: Basic block %d succ edge is corrupted" #~ msgstr "verify_flow_info: Efterflgende kant til basisblok %d er delagt" #~ msgid "Missing REG_EH_REGION note in the end of bb %i" #~ msgstr "Mangler REG_EH_REGION-note i slutningen af basisblok %i" #~ msgid "Too many outgoing branch edges from bb %i" #~ msgstr "For mange udgende forgreningskanter fra basisblok %i" #~ msgid "Fallthru edge after unconditional jump %i" #~ msgstr "Fald gennem-kant efter ubetinget spring %i" #~ msgid "Wrong amount of branch edges after unconditional jump %i" #~ msgstr "Forkert antal forgreningskanter efter ubetinget spring %i" #~ msgid "Wrong amount of branch edges after conditional jump %i" #~ msgstr "Forkert antal forgreningskanter efter betinget spring %i" #~ msgid "Call edges for non-call insn in bb %i" #~ msgstr "Kaldekanter for ikke-kaldsinstruktion i basisblok %i" #~ msgid "Abnormal edges for no purpose in bb %i" #~ msgstr "Unormale kanter uden noget forml i basisblok %i" #~ msgid "missing barrier after block %i" #~ msgstr "manglende barriere efter blok %i" #~ msgid "basic block %d pred edge is corrupted" #~ msgstr "foregende kant til basisblok %d er delagt" #~ msgid "insn %d inside basic block %d but block_for_insn is NULL" #~ msgstr "instruktion %d inden i basisblok %d, men block_for_insn er NULL" #~ msgid "insn %d inside basic block %d but block_for_insn is %i" #~ msgstr "instruktion %d inden i basisblok %d, men block_for_insn er %i" #~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" #~ msgstr "NOTE_INSN_BASIC_BLOCK mangler for blok %d" #~ msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d" #~ msgstr "NOTE_INSN_BASIC_BLOCK %d i midten af basisblok %d" #~ msgid "in basic block %d:" #~ msgstr "i basisblok %d:" #~ msgid "flow control insn inside a basic block" #~ msgstr "strmkontrolinstruktion inden i en basisblok" #~ msgid "basic block %i edge lists are corrupted" #~ msgstr "kantlister til basisblok %i er delagt" #~ msgid "basic blocks not numbered consecutively" #~ msgstr "basisblokkene er ikke nummeret i rkkeflge" #~ msgid "insn outside basic block" #~ msgstr "instruktion uden for basisblok" #~ msgid "return not followed by barrier" #~ msgstr "returnering flges ikke af barriere" #~ msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" #~ msgstr "antallet af basisbloknoter i instruktionskden (%d) != n_basic_blocks (%d)" #~ msgid "verify_flow_info failed" #~ msgstr "verify_flow_info mislykkedes" #~ msgid "internal error" #~ msgstr "intern fejl" #~ msgid "no arguments" #~ msgstr "ingen parametre" #~ msgid "fopen %s" #~ msgstr "fopen %s" #~ msgid "fclose %s" #~ msgstr "fclose %s" #~ msgid "collect2 version %s" #~ msgstr "collect2 version %s" #~ msgid "%d constructor(s) found\n" #~ msgstr "%d konstruktionsfunktion(er) fundet\n" #~ msgid "%d destructor(s) found\n" #~ msgstr "%d destruktionsfunktion(er) fundet\n" #~ msgid "%d frame table(s) found\n" #~ msgstr "%d rammetabel(ler) fundet\n" #~ msgid "%s terminated with signal %d [%s]%s" #~ msgstr "%s afsluttet af signal %d [%s]%s" #~ msgid "%s returned %d exit status" #~ msgstr "%s returnerede afslutningskoden %d" #~ msgid "[cannot find %s]" #~ msgstr "[kan ikke finde %s]" #~ msgid "cannot find `%s'" #~ msgstr "kan ikke finde '%s'" #~ msgid "redirecting stdout: %s" #~ msgstr "omdirigerer standard-ud: %s" #~ msgid "[Leaving %s]\n" #~ msgstr "[Efterlader %s]\n" #~ msgid "" #~ "\n" #~ "write_c_file - output name is %s, prefix is %s\n" #~ msgstr "" #~ "\n" #~ "write_c_file - uddatanavnet er %s, prfikset er %s\n" #~ msgid "cannot find `nm'" #~ msgstr "kan ikke finde 'nm'" #~ msgid "pipe" #~ msgstr "pipe" #~ msgid "fdopen" #~ msgstr "fdopen" #~ msgid "dup2 %d 1" #~ msgstr "dup2 %d 1" #~ msgid "close %d" #~ msgstr "close %d" #~ msgid "execv %s" #~ msgstr "fejl under krsel (vha. execv) af %s" #~ msgid "init function found in object %s" #~ msgstr "klargringsfunktion fundet i objekt %s" #~ msgid "fini function found in object %s" #~ msgstr "afslutningsfunktion fundet i objekt %s" #~ msgid "fclose" #~ msgstr "fclose" #~ msgid "unable to open file '%s'" #~ msgstr "kunne ikke bne filen '%s'" #~ msgid "unable to stat file '%s'" #~ msgstr "kunne ikke f fat i oplysninger om filen '%s'" #~ msgid "unable to mmap file '%s'" #~ msgstr "kunne ikke indlse filen '%s'" #~ msgid "not found\n" #~ msgstr "ikke fundet\n" #~ msgid "dynamic dependency %s not found" #~ msgstr "dynamisk afhngighed %s ikke fundet" #~ msgid "bad magic number in file '%s'" #~ msgstr "ugyldigt magisk tal i filen '%s'" #~ msgid "dynamic dependencies.\n" #~ msgstr "dynamiske afhngigheder.\n" #~ msgid "cannot find `ldd'" #~ msgstr "kan ikke finde 'ldd'" #~ msgid "" #~ "\n" #~ "ldd output with constructors/destructors.\n" #~ msgstr "" #~ "\n" #~ "ldd-uddata med konstruktions-/destruktionsfunktioner.\n" #~ msgid "unable to open dynamic dependency '%s'" #~ msgstr "kan ikke bne den dynamiske afhngighed '%s'" #~ msgid "%s: not a COFF file" #~ msgstr "%s: ikke en COFF-fil" #~ msgid "%s: cannot open as COFF file" #~ msgstr "%s: kan ikke bnes som en COFF-fil" #~ msgid "library lib%s not found" #~ msgstr "biblioteket lib%s ikke fundet" #~ msgid "open %s" #~ msgstr "fejl ved bning af %s" #~ msgid "incompatibilities between object file & expected values" #~ msgstr "uoverensstemmelser mellem objektfil og forventede vrdier" #~ msgid "" #~ "\n" #~ "Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n" #~ msgstr "" #~ "\n" #~ "Behandler symboltabel nr. %d, forskydning = 0x%.8lx, form = %s\n" #~ msgid "string section missing" #~ msgstr "strengsektion mangler" #~ msgid "section pointer missing" #~ msgstr "sektionshenvisning mangler" #~ msgid "no symbol table found" #~ msgstr "ingen symboltabel fundet" #~ msgid "no cmd_strings found" #~ msgstr "ingen cmd_strings fundet" #~ msgid "" #~ "\n" #~ "Updating header and load commands.\n" #~ "\n" #~ msgstr "" #~ "\n" #~ "Opdaterer hoved- og indlsningskommandoer.\n" #~ "\n" #~ msgid "load command map, %d cmds, new size %ld.\n" #~ msgstr "indlser kommandooversigt, %d kommandoer, ny strrelse %ld.\n" #~ msgid "" #~ "writing load commands.\n" #~ "\n" #~ msgstr "" #~ "skriver indlsningskommandoer.\n" #~ "\n" #~ msgid "close %s" #~ msgstr "fejl ved lukning af %s" #~ msgid "could not convert 0x%l.8x into a region" #~ msgstr "kunne ikke konvertere 0x%l.8x til en region" #~ msgid "%s function, region %d, offset = %ld (0x%.8lx)\n" #~ msgstr "%s-funktion, region %d, forskydning = %ld (0x%.8lx)\n" #~ msgid "bad magic number" #~ msgstr "ugyldigt magisk tal" #~ msgid "bad header version" #~ msgstr "ugyldig version af hovedet" #~ msgid "bad raw header version" #~ msgstr "ugyldig version af rhovedet" #~ msgid "raw header buffer too small" #~ msgstr "rhoved-mellemlager for smt" #~ msgid "old raw header file" #~ msgstr "gammel rhovedfil" #~ msgid "unsupported version" #~ msgstr "versionen er ikke understttet" #~ msgid "unknown {de,en}code_mach_o_hdr return value %d" #~ msgstr "ukendt {de,en}code_mach_o_hdr returneringsvrdi %d" #~ msgid "fstat %s" #~ msgstr "fejl ved egenskabsundersgelse af filen %s" #~ msgid "lseek %s 0" #~ msgstr "fejl ved sgning til begyndelsen i filen %s" #~ msgid "read %s" #~ msgstr "fejl ved lsning af %s" #~ msgid "read %ld bytes, expected %ld, from %s" #~ msgstr "lste %ld byte, forventede %ld, fra %s" #~ msgid "msync %s" #~ msgstr "fejl ved synkronisering mellem hukommelse og disk af %s" #~ msgid "munmap %s" #~ msgstr "fejl ved fjernelse af %s fra hukommelsen" #~ msgid "write %s" #~ msgstr "fejl ved skrivning til %s" #~ msgid "wrote %ld bytes, expected %ld, to %s" #~ msgstr "skrev %ld byte, forventede %ld, til %s" #~ msgid "" #~ ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n" #~ ";; %d successes.\n" #~ "\n" #~ msgstr "" #~ ";; kombineringsstatistik: %d forsg, %d udskiftninger (%d krver ny plads),\n" #~ ";; %d vellykkede.\n" #~ "\n" #~ msgid "" #~ "\n" #~ ";; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n" #~ ";; %d successes.\n" #~ msgstr "" #~ "\n" #~ ";; kombineringstotal: %d forsg, %d udskiftninger (%d krver ny plads),\n" #~ ";; %d succeser.\n" #~ msgid "cannot convert to a pointer type" #~ msgstr "kan ikke konverteres til en henvisningstype" #~ msgid "pointer value used where a floating point value was expected" #~ msgstr "en henvisningsvrdi er angivet hvor der forventedes en kommatalsvrdi" #~ msgid "aggregate value used where a float was expected" #~ msgstr "en vrdi af en sammensat type er angivet hvor der forventedes et kommatal" #~ msgid "conversion to incomplete type" #~ msgstr "konvertering til en ufuldstndig type" #~ msgid "can't convert between vector values of different size" #~ msgstr "kan ikke konvertere vektorvrdier af forskellige strrelser" #~ msgid "aggregate value used where an integer was expected" #~ msgstr "en vrdi af en sammensat type er angivet hvor der forventedes et heltal" #~ msgid "pointer value used where a complex was expected" #~ msgstr "en henvisningsvrdi er angivet hvor der forventedes et komplekst tal" #~ msgid "aggregate value used where a complex was expected" #~ msgstr "en vrdi af en sammensat type er angivet hvor der forventedes et komplekst tal" #~ msgid "can't convert value to a vector" #~ msgstr "kan ikke konvertere vrdi til en vektor" #~ msgid "ISO C++ does not permit \"%s\" in #if" #~ msgstr "ISO C++ tillader ikke \"%s\" i #if" #~ msgid "invalid character '%c' in #if" #~ msgstr "ugyldigt tegn '%c' i #if" #~ msgid "invalid character '\\%03o' in #if" #~ msgstr "ugyldigt tegn '\\%03o' i #if" #~ msgid "absolute file name in remap_filename" #~ msgstr "absolut filnavn i remap_filename" #~ msgid "ignoring nonexistent directory \"%s\"\n" #~ msgstr "ignorerer det ikke-eksisterende katalog \"%s\"\n" #~ msgid "%s: Not a directory" #~ msgstr "%s: ikke et katalog" #~ msgid "ignoring duplicate directory \"%s\"\n" #~ msgstr "ignorerer mere end n angivelse af kataloget \"%s\"\n" #~ msgid " as it is a non-system directory that duplicates a system directory\n" #~ msgstr " da det er et ikke-systemkatalog som dublerer et systemkatalog\n" #~ msgid "#include \"...\" search starts here:\n" #~ msgstr "#include \"...\"-sgning begynder her:\n" #~ msgid "#include <...> search starts here:\n" #~ msgstr "#include <...>-sgning begynder her:\n" #~ msgid "End of search list.\n" #~ msgstr "Slut p sgningslisten.\n" #~ msgid "" #~ msgstr "" #~ msgid "" #~ msgstr "" #~ msgid "assertion missing after %s" #~ msgstr "et postulat mangler efter %s" #~ msgid "directory name missing after %s" #~ msgstr "et katalognavn mangler efter %s" #~ msgid "file name missing after %s" #~ msgstr "et filnavn mangler efter %s" #~ msgid "macro name missing after %s" #~ msgstr "et makronavn mangler efter %s" #~ msgid "path name missing after %s" #~ msgstr "navnet p en sti mangler efter %s" #~ msgid "-I- specified twice" #~ msgstr "-I- er angivet to gange" #~ msgid "no newline at end of file" #~ msgstr "ingen linjeskift ved slutningen af filen" #~ msgid "unknown string token %s\n" #~ msgstr "ukendt strengsymbol %s\n" #~ msgid "non-hex digit '%c' in universal-character-name" #~ msgstr "'%c' der ikke er et hexadecimalt ciffer, optrder i universelt tegnnavn" #~ msgid "universal-character-name on EBCDIC target" #~ msgstr "universelt tegnnavn p EBCDIC-ml" #~ msgid "universal-character-name out of range" #~ msgstr "universelt tegnnavn uden for det gyldige interval" #~ msgid "unknown escape sequence: '\\%03o'" #~ msgstr "ukendt undvigesekvensen '\\%03o'" #~ msgid "escape sequence out of range for its type" #~ msgstr "undvigesekvensen er uden for det gyldig interval for dens type" #~ msgid "#import is obsolete, use an #ifndef wrapper in the header file" #~ msgstr "#import er forldet, brug en #ifndef-indpakning i inkluderingsfilen" #~ msgid "#pragma once is obsolete" #~ msgstr "'#pragma once' er forldet" #~ msgid "\"%s\" is not a valid option to the preprocessor" #~ msgstr "\"%s\" er ikke et gyldigt tilvalg til prprocessoren" #~ msgid "too many input files" #~ msgstr "for mange inddatafiler" #~ msgid ";; Processing block from %d to %d, %d sets.\n" #~ msgstr ";; Behandler blok fra %d til %d, %d mngder.\n" #~ msgid "((anonymous))" #~ msgstr "((anonym))" #~ msgid "%s: warnings being treated as errors\n" #~ msgstr "%s: advarsler bliver opfattet som fejl\n" #~ msgid "%s: %s: " #~ msgstr "%s: %s: " #~ msgid "%s " #~ msgstr "%s " #~ msgid " %s" #~ msgstr " %s" #~ msgid "At top level:" #~ msgstr "Ved verste niveau:" #~ msgid "In member function `%s':" #~ msgstr "I medlemsfunktionen '%s':" #~ msgid "In function `%s':" #~ msgstr "I funktionen '%s':" #~ msgid "compilation terminated.\n" #~ msgstr "oversttelse afsluttede.\n" #~ msgid "%s:%d: confused by earlier errors, bailing out\n" #~ msgstr "%s:%d: forvirret af tidligere fejl, opgiver vred\n" #~ msgid "" #~ "Please submit a full bug report,\n" #~ "with preprocessed source if appropriate.\n" #~ "See %s for instructions.\n" #~ msgstr "" #~ "Indsend venligst en komplet fejlrapport med\n" #~ "prprocesseret kildekode om ndvendigt.\n" #~ "Se %s for instruktioner.\n" #~ msgid "Internal compiler error: Error reporting routines re-entered.\n" #~ msgstr "Intern overstterfejl: fejlrapporteringsrutiner blev kaldt igen.\n" #~ msgid "in %s, at %s:%d" #~ msgstr "i %s, ved %s:%d" #~ msgid "In file included from %s:%d" #~ msgstr "I filen inkluderet af %s:%d" # kommer til at st neden under ovenstende, derfor "af" #~ msgid "" #~ ",\n" #~ " from %s:%d" #~ msgstr "" #~ ",\n" #~ " af %s:%d" #~ msgid ":\n" #~ msgstr ":\n" #~ msgid "`%s' is deprecated (declared at %s:%d)" #~ msgstr "'%s' er forldet (erklret ved %s:%d)" #~ msgid "`%s' is deprecated" #~ msgstr "'%s' er forldet" #~ msgid "type is deprecated (declared at %s:%d)" #~ msgstr "type er forldet (erklret ved %s:%d)" #~ msgid "type is deprecated" #~ msgstr "type er forldet" #~ msgid "dominator of %d should be %d, not %d" #~ msgstr "dominator for %d burde vre %d, ikke %d" #~ msgid "DW_LOC_OP %s not implemented\n" #~ msgstr "DW_LOC_OP %s understttes ikke\n" #~ msgid "internal regno botch: `%s' has regno = %d\n" #~ msgstr "internt reg.nr.-problem: '%s' har reg.nr. = %d\n" #~ msgid "support for the DWARF1 debugging format is deprecated" #~ msgstr "understttelse for DWARF1-fejlanalyseringsformatet er forldet" #~ msgid "can't get current directory" #~ msgstr "kan ikke f fat i det aktuelle katalog" #~ msgid "can't access real part of complex value in hard register" #~ msgstr "kan ikke tilg den reelle del af komplekst tal i et hardwareregister" #~ msgid "can't access imaginary part of complex value in hard register" #~ msgstr "kan ikke tilg den imaginre del af komplekst tal i et hardwareregister" #~ msgid "ICE: emit_insn used where emit_jump_insn needed:\n" #~ msgstr "ICE: emit_insn brugt hvor emit_jump_insn behves:\n" #~ msgid "abort in %s, at %s:%d" #~ msgstr "afbrudt i %s ved %s:%d" #~ msgid "exception handling disabled, use -fexceptions to enable" #~ msgstr "hndtering af undtagelser er slet fra, angiv -fexceptions for at sl dem til" #~ msgid "argument of `__builtin_eh_return_regno' must be constant" #~ msgstr "parameteren til '__builtin_eh_return_regno' skal vre konstant" #~ msgid "__builtin_eh_return not supported on this target" #~ msgstr "__builtin_eh_return understttes ikke p mlarkitekturen" #~ msgid "stack limits not supported on this target" #~ msgstr "stakgrnser understttes ikke p mlarkitekturen" #~ msgid "function using short complex types cannot be inline" #~ msgstr "funktioner der benytter short complex-typer, kan ikke indbygges" #~ msgid "unsupported wide integer operation" #~ msgstr "bred heltalsoperation understttes ikke" #~ msgid "prior parameter's size depends on `%s'" #~ msgstr "foregende parameters strrelse afhnger af '%s'" #~ msgid "returned value in block_exit_expr" #~ msgstr "returnerede vrdi i block_exit_expr" #~ msgid "cannot take the address of an unaligned member" #~ msgstr "kan ikke tage adressen af et ikke-justeret medlem" #~ msgid "negative insn length" #~ msgstr "negativ instruktionslngde" #~ msgid "could not split insn" #~ msgstr "kunne ikke dele instruktion" #~ msgid "invalid `asm': " #~ msgstr "ugyldig 'asm': " #~ msgid "nested assembly dialect alternatives" #~ msgstr "indlejrede alternativer for maskinkodedialekter" #~ msgid "unterminated assembly dialect alternative" #~ msgstr "uafsluttet alternativ for maskinkodedialekt" #~ msgid "operand number missing after %%-letter" #~ msgstr "operandtal mangler efter %%-letter" #~ msgid "operand number out of range" #~ msgstr "operandtal er uden for det gyldige interval" #~ msgid "invalid %%-code" #~ msgstr "ugyldig %%-kode" #~ msgid "`%%l' operand isn't a label" #~ msgstr "'%%l'-operand er ikke en etiket" #~ msgid "floating constant misused" #~ msgstr "kommatalskonstant misbrugt" #~ msgid "invalid expression as operand" #~ msgstr "ugyldigt udtryk som operand" #~ msgid "function might be possible candidate for attribute `noreturn'" #~ msgstr "funktion er muligvis en kandidat til egenskaben 'noreturn'" #~ msgid "`noreturn' function does return" #~ msgstr "funktion med egenskaben 'noreturn' returnerer" # RETMIG: dette m kunne gres bedre #~ msgid "control reaches end of non-void function" #~ msgstr "kontrol nr til slutningen af ikke-void funktion" #~ msgid "Attempt to delete prologue/epilogue insn:" #~ msgstr "forsg p at slette indledende/afsluttende instruktion:" #~ msgid "comparison is always %d due to width of bit-field" #~ msgstr "sammenligning er altid %d p grund af den begrnsede rkkevidde af bitfeltet" #~ msgid "comparison is always %d" #~ msgstr "sammenligning er altid %d" # RETMIG: det giver ikke mening #~ msgid "`or' of unmatched not-equal tests is always 1" #~ msgstr "'or' af uafbalancerede sammenligninger med forskellig fra er altid 1" #~ msgid "`and' of mutually exclusive equal-tests is always 0" #~ msgstr "'and' af udtryk der hver for sig udelukker hinanden, er altid 0" #~ msgid "size of variable `%s' is too large" #~ msgstr "strrelsen af variablen '%s' er for stor" #~ msgid "impossible constraint in `asm'" #~ msgstr "umulig begrnsing i 'asm'" #~ msgid "`%s' might be used uninitialized in this function" #~ msgstr "'%s' bliver mske brugt uden at have en startvrdi i denne funktion" #~ msgid "variable `%s' might be clobbered by `longjmp' or `vfork'" #~ msgstr "variablen '%s' bliver mske overskrevet af 'longjmp' eller 'vfork'" #~ msgid "argument `%s' might be clobbered by `longjmp' or `vfork'" #~ msgstr "parameteren '%s' bliver mske overskrevet af 'longjmp' eller 'vfork'" #~ msgid "function returns an aggregate" #~ msgstr "funktion returnerer en vrdi af en sammensat type" #~ msgid "unused parameter `%s'" #~ msgstr "ubenyttet parameter '%s'" #~ msgid "ambiguous abbreviation %s" #~ msgstr "tvetydig forkortelse %s" #~ msgid "incomplete `%s' option" #~ msgstr "ufuldstndigt tilvalg '%s'" #~ msgid "missing argument to `%s' option" #~ msgstr "der mangler en parameter til tilvalget '%s'" #~ msgid "extraneous argument to `%s' option" #~ msgstr "der er en parameter for meget til tilvalget '%s'" #~ msgid "Using built-in specs.\n" #~ msgstr "Benytter indbyggede specifikationer.\n" #~ msgid "" #~ "Setting spec %s to '%s'\n" #~ "\n" #~ msgstr "" #~ "Stter specifikation %s til '%s'\n" #~ "\n" #~ msgid "Reading specs from %s\n" #~ msgstr "Lser specifikationer fra %s\n" #~ msgid "specs %%include syntax malformed after %ld characters" #~ msgstr "%%include-syntaks i specifikationer misdannet efter %ld tegn" #~ msgid "could not find specs file %s\n" #~ msgstr "kunne ikke finde specifikationsfilen %s\n" #~ msgid "specs %%rename syntax malformed after %ld characters" #~ msgstr "%%rename-syntaks i specifikationer misdannet efter %ld tegn" #~ msgid "specs %s spec was not found to be renamed" #~ msgstr "%s-specifikation i specifikationer kunne ikke findes til omdbelse" #~ msgid "%s: attempt to rename spec '%s' to already defined spec '%s'" #~ msgstr "%s: forsg p at omdbe specifikation '%s' til allerede defineret specifikation '%s'" #~ msgid "rename spec %s to %s\n" #~ msgstr "omdb specifikation %s til %s\n" #~ msgid "" #~ "spec is '%s'\n" #~ "\n" #~ msgstr "" #~ "specifikation er '%s'\n" #~ "\n" #~ msgid "specs unknown %% command after %ld characters" #~ msgstr "ukendt %%-kommando i specifikationer efter %ld tegn" #~ msgid "specs file malformed after %ld characters" #~ msgstr "specifikationsfil misdannet efter %ld tegn" #~ msgid "spec file has no spec for linking" #~ msgstr "specifikationsfil har ingen specifikation til sammenkdning" #~ msgid "-pipe not supported" #~ msgstr "-pipe understttes ikke" #~ msgid "" #~ "\n" #~ "Go ahead? (y or n) " #~ msgstr "" #~ "\n" #~ "Fortst, ja (y) eller nej (n)?" #~ msgid "" #~ "Internal error: %s (program %s)\n" #~ "Please submit a full bug report.\n" #~ "See %s for instructions." #~ msgstr "" #~ "Intern fejl: %s (programmet %s)\n" #~ "Indsend venligst en komplet fejlrapport.\n" #~ "Se %s for instruktioner." #~ msgid "# %s %.2f %.2f\n" #~ msgstr "# %s %.2f %.2f\n" #~ msgid "Usage: %s [options] file...\n" #~ msgstr "Brug: %s [tilvalg] fil...\n" #~ msgid "Options:\n" #~ msgstr "Tilvalg:\n" #~ msgid " -pass-exit-codes Exit with highest error code from a phase\n" #~ msgstr " -pass-exit-codes Afslut med den hjeste fejlkode fra en fase\n" #~ msgid " --help Display this information\n" #~ msgstr " --help Vis disse oplysninger\n" #~ msgid " --target-help Display target specific command line options\n" #~ msgstr " --target-help Vis mlspecifikke kommandolinjetilvalg\n" #~ msgid " (Use '-v --help' to display command line options of sub-processes)\n" #~ msgstr " (benyt '-v --help' for at vise kommandolinjetilvalg for underprocesser)\n" #~ msgid " -dumpspecs Display all of the built in spec strings\n" #~ msgstr " -dumpspecs Vis alle de indbyggede specifikationsstrenge\n" #~ msgid " -dumpversion Display the version of the compiler\n" #~ msgstr " -dumpversion Vis versionsnummeret af overstteren\n" #~ msgid " -dumpmachine Display the compiler's target processor\n" #~ msgstr " -dumpmachine Vis overstterens mlprocessor\n" #~ msgid " -print-search-dirs Display the directories in the compiler's search path\n" #~ msgstr " -print-search-dirs Vis katalogerne i overstterens sgesti\n" #~ msgid " -print-libgcc-file-name Display the name of the compiler's companion library\n" #~ msgstr " -print-libgcc-file-name Vis navnet p overstterens tilhrende bibliotek\n" #~ msgid " -print-file-name= Display the full path to library \n" #~ msgstr " -print-file-name= Vis den komplette sti til biblioteket \n" #~ msgid " -print-prog-name= Display the full path to compiler component \n" #~ msgstr " -print-prog-name= Vis den komplette sti til overstterkomponenten \n" #~ msgid " -print-multi-directory Display the root directory for versions of libgcc\n" #~ msgstr " -print-multi-directory Vis rodkataloget for versioner af libgcc\n" #~ msgid "" #~ " -print-multi-lib Display the mapping between command line options and\n" #~ " multiple library search directories\n" #~ msgstr "" #~ " -print-multi-lib Vis afbildningen mellem kommandolinjetilvalg og\n" #~ " flere bibliotekssgekataloger\n" #~ msgid " -print-multi-os-directory Display the relative path to OS libraries\n" #~ msgstr " -print-multi-os-directory Vis den relative sti for OS-biblioteker\n" #~ msgid " -Wa, Pass comma-separated on to the assembler\n" #~ msgstr " -Wa, Videregiv komma-adskilte til maskinkodeoverstteren\n" #~ msgid " -Wp, Pass comma-separated on to the preprocessor\n" #~ msgstr " -Wp, Videregiv komma-adskilte til prprocessoren\n" #~ msgid " -Wl, Pass comma-separated on to the linker\n" #~ msgstr " -Wl, Videregiv komma-adskilte til sammenkderen\n" #~ msgid " -Xlinker Pass on to the linker\n" #~ msgstr " -Xlinker Videregiv til sammenkderen\n" #~ msgid " -save-temps Do not delete intermediate files\n" #~ msgstr " -save-temps Slet ikke midlertidige filer\n" #~ msgid " -pipe Use pipes rather than intermediate files\n" #~ msgstr " -pipe Brug datakanaler i stedet for midlertidige filer\n" #~ msgid " -time Time the execution of each subprocess\n" #~ msgstr " -time Tag tid p udfrslen af hver underproces\n" #~ msgid " -specs= Override built-in specs with the contents of \n" #~ msgstr " -specs= Overskriv indbyggede specifikationer med indholdet af \n" #~ msgid " -std= Assume that the input sources are for \n" #~ msgstr " -std= Antag at inddatakildekoden er skrevet til \n" #~ msgid " -B Add to the compiler's search paths\n" #~ msgstr " -B Tilfj katalog til overstterens sgestier\n" #~ msgid " -b Run gcc for target , if installed\n" #~ msgstr " -b Kr GCC til mlet , hvis installeret\n" #~ msgid " -V Run gcc version number , if installed\n" #~ msgstr " -V Kr GCC med versionsnummeret , hvis installeret\n" #~ msgid " -v Display the programs invoked by the compiler\n" #~ msgstr " -v Vis de programmer der startes af overstteren\n" #~ msgid " -### Like -v but options quoted and commands not executed\n" #~ msgstr "" #~ " -### Som '-v', men tilvalg anbringes i anfrselstegn\n" #~ " og kommandoerne udfres ikke\n" #~ msgid " -E Preprocess only; do not compile, assemble or link\n" #~ msgstr " -E Forbehandl kun; overst og sammenkd ikke\n" #~ msgid " -S Compile only; do not assemble or link\n" #~ msgstr " -S Overst kun; maskinekodeoverst og sammenkd ikke\n" #~ msgid " -c Compile and assemble, but do not link\n" #~ msgstr " -c Overst, ogs til maskinkode, men sammenkd ikke\n" #~ msgid " -o Place the output into \n" #~ msgstr " -o Anbring uddataene i \n" #~ msgid "" #~ " -x Specify the language of the following input files\n" #~ " Permissible languages include: c c++ assembler none\n" #~ " 'none' means revert to the default behavior of\n" #~ " guessing the language based on the file's extension\n" #~ msgstr "" #~ " -x Angiv sproget for de flgende inddatafiler.\n" #~ " Tilladte sprog inkluderer: c c++ assembler none\n" #~ " 'none' betyder at standardopfrslen med at gtte\n" #~ " sproget p filendelsen udfres\n" #~ msgid "" #~ "\n" #~ "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n" #~ " passed on to the various sub-processes invoked by %s. In order to pass\n" #~ " other options on to these processes the -W options must be used.\n" #~ msgstr "" #~ "\n" #~ "Tilvalg der begynder med -g, -f, -m, -O, -W eller --param bliver automatisk\n" #~ " givet videre til de forskellige underprocesser som %s starter. For at\n" #~ " videregive andre indstillinger til disse processer kan tilvalg p formen\n" #~ " '-W' bruges.\n" #~ msgid "`-%c' option must have argument" #~ msgstr "tilvalget '-%c' skal have en parameter" #~ msgid "couldn't run `%s': %s" #~ msgstr "kunne ikke kre '%s': %s" #~ msgid "%s (GCC) %s\n" #~ msgstr "%s (GCC) %s\n" #~ msgid "Copyright (C) 2003 Free Software Foundation, Inc.\n" #~ msgstr "Copyright 2003 Free Software Foundation, Inc.\n" #~ msgid "" #~ "This is free software; see the source for copying conditions. There is NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" #~ "\n" #~ msgstr "" #~ "Dette er et frit program; se kildekoden for kopieringsbetingelser. Der er\n" #~ "INGEN garanti; ikke engang for SALGBARHED eller BRUGBARHED TIL NOGET FORML.\n" #~ msgid "argument to `-Xlinker' is missing" #~ msgstr "der mangler en parameter til '-Xlinker'" #~ msgid "argument to `-l' is missing" #~ msgstr "der mangler en parameter til '-l'" #~ msgid "argument to `-specs' is missing" #~ msgstr "der mangler en parameter til '-specs'" #~ msgid "argument to `-specs=' is missing" #~ msgstr "der mangler en parameter til '-specs='" #~ msgid "`-%c' must come at the start of the command line" #~ msgstr "'-%c' skal vre i begyndelsen af kommandolinjen" #~ msgid "argument to `-B' is missing" #~ msgstr "der mangler en parameter til '-B'" #~ msgid "cannot specify -o with -c or -S and multiple compilations" #~ msgstr "kan ikke angive -o med -c eller -S og flere oversttelser" #~ msgid "warning: -pipe ignored because -save-temps specified" #~ msgstr "advarsel: -pipe ignoreret fordi -save-temps er angivet" #~ msgid "warning: -pipe ignored because -time specified" #~ msgstr "advarsel: -pipe ignoreret fordi -time er angivet" #~ msgid "argument to `-x' is missing" #~ msgstr "der mangler en parameter til '-x'" #~ msgid "argument to `-%s' is missing" #~ msgstr "der mangler en parameter til '-%s'" #~ msgid "warning: `-x %s' after last input file has no effect" #~ msgstr "advarsel: '-x %s' efter den sidste inddatafil har ingen effekt" #~ msgid "invalid specification! Bug in cc" #~ msgstr "ugyldig specifikation! Fejl i cc." #~ msgid "%s\n" #~ msgstr "%s\n" #~ msgid "spec failure: '%%*' has not been initialized by pattern match" #~ msgstr "specifikationsfejl: '%%*' er ikke blevet klargjort af mnstersgning" #~ msgid "warning: use of obsolete %%[ operator in specs" #~ msgstr "advarsel: forldet '%%['-operator benyttet i specifikationer" #~ msgid "Processing spec %c%s%c, which is '%s'\n" #~ msgstr "Behandler specifikation %c%s%c, som er '%s'\n" #~ msgid "spec failure: unrecognized spec option '%c'" #~ msgstr "specifikationsfejl: ukendt specifikationstilvalg '%c'" #~ msgid "unknown spec function `%s'" #~ msgstr "ukendt specifikationsfunktion '%s'" #~ msgid "error in args to spec function `%s'" #~ msgstr "fejl i parametre til specifikationsfunktion '%s'" #~ msgid "malformed spec function name" #~ msgstr "forkert udformet specifikationsfunktionsnavn" #~ msgid "no arguments for spec function" #~ msgstr "ingen parametre til specifikationsfunktion" #~ msgid "malformed spec function arguments" #~ msgstr "forkert udformede specifikationsfunktionsparametre" #~ msgid "mismatched braces in specs" #~ msgstr "uafbalancerede krllede paranteser i specifikationer" #~ msgid "unrecognized option `-%s'" #~ msgstr "ukendt tilvalg '-%s'" #~ msgid "install: %s%s\n" #~ msgstr "installering: %s%s\n" #~ msgid "programs: %s\n" #~ msgstr "programmer: %s\n" #~ msgid "libraries: %s\n" #~ msgstr "biblioteker: %s\n" #~ msgid "" #~ "\n" #~ "For bug reporting instructions, please see:\n" #~ msgstr "" #~ "\n" #~ "For fejlrapporteringsinstruktioner, se:\n" #~ msgid "Configured with: %s\n" #~ msgstr "Konfigureret med: %s\n" #~ msgid "Thread model: %s\n" #~ msgstr "Trdmodel: %s\n" #~ msgid "gcc version %s\n" #~ msgstr "GCC version %s\n" #~ msgid "gcc driver version %s executing gcc version %s\n" #~ msgstr "GCC-styringsprogram version %s krer GCCc version %s\n" #~ msgid "no input files" #~ msgstr "ingen inddatafiler" #~ msgid "%s: %s compiler not installed on this system" #~ msgstr "%s: %s-overstter ikke installeret p dette system" #~ msgid "%s: linker input file unused because linking not done" #~ msgstr "%s: sammenkderinddatafil ikke benyttet eftersom sammenkdning ikke blev foretaget" #~ msgid "language %s not recognized" #~ msgstr "sproget %s ikke genkendt" #~ msgid "internal gcc abort" #~ msgstr "intern GCC-afbrydelse" #~ msgid "Internal gcov abort.\n" #~ msgstr "Intern gcov afbrydelse.\n" #~ msgid "" #~ "Usage: gcov [OPTION]... SOURCEFILE\n" #~ "\n" #~ msgstr "" #~ "Brug: gcov [TILVALG]... KILDEFIL\n" #~ "\n" #~ msgid "" #~ "Print code coverage information.\n" #~ "\n" #~ msgstr "" #~ "Udskriv kodedkningsoplysninger.\n" #~ "\n" #~ msgid " -h, --help Print this help, then exit\n" #~ msgstr " -h, --help Udskriv denne hjlp og afslut\n" #~ msgid " -v, --version Print version number, then exit\n" #~ msgstr " -v, --version Udskriv versionsnummeret og afslut\n" #~ msgid " -b, --branch-probabilities Include branch probabilities in output\n" #~ msgstr " -b, --branch-probabilities Medtag forgreningssandsynligheder i uddata\n" #~ msgid "" #~ " -c, --branch-counts Given counts of branches taken\n" #~ " rather than percentages\n" #~ msgstr " -c, --branch-counts Antal forgreninger taget i stedet for procenter\n" #~ msgid " -n, --no-output Do not create an output file\n" #~ msgstr " -n, --no-output Opret ikke en uddatafil\n" #~ msgid "" #~ " -l, --long-file-names Use long output file names for included\n" #~ " source files\n" #~ msgstr " -l, --long-file-names Brug lange filnavne til inkluderede kildefiler\n" #~ msgid " -f, --function-summaries Output summaries for each function\n" #~ msgstr " -f, --function-summaries Udskriv sammendrag for hver funktion\n" #~ msgid " -o, --object-directory DIR|FILE Search for object files in DIR or called FILE\n" #~ msgstr " -o, --object-directory KAT|FIL Sg efter objektfiler i KAT eller kaldt FIL\n" #~ msgid " -p, --preserve-paths Preserve all pathname components\n" #~ msgstr " -p, --preserve-paths Bevar alle stinavnskomponenter\n" #~ msgid "" #~ "\n" #~ "For bug reporting instructions, please see:\n" #~ "%s.\n" #~ msgstr "" #~ "\n" #~ "For fejlrapporteringsinstruktioner, se:\n" #~ "%s.\n" #~ msgid "gcov (GCC) %s\n" #~ msgstr "gcov (GCC) %s\n" #~ msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n" #~ msgstr "Copyright 2001 Free Software Foundation, Inc.\n" #~ msgid "Could not open basic block file %s.\n" #~ msgstr "Kunne ikke bne basisblokfilen %s.\n" #~ msgid "Could not open program flow graph file %s.\n" #~ msgstr "Kunne ikke bne programstrmsgraffilen %s.\n" #~ msgid "Could not open data file %s.\n" #~ msgstr "Kunne ikke bne datafilen %s.\n" #~ msgid "Assuming that all execution counts are zero.\n" #~ msgstr "Antager at alle krselstllere er nul.\n" #~ msgid "No executable code associated with file %s.\n" #~ msgstr "Ingen krbar kode associeret med filen %s.\n" #~ msgid "%s of %d lines executed in %s %s\n" #~ msgstr "%s af %d linjer udfrt i %s %s\n" #~ msgid "No executable lines in %s %s\n" #~ msgstr "Ingen krbare linjer i %s %s\n" #~ msgid "%s of %d branches executed in %s %s\n" #~ msgstr "%s af %d forgreninger udfrt i %s %s\n" #~ msgid "%s of %d branches taken at least once in %s %s\n" #~ msgstr "%s af %d forgreninger valgt mindst n gang i %s %s\n" #~ msgid "No branches in %s %s\n" #~ msgstr "Ingen forgreninger i %s %s\n" #~ msgid "%s of %d calls executed in %s %s\n" #~ msgstr "%s af %d kald udfrt i %s %s\n" #~ msgid "No calls in %s %s\n" #~ msgstr "Ingen kald i %s %s\n" #~ msgid "didn't use all bb entries of graph, function %s\n" #~ msgstr "brugte ikke alle grafens basisblokelementer, funktion %s\n" #~ msgid "block_num = %ld, num_blocks = %d\n" #~ msgstr "block_num = %ld, num_blocks = %d\n" #~ msgid "ERROR: unexpected line number %ld\n" #~ msgstr "Fejl: uventet linjenummer %ld\n" #~ msgid "ERROR: too many basic blocks in function %s\n" #~ msgstr "Fejl: for mange basisblokke i funktionen %s\n" #~ msgid "ERROR: out of range line number in function %s\n" #~ msgstr "Fejl: linjenummer uden for det gyldige interval i funktionen %s\n" #~ msgid "Could not open source file %s.\n" #~ msgstr "Kunne ikke bne kildefilen %s.\n" #~ msgid "Warning: source file %s is newer than %s\n" #~ msgstr "Advarsel: kildefil %s er nyere end %s\n" #~ msgid "Unexpected EOF while reading source file %s.\n" #~ msgstr "Stdt p slutningen af kildefilen %s tidligere end forventet.\n" #~ msgid "call %2d never executed\n" #~ msgstr "kald %2d aldrig udfrt\n" #~ msgid "call %2d returns %s\n" #~ msgstr "kald %2d returnerer %s\n" #~ msgid "branch %2d never executed\n" #~ msgstr "forgrening %2d aldrig udfrt\n" #~ msgid "branch %2d taken %s\n" #~ msgstr "forgrening %2d valgt %s\n" #~ msgid "Creating %s.\n" #~ msgstr "Opretter %s.\n" #~ msgid "Error writing output file %s.\n" #~ msgstr "Fejl ved skrivning af uddatafilen %s.\n" #~ msgid "Could not open output file %s.\n" #~ msgstr "Kunne ikke bne uddatafilen %s.\n" #~ msgid "GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" #~ msgstr "GCSE deaktiveret: %d > 1000 basisblokke og %d >= 20 kanter/basisblok" #~ msgid "GCSE disabled: %d basic blocks and %d registers" #~ msgstr "GCSE deaktiveret: %d basisblokke og %d registre" #~ msgid "Name `%s' contains quotes" #~ msgstr "Navnet '%s' indeholder citationstegn" #~ msgid "invalid string `%s' in define_cpu_unit" #~ msgstr "ugyldig streng '%s' i define_cpu_unit" #~ msgid "invalid string `%s' in define_query_cpu_unit" #~ msgstr "ugyldig streng '%s' i define_query_cpu_unit" #~ msgid "invalid string `%s' in define_bypass" #~ msgstr "ugyldig streng '%s' i define_bypass" #~ msgid "invalid first string `%s' in exclusion_set" #~ msgstr "ugyldig frste streng '%s' i exclusion_set" #~ msgid "invalid second string `%s' in exclusion_set" #~ msgstr "ugyldig anden streng '%s' i exclusion_set" #~ msgid "invalid first string `%s' in presence_set" #~ msgstr "ugyldig frste streng '%s' i presence_set" #~ msgid "invalid second string `%s' in presence_set" #~ msgstr "ugyldig anden streng '%s' i presence_set" #~ msgid "invalid first string `%s' in absence_set" #~ msgstr "ugyldig frste streng '%s' i absence_set" #~ msgid "invalid second string `%s' in absence_set" #~ msgstr "ugyldig anden streng '%s' i absence_set" #~ msgid "invalid string `%s' in define_automaton" #~ msgstr "ugyldig streng '%s' i define_automaton" #~ msgid "invalid option `%s' in automata_option" #~ msgstr "ugyldigt tilvalg '%s' i automata_option" #~ msgid "garbage after ) in reservation `%s'" #~ msgstr "ragelse efter ) i reservering '%s'" #~ msgid "invalid `%s' in reservation `%s'" #~ msgstr "ugyldig '%s' i reservering '%s'" #~ msgid "repetition `%s' <= 1 in reservation `%s'" #~ msgstr "gentagelse '%s' <= 1 i reservering '%s'" #~ msgid "unit `%s' in exclusion is not declared" #~ msgstr "enhed '%s' i ekskludering er ikke erklret" #~ msgid "`%s' in exclusion is not unit" #~ msgstr "'%s' i ekskludering er ikke enhed" #~ msgid "unit `%s' excludes itself" #~ msgstr "enheden '%s' ekskluderer sig selv" #~ msgid "units `%s' and `%s' in exclusion set belong to different automata" #~ msgstr "enhederne '%s' og '%s' i ekskluderingsmngde tilhrer forskellige automater" #~ msgid "unit `%s' excludes and requires presence of `%s'" #~ msgstr "enheden '%s' ekskluderer og krver tilstedevrelse af '%s'" #~ msgid "unit `%s' requires absence and presence of `%s'" #~ msgstr "enheden '%s' krver tilstedevrelse og fravr af '%s'" #~ msgid "repeated declaration of automaton `%s'" #~ msgstr "gentaget erklring af automaten '%s'" #~ msgid "define_insn_reservation `%s' has negative latency time" #~ msgstr "define_insn_reservation '%s' har negativ ventetid" #~ msgid "`%s' is already used as insn reservation name" #~ msgstr "`%s' bliver allerede benyttet som instruktionsreserveringsnavn" #~ msgid "define_bypass `%s - %s' has negative latency time" #~ msgstr "define_bypass '%s - %s' har negativ ventetid" #~ msgid "automaton `%s' is not declared" #~ msgstr "automaten '%s' er ikke erklret" #~ msgid "define_unit `%s' without automaton when one defined" #~ msgstr "define_unit '%s' uden automat nr en er defineret" #~ msgid "`%s' is declared as cpu unit" #~ msgstr "'%s' er erklret som CPU-enhed" #~ msgid "`%s' is declared as cpu reservation" #~ msgstr "'%s' er erklret som CPU-reservering" #~ msgid "repeated declaration of unit `%s'" #~ msgstr "gentaget erklring af enheden '%s'" #~ msgid "repeated declaration of reservation `%s'" #~ msgstr "gentaget erklring af reserveringen '%s'" #~ msgid "there is no insn reservation `%s'" #~ msgstr "der er ingen instruktionsreservering '%s'" #~ msgid "the same bypass `%s - %s' is already defined" #~ msgstr "den samme videreledning '%s - %s' er allerede defineret" #~ msgid "bypass `%s - %s' is already defined" #~ msgstr "videreledning '%s - %s' er allerede defineret" #~ msgid "automaton `%s' is not used" #~ msgstr "automat '%s' bliver ikke benyttet" #~ msgid "undeclared unit or reservation `%s'" #~ msgstr "ikke-erklret enhed eller reservering '%s'" #~ msgid "unit `%s' is not used" #~ msgstr "enhed '%s' bliver ikke benyttet" #~ msgid "reservation `%s' is not used" #~ msgstr "reservering '%s' bliver ikke benyttet" #~ msgid "cycle in definition of reservation `%s'" #~ msgstr "cyklus i definering af reservering '%s'" #~ msgid "Units `%s' and `%s' should be in the same automaton" #~ msgstr "Enhederne '%s' og '%s' skal vre i den samme automat" #~ msgid "-split has no argument." #~ msgstr "-split uden parametre" #~ msgid "option `-split' has not been implemented yet\n" #~ msgstr "tilvalget '-split' understttes ikke endnu\n" #~ msgid "Automaton `%s': Insn `%s' will never be issued" #~ msgstr "Automat '%s': instruktion '%s' vil aldrig blive udfrt" #~ msgid "Insn `%s' will never be issued" #~ msgstr "Instruktion '%s' vil aldrig blive udfrt" #~ msgid "Errors in DFA description" #~ msgstr "Fejl i DFA-beskrivelse" #~ msgid "Error in writing DFA description file %s" #~ msgstr "Fejl ved skrivning af DFA-beskrivelsesfil %s" #~ msgid "No input file name." #~ msgstr "Intet inddatafilnavn." #~ msgid "can't open %s" #~ msgstr "kan ikke bne %s" #~ msgid "fix_sched_param: unknown param: %s" #~ msgstr "fix_sched_param: ukendt parameter: %s" #~ msgid "function cannot be inline" #~ msgstr "funktion kan ikke indbygges" #~ msgid "varargs function cannot be inline" #~ msgstr "funktion med variabel parameterliste kan ikke indbygges" #~ msgid "function using alloca cannot be inline" #~ msgstr "funktion der bruger alloca, kan ikke indbygges" #~ msgid "function using setjmp cannot be inline" #~ msgstr "funktion der bruger setjmp, kan ikke indbygges" #~ msgid "function uses __builtin_eh_return" #~ msgstr "funktionen bruger __builtin_eh_return" #~ msgid "function with nested functions cannot be inline" #~ msgstr "funktion med indlejrede funktioner kan ikke indbygges" #~ msgid "function with label addresses used in initializers cannot inline" #~ msgstr "funktion hvor etiketadresser benyttes i klargringer, kan ikke indbygges" #~ msgid "function too large to be inline" #~ msgstr "funktionen er for stor til at blive indbygget" #~ msgid "no prototype, and parameter address used; cannot be inline" #~ msgstr "ingen prototype, og parameteradressen benyttes; kan ikke indbygges" #~ msgid "inline functions not supported for this return value type" #~ msgstr "integrerede funktioner understttes ikke for denne returvrditype" #~ msgid "function with varying-size return value cannot be inline" #~ msgstr "funktioner med returvrdier af varierende strrelse kan ikke indbygges" #~ msgid "function with varying-size parameter cannot be inline" #~ msgstr "funktioner med parametre af varierende strrelse kan ikke indbygges" #~ msgid "function with transparent unit parameter cannot be inline" #~ msgstr "funktioner med gennemsigtig union-parameter kan ikke indbygges" #~ msgid "function with computed jump cannot inline" #~ msgstr "funktioner med beregnede spring kan ikke indbygges" #~ msgid "function with nonlocal goto cannot be inline" #~ msgstr "funktioner med ikke-lokale goto'er kan ikke indbygges" #~ msgid "function with target specific attribute(s) cannot be inlined" #~ msgstr "funktioner med mlspecifikke egenskaber kan ikke indbygges" #~ msgid "invalid parameter `%s'" #~ msgstr "ugyldig parameter '%s'" #~ msgid "Profile does not match flowgraph of function %s (out of date?)" #~ msgstr "Profil passer ikke til flowgraph af funktionen %s (forldet?)" #~ msgid ".da file corrupted" #~ msgstr ".da-fil delagt" # 'prob' str for sandsynlighed #~ msgid "corrupted profile info: prob for %d-%d thought to be %d" #~ msgstr "delagte profilinfo: sandsynlighed for %d-%d menes at vre %d" #~ msgid "file %s not found, execution counts assumed to be zero" #~ msgstr "filen %s ikke fundet, antager at krselstllere er nul" #~ msgid "%s: internal abort\n" #~ msgstr "%s: intern afbrydelse\n" #~ msgid "%s: error writing file `%s': %s\n" #~ msgstr "%s: fejl ved skrivning til filen '%s': %s\n" #~ msgid "%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]'\n" #~ msgstr "%s: brug '%s [ -VqfnkN ] [ -i ] [ filenavn ... ]'\n" #~ msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]'\n" #~ msgstr "%s: brug '%s [ -VqfnkNlgC ] [ -B ] [ filnavn ... ]'\n" #~ msgid "%s: warning: no read access for file `%s'\n" #~ msgstr "%s: advarsel: ingen lseadgang til filen '%s'\n" #~ msgid "%s: warning: no write access for file `%s'\n" #~ msgstr "%s: advarsel: ingen skriveadgang til filen '%s'\n" #~ msgid "%s: warning: no write access for dir containing `%s'\n" #~ msgstr "%s: advarsel: ingen skriveadgang til kataloget der indeholder '%s'\n" #~ msgid "%s: invalid file name: %s\n" #~ msgstr "%s: ugyldigt filnavn: %s\n" #~ msgid "%s: %s: can't get status: %s\n" #~ msgstr "%s: %s: kan ikke finde ud af filens status: %s\n" #~ msgid "" #~ "\n" #~ "%s: fatal error: aux info file corrupted at line %d\n" #~ msgstr "" #~ "\n" #~ "%s: fatal fejl: hjlpeinformationsfilen er beskadiget ved linje %d\n" #~ msgid "%s:%d: declaration of function `%s' takes different forms\n" #~ msgstr "%s:%d: erklringen af funktionen '%s' antager forskellige former\n" #~ msgid "%s: compiling `%s'\n" #~ msgstr "%s: overstter '%s'\n" #~ msgid "%s: wait: %s\n" #~ msgstr "%s: vent: %s\n" #~ msgid "%s: subprocess got fatal signal %d\n" #~ msgstr "%s: underprocessen modtog fatalt signal %d\n" #~ msgid "%s: %s exited with status %d\n" #~ msgstr "%s: %s afsluttede med status %d\n" #~ msgid "%s: warning: missing SYSCALLS file `%s'\n" #~ msgstr "%s: advarsel: manglende SYSCALLS-fil '%s'\n" #~ msgid "%s: can't read aux info file `%s': %s\n" #~ msgstr "%s: kan ikke lse hjlpeinformationsfilen '%s': %s\n" #~ msgid "%s: can't get status of aux info file `%s': %s\n" #~ msgstr "%s: kan ikke f status for hjlpeinformationsfilen '%s': %s\n" #~ msgid "%s: can't open aux info file `%s' for reading: %s\n" #~ msgstr "%s: kan ikke bne hjlpeinformationsfilen '%s' til at lse fra: %s\n" #~ msgid "%s: error reading aux info file `%s': %s\n" #~ msgstr "%s: fejl ved lsning af hjlpeinformationsfilen '%s': %s\n" #~ msgid "%s: error closing aux info file `%s': %s\n" #~ msgstr "%s: fejl ved lukning af hjlpeinformationsfilen '%s': %s\n" #~ msgid "%s: can't delete aux info file `%s': %s\n" #~ msgstr "%s: kan ikke slette hjlpeinformationsfilen '%s': %s\n" #~ msgid "%s: can't delete file `%s': %s\n" #~ msgstr "%s: kan ikke slette filen '%s': %s\n" #~ msgid "%s: warning: can't rename file `%s' to `%s': %s\n" #~ msgstr "%s: advarsel: kan ikke omdbe filen '%s' til '%s': %s\n" #~ msgid "%s: conflicting extern definitions of '%s'\n" #~ msgstr "%s: modstridende eksterne definitioner af '%s'\n" #~ msgid "%s: declarations of '%s' will not be converted\n" #~ msgstr "%s: erklringer af '%s' vil ikke blive omdannet\n" #~ msgid "%s: conflict list for '%s' follows:\n" #~ msgstr "%s: modstridene for '%s' flger:\n" #~ msgid "%s: warning: using formals list from %s(%d) for function `%s'\n" #~ msgstr "%s: advarsel: bruger parameterlisten fra %s(%d) til funktionen '%s'\n" #~ msgid "%s: %d: `%s' used but missing from SYSCALLS\n" #~ msgstr "%s: %d: '%s' benyttet, men mangler i SYSCALLS\n" #~ msgid "%s: %d: warning: no extern definition for `%s'\n" #~ msgstr "%s: %d: advarsel: ingen ekstern definition af '%s'\n" #~ msgid "%s: warning: no static definition for `%s' in file `%s'\n" #~ msgstr "%s: advarsel: ingen statisk definition af '%s' i filen '%s'\n" #~ msgid "%s: multiple static defs of `%s' in file `%s'\n" #~ msgstr "%s: flere statiske definitioner af '%s' i filen '%s'\n" #~ msgid "%s: %d: warning: source too confusing\n" #~ msgstr "%s: %d: advarsel: koden er for forvirrende\n" #~ msgid "%s: %d: warning: varargs function declaration not converted\n" #~ msgstr "%s: %d: advarsel: funktionserklring med variabel parameterliste er ikke omdannet\n" #~ msgid "%s: declaration of function `%s' not converted\n" #~ msgstr "%s: erklringen af funktionen '%s' er ikke omdannet\n" #~ msgid "%s: warning: too many parameter lists in declaration of `%s'\n" #~ msgstr "%s: advarsel: for mange parameterlister i erklringen af '%s'\n" #~ msgid "" #~ "\n" #~ "%s: warning: too few parameter lists in declaration of `%s'\n" #~ msgstr "" #~ "\n" #~ "%s: advarsel: for f parameterlister i erklringen af '%s'\n" #~ msgid "%s: %d: warning: found `%s' but expected `%s'\n" #~ msgstr "%s: %d: advarsel: fandt '%s', men forventede '%s'\n" #~ msgid "%s: local declaration for function `%s' not inserted\n" #~ msgstr "%s: den lokale erklring af funktionen '%s' er ikke indsat\n" #~ msgid "" #~ "\n" #~ "%s: %d: warning: can't add declaration of `%s' into macro call\n" #~ msgstr "" #~ "\n" #~ "%s: %d: advarsel: kan ikke tilfje erklringen af '%s' i makrokald\n" #~ msgid "%s: global declarations for file `%s' not inserted\n" #~ msgstr "%s: globale erklringer for filen '%s' er ikke indsat\n" #~ msgid "%s: definition of function `%s' not converted\n" #~ msgstr "%s: definitionen af funktionen '%s' er ikke omdannet\n" #~ msgid "%s: %d: warning: definition of %s not converted\n" #~ msgstr "%s: %d: advarsel: definitionen af '%s' er ikke omdannet\n" #~ msgid "%s: found definition of `%s' at %s(%d)\n" #~ msgstr "%s: fandt definitionen af '%s' ved %s(%d)\n" #~ msgid "%s: %d: warning: `%s' excluded by preprocessing\n" #~ msgstr "%s: %d: advarsel: '%s' ekskluderet af forbehandlingen\n" #~ msgid "%s: function definition not converted\n" #~ msgstr "%s: funktionsdefinitionen er ikke omdannet\n" #~ msgid "%s: `%s' not converted\n" #~ msgstr "%s: '%s' ikke omdannet\n" #~ msgid "%s: would convert file `%s'\n" #~ msgstr "%s: ville omdanne filen '%s'\n" #~ msgid "%s: converting file `%s'\n" #~ msgstr "%s: omdanner filen '%s'\n" #~ msgid "%s: can't get status for file `%s': %s\n" #~ msgstr "%s: kan ikke f status for filen '%s': %s\n" #~ msgid "%s: can't open file `%s' for reading: %s\n" #~ msgstr "%s: kan ikke bne filen '%s' til at lse fra: %s\n" #~ msgid "" #~ "\n" #~ "%s: error reading input file `%s': %s\n" #~ msgstr "" #~ "\n" #~ "%s: fejl ved lsning af inddatafilen '%s': %s\n" #~ msgid "%s: can't create/open clean file `%s': %s\n" #~ msgstr "%s: kan ikke oprette/bne oprydningsfilen '%s': %s\n" #~ msgid "%s: warning: file `%s' already saved in `%s'\n" #~ msgstr "%s: advarsel: filen '%s' er allerede gemt i '%s'\n" #~ msgid "%s: can't link file `%s' to `%s': %s\n" #~ msgstr "%s: kan ikke kde filen '%s' sammen med '%s': %s\n" #~ msgid "%s: can't create/open output file `%s': %s\n" #~ msgstr "%s: kan ikke oprette/bne uddatafilen '%s': %s\n" #~ msgid "%s: can't change mode of file `%s': %s\n" #~ msgstr "%s: kan ikke ndre tilstanden af filen '%s': '%s'\n" #~ msgid "%s: cannot get working directory: %s\n" #~ msgstr "%s: kan ikke f fat i arbejdskataloget: %s\n" #~ msgid "%s: input file names must have .c suffixes: %s\n" #~ msgstr "%s: inddatafilnavn skal have '.c'-endelser: %s\n" #~ msgid "Didn't find a coloring.\n" #~ msgstr "Kunne ikke finde en farvning.\n" #~ msgid "output constraint %d must specify a single register" #~ msgstr "uddatabegrnsning %d skal angive et enkelt register" #~ msgid "output constraint %d cannot be specified together with \"%s\" clobber" #~ msgstr "uddatabegrnsning %d kan ikke angives samtidig med overskrivning af \"%s\"" #~ msgid "output regs must be grouped at top of stack" #~ msgstr "uddataregistre skal grupperes i toppen af stakken" #~ msgid "implicitly popped regs must be grouped at top of stack" #~ msgstr "implicit aflste registre skal grupperes i toppen af stakken" #~ msgid "output operand %d must use `&' constraint" #~ msgstr "uddataoperand %d skal bruge begrnsningen '&'" #~ msgid "can't use '%s' as a %s register" #~ msgstr "kan ikke bruge '%s' som et %s-register" #~ msgid "unknown register name: %s" #~ msgstr "ukendt registernavn: %s" #~ msgid "global register variable follows a function definition" #~ msgstr "en global registervariabel flger en funktionsdefinition" #~ msgid "register used for two global register variables" #~ msgstr "register brugt til to globale registervariabler" #~ msgid "call-clobbered register used for global register variable" #~ msgstr "kaldeoverskrevet register brugt til global registervariabel" #~ msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)" #~ msgstr "validate_value_data: [%u] Ugyldig next_regno til tom kde (%u)" #~ msgid "validate_value_data: Loop in regno chain (%u)" #~ msgstr "validate_value_data: Lkke i registertalskde (%u)" #~ msgid "validate_value_data: [%u] Bad oldest_regno (%u)" #~ msgstr "validate_value_data: [%u] Ugyldig oldest_regno (%u)" #~ msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)" #~ msgstr "validate_value_data: [%u] Ikke-tomt register i kde (%s %u %i)" #~ msgid "cannot reload integer constant operand in `asm'" #~ msgstr "kan ikke genindlse heltalskonstantoperand i 'asm'" #~ msgid "impossible register constraint in `asm'" #~ msgstr "umulig registerbegrnsing i 'asm'" #~ msgid "`&' constraint used with no register class" #~ msgstr "'&'-begrnsning brugt uden registerklasse" #~ msgid "unable to generate reloads for:" #~ msgstr "kunne ikke generere genindlsninger for:" #~ msgid "inconsistent operand constraints in an `asm'" #~ msgstr "inkonsistente operandbegrsninger i 'asm'" #~ msgid "frame size too large for reliable stack checking" #~ msgstr "rammestrrelse for stor til plidelig stakkontrol" #~ msgid "try reducing the number of local variables" #~ msgstr "forsg at reducere antallet af lokale variable" #~ msgid "can't find a register in class `%s' while reloading `asm'" #~ msgstr "kan ikke finde et register i klassen '%s' ved genindlsning af 'asm'" #~ msgid "unable to find a register to spill in class `%s'" #~ msgstr "kan ikke finde et register at bortdsle i klassen '%s'" #~ msgid "this is the insn:" #~ msgstr "dette er instruktionen:" #~ msgid "`asm' operand requires impossible reload" #~ msgstr "'asm'-operand krver umulig genindlsning" #~ msgid "could not find a spill register" #~ msgstr "kunne ikke finde et register at bortdsle" #~ msgid "`asm' operand constraint incompatible with operand size" #~ msgstr "'asm'-operandbegrnsning ikke forenelig med operandstrrelse" #~ msgid "VOIDmode on an output" #~ msgstr "VOID-tilstand ved uddata" #~ msgid "output operand is constant in `asm'" #~ msgstr "uddataoperand er konstant i 'asm'" #~ msgid "unrecognizable insn:" #~ msgstr "ukendt instruktion:" #~ msgid "insn does not satisfy its constraints:" #~ msgstr "instruktion tilfredsstiller ikke sine begrnsninger:" #~ msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d" #~ msgstr "RTL-kontrol: tilgang til udtrykstr %d fra '%s' med sidste udtrykstr %d i %s, ved %s:%d" #~ msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" #~ msgstr "RTL-kontrol: forventede udtrykstr %d type '%c', har '%c' (registeroverfrselsudtryk %s) i %s, ved %s:%d" #~ msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d" #~ msgstr "RTL-kontrol: forventede udtrykstr %d type '%c' eller '%c', har '%c' (registeroverfrselsudtryk %s) i %s, ved %s:%d" #~ msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d" #~ msgstr "RTL-kontrol: forventede koden '%s', har '%s' i %s, ved %s:%d" #~ msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d" #~ msgstr "RTL-kontrol: forventede koden '%s' eller '%s', har '%s' i %s, ved %s:%d" #~ msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" #~ msgstr "RTL-kontrol: tilgang til udtrykstr %d af vektor hvis sidste udtrykstr er %d i %s, ved %s:%d" #~ msgid "RTL flag check: %s used with unexpected rtx code `%s' in %s, at %s:%d" #~ msgstr "RTL-flagskontrol: %s benyttet med uventet rtx-kode '%s' i %s, ved %s:%d" #~ msgid "jump to `%s' invalidly jumps into binding contour" #~ msgstr "spring til '%s' rammer p ugyldig vis ind i bindingskontur" #~ msgid "label `%s' used before containing binding contour" #~ msgstr "etiket '%s' brugt fr indholdende bindingskontur" #~ msgid "output operand constraint lacks `='" #~ msgstr "uddataoperandbegrnsning mangler '='" #~ msgid "output constraint `%c' for operand %d is not at the beginning" #~ msgstr "uddatabegrnsning '%c' for operanden %d er ikke ved begyndelsen" #~ msgid "operand constraint contains incorrectly positioned '+' or '='" #~ msgstr "operandbegrnsning indeholder forkert placeret '+' eller '='" #~ msgid "`%%' constraint used with last operand" #~ msgstr "'%%'-begrnsning brugt med sidste operand" #~ msgid "matching constraint not valid in output operand" #~ msgstr "begrnsningen er ikke gyldig for uddataoperanden" #~ msgid "input operand constraint contains `%c'" #~ msgstr "inddataoperandbegrnsningen indeholder '%c'" #~ msgid "matching constraint references invalid operand number" #~ msgstr "begrnsning refererer til et ugyldigt operandtal" #~ msgid "invalid punctuation `%c' in constraint" #~ msgstr "ugyldig punktuering '%c' i begrnsning" #~ msgid "asm-specifier for variable `%s' conflicts with asm clobber list" #~ msgstr "asm-anvisning for variablen '%s' strider mod asm-overskrivelsesliste" #~ msgid "unknown register name `%s' in `asm'" #~ msgstr "ukendt registernavn '%s' i 'asm'" #~ msgid "more than %d operands in `asm'" #~ msgstr "mere end %d operander i 'asm'" #~ msgid "output number %d not directly addressable" #~ msgstr "uddata nr. %d kan ikke adresseres direkte" #~ msgid "asm operand %d probably doesn't match constraints" #~ msgstr "'asm'-operand %d passer sandsynligvis ikke til begrnsninger" #~ msgid "asm clobber conflict with output operand" #~ msgstr "asm-overskrivelse er i modstrid med uddataoperander" #~ msgid "asm clobber conflict with input operand" #~ msgstr "asm-overskrivelse er i modstrid med inddataoperander" #~ msgid "too many alternatives in `asm'" #~ msgstr "for mange alternativer i 'asm'" #~ msgid "operand constraints for `asm' differ in number of alternatives" #~ msgstr "operandbegrnsninger til 'asm' har forskellige antal alternativer" #~ msgid "duplicate asm operand name '%s'" #~ msgstr "'asm'-operandnavnet '%s' optrder mere end n gang" #~ msgid "missing close brace for named operand" #~ msgstr "manglende afsluttende krllet parantes til navngiven operand" #~ msgid "undefined named operand '%s'" #~ msgstr "ikkedefineret navngiven operand '%s'" #~ msgid "unused variable `%s'" #~ msgstr "ubrugt variabel '%s'" #~ msgid "enumeration value `%s' not handled in switch" #~ msgstr "enum-vrdien '%s' hndteres ikke i switch-stning" #~ msgid "case value `%ld' not in enumerated type" #~ msgstr "case-vrdien '%ld' eksisterer ikke i enum-type" #~ msgid "case value `%ld' not in enumerated type `%s'" #~ msgstr "case-vrdien '%ld' eksisterer ikke i enum-typen '%s'" #~ msgid "switch missing default case" #~ msgstr "switch-konstruktion mangler default" #~ msgid "type size can't be explicitly evaluated" #~ msgstr "det er ikke muligt eksplicit at finde typens strrelse" #~ msgid "variable-size type declared outside of any function" #~ msgstr "en type med en variabel strrelse er erklret uden for en funktion" #~ msgid "size of `%s' is %d bytes" #~ msgstr "strrelsen af '%s' er %d byte" #~ msgid "size of `%s' is larger than %d bytes" #~ msgstr "strrelsen af '%s' er strre end %d byte" #~ msgid "packed attribute causes inefficient alignment for `%s'" #~ msgstr "packed-egenskab forrsager ineffektiv justering af '%s'" #~ msgid "packed attribute is unnecessary for `%s'" #~ msgstr "packed-egenskab er undvendig for '%s'" #~ msgid "padding struct to align `%s'" #~ msgstr "udfylder struct for at justere '%s'" #~ msgid "padding struct size to alignment boundary" #~ msgstr "udfylder struct-strrelse til justeringskant" #~ msgid "packed attribute causes inefficient alignment" #~ msgstr "packed-egenskab forrsager ineffektiv justering" #~ msgid "packed attribute is unnecessary" #~ msgstr "packed-egenskab er undvendig" #~ msgid "cannot timevar_pop '%s' when top of timevars stack is '%s'" #~ msgstr "kan ikke udfre timevar_pop '%s' nr toppen af timevars-stakken er '%s'" #~ msgid "" #~ "\n" #~ "Execution times (seconds)\n" #~ msgstr "" #~ "\n" #~ "Udfrselstid (sekunder)\n" #~ msgid " TOTAL :" #~ msgstr " TOTAL :" #~ msgid "time in %s: %ld.%06ld (%ld%%)\n" #~ msgstr "tid i %s: %ld.%06ld (%ld%%)\n" #~ msgid "collect: reading %s\n" #~ msgstr "collect: lser %s\n" #~ msgid "collect: recompiling %s\n" #~ msgstr "collect: genoverstter '%s'\n" # RETMIG: rigtigt? #~ msgid "collect: tweaking %s in %s\n" #~ msgstr "collect: presser %s i %s\n" #~ msgid "collect: relinking\n" #~ msgstr "collect: kder sammen igen\n" #~ msgid "ld returned %d exit status" #~ msgstr "ld returnerede afslutningskoden %d" #~ msgid "Generate debugging info in default format" #~ msgstr "Generr fejlfindingsinfo i standardformat" #~ msgid "Generate debugging info in default extended format" #~ msgstr "Generr fejlfindingsinfo i udvidet standardformat" #~ msgid "Generate STABS format debug info" #~ msgstr "Generr fejlfindingsinfo i STABS-format" #~ msgid "Generate extended STABS format debug info" #~ msgstr "Generr fejlfindingsinfo i udvidet STABS-format" #~ msgid "Generate DWARF-1 format debug info" #~ msgstr "Generr fejlfindingsinfo i DWARF-1-format" #~ msgid "Generate extended DWARF-1 format debug info" #~ msgstr "Generr fejlfindingsinfo i udvidet DWARF-1-format" #~ msgid "Generate DWARF-2 debug info" #~ msgstr "Generr fejlfindingsinfo i DWARF-2-format" #~ msgid "Generate XCOFF format debug info" #~ msgstr "Generr fejlfindingsinfo i XCOFF-format" #~ msgid "Generate extended XCOFF format debug info" #~ msgstr "Generr fejlfindingsinfo i udvidet XCOFF-format" #~ msgid "Generate COFF format debug info" #~ msgstr "Generr fejlfindingsinfo i COFF-format" #~ msgid "Generate VMS format debug info" #~ msgstr "Generr fejlfindingsinfo i VMS-format" #~ msgid "Perform DWARF2 duplicate elimination" #~ msgstr "Udfr DWARF2-eliminering af dubletter" #~ msgid "Do not store floats in registers" #~ msgstr "Lagr ikke kommatal i registre" #~ msgid "Consider all mem refs through pointers as volatile" #~ msgstr "Betragt alle hukommelsesferencer gennem henvisninger som volatile" #~ msgid "Consider all mem refs to global data to be volatile" #~ msgstr "Betragt alle hukommelsesferencer til globale data som volatile" #~ msgid "Consider all mem refs to static data to be volatile" #~ msgstr "Betragt alle hukommelsesferencer til statiske data som volatile" #~ msgid "Defer popping functions args from stack until later" #~ msgstr "Vent med fjernelse af funktionsparametre fra stakken til senere" #~ msgid "When possible do not generate stack frames" #~ msgstr "Generr ikke stakrammer nr det kan undgs" #~ msgid "Optimize sibling and tail recursive calls" #~ msgstr "Optimr sskende- og halerekursive kald" #~ msgid "Perform superblock formation via tail duplication" #~ msgstr "Udfr superbloksformering vha. haleduplikering" # RETMIG: hvad er CSE? #~ msgid "When running CSE, follow jumps to their targets" #~ msgstr "Ved krsel af CSE flg spring til deres ml" #~ msgid "When running CSE, follow conditional jumps" #~ msgstr "Ved krsel af CSE flg betingede spring" #~ msgid "Perform a number of minor, expensive optimizations" #~ msgstr "Udfr et antal mindre, dyre optimeringer" #~ msgid "Perform jump threading optimizations" #~ msgstr "Udfr springtrdningsoptimeringer" #~ msgid "Perform strength reduction optimizations" #~ msgstr "Udfr styrkereduceringsoptimeringer" #~ msgid "Perform loop unrolling when iteration count is known" #~ msgstr "Udfr lkkeudrulning nr iterationsantallet er kendt" #~ msgid "Perform loop unrolling for all loops" #~ msgstr "Udfr lkkeudrulning for alle lkker" #~ msgid "Generate prefetch instructions, if available, for arrays in loops" #~ msgstr "Generr prhentningsinstruktioner, hvis tilgngelige, for tabeller i lkker" #~ msgid "Force all loop invariant computations out of loops" #~ msgstr "Tving alle lkkeinvariansberegninger ud af lkker" #~ msgid "Strength reduce all loop general induction variables" #~ msgstr "Styrkereducr alle generelle lkkeinduktionsvariabler" #~ msgid "Store strings in writable data section" #~ msgstr "Gem strenge i en skrivbar datasektion" #~ msgid "Enable machine specific peephole optimizations" #~ msgstr "Aktivr maskinspecifikke kighulsoptimeringer" #~ msgid "Copy memory operands into registers before using" #~ msgstr "Kopir hukommelsesoperander ind i registre fr brug" #~ msgid "Copy memory address constants into regs before using" #~ msgstr "Kopir hukommelsesadressekonstanter ind i registre fr brug" #~ msgid "Allow function addresses to be held in registers" #~ msgstr "Tillad funktionsadresser at blive opbevaret i registre" #~ msgid "Integrate simple functions into their callers" #~ msgstr "Integrr simple funktioner i deres kaldere" #~ msgid "Generate code for funcs even if they are fully inlined" #~ msgstr "Generr kode for funktioner selv hvis de indlejres helt" #~ msgid "Pay attention to the 'inline' keyword" #~ msgstr "Lg mrke til 'inline'-ngleordet" #~ msgid "Emit static const variables even if they are not used" #~ msgstr "Konstrur statiske, konstante variabler selv hvis de ikke bruges" #~ msgid "Check for syntax errors, then stop" #~ msgstr "Kontrollr syntaks og stop derefter" #~ msgid "Mark data as shared rather than private" #~ msgstr "Markr data som delt snarere end privat" #~ msgid "Enable saving registers around function calls" #~ msgstr "Aktivr gemning af registrer omkring funktionskald" #~ msgid "Return 'short' aggregates in memory, not registers" #~ msgstr "Returnr sm sammensatte vrdier i hukommelsen, ikke i registre" #~ msgid "Return 'short' aggregates in registers" #~ msgstr "Returnr sm sammensatte vrdier i registre" #~ msgid "Attempt to fill delay slots of branch instructions" #~ msgstr "Forsg at udfylde ventepladser med forgreningsinstruktioner" #~ msgid "Perform the global common subexpression elimination" #~ msgstr "Udfr global eliminering af flles underudtryk" #~ msgid "Perform enhanced load motion during global subexpression elimination" #~ msgstr "Udfr forbedret indlsningsbevgelse under eliminering af flles underudtryk" #~ msgid "Perform store motion after global subexpression elimination" #~ msgstr "Udfr lagringsbevgelse efter eliminering af flles underudtryk" #~ msgid "Perform the loop optimizations" #~ msgstr "Udfr lkkeoptimeringerne" #~ msgid "Perform cross-jumping optimization" #~ msgstr "Udfr krydsspringsoptimering" #~ msgid "Perform conversion of conditional jumps to branchless equivalents" #~ msgstr "Udfr konvertering af betingede spring til forgreningslse kvivalenter" #~ msgid "Perform conversion of conditional jumps to conditional execution" #~ msgstr "Udfr konvertering af betingede spring til betinget udfrsel" #~ msgid "Run CSE pass after loop optimizations" #~ msgstr "Kr CSE-fase efter lkkeoptimeringer" #~ msgid "Run the loop optimizer twice" #~ msgstr "Kr lkkeoptimeringen to gange" #~ msgid "Delete useless null pointer checks" #~ msgstr "Fjern ubrugelige nul-henvisningstjek" #~ msgid "Reschedule instructions before register allocation" #~ msgstr "Omplanlg instruktioner fr registerallokering" #~ msgid "Reschedule instructions after register allocation" #~ msgstr "Omplanlg instruktioner efter registerallokering" #~ msgid "Enable scheduling across basic blocks" #~ msgstr "Aktivr planlgning over basisblokke" #~ msgid "Allow speculative motion of non-loads" #~ msgstr "Tillad spekulativ bevgelse af ikke-indlsninger" #~ msgid "Allow speculative motion of some loads" #~ msgstr "Tillad spekulativ bevgelse af nogle indlsninger" #~ msgid "Allow speculative motion of more loads" #~ msgstr "Tillad spekulativ bevgelse af flere indlsninger" # RETMIG: rigtig? #~ msgid "Replace add,compare,branch with branch on count reg" #~ msgstr "Erstat tilfj,sammenlign,forgrening med forgrening p tlleregister" #~ msgid "Generate position independent code, if possible" #~ msgstr "Generr placeringsuafhngig kode, om muligt" #~ msgid "Enable exception handling" #~ msgstr "Aktivr undtagelseshndtering" #~ msgid "Just generate unwind tables for exception handling" #~ msgstr "Generr blot afvindingstabeller for undtagelseshndtering" #~ msgid "Generate unwind tables exact at each instruction boundary" #~ msgstr "Generr afvindingstabeller eksakt for hver instruktionsgrnse" #~ msgid "Support synchronous non-call exceptions" #~ msgstr "Understt synkrone ikke-kaldende undtagelser" #~ msgid "Insert arc based program profiling code" #~ msgstr "Indst buebaseret programprofileringskode" #~ msgid "Create data files needed by gcov" #~ msgstr "Opret datafiler som gcov har brug for" #~ msgid "Use profiling information for branch probabilities" #~ msgstr "Benyt profileringsoplysninger til forgreningssandsynligheder" #~ msgid "Enable basic program profiling code" #~ msgstr "Aktivr basal programprofileringskode" #~ msgid "Reorder basic blocks to improve code placement" #~ msgstr "Omordn basisblokke for at forbedre kodeplacering" #~ msgid "Reorder functions to improve code placement" #~ msgstr "Omordn funktioner for at forbedre kodeplacering" #~ msgid "Do the register renaming optimization pass" #~ msgstr "Foretag registeromdbningsoptimering" #~ msgid "Do the register copy-propagation optimization pass" #~ msgstr "Foretag registerkopipropageringsoptimering" #~ msgid "Do not put uninitialized globals in the common section" #~ msgstr "Anbring ikke uklargjorte globale variabler i den flles sektion" #~ msgid "Do not generate .size directives" #~ msgstr "Generr ikke .size-direktiver" #~ msgid "place each function into its own section" #~ msgstr "placr hver funktion i dens egen sektion" #~ msgid "place data items into their own section" #~ msgstr "placr dataelementer i deres egen sektion" #~ msgid "Add extra commentary to assembler output" #~ msgstr "Tilfj ekstra kommentarer til menneskeligt lsbar maskinkodeuddata" #~ msgid "Output GNU ld formatted global initializers" #~ msgstr "Udskriv GNU ld-formaterede globale startvrdier" #~ msgid "Enables a register move optimization" #~ msgstr "Aktivr en registerflytningsoptimering" #~ msgid "Do the full regmove optimization pass" #~ msgstr "Foretag en komplet registerflytningsoptimering" #~ msgid "Pack structure members together without holes" #~ msgstr "Pak strukturmedlemmer sammen uden mellemrum" #~ msgid "Insert stack checking code into the program" #~ msgstr "Indst stakkontrolleringskode i programmet" #~ msgid "Specify that arguments may alias each other & globals" #~ msgstr "Angiv at parametre kan vre aliaser for hinanden og for globale variable" #~ msgid "Assume arguments may alias globals but not each other" #~ msgstr "Antag at parametre kan vre aliaser for globale variable, men ikke for hinanden" #~ msgid "Assume arguments do not alias each other or globals" #~ msgstr "Antag at parametre ikke er aliaser for hinanden eller for globale variable" #~ msgid "Assume strict aliasing rules apply" #~ msgstr "Antag at strenge aliasregler skal anvendes" #~ msgid "Align the start of loops" #~ msgstr "Justr begyndelsen af lkker" #~ msgid "Align labels which are only reached by jumping" #~ msgstr "Justr etiketter som kun ns ved spring" #~ msgid "Align all labels" #~ msgstr "Justr alle etiketter" #~ msgid "Align the start of functions" #~ msgstr "Justr begyndelsen af funktioner" #~ msgid "Attempt to merge identical constants across compilation units" #~ msgstr "Forsg at forene identiske konstanter over forskellige oversttelsesenheder" #~ msgid "Attempt to merge identical constants and constant variables" #~ msgstr "Forsg at forene identiske konstanter og konstante variabler" #~ msgid "Suppress output of instruction numbers and line number notes in debugging dumps" #~ msgstr "Undtryk udskrift af instruktionstal og linjenummernoter i fejlfindingsdump" #~ msgid "Instrument function entry/exit with profiling calls" #~ msgstr "Instrumentr funktionsindgange/-afslutninger med profileringskald" #~ msgid "Put zero initialized data in the bss section" #~ msgstr "Anbring nul-klargjorte data i bss-sektionen" #~ msgid "Enable SSA optimizations" #~ msgstr "Aktivr SSA-optimeringer" #~ msgid "Enable SSA conditional constant propagation" #~ msgstr "Aktivr betinget konstant SSA-propagering" #~ msgid "Enable aggressive SSA dead code elimination" #~ msgstr "Aktivr aggressiv SSA-eliminering af ubrugt kode" #~ msgid "External symbols have a leading underscore" #~ msgstr "Eksterne symboler har indledende understreg" #~ msgid "Process #ident directives" #~ msgstr "Behandl #ident-direktiver" #~ msgid "Enables an rtl peephole pass run before sched2" #~ msgstr "Aktivr en RTL-kikhulsfase fr sched2" #~ msgid "Assume no NaNs or +-Infs are generated" #~ msgstr "Antag at ingen NaN eller +-Inf bliver genereret" #~ msgid "Enables guessing of branch probabilities" #~ msgstr "Aktivr gt af forgreningssandsynligheder" #~ msgid "Set errno after built-in math functions" #~ msgstr "St errno efter indbyggede matematikfunktioner" #~ msgid "Floating-point operations can trap" #~ msgstr "Kommatalsoperationer kan fange" #~ msgid "Allow math optimizations that may violate IEEE or ANSI standards" #~ msgstr "Tillad matematikoptimeringer der kan overtrde IEEE- eller ANSI-standarderne" #~ msgid "Disable optimizations observable by IEEE signaling NaNs" #~ msgstr "Deaktivr optimeringer som kan opdages ved IEEE-signalerende NaN'er" #~ msgid "Generate code to check bounds before indexing arrays" #~ msgstr "Generr kode til at kontrollere grnserne fr tabeller indekseres" #~ msgid "Convert floating point constant to single precision constant" #~ msgstr "Konvertr kommatalskonstanter til enkeltprcisionskonstanter" #~ msgid "Report time taken by each compiler pass at end of run" #~ msgstr "Rapportr den tid det tager for hver oversttelsesfase ved afslutningen af krslen" #~ msgid "Report on permanent memory allocation at end of run" #~ msgstr "Rapportr om permanente hukommelsesallokering ved afslutningen af krslen" #~ msgid "Trap for signed overflow in addition / subtraction / multiplication" #~ msgstr "Opst flde for overlb med fortegn i addition/subtraktion/multiplikation" #~ msgid "Use graph coloring register allocation." #~ msgstr "Allokr registre vha. graffarvning" #~ msgid "Compile just for ISO C90" #~ msgstr "Overst kun til ISO C90" #~ msgid "Determine language standard" #~ msgstr "Bestem sprogstandarden" #~ msgid "Make bit-fields by unsigned by default" #~ msgstr "Lad bitfelter vre uden fortegn som standard" #~ msgid "Make 'char' be signed by default" #~ msgstr "Lad 'char' vre med fortegn som standard" #~ msgid "Make 'char' be unsigned by default" #~ msgstr "Lad 'char' vre uden fortegn som standard" #~ msgid "Do not recognize the 'asm' keyword" #~ msgstr "Genkend ikke det reserverede ord 'asm'" #~ msgid "Do not recognize any built in functions" #~ msgstr "Genkend ikke nogen indbyggede funktioner" #~ msgid "Assume normal C execution environment" #~ msgstr "Antag normalt C-krselsmilj" #~ msgid "Assume that standard libraries & main might not exist" #~ msgstr "Antag at standardbibliotekerne og main mske ikke eksisterer" #~ msgid "Allow different types as args of ? operator" #~ msgstr "Tillad forskellige typer som parametre til ?-operatoren" #~ msgid "Allow the use of $ inside identifiers" #~ msgstr "Tillad brug af $ inden i kaldenavne" #~ msgid "Use the same size for double as for float" #~ msgstr "Benyt den samme strrelse til double som til float" #~ msgid "Use the smallest fitting integer to hold enums" #~ msgstr "Benyt den mindst mulige strrelse heltal til enum-vrdier" #~ msgid "Override the underlying type for wchar_t to `unsigned short'" #~ msgstr "Overskriv den underliggende type af wchar_t til 'unsigned short'" #~ msgid "Enable most warning messages" #~ msgstr "Aktivr de fleste advarselsbeskeder" #~ msgid "Warn about casting functions to incompatible types" #~ msgstr "Advar om omtvingning af funktioner til ikke-kompatible typer" #~ msgid "Warn about functions which might be candidates for format attributes" #~ msgstr "Advar om funktioner som kan vre kandidater til formateringsegenskaber" #~ msgid "Warn about casts which discard qualifiers" #~ msgstr "Advar om typeomtvingninger som forkaster modifikationer" #~ msgid "Warn about subscripts whose type is 'char'" #~ msgstr "Advar som tabelindeksering hvis type er 'char'" #~ msgid "Warn if nested comments are detected" #~ msgstr "Advar hvis indlejrede kommentarer mdes" #~ msgid "Warn about possibly confusing type conversions" #~ msgstr "Advar om typekonverteringer der kan vre forvirrende" #~ msgid "Do not warn about compile-time integer division by zero" #~ msgstr "Advar ikke om heltalsdivision p oversttelsestidspunktet med nul" #~ msgid "Warn about testing equality of floating point numbers" #~ msgstr "Advar om lighedssammenligninger mellem kommatal" #~ msgid "Warn about printf/scanf/strftime/strfmon format anomalies" #~ msgstr "Advar om printf/scanf/strftime/strfmon-formateringsanormaliteter" #~ msgid "Don't warn about too many arguments to format functions" #~ msgstr "Advar ikke om for mange parametre til formateringsfunktioner" #~ msgid "Warn about non-string-literal format strings" #~ msgstr "Advar om formateringsstrenge der ikke er strengkonstanter" #~ msgid "Warn about possible security problems with format functions" #~ msgstr "Advar om mulige sikkerhedsproblemer i forbindelse med formateringsfunktioner" #~ msgid "Don't warn about strftime formats yielding 2 digit years" #~ msgstr "Advar ikke om strftime-formateringer med 2-cifres r" #~ msgid "Warn about implicit function declarations" #~ msgstr "Advar om underforstede funktionserklringer" #~ msgid "Warn when a declaration does not specify a type" #~ msgstr "Advar nr en erklring ikke angiver en type" #~ msgid "Warn about the use of the #import directive" #~ msgstr "Advar om brug af #import-direktivet" #~ msgid "Do not warn about using 'long long' when -pedantic" #~ msgstr "Advar ikke om brug af 'long long' nr -pedantic benyttes" #~ msgid "Warn about suspicious declarations of main" #~ msgstr "Advar om mistnkelige erklringer af main" #~ msgid "Warn about possibly missing braces around initializers" #~ msgstr "Advar om mulige manglende krllede paranteser omkring startvrdier" #~ msgid "Warn about global funcs without previous declarations" #~ msgstr "Advar om globale funktioner uden tidligere erklringer" #~ msgid "Warn about global funcs without prototypes" #~ msgstr "Advar om globale funktioner uden prototyper" #~ msgid "Warn about use of multicharacter literals" #~ msgstr "Advar om brug af multitegnskonstanter" #~ msgid "Warn about externs not at file scope level" #~ msgstr "Advar om extern-erklringer som ikke er ved filvirkefeltsniveauet" #~ msgid "Warn about possible missing parentheses" #~ msgstr "Advar om mulige manglende paranteser" #~ msgid "Warn about function pointer arithmetic" #~ msgstr "Advar om beregninger p funktionshenvisninger" #~ msgid "Warn about multiple declarations of the same object" #~ msgstr "Advar om flere erklring af det samme objekt" #~ msgid "Warn whenever a function's return-type defaults to int" #~ msgstr "Advar nr en funktions returtype antages at vre int" #~ msgid "Warn about possible violations of sequence point rules" #~ msgstr "Advar om mulige brud p sekvenspunktreglerne" #~ msgid "Warn about signed/unsigned comparisons" #~ msgstr "Advar om sammenligninger mellem typer med og uden fortegn" #~ msgid "Warn about non-prototyped function decls" #~ msgstr "Advar om funktionserklringer uden prototype" #~ msgid "Warn about constructs whose meanings change in ISO C" #~ msgstr "Advar om konstruktioner hvis betydning er ndret i ISO C" #~ msgid "Warn when trigraphs are encountered" #~ msgstr "Advar nr trigrafer mdes" #~ msgid "Warn about unrecognized pragmas" #~ msgstr "Advar om ukendte pragmaer" #~ msgid "Mark strings as 'const char *'" #~ msgstr "Markr strenge som 'const char *'" #~ msgid "Warn when a function is unused" #~ msgstr "Advar nr en funktion ikke benyttes" #~ msgid "Warn when a label is unused" #~ msgstr "Advar nr en etiket ikke benyttes" #~ msgid "Warn when a function parameter is unused" #~ msgstr "Advar nr en funktionsparameter ikke benyttes" #~ msgid "Warn when a variable is unused" #~ msgstr "Advar nr en variabel ikke benyttes" #~ msgid "Warn when an expression value is unused" #~ msgstr "Advar nr vrdien af et udtryk ikke benyttes" #~ msgid "Do not suppress warnings from system headers" #~ msgstr "Undertryk ikke advarsler fra systeminkluderingsfiler" #~ msgid "Treat all warnings as errors" #~ msgstr "Behandl alle advarsler som fejl" #~ msgid "Warn when one local variable shadows another" #~ msgstr "Advar nr en lokal variabel skygger for en anden" #~ msgid "Warn about enumerated switches, with no default, missing a case" #~ msgstr "Advar om switch-stninger over enum-typer som mangler et tilflde og ikke har default" #~ msgid "Warn about enumerated switches missing a default case" #~ msgstr "Advar om switch-stninger over enum-typer som mangler default" #~ msgid "Warn about all enumerated switches missing a specific case" #~ msgstr "Advar om alle switch-stninger over enum-typer som mangler et bestemt tilflde" #~ msgid "Warn about returning structures, unions or arrays" #~ msgstr "Advar om returnering af struct, union og tabeller" #~ msgid "Warn about pointer casts which increase alignment" #~ msgstr "Advar om typeomtvingning af henvisninger som forger justeringen" #~ msgid "Warn about code that will never be executed" #~ msgstr "Advar om kode som aldrig bliver udfrt" #~ msgid "Warn about uninitialized automatic variables" #~ msgstr "Advar om ikke-klargjorte automatiske variabler" #~ msgid "Warn when an inlined function cannot be inlined" #~ msgstr "Advar nr en inline funktion ikke kan indbygges" #~ msgid "Warn when the packed attribute has no effect on struct layout" #~ msgstr "Advar nr packed-egenskaben ikke har nogen effekt p struct-layoutet" #~ msgid "Warn when padding is required to align struct members" #~ msgstr "Advar nr udfyldning er pkrvet for at justere struct-medlemmer" #~ msgid "Warn when an optimization pass is disabled" #~ msgstr "Advar nr en optimeringsfase deaktiveres" #~ msgid "Warn about uses of __attribute__((deprecated)) declarations" #~ msgstr "Advar om brug af __attribute__((deprecated))-erklringer" #~ msgid "Warn about functions which might be candidates for attribute noreturn" #~ msgstr "Advar om funktioner som kan vre kandidater til egenskaben noreturn" #~ msgid "Warn about code which might break the strict aliasing rules" #~ msgstr "Advar om kode som kan bryde strenge aliasregler" #~ msgid "invalid option `%s'" #~ msgstr "ugyldigt tilvalg '%s'" #~ msgid "`%s' declared `static' but never defined" #~ msgstr "'%s' erklret 'static', men aldrig defineret" #~ msgid "`%s' defined but not used" #~ msgstr "'%s' defineret, men aldrig brugt" #~ msgid "invalid register name `%s' for register variable" #~ msgstr "ugyldigt registernavn '%s' for registervariabel" #~ msgid " -ffixed- Mark as being unavailable to the compiler\n" #~ msgstr " -ffixed- Markr som vrende utilgngeligt for overstteren\n" #~ msgid " -fcall-used- Mark as being corrupted by function calls\n" #~ msgstr " -fcall-used- Markr som vrende benyttet af funktionskald\n" #~ msgid " -fcall-saved- Mark as being preserved across functions\n" #~ msgstr " -fcall-saved- Markr som vrende bevaret over funktioner\n" #~ msgid " -finline-limit= Limits the size of inlined functions to \n" #~ msgstr " -finline-limit= Begrns strrelsen af inlie funktion til \n" #~ msgid " -fmessage-length= Limits diagnostics messages lengths to characters per line. 0 suppresses line-wrapping\n" #~ msgstr " -fmessage-length= Begrns lngden af diagnosticeringmeddelelser til lngden tegn/linje. 0 undertrykker linjeombrydning\n" #~ msgid " -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping\n" #~ msgstr " -fdiagnostics-show-location=[once | every-line] Indikerer hvor ofte kildeplaceringsoplysninger skal udsendes som prfiks til begyndelsen af meddelelserne ved linjeombrydning\n" #~ msgid " -ftls-model=[global-dynamic | local-dynamic | initial-exec | local-exec] Indicates the default thread-local storage code generation model\n" #~ msgstr " -ftls-model=[global-dynamic | local-dynamic | initial-exec | local-exec] Indikerer den forvalgte trd-lokale lagringsmodel for kodegenerering\n" #~ msgid " -O[number] Set optimization level to [number]\n" #~ msgstr " -O[tal] St optimeringsniveauet til [tal]\n" #~ msgid " -Os Optimize for space rather than speed\n" #~ msgstr " -Os Optimr mht. plads i stedet for hastighed\n" #~ msgid " -pedantic Issue warnings needed by strict compliance to ISO C\n" #~ msgstr " -pedantic Udsend advarsler som er ndvendige for streng overholdelse af ISO C\n" #~ msgid " -pedantic-errors Like -pedantic except that errors are produced\n" #~ msgstr " -pedantic-errors Som -pedantic bortset fra at problemer bliver til fejl\n" #~ msgid " -w Suppress warnings\n" #~ msgstr " -w Undertryk advarsler\n" #~ msgid " -W Enable extra warnings\n" #~ msgstr " -W Aktivr ekstra advarsler\n" #~ msgid " -Wunused Enable unused warnings\n" #~ msgstr " -Wunused Aktivr ubrugthedsadvarsler\n" #~ msgid " -Wlarger-than- Warn if an object is larger than bytes\n" #~ msgstr " -Wlarger-than- Advar hvis et objekt er strre end byte\n" #~ msgid " -p Enable function profiling\n" #~ msgstr " -p Aktivr funktionsprofilering\n" #~ msgid " -o Place output into \n" #~ msgstr " -o Anbring uddata i \n" #~ msgid "" #~ " -G Put global and static data smaller than \n" #~ " bytes into a special section (on some targets)\n" #~ msgstr " -G Anbring globale og statiske data mindre end byte i en specialsektion (p nogle mlarkitekturer)\n" #~ msgid " -aux-info Emit declaration info into \n" #~ msgstr " -aux-info Udskriv erklringsoplysninger til \n" #~ msgid " -quiet Do not display functions compiled or elapsed time\n" #~ msgstr " -quiet Vis ikke funktioner der oversttes eller forlbet tid\n" #~ msgid " -version Display the compiler's version\n" #~ msgstr " -version Udskriv overstterens version\n" #~ msgid " -d[letters] Enable dumps from specific passes of the compiler\n" #~ msgstr " -d[bogstaver] Aktivr dump fra specifikke faser i overstteren\n" #~ msgid " -dumpbase Base name to be used for dumps from specific passes\n" #~ msgstr " -dumpbase Basisnavn til brug for dump fra specifikke faser\n" #~ msgid " -fsched-verbose= Set the verbosity level of the scheduler\n" #~ msgstr " -fsched-verbose= Angiv hvor meget planlggeren skal fortlle\n" #~ msgid " --help Display this information\n" #~ msgstr " --help Vis disse oplysninger\n" #~ msgid "" #~ "\n" #~ "Language specific options:\n" #~ msgstr "" #~ "\n" #~ "Sprogspecifikke tilvalg:\n" #~ msgid " %-23.23s [undocumented]\n" #~ msgstr " %-23.23s [ikke dokumenteret]\n" # %s er et sprog #~ msgid "" #~ "\n" #~ "There are undocumented %s specific options as well.\n" #~ msgstr "" #~ "\n" #~ "Der er ogs ikke-dokumenterede specifikke tilvalg til %s.\n" #~ msgid "" #~ "\n" #~ " Options for %s:\n" #~ msgstr "" #~ "\n" #~ " Tilvalg til %s:\n" #~ msgid "" #~ "\n" #~ "Target specific options:\n" #~ msgstr "" #~ "\n" #~ "Mlspecifikke tilvalg:\n" #~ msgid " -m%-23.23s [undocumented]\n" #~ msgstr " -m%-23.23s [ikke dokumenteret]\n" #~ msgid "" #~ "\n" #~ "There are undocumented target specific options as well.\n" #~ msgstr "" #~ "\n" #~ "Der er ogs ikke-dokumenterede mlspecifikke tilvalg.\n" #~ msgid " They exist, but they are not documented.\n" #~ msgstr " De eksisterer, men er ikke dokumenteret.\n" #~ msgid "unrecognized gcc debugging option: %c" #~ msgstr "ukendt GCC-fejlfindingstilvalg: %c" #~ msgid "`%s': unknown tls-model option" #~ msgstr "'%s': ukendt tls-model-tilvalg" #~ msgid "unrecognized register name `%s'" #~ msgstr "ukendt registernavn '%s'" #~ msgid "unrecognized option `%s'" #~ msgstr "ukendt tilvalg '%s'" #~ msgid "-Wid-clash-LEN is no longer supported" #~ msgstr "-Wid-clash-LEN understttes ikke lngere" #~ msgid "use -gdwarf -g%d for DWARF v1, level %d" #~ msgstr "benyt - gdwarf -g%d til DWARF v1, niveau %d" #~ msgid "use -gdwarf-2 for DWARF v2" #~ msgstr "benyt -gdwarf-2 til DWARF v2" #~ msgid "ignoring option `%s' due to invalid debug level specification" #~ msgstr "ignorerer tilvalget '%s' p grund af ugyldig specifikation af fejlfindingsniveau" #~ msgid "`%s': unknown or unsupported -g option" #~ msgstr "'%s': ukendt eller ikke-understttet '-g'-tilvalg" #~ msgid "`%s' ignored, conflicts with `-g%s'" #~ msgstr "'%s' ignoreret, er i konflikt med '-g%s'" #~ msgid "-param option missing argument" #~ msgstr "'-param'-tilvalg mangler parameter" #~ msgid "invalid --param option: %s" #~ msgstr "ugyldigt '--param'-tilvalg: %s" #~ msgid "invalid parameter value `%s'" #~ msgstr "ugyldig parametervrdi '%s'" #~ msgid "" #~ "%s%s%s version %s (%s)\n" #~ "%s\tcompiled by GNU C version %s.\n" #~ "%s%s%s version %s (%s) compiled by CC.\n" #~ msgstr "" #~ "%s%s%s version %s (%s)\n" #~ "%s\toversat af GNU C version %s.\n" #~ "%s%s%s version %s (%s) oversat af CC.\n" #~ msgid "%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n" #~ msgstr "%s%sGGC-heuristikker: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n" #~ msgid "options passed: " #~ msgstr "tilvalg overbragt: " #~ msgid "options enabled: " #~ msgstr "tilvalg slet til: " #~ msgid "can't open %s for writing" #~ msgstr "kan ikke bne '%s' til skrivning" #~ msgid "ignoring command line option '%s'" #~ msgstr "ignorerer kommandolinjetilvalget '%s'" #~ msgid "(it is valid for %s but not the selected language)" #~ msgstr "(det er gyldigt for %s, men ikke for det valgte sprog)" #~ msgid "-Wuninitialized is not supported without -O" #~ msgstr "-Wuninitialized understttes ikke uden -O" #~ msgid "instruction scheduling not supported on this target machine" #~ msgstr "instruktionsplanlgning understttes ikke p mlarkitekturen" #~ msgid "this target machine does not have delayed branches" #~ msgstr "mlarkitekturen har ikke forsinkede forgreninger" #~ msgid "-f%sleading-underscore not supported on this target machine" #~ msgstr "-f%sleading-underscore understttes ikke p mlarkitekturen" #~ msgid "-ffunction-sections not supported for this target" #~ msgstr "-ffunction-sections understttes ikke p mlarkitekturen" #~ msgid "-fdata-sections not supported for this target" #~ msgstr "-fdata-sections understttes ikke p mlarkitekturen" #~ msgid "-ffunction-sections disabled; it makes profiling impossible" #~ msgstr "-ffunction-sections deaktiveret; dette gr profilering umulig" #~ msgid "-fprefetch-loop-arrays not supported for this target" #~ msgstr "-fprefetch-loop-arrays understttes ikke p mlarkitekturen" #~ msgid "-fprefetch-loop-arrays not supported for this target (try -march switches)" #~ msgstr "-fprefetch-loop-arrays understttes ikke p mlarkitekturen (prv '-march'-tilvalgene)" #~ msgid "-fprefetch-loop-arrays is not supported with -Os" #~ msgstr "-fprefetch-loop-arrays understttes ikke med -Os" #~ msgid "-ffunction-sections may affect debugging on some targets" #~ msgstr "-ffunction-sections kan have indflydelse p fejlfinding p nogle mlarkitekturer" #~ msgid "error writing to %s" #~ msgstr "fejl ved skrivning til %s" #~ msgid "error closing %s" #~ msgstr "fejl ved lukning af %s" #~ msgid "could not open dump file `%s'" #~ msgstr "kunne ikke bne dumpningsfilen '%s'" #~ msgid "ignoring unknown option `%.*s' in `-f%s'" #~ msgstr "ignorerer ukendt tilvalg '%.*s' i '-f%s'" #~ msgid "arrays of functions are not meaningful" #~ msgstr "en tabel af funktioner giver ikke mening" #~ msgid "function return type cannot be function" #~ msgstr "en funktions returtype kan ikke vre en funktion" #~ msgid "invalid initializer for bit string" #~ msgstr "ugyldig startvrdi til bitstreng" #~ msgid "tree check: expected %s, have %s in %s, at %s:%d" #~ msgstr "tr-kontrol: forventede %s, har %s i %s, ved %s:%d" #~ msgid "tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d" #~ msgstr "tr-kontrol: forventede klasse '%c', har '%c' (%s) i %s, ved %s:%d" #~ msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d" #~ msgstr "RTL-kontrol: tilgik udtrykstr %d af tree_vec med %d udtrykstrer i %s, ved %s:%d" #~ msgid "%s causes a section type conflict" #~ msgstr "%s forrsager en sektionstypekonflikt" #~ msgid "register name not specified for `%s'" #~ msgstr "registernavn ikke angivet for '%s'" #~ msgid "invalid register name for `%s'" #~ msgstr "ugyldigt registernavn for '%s'" #~ msgid "data type of `%s' isn't suitable for a register" #~ msgstr "datatypen for '%s' passer ikke med et register" #~ msgid "register specified for `%s' isn't suitable for data type" #~ msgstr "registeret som er angivet for '%s' passer ikke med datatypen" #~ msgid "global register variable has initial value" #~ msgstr "global registervariabel har en startvrdi" #~ msgid "volatile register variables don't work as you might wish" #~ msgstr "registervariable erklret volatile virker ikke som du mske nsker" #~ msgid "register name given for non-register variable `%s'" #~ msgstr "registernavn givet for ikke-registervariablen '%s'" #~ msgid "alignment of `%s' is greater than maximum object file alignment. Using %d" #~ msgstr "justering af '%s' er strre end den maksimale objektfilsjustering - bruger %d" #~ msgid "thread-local COMMON data not implemented" #~ msgstr "trd-lokal COMMON-data er ikke implementeret" #~ msgid "requested alignment for %s is greater than implemented alignment of %d" #~ msgstr "forespurgt justering for %s er strre end den implementerede justering af %d" #~ msgid "initializer for integer value is too complicated" #~ msgstr "startvrdien for heltallet er for kompliceret" #~ msgid "initializer for floating value is not a floating constant" #~ msgstr "startvrdien for kommatal er ikke en kommatalskonstant" #~ msgid "unknown set constructor type" #~ msgstr "ukendt mngdekonstruktionstype" #~ msgid "invalid initial value for member `%s'" #~ msgstr "ugyldig startvrdi for medlemmet '%s'" #~ msgid "weak declaration of `%s' must precede definition" #~ msgstr "svag erklring af '%s' skal komme fr definitionen" #~ msgid "weak declaration of `%s' after first use results in unspecified behavior" #~ msgstr "svag erklring af '%s' efter frste brug resulterer i ikke-defineret opfrsel" #~ msgid "weak declaration of `%s' must be public" #~ msgstr "svag erklring af '%s' skal vre public" #~ msgid "weak declaration of `%s' not supported" #~ msgstr "svag erklring af '%s' ikke understttet" #~ msgid "only weak aliases are supported in this configuration" #~ msgstr "kun svage aliaser understttes i denne konfiguration" #~ msgid "alias definitions not supported in this configuration; ignored" #~ msgstr "aliasdefinitioner er ikke understttet i denne konfiguration; ignoreret" #~ msgid "visibility attribute not supported in this configuration; ignored" #~ msgstr "synlighedsegenskab er ikke understttet i denne konfiguration; ignoreret" #~ msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d" #~ msgstr "virtuel tabel %s[%lu]: element %lu ude over grnserne i %s, ved %s:%d" #~ msgid "no sclass for %s stab (0x%x)\n" #~ msgstr "ingen sclass for %s stab (0x%x)\n" #~ msgid "#`%s' not supported by %s#" #~ msgstr "#'%s' ikke understttet af %s#" #~ msgid "The maximum number of instructions in a single function eligible for inlining" #~ msgstr "Det maksimale antal instruktioner i en enkelt funktion der m indbygges" #~ msgid "The maximum number of instructions when automatically inlining" #~ msgstr "Det maksimale antal instruktioner ved automatisk indbygning" #~ msgid "The maximum number of instructions by repeated inlining before gcc starts to throttle inlining" #~ msgstr "Det maksimale antal instruktioner ved gentagen indbygning fr GCC dmper indbygningen" #~ msgid "The slope of the linear function throttling inlining after the recursive inlining limit has been reached is given by the negative reciprocal value of this parameter" #~ msgstr "Hldningen af den linere funktion der dmper indbygning efter at den rekursive indbygningsgrnse er net, er givet ved den negative, reciprokke vrdi af denne parameter" #~ msgid "The number of instructions in a single functions still eligible to inlining after a lot recursive inlining" #~ msgstr "Antallet af instruktioner i en enkelt funktion der stadig indbygges efter megen rekursiv indbygning" #~ msgid "The maximum number of instructions for the RTL inliner" #~ msgstr "Det maksimale antal instruktioner til RTL-indbyggeren" #~ msgid "The maximum number of instructions to consider to fill a delay slot" #~ msgstr "Det maksimale antal instruktioner det overvejes at udfylde ventepladser med" #~ msgid "The maximum number of instructions to consider to find accurate live register information" #~ msgstr "Det maksimale antal instruktioner der overvejes under sgning efter prcis registerinfo" #~ msgid "The maximum length of scheduling's pending operations list" #~ msgstr "Den maksimale lngde af planlggerens liste over ventende operationer" #~ msgid "The maximum amount of memory to be allocated by GCSE" #~ msgstr "Den maksimale mngde hukommelse som skal allokeres af GCSE" #~ msgid "The maximum number of passes to make when doing GCSE" #~ msgstr "Det maksimale antal faser der skal gennemgs ved udfrsel af GCSE" #~ msgid "The maximum number of instructions to consider to unroll in a loop" #~ msgstr "Det maksimale antal instruktioner der overvejes at udrulle i en lkke" #~ msgid "Select fraction of the maximal count of repetitions of basic block in program given basic block needs to have to be considered hot" #~ msgstr "Vlg den andel af det maksimale antal gentagelser af basisblokke i et program en given basisblok skal have for at blive betragtet som \"varm\"" #~ msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot" #~ msgstr "Vlg den andel af den maksimale frekvens af udfrsler af basisblokke i et program en given basisblok skal have for at blive betragtet som \"varm\"" #~ msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available" #~ msgstr "Den procendel af funktioner vgtet efter udfrselsfrekvens som skal dkkes af sporingsformering; benyttes nr profileringsfeedback er tilgngeligt" #~ msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is not available" #~ msgstr "Den procendel af funktioner vgtet efter udfrselsfrekvens som skal dkkes af sporingsformering; benyttes nr profileringsfeedback ikke er tilgngeligt" #~ msgid "Maximal code growth caused by tail duplication (in percents)" #~ msgstr "Maksimal kodevkst forrsaget af haleduplikering (i procent)" #~ msgid "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percents)" #~ msgstr "Stop omvendt vkst hvis den omvendte sandsynlighed for den bedste kant er mindre end denne trskel (i procent)" #~ msgid "Stop forward growth if the probability of best edge is less than this threshold (in percents). Used when profile feedback is available" #~ msgstr "Stop fremadrettet vkst hvis sandsynligheden for den bedste kant er mindre end denne trskel (i procent); benyttes nr profileringsfeedback er tilgngeligt" #~ msgid "Stop forward growth if the probability of best edge is less than this threshold (in percents). Used when profile feedback is not available" #~ msgstr "Stop fremadrettet vkst hvis sandsynligheden for den bedste kant er mindre end denne trskel (i procent); benyttes nr profileringsfeedback ikke er tilgngeligt" #~ msgid "The maximum number of incoming edges to consider for crossjumping" #~ msgstr "Det maksimale antal indadgende kanter der overvejes til krydsspring" #~ msgid "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap." #~ msgstr "Minimal heap-udvidelse for at udlse garbage collection, som en procentdel af den totale heap" #~ msgid "Minimum heap size before we start collecting garbage, in kilobytes." #~ msgstr "Minimal heap-strrelse fr garbage collection startes, i kilobyte." #~ msgid "too many #pragma options align=reset" #~ msgstr "for mange '#pragma options align=reset'" #~ msgid "malformed '#pragma options', ignoring" #~ msgstr "forkert udformet '#pragma options', ignorerer" #~ msgid "junk at end of '#pragma options'" #~ msgstr "ragelse i slutningen af '#pragma options'" #~ msgid "malformed '#pragma options align={mac68k|power|reset}', ignoring" #~ msgstr "forkert udformet '#pragma options align={mac68k|power|reset}', ignorerer" #~ msgid "missing '(' after '#pragma unused', ignoring" #~ msgstr "manglende '(' efter '#pragma unused', ignorerer" #~ msgid "missing ')' after '#pragma unused', ignoring" #~ msgstr "manglende ')' efter '#pragma unused', ignorerer" #~ msgid "junk at end of '#pragma unused'" #~ msgstr "ragelse i slutningen af '#pragma unused'" #~ msgid "-msystem-v and -p are incompatible" #~ msgstr "-msystem-v og -p er indbyrdes uforenelige" #~ msgid "-msystem-v and -mthreads are incompatible" #~ msgstr "-msystem-v og -mthreads er indbyrdes uforenelige" #~ msgid "-f%s ignored for Unicos/Mk (not supported)" #~ msgstr "-f%s ignoreret for Unicos/Mk (ikke understttet)" #~ msgid "-mieee not supported on Unicos/Mk" #~ msgstr "-mieee understttes ikke p Unicos/Mk" #~ msgid "-mieee-with-inexact not supported on Unicos/Mk" #~ msgstr "-mieee-with-inexact understttes ikke p Unicos/Mk" #~ msgid "bad value `%s' for -mtrap-precision switch" #~ msgstr "ugyldig vrdi '%s' til tilvalget -mtrap-precision" #~ msgid "bad value `%s' for -mfp-rounding-mode switch" #~ msgstr "ugyldig vrdi '%s' til tilvalget -mfp-rounding-mode" #~ msgid "bad value `%s' for -mfp-trap-mode switch" #~ msgstr "ugyldig vrdi '%s' til tilvalget -mfp-trap-mode" #~ msgid "bad value `%s' for -mtls-size switch" #~ msgstr "ugyldig vrdi '%s' til tilvalget -mtls-size" #~ msgid "bad value `%s' for -mcpu switch" #~ msgstr "ugyldig vrdi '%s' til tilvalget -mcpu" #~ msgid "trap mode not supported on Unicos/Mk" #~ msgstr "fldetilstand understttes ikke p Unicos/Mk" #~ msgid "fp software completion requires -mtrap-precision=i" #~ msgstr "kommatalssoftwarefuldfrelse krver -mtrap-precision=i" #~ msgid "rounding mode not supported for VAX floats" #~ msgstr "afrundingstilstand er ikke understttet for VAX-kommatal" #~ msgid "trap mode not supported for VAX floats" #~ msgstr "fldetilstand er ikke understttet for VAX-kommatal" #~ msgid "L%d cache latency unknown for %s" #~ msgstr "L%d-mellemlagersventetid ukendt for %s" #~ msgid "bad value `%s' for -mmemory-latency" #~ msgstr "ugyldig vrdi '%s' for -mmemory-latency" #~ msgid "invalid %%H value" #~ msgstr "ugyldig %%H-vrdi" #~ msgid "invalid %%J value" #~ msgstr "ugyldig %%J-vrdi" #~ msgid "invalid %%r value" #~ msgstr "ugyldig %%r-vrdi" #~ msgid "invalid %%R value" #~ msgstr "ugyldig %%R-vrdi" #~ msgid "invalid %%N value" #~ msgstr "ugyldig %%N-vrdi" #~ msgid "invalid %%P value" #~ msgstr "ugyldig %%P-vrdi" #~ msgid "invalid %%h value" #~ msgstr "ugyldig %%h-vrdi" #~ msgid "invalid %%L value" #~ msgstr "ugyldig %%L-vrdi" #~ msgid "invalid %%m value" #~ msgstr "ugyldig %%m-vrdi" #~ msgid "invalid %%M value" #~ msgstr "ugyldig %%M-vrdi" #~ msgid "invalid %%U value" #~ msgstr "ugyldig %%U-vrdi" #~ msgid "invalid %%s value" #~ msgstr "ugyldig %%s-vrdi" #~ msgid "invalid %%C value" #~ msgstr "ugyldig %%C-vrdi" #~ msgid "invalid %%E value" #~ msgstr "ugyldig %%E-vrdi" #~ msgid "unknown relocation unspec" #~ msgstr "ukendt relokaliserings-unspec" #~ msgid "invalid %%xn code" #~ msgstr "ugyldig %%xn-kode" #~ msgid "bad builtin fcode" #~ msgstr "ugyldig indbygget fcode" #~ msgid "Use hardware fp" #~ msgstr "Brug hardwarekommatal" #~ msgid "Do not use hardware fp" #~ msgstr "Brug ikke hardwarekommatal" #~ msgid "Use fp registers" #~ msgstr "Brug kommatalsregistre" #~ msgid "Do not use fp registers" #~ msgstr "Brug ikke kommatalsregistre" #~ msgid "Do not assume GAS" #~ msgstr "Antag ikke GAS" #~ msgid "Assume GAS" #~ msgstr "Antag GAS" #~ msgid "Request IEEE-conformant math library routines (OSF/1)" #~ msgstr "Pkrv at matematiksbibliotekrutiner opfylder IEEE-standarden (OSF/1)" #~ msgid "Emit IEEE-conformant code, without inexact exceptions" #~ msgstr "Udsend kode der opfylder IEEE-standarden, uden ineksakte undtagelser" #~ msgid "Emit IEEE-conformant code, with inexact exceptions" #~ msgstr "Udsend kode der opfylder IEEE-standarden, med ineksakte undtagelser" #~ msgid "Do not emit complex integer constants to read-only memory" #~ msgstr "Udsend ikke komplekse heltalskonstanter til skrivebeskyttet hukommelse" #~ msgid "Use VAX fp" #~ msgstr "Benyt VAX-kommatal" #~ msgid "Do not use VAX fp" #~ msgstr "Benyt ikke VAX-kommatal" #~ msgid "Emit code for the byte/word ISA extension" #~ msgstr "Udsend kode for byte/word-ISA-udvidelsen" #~ msgid "Emit code for the motion video ISA extension" #~ msgstr "Udsend kode for video-ISA-udvidelsen" #~ msgid "Emit code for the fp move and sqrt ISA extension" #~ msgstr "Udsend kode for kommatalsflytning og kvadratrod-ISA-udvidelsen" #~ msgid "Emit code for the counting ISA extension" #~ msgstr "Udsend kode for tller-ISA-udvidelsen" #~ msgid "Emit code using explicit relocation directives" #~ msgstr "Udsend kode der bruger eksplicitte relokaliseringsdirektiver" #~ msgid "Emit 16-bit relocations to the small data areas" #~ msgstr "Udsend 16-bit relokalisering til det lille dataomrde" #~ msgid "Emit 32-bit relocations to the small data areas" #~ msgstr "Udsend 32-bit relokalisering til det lille dataomrde" #~ msgid "Emit rdval instead of rduniq for thread pointer" #~ msgstr "Udsend rdval i stedet for rduniq for trdhenvisning" #~ msgid "Use features of and schedule given CPU" #~ msgstr "Brug faciliteter fra og planlg mht. den givne processor" #~ msgid "Schedule given CPU" #~ msgstr "Planlg til en given processor" #~ msgid "Control the generated fp rounding mode" #~ msgstr "Kontrollr den genererede kommatalsafrundingstilstand" #~ msgid "Control the IEEE trap mode" #~ msgstr "Kontrollr IEEE-fldetilstanden" #~ msgid "Control the precision given to fp exceptions" #~ msgstr "Kontrollr den prcision der gives til kommatalsundtagelser" #~ msgid "Tune expected memory latency" #~ msgstr "Justr den forventede hukommelsesventetid" #~ msgid "Specify bit size of immediate TLS offsets" #~ msgstr "Angiv bitstrrelse for umiddelbar TLS-afst" #~ msgid "bad value (%s) for -mcpu switch" #~ msgstr "ugyldig vrdi '%s' til tilvalget -mcpu" #~ msgid "argument of `%s' attribute is not a string constant" #~ msgstr "parameteren til egenskaben '%s er ikke en strengkonstant" #~ msgid "argument of `%s' attribute is not \"ilink1\" or \"ilink2\"" #~ msgstr "parameteren til egenskaben '%s er ikke \"ilink1\" eller \"ilink2\"" #~ msgid "invalid operand to %%R code" #~ msgstr "ugyldig operand til %%R-koden" #~ msgid "invalid operand to %%H/%%L code" #~ msgstr "ugyldig operand til %%H/%%L-koden" #~ msgid "invalid operand to %%U code" #~ msgstr "ugyldig operand til %%U-koden" #~ msgid "invalid operand to %%V code" #~ msgstr "ugyldig operand til %%V-koden" #~ msgid "invalid operand output code" #~ msgstr "ugyldig operand-uddatakode" #~ msgid "switch -mcpu=%s conflicts with -march= switch" #~ msgstr "tilvalget -mcpu=%s er i konflikt med tilvalget -march=" #~ msgid "bad value (%s) for %s switch" #~ msgstr "ugyldig vrdi (%s) til tilvalget %s" #~ msgid "target CPU does not support APCS-32" #~ msgstr "mlprocessoren understtter ikke APCS-32" #~ msgid "target CPU does not support APCS-26" #~ msgstr "mlprocessoren understtter ikke APCS-26" #~ msgid "target CPU does not support interworking" #~ msgstr "mlprocessoren understtter ikke interarbejde" #~ msgid "target CPU does not support THUMB instructions" #~ msgstr "mlprocessoren understtter ikke THUMB-instruktioner" #~ msgid "enabling backtrace support is only meaningful when compiling for the Thumb" #~ msgstr "aktivering af tilbagesporingsunderstttelse giver kun mening ved oversttelse for en Thumb" #~ msgid "enabling callee interworking support is only meaningful when compiling for the Thumb" #~ msgstr "aktivering af interarbejdeunderstttelse for kaldte objekter giver kun mening ved oversttelse for en Thumb" #~ msgid "enabling caller interworking support is only meaningful when compiling for the Thumb" #~ msgstr "aktivering af interarbejdeunderstttelse for kaldere giver kun mening ved oversttelse for en Thumb" #~ msgid "interworking forces APCS-32 to be used" #~ msgstr "interarbejde tvinger APCS-32 til at blive brugt" #~ msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" #~ msgstr "-mapcs-stack-check og -mno-apcs-frame er indbyrdes uforenelige" #~ msgid "-fpic and -mapcs-reent are incompatible" #~ msgstr "-fpic og -mapcs-reent er indbyrdes uforenelige" #~ msgid "APCS reentrant code not supported. Ignored" #~ msgstr "APCS-genindtrdelig kode er ikke understttet - ignoreret" #~ msgid "-g with -mno-apcs-frame may not give sensible debugging" #~ msgstr "-g med -mno-apcs-frame giver mske ikke fornuftig fejlanalysering" #~ msgid "passing floating point arguments in fp regs not yet supported" #~ msgstr "overbringelse af kommatalsparametre i kommatalsregistre er ikke understttet endnu" #~ msgid "invalid floating point emulation option: -mfpe-%s" #~ msgstr "ugyldigt tilvalg til kommatalsemulering: -mfpe-%s" #~ msgid "structure size boundary can only be set to 8 or 32" #~ msgstr "strukturstrrelsesgrnse kan kun sttes til 8 eller 32" #~ msgid "-mpic-register= is useless without -fpic" #~ msgstr "-mpic-register= er ubrugelig uden -fpic" #~ msgid "unable to use '%s' for PIC register" #~ msgstr "kan ikke bruge '%s' til PIC-register" #~ msgid "`%s' attribute only applies to functions" #~ msgstr "egenskaben '%s' kan kun anvendes sammen med funktioner" #~ msgid "unable to compute real location of stacked parameter" #~ msgstr "kan ikke beregne virkelig placering af stakkede parametre" #~ msgid "no low registers available for popping high registers" #~ msgstr "ingen lave registre er tilgngelige til at modtage vrdier fra hje registre" #~ msgid "interrupt Service Routines cannot be coded in Thumb mode" #~ msgstr "afbrydelsesservicerutiner kan ikke kodes i Thumb-tilstand" #~ msgid "initialized variable `%s' is marked dllimport" #~ msgstr "variablen '%s' med startvrdi er markeret dllimport" #~ msgid "static variable `%s' is marked dllimport" #~ msgstr "statisk variabel '%s' er markeret dllimport" #~ msgid "Generate APCS conformant stack frames" #~ msgstr "Generr APCS-overholdende stakrammer" #~ msgid "Store function names in object code" #~ msgstr "Gem funktionsnavne i objektkode" #~ msgid "Use the 32-bit version of the APCS" #~ msgstr "Benyt 32 bit-udgaven af APCS" #~ msgid "Use the 26-bit version of the APCS" #~ msgstr "Benyt 26 bit-udgaven af APCS" #~ msgid "Pass FP arguments in FP registers" #~ msgstr "Videregiv kommatalsparametre i kommatalsregistre" #~ msgid "Generate re-entrant, PIC code" #~ msgstr "Generr genindtrdelig PIC-kode" #~ msgid "The MMU will trap on unaligned accesses" #~ msgstr "MMU'en vil aktiveres ved ikke-justerede tilgange" #~ msgid "Use library calls to perform FP operations" #~ msgstr "Benyt bibliotekskald til at udfre kommatalsoperationer" #~ msgid "Use hardware floating point instructions" #~ msgstr "Benyt hardware-kommatalsinstruktioner" #~ msgid "Assume target CPU is configured as big endian" #~ msgstr "Antag at mlprocessoren er konfigureret som storendet" #~ msgid "Assume target CPU is configured as little endian" #~ msgstr "Antag at mlprocessoren er konfigureret som lilleendet" #~ msgid "Assume big endian bytes, little endian words" #~ msgstr "Antag storendede byte og lilleendede word" #~ msgid "Support calls between Thumb and ARM instruction sets" #~ msgstr "Understt kald mellem Thumb- og ARM-instruktionssttene" #~ msgid "Generate a call to abort if a noreturn function returns" #~ msgstr "Generr et kald til abort hvis en noreturn-funktion returnerer" #~ msgid "Do not move instructions into a function's prologue" #~ msgstr "Flyt ikke instruktioner til en funktions begyndelse" #~ msgid "Do not load the PIC register in function prologues" #~ msgstr "Indls ikke PIC-registeret i funktionsbegyndelser" #~ msgid "Generate call insns as indirect calls, if necessary" #~ msgstr "Generr kaldeinstruktioner som indirekte kald, om ndvendigt" #~ msgid "Compile for the Thumb not the ARM" #~ msgstr "Overst til Thymb, ikke til ARM" #~ msgid "Thumb: Generate (non-leaf) stack frames even if not needed" #~ msgstr "Thumb: Generr (ikke-yderste) stakrammer selv hvis det ikke er ndvendigt" #~ msgid "Thumb: Generate (leaf) stack frames even if not needed" #~ msgstr "Thumb: Generr (yderste) stakrammer selv hvis det ikke er ndvendigt" #~ msgid "Thumb: Assume non-static functions may be called from ARM code" #~ msgstr "Thumb: Antag at ikke-statiske funktioner kan kaldes fra ARM-kode" #~ msgid "Thumb: Assume function pointers may go to non-Thumb aware code" #~ msgstr "Thumb: Antag at funktionshenvisninger kan g til kode der ikke er opmrksom p Thumb" #~ msgid "Specify the name of the target CPU" #~ msgstr "Angiv navnet p mlprocessoren" #~ msgid "Specify the name of the target architecture" #~ msgstr "Angiv navnet p mlarkitekturen" #~ msgid "Specify the version of the floating point emulator" #~ msgstr "Angiv versionen af kommatalsemulatoren" #~ msgid "Specify the minimum bit alignment of structures" #~ msgstr "Angiv den mindste bitjustering af strukturer" #~ msgid "Specify the register to be used for PIC addressing" #~ msgstr "Angiv det register der skal bruges til PIC-adressering" #~ msgid "Ignore dllimport attribute for functions" #~ msgstr "Ignorr dllimport-egenskaben for funktioner" #~ msgid "large frame pointer change (%d) with -mtiny-stack" #~ msgstr "stor rammehenvisningsndring (%d) med -mtiny-stack" #~ msgid "bad address, not (reg+disp):" #~ msgstr "ugyldig adresse, ikke (reg+disp):" #~ msgid "internal compiler error. Bad address:" #~ msgstr "intern overstterfejl - ugyldig adresse:" #~ msgid "internal compiler error. Unknown mode:" #~ msgstr "intern overstterfejl - ugyldig tilstand:" #~ msgid "invalid insn:" #~ msgstr "ugyldig instruktion:" #~ msgid "incorrect insn:" #~ msgstr "ukorrekt instruktion:" #~ msgid "unknown move insn:" #~ msgstr "ukendt flytteinstruktion:" #~ msgid "bad shift insn:" #~ msgstr "ugyldig skifteinstruktion:" #~ msgid "internal compiler error. Incorrect shift:" #~ msgstr "intern overstterfejl - ukorrekt skift:" #~ msgid "only initialized variables can be placed into program memory area" #~ msgstr "kun variabler med startvrdi kan placeres i programhukommelsesomrdet" #~ msgid "only uninitialized variables can be placed in the .noinit section" #~ msgstr "kun variabler uden startvrdi kan placeres i .noinit-sektionen" #~ msgid "MCU `%s' supported for assembler only" #~ msgstr "MCU '%s' understttes kun for maskinkode" #~ msgid "Assume int to be 8 bit integer" #~ msgstr "Antag at int er 8 bit-heltal" #~ msgid "Change the stack pointer without disabling interrupts" #~ msgstr "ndr stakhenvisningen uden at deaktivere afbrydelser" #~ msgid "Use subroutines for function prologue/epilogue" #~ msgstr "Benyt subrutiner for funktionsindledning/-afslutninger" #~ msgid "Change only the low 8 bits of the stack pointer" #~ msgstr "ndr kun de laveste 8 bit af stakhenvisningen" #~ msgid "Do not generate tablejump insns" #~ msgstr "Generr ikke tabelspringsinstruktioner" #~ msgid "Use rjmp/rcall (limited range) on >8K devices" #~ msgstr "Benyt rjmp/rcall (begrnset omfang) p >8K-enheder" #~ msgid "Output instruction sizes to the asm file" #~ msgstr "Anbring instruktionsstrrelser i asm-filen" #~ msgid "Specify the initial stack address" #~ msgstr "Angiv den frste stakadresse" #~ msgid "Specify the MCU name" #~ msgstr "Angiv MCU-navnet" #~ msgid "trampolines not supported" #~ msgstr "trampoliner understttes ikke" #~ msgid "missing '(' after '#pragma %s' - ignored" #~ msgstr "manglende '(' efter '#pragma %s' - ignoreret" #~ msgid "missing function name in '#pragma %s' - ignored" #~ msgstr "manglende funktionsnavn i '#pragma %s' - ignoreret" #~ msgid "malformed '#pragma %s' - ignored" #~ msgstr "forkert udformet '#pragma %s' - ignoreret" #~ msgid "missing section name in '#pragma %s' - ignored" #~ msgstr "manglende sektionsnavn i '#pragma %s' - ignoreret" #~ msgid "missing ')' for '#pragma %s' - ignored" #~ msgstr "manglende '(' for '#pragma %s' - ignoreret" #~ msgid "junk at end of '#pragma %s'" #~ msgstr "ragelse i slutningen af '#pragma %s'" #~ msgid "unknown CPU version %d, using 40.\n" #~ msgstr "ukendt processorversion %d, bruger 40.\n" #~ msgid "ISR %s requires %d words of local vars, max is 32767" #~ msgstr "ISR %s krver %d ord af lokale variable, maks. er 32767" #~ msgid "using CONST_DOUBLE for address" #~ msgstr "bruger CONST_DOUBLE til adresse" #~ msgid "c4x_address_cost: Invalid addressing mode" #~ msgstr "c4x_address_cost: Ugyldig adresseringstilstand" #~ msgid "c4x_print_operand: %%L inconsistency" #~ msgstr "c4x_print_operand: %%L-inkonsistens" #~ msgid "c4x_print_operand: %%N inconsistency" #~ msgstr "c4x_print_operand: %%N-inkonsistens" #~ msgid "c4x_print_operand: %%O inconsistency" #~ msgstr "c4x_print_operand: %%O-inkonsistens" #~ msgid "c4x_print_operand: Bad operand case" #~ msgstr "c4x_print_operand: Ugyldig operand-case" #~ msgid "c4x_print_operand_address: Bad post_modify" #~ msgstr "c4x_print_operand_address: Ugyldig post_modify" #~ msgid "c4x_print_operand_address: Bad pre_modify" #~ msgstr "c4x_print_operand_address: Ugyldig pre_modify" #~ msgid "c4x_print_operand_address: Bad operand case" #~ msgstr "c4x_print_operand_address: Ugyldig operand-case" #~ msgid "c4x_rptb_insert: Cannot find start label" #~ msgstr "c4x_rptb_insert: Kan ikke finde startetiket" #~ msgid "mode not QImode" #~ msgstr "tilstand ikke QImode" #~ msgid "invalid indirect memory address" #~ msgstr "ugyldig indirekte hukommelsesadresse" #~ msgid "invalid indirect (S) memory address" #~ msgstr "ugyldig indirekte (S) hukommelsesadresse" #~ msgid "c4x_valid_operands: Internal error" #~ msgstr "c4x_valid_operands: Intern fejl" #~ msgid "c4x_operand_subword: invalid mode" #~ msgstr "c4x_operand_subword: ugyldig tilstand" #~ msgid "c4x_operand_subword: invalid operand" #~ msgstr "c4x_operand_subword: ugyldig operand" #~ msgid "c4x_operand_subword: invalid autoincrement" #~ msgstr "c4x_operand_subword: ugyldig selvforgelse" #~ msgid "c4x_operand_subword: invalid address" #~ msgstr "c4x_operand_subword: ugyldig adresse" #~ msgid "c4x_operand_subword: address not offsettable" #~ msgstr "c4x_operand_subword: adresse kan ikke tilfjes et offset" #~ msgid "c4x_rptb_rpts_p: Repeat block top label moved\n" #~ msgstr "c4x_rptb_rpts_p: Topetiket til gentagelsesblok flyttet\n" #~ msgid "Small memory model" #~ msgstr "Lille hukommelsesmodel" #~ msgid "Big memory model" #~ msgstr "Stor hukommelsesmodel" #~ msgid "Use MPYI instruction for C3x" #~ msgstr "Benyt MPYI-instruktionen til C3x" #~ msgid "Do not use MPYI instruction for C3x" #~ msgstr "Benyt ikke MPYI-instruktionen til C3x" #~ msgid "Use fast but approximate float to integer conversion" #~ msgstr "Benyt hurtig, men approksimativ konvertering fra komma- til heltal" #~ msgid "Use slow but accurate float to integer conversion" #~ msgstr "Benyt langsom, men njagtig konvertering fra komma- til heltal" #~ msgid "Enable use of RTPS instruction" #~ msgstr "Aktivr brug af RTPS-instruktionen" #~ msgid "Disable use of RTPS instruction" #~ msgstr "Deaktivr brug af RTPS-instruktionen" #~ msgid "Enable use of RTPB instruction" #~ msgstr "Aktivr brug af RTPB-instruktionen" #~ msgid "Disable use of RTPB instruction" #~ msgstr "Deaktivr brug af RTPB-instruktionen" #~ msgid "Generate code for C30 CPU" #~ msgstr "Generr kode til en C30-processor" #~ msgid "Generate code for C31 CPU" #~ msgstr "Generr kode til en C31-processor" #~ msgid "Generate code for C32 CPU" #~ msgstr "Generr kode til en C32-processor" #~ msgid "Generate code for C33 CPU" #~ msgstr "Generr kode til en C33-processor" #~ msgid "Generate code for C40 CPU" #~ msgstr "Generr kode til en C40-processor" #~ msgid "Generate code for C44 CPU" #~ msgstr "Generr kode til en C44-processor" #~ msgid "Emit code compatible with TI tools" #~ msgstr "Udsend kode der er kompatibel med TI-vrktjer" #~ msgid "Emit code to use GAS extensions" #~ msgstr "Udsend kode der bruger GAS-udvidelser" # RETMIG: hvad str ISR for? #~ msgid "Save DP across ISR in small memory model" #~ msgstr "Gem DP over ISR i lille hukommelsesmodel" #~ msgid "Don't save DP across ISR in small memory model" #~ msgstr "Gem ikke DP over ISR i lille hukommelsesmodel" #~ msgid "Pass arguments on the stack" #~ msgstr "Overbring parametre p stakken" #~ msgid "Pass arguments in registers" #~ msgstr "Overbring parametre i registre" #~ msgid "Enable new features under development" #~ msgstr "Aktivr nye faciliteter under udvikling" #~ msgid "Disable new features under development" #~ msgstr "Deaktivr nye faciliteter under udvikling" #~ msgid "Use the BK register as a general purpose register" #~ msgstr "Benyt BK-registeret som et alment register" #~ msgid "Do not allocate BK register" #~ msgstr "Allokr ikke BK-registeret" #~ msgid "Enable use of DB instruction" #~ msgstr "Aktivr brug af DB-instruktioner" #~ msgid "Disable use of DB instruction" #~ msgstr "Deaktivr brug af DB-instruktioner" #~ msgid "Enable debugging" #~ msgstr "Aktivr fejlanalyseringsinfo" #~ msgid "Disable debugging" #~ msgstr "Deaktivr fejlanalyseringsinfo" # RETMIG: hvad betyder hoisting? (det har noget med jage indlsning af dem ud af registre) #~ msgid "Force constants into registers to improve hoisting" #~ msgstr "Tving konstanter ind i registre for at forbedre hoisting" #~ msgid "Don't force constants into registers" #~ msgstr "Tving ikke konstanter ind i registre" #~ msgid "Force RTL generation to emit valid 3 operand insns" #~ msgstr "Tving RTL-generering til at udsende gyldig 3-operandinstruktioner" #~ msgid "Allow RTL generation to emit invalid 3 operand insns" #~ msgstr "Tillad RTL-generering at udsende ugyldig 3-operandinstruktioner" #~ msgid "Allow unsigned iteration counts for RPTB/DB" #~ msgstr "Tillad iterationstllere uden fortegn for RPTB/DB" #~ msgid "Disallow unsigned iteration counts for RPTB/DB" #~ msgstr "Tillad ikke iterationstllere uden fortegn for RPTB/DB" #~ msgid "Preserve all 40 bits of FP reg across call" #~ msgstr "Bevar alle 40 bit af kommatalsregisteret p tvrs af kald" #~ msgid "Only preserve 32 bits of FP reg across call" #~ msgstr "Bevar kun 32 bit af kommatalsregisteret p tvrs af kald" #~ msgid "Enable parallel instructions" #~ msgstr "Aktivr parallelle instruktioner" #~ msgid "Disable parallel instructions" #~ msgstr "Deaktivr parallelle instruktioner" #~ msgid "Enable MPY||ADD and MPY||SUB instructions" #~ msgstr "Aktivr instruktionerne MPY||ADD og MPY||SUB" #~ msgid "Disable MPY||ADD and MPY||SUB instructions" #~ msgstr "Deaktivr instruktionerne MPY||ADD og MPY||SUB" #~ msgid "Assume that pointers may be aliased" #~ msgstr "Antag at henvisninger kan vre aliaser" #~ msgid "Assume that pointers not aliased" #~ msgstr "Antag at henvisninger ikke kan vre aliaser" #~ msgid "Specify maximum number of iterations for RPTS" #~ msgstr "Angiv maksimalt antal iterationer for RPTS" #~ msgid "Select CPU to generate code for" #~ msgstr "Vlg den processor der skal genereres kode til" #~ msgid "unexpected index-type in cris_print_index" #~ msgstr "uventet indekstype i cris_print_index" #~ msgid "unexpected base-type in cris_print_base" #~ msgstr "uventet grundtype in cris_print_base" #~ msgid "stackframe too big: %d bytes" #~ msgstr "stakramme for stor: %d byte" #~ msgid "allocated but unused delay list in epilogue" #~ msgstr "allokeret, men ubenyttet venteliste i afslutning" #~ msgid "unexpected function type needing stack adjustment for __builtin_eh_return" #~ msgstr "uventet funktionstype behver stak justering for __builtin_eh_return" #~ msgid "invalid operand for 'b' modifier" #~ msgstr "ugyldig operand til 'b'-ndring" #~ msgid "invalid operand for 'v' modifier" #~ msgstr "ugyldig operand til 'v'-ndring" #~ msgid "invalid operand for 'P' modifier" #~ msgstr "ugyldig operand til 'P'-ndring" #~ msgid "invalid operand for 'p' modifier" #~ msgstr "ugyldig operand til 'p'-ndring" #~ msgid "invalid operand for 'z' modifier" #~ msgstr "ugyldig operand til 'z'-ndring" #~ msgid "invalid operand for 'H' modifier" #~ msgstr "ugyldig operand til 'H'-ndring" #~ msgid "bad register" #~ msgstr "ugyldigt register" #~ msgid "invalid operand for 'e' modifier" #~ msgstr "ugyldig operand til 'e'-ndring" #~ msgid "invalid operand for 'm' modifier" #~ msgstr "ugyldig operand til 'm'-ndring" #~ msgid "invalid operand for 'A' modifier" #~ msgstr "ugyldig operand til 'A'-ndring" #~ msgid "invalid operand for 'D' modifier" #~ msgstr "ugyldig operand til 'D'-ndring" #~ msgid "invalid operand for 'T' modifier" #~ msgstr "ugyldig operand til 'T'-ndring" #~ msgid "invalid operand modifier letter" #~ msgstr "ugyldigt operandndringsbogstav" #~ msgid "internal error: bad register: %d" #~ msgstr "intern fejl: ugyldigt register: %d" #~ msgid "unexpected multiplicative operand" #~ msgstr "uventet multiplikativ operand" #~ msgid "unexpected operand" #~ msgstr "uventet operand" #~ msgid "unrecognized address" #~ msgstr "ukendt adresse" #~ msgid "internal error: sideeffect-insn affecting main effect" #~ msgstr "intern fejl: bivirkningsinstruktion pvirker hovedvirkning" #~ msgid "internal error: cris_side_effect_mode_ok with bad operands" #~ msgstr "intern fejl: cris_side_effect_mode_ok med ugyldige operander" #~ msgid "unrecognized supposed constant" #~ msgstr "ukendt formodet konstant" #~ msgid "unrecognized supposed constant in cris_global_pic_symbol" #~ msgstr "ukendt formodet konstant i cris_global_pic_symbol" #~ msgid "-max-stackframe=%d is not usable, not between 0 and %d" #~ msgstr "-max-stackframe=%d er ikke brugbar mellem 0 og %d" #~ msgid "unknown CRIS version specification in -march= or -mcpu= : %s" #~ msgstr "ukendt CRIS-versionsspecifikation i -march= eller -mcpu=: %s" #~ msgid "unknown CRIS cpu version specification in -mtune= : %s" #~ msgstr "ukendt CRIS-versionsspecifikation i -mtune=: %s" #~ msgid "-fPIC and -fpic are not supported in this configuration" #~ msgstr "-fPIC og -fpic understttes ikke af denne konfiguration" #~ msgid "that particular -g option is invalid with -maout and -melinux" #~ msgstr "det bestemte '-g'-tilvalg er ugyldigt med -maout og -melinux" #~ msgid "unexpected side-effects in address" #~ msgstr "uventede bivirkninger i adresse" #~ msgid "unexpected PIC symbol" #~ msgstr "uventet PIC-symbol" #~ msgid "PIC register isn't set up" #~ msgstr "PIC-register er ikke sat op" #~ msgid "unexpected address expression" #~ msgstr "uventet adresseudtryk" #~ msgid "emitting PIC operand, but PIC register isn't set up" #~ msgstr "udsender PIC-operand, men PIC-register er ikke sat op" #~ msgid "unexpected NOTE as addr_const:" #~ msgstr "uventet NOTE som addr_const:" #~ msgid "Compile for the MMU-less Etrax 100-based elinux system" #~ msgstr "Overst for det Etrax 100-baserede elinux-system uden MMU" #~ msgid "For elinux, request a specified stack-size for this program" #~ msgstr "For elinux; foresprg en angivet stakstrrelse for dette program" #~ msgid "Compile for ETRAX 4 (CRIS v3)" #~ msgstr "Overst for ETRAX 4 (CRIS v3)" #~ msgid "Compile for ETRAX 100 (CRIS v8)" #~ msgstr "Overst for ETRAX 100 (CRIS v8)" #~ msgid "Emit verbose debug information in assembly code" #~ msgstr "Udsend fejlanalyseringsinfo i maskinkode" #~ msgid "Do not use condition codes from normal instructions" #~ msgstr "Benyt ikke betingelseskoder fra normale instruktioner" #~ msgid "Do not emit addressing modes with side-effect assignment" #~ msgstr "Udsend ikke adresseringstilstande med bivirkningstildeling" #~ msgid "Do not tune stack alignment" #~ msgstr "Finjustr ikke stakjustering" #~ msgid "Do not tune writable data alignment" #~ msgstr "Finjustr ikke justering af skrivbare data" #~ msgid "Do not tune code and read-only data alignment" #~ msgstr "Finjustr ikke justering af kode og skrivebeskyttet data" #~ msgid "Align code and data to 32 bits" #~ msgstr "Justr kode og data til 32 bit" #~ msgid "Don't align items in code or data" #~ msgstr "Justr ikke elementer i kode eller data" #~ msgid "Do not emit function prologue or epilogue" #~ msgstr "Udsend ikke funktionsindledning eller -afslutning" #~ msgid "Use the most feature-enabling options allowed by other options" #~ msgstr "Benyt de tilvalg der giver de fleste faciliteter tilladt af andre tilvalg" #~ msgid "Override -mbest-lib-options" #~ msgstr "Overskriv -mbest-lib-options" #~ msgid "Generate code for the specified chip or CPU version" #~ msgstr "Generr kode til en given chip- eller processorversion" #~ msgid "Tune alignment for the specified chip or CPU version" #~ msgstr "Finjustr justering til en given chip- eller processorversion" #~ msgid "Warn when a stackframe is larger than the specified size" #~ msgstr "Advar nr en stakramme er strre end den angivne strrelse" #~ msgid "no FUNCTION_PROFILER for CRIS" #~ msgstr "ingen FUNCTION_PROFILER for CRIS" #~ msgid "Together with -fpic and -fPIC, do not use GOTPLT references" #~ msgstr "Benyt ikke GOTPLT-referencer sammen med -fpic og -fPIC" #~ msgid "bad modes_tieable_p for register %s, mode1 %s, mode2 %s" #~ msgstr "ugyldig modes_tieable_p for register %s, mode1 %s, mode2 %s" #~ msgid "bad insn to d30v_print_operand_address:" #~ msgstr "ugyldig instruktion til d30v_print_operand_address:" #~ msgid "bad insn to d30v_print_operand_memory_reference:" #~ msgstr "ugyldig instruktion til d30v_print_operand_memory_reference:" #~ msgid "bad insn to d30v_print_operand, 'f' modifier:" #~ msgstr "ugyldig instruktion til d30v_print_operand, 'f'-ndring:" #~ msgid "bad insn to d30v_print_operand, 'A' modifier:" #~ msgstr "ugyldig instruktion til d30v_print_operand, 'A'-ndring:" #~ msgid "bad insn to d30v_print_operand, 'M' modifier:" #~ msgstr "ugyldig instruktion til d30v_print_operand, 'M'-ndring:" #~ msgid "bad insn to print_operand, 'F' or 'T' modifier:" #~ msgstr "ugyldig instruktion til d30v_print_operand, 'F'- eller 'T'-ndring:" #~ msgid "bad insn to print_operand, 'B' modifier:" #~ msgstr "ugyldig instruktion til d30v_print_operand, 'B'-ndring:" #~ msgid "bad insn to print_operand, 'E' modifier:" #~ msgstr "ugyldig instruktion til d30v_print_operand, 'E'-ndring:" #~ msgid "bad insn to print_operand, 'R' modifier:" #~ msgstr "ugyldig instruktion til d30v_print_operand, 'R'-ndring:" #~ msgid "bad insn to print_operand, 's' modifier:" #~ msgstr "ugyldig instruktion til d30v_print_operand, 's'-ndring:" #~ msgid "bad insn in d30v_print_operand, 0 case" #~ msgstr "ugyldig instruktion til d30v_print_operand, 0 case" #~ msgid "d30v_emit_comparison" #~ msgstr "d30v_emit_comparison" #~ msgid "bad call to d30v_move_2words" #~ msgstr "ugyldigt kald af d30v_move_2words" #~ msgid "Enable use of conditional move instructions" #~ msgstr "Aktivr brug af betingede flytteinstruktioner" #~ msgid "Disable use of conditional move instructions" #~ msgstr "Deaktivr brug af betingede flytteinstruktioner" #~ msgid "Debug argument support in compiler" #~ msgstr "Fejlanalyser parameterunderstttelse i overstteren" #~ msgid "Debug stack support in compiler" #~ msgstr "Fejlanalyser stakunderstttelse i overstteren" #~ msgid "Debug memory address support in compiler" #~ msgstr "Fejlanalyser hukommelsesadresseunderstttelse i overstteren" #~ msgid "Make adjacent short instructions parallel if possible" #~ msgstr "Gr nrliggende korte instruktioner parallelle om muligt" #~ msgid "Do not make adjacent short instructions parallel" #~ msgstr "Gr ikke nrliggende korte instruktioner parallelle" #~ msgid "Link programs/data to be in external memory by default" #~ msgstr "Sammenkd program/data til at vre i ekstern hukommelse som standard" #~ msgid "Link programs/data to be in onchip memory by default" #~ msgstr "Sammenkd program/data til at vre i hukommelsen p chippen som standard" #~ msgid "Change the branch costs within the compiler" #~ msgstr "Skift forgreningsomkostningen i overstteren" #~ msgid "Change the threshold for conversion to conditional execution" #~ msgstr "Skift trsklen for konvertering til betinget udfrelse" #~ msgid "stack size > 32k" #~ msgstr "stakstrrelse > 32k" #~ msgid "invalid addressing mode" #~ msgstr "ugyldig adresseringstilstand" #~ msgid "bad register extension code" #~ msgstr "ugyldig registerudvidelseskode" #~ msgid "invalid offset in ybase addressing" #~ msgstr "ugyldigt afst i ybase-adressering" #~ msgid "invalid register in ybase addressing" #~ msgstr "ugyldigt register i ybase-adressering" #~ msgid "invalid shift operator in emit_1600_core_shift" #~ msgstr "ugyldig skifteoperator i emit_1600_core_shift" #~ msgid "invalid mode for gen_tst_reg" #~ msgstr "ugyldig tilstand for gen_tst_reg" #~ msgid "invalid mode for integer comparison in gen_compare_reg" #~ msgstr "ugyldig tilstand for heltalssammenligning i gen_compare_reg" #~ msgid "Pass parameters in registers (default)" #~ msgstr "Overbring parametre i registre (standard)" #~ msgid "Don't pass parameters in registers" #~ msgstr "Overbring ikke parametre i registre" #~ msgid "Generate code for near calls" #~ msgstr "Generr kode til nre kald" #~ msgid "Don't generate code for near calls" #~ msgstr "Generr ikke kode til nre kald" #~ msgid "Generate code for near jumps" #~ msgstr "Generr kode til nre spring" #~ msgid "Don't generate code for near jumps" #~ msgstr "Generr ikke kode til nre spring" #~ msgid "Generate code for a bit-manipulation unit" #~ msgstr "Generr kode til en bit-manipuleringsenhed" #~ msgid "Don't generate code for a bit-manipulation unit" #~ msgstr "Generr ikke kode til en bit-manipuleringsenhed" #~ msgid "Generate code for memory map1" #~ msgstr "Generr kode til memory map1" #~ msgid "Generate code for memory map2" #~ msgstr "Generr kode til memory map2" #~ msgid "Generate code for memory map3" #~ msgstr "Generr kode til memory map3" #~ msgid "Generate code for memory map4" #~ msgstr "Generr kode til memory map4" #~ msgid "Ouput extra code for initialized data" #~ msgstr "Udsend ekstra kode til data med startvrdier" #~ msgid "Don't let reg. allocator use ybase registers" #~ msgstr "Lad ikke registerallokeringen benytte ybase-registre" #~ msgid "Output extra debug info in Luxworks environment" #~ msgstr "Udsend ekstra fejlanalyseringsinfo i Luxworks-miljet" #~ msgid "Save temp. files in Luxworks environment" #~ msgstr "Gem midlertidige filer i Luxworks-miljet" #~ msgid "Specify alternate name for text section" #~ msgstr "Angiv alternativt navn til tekstsektionen" #~ msgid "Specify alternate name for data section" #~ msgstr "Angiv alternativt navn til datasektionen" #~ msgid "Specify alternate name for bss section" #~ msgstr "Angiv alternativt navn til bss-sektionen" #~ msgid "Specify alternate name for constant section" #~ msgstr "Angiv alternativt navn til konstantsektionen" #~ msgid "Specify alternate name for dsp16xx chip" #~ msgstr "Angiv alternativt navn til dsp16xx-chippen" #~ msgid "profiling not implemented yet" #~ msgstr "profilering understttes ikke endnu" #~ msgid "trampolines not yet implemented" #~ msgstr "trampoliner understttes ikke endnu" #~ msgid "fr30_print_operand_address: unhandled address" #~ msgstr "fr30_print_operand_address: ikke-hndteret adresse" #~ msgid "fr30_print_operand: unrecognized %%p code" #~ msgstr "fr30_print_operand: ukendt '%%p'-kode" #~ msgid "fr30_print_operand: unrecognized %%b code" #~ msgstr "fr30_print_operand: ukendt '%%b'-kode" #~ msgid "fr30_print_operand: unrecognized %%B code" #~ msgstr "fr30_print_operand: ukendt '%%B'-kode" #~ msgid "fr30_print_operand: invalid operand to %%A code" #~ msgstr "fr30_print_operand: ugyldig operand til '%%A'-kode" #~ msgid "fr30_print_operand: invalid %%x code" #~ msgstr "fr30_print_operand: ugyldig '%%x'-kode" #~ msgid "fr30_print_operand: invalid %%F code" #~ msgstr "fr30_print_operand: ugyldig '%%F'-kode" #~ msgid "fr30_print_operand: unknown code" #~ msgstr "fr30_print_operand: ukendt kode" #~ msgid "fr30_print_operand: unhandled MEM" #~ msgstr "fr30_print_operand: ikke-hndteret MEM" #~ msgid "Assume small address space" #~ msgstr "Antag lille adresserum" #~ msgid "Unknown cpu: -mcpu=%s" #~ msgstr "Ukendt processor: -mcpu=%s" #~ msgid "-fpic and -gdwarf are incompatible (-fpic and -g/-gdwarf-2 are fine)" #~ msgstr "-fpic og -gdwarf er indbyrdes uforenelige (-fpic og -g/-gdwarf-2 er i orden)" #~ msgid "Bad insn to frv_print_operand_address:" #~ msgstr "Ugyldig instruktion til frv_print_operand_address:" #~ msgid "Bad register to frv_print_operand_memory_reference_reg:" #~ msgstr "Ugyldigt register til frv_print_operand_memory_reference_reg:" #~ msgid "Bad insn to frv_print_operand_memory_reference:" #~ msgstr "Ugyldig instruktion til frv_print_operand_memory_reference:" #~ msgid "Bad insn in frv_print_operand, bad const_double" #~ msgstr "Ugyldig instruktion i frv_print_operand, ugyldig const_double" #~ msgid "Bad insn to frv_print_operand, 'C' modifier:" #~ msgstr "Ugyldig instruktionen til frv_print_operand, 'C'-modifikation:" #~ msgid "Bad insn to frv_print_operand, 'c' modifier:" #~ msgstr "Ugyldig instruktion til frv_print_operand, 'c'-modifikation:" #~ msgid "Bad insn to frv_print_operand, 'e' modifier:" #~ msgstr "Ugyldig instruktion til frv_print_operand, 'e'-modifikation:" #~ msgid "Bad insn to frv_print_operand, 'F' modifier:" #~ msgstr "Ugyldig instruktion til frv_print_operand, 'F'-modifikation:" #~ msgid "Bad insn to frv_print_operand, 'f' modifier:" #~ msgstr "Ugyldig instruktion til frv_print_operand, 'f'-modifikation:" #~ msgid "Bad insn to frv_print_operand, 'L' modifier:" #~ msgstr "Ugyldig instruktion til frv_print_operand, 'L'-modifikation:" #~ msgid "Bad insn to frv_print_operand, 'M/N' modifier:" #~ msgstr "Ugyldig instruktion til frv_print_operand, 'M/N'-modifikation:" #~ msgid "Bad insn to frv_print_operand, 'O' modifier:" #~ msgstr "Ugyldig instruktion til frv_print_operand, 'O'-modifikation:" #~ msgid "Bad insn to frv_print_operand, P modifier:" #~ msgstr "Ugyldig instruktion til frv_print_operand, P-modifikation:" #~ msgid "Bad insn in frv_print_operand, z case" #~ msgstr "Ugyldig instruktion i frv_print_operand, tilfldet z" #~ msgid "Bad insn in frv_print_operand, 0 case" #~ msgstr "Ugyldig instruktion i frv_print_operand, tilfldet 0" #~ msgid "frv_print_operand: unknown code" #~ msgstr "fr_print_operand: ukendt kode" #~ msgid "Bad output_move_single operand" #~ msgstr "Ugyldig output_move_single-operand" #~ msgid "Bad output_move_double operand" #~ msgstr "Ugyldig output_move_double-operand" #~ msgid "Bad output_condmove_single operand" #~ msgstr "Ugyldig output_condmove_single-operand" #~ msgid "frv_registers_update" #~ msgstr "frv_registers_update" #~ msgid "frv_registers_used_p" #~ msgstr "frv_registers_used_p" #~ msgid "frv_registers_set_p" #~ msgstr "frv_registers_set_p" #~ msgid "accumulator is not a constant integer" #~ msgstr "akkumulator er ikke et konstant heltal" #~ msgid "accumulator number is out of bounds" #~ msgstr "akkumulatortal er uden for det gyldig interval" #~ msgid "inappropriate accumulator for `%s'" #~ msgstr "forkert akkumulator for '%s'" #~ msgid "`%s' expects a constant argument" #~ msgstr "'%s' forventer en konstant parameter" #~ msgid "constant argument out of range for `%s'" #~ msgstr "konstant parameter uden for det gyldige interval for '%s'" #~ msgid "media functions are not available unless -mmedia is used" #~ msgstr "mediafunktioner er ikke tilgngelige medmindre -mmedia benyttes" #~ msgid "this media function is only available on the fr500" #~ msgstr "denne mediafunktion er kun tilgngelig p fr500" #~ msgid "this media function is only available on the fr400" #~ msgstr "denne mediafunktion er kun tilgngelig p fr400" #~ msgid " (frv)" #~ msgstr " (frv)" #~ msgid "-ms2600 is used without -ms" #~ msgstr "-ms2600 benyttet uden -ms" #~ msgid "-mn is used without -mh or -ms" #~ msgstr "-mn benyttet uden -mh eller -ms" #~ msgid "Generate H8S code" #~ msgstr "Generr H8S-kode" #~ msgid "Do not generate H8S code" #~ msgstr "Generr ikke H8S-kode" #~ msgid "Generate H8S/2600 code" #~ msgstr "Generr H8S/2600-kode" #~ msgid "Do not generate H8S/2600 code" #~ msgstr "Generr ikke H8S/2600-kode" #~ msgid "Make integers 32 bits wide" #~ msgstr "Gr heltal 32 bit brede" #~ msgid "Use registers for argument passing" #~ msgstr "Benyt registre til parameteroverbringning" #~ msgid "Do not use registers for argument passing" #~ msgstr "Benyt ikke registre til parameteroverbringning" #~ msgid "Consider access to byte sized memory slow" #~ msgstr "Betragt tilgang til bytestrrelseshukommelse som langsomt" #~ msgid "Enable linker relaxing" #~ msgstr "Aktivr tolerant sammenkdning" #~ msgid "Generate H8/300H code" #~ msgstr "Generr H8/300H-kode" #~ msgid "Enable the normal mode" #~ msgstr "Aktivr den normale tilstand" #~ msgid "Do not generate H8/300H code" #~ msgstr "Generr ikke H8/300H-kode" #~ msgid "Use H8/300 alignment rules" #~ msgstr "Benyt H8/300-justeringsregler" #~ msgid "junk at end of #pragma map" #~ msgstr "ragelse i slutningen af #pragma map" #~ msgid "malformed #pragma map, ignored" #~ msgstr "forkert udformet '#pragma map' - ignoreret" #~ msgid "real name is too long - alias ignored" #~ msgstr "rigtigt navn for langt - alias ignoreret" #~ msgid "alias name is too long - alias ignored" #~ msgstr "aliasnavn for langt - alias ignoreret" #~ msgid "internal error--no jump follows compare:" #~ msgstr "intern fejl - intet spring efterflger sammenligning:" #~ msgid "Generate char instructions" #~ msgstr "Generr char-instruktioner" #~ msgid "Do not generate char instructions" #~ msgstr "Generr ikke char-instruktioner" #~ msgid "code model %s not supported in PIC mode" #~ msgstr "kodemodellen %s er ikke understttet i PIC-tilstand" #~ msgid "bad value (%s) for -mcmodel= switch" #~ msgstr "ugyldig vrdi (%s) til tilvalget -mcmodel=" #~ msgid "bad value (%s) for -masm= switch" #~ msgstr "ugyldig vrdi (%s) til tilvalget -masm=" #~ msgid "code model `%s' not supported in the %s bit mode" #~ msgstr "kodemodellen %s er ikke understttet i %s bit-tilstand" #~ msgid "code model `large' not supported yet" #~ msgstr "kodemodellen 'large' er ikke understttet endnu" #~ msgid "%i-bit mode not compiled in" #~ msgstr "%i bit-tilstand er ikke oversat med ind" #~ msgid "bad value (%s) for -march= switch" #~ msgstr "ugyldig vrdi (%s) til tilvalget -march=" #~ msgid "bad value (%s) for -mcpu= switch" #~ msgstr "ugyldig vrdi (%s) til tilvalget -mcpu=" #~ msgid "-mregparm=%d is not between 0 and %d" #~ msgstr "-mregparm=%d er ikke mellem 0 og %d" #~ msgid "-malign-loops is obsolete, use -falign-loops" #~ msgstr "-malign-loops er forldet, benyt -falign-loops" #~ msgid "-malign-loops=%d is not between 0 and %d" #~ msgstr "-malign-loops=%d er ikke mellem 0 og %d" #~ msgid "-malign-jumps is obsolete, use -falign-jumps" #~ msgstr "-malign-jumps er forldet, benyt -falign-jumps" #~ msgid "-malign-functions is obsolete, use -falign-functions" #~ msgstr "-malign-functions er forldet, benyt -falign-functions" #~ msgid "-mpreferred-stack-boundary=%d is not between %d and 12" #~ msgstr "-mpreferred-stack-boundary=%d er ikke mellem %d og 12" #~ msgid "-mbranch-cost=%d is not between 0 and 5" #~ msgstr "-mbranch-cost=%d er ikke mellem 0 og 5" #~ msgid "bad value (%s) for -mtls-dialect= switch" #~ msgstr "ugyldig vrdi (%s) til tilvalget -mtls-dialect" #~ msgid "-malign-double makes no sense in the 64bit mode" #~ msgstr "-malign-double giver ikke mening i 64 bit-tilstand" #~ msgid "-mrtd calling convention not supported in the 64bit mode" #~ msgstr "kaldekonventionen -mrtd er ikke understttet i 64 bit-tilstand" #~ msgid "SSE instruction set disabled, using 387 arithmetics" #~ msgstr "SSE-instruktionsst deaktiveret, bruger 387-beregninger" #~ msgid "387 instruction set disabled, using SSE arithmetics" #~ msgstr "387-instruktionsst deaktiveret, bruger SSE-beregninger" #~ msgid "bad value (%s) for -mfpmath= switch" #~ msgstr "ugyldig vrdi (%s) til tilvalget -mfpmath=" #~ msgid "`%s' attribute requires an integer constant argument" #~ msgstr "egenskaben '%s' krver en heltalskonstant som parameter" #~ msgid "argument to `%s' attribute larger than %d" #~ msgstr "parameter til egenskaben '%s' er strre end %d" #~ msgid "invalid UNSPEC as operand" #~ msgstr "ugyldig UNSPEC som operand" #~ msgid "extended registers have no high halves" #~ msgstr "udvidede registre har ikke hje halvdele" #~ msgid "unsupported operand size for extended register" #~ msgstr "ikke-understttet operandstrrelse for udvidede registre" #~ msgid "operand is neither a constant nor a condition code, invalid operand code 'c'" #~ msgstr "operand er hverken en konstant eller en betingelseskode, ugyldig operandkode 'c'" #~ msgid "invalid operand code `%c'" #~ msgstr "ugyldig operandkode '%c'" #~ msgid "invalid constraints for operand" #~ msgstr "ugyldige begrnsninger for operand" #~ msgid "unknown insn mode" #~ msgstr "ukendt instruktionstilstand" #~ msgid "selector must be an immediate" #~ msgstr "vlger skal vre en umiddelbar vrdi" #~ msgid "mask must be an immediate" #~ msgstr "maske skal vre en umiddelbar vrdi" #~ msgid "shift must be an immediate" #~ msgstr "skiftevrdi skal vre en umiddelbar vrdi" #~ msgid "`%s' attribute only applies to variables" #~ msgstr "egenskaben '%s' kan kun anvendes p variabler" #~ msgid "`%s' declared as both exported to and imported from a DLL" #~ msgstr "'%s' erklret som bde eksporteret til og importeret fra en DLL" #~ msgid "Use the Cygwin interface" #~ msgstr "Benyt Cygwin-grnsefladen" #~ msgid "Use the Mingw32 interface" #~ msgstr "Benyt Mingw32-grnsefladen" #~ msgid "Create GUI application" #~ msgstr "Opret grafisk program" #~ msgid "Don't set Windows defines" #~ msgstr "Angiv ikke Windows-definitioner" #~ msgid "Set Windows defines" #~ msgstr "Angiv Windows-definitioner" #~ msgid "Create console application" #~ msgstr "Opret konsolprogram" #~ msgid "Generate code for a DLL" #~ msgstr "Generr kode til en DLL" #~ msgid "Ignore dllimport for functions" #~ msgstr "Ignorr dllimport til funktioner" #~ msgid "Use Mingw-specific thread support" #~ msgstr "Benyt Mingw-specifik trdunderstttelse" #~ msgid "-f%s ignored for target (all code is position independent)" #~ msgstr "-f%s ignoreret for mlarkitekturen (all kode er positionsuafhngigt)" #~ msgid "-mbnu210 is ignored (option is obsolete)" #~ msgstr "-mbnu210 ignoreres (tilvalget er forldet)" #~ msgid "Alternate calling convention" #~ msgstr "Alternativ kaldekonvention" #~ msgid "Use normal calling convention" #~ msgstr "Brug normal kaldekonvention" #~ msgid "Align some doubles on dword boundary" #~ msgstr "Justr nogle double-variabler til dword-grnserne" #~ msgid "Align doubles on word boundary" #~ msgstr "Justr double-variabler til word-grnserne" #~ msgid "Uninitialized locals in .bss" #~ msgstr "Lokale variabler uden startvrdi i .bss" #~ msgid "Uninitialized locals in .data" #~ msgstr "Lokale variabler uden startvrdi i .data" #~ msgid "Use IEEE math for fp comparisons" #~ msgstr "Brug IEEE-matematik til kommatalssammenligninger" #~ msgid "Do not use IEEE math for fp comparisons" #~ msgstr "Brug ikke IEEE-matematik til kommatalssammenligninger" #~ msgid "Return values of functions in FPU registers" #~ msgstr "Returnr vrdier fra funktioner i fpu-registre" #~ msgid "Do not return values of functions in FPU registers" #~ msgstr "Returnr ikke vrdier fra funktioner i fpu-registre" #~ msgid "Do not generate sin, cos, sqrt for FPU" #~ msgstr "Generr ikke sin, cos, sqrt til fpu" #~ msgid "Generate sin, cos, sqrt for FPU" #~ msgstr "Generr sin, cos og sqrt til fpu" #~ msgid "Omit the frame pointer in leaf functions" #~ msgstr "Udelad rammehenvisningen i de yderste funktioner" #~ msgid "Enable stack probing" #~ msgstr "Aktivr stakprvning" #~ msgid "Align destination of the string operations" #~ msgstr "Justr strengoperationernes destination" #~ msgid "Do not align destination of the string operations" #~ msgstr "Justr ikke strengoperationernes destination" #~ msgid "Inline all known string operations" #~ msgstr "Indbyg alle kendte strengoperationer" #~ msgid "Do not inline all known string operations" #~ msgstr "Indbyg ikke alle kendte strengoperationer" #~ msgid "Use push instructions to save outgoing arguments" #~ msgstr "Brug push-instruktioner til at gemme udgende parametre" #~ msgid "Do not use push instructions to save outgoing arguments" #~ msgstr "Brug ikke push-instruktioner til at gemme udgende parametre" # shadowing betyder at en funktion har samme navn og dermed skjuler en anden #~ msgid "Support MMX built-in functions" #~ msgstr "Understt indbyggede MMX-funktioner" #~ msgid "Do not support MMX built-in functions" #~ msgstr "Understt ikke indbyggede MMX-funktioner" # shadowing betyder at en funktion har samme navn og dermed skjuler en anden #~ msgid "Support 3DNow! built-in functions" #~ msgstr "Understt indbyggede 3DNow!-funktioner" #~ msgid "Do not support 3DNow! built-in functions" #~ msgstr "Understt ikke indbyggede 3DNow!-funktioner" #~ msgid "Support MMX and SSE built-in functions and code generation" #~ msgstr "Understt indbyggede MMX- og SSE-funktioner og kodegenerering" #~ msgid "Do not support MMX and SSE built-in functions and code generation" #~ msgstr "Understt ikke indbyggede MMX- og SSE-funktioner og kodegenerering" #~ msgid "Support MMX, SSE and SSE2 built-in functions and code generation" #~ msgstr "Understt indbyggede MMX-, SSE- og SSE2-funktioner og kodegenerering" #~ msgid "Do not support MMX, SSE and SSE2 built-in functions and code generation" #~ msgstr "Understt ikke indbyggede MMX-, SSE- og SSE2-funktioner og kodegenerering" #~ msgid "sizeof(long double) is 16" #~ msgstr "sizeof(long double) er 16" #~ msgid "sizeof(long double) is 12" #~ msgstr "sizeof(long double) er 12" #~ msgid "Generate 64bit x86-64 code" #~ msgstr "Generr 64 bit x86-64-kode" #~ msgid "Generate 32bit i386 code" #~ msgstr "Generr 64 bit i386-kode" #~ msgid "Use red-zone in the x86-64 code" #~ msgstr "Benyt rdzone i x86-64-koden" #~ msgid "Do not use red-zone in the x86-64 code" #~ msgstr "Benyt ikke rdzone i x86-64-koden" #~ msgid "Schedule code for given CPU" #~ msgstr "Planlg koden til en given processor" #~ msgid "Generate floating point mathematics using given instruction set" #~ msgstr "Generr kommatalsmatematik vha. givent instruktionsst" #~ msgid "Generate code for given CPU" #~ msgstr "Generr kode til en given processor" #~ msgid "Number of registers used to pass integer arguments" #~ msgstr "Antallet af registre der skal bruges til at overbringe heltalsparametre" #~ msgid "Loop code aligned to this power of 2" #~ msgstr "Lkkekode skal justeres til denne potens af 2" #~ msgid "Jump targets are aligned to this power of 2" #~ msgstr "Steder der skal springes til, justeres til denne potens af 2" #~ msgid "Function starts are aligned to this power of 2" #~ msgstr "Funktionsbegyndelser justeres til denne potens af 2" #~ msgid "Attempt to keep stack aligned to this power of 2" #~ msgstr "Forsg at holde stakken justeret til denne potens af 2" #~ msgid "Branches are this expensive (1-5, arbitrary units)" #~ msgstr "Forgreninger koster dette (1-5, vilkrlige enheder)" #~ msgid "Use given x86-64 code model" #~ msgstr "Benyt den givne x86-64-kodemodel" #~ msgid "Use given assembler dialect" #~ msgstr "Benyt den givne maskinkodedialekt" #~ msgid "Use given thread-local storage dialect" #~ msgstr "Benyt den givne trd-lokale lagringsdialekt" #~ msgid "Generate ELF output" #~ msgstr "Generr ELF-uddata" #~ msgid "Use Mingw32 interface" #~ msgstr "Benyt Mingw32-grnseflade" #~ msgid "Use Cygwin interface" #~ msgstr "Benyt Cygwin-grnseflade" #~ msgid "Use bare Windows interface" #~ msgstr "Benyt bar Windows-grnseflade" #~ msgid "environment variable DJGPP not defined" #~ msgstr "miljvariablen DJGPP er ikke defineret" #~ msgid "environment variable DJGPP points to missing file '%s'" #~ msgstr "miljvariablen DJGPP peger p den manglende fil '%s'" #~ msgid "environment variable DJGPP points to corrupt file '%s'" #~ msgstr "miljvariablen DJGPP peger p den delagte fil '%s'" #~ msgid "sorry, not implemented: #pragma align NAME=SIZE" #~ msgstr "desvrre, ikke implementeret: #pragma align NAVN=STRRELSE" #~ msgid "malformed #pragma align - ignored" #~ msgstr "forkert udformet '#pragma align' - ignoreret" #~ msgid "sorry, not implemented: #pragma noalign NAME" #~ msgstr "desvrre, ikke implementeret: #pragma noalign NAVN" #~ msgid "conflicting architectures defined - using C series" #~ msgstr "modstridende arkitekturer defineret - bruger C-serien" #~ msgid "conflicting architectures defined - using K series" #~ msgstr "modstridende arkitekturer defineret - bruger K-serien" #~ msgid "iC2.0 and iC3.0 are incompatible - using iC3.0" #~ msgstr "iC2.0 og iC3.0 er inkompatible - bruger iC3.0" #~ msgid "stack limit expression is not supported" #~ msgstr "stakgrnseudtryk understttes ikke" #~ msgid "Generate SA code" #~ msgstr "Generr SA-kode" #~ msgid "Generate SB code" #~ msgstr "Generr SB-kode" #~ msgid "Generate KA code" #~ msgstr "Generr KA-kode" #~ msgid "Generate KB code" #~ msgstr "Generr KB-kode" #~ msgid "Generate JA code" #~ msgstr "Generr JA-kode" #~ msgid "Generate JD code" #~ msgstr "Generr JD-kode" #~ msgid "Generate JF code" #~ msgstr "Generr JF-kode" #~ msgid "generate RP code" #~ msgstr "Generr RP-kode" #~ msgid "Generate MC code" #~ msgstr "Generr MC-kode" #~ msgid "Generate CA code" #~ msgstr "Generr CA-kode" #~ msgid "Generate CF code" #~ msgstr "Generr CF-kode" #~ msgid "Use software floating point" #~ msgstr "Benyt softwarekommatal" #~ msgid "Use alternate leaf function entries" #~ msgstr "Benyt alternative elementer til yderste funktioner" #~ msgid "Do not use alternate leaf function entries" #~ msgstr "Benyt ikke alternative elementer til yderste funktioner" #~ msgid "Perform tail call optimization" #~ msgstr "Udfr halekaldsoptimering" #~ msgid "Do not perform tail call optimization" #~ msgstr "Udfr ikke halekaldsoptimering" #~ msgid "Use complex addressing modes" #~ msgstr "Benyt komplekse adresseringstilstande" #~ msgid "Do not use complex addressing modes" #~ msgstr "Benyt ikke komplekse adresseringstilstande" #~ msgid "Align code to 8 byte boundary" #~ msgstr "Justr kode til 8 byte-grnser" #~ msgid "Do not align code to 8 byte boundary" #~ msgstr "Justr ikke kode til 8 byte-grnser" #~ msgid "Enable compatibility with iC960 v2.0" #~ msgstr "Aktivr kompatibilitet med iC960 v2.0" #~ msgid "Enable compatibility with iC960 v3.0" #~ msgstr "Aktivr kompatibilitet med iC960 v3.0" #~ msgid "Enable compatibility with ic960 assembler" #~ msgstr "Aktivr kompatibilitet med ic960-maskinkodeoverstteren" #~ msgid "Do not permit unaligned accesses" #~ msgstr "Tillad ikke ikke-justeret adgang" #~ msgid "Permit unaligned accesses" #~ msgstr "Tillad ikke-justeret adgang" #~ msgid "Layout types like Intel's v1.3 gcc" #~ msgstr "Sammenst typer som Intels v1.3 gcc" #~ msgid "Do not layout types like Intel's v1.3 gcc" #~ msgstr "Sammenst ikke typer som Intels v1.3 gcc" #~ msgid "Use 64 bit long doubles" #~ msgstr "Benyt 64 bit long double" #~ msgid "Enable linker relaxation" #~ msgstr "Aktivr tolerant sammenkder" #~ msgid "Do not enable linker relaxation" #~ msgstr "Aktivr ikke tolerant sammenkder" #~ msgid "malformed #pragma builtin" #~ msgstr "forkert udformet '#pragma builtin'" #~ msgid "ia64_print_operand: unknown code" #~ msgstr "ia64_print_operand: ukendt kode" #~ msgid "value of -mfixed-range must have form REG1-REG2" #~ msgstr "vrdien af -mfixed-range skal vre p formen REG1-REG2" #~ msgid "%s-%s is an empty range" #~ msgstr "%s-%s er et tomt interval" #~ msgid "cannot optimize floating point division for both latency and throughput" #~ msgstr "kan ikke optimere kommatalsdivision for bde ventetid og bndbredde" #~ msgid "cannot optimize integer division for both latency and throughput" #~ msgstr "kan ikke optimere heltalsdivision for bde ventetid og bndbredde" #~ msgid "bad value (%s) for -mtls-size= switch" #~ msgstr "ugyldig vrdi (%s) for tilvalget -mtls-size=" #~ msgid "Generate big endian code" #~ msgstr "Generr storendet kode" #~ msgid "Generate little endian code" #~ msgstr "Generr lilleendet kode" #~ msgid "Generate code for GNU as" #~ msgstr "Generr kode til GNU as" #~ msgid "Generate code for Intel as" #~ msgstr "Generr kode til Intel as" #~ msgid "Generate code for GNU ld" #~ msgstr "Generr kode til GNU ld" #~ msgid "Generate code for Intel ld" #~ msgstr "Generr kode til Intel ld" #~ msgid "Generate code without GP reg" #~ msgstr "Generr kode uden GP-registeret" #~ msgid "Emit stop bits before and after volatile extended asms" #~ msgstr "Udsend stopbit fr og efter volatile udvidede asm-stninger" #~ msgid "Don't emit stop bits before and after volatile extended asms" #~ msgstr "Udsend ikke stopbit fr og efter volatile udvidede asm-stninger" #~ msgid "Emit code for Itanium (TM) processor B step" #~ msgstr "Udsend kode for Itanium (TM) processor B-skridt" #~ msgid "Use in/loc/out register names" #~ msgstr "Benyt in/loc/out-registernavne" #~ msgid "Disable use of sdata/scommon/sbss" #~ msgstr "Deaktivr brug af sdata/scommon/sbss" #~ msgid "Enable use of sdata/scommon/sbss" #~ msgstr "Aktivr brug af sdata/scommon/sbss" #~ msgid "gp is constant (but save/restore gp on indirect calls)" #~ msgstr "gp er konstant (men gem/gendan gp ved indirekte kald)" #~ msgid "Generate self-relocatable code" #~ msgstr "Generr selvflyttende kode" #~ msgid "Generate inline floating point division, optimize for latency" #~ msgstr "Generr indlejrede kommatalsdivisioner, optimr for ventetid" #~ msgid "Generate inline floating point division, optimize for throughput" #~ msgstr "Generr indlejrede kommatalsdivisioner, optimr for bndbredde" #~ msgid "Generate inline integer division, optimize for latency" #~ msgstr "Generr indlejrede heltalsdivisioner, optimr for ventetid" #~ msgid "Generate inline integer division, optimize for throughput" #~ msgstr "Generr indlejrede heltalsdivisioner, optimr for bndbredde" #~ msgid "Enable Dwarf 2 line debug info via GNU as" #~ msgstr "Aktivr Dwarf 2-linjefejlanalyseringsinfo via GNU as" #~ msgid "Disable Dwarf 2 line debug info via GNU as" #~ msgstr "Deaktivr Dwarf 2-linjefejlanalyseringsinfo via GNU as" #~ msgid "Specify range of registers to make fixed" #~ msgstr "Angiv interval af registre der skal gres faste" #~ msgid "bad operand" #~ msgstr "ugyldig operand" #~ msgid "bad value (%s) for -mmodel switch" #~ msgstr "ugyldig vrdi (%s) til tilvalget -mmodel" #~ msgid "bad value (%s) for -msdata switch" #~ msgstr "ugyldig vrdi (%s) til tilvalget -msdata" #~ msgid "invalid argument of `%s' attribute" #~ msgstr "ugyldig parameter til egenskaben '%s'" #~ msgid "const objects cannot go in .sdata/.sbss" #~ msgstr "konstante objekter kan ikke anbringes i .sdata/.sbss" #~ msgid "invalid operand to %%s code" #~ msgstr "ugyldig operand til %%s-koden" #~ msgid "invalid operand to %%p code" #~ msgstr "ugyldig operand til %%p-koden" #~ msgid "bad insn for 'A'" #~ msgstr "ugyldig instruktion for 'A'" #~ msgid "invalid operand to %%T/%%B code" #~ msgstr "ugyldig operand til %%T/%%B-koden" #~ msgid "invalid operand to %%N code" #~ msgstr "ugyldig operand til %%N-koden" #~ msgid "pre-increment address is not a register" #~ msgstr "prfiks forgelsesadresse er ikke et register" #~ msgid "pre-decrement address is not a register" #~ msgstr "prfiks formindskelsesadresse er ikke et register" #~ msgid "post-increment address is not a register" #~ msgstr "postfiks forgelsesadresse er ikke et register" #~ msgid "bad address" #~ msgstr "ugyldig adresse" #~ msgid "lo_sum not of register" #~ msgstr "lo_sum ikke af register" #~ msgid "Display compile time statistics" #~ msgstr "Vis oversttelsesstatistikker" #~ msgid "Align all loops to 32 byte boundary" #~ msgstr "Justr alle lkker til 32 byte-grnserne" #~ msgid "Only issue one instruction per cycle" #~ msgstr "Udfr kun n instruktion pr. cyklus" #~ msgid "Prefer branches over conditional execution" #~ msgstr "Foretrk forgrening frem for betinget udfrelse" #~ msgid "Code size: small, medium or large" #~ msgstr "Kodestrrelse: small, medium eller large" #~ msgid "Small data area: none, sdata, use" #~ msgstr "Omrde til sm data: none, sdata, use" #~ msgid "-f%s ignored for 68HC11/68HC12 (not supported)" #~ msgstr "-f%s ignoreret for 68HC11/68HC12 (ikke understttet)" #~ msgid "`trap' and `far' attributes are not compatible, ignoring `far'" #~ msgstr "egenskaberne 'trap' og 'far' kan ikke bruges p samme tid, ignorerer 'far'" #~ msgid "`trap' attribute is already used" #~ msgstr "egenskaben 'trap' er allerede benyttet" #~ msgid "move insn not handled" #~ msgstr "flytteinstruktion ikke hndteret" #~ msgid "invalid register in the move instruction" #~ msgstr "ugyldigt register i flytteinstruktionen" #~ msgid "invalid operand in the instruction" #~ msgstr "ugyldig operand i instruktionen" #~ msgid "invalid register in the instruction" #~ msgstr "ugyldigt register i instruktionen" #~ msgid "operand 1 must be a hard register" #~ msgstr "operand 1 skal vre et hrdt register" #~ msgid "invalid rotate insn" #~ msgstr "ugyldig roteringsinstruktion" #~ msgid "registers IX, IY and Z used in the same INSN" #~ msgstr "registrene IX, IY og Z benyttet i samme INSN" #~ msgid "cannot do z-register replacement" #~ msgstr "kan ikke udfre Z-registererstatning" #~ msgid "invalid Z register replacement for insn" #~ msgstr "ugyldig Z-registererstatning for instruktion" #~ msgid "Compile with 16-bit integer mode" #~ msgstr "Overst med 16 bit-heltalstilstand" #~ msgid "Compile with 32-bit integer mode" #~ msgstr "Overst med 32 bit-heltalstilstand" #~ msgid "Auto pre/post decrement increment allowed" #~ msgstr "Selvformindskelse tilladt" #~ msgid "Auto pre/post decrement increment not allowed" #~ msgstr "Selvforgelse ikke tilladt" #~ msgid "Min/max instructions allowed" #~ msgstr "Min/max-instruktioner tilladt" #~ msgid "Min/max instructions not allowed" #~ msgstr "Min/max-instruktioner ikke tilladt" #~ msgid "Use call and rtc for function calls and returns" #~ msgstr "Benyt call og rtc til funktionskald og returneringer" #~ msgid "Use jsr and rts for function calls and returns" #~ msgstr "Benyt jsr og rts til funktionskald og returneringer" #~ msgid "Do not use direct addressing mode for soft registers" #~ msgstr "Benyt ikke direkte adresseringstilstand til blde registre" #~ msgid "Use direct addressing mode for soft registers" #~ msgstr "Benyt direkte adresseringstilstand til blde registre" #~ msgid "Compile for a 68HC11" #~ msgstr "Overst til en 68HC11" #~ msgid "Compile for a 68HC12" #~ msgstr "Overst til en 68HC12" #~ msgid "Compile for a 68HCS12" #~ msgstr "Overst til en 68HCS12" #~ msgid "Specify the register allocation order" #~ msgstr "Angiv registerallokeringsordnen" #~ msgid "Indicate the number of soft registers available" #~ msgstr "Angiv antallet af blde registre der er til rdighed" #~ msgid "-malign-loops=%d is not between 1 and %d" #~ msgstr "-malign-loops=%d er ikke mellem 1 og %d" #~ msgid "-malign-jumps=%d is not between 1 and %d" #~ msgstr "-malign-jumps=%d er ikke mellem 1 og %d" #~ msgid "-malign-functions=%d is not between 1 and %d" #~ msgstr "-malign-functions=%d er ikke mellem 1 og %d" #~ msgid "-fPIC is not currently supported on the 68000 or 68010\n" #~ msgstr "-fPIC understttes ikke p nuvrende tidspunkt p 68000 og 68010\n" #~ msgid "Generate code for a 68020" #~ msgstr "Generr kode til en 68020" #~ msgid "Generate code for a 68000" #~ msgstr "Generr kode til en 68000" #~ msgid "Use the bit-field instructions" #~ msgstr "Benyt bitfeltinstruktionerne" #~ msgid "Do not use the bit-field instructions" #~ msgstr "Benyt ikke bitfeltinstruktionerne" #~ msgid "Use different calling convention using 'rtd'" #~ msgstr "Benyt anden kaldekonvention vha. 'rtd'" #~ msgid "Consider type `int' to be 16 bits wide" #~ msgstr "Lad typen 'int' vre 16 bit bred" #~ msgid "Consider type `int' to be 32 bits wide" #~ msgstr "Lad typen 'int' vre 32 bit bred" #~ msgid "Generate code for a Sun FPA" #~ msgstr "Generr kode til en Sun FPA" #~ msgid "Do not generate code for a Sun FPA" #~ msgstr "Generr ikke kode til en Sun FPA" #~ msgid "Generate code for a Sun Sky board" #~ msgstr "Generr kode til et Sun Sky-kort" #~ msgid "Do not use Sky linkage convention" #~ msgstr "Benyt ikke Sky-kdningskonventionen" #~ msgid "Generate code for a 68881" #~ msgstr "Generr kode til en 68881" #~ msgid "Generate code with library calls for floating point" #~ msgstr "Generr kode med bibliotekskald for kommatalsoperationer" #~ msgid "Generate code for a 68040, without any new instructions" #~ msgstr "Generr kode til en 68040 uden nogen nye instruktioner" #~ msgid "Generate code for a 68060, without any new instructions" #~ msgstr "Generr kode til en 68060 uden nogen nye instruktioner" #~ msgid "Generate code for a 68030" #~ msgstr "Generr kode til en 68030" #~ msgid "Generate code for a 68040" #~ msgstr "Generr kode til en 68040" #~ msgid "Generate code for a 68060" #~ msgstr "Generr kode til en 68060" #~ msgid "Generate code for a 520X" #~ msgstr "Generr kode til en 520X" #~ msgid "Generate code for a 68851" #~ msgstr "Generr kode til en 68851" #~ msgid "Do no generate code for a 68851" #~ msgstr "Generr ikke kode til en 68851" #~ msgid "Generate code for a 68302" #~ msgstr "Generr kode til en 68302" #~ msgid "Generate code for a 68332" #~ msgstr "Generr kode til en 68332" #~ msgid "Generate code for a cpu32" #~ msgstr "Generr kode til en cpu32" #~ msgid "Align variables on a 32-bit boundary" #~ msgstr "Justr variabler til 32 bit-grnserne" #~ msgid "Align variables on a 16-bit boundary" #~ msgstr "Justr variabler til 16 bit-grnserne" #~ msgid "Generate pc-relative code" #~ msgstr "Generr pc-relativ kode" #~ msgid "Do not use unaligned memory references" #~ msgstr "Benyt ikke ikke-justerede hukommelsesreferencer" #~ msgid "Use unaligned memory references" #~ msgstr "Benyt ikke-justerede hukommelsesreferencer" #~ msgid "internal gcc monitor: short-branch(%x)" #~ msgstr "intern GCC-overvgning: short-branch(%x)" #~ msgid "internal gcc error: Can't express symbolic location" #~ msgstr "intern GCC-fejl: Kan ikke udtrykke symbolsk placering" #~ msgid "argument #%d is a structure" #~ msgstr "%d. parameter er en struktur" #~ msgid "%%R not followed by %%B/C/D/E" #~ msgstr "%%R efterflges ikke af %%B/C/D/E" #~ msgid "invalid %%x/X value" #~ msgstr "ugyldig %%x/X-vrdi" #~ msgid "invalid %%Q value" #~ msgstr "ugyldig %%Q-vrdi" #~ msgid "invalid %%q value" #~ msgstr "ugyldig %%q-vrdi" #~ msgid "invalid %%o value" #~ msgstr "ugyldig %%o-vrdi" #~ msgid "invalid %%p value" #~ msgstr "ugyldig %%p-vrdi" #~ msgid "invalid %%s/S value" #~ msgstr "ugyldig %%s/S-vrdi" #~ msgid "invalid %%P operand" #~ msgstr "ugyldig %%P-operand" #~ msgid "invalid %%B value" #~ msgstr "ugyldig %%B-vrdi" #~ msgid "invalid %%D value" #~ msgstr "ugyldig %%D-vrdi" #~ msgid "`%%d' operand isn't a register" #~ msgstr "operanden '%%d' er ikke et register" #~ msgid "operand is r0" #~ msgstr "operanden er r0" #~ msgid "operand is const_double" #~ msgstr "operanden er const_double" #~ msgid "invalid code" #~ msgstr "ugyldig kode" #~ msgid "-mtrap-large-shift and -mhandle-large-shift are incompatible" #~ msgstr "-mtrap-large-shift og -mhandle-large-shift er indbyrdes uforenelige" #~ msgid "invalid option `-mshort-data-%s'" #~ msgstr "ugyldigt tilvalg '-mshort-data-%s'" #~ msgid "-mshort-data-%s is too large " #~ msgstr "-mshort-data-%s er for stor" #~ msgid "-mshort-data-%s and PIC are incompatible" #~ msgstr "-mshort-data-%s og PIC er indbyrdes uforenelige" #~ msgid "invalid option `-mstack-increment=%s'" #~ msgstr "ugyldigt tilvalg '-mshort-increment=%s'" #~ msgid "Inline constants if it can be done in 2 insns or less" #~ msgstr "Indlejr konstanter hvis det kan gres med 2 instruktioner eller mindre" #~ msgid "Inline constants if it only takes 1 instruction" #~ msgstr "Indlejr konstanter hvis det kan gres med 1 instruktion" #~ msgid "Set maximum alignment to 4" #~ msgstr "St maksimal justering til 4" #~ msgid "Set maximum alignment to 8" #~ msgstr "St maksimal justering til 8" #~ msgid "Do not use the divide instruction" #~ msgstr "Benyt ikke divisionsinstruktionen" #~ msgid "Do not arbitrary sized immediates in bit operations" #~ msgstr "Benyt ikke vilkrlige strrelsers umiddelbare vrdier i bitoperationer" #~ msgid "Always treat bit-field as int-sized" #~ msgstr "Behandl altid bitfelter som af strrelsen int" #~ msgid "Force functions to be aligned to a 4 byte boundary" #~ msgstr "Tving funktioner til at blive justeret til en 4 byte-grnse" #~ msgid "Force functions to be aligned to a 2 byte boundary" #~ msgstr "Tving funktioner til at blive justeret til en 2 byte-grnse" #~ msgid "Emit call graph information" #~ msgstr "Udsend kaldegrafinfo" #~ msgid "Prefer word accesses over byte accesses" #~ msgstr "Foretrk ord-tilgange frem for byte-tilgange" #~ msgid "Generate code for the M*Core M340" #~ msgstr "Generr kode til en M*Core M340" #~ msgid "Maximum amount for a single stack increment operation" #~ msgstr "Maksimalt antal for en enkelt stakforgelsesoperation" #~ msgid "bad value (%s) for -mabi= switch" #~ msgstr "ugyldig vrdi (%s) til tilvalget -mabi=" #~ msgid "-mips%d conflicts with the other architecture options, which specify a MIPS%d processor" #~ msgstr "-mips%d er i konflikt med de andre arkitekturtilvalg som angiver en MIPS%d-processor" #~ msgid "bad value (%s) for -mips switch" #~ msgstr "ugyldig vrdi (%s) til tilvalget -mips" #~ msgid "-march=%s is not compatible with the selected ABI" #~ msgstr "-march=%s er ikke forenelig med den valgte ABI" #~ msgid "-mgp64 used with a 32-bit processor" #~ msgstr "-mgp64 benyttet med en 32 bit-processor" #~ msgid "-mgp32 used with a 64-bit ABI" #~ msgstr "-mgp32 benyttet med et 64 bit-ABI" #~ msgid "-mgp64 used with a 32-bit ABI" #~ msgstr "-mgp64 benyttet med et 32 bit-ABI" #~ msgid "unsupported combination: %s" #~ msgstr "ikke-understttet kombination: %s" #~ msgid "generation of Branch Likely instructions enabled, but not supported by architecture" #~ msgstr "generering af Branch Likely-instruktioner er aktiveret, men ikke understttet af arkitekturen" #~ msgid "-G is incompatible with PIC code which is the default" #~ msgstr "-G er uforenelig med PIC-kode som genereres som standard" #~ msgid "-membedded-pic and -mabicalls are incompatible" #~ msgstr "-membedded-pic og -mabicalls er indbyrdes uforenelige" #~ msgid "-G and -membedded-pic are incompatible" #~ msgstr "-G og -membedded-pic er indbyrdes uforenelige" #~ msgid "invalid option `entry%s'" #~ msgstr "ugyldigt tilvalg 'entry%s'" #~ msgid "-mentry is only meaningful with -mips-16" #~ msgstr "-mentry giver kun mening sammen med -mips-16" #~ msgid "internal error: %%) found without a %%( in assembler pattern" #~ msgstr "intern fejl: %%) fundet uden en %%) i maskinkodeoversttermnster" #~ msgid "internal error: %%] found without a %%[ in assembler pattern" #~ msgstr "intern fejl: %%] fundet uden en %%[ i maskinkodeoversttermnster" #~ msgid "internal error: %%> found without a %%< in assembler pattern" #~ msgstr "intern fejl: %%> fundet uden en %%< i maskinkodeoversttermnster" #~ msgid "internal error: %%} found without a %%{ in assembler pattern" #~ msgstr "intern fejl: %%} fundet uden en %%{ i maskinkodeoversttermnster" #~ msgid "PRINT_OPERAND: unknown punctuation '%c'" #~ msgstr "PRINT_OPERAND: ukendt tegnstning '%c'" #~ msgid "PRINT_OPERAND null pointer" #~ msgstr "PRINT_OPERAND nul-henvisning" #~ msgid "invalid use of %%d, %%x, or %%X" #~ msgstr "ugyldigt brug af %%d, %%x eller %%X" #~ msgid "PRINT_OPERAND_ADDRESS, null pointer" #~ msgstr "PRINT_OPERAND_ADDRESS, nul-henvisning" #~ msgid "MIPS ECOFF format does not allow changing filenames within functions with #line" #~ msgstr "MIPS ECOFF-formatet tillader ikke skift af filnavne inden i funktioner med #line" #~ msgid "can't rewind temp file" #~ msgstr "kan ikke spole midlertidig fil tilbage" #~ msgid "can't write to output file" #~ msgstr "kan ikke skrive i uddatafil" #~ msgid "can't read from temp file" #~ msgstr "kan ikke lse fra midlertidig fil" #~ msgid "can't close temp file" #~ msgstr "kan ikke lukke midlertidig fil" #~ msgid "gp_offset (%ld) or end_offset (%ld) is less than zero" #~ msgstr "gp_offset (%ld) eller end_offset (%ld) er mindre end nul" #~ msgid "fp_offset (%ld) or end_offset (%ld) is less than zero" #~ msgstr "fp_offset (%ld) eller end_offset (%ld) er mindre end nul" #~ msgid "can not handle inconsistent calls to `%s'" #~ msgstr "kan ikke hndtere inkonsistente kald af '%s'" #~ msgid "the cpu name must be lower case" #~ msgstr "processornavnet skal staves med sm bogstaver" #~ msgid "bad value (%s) for %s" #~ msgstr "ugyldig vrdi (%s) for %s" #~ msgid "No default crt0.o" #~ msgstr "Ingen standard crt0.o" #~ msgid "Use 64-bit int type" #~ msgstr "Benyt 64 bit int-type" #~ msgid "Use 64-bit long type" #~ msgstr "Benyt 64 bit long-type" #~ msgid "Use 32-bit long type" #~ msgstr "Benyt 32 bit long-type" #~ msgid "Optimize lui/addiu address loads" #~ msgstr "Optimr lui/addiu-adresseindlsninger" #~ msgid "Don't optimize lui/addiu address loads" #~ msgstr "Optimr ikke lui/addiu-adresseindlsninger" # 'as' str for assembler #~ msgid "Use MIPS as" #~ msgstr "Benyt MIPS as" #~ msgid "Use GNU as" #~ msgstr "Benyt GNU as" #~ msgid "Use symbolic register names" #~ msgstr "Benyt symbolske registernavne" #~ msgid "Don't use symbolic register names" #~ msgstr "Benyt ikke symbolske registernavne" #~ msgid "Use GP relative sdata/sbss sections" #~ msgstr "Benyt GP-relative sdata/sbss-sektioner" #~ msgid "Don't use GP relative sdata/sbss sections" #~ msgstr "Benyt ikke GP-relative sdata/sbss-sektioner" #~ msgid "Output compiler statistics" #~ msgstr "Udsend oversttelsesstatistik" #~ msgid "Don't output compiler statistics" #~ msgstr "Udsend ikke oversttelsesstatistik" #~ msgid "Don't optimize block moves" #~ msgstr "Optimr ikke blokflytninger" #~ msgid "Optimize block moves" #~ msgstr "Optimr blokflytninger" #~ msgid "Use mips-tfile asm postpass" #~ msgstr "Benyt mips-tfile-maskinkodeefterfase" #~ msgid "Don't use mips-tfile asm postpass" #~ msgstr "Benyt ikke mips-tfile-maskinkodeefterfase" #~ msgid "Use hardware floating point" #~ msgstr "Benyt hardware-kommatal" #~ msgid "Use 64-bit FP registers" #~ msgstr "Benyt 64 bit-kommatalsregistre" #~ msgid "Use 32-bit FP registers" #~ msgstr "Benyt 32 bit-kommatalsregistre" #~ msgid "Use 64-bit general registers" #~ msgstr "Benyt 64 bit almene registre" #~ msgid "Use 32-bit general registers" #~ msgstr "Benyt 32 bit almene registre" #~ msgid "Use Irix PIC" #~ msgstr "Benyt Irix PIC" #~ msgid "Don't use Irix PIC" #~ msgstr "Benyt ikke Irix PIC" #~ msgid "Use indirect calls" #~ msgstr "Benyt indirekte kald" #~ msgid "Don't use indirect calls" #~ msgstr "Benyt ikke indirekte kald" #~ msgid "Use embedded PIC" #~ msgstr "Benyt indlejret PIC" #~ msgid "Don't use embedded PIC" #~ msgstr "Benyt ikke indlejret PIC" #~ msgid "Use ROM instead of RAM" #~ msgstr "Benyt ROM i stedet for RAM" #~ msgid "Don't use ROM instead of RAM" #~ msgstr "Benyt ikke ROM i stedet for RAM" #~ msgid "Put uninitialized constants in ROM (needs -membedded-data)" #~ msgstr "Anbring konstanter uden startvrdi i ROM (behver -membedded-data)" #~ msgid "Don't put uninitialized constants in ROM" #~ msgstr "Anbring ikke konstanter uden startvrdi i ROM" #~ msgid "Use big-endian byte order" #~ msgstr "Benyt storendet byteordning" #~ msgid "Use little-endian byte order" #~ msgstr "Benyt lilleendet byteordning" #~ msgid "Use single (32-bit) FP only" #~ msgstr "Benyt kun enkeltprcisions (32 bit) kommatal" #~ msgid "Don't use single (32-bit) FP only" #~ msgstr "Benyt ikke kun enkeltprcisions (32 bit) kommatal" # hvad s det er... #~ msgid "Use multiply accumulate" #~ msgstr "Benyt multiplikationsakkumulering" #~ msgid "Don't use multiply accumulate" #~ msgstr "Benyt ikke multiplikationsakkumulering" #~ msgid "Don't generate fused multiply/add instructions" #~ msgstr "Generr ikke sammensatte gang/addr-instruktioner" #~ msgid "Generate fused multiply/add instructions" #~ msgstr "Generr sammensatte gang/addr-instruktioner" #~ msgid "Work around early 4300 hardware bug" #~ msgstr "Arbejd rundt om tidlig 4300-hardwarefejl" #~ msgid "Don't work around early 4300 hardware bug" #~ msgstr "Arbejd ikke rundt om tidlig 4300-hardwarefejl" #~ msgid "Trap on integer divide by zero" #~ msgstr "Forrsag undtagelse ved heltalsdivision med nul" #~ msgid "Don't trap on integer divide by zero" #~ msgstr "Forrsag ikke undtagelse ved heltalsdivision med nul" #~ msgid "Trap on integer divide overflow" #~ msgstr "Forrsag undtagelse ved heltalsdivisionsoverlb" #~ msgid "Don't trap on integer divide overflow" #~ msgstr "Forrsag ikke undtagelse ved heltalsdivisionsoverlb" #~ msgid "Use Branch Likely instructions, overriding default for arch" #~ msgstr "Benyt Branch Likely-instruktioner, overskrivende forvalget for arkitektur" #~ msgid "Don't use Branch Likely instructions, overriding default for arch" #~ msgstr "Benyt ikke Branch Likely-instruktioner, overskrivende forvalget for arkitektur" #~ msgid "Specify CPU for scheduling purposes" #~ msgstr "Angiv processor til planlgningsforml" #~ msgid "Specify CPU for code generation purposes" #~ msgstr "Angiv processor til kodegenereringsforml" #~ msgid "Specify an ABI" #~ msgstr "Angiv en ABI" #~ msgid "Specify a Standard MIPS ISA" #~ msgstr "Angiv en Standard MIPS ISA" #~ msgid "Use mips16 entry/exit psuedo ops" #~ msgstr "Benyt MIPS16-indtrdelse-/afslutningspseudooperationer" #~ msgid "Don't use MIPS16 instructions" #~ msgstr "Benyt ikke MIPS16-instruktioner" #~ msgid "Don't call any cache flush functions" #~ msgstr "Kald ikke nogen mellemlagertmningsfunktion" #~ msgid "Specify cache flush function" #~ msgstr "Angiv mellemlagertmningsfunktion" #~ msgid "mips16 function profiling" #~ msgstr "MIPS16-funktionsprofilering" #~ msgid "-f%s not supported: ignored" #~ msgstr "-f%s er ikke understttet: ignoreret" #~ msgid "too large function value type, needs %d registers, have only %d registers for this" #~ msgstr "for stor funktionsvrditype, behver %d registre, har kun %d registre til dette" #~ msgid "function_profiler support for MMIX" #~ msgstr "function_profiler-understttelse for MMIX" #~ msgid "MMIX Internal: Last named vararg would not fit in a register" #~ msgstr "MMIX-intern: Sidst navngivne variabel parameter kan ikke passes i et register" #~ msgid "MMIX Internal: Expected a CONST_INT, not this" #~ msgstr "MMIX-intern: Forventede en CONST_INT, ikke dette" #~ msgid "MMIX Internal: Bad register: %d" #~ msgstr "MMIX-intern: Ugyldigt register: %d" #~ msgid "MMIX Internal: Bad value for 'm', not a CONST_INT" #~ msgstr "MMIX-intern: Ugyldigt vrdi for 'm', ikke en CONST_INT" #~ msgid "MMIX Internal: Expected a register, not this" #~ msgstr "MMIX-intern: Forventede et register, ikke dette" #~ msgid "MMIX Internal: Expected a constant, not this" #~ msgstr "MMIX-intern: Forventede en konstant, ikke dette" #~ msgid "MMIX Internal: Missing `%c' case in mmix_print_operand" #~ msgstr "MMIX-intern: Mangler '%c'-case i mmix_print_operand" #~ msgid "MMIX Internal: Cannot decode this operand" #~ msgstr "MMIX-intern: Kan ikke dekode denne operand" #~ msgid "MMIX Internal: This is not a recognized address" #~ msgstr "MMIX-intern: Dette er ikke en genkendt adresse" #~ msgid "stack frame not a multiple of 8 bytes: %d" #~ msgstr "stakramme ikke et produkt af 8 byte: %d" #~ msgid "stack frame not a multiple of octabyte: %d" #~ msgstr "stakramme ikke et produkt af 8 byte: %d" #~ msgid "MMIX Internal: %s is not a shiftable int" #~ msgstr "MMIX-intern: %s er ikke en int der kan skiftes" #~ msgid "MMIX Internal: Trying to output invalidly reversed condition:" #~ msgstr "MMIX-intern: Forsger at udskrive ugyldigt omvendt betingelse:" #~ msgid "MMIX Internal: What's the CC of this?" #~ msgstr "MMIX-intern: Hvad er CC af dette?" #~ msgid "MMIX Internal: What is the CC of this?" #~ msgstr "MMIX-intern: Hvad er CC af dette?" #~ msgid "MMIX Internal: This is not a constant:" #~ msgstr "MMIX-intern: Dette er ikke en konstant:" #~ msgid "Set start-address of the program" #~ msgstr "Angiv startadressen for programmet" #~ msgid "Set start-address of data" #~ msgstr "Angiv startadressen for data" #~ msgid "For intrinsics library: pass all parameters in registers" #~ msgstr "For indbyggede biblioteker: overbring alle parametre i registre" #~ msgid "Use register stack for parameters and return value" #~ msgstr "Benyt registerstakken til parametre og returvrdier" #~ msgid "Use call-clobbered registers for parameters and return value" #~ msgstr "Benyt kaldeoptagne registre til parametre og returvrdier" #~ msgid "Use epsilon-respecting floating point compare instructions" #~ msgstr "Benyt epsilon-respekterende instruktioner til kommatalssammenligning" #~ msgid "Use zero-extending memory loads, not sign-extending ones" #~ msgstr "Benyt nul-udvidende hukommelsesindlsninger, ikke fortegnsudvidende" #~ msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)" #~ msgstr "Generr divisionsresultater med rest som har det samme fortegn som nvneren (ikke tlleren)" #~ msgid "Prepend global symbols with \":\" (for use with PREFIX)" #~ msgstr "Tilfj \":\" til starten af globale symboler (til brug sammen med PREFIX)" #~ msgid "Do not provide a default start-address 0x100 of the program" #~ msgstr "Tilbyd ikke standardstartadressen 0x100 for programmet" #~ msgid "Link to emit program in ELF format (rather than mmo)" #~ msgstr "Lad sammenkdningen udsende programmet i ELF-format (i stedet for mmo)" #~ msgid "Use P-mnemonics for branches statically predicted as taken" #~ msgstr "Benyt P-aliaser for forgreninger som statistisk forudses at blive taget" #~ msgid "Don't use P-mnemonics for branches" #~ msgstr "Benyt ikke P-aliaser for forgreninger" #~ msgid "Use addresses that allocate global registers" #~ msgstr "Benyt adresser der allokerer globale registre" #~ msgid "Do not use addresses that allocate global registers" #~ msgstr "Benyt ikke adresser der allokerer globale registre" #~ msgid "Generate a single exit point for each function" #~ msgstr "Generr et enkelt afslutningspunkt for hver funktion" #~ msgid "Do not generate a single exit point for each function" #~ msgstr "Generr ikke et enkelt afslutningspunkt for hver funktion" #~ msgid "Work around hardware multiply bug" #~ msgstr "Arbejd omkring hardware-multiplikationsfejl" #~ msgid "Do not work around hardware multiply bug" #~ msgstr "Arbejd ikke omkring hardware-multiplikationsfejl" #~ msgid "Target the AM33 processor" #~ msgstr "Mlret mod AM33-processoren" #~ msgid "Enable linker relaxations" #~ msgstr "Aktivr tolerant sammenkdning" #~ msgid "Don't use hardware fp" #~ msgstr "Benyt ikke hardware-kommatal" #~ msgid "Alternative calling convention" #~ msgstr "Alternativ kaldekonvention" #~ msgid "Pass some arguments in registers" #~ msgstr "Overbring nogle parametre i registre" #~ msgid "Pass all arguments on stack" #~ msgstr "Overbring alle parametre p stakken" #~ msgid "Optimize for 32532 cpu" #~ msgstr "Optimr for en 32532-processor" #~ msgid "Optimize for 32332 cpu" #~ msgstr "Optimr for en 32332-processor" #~ msgid "Optimize for 32032" #~ msgstr "Optimr for en 32032-processor" #~ msgid "Register sb is zero. Use for absolute addressing" #~ msgstr "Registeret 'sb' er nul; benyt til absolut adressering" #~ msgid "Do not use register sb" #~ msgstr "Benyt ikke registeret 'sb'" #~ msgid "Use bit-field instructions" #~ msgstr "Benyt bitfeltinstruktioner" #~ msgid "Do not use bit-field instructions" #~ msgstr "Benyt ikke bitfeltinstruktioner" #~ msgid "Generate code for high memory" #~ msgstr "Generr kode til hj hukommelse" #~ msgid "Generate code for low memory" #~ msgstr "Generr kode til lav hukommelse" #~ msgid "32381 fpu" #~ msgstr "32381-fpu" #~ msgid "Use multiply-accumulate fp instructions" #~ msgstr "Benyt kommatalsinstruktioner til multiplikationsakkumulering" #~ msgid "Do not use multiply-accumulate fp instructions" #~ msgstr "Benyt ikke kommatalsinstruktioner til multiplikationsakkumulering" #~ msgid "\"Small register classes\" kludge" #~ msgstr "\"Sm registerklasser\"-lapning" #~ msgid "No \"Small register classes\" kludge" #~ msgstr "Ingen \"Sm registerklasser\"-lapning" #~ msgid "" #~ "unknown -mschedule= option (%s).\n" #~ "Valid options are 700, 7100, 7100LC, 7200, 7300, and 8000\n" #~ msgstr "" #~ "ukendt parameter til -mschedule= (%s).\n" #~ "Gyldige parametre er 700, 7100, 7100LC, 7200, 7300 og 8000\n" #~ msgid "" #~ "unknown -march= option (%s).\n" #~ "Valid options are 1.0, 1.1, and 2.0\n" #~ msgstr "" #~ "ukendt parameter til -march= (%s).\n" #~ "Gyldige parametre er 1.0, 1.1 og 2.0\n" #~ msgid "PIC code generation is not supported in the portable runtime model\n" #~ msgstr "PIC-kodegenerering er ikke understttet i den portable krselsmodel\n" #~ msgid "PIC code generation is not compatible with fast indirect calls\n" #~ msgstr "PIC-kodegenerering er ikke kompatibel med hurtige indirekte kald\n" #~ msgid "-g is only supported when using GAS on this processor," #~ msgstr "-g er kun understttet ved brug af GAS p denne processor," #~ msgid "-g option disabled" #~ msgstr "tilvalget -g deaktiveret" #~ msgid "Generate cpp defines for server IO" #~ msgstr "Generr CPP-defineringer til server-IO" #~ msgid "Generate cpp defines for workstation IO" #~ msgstr "Generr CPP-defineringer til arbejdsstation-IO" #~ msgid "Generate PA1.1 code" #~ msgstr "Generr PA1.1-kode" #~ msgid "Generate PA1.0 code" #~ msgstr "Generr PA1.0-kode" #~ msgid "Generate PA2.0 code (requires binutils 2.10 or later)" #~ msgstr "Generr PA2.0-kode (krver binutils 2.10 eller nyere)" #~ msgid "Disable FP regs" #~ msgstr "Deaktivr kommatalsregistre" #~ msgid "Do not disable FP regs" #~ msgstr "Deaktivr ikke kommatalsregistre" #~ msgid "Disable space regs" #~ msgstr "Deaktivr pladsregistre" #~ msgid "Do not disable space regs" #~ msgstr "Deaktivr ikke pladsregistre" #~ msgid "Put jumps in call delay slots" #~ msgstr "Anbring spring p kaldeventetidspladser" #~ msgid "Do not put jumps in call delay slots" #~ msgstr "Anbring ikke spring p kaldeventetidspladser" #~ msgid "Disable indexed addressing" #~ msgstr "Deaktivr indekseret adressering" #~ msgid "Do not disable indexed addressing" #~ msgstr "Deaktivr ikke indekseret adressering" #~ msgid "Use portable calling conventions" #~ msgstr "Benyt portable kaldekonventioner" #~ msgid "Do not use portable calling conventions" #~ msgstr "Benyt ikke portable kaldekonventioner" #~ msgid "Assume code will be assembled by GAS" #~ msgstr "Antag at koden bliver oversat af GAS" #~ msgid "Do not assume code will be assembled by GAS" #~ msgstr "Antag ikke at koden bliver oversat af GAS" #~ msgid "Do not use software floating point" #~ msgstr "Benyt ikke softwarekommatal" #~ msgid "Emit long load/store sequences" #~ msgstr "Udsend lange load/store-sekvenser" #~ msgid "Do not emit long load/store sequences" #~ msgstr "Udsend ikke lange load/store-sekvenser" #~ msgid "Generate fast indirect calls" #~ msgstr "Generr hurtige indirekte kald" #~ msgid "Do not generate fast indirect calls" #~ msgstr "Generr ikke hurtige indirekte kald" #~ msgid "Generate code for huge switch statements" #~ msgstr "Generr kode til store switch-stninger" #~ msgid "Do not generate code for huge switch statements" #~ msgstr "Generr ikke kode til store switch-stninger" #~ msgid "Always generate long calls" #~ msgstr "Generr altid lange kalde" #~ msgid "Generate long calls only when needed" #~ msgstr "Generr kun lange kalde nr det er ndvendigt" #~ msgid "Enable linker optimizations" #~ msgstr "Aktivr sammenkderoptimeringer" #~ msgid "Specify architecture for code generation. Values are 1.0, 1.1, and 2.0. 2.0 requires gas snapshot 19990413 or later." #~ msgstr "Angiv arkitekturen for kodegenerering. Mulige vrdier er 1.0, 1.1 og 2.0. 2.0 krver GAS-snapshot 19990413 eller senere." #~ msgid "Assume code will be linked by GNU ld" #~ msgstr "Antag at kode vil blive sammenkdet med GNU ld" #~ msgid "Assume code will be linked by HP ld" #~ msgstr "Antag at kode vil blive sammenkdet med HP ld" #~ msgid "Do not use hardware floating point" #~ msgstr "Benyt ikke hardware-kommatal" #~ msgid "Return floating point results in ac0" #~ msgstr "Returnr kommatalsresultater i ac0" #~ msgid "Return floating point results in memory" #~ msgstr "Returnr kommatalsresultater i hukommelse" #~ msgid "Generate code for an 11/40" #~ msgstr "Generr kode til en 11/40" #~ msgid "Generate code for an 11/45" #~ msgstr "Generr kode til en 11/45" #~ msgid "Generate code for an 11/10" #~ msgstr "Generr kode til en 11/10" #~ msgid "Use 32 bit int" #~ msgstr "Benyt 32 bit int" #~ msgid "Use 16 bit int" #~ msgstr "Benyt 16 bit int" #~ msgid "Use 32 bit float" #~ msgstr "Benyt 32 bit float" #~ msgid "Use 64 bit float" #~ msgstr "Benyt 64 bit float" #~ msgid "Target has split I&D" #~ msgstr "Mlarkitektur har delt I&D" #~ msgid "Target does not have split I&D" #~ msgstr "Mlarkitektur har ikke delt I&D" #~ msgid "Use UNIX assembler syntax" #~ msgstr "Benyt UNIX-maskinkodesyntaks" #~ msgid "Use DEC assembler syntax" #~ msgstr "Benyt DEC-maskinkodesyntaks" #~ msgid "invalid %%S value" #~ msgstr "ugyldig %%S-vrdi" #~ msgid "invalid %%b value" #~ msgstr "ugyldig %%b-vrdi" #~ msgid "invalid %%z value" #~ msgstr "ugyldig %%z-vrdi" #~ msgid "invalid %%Z value" #~ msgstr "ugyldig %%Z-vrdi" #~ msgid "invalid %%k value" #~ msgstr "ugyldig %%k-vrdi" #~ msgid "invalid %%j value" #~ msgstr "ugyldig %%j-vrdi" #~ msgid "can't have varargs with -mfp-arg-in-fp-regs" #~ msgstr "kan ikke have variable parameterlister med -mfp-arg-in-fp-regs" #~ msgid "ignoring malformed #pragma longcall" #~ msgstr "ignorerer forkert udformet #pragma longcall" #~ msgid "missing open paren" #~ msgstr "manglende startparantes" #~ msgid "missing number" #~ msgstr "manglende tal" #~ msgid "missing close paren" #~ msgstr "manglende slutparantes" #~ msgid "number must be 0 or 1" #~ msgstr "tal skal enten vre 0 eller 1" #~ msgid "junk at end of #pragma longcall" #~ msgstr "ragelse i slutningen af #pragma longcall" #~ msgid "-mmultiple is not supported on little endian systems" #~ msgstr "-mmultiple er ikke understttet p lilleendede systemer" #~ msgid "-mstring is not supported on little endian systems" #~ msgstr "-mstring er ikke understttet p lilleendede systemer" #~ msgid "unknown -mdebug-%s switch" #~ msgstr "ukendt tilvalg -mdebug-%s" #~ msgid "unknown -mtraceback arg `%s'; expecting `full', `partial' or `none'" #~ msgstr "ukendt parameter '%s' til -mtraceback; forventer 'full', 'partial' eller 'none'" #~ msgid "Unknown switch -mlong-double-%s" #~ msgstr "Ukendt tilvalg -mlong-double-%s" #~ msgid "unknown -misel= option specified: '%s'" #~ msgstr "ukendt tilvalg til -misel= angivet: '%s'" #~ msgid "unknown -mvrsave= option specified: '%s'" #~ msgstr "ukendt tilvalg til -mvrsave= angivet: '%s'" #~ msgid "unknown ABI specified: '%s'" #~ msgstr "ukendt ABI angivet: '%s'" #~ msgid "argument 1 must be a 5-bit signed literal" #~ msgstr "1. parameter skal vre en 5 bit-konstant med fortegn" #~ msgid "argument 2 must be a 5-bit unsigned literal" #~ msgstr "2. parameter skal vre en 5 bit-konstant uden fortegn" #~ msgid "argument 1 of __builtin_altivec_predicate must be a constant" #~ msgstr "1. parameter til __builtin_altivec_predicate skal vre en konstant" #~ msgid "argument 1 of __builtin_altivec_predicate is out of range" #~ msgstr "1. parameter til __builtin_altivec_predicate er uden for det gyldige interval" #~ msgid "argument 3 must be a 4-bit unsigned literal" #~ msgstr "3. parameter skal vre en 4 bit-konstant uden fortegn" #~ msgid "argument to `%s' must be a 2-bit unsigned literal" #~ msgstr "parameter til '%s' skal vre en 2 bit-konstant uden fortegn" #~ msgid "argument to dss must be a 2-bit unsigned literal" #~ msgstr "parameter til dss skal vre en 2 bit-konstant uden fortegn" #~ msgid "argument 1 of __builtin_spe_predicate must be a constant" #~ msgstr "1. parameter til __builtin_spe_predicate skal vre en konstant" #~ msgid "argument 1 of __builtin_spe_predicate is out of range" #~ msgstr "1. parameter til __builtin_spe_predicate er uden for det gyldige interval" #~ msgid "invalid %%f value" #~ msgstr "ugyldig %%f-vrdi" #~ msgid "invalid %%F value" #~ msgstr "ugyldig %%F-vrdi" #~ msgid "invalid %%G value" #~ msgstr "ugyldig %%G-vrdi" #~ msgid "invalid %%j code" #~ msgstr "ugyldig %%j-kode" #~ msgid "invalid %%J code" #~ msgstr "ugyldig %%J-kode" #~ msgid "invalid %%K value" #~ msgstr "ugyldig %%K-vrdi" #~ msgid "invalid %%O value" #~ msgstr "ugyldig %%O-vrdi" #~ msgid "invalid %%T value" #~ msgstr "ugyldig %%T-vrdi" #~ msgid "invalid %%u value" #~ msgstr "ugyldig %%u-vrdi" #~ msgid "invalid %%v value" #~ msgstr "ugyldig %%v-vrdi" #~ msgid "no profiling of 64-bit code for this ABI" #~ msgstr "ingen profilering af 64 bit-kode for denne ABI" #~ msgid "Always pass floating-point arguments in memory" #~ msgstr "Overbring altid kommatalsparametre i hukommelse" #~ msgid "Don't always pass floating-point arguments in memory" #~ msgstr "Overbring ikke altid kommatalsparametre i hukommelse" #~ msgid "Support message passing with the Parallel Environment" #~ msgstr "Understt meddelelsesoverbringelse med Parallel Environment" #~ msgid "Compile for 64-bit pointers" #~ msgstr "Overst for 64 bit-henvisninger" #~ msgid "Compile for 32-bit pointers" #~ msgstr "Overst for 32 bit-henvisninger" #~ msgid "-maix64 and POWER architecture are incompatible" #~ msgstr "-maix64 og POWER-arkitekturen er indbyrdes uforenelige" #~ msgid "-maix64 requires PowerPC64 architecture remain enabled" #~ msgstr "-maix64 krver at PowerPC64-arkitekturen forbliver aktiveret" #~ msgid "-maix64 required: 64-bit computation with 32-bit addressing not yet supported" #~ msgstr "-maix64 pkrvet: 64 bit-beregninger med 32 bit-adressering understttes endnu ikke" #~ msgid "Use POWER instruction set" #~ msgstr "Benyt POWER-instruktionssttet" #~ msgid "Use POWER2 instruction set" #~ msgstr "Benyt POWER2-instruktionssttet" #~ msgid "Do not use POWER2 instruction set" #~ msgstr "Benyt ikke POWER2-instruktionssttet" #~ msgid "Do not use POWER instruction set" #~ msgstr "Benyt ikke POWER-instruktionssttet" #~ msgid "Use PowerPC instruction set" #~ msgstr "Benyt PowerPC-instruktionssttet" #~ msgid "Do not use PowerPC instruction set" #~ msgstr "Benyt ikke PowerPC-instruktionssttet" #~ msgid "Use PowerPC General Purpose group optional instructions" #~ msgstr "Benyt valgfrie instruktioner fra PowerPC General Purpose-gruppen" #~ msgid "Don't use PowerPC General Purpose group optional instructions" #~ msgstr "Benyt ikke valgfrie instruktioner fra PowerPC General Purpose-gruppen" #~ msgid "Use PowerPC Graphics group optional instructions" #~ msgstr "Benyt valgfrie instruktioner fra PowerPC Graphics-gruppen" #~ msgid "Don't use PowerPC Graphics group optional instructions" #~ msgstr "Benyt ikke valgfrie instruktioner fra PowerPC Graphics-gruppen" #~ msgid "Use PowerPC-64 instruction set" #~ msgstr "Benyt PowerPC-64-instruktionssttet" #~ msgid "Don't use PowerPC-64 instruction set" #~ msgstr "Benyt ikke PowerPC-64-instruktionssttet" #~ msgid "Use AltiVec instructions" #~ msgstr "Benyt AltiVec-instruktioner" #~ msgid "Don't use AltiVec instructions" #~ msgstr "Benyt ikke AltiVec-instruktioner" #~ msgid "Use new mnemonics for PowerPC architecture" #~ msgstr "Benyt nye aliaser for PowerPC-arkitekturen" #~ msgid "Use old mnemonics for PowerPC architecture" #~ msgstr "Benyt tidligere aliaser for PowerPC-arkitekturen" #~ msgid "Put everything in the regular TOC" #~ msgstr "Anbring alting i den regulre indholdsfortegnelse" #~ msgid "Place floating point constants in TOC" #~ msgstr "Anbring kommatalskonstanter i indholdsfortegnelsen" #~ msgid "Don't place floating point constants in TOC" #~ msgstr "Anbring ikke kommatalskonstanter i indholdsfortegnelsen" #~ msgid "Place symbol+offset constants in TOC" #~ msgstr "Anbring symbol+afst-konstanter i indholdsfortegnelsen" #~ msgid "Don't place symbol+offset constants in TOC" #~ msgstr "Anbring ikke symbol+afst-konstanter i indholdsfortegnelsen" #~ msgid "Place variable addresses in the regular TOC" #~ msgstr "Anbring variabeladresser i den regulre indholdsfortegnelse" #~ msgid "Generate load/store multiple instructions" #~ msgstr "Generr flere indlsnings-/lagringsinstruktioner" #~ msgid "Do not generate load/store multiple instructions" #~ msgstr "Generr ikke flere indlsnings-/lagringsinstruktioner" #~ msgid "Generate string instructions for block moves" #~ msgstr "Generr strengoperationer til blokflytninger" #~ msgid "Do not generate string instructions for block moves" #~ msgstr "Generr ikke strengoperationer til blokflytninger" #~ msgid "Generate load/store with update instructions" #~ msgstr "Generr indlsning/lagring med opdateringsinstruktioner" #~ msgid "Do not generate load/store with update instructions" #~ msgstr "Generr ikke indlsning/lagring med opdateringsinstruktioner" #~ msgid "Don't schedule the start and end of the procedure" #~ msgstr "Planlg ikke begyndelsen og slutningen af proceduren" #~ msgid "Return all structures in memory (AIX default)" #~ msgstr "Returnr alle strukturer i hukommelse (SVR4-standard)" #~ msgid "Return small structures in registers (SVR4 default)" #~ msgstr "Returnr sm strukturer i registre (SVR4-standard)" #~ msgid "Use features of and schedule code for given CPU" #~ msgstr "Benyt faciliteter fra og planlg koden til en given processor" #~ msgid "Enable debug output" #~ msgstr "Aktivr fejlanalyseringsuddata" #~ msgid "Select full, part, or no traceback table" #~ msgstr "Vlg komplet, partiel eller ingen tilbagesporingstabel" #~ msgid "Specify ABI to use" #~ msgstr "Angiv ABI der skal bruges" #~ msgid "Specify size of long double (64 or 128 bits)" #~ msgstr "Angiv strrelsen af long double (64 eller 128 bit)" #~ msgid "Specify yes/no if isel instructions should be generated" #~ msgstr "Angiv yes/no hvis isel-instruktioner skal genereres" #~ msgid "Specify yes/no if VRSAVE instructions should be generated for AltiVec" #~ msgstr "Angiv yes/no hvis VRSAVE-instruktioner skal genereres til AltiVec" #~ msgid "Avoid all range limits on call instructions" #~ msgstr "Undg alle omrdegrnser ved kaldeinstruktioner" #~ msgid "RETURN_ADDRESS_OFFSET not supported" #~ msgstr "RETURN_ADDRESS_OFFSET er ikke understttet" #~ msgid "Select ABI calling convention" #~ msgstr "Angiv ABI-kaldekonvention" #~ msgid "Select method for sdata handling" #~ msgstr "Angiv metode for sdata-hndtering" #~ msgid "Align to the base type of the bit-field" #~ msgstr "Justr til grundtypen for bitfeltet" #~ msgid "Don't align to the base type of the bit-field" #~ msgstr "Justr ikke til grundtypen for bitfeltet" #~ msgid "Don't assume that unaligned accesses are handled by the system" #~ msgstr "Antag ikke at ujusterede tilgange hndteres af systemet" #~ msgid "Assume that unaligned accesses are handled by the system" #~ msgstr "Antag at ujusterede tilgange hndteres af systemet" #~ msgid "Produce code relocatable at runtime" #~ msgstr "Generr kode som kan flyttes p krselstidspunktet" #~ msgid "Don't produce code relocatable at runtime" #~ msgstr "Generr ikke kode som kan flyttes p krselstidspunktet" #~ msgid "Produce little endian code" #~ msgstr "Generr lilleendet kode" #~ msgid "Produce big endian code" #~ msgstr "Generr storendet kode" #~ msgid "no description yet" #~ msgstr "ingen beskrivelse endnu" #~ msgid "Use EABI" #~ msgstr "Benyt EABI" #~ msgid "Don't use EABI" #~ msgstr "Benyt ikke EABI" #~ msgid "Do not allow bit-fields to cross word boundaries" #~ msgstr "Tillad ikke bitfelter at krydse ordgrnser" #~ msgid "Use alternate register names" #~ msgstr "Benyt alternative registernavne" #~ msgid "Don't use alternate register names" #~ msgstr "Benyt ikke alternative registernavne" #~ msgid "Link with libsim.a, libc.a and sim-crt0.o" #~ msgstr "Sammenkd med libsim.a, libc.a og sim-crt0.o" #~ msgid "Link with libads.a, libc.a and crt0.o" #~ msgstr "Sammenkd med libads.a, libc.a og crt0.o" #~ msgid "Link with libyk.a, libc.a and crt0.o" #~ msgstr "Sammenkd med libyk.a, libc.a og crt0.o" #~ msgid "Link with libmvme.a, libc.a and crt0.o" #~ msgstr "Sammenkd med libmvme.a, libc.a og crt0.o" #~ msgid "Set the PPC_EMB bit in the ELF flags header" #~ msgstr "St PPC_EMB-bitten i ELF-tilvalgshovedet" #~ msgid "Use the WindISS simulator" #~ msgstr "Benyt WindISS-simulatoren" #~ msgid "bad value for -mcall-%s" #~ msgstr "ugyldig vrdi til -mcall-%s" #~ msgid "bad value for -msdata=%s" #~ msgstr "ugyldig vrdi til -msdata=%s" #~ msgid "-mrelocatable and -msdata=%s are incompatible" #~ msgstr "-mrelocatable og -msdata=%s er indbyrdes uforenelige" #~ msgid "-f%s and -msdata=%s are incompatible" #~ msgstr "-f%s og -msdata=%s er indbyrdes uforenelige" #~ msgid "-msdata=%s and -mcall-%s are incompatible" #~ msgstr "-msdata=%s og -mcall-%s er indbyrdes uforenelige" #~ msgid "-mrelocatable and -mno-minimal-toc are incompatible" #~ msgstr "-mrelocatable og -mno-minimal-toc er indbyrdes uforenelige" #~ msgid "-mrelocatable and -mcall-%s are incompatible" #~ msgstr "-mrelocatable og -mcall-%s er indbyrdes uforenelige" #~ msgid "-fPIC and -mcall-%s are incompatible" #~ msgstr "-fPIC og -mcall-%s er indbyrdes uforenelige" #~ msgid "-mcall-aixdesc must be big endian" #~ msgstr "-mcall-aixdesc skal vre stor-endet" #~ msgid "invalid UNSPEC as operand (1)" #~ msgstr "ugyldig UNSPEC som operand (1)" #~ msgid "invalid UNSPEC as operand (2)" #~ msgstr "ugyldig UNSPEC som operand (2)" #~ msgid "UNKNOWN in s390_output_symbolic_const !?" #~ msgstr "UNKNOWN i s390_output_symbolic_const !?" #~ msgid "Cannot decompose address." #~ msgstr "Kan ikke adskille adresse." #~ msgid "UNKNOWN in print_operand !?" #~ msgstr "UNKNOWN i print_operand !?" #~ msgid "Total size of local variables exceeds architecture limit." #~ msgstr "Total strrelse af lokale variable overstiger arkitekturgrnsen." # RETMIG: hvad er backchain? #~ msgid "Set backchain" #~ msgstr "St backchain" #~ msgid "Don't set backchain (faster, but debug harder" #~ msgstr "St ikke backchain (hurtigere, men svrere at fejlanalysere)" #~ msgid "Use bras for executable < 64k" #~ msgstr "Benyt bras til krbar fil < 64k" #~ msgid "Don't use bras" #~ msgstr "Benyt ikke bras" #~ msgid "Additional debug prints" #~ msgstr "Udskriv ekstra fejlanalyseringsinfo" #~ msgid "Don't print additional debug prints" #~ msgstr "Udskriv ikke ekstra fejlanalyseringsinfo" #~ msgid "64 bit mode" #~ msgstr "64 bit-tilstand" #~ msgid "31 bit mode" #~ msgstr "31 bit-tilstand" #~ msgid "mvcle use" #~ msgstr "Benyt mvcle" #~ msgid "mvc&ex" #~ msgstr "mvc&ex" #~ msgid "__builtin_saveregs not supported by this subtarget" #~ msgstr "__builtin_saveregs understttes ikke af denne undermlarkitektur" #~ msgid "attribute interrupt_handler is not compatible with -m5-compact" #~ msgstr "egenskaben interrupt_handler er ikke forenelig med -m5-compact" #~ msgid "`%s' attribute only applies to interrupt functions" #~ msgstr "egenskaben '%s' kan kun anvendes sammen med afbrydelsesfunktioner" #~ msgid "`%s' attribute argument not a string constant" #~ msgstr "parameteren til egenskaben '%s' er ikke en strengkonstant" #~ msgid "`%s' attribute argument not an integer constant" #~ msgstr "parameteren til egenskaben '%s' er ikke en heltalskonstant" #~ msgid "Profiling is not supported on this target." #~ msgstr "Profilering er ikke understttet p mlarkitekturen." #~ msgid "%s is not supported by this configuration" #~ msgstr "%s understttes ikke af denne konfiguration" #~ msgid "-mlong-double-64 not allowed with -m64" #~ msgstr "-mlong-double-64 er ikke tilladt med -m64" #~ msgid "-mcmodel= is not supported on 32 bit systems" #~ msgstr "-mcmodel= understttes ikke p 32 bit-systemer" #~ msgid "invalid %%Y operand" #~ msgstr "ugyldig %%Y-operand" #~ msgid "invalid %%A operand" #~ msgstr "ugyldig %%A-operand" #~ msgid "invalid %%B operand" #~ msgstr "ugyldig %%B-operand" #~ msgid "invalid %%c operand" #~ msgstr "ugyldig %%c-operand" #~ msgid "invalid %%C operand" #~ msgstr "ugyldig %%C-operand" #~ msgid "invalid %%d operand" #~ msgstr "ugyldig %%d-operand" #~ msgid "invalid %%D operand" #~ msgstr "ugyldig %%D-operand" #~ msgid "invalid %%f operand" #~ msgstr "ugyldig %%f-operand" #~ msgid "invalid %%s operand" #~ msgstr "ugyldig %%s-operand" #~ msgid "long long constant not a valid immediate operand" #~ msgstr "long long-konstant er ikke en gyldig umiddelbar operand" #~ msgid "floating point constant not a valid immediate operand" #~ msgstr "kommatalskonstant er ikke en gyldig umiddelbar operand" #~ msgid "Use 128 bit long doubles" #~ msgstr "Benyt 128 bit long double" #~ msgid "Generate code for big endian" #~ msgstr "Generr kode til storendet" #~ msgid "Generate code for little endian" #~ msgstr "Generr kode til lilleendet" #~ msgid "Use little-endian byte order for data" #~ msgstr "Benyt lilleendet byte-orden til data" #~ msgid "Assume possible double misalignment" #~ msgstr "Antag at double-variabler kan vre ujusterede" #~ msgid "Assume all doubles are aligned" #~ msgstr "Antag at alle double-variabler er justerede" #~ msgid "Pass -assert pure-text to linker" #~ msgstr "Overbring -assert pure-text til sammenkderen" #~ msgid "Do not pass -assert pure-text to linker" #~ msgstr "Overbring ikke -assert pure-text til sammenkderen" #~ msgid "Use flat register window model" #~ msgstr "Benyt flad registervinduesmodel" #~ msgid "Do not use flat register window model" #~ msgstr "Benyt ikke flad registervinduesmodel" #~ msgid "Use ABI reserved registers" #~ msgstr "Benyt ABI-reserverede registre" #~ msgid "Do not use ABI reserved registers" #~ msgstr "Benyt ikke ABI-reserverede registre" #~ msgid "Use hardware quad fp instructions" #~ msgstr "Benyt hardware quad-kommatalsinstruktioner" #~ msgid "Do not use hardware quad fp instructions" #~ msgstr "Benyt ikke hardware quad-kommatalsinstruktioner" #~ msgid "Compile for v8plus ABI" #~ msgstr "Overst for v8plus-ABI" #~ msgid "Do not compile for v8plus ABI" #~ msgstr "Overst ikke for v8plus-ABI" #~ msgid "Utilize Visual Instruction Set" #~ msgstr "Benyt Visual Instruction Set" #~ msgid "Do not utilize Visual Instruction Set" #~ msgstr "Benyt ikke Visual Instruction Set" #~ msgid "Optimize for Cypress processors" #~ msgstr "Optimr for Cypress-processorer" #~ msgid "Optimize for SPARCLite processors" #~ msgstr "Optimr for SPARCLite-processorer" #~ msgid "Optimize for F930 processors" #~ msgstr "Optimr for F930-processorer" #~ msgid "Optimize for F934 processors" #~ msgstr "Optimr for F934-processorer" #~ msgid "Use V8 SPARC ISA" #~ msgstr "Benyt V8 SPARC ISA" #~ msgid "Optimize for SuperSPARC processors" #~ msgstr "Optimr for SuperSPARC-processorer" #~ msgid "Pointers are 64-bit" #~ msgstr "Henvisninger er 64 bit" #~ msgid "Pointers are 32-bit" #~ msgstr "Henvisninger er 32 bit" #~ msgid "Use 32-bit ABI" #~ msgstr "Benyt 32 bit-API" #~ msgid "Use 64-bit ABI" #~ msgstr "Benyt 64 bit-API" #~ msgid "Use stack bias" #~ msgstr "Benyt stakafst" #~ msgid "Do not use stack bias" #~ msgstr "Benyt ikke stakafst" #~ msgid "Use structs on stronger alignment for double-word copies" #~ msgstr "Benyt strukturer p strkere justering til dobbelt-ord kopier" #~ msgid "Do not use structs on stronger alignment for double-word copies" #~ msgstr "Benyt ikke strukturer p strkere justering til dobbelt-ord kopier" #~ msgid "Optimize tail call instructions in assembler and linker" #~ msgstr "Optimr halekaldsinstruktioner i maskinkodeoverstteren og sammenkderen" #~ msgid "Do not optimize tail call instructions in assembler or linker" #~ msgstr "Optimr ikke halekaldsinstruktioner i maskinkodeoverstteren og sammenkderen" #~ msgid "Use given SPARC code model" #~ msgstr "Benyt given SPARC-kodemodel" #~ msgid "cannot use va_start in interrupt function" #~ msgstr "kan ikke bruge va_start i afbrydelsesfunktion" #~ msgid "`B' operand is not constant" #~ msgstr "'B'-operanden er ikke konstant" #~ msgid "`B' operand has multiple bits set" #~ msgstr "'B'-operanden har flere bit sat" #~ msgid "`o' operand is not constant" #~ msgstr "'o'-operanden er ikke konstant" #~ msgid "xstormy16_print_operand: unknown code" #~ msgstr "xstormy16_print_operand: ukendt kode" #~ msgid "switch statement of size %lu entries too large" #~ msgstr "switch-stning med %lu elementer er for stor" #~ msgid "#pragma GHS endXXXX found without previous startXXX" #~ msgstr "'#pragma GHS endXXXX' fundet uden forudgende 'startXXX'" #~ msgid "#pragma GHS endXXX does not match previous startXXX" #~ msgstr "'#pragma GHS endXXXX' passer ikke med forudgende 'startXXX'" #~ msgid "cannot set interrupt attribute: no current function" #~ msgstr "kan ikke stte afbrydelsesegenskaben: ingen aktuel funktion" #~ msgid "cannot set interrupt attribute: no such identifier" #~ msgstr "kan ikke stte afbrydelsesegenskaben: intet sdant kaldenavn" #~ msgid "junk at end of #pragma ghs section" #~ msgstr "ragelse i slutningen af '#pragma ghs section'" #~ msgid "unrecognized section name \"%s\"" #~ msgstr "ukendt sektionsnavn \"%s\"" #~ msgid "malformed #pragma ghs section" #~ msgstr "forkert udformet '#pragma ghs section'" #~ msgid "junk at end of #pragma ghs interrupt" #~ msgstr "ragelse i slutningen af '#pragma ghs interrupt'" #~ msgid "junk at end of #pragma ghs starttda" #~ msgstr "ragelse i slutningen af '#pragma ghs starttda'" #~ msgid "junk at end of #pragma ghs startsda" #~ msgstr "ragelse i slutningen af '#pragma ghs startsda'" #~ msgid "junk at end of #pragma ghs startzda" #~ msgstr "ragelse i slutningen af '#pragma ghs startzda'" #~ msgid "junk at end of #pragma ghs endtda" #~ msgstr "ragelse i slutningen af '#pragma ghs endtda'" #~ msgid "junk at end of #pragma ghs endsda" #~ msgstr "ragelse i slutningen af '#pragma ghs endsda'" #~ msgid "junk at end of #pragma ghs endzda" #~ msgstr "ragelse i slutningen af '#pragma ghs endzda'" #~ msgid "%s=%s is not numeric" #~ msgstr "%s=%s er ikke et tal" #~ msgid "%s=%s is too large" #~ msgstr "%s=%s er for stor" #~ msgid "const_double_split got a bad insn:" #~ msgstr "const_double_split modtog en ugyldig instruktion:" #~ msgid "output_move_single:" #~ msgstr "output_move_single:" #~ msgid "a data area attribute cannot be specified for local variables" #~ msgstr "en dataomrdeegenskab kan ikke angives for lokale variable" #~ msgid "data area of '%s' conflicts with previous declaration" #~ msgstr "dataomrdet '%s' er i modstrid med tidligere erklring" #~ msgid "bogus JR construction: %d\n" #~ msgstr "falsk JR-konstruktion: %d\n" #~ msgid "bad amount of stack space removal: %d" #~ msgstr "ugyldig strrelse af stakpladsfjernelse: %d" #~ msgid "bogus JARL construction: %d\n" #~ msgstr "falsk JARL-konstruktion: %d\n" #~ msgid "Bogus DISPOSE construction: %d\n" #~ msgstr "Falsk DISPOSE-konstruktion: %d\n" #~ msgid "Too much stack space to dispose of: %d" #~ msgstr "For meget stakplads at tage sig af: %d" #~ msgid "Bogus PREPEARE construction: %d\n" #~ msgstr "Falsk PREPARE-konstruktion: %d\n" #~ msgid "Too much stack space to prepare: %d" #~ msgstr "For meget stakplads at forberede: %d" #~ msgid "Support Green Hills ABI" #~ msgstr "Understt Green Hills-ABI" #~ msgid "Prohibit PC relative function calls" #~ msgstr "Forbyd PC-relative funktionskald" #~ msgid "Reuse r30 on a per function basis" #~ msgstr "Genbrug r30 p et pr. funktionsgrundlag" #~ msgid "Use stubs for function prologues" #~ msgstr "Benyt stubbe til funktionsindledninger" #~ msgid "Same as: -mep -mprolog-function" #~ msgstr "Samme som: -mep -mprolog-function" #~ msgid "Enable backend debugging" #~ msgstr "Aktivr bagendefejlanalyseringsinfo" #~ msgid "Compile for the v850 processor" #~ msgstr "Overst for v850-processoren" #~ msgid "Compile for v850e processor" #~ msgstr "Overst for v850e-processoren" #~ msgid "Enable the use of the short load instructions" #~ msgstr "Aktivr brug af short load-instruktioner" #~ msgid "Do not use the callt instruction" #~ msgstr "Benyt ikke callt-instruktionen" #~ msgid "Do not use registers r2 and r5" #~ msgstr "Benyt ikke registrene r2 og r5" #~ msgid "Enforce strict alignment" #~ msgstr "Gennemtving streng justering" #~ msgid "Use 4 byte entries in switch tables" #~ msgstr "Benyt 4 byte-elementer i switch-tabeller" #~ msgid "Set the max size of data eligible for the TDA area" #~ msgstr "Angiv den maks. strrelse af data til TDA-omrdet" #~ msgid "Set the max size of data eligible for the SDA area" #~ msgstr "Angiv den maks. strrelse af data til SDA-omrdet" #~ msgid "Set the max size of data eligible for the ZDA area" #~ msgstr "Angiv den maks. strrelse af data til ZDA-omrdet" #~ msgid "bad test" #~ msgstr "ugyldig test" #~ msgid "boolean registers required for the floating-point option" #~ msgstr "booleske registre er pkrvet til kommatalsindstillingen" #~ msgid "invalid mask" #~ msgstr "ugyldig maske" #~ msgid "invalid address" #~ msgstr "ugyldig adresse" #~ msgid "no register in address" #~ msgstr "ingen registre i adresse" #~ msgid "address offset not a constant" #~ msgstr "adresseafst er ikke en konstant" #~ msgid "only uninitialized variables can be placed in a .bss section" #~ msgstr "kun variabler uden startvrdi kan placeres i .bss-sektionen" #~ msgid "Use the Xtensa code density option" #~ msgstr "Benyt Xtensa-kodetthedsindstillingen" #~ msgid "Do not use the Xtensa code density option" #~ msgstr "Benyt ikke Xtensa-kodetthedsindstillingen" #~ msgid "Use the Xtensa MAC16 option" #~ msgstr "Benyt Xtensa-MAC16-indstillingen" #~ msgid "Do not use the Xtensa MAC16 option" #~ msgstr "Benyt ikke Xtensa-MAC16-indstillingen" #~ msgid "Use the Xtensa MUL16 option" #~ msgstr "Benyt Xtensa-MUL16-indstillingen" #~ msgid "Do not use the Xtensa MUL16 option" #~ msgstr "Benyt ikke Xtensa-MUL16-indstillingen" #~ msgid "Use the Xtensa MUL32 option" #~ msgstr "Benyt Xtensa-MUL32-indstillingen" #~ msgid "Do not use the Xtensa MUL32 option" #~ msgstr "Benyt ikke Xtensa-MUL32-indstillingen" #~ msgid "Use the Xtensa NSA option" #~ msgstr "Benyt Xtensa-NSA-indstillingen" #~ msgid "Do not use the Xtensa NSA option" #~ msgstr "Benyt ikke Xtensa-NSA-indstillingen" #~ msgid "Use the Xtensa MIN/MAX option" #~ msgstr "Benyt Xtensa-MIN/MAX-indstillingen" #~ msgid "Do not use the Xtensa MIN/MAX option" #~ msgstr "Benyt ikke Xtensa-MIN/MAX-indstillingen" #~ msgid "Use the Xtensa SEXT option" #~ msgstr "Benyt Xtensa-SEXT-indstillingen" #~ msgid "Do not use the Xtensa SEXT option" #~ msgstr "Benyt ikke Xtensa-SEXT-indstillingen" #~ msgid "Use the Xtensa boolean register option" #~ msgstr "Benyt Xtensa-indstillingen til booleske registre" #~ msgid "Do not use the Xtensa boolean register option" #~ msgstr "Benyt ikke Xtensa-indstillingen til booleske registre" #~ msgid "Use the Xtensa floating-point unit" #~ msgstr "Benyt kommatalsenheden til Xtensa" #~ msgid "Do not use the Xtensa floating-point unit" #~ msgstr "Benyt ikke kommatalsenheden til Xtensa" #~ msgid "Disable fused multiply/add and multiply/subtract FP instructions" #~ msgstr "Deaktivr sammensatte gang/addr- og gang/subtrahr-kommatalsinstruktioner" #~ msgid "Enable fused multiply/add and multiply/subtract FP instructions" #~ msgstr "Aktivr sammensatte gang/addr- og gang/subtrahr-kommatalsinstruktioner" #~ msgid "Serialize volatile memory references with MEMW instructions" #~ msgstr "Serialisr volatile hukommelsesreference med MEMW-instruktioner" #~ msgid "Do not serialize volatile memory references with MEMW instructions" #~ msgstr "Serialisr ikke volatile hukommelsesreference med MEMW-instruktioner" #~ msgid "Intersperse literal pools with code in the text section" #~ msgstr "Fordel konstanter med kode i tekstsektionen" #~ msgid "Put literal pools in a separate literal section" #~ msgstr "Anbring konstanter i en adskilt konstantsektion" #~ msgid "Automatically align branch targets to reduce branch penalties" #~ msgstr "Justr automatisk forgreningsml for at reducere forgreningsstraffe" #~ msgid "Do not automatically align branch targets" #~ msgstr "Justr ikke automatisk forgreningsml" #~ msgid "Use indirect CALLXn instructions for large programs" #~ msgstr "Benyt indirekte CALLXn-instruktioner for store programmer" #~ msgid "Use direct CALLn instructions for fast calls" #~ msgstr "Benyt direkte CALLn-instruktioner for hurtige kald" #~ msgid "`-gnat' misspelled as `-gant'" #~ msgstr "'-gnat' stavet forkert som '-gant'" #~ msgid "qualified type `%T' does not match destructor name `~%T'" #~ msgstr "den modificerede type '%T' passer ikke til destruktionsfunktionsnavnet '~%T'" #~ msgid "type of `%E' does not match destructor type `%T' (type was `%T')" #~ msgstr "typen af '%E' passer ikke til destruktionsfunktionstypen '%T' (typen var '%T')" #~ msgid "`%D' is a namespace" #~ msgstr "'%D' er et navnerum" #~ msgid "base object `%E' of scoped method call is of non-aggregate type `%T'" #~ msgstr "stamobjektet '%E' fra metodekald forsynet med virkefelt er af en ikke-sammensat type '%T'" #~ msgid "unable to call pointer to member function here" #~ msgstr "kan ikke kalde henvisning til medlemsfunktion her" #~ msgid "destructors take no parameters" #~ msgstr "destruktionsfunktioner kan ikke have parametre" #~ msgid "destructor name `~%T' does not match type `%T' of expression" #~ msgstr "destruktionsfunktionsnavn '~T' passer ikke med typen '%T' for udtrykket" #~ msgid "request for member `%D' in `%E', which is of non-aggregate type `%T'" #~ msgstr "foresprgsel efter medlemmet '%D' i '%E' som er af en ikke-sammensat type '%T'" #~ msgid "request for member `%D' is ambiguous" #~ msgstr "foresprgsel efter medlemmet '%D' er tvetydigt" #~ msgid "%s %D(%T, %T, %T) " #~ msgstr "%s %D(%T, %T, %T) " #~ msgid "%s %D(%T, %T) " #~ msgstr "%s %D(%T, %T) " #~ msgid "%s %D(%T) " #~ msgstr "%s %D(%T) " #~ msgid "%s %T " #~ msgstr "%s %T " #~ msgid "%s %+#D%s" #~ msgstr "%s %+#D%s" #~ msgid "conversion from `%T' to `%T' is ambiguous" #~ msgstr "konvertering fra '%T' til '%T' er tvetydigt" #~ msgid "incomplete type '%T' cannot be used to name a scope" #~ msgstr "ufuldstndig type '%T' kan ikke bruges til at navngive et virkefelt" #~ msgid "'%D' has no member named '%E'" #~ msgstr "'%D' har intet medlem ved navn '%E'" #~ msgid "no matching function for call to `%D(%A)'" #~ msgstr "ingen passende funktion for kald til '%D(%A)'" #~ msgid "call of overloaded `%D(%A)' is ambiguous" #~ msgstr "kald af flertydig '%D(%A)' er tvetydigt" #~ msgid "pointer-to-member function %E cannot be called without an object; consider using .* or ->*" #~ msgstr "henvisning til medlemsfunktionen %E kan ikke kaldes uden et objekt; overvej at benytte .* eller ->*" #~ msgid "no match for call to `(%T) (%A)'" #~ msgstr "ingen passende fundet for kald til '(%T) (%A)'" #~ msgid "call of `(%T) (%A)' is ambiguous" #~ msgstr "kald af '(%T) (%A)' er tvetydigt" #~ msgid "%s for `%T ? %T : %T' operator" #~ msgstr "%s for operatoren '%T ? %T : %T'" #~ msgid "%s for `%T %s' operator" #~ msgstr "%s for operatoren '%T %s' " #~ msgid "%s for `%T [%T]' operator" #~ msgstr "%s for operatoren '%T [%T]'" #~ msgid "%s for `%T %s %T' operator" #~ msgstr "%s for operatoren '%T %s %T'" #~ msgid "%s for `%s %T' operator" #~ msgstr "%s for operatoren '%s %T'" #~ msgid "ISO C++ forbids omitting the middle term of a ?: expression" #~ msgstr "ISO C++ forbyder udeladelse af den mellemste del af et ?:-udtryk" #~ msgid "`%E' has type `void' and is not a throw-expression" #~ msgstr "'%E' har typen 'void' og er ikke et throw-udtryk" #~ msgid "operands to ?: have different types" #~ msgstr "operander til ?: har forskellige typer" #~ msgid "enumeral mismatch in conditional expression: `%T' vs `%T'" #~ msgstr "enum-typer passer ikke sammen i betinget udtryk: '%T' og '%T'" #~ msgid "enumeral and non-enumeral type in conditional expression" #~ msgstr "enum- og ikke enum-type i betinget udtryk" #~ msgid "`%D' must be declared before use" #~ msgstr "'%D' skal erklres fr brug" #~ msgid "no `%D(int)' declared for postfix `%s', trying prefix operator instead" #~ msgstr "ingen '%D(int)' erklret for suffiks '%s', prver prfiksoperatoren i stedet" #~ msgid "using synthesized `%#D' for copy assignment" #~ msgstr "bruger syntetiseret '%#D' for kopitildeling" #~ msgid " where cfront would use `%#D'" #~ msgstr " hvor cfront ville bruge '%#D'" #~ msgid "comparison between `%#T' and `%#T'" #~ msgstr "sammenligning mellem '%#T' og '%#T'" #~ msgid "no suitable `operator delete' for `%T'" #~ msgstr "ingen passende 'operator delete' for '%T'" #~ msgid "`%+#D' is private" #~ msgstr "'%+#D' er privat" #~ msgid "`%+#D' is protected" #~ msgstr "'%+#D' er beskyttet" #~ msgid "`%+#D' is inaccessible" #~ msgstr "'%+#D' er ikke tilgngelig" #~ msgid "within this context" #~ msgstr "i denne kontekst" #~ msgid "invalid conversion from `%T' to `%T'" #~ msgstr "ugyldig konvertering fra '%T' til '%T'" #~ msgid " initializing argument %P of `%D'" #~ msgstr " ved klargring af parameteren %P til '%D'" #~ msgid " initializing argument %P of `%D' from result of `%D'" #~ msgstr " ved klargring af parameteren %P til '%D' fra resultatet af '%D'" #~ msgid " initializing temporary from result of `%D'" #~ msgstr " ved klargring af midlertidig variabel fra resultatet af '%D'" #~ msgid "cannot pass objects of non-POD type `%#T' through `...'; call will abort at runtime" #~ msgstr "kan ikke videregive objekter af en ikke-POD type '%#T' gennem '...'; kald vil afbryde p krselstidspunktet" #~ msgid "cannot receive objects of non-POD type `%#T' through `...'" #~ msgstr "kan ikke modtage objekter af en ikke-POD type '%#T' gennem '...'" #~ msgid "passing `%T' as `this' argument of `%#D' discards qualifiers" #~ msgstr "videregivelse af '%T' som 'this'-parameteren til '%#D' forkaster modifikationer" #~ msgid "could not find class$ field in java interface type `%T'" #~ msgstr "kunne ikke finde et class$-felt i Java-grnsefladetypen '%T'" #~ msgid "call to non-function `%D'" #~ msgstr "kald af ikke-funktion '%D'" #~ msgid "no matching function for call to `%T::%D(%A)%#V'" #~ msgstr "ingen passende funktion for kald til '%T::%D(%A)%#V'" #~ msgid "cannot call member function `%D' without object" #~ msgstr "kan ikke kalde medlemsfunktionen '%D' uden et objekt" #~ msgid "passing `%T' chooses `%T' over `%T'" #~ msgstr "videregivelse af '%T' vlger '%T' frem for '%T'" #~ msgid " in call to `%D'" #~ msgstr " i kald af '%D'" #~ msgid "choosing `%D' over `%D'" #~ msgstr "vlger '%D' frem for '%D'" #~ msgid " for conversion from `%T' to `%T'" #~ msgstr " for konvertering fra '%T' til '%T'" #~ msgid " because conversion sequence for the argument is better" #~ msgstr " fordi konverteringssekvensen for parameteren er bedre" #~ msgid "ISO C++ says that `%D' and `%D' are ambiguous even though the worst conversion for the former is better than the worst conversion for the latter" #~ msgstr "iflge ISO C++ er '%D' og '%D' tvetydigt selvom den vrste konvertering for frstnvnte er bedre end den vrste konvertering for den sidstnvnte" #~ msgid "cannot convert from base `%T' to derived type `%T' via virtual base `%T'" #~ msgstr "kan ikke konvertere fra stamklassen '%T' til den nedarvede type '%T' via den virtuelle stamklasse '%T'" #~ msgid "`%#D' and `%#D' cannot be overloaded" #~ msgstr "'%#D' og '%#D' kan ikke flertydiggres" #~ msgid "duplicate enum value `%D'" #~ msgstr "enum-vrdien '%D' optrder mere end n gang" #~ msgid "duplicate field `%D' (as enum and non-enum)" #~ msgstr "feltet '%D' optrder mere end n gang (som enum og som ikke-enum)" #~ msgid "duplicate nested type `%D'" #~ msgstr "den indlejrede type '%D' optrder mere end n gang" #~ msgid "duplicate field `%D' (as type and non-type)" #~ msgstr "feltet '%D' optrder mere end n gang (som type og som ikke-type)" #~ msgid "duplicate member `%D'" #~ msgstr "medlemmet '%D' optrder mere end n gang" #~ msgid "conflicting access specifications for method `%D', ignored" #~ msgstr "modstridende tilgangsanvisninger til metoden '%D', ignoreret" #~ msgid "conflicting access specifications for field `%s', ignored" #~ msgstr "modstridende tilgangsanvisninger til feltet '%s', ignoreret" #~ msgid "`%D' names constructor" #~ msgstr "'%D' navngiver en konstruktionsfunktion" #~ msgid "`%D' invalid in `%T'" #~ msgstr "'%D' ugyldig i '%T'" #~ msgid "no members matching `%D' in `%#T'" #~ msgstr "ingen medlemmer passer til '%D' i '%#T'" #~ msgid "`%D' invalid in `%#T'" #~ msgstr "'%D' ugyldig i '%#T'" #~ msgid " because of local method `%#D' with same name" #~ msgstr " p grund af den lokale metode '%#D' med det samme navn" #~ msgid " because of local member `%#D' with same name" #~ msgstr " p grund af det lokale medlem '%#D' med det samme navn" #~ msgid "base class `%#T' has a non-virtual destructor" #~ msgstr "stamklassen '%#T' har en ikke-virtuel destruktionsfunktion" #~ msgid "base `%T' with only non-default constructor in class without a constructor" #~ msgstr "stamklasse '%T' med kun ikke-standardkonstruktionsfunktion i klasse uden en konstruktionsfunktion" #~ msgid "all member functions in class `%T' are private" #~ msgstr "alle medlemsfunktioner i klassen '%T' er private" #~ msgid "`%#T' only defines a private destructor and has no friends" #~ msgstr "'%#T' definerer kun en privat destruktionsfunktion og har ingen venner" #~ msgid "`%#T' only defines private constructors and has no friends" #~ msgstr "'%#T' definerer kun private konstruktionsfunktioner og har ingen venner" #~ msgid "redefinition of `%#T'" #~ msgstr "omdefinering af '%#T'" #~ msgid "previous definition of `%#T'" #~ msgstr "tidligere definition af '%#T'" # %D er en funktion #~ msgid "no unique final overrider for `%D' in `%T'" #~ msgstr "ingen unik endelig overskrivning af '%D' i '%T'" #~ msgid "`%D' was hidden" #~ msgstr "'%D' var skjult" #~ msgid " by `%D'" #~ msgstr " af '%D'" #~ msgid "ISO C++ forbids member `%D' with same name as enclosing class" #~ msgstr "ISO C++ forbyder medlemmet '%D' med samme navn som den omgivende klasse" #~ msgid "`%#D' invalid; an anonymous union can only have non-static data members" #~ msgstr "'%#D' er ugyldig; en anonym union kan kun have ikke-statiske datamedlemmer" #~ msgid "private member `%#D' in anonymous union" #~ msgstr "privat medlem '%#D' i en anonym union" #~ msgid "protected member `%#D' in anonymous union" #~ msgstr "beskyttet medlem '%#D' i en anonym union" #~ msgid "vtable layout for class `%T' may not be ABI-compliant and may change in a future version of GCC due to implicit virtual destructor" #~ msgstr "vtable-layout for klassen '%T' flger ikke ndvendigvis ABI'et og kan ndre sig i en fremtidig version af GCC pga. underforstet virtuel destruktionsfunktion" #~ msgid "bit-field `%#D' with non-integral type" #~ msgstr "bitfelt '%#D' med en ikke-heltalstype" #~ msgid "bit-field `%D' width not an integer constant" #~ msgstr "bredden af bitfeltet '%D' er ikke en heltalskonstant" #~ msgid "negative width in bit-field `%D'" #~ msgstr "negativ bredde i bitfeltet '%D'" #~ msgid "zero width for bit-field `%D'" #~ msgstr "en bredde p nul for bitfeltet '%D'" #~ msgid "width of `%D' exceeds its type" #~ msgstr "bredden af '%D' overstiger typen" #~ msgid "`%D' is too small to hold all values of `%#T'" #~ msgstr "'%D' er for lille til at indeholde alle vrdierne af '%#T'" #~ msgid "member `%#D' with constructor not allowed in union" #~ msgstr "medlemmet '%#D' med en konstruktionsfunktion er ikke tilladt i en union" #~ msgid "member `%#D' with destructor not allowed in union" #~ msgstr "medlemmet '%#D' med en destruktionsfunktion er ikke tilladt i en union" #~ msgid "member `%#D' with copy assignment operator not allowed in union" #~ msgstr "medlemmet '%#D' med en kopitildelingsoperator er ikke tilladt i en union" #~ msgid "multiple fields in union `%T' initialized" #~ msgstr "flere felter i union '%T' tildeles startvrdi" #~ msgid "field `%D' in local class cannot be static" #~ msgstr "feltet '%D' i lokal klasse kan ikke vre statisk" #~ msgid "field `%D' invalidly declared function type" #~ msgstr "feltet '%D' er p ugyldig vis erklret som en funktionstype" #~ msgid "field `%D' invalidly declared method type" #~ msgstr "feltet '%D' er p ugyldig vis erklret som en medlemsfunktionstype" #~ msgid "field `%D' invalidly declared offset type" #~ msgstr "feltet '%D' er p ugyldig vis erklret som en afstandstype" #~ msgid "field `%D' declared static in union" #~ msgstr "feltet '%D' er erklret statisk i union" #~ msgid "non-static reference `%#D' in class without a constructor" #~ msgstr "ikke-statisk reference '%#D' i klasse uden en konstruktionsfunktion" #~ msgid "non-static const member `%#D' in class without a constructor" #~ msgstr "ikke-statisk konstant medlem '%#D' i klasse uden en konstruktionsfunktion" #~ msgid "field `%#D' with same name as class" #~ msgstr "felt '%#D' med samme navn som klassen" #~ msgid "`%#T' has pointer data members" #~ msgstr "'%#T' har henvisningsdatamedlemmer" #~ msgid " but does not override `%T(const %T&)'" #~ msgstr " men overskriver ikke '%T(const %T&)'" #~ msgid " or `operator=(const %T&)'" #~ msgstr " eller 'operator=(const %T&)'" #~ msgid " but does not override `operator=(const %T&)'" #~ msgstr " men overskriver ikke 'operator=(const %T&)'" #~ msgid "offset of empty base `%T' may not be ABI-compliant and maychange in a future version of GCC" #~ msgstr "afsttet for tom stamklasse '%T' flger ikke ndvendigvis ABI'en og kan ndre sig i en fremtidig version af GCC" #~ msgid "class `%T' will be considered nearly empty in a future version of GCC" #~ msgstr "klassen '%T' vil blive betragtet som nsten tom i en fremtidig version af GCC" #~ msgid "initializer specified for non-virtual method `%D'" #~ msgstr "startvrdi angivet for ikke-virtuel medlemsfunktion '%D'" #~ msgid "offset of virtual base `%T' is not ABI-compliant and may change in a future version of GCC" #~ msgstr "afsttet for virtuel stamklasse '%T' flger ikke ABI'en og kan ndre sig i en fremtidig version af GCC" #~ msgid "direct base `%T' inaccessible in `%T' due to ambiguity" #~ msgstr "direkte stamklasse '%T' er ikke tilgngelig i '%T' p grund af tvetydighed" #~ msgid "virtual base `%T' inaccessible in `%T' due to ambiguity" #~ msgstr "virtuel stamklasse '%T' er ikke tilgngelig i '%T' p grund af tvetydighed" #~ msgid "size assigned to `%T' may not be ABI-compliant and may change in a future version of GCC" #~ msgstr "strrelsen der bliver tildelt '%T' flger ikke ndvendigvis ABI'en og kan ndre sig i en fremtidig version af GCC" #~ msgid "offset of `%D' is not ABI-compliant and may change in a future version of GCC" #~ msgstr "afsttet for '%D' flger ikke ABI'en og kan ndre sig i en fremtidig version af GCC" #~ msgid "`%D' contains empty classes which may cause base classes to be placed at different locations in a future version of GCC" #~ msgstr "'%D' indeholder tomme klasser hvad der kan f stamklasser til at blive placeret andre steder i en fremtidig version af GCC" #~ msgid "layout of classes derived from empty class `%T' may change in a future version of GCC" #~ msgstr "layoutet af klasser der nedarver fra den tomme klasse '%T' kan ndre sig i en fremtidig version af GCC" #~ msgid "`%#T' has virtual functions but non-virtual destructor" #~ msgstr "'%#T' har virtuelle funktioner, men ikke-virtuel destruktionsfunktion" #~ msgid "trying to finish struct, but kicked out due to previous parse errors" #~ msgstr "forsgte at afslutte struct, men blev stoppet af tidligere fortolkningsfejl" #~ msgid "language string `\"%s\"' not recognized" #~ msgstr "sprogstrengen '\"%s\"' ikke genkendt" #~ msgid "cannot resolve overloaded function `%D' based on conversion to type `%T'" #~ msgstr "kan ikke benytte den flertydiggjorte funktion '%D' baseret p konvertering til typen '%T'" #~ msgid "no matches converting function `%D' to type `%#T'" #~ msgstr "ingen passende ved konvertering af funktionen '%D' til typen '%#T'" #~ msgid "converting overloaded function `%D' to type `%#T' is ambiguous" #~ msgstr "konvertering af den flertydiggjorte funktion '%D' til typen '%T' er tvetydig" #~ msgid "assuming pointer to member `%D'" #~ msgstr "antager henvisning til medlemmet '%D'" #~ msgid "(a pointer to member can only be formed with `&%E')" #~ msgstr "(en henvisning til medlem kan kun dannes med '&%E')" #~ msgid "not enough type information" #~ msgstr "ikke tilstrkkelig information om typen" #~ msgid "argument of type `%T' does not match `%T'" #~ msgstr "parameter af typen '%T' passer ikke til '%T'" #~ msgid "invalid operation on uninstantiated type" #~ msgstr "ugyldig operation p uudskiftet type" #~ msgid "declaration of `%#D'" #~ msgstr "omerklring af '%#D'" #~ msgid "changes meaning of `%D' from `%+#D'" #~ msgstr "skifter betydningen af '%D' fra '%+#D'" #~ msgid "can't convert from incomplete type `%T' to `%T'" #~ msgstr "kan ikke konvertere fra ufuldstndig type '%T' til '%T'" #~ msgid "conversion of `%E' from `%T' to `%T' is ambiguous" #~ msgstr "konvertering af '%E' fra '%T' til '%T' er tvetydigt" #~ msgid "converting from `%T' to `%T'" #~ msgstr "konvertering fra '%T' til '%T'" #~ msgid "pointer to member cast from `%T' to `%T' is via virtual base" #~ msgstr "typekonvertering af henvisning til medlem fra '%T' til '%T' er via virtuel stamklasse" #~ msgid "cannot convert `%E' from type `%T' to type `%T'" #~ msgstr "kan ikke konvertere '%E' fra typen '%T' til typen '%T'" #~ msgid "invalid conversion from '%T' to '%T'" #~ msgstr "ugyldig konvertering fra '%T' til '%T'" #~ msgid "conversion from `%T' to `%T' discards qualifiers" #~ msgstr "konvertering fra '%T' til '%T' forkaster modifikationer" #~ msgid "casting `%T' to `%T' does not dereference pointer" #~ msgstr "typeomtvingning af '%T' til '%T' flger ikke henvisning" #~ msgid "cannot convert type `%T' to type `%T'" #~ msgstr "kan ikke konvertere typen '%T' til typen '%T'" #~ msgid "conversion from `%#T' to `%#T'" #~ msgstr "konvertering fra '%#T' til '%#T'" #~ msgid "`%#T' used where a `%T' was expected" #~ msgstr "'%#T' benyttet hvor '%T' var forventet" #~ msgid "the address of `%D', will always be `true'" #~ msgstr "adressen af '%D' vil altid vre 'true'" #~ msgid "`%#T' used where a floating point value was expected" #~ msgstr "'%#T' benyttet hvor der forventedes en kommatalsvrdi" #~ msgid "conversion from `%T' to non-scalar type `%T' requested" #~ msgstr "konvertering fra '%T' til en ikke-skalartype '%T' udbedt" #~ msgid "object of incomplete type `%T' will not be accessed in %s" #~ msgstr "objekt af den ufuldstndige type '%T' vil ikke blive tilget i %s" #~ msgid "object of type `%T' will not be accessed in %s" #~ msgstr "objekt af typen '%T' vil ikke blive tilget i %s" #~ msgid "object `%E' of incomplete type `%T' will not be accessed in %s" #~ msgstr "objektet '%E' af den ufuldstndige type '%T' vil ikke blive tilget i %s" #~ msgid "%s cannot resolve address of overloaded function" #~ msgstr "%s kan ikke finde adressen af flertydiggjort funktion" #~ msgid "%s is a reference, not call, to function `%E'" #~ msgstr "%s er en reference til og ikke et kald af funktionen '%E'" #~ msgid "ambiguous default type conversion from `%T'" #~ msgstr "tvetydig standardtypekonvertering fra '%T'" #~ msgid " candidate conversions include `%D' and `%D'" #~ msgstr " kandidater til konverteringen inkluderer '%D' og '%D'" #~ msgid "conflicts with previous declaration `%#D'" #~ msgstr "strider mod tidligere erklring '%#D'" #~ msgid "label `%D' used but not defined" #~ msgstr "etiketten '%D' er benyttet, men ikke defineret" #~ msgid "label `%D' defined but not used" #~ msgstr "etiketten '%D' er defineret, men ikke benyttet" #~ msgid "namespace alias `%D' not allowed here, assuming `%D'" #~ msgstr "navnerumsalias '%D' er ikke tilladt her, antager '%D'" #~ msgid "previous declaration of `%D'" #~ msgstr "'%D' er tidligere erklret" #~ msgid "shadowing %s function `%#D'" #~ msgstr "skygger for en %s-funktion '%#D'" #~ msgid "library function `%#D' redeclared as non-function `%#D'" #~ msgstr "biblioteksfunktionen '%#D' er omerklret som '%#D' der ikke er en funktion" #~ msgid "conflicts with built-in declaration `%#D'" #~ msgstr "strider mod indbygget erklring '%#D'" # flges af nste tekst #~ msgid "new declaration `%#D'" #~ msgstr "ny erklring af '%#D'" #~ msgid "ambiguates built-in declaration `%#D'" #~ msgstr "tvetydiggr indbygget erklring '%#D'" #~ msgid "`%#D' redeclared as different kind of symbol" #~ msgstr "'%#D' omerklret som en anden form for symbol" #~ msgid "previous declaration of `%#D'" #~ msgstr "tidligere erklring af '%#D'" #~ msgid "declaration of template `%#D'" #~ msgstr "erklring af skabelon '%#D'" #~ msgid "ambiguates old declaration `%#D'" #~ msgstr "tvetydiggr tidligere erklring '%#D'" #~ msgid "declaration of C function `%#D' conflicts with" #~ msgstr "erklring af C-funktionen '%#D' strider mod" #~ msgid "previous declaration `%#D' here" #~ msgstr "tidligere erklring af '%#D' her" #~ msgid "conflicting types for `%#D'" #~ msgstr "modstridende typer for '%#D'" #~ msgid "previous declaration as `%#D'" #~ msgstr "tidligere erklring som '%#D'" #~ msgid "`%#D' previously defined here" #~ msgstr "'%#D' tidligere defineret her" #~ msgid "`%#D' previously declared here" #~ msgstr "'%#D' tidligere erklret her" #~ msgid "prototype for `%#D'" #~ msgstr "prototypen for '%#D'" #~ msgid "follows non-prototype definition here" #~ msgstr "flger definition uden prototype her" #~ msgid "previous declaration of `%#D' with %L linkage" #~ msgstr "tidligere erklring af '%#D' med %L-kdning" #~ msgid "conflicts with new declaration with %L linkage" #~ msgstr "strider mod ny erklring af med %L-kdning" #~ msgid "default argument given for parameter %d of `%#D'" #~ msgstr "standardparameter givet til %d. parameter for '%#D'" #~ msgid "after previous specification in `%#D'" #~ msgstr "efter tidligere specifikation i '%#D'" #~ msgid "`%#D' was used before it was declared inline" #~ msgstr "'%#D' blev brugt fr erklring som inline" #~ msgid "previous non-inline declaration here" #~ msgstr "tidligere ikke-inline erklring her" #~ msgid "redundant redeclaration of `%D' in same scope" #~ msgstr "overfldig omerklring af '%D' i samme virkefelt" #~ msgid "declaration of `%F' throws different exceptions" #~ msgstr "erklring af '%F' kaster forskellige undtagelser" #~ msgid "than previous declaration `%F'" #~ msgstr "end tidligere erklring '%F'" #~ msgid "explicit specialization of %D after first use" #~ msgstr "eksplicit specialisering af %D efter frste brug" #~ msgid "`%#D' used prior to declaration" #~ msgstr "'%#D' benyttet fr erklring" #~ msgid "redeclaration of `wchar_t' as `%T'" #~ msgstr "omerklring af 'wchar_t' som '%T'" #~ msgid "invalid redeclaration of `%D'" #~ msgstr "ugyldig omerklring af '%D'" #~ msgid "as `%D'" #~ msgstr "som '%D'" #~ msgid "previous external decl of `%#D'" #~ msgstr "tidligere ekstern erklring af '%#D'" #~ msgid "`%D' was previously implicitly declared to return `int'" #~ msgstr "'%D' blev tidligere underforstet erklret til at returnere 'int'" #~ msgid "extern declaration of `%#D' doesn't match" #~ msgstr "extern-erklring af '%#D' passer ikke med" #~ msgid "global declaration `%#D'" #~ msgstr "global erklring '%#D'" #~ msgid "declaration of `%#D' shadows a parameter" #~ msgstr "erklring af '%#D' skygger for en parameter" #~ msgid "declaration of `%s' shadows a member of `this'" #~ msgstr "erklring af '%s' skygger for et medlem af 'this'" #~ msgid "`%#D' hides constructor for `%#T'" #~ msgstr "'%#D' skjuler konstruktionsfunktion for '%#T'" #~ msgid "`%#D' conflicts with previous using declaration `%#D'" #~ msgstr "'%#D' strider mod tidligere using-erklring '%#D'" #~ msgid "previous non-function declaration `%#D'" #~ msgstr "tidligere ikke-funktionserklring '%#D'" #~ msgid "conflicts with function declaration `%#D'" #~ msgstr "strider mod funktionserklring '%#D'" #~ msgid "implicit declaration of function `%#D'" #~ msgstr "underforstet erklring af funktionen '%#D'" #~ msgid "label `%s' referenced outside of any function" #~ msgstr "der er blevet henvist til etiketten '%s' uden for en funktion" #~ msgid "jump to label `%D'" #~ msgstr "spring til etiketten '%D' " #~ msgid "jump to case label" #~ msgstr "spring til case-etiket" #~ msgid " crosses initialization of `%#D'" #~ msgstr " krydser klargring af '%#D'" #~ msgid " enters scope of non-POD `%#D'" #~ msgstr " gr ind i virkefelt af ikke-POD '%#D'" #~ msgid " enters try block" #~ msgstr " gr ind i try-blok" #~ msgid " enters catch block" #~ msgstr " gr ind i catch-blok" #~ msgid " from here" #~ msgstr " herfra" #~ msgid " skips initialization of `%#D'" #~ msgstr " springer over klargring af '%#D'" #~ msgid "label named wchar_t" #~ msgstr "etiket med navnet wchar_t" #~ msgid "duplicate label `%D'" #~ msgstr "etiketten '%D' optrder mere end n gang" #~ msgid "case label `%E' not within a switch statement" #~ msgstr "case-etiket '%E' befinder sig ikke inden i en switch-stning" #~ msgid "`%#D' redeclared as %C" #~ msgstr "'%#D' omerklret som %C" #~ msgid "invalid use of `%D'" #~ msgstr "ugyldig brug af '%D" #~ msgid "`%D::%D' is not a template" #~ msgstr "'%D::%D' er ikke en skabelon" #~ msgid "`%D' undeclared in namespace `%D'" #~ msgstr "'%D' ikke erklret i navnerummet '%D'" #~ msgid "`%D' used without template parameters" #~ msgstr "'%D' benyttet uden skabelonsparametre" #~ msgid "no class template named `%#T' in `%#T'" #~ msgstr "ingen klasseskabelon ved navn '%#T' i '%#T'" #~ msgid "no type named `%#T' in `%#T'" #~ msgstr "ingen type ved navn '%#T' i '%#T'" #~ msgid "lookup of `%D' finds `%#D'" #~ msgstr "opslag af '%D' finder '%#D'" #~ msgid " instead of `%D' from dependent base class" #~ msgstr " i stedet for '%D' fra afhngig stamklasse" #~ msgid " (use `typename %T::%D' if that's what you meant)" #~ msgstr " (benyt 'typename %T::%D' hvis det er hvad du mener)" #~ msgid "name lookup of `%D' changed" #~ msgstr "navneopslag for '%D' ndret" #~ msgid " matches this `%D' under ISO standard rules" #~ msgstr " passer med '%D' under ISO-standardreglerne" #~ msgid " matches this `%D' under old rules" #~ msgstr " passer med '%D' under tidligere regler" #~ msgid "name lookup of `%D' changed for new ISO `for' scoping" #~ msgstr "navneopslaget af '%D' er ndret til ISO 'for'-virkefelt" #~ msgid " cannot use obsolete binding at `%D' because it has a destructor" #~ msgstr " kan ikke bruge forldet binding til '%D' fordi den har en destruktionsfunktion" #~ msgid " using obsolete binding at `%D'" #~ msgstr " bruger forldet binding til '%D'" #~ msgid "lookup of `%D' in the scope of `%#T' (`%#D') does not match lookup in the current scope (`%#D')" #~ msgstr "opslag af '%D' i virkefeltet for '%#T' ('%#D') passer ikke med opslaget i det aktuelle virkefelt ('%#D')" #~ msgid "an anonymous union cannot have function members" #~ msgstr "en anonym union kan ikke have funktionsmedlemmer" #~ msgid "member %#D' with constructor not allowed in anonymous aggregate" #~ msgstr "medlemmet '%#D' med konstruktionsfunktion er ikke tilladt i anonym sammensat type" #~ msgid "member %#D' with destructor not allowed in anonymous aggregate" #~ msgstr "medlemmet '%#D' med destruktionsfunktion er ikke tilladt i anonym sammensat type" #~ msgid "member %#D' with copy assignment operator not allowed in anonymous aggregate" #~ msgstr "medlemmet '%#D' med kopitildelingsoperator er ikke tilladt i anonym sammensat type" #~ msgid "redeclaration of C++ built-in type `%T'" #~ msgstr "omerklring af indbygget type i C++ '%T'" #~ msgid "multiple types in one declaration" #~ msgstr "flere typer i n erklring" #~ msgid "missing type-name in typedef-declaration" #~ msgstr "manglende typenavn i typedef-erklring" #~ msgid "ISO C++ prohibits anonymous structs" #~ msgstr "ISO C++ forbyder anonyme strukturer" #~ msgid "`%D' can only be specified for functions" #~ msgstr "'%D' kan kun angives for funktioner" #~ msgid "`%D' can only be specified inside a class" #~ msgstr "'%D' kan kun angives inden i en klasse" #~ msgid "`%D' can only be specified for constructors" #~ msgstr "'%D' kan kun angives for konstruktionsfunktioner" #~ msgid "`%D' can only be specified for objects and functions" #~ msgstr "'%D' kan kun angives for objekter og funktioner" # init dkker over vrditildeling her - samme for de nste mange #~ msgid "typedef `%D' is initialized (use __typeof__ instead)" #~ msgstr "typedef '%D' bliver tildelt en vrdi (benyt __typeof__ i stedet)" #~ msgid "function `%#D' is initialized like a variable" #~ msgstr "funktionen '%#D' bliver tildelt en startvrdi som en variabel" #~ msgid "declaration of `%#D' has `extern' and is initialized" #~ msgstr "erklringen af '%#D' indeholder 'extern' og variablen bliver tildelt en startvrdi" #~ msgid "`%#D' is not a static member of `%#T'" #~ msgstr "'%#D' er ikke et statisk medlem af '%#T'" #~ msgid "ISO C++ does not permit `%T::%D' to be defined as `%T::%D'" #~ msgstr "ISO C++ tillader ikke '%T::%D' at blive defineret som '%T::%D'" #~ msgid "duplicate initialization of %D" #~ msgstr "%D tildelt startvrdi mere end n gang" #~ msgid "declaration of `%#D' outside of class is not definition" #~ msgstr "erklring af '%#D' uden for en klasse er ikke en definition" #~ msgid "variable `%#D' has initializer but incomplete type" #~ msgstr "variablen '%#D' bliver tildelt en startvrdi, men er af en ufuldstndig type" #~ msgid "elements of array `%#D' have incomplete type" #~ msgstr "elementer i tabellen '%#D' er af en ufuldstndig type" #~ msgid "aggregate `%#D' has incomplete type and cannot be defined" #~ msgstr "den sammensatte type '%#D' er af en ufuldstndig type og kan ikke defineres" #~ msgid "`%D' declared as reference but not initialized" #~ msgstr "'%D' erklret som en reference, men bliver ikke tildelt en startvrdi" #~ msgid "ISO C++ forbids use of initializer list to initialize reference `%D'" #~ msgstr "ISO C++ forbyder brug af en startvrdiliste til at klargre referencen '%D'" #~ msgid "cannot initialize `%T' from `%T'" #~ msgstr "kan ikke klargre '%T' fra %T'" #~ msgid "initializer fails to determine size of `%D'" #~ msgstr "startvrdien giver ikke strrelsen af '%D'" #~ msgid "array size missing in `%D'" #~ msgstr "tabelstrrelsen mangler i '%D'" #~ msgid "zero-size array `%D'" #~ msgstr "nulstrrelsestabel '%D'" #~ msgid "storage size of `%D' isn't known" #~ msgstr "lagringsstrrelsen af '%D' er ikke kendt" #~ msgid "storage size of `%D' isn't constant" #~ msgstr "lagringsstrrelsen af '%D' er ikke konstant" #~ msgid "sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)" #~ msgstr "semantikken for indlejret funktionsstatisk data '%#D' er forkert (du ender med flere kopier)" #~ msgid " you can work around this by removing the initializer" #~ msgstr " du kan arbejde dig rundt om dette ved at fjerne startvrdien" #~ msgid "uninitialized const `%D'" #~ msgstr "konstant '%D' uden startvrdi" #~ msgid "brace-enclosed initializer used to initialize `%T'" #~ msgstr "startvrdi i krllede paranteser benyttet til at klargre '%T'" #~ msgid "initializer for `%T' must be brace-enclosed" #~ msgstr "startvrdi for '%T' skal vre indesluttet i krllede paranteser" #~ msgid "ISO C++ does not allow designated initializers" #~ msgstr "ISO C++ tillader ikke udpegede startvrdier" #~ msgid "`%T' has no non-static data member named `%D'" #~ msgstr "'%T' har intet ikke-statisk medlem ved navn '%D'" #~ msgid "too many initializers for `%T'" #~ msgstr "for mange startvrdier for '%T'" #~ msgid "variable-sized object `%D' may not be initialized" #~ msgstr "objektet '%D' af variabel strrelse m ikke tildeles en startvrdi" #~ msgid "`%D' has incomplete type" #~ msgstr "'%D' er af en ufuldstndig type" #~ msgid "`%D' must be initialized by constructor, not by `{...}'" #~ msgstr "'%D' skal klargres af en konstruktionsfunktion, ikke af '{...}'" #~ msgid "structure `%D' with uninitialized const members" #~ msgstr "struktur '%D' med konstante medlemmer uden startvrdi" #~ msgid "structure `%D' with uninitialized reference members" #~ msgstr "struktur '%D' med referencemedlemmer uden startvrdi" #~ msgid "assignment (not initialization) in declaration" #~ msgstr "tildeling (ikke klargring) i erklring" #~ msgid "cannot initialize `%D' to namespace `%D'" #~ msgstr "kan ikke tildele startvrdi til '%D' med navnerummet '%D'" #~ msgid "shadowing previous type declaration of `%#D'" #~ msgstr "skygger for tidligere typeerklring af '%#D'" #~ msgid "`%D' cannot be thread-local because it has non-POD type `%T'" #~ msgstr "'%D' kan ikke vre trdlokal eftersom den er af en ikke-POD type '%T'" #~ msgid "`%D' is thread-local and so cannot be dynamically initialized" #~ msgstr "'%D' er trdlokal og kan derfor ikke blive tildelt en startvrdi dynamisk" #~ msgid "multiple initializations given for `%D'" #~ msgstr "flere startvrdier angivet for '%D'" #~ msgid "invalid catch parameter" #~ msgstr "ugyldig catch-parameter" #~ msgid "destructor for alien class `%T' cannot be a member" #~ msgstr "destruktionsfunktionen for den fremmede klasse '%T' kan ikke vre et medlem" #~ msgid "constructor for alien class `%T' cannot be a member" #~ msgstr "konstruktionsfunktionen for den fremmede klasse '%T' kan ikke vre et medlem" #~ msgid "`%D' declared as a `virtual' %s" #~ msgstr "'%D' erklret som 'virtual' %s" #~ msgid "`%D' declared as an `inline' %s" #~ msgstr "'%D' erklret som 'inline' %s" # %s bliver omsat til typen #~ msgid "`const' and `volatile' function specifiers on `%D' invalid in %s declaration" #~ msgstr "'const'- og 'volatile'-funktionsangivelser til '%D' er ugyldigt i erklring af %s" #~ msgid "`%D' declared as a friend" #~ msgstr "'%D' er erklret som en ven" #~ msgid "`%D' declared with an exception specification" #~ msgstr "'%D' erklret med en undtagelsesspecifikation" #~ msgid "cannot declare `::main' to be a template" #~ msgstr "kan ikke erklre '::main' som en skabelon" #~ msgid "cannot declare `::main' to be inline" #~ msgstr "kan ikke erklre '::main' som indlejret" #~ msgid "cannot declare `::main' to be static" #~ msgstr "kan ikke erklre '::main' som statisk" #~ msgid "`main' must return `int'" #~ msgstr "'main' skal returnere typen 'int'" #~ msgid "non-local function `%#D' uses anonymous type" #~ msgstr "ikke-lokal funktion '%#D' bruger anonym type" #~ msgid "`%#D' does not refer to the unqualified type, so it is not used for linkage" #~ msgstr "'%#D' refererer ikke til den ikkemodificerede type, so den bruges ikke til sammenkdning" #~ msgid "non-local function `%#D' uses local type `%T'" #~ msgstr "ikke-lokal funktion '%#D' bruger lokal type '%T'" #~ msgid "%smember function `%D' cannot have `%T' method qualifier" #~ msgstr "%smedlemsfunktion '%D' kan ikke have metodemodifikationen '%T'" #~ msgid "defining explicit specialization `%D' in friend declaration" #~ msgstr "definering af eksplicit specialisering '%D' i friend-erklring" #~ msgid "invalid use of template-id `%D' in declaration of primary template" #~ msgstr "ugyldig brug af skabelons-id '%D' i erklring af primr skabelon" #~ msgid "default arguments are not allowed in declaration of friend template specialization `%D'" #~ msgstr "standardparametre er ikke tilladt i erklring af venneskabelonsspecialisering '%D'" #~ msgid "`inline' is not allowed in declaration of friend template specialization `%D'" #~ msgstr "'inline' er ikke tilladt i erklring venneskabelonsspecialisering '%D'" #~ msgid "definition of implicitly-declared `%D'" #~ msgstr "definition af underforstet-erklret '%D'" #~ msgid "no `%#D' member function declared in class `%T'" #~ msgstr "ingen medlemsfunktion '%#D' erklret i klassen '%T'" #~ msgid "non-local variable `%#D' uses local type `%T'" #~ msgstr "ikke-lokal variabel '%#D' bruger lokal type '%T'" #~ msgid "invalid in-class initialization of static data member of non-integral type `%T'" #~ msgstr "ugyldig tildeling af startvrdi i klasse til statisk datamedlem af en ikke-heltalstype '%T'" #~ msgid "ISO C++ forbids in-class initialization of non-const static member `%D'" #~ msgstr "ISO C++ forbyder tildeling af startvrdi i klasse til ikke-konstant statisk medlem '%D'" #~ msgid "ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'" #~ msgstr "ISO C++ forbyder tildeling af startvrdi til medlemskonstant '%D' af en ikke-heltallig type" #~ msgid "size of array `%D' has non-integer type" #~ msgstr "strrelsen af tabellen '%D' er ikke af en heltalstype" #~ msgid "size of array has non-integer type" #~ msgstr "strrelsen af tabel er ikke af en heltalstype" #~ msgid "size of array `%D' is negative" #~ msgstr "strrelsen af tabellen '%D' er negativ" #~ msgid "size of array is negative" #~ msgstr "strrelsen af tabel er negativ" #~ msgid "ISO C++ forbids zero-size array `%D'" #~ msgstr "ISO C++ forbyder tabellen '%D' med strrelsen nul" #~ msgid "ISO C++ forbids zero-size array" #~ msgstr "ISO C++ forbyder tabel med strrelsen nul" #~ msgid "size of array `%D' is not an integral constant-expression" #~ msgstr "strrelsen af tabellen '%D' er ikke af et heltalligt konstantudtryk" #~ msgid "size of array is not an integral constant-expression" #~ msgstr "strrelsen af tabel er ikke af et heltalligt konstantudtryk" #~ msgid "ISO C++ forbids variable-size array `%D'" #~ msgstr "ISO C++ forbyder tabellen '%D' med variabel strrelse" #~ msgid "ISO C++ forbids variable-size array" #~ msgstr "ISO C++ forbyder tabel med variabel strrelse" #~ msgid "overflow in array dimension" #~ msgstr "tabeldimension for stor" #~ msgid "declaration of `%D' as %s" #~ msgstr "erklring af '%D' som %s" #~ msgid "creating %s" #~ msgstr "opretter %s" #~ msgid "declaration of `%D' as multidimensional array must have bounds for all dimensions except the first" #~ msgstr "erklring af '%D' som flerdimensional tabel skal have grnser for alle dimensioner pnr den frste" #~ msgid "multidimensional array must have bounds for all dimensions except the first" #~ msgstr "flerdimensional tabel skal have grnser for alle dimensioner pnr den frste" #~ msgid "return type specification for constructor invalid" #~ msgstr "angivelse af returneringstypen til konstruktionsfunktion er ugyldigt" #~ msgid "return type specification for destructor invalid" #~ msgstr "angivelse af returneringstypen til destruktionsfunktion er ugyldigt" #~ msgid "operator `%T' declared to return `%T'" #~ msgstr "operator '%T' erklret til at returnere '%T'" #~ msgid "return type specified for `operator %T'" #~ msgstr "returtype angivet for 'operator %T'" #~ msgid "destructors must be member functions" #~ msgstr "destruktionsfunktioner skal vre medlemmer" #~ msgid "destructor `%T' must match class name `%T'" #~ msgstr "destruktionsfunktion '%T' skal passe til klassenavnet '%T'" #~ msgid "variable declaration is not allowed here" #~ msgstr "variabelerklring er ikke tilladt her" #~ msgid "invalid declarator" #~ msgstr "ugyldig erklrer" #~ msgid "declarator-id missing; using reserved word `%D'" #~ msgstr "erklrer-id mangler; bruger reserveret ord '%D'" #~ msgid "type `%T' is not derived from type `%T'" #~ msgstr "typen '%T' er ikke nedarvet fra typen '%T'" #~ msgid "`%T' specified as declarator-id" #~ msgstr "'%T' angivet som erklrer-id" #~ msgid " perhaps you want `%T' for a constructor" #~ msgstr " mske nsker du '%T' for en konstruktionsfunktion" #~ msgid "invalid use of template-name '%E' in a declarator" #~ msgstr "ugyldig brug af skabelonsnavn '%E' i erklring" #~ msgid "declaration of `%D' as non-function" #~ msgstr "erklring af '%D' som ikke-funktion" #~ msgid "`bool' is now a keyword" #~ msgstr "'bool' er et reserveret ord" #~ msgid "extraneous `%T' ignored" #~ msgstr "overfldig '%T' ignoreret" #~ msgid "multiple declarations `%T' and `%T'" #~ msgstr "flere erklringer '%T' og '%T'" #~ msgid "ISO C++ does not support `long long'" #~ msgstr "ISO C++ understtter ikke 'long long'" #~ msgid "ISO C++ forbids declaration of `%s' with no type" #~ msgstr "ISO C++ forbyder erklring af '%s' uden en type" #~ msgid "`%T' is implicitly a typename" #~ msgstr "'%T' er underforstet et typenavn" #~ msgid "short, signed or unsigned invalid for `%s'" #~ msgstr "short, signed eller unsigned er ugyldig for '%s'" #~ msgid "long and short specified together for `%s'" #~ msgstr "long og short er begge angivet for '%s'" #~ msgid "signed and unsigned given together for `%s'" #~ msgstr "signed og unsigned er begge angivet for '%s'" #~ msgid "qualifiers are not allowed on declaration of `operator %T'" #~ msgstr "modifikationer er ikke tilladt i erklring af 'operator %T'" #~ msgid "member `%D' cannot be declared both virtual and static" #~ msgstr "medlemmet '%D' kan ikke afklres bde virtual og static" #~ msgid "storage class specifiers invalid in parameter declarations" #~ msgstr "lagringsklasseanvisninger er ugyldige i parametererklringer" #~ msgid "typedef declaration invalid in parameter declaration" #~ msgstr "typedef-erklringer er ugyldig i parametererklringer" #~ msgid "virtual outside class declaration" #~ msgstr "virtual angivet uden for klasseerklring" #~ msgid "storage class specified for %s `%s'" #~ msgstr "lagringsklasse angivet for %s '%s'" #~ msgid "storage class specifiers invalid in friend function declarations" #~ msgstr "lagringsklasseanvisninger er ugyldige i vennefunktionserklringer" #~ msgid "destructor cannot be static member function" #~ msgstr "destruktionsfunktionen kan ikke vre en statisk medlemsfunktion" #~ msgid "destructors may not be `%s'" #~ msgstr "destruktionsfunktioner m ikke vre '%s'" #~ msgid "constructor cannot be static member function" #~ msgstr "konstruktionsfunktionen kan ikke vre en statisk medlemsfunktion" #~ msgid "constructors cannot be declared virtual" #~ msgstr "konstruktionsfunktioner kan ikke erklres virtual" #~ msgid "constructors may not be `%s'" #~ msgstr "konstruktionsfunktioner m ikke vre '%s'" #~ msgid "return value type specifier for constructor ignored" #~ msgstr "angivelse af typen af returvrdien til konstruktionsfunktionen ignoreret" #~ msgid "can't initialize friend function `%s'" #~ msgstr "kan ikke tildele en startvrdi til vennefunktionen '%s'" #~ msgid "virtual functions cannot be friends" #~ msgstr "en virtuel funktion kan ikke erklres som friend" #~ msgid "friend declaration not in class definition" #~ msgstr "friend-erklringen er ikke i klassedefinitionen" #~ msgid "can't define friend function `%s' in a local class definition" #~ msgstr "kan ikke definere vennefunktion '%s' i en lokal klassedefinition" #~ msgid "destructors may not have parameters" #~ msgstr "destruktionsfunktioner m ikke have parametre" #~ msgid "cannot declare reference to `%#T'" #~ msgstr "kan ikke erklre reference til '%#T'" #~ msgid "cannot declare pointer to `%#T'" #~ msgstr "kan ikke erklre henvisning til '%#T'" #~ msgid "cannot declare pointer to `%#T' member" #~ msgstr "kan ikke erklre henvisning til medlemmet '%#T'" #~ msgid "extra qualification `%T::' on member `%s' ignored" #~ msgstr "ekstra modifikation '%T::' af medlemmet '%s' ignoreret" #~ msgid "cannot declare member function `%T::%s' within `%T'" #~ msgstr "kan ikke erklre medlemsfunktion '%T::%s' inde i '%T'" #~ msgid "cannot declare member `%T::%s' within `%T'" #~ msgstr "kan ikke erklre medlem '%T::%s' inde i '%T'" #~ msgid "data member may not have variably modified type `%T'" #~ msgstr "datamedlem m ikke have variabelt ndret type '%T'" #~ msgid "parameter may not have variably modified type `%T'" #~ msgstr "parameter m ikke have variabelt ndret type '%T'" #~ msgid "only declarations of constructors can be `explicit'" #~ msgstr "kun erklringer af konstruktionsfunktioner kan vre 'explicit'" #~ msgid "non-member `%s' cannot be declared `mutable'" #~ msgstr "'%s' som ikke er medlem, kan ikke erklres 'mutable'" #~ msgid "non-object member `%s' cannot be declared `mutable'" #~ msgstr "'%s' som ikke er objektmedlem, kan ikke erklres 'mutable'" #~ msgid "function `%s' cannot be declared `mutable'" #~ msgstr "funktionen '%s' kan ikke erklres 'mutable'" #~ msgid "static `%s' cannot be declared `mutable'" #~ msgstr "static '%s' kan ikke erklres 'mutable'" #~ msgid "const `%s' cannot be declared `mutable'" #~ msgstr "const '%s' kan ikke erklres 'mutable'" #~ msgid "template-id `%D' used as a declarator" #~ msgstr "skabelons-id '%D' benyttet som erklrer" #~ msgid "ISO C++ forbids nested type `%D' with same name as enclosing class" #~ msgstr "ISO C++ forbyder indlejret type '%D' med samme navn som den omgivende klasse" #~ msgid "typedef name may not be class-qualified" #~ msgstr "typedef-navn kan ikke klassemodificeres" #~ msgid "invalid type qualifier for non-member function type" #~ msgstr "ugyldig typemodifikation for ikke-medlemsfunktionstype" #~ msgid "type qualifiers specified for friend class declaration" #~ msgstr "typemodifikationer angivet for friend class-erklring" #~ msgid "`inline' specified for friend class declaration" #~ msgstr "'inline' angivet for friend class-erklring" #~ msgid "template parameters cannot be friends" #~ msgstr "skabelonsparametre kan ikke vre venner" #~ msgid "friend declaration requires class-key, i.e. `friend class %T::%D'" #~ msgstr "friend-erklring krver klasseangivelse, dvs. 'friend class %T::%D'" #~ msgid "friend declaration requires class-key, i.e. `friend %#T'" #~ msgstr "friend-erklring krver klasseangivelse, dvs. 'friend %#T'" #~ msgid "trying to make class `%T' a friend of global scope" #~ msgstr "forsg p at gre klassen '%T' til ven af det globale virkningsfelt" #~ msgid "invalid qualifiers on non-member function type" #~ msgstr "ugyldige modifikationer for ikke-medlemsfunktionstype" #~ msgid "abstract declarator `%T' used as declaration" #~ msgstr "abstrakt erklrer '%T' benyttet som erklring" #~ msgid "unnamed variable or field declared void" #~ msgstr "unavngiven variabel eller felt erklret void" #~ msgid "variable or field declared void" #~ msgstr "variabel eller felt erklret void" #~ msgid "cannot use `::' in parameter declaration" #~ msgstr "kan ikke bruge '::' i parametererklring" #~ msgid "invalid use of `::'" #~ msgstr "ugyldig brug af '::'" #~ msgid "function `%D' cannot be declared friend" #~ msgstr "funktionen '%D' kan ikke erklres friend" #~ msgid "can't make `%D' into a method -- not in a class" #~ msgstr "kan ikke gre '%D' til en metode - er ikke i en klasse" #~ msgid "function `%D' declared virtual inside a union" #~ msgstr "funktionen '%D' erklret virtual inden i en union" #~ msgid "`%D' cannot be declared virtual, since it is always static" #~ msgstr "'%D' kan ikke erklres virtual eftersom den altid er statisk" #~ msgid "field `%D' has incomplete type" #~ msgstr "feltet '%D' er af en ufuldstndig type" #~ msgid "name `%T' has incomplete type" #~ msgstr "navnet '%T' er af en ufuldstndig type" #~ msgid " in instantiation of template `%T'" #~ msgstr " i instantiering af skabelonen '%T'" #~ msgid "`%s' is neither function nor member function; cannot be declared friend" #~ msgstr "'%s' er hverken en almindelig funktion eller en medlemsfunktion; kan ikke erklres som friend" #~ msgid "member functions are implicitly friends of their class" #~ msgstr "medlemsfunktioner er underforstet venner af deres klasse" #~ msgid "ISO C++ forbids initialization of member `%D'" #~ msgstr "ISO C++ forbyder tildeling af startvrdi til medlemmet '%D'" #~ msgid "making `%D' static" #~ msgstr "gr '%D' statisk" #~ msgid "ISO C++ forbids static data member `%D' with same name as enclosing class" #~ msgstr "ISO C++ forbyder statisk datamedlem '%D' med samme navn som den omgivende klasse" #~ msgid "storage class `auto' invalid for function `%s'" #~ msgstr "lagringsklassen 'auto' er ugyldig for funktionen '%s'" #~ msgid "storage class `register' invalid for function `%s'" #~ msgstr "lagringsklassen 'register' er ugyldig for funktionen '%s'" #~ msgid "storage class `__thread' invalid for function `%s'" #~ msgstr "lagringsklassen '__thread' er ugyldig for funktionen '%s'" #~ msgid "storage class `static' invalid for function `%s' declared out of global scope" #~ msgstr "lagringsklassen 'static' er ugyldig for funktionen '%s' erklret uden for det globale virkefelt" #~ msgid "storage class `inline' invalid for function `%s' declared out of global scope" #~ msgstr "lagringsklassen 'inline' er ugyldig for funktionen '%s' erklret uden for det globale virkefelt" #~ msgid "virtual non-class function `%s'" #~ msgstr "virtuel funktion '%s' tilhrer ikke en klasse" #~ msgid "cannot declare member function `%D' to have static linkage" #~ msgstr "kan ikke erklre medlemsfunktion '%D' til at have statisk kdning" #~ msgid "cannot declare static function inside another function" #~ msgstr "kan ikke erklre en funktion for static inden i en anden funktion" #~ msgid "`static' may not be used when defining (as opposed to declaring) a static data member" #~ msgstr "'static' m ikke bruges ved definering (i modstning til erklring) af et statisk datamedlem" #~ msgid "static member `%D' declared `register'" #~ msgstr "statisk medlem '%D' erklret 'register'" #~ msgid "cannot explicitly declare member `%#D' to have extern linkage" #~ msgstr "kan ikke eksplicit erklre medlemmet '%#D' til at have extern-kdning" #~ msgid "default argument for `%#D' has type `%T'" #~ msgstr "standardparameter for '%#D' har typen '%T'" #~ msgid "default argument for parameter of type `%T' has type `%T'" #~ msgstr "standardparameter for parameter af typen '%T' har typen '%T'" #~ msgid "default argument `%E' uses local variable `%D'" #~ msgstr "standardparameter '%E' bruger lokal variabel '%D'" #~ msgid "invalid string constant `%E'" #~ msgstr "ugyldig strengkonstant '%E'" #~ msgid "invalid integer constant in parameter list, did you forget to give parameter name?" #~ msgstr "ugyldig heltalskonstant i parameterlisten, mske mangler parameternavnet?" #~ msgid "parameter `%D' invalidly declared method type" #~ msgstr "parameteren '%D' er p ugyldig vis erklret som af en medlemsfunktionstype" #~ msgid "parameter `%D' invalidly declared offset type" #~ msgstr "parameteren '%D' er p ugyldig vis erklret som af en offset-type" #~ msgid "parameter `%D' includes %s to array of unknown bound `%T'" #~ msgstr "parameteren '%D' inkluderer %s til tabel med ukendt grnse '%T'" #~ msgid "invalid constructor; you probably meant `%T (const %T&)'" #~ msgstr "ugyldig konstruktionsfunktion; du mente sandsynligvis '%T (const %T&)'" #~ msgid "`%D' must be a nonstatic member function" #~ msgstr "'%D' skal vre en ikke-statisk medlemsfunktion" #~ msgid "`%D' must be either a non-static member function or a non-member function" #~ msgstr "'%D' skal enten vre en ikke-statisk medlemsfunktion eller ikke en medlemsfunktion" #~ msgid "`%D' must have an argument of class or enumerated type" #~ msgstr "'%D' skal have en parameter af en klasse- eller enum-type" #~ msgid "conversion to %s%s will never use a type conversion operator" #~ msgstr "konvertering til %s%s vil aldrig bruge en typekonverteringsoperator" #~ msgid "ISO C++ prohibits overloading operator ?:" #~ msgstr "ISO C++ forbyder flertydiggrelse af operatoren ?:" #~ msgid "postfix `%D' must take `int' as its argument" #~ msgstr "postfiks '%D' skal tage mod 'int' som parameter" #~ msgid "postfix `%D' must take `int' as its second argument" #~ msgstr "postfiks '%D' skal tage mod 'int' som den anden parameter" #~ msgid "`%D' must take either zero or one argument" #~ msgstr "'%D' skal tage mod nul eller n parameter" #~ msgid "`%D' must take either one or two arguments" #~ msgstr "'%D' skal tage mod n eller to parametre" #~ msgid "prefix `%D' should return `%T'" #~ msgstr "prfiks '%D' skal returnere '%T'" #~ msgid "postfix `%D' should return `%T'" #~ msgstr "postfiks '%D' skal returnere '%T'" #~ msgid "`%D' must take `void'" #~ msgstr "'%D' skal tage mod 'void'" #~ msgid "`%D' must take exactly one argument" #~ msgstr "'%s' skal tage mod n parameter" #~ msgid "`%D' must take exactly two arguments" #~ msgstr "'%s' skal tage mod to parametre" #~ msgid "user-defined `%D' always evaluates both arguments" #~ msgstr "brugerdefineret '%D' evaluerer altid begge parametre" #~ msgid "`%D' should return by value" #~ msgstr "'%D' skal returnere pr. vrdi (ikke reference)" #~ msgid "`%D' cannot have default arguments" #~ msgstr "'%D' kan ikke have standardparametre" #~ msgid "using typedef-name `%D' after `%s'" #~ msgstr "bruger typedef-navn '%D' efter '%s'" #~ msgid "using template type parameter `%T' after `%s'" #~ msgstr "bruger skabelonstypeparameter '%D' efter '%s'" #~ msgid "`%s %T' declares a new type at namespace scope" #~ msgstr "'%s %T' erklrer en ny type ved navnerumsvirkefelt" #~ msgid " names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T'" #~ msgstr " navne fra afhngige stamklasser er ikke synlige for umodificerede navneopslag - benyt '%s %T::%T' for at referere til den nedarvede type" #~ msgid "use of enum `%#D' without previous declaration" #~ msgstr "brug af enum '%#D' uden tidligere erklring" #~ msgid "derived union `%T' invalid" #~ msgstr "nedarvet union '%T' ugyldig" #~ msgid "base type `%T' fails to be a struct or class type" #~ msgstr "stamklassetype '%T' er hverken en struct- eller class-type" #~ msgid "base class `%T' has incomplete type" #~ msgstr "stamklasse '%T' er af en ufuldstndig type" #~ msgid "recursive type `%T' undefined" #~ msgstr "rekursiv type '%T' ikke defineret" #~ msgid "duplicate base type `%T' invalid" #~ msgstr "stamklassetype '%T' optrder mere end n gang" #~ msgid "multiple definition of `%#T'" #~ msgstr "flere definitioner af '%#T'" #~ msgid "previous definition here" #~ msgstr "tidligere definition her" #~ msgid "enumerator value for `%D' not integer constant" #~ msgstr "enum-vrdi for '%D' er ikke en heltalskonstant" #~ msgid "overflow in enumeration values at `%D'" #~ msgstr "enum-vrdier for store ved '%D'" #~ msgid "return type `%#T' is incomplete" #~ msgstr "returtype '%#T' er ufuldstndig" #~ msgid "semicolon missing after declaration of `%#T'" #~ msgstr "semikolon mangler efter erklring af '%#T'" #~ msgid "return type for `main' changed to `int'" #~ msgstr "returtype for 'main' ndret til 'int'" #~ msgid "`%D' implicitly declared before its definition" #~ msgstr "'%s' er underforstet erklret efter dens definition" #~ msgid "`operator=' should return a reference to `*this'" #~ msgstr "'operator=' br returnere en reference til '*this'" #~ msgid "parameter `%D' declared void" #~ msgstr "parameteren '%D' erklret void" #~ msgid "`%D' is already defined in class `%T'" #~ msgstr "'%D' er allerede defineret i klassen '%T'" #~ msgid "static member function `%#D' declared with type qualifiers" #~ msgstr "statisk medlemsfunktion '%#D' erklret med typemodifikationer" #~ msgid "duplicate type qualifiers in %s declaration" #~ msgstr "dobbelte typemodifikationer i %s-erklring" #~ msgid "template `%#D' instantiated in file without #pragma interface" #~ msgstr "skabelon '%#D' instantieret i fil uden #pragma interface" #~ msgid "template `%#D' defined in file without #pragma interface" #~ msgstr "skabelon '%#D' defineret i fil uden #pragma interface" #~ msgid "name missing for member function" #~ msgstr "navn mangler for medlemsfunktion" #~ msgid "parser may be lost: is there a '{' missing somewhere?" #~ msgstr "fortolkeren kan vre faret vild: mangler der en '{' et eller andet sted?" #~ msgid "ambiguous conversion for array subscript" #~ msgstr "tvetydig konvertering af tabelindeks" #~ msgid "invalid types `%T[%T]' for array subscript" #~ msgstr "ugyldige typer '%T[%T]' for tabelopslag" #~ msgid "type `%#T' argument given to `delete', expected pointer" #~ msgstr "parameter af typen '%#T' givet til 'delete', forventede henvisning" #~ msgid "anachronistic use of array size in vector delete" #~ msgstr "forldet brug af tabelstrrelse i tabelformen af delete" #~ msgid "cannot delete a function. Only pointer-to-objects are valid arguments to `delete'" #~ msgstr "kan ikke udfre delete p en funktion; kun henvisninger til objekter er gyldige som parameter til 'delete'" #~ msgid "deleting `%T' is undefined" #~ msgstr "benyttelse af delete p '%T' er ikke defineret" #~ msgid "deleting array `%#D'" #~ msgstr "benyttelse af delete p tabellen '%#D'" #~ msgid "invalid declaration of member template `%#D' in local class" #~ msgstr "ugyldig erklring af medlemsskabelon '%#D' i lokal klasse" #~ msgid "invalid use of `virtual' in template declaration of `%#D'" #~ msgstr "ugyldig brug af 'virtual' i skabelonserklring af '%#D'" #~ msgid "template declaration of `%#D'" #~ msgstr "skabelonserklring af '%#D'" #~ msgid "Java method '%D' has non-Java return type `%T'" #~ msgstr "Java-metoden '%D' har har en returtype '%T' som ikke er fra Java" #~ msgid "Java method '%D' has non-Java parameter type `%T'" #~ msgstr "Java-metoden '%D' har har en parametertype '%T' som ikke er fra Java" #~ msgid "prototype for `%#D' does not match any in class `%T'" #~ msgstr "prototypen for '%#D' passer ikke nogen i klassen '%T'" #~ msgid "local class `%#T' shall not have static data member `%#D'" #~ msgstr "lokal klasse '%#T' m ikke have det statiske datamedlem '%#D'" #~ msgid "initializer invalid for static member with constructor" #~ msgstr "tildeling af startvrdi er ugyldig for statisk medlem med konstruktionsfunktion" #~ msgid "(an out of class initialization is required)" #~ msgstr "(en klargring uden for klassens erklring er ndvendig)" #~ msgid "invalid data member initialization" #~ msgstr "ugyldig tildeling af startvrdi til datamedlem" #~ msgid "(use `=' to initialize static data members)" #~ msgstr "(brug '=' for at klargre statiske datamedlemmer)" #~ msgid "member `%D' conflicts with virtual function table field name" #~ msgstr "medlemmet '%D' er i konflikt med feltnavn fra den virtuelle funktionstabel" #~ msgid "`%D' is already defined in `%T'" #~ msgstr "'%D' er allerede defineret i '%T'" #~ msgid "field initializer is not constant" #~ msgstr "feltets startvrdi er ikke en konstant" #~ msgid "`asm' specifiers are not permitted on non-static data members" #~ msgstr "'asm'-angivelser er ikke tilladt p ikke-statiske datamedlemmer" #~ msgid "cannot declare `%D' to be a bit-field type" #~ msgstr "kan ikke erklre '%D' til at vre en bitfeltstype" #~ msgid "cannot declare bit-field `%D' with function type" #~ msgstr "kan ikke erklre bitfelt '%D' med funktionstype" #~ msgid "`%D' is already defined in the class %T" #~ msgstr "'%D' er allerede defineret i klassen '%T'" #~ msgid "static member `%D' cannot be a bit-field" #~ msgstr "statisk medlem '%D' kan ikke vre et bitfelt" #~ msgid "initializer specified for non-member function `%D'" #~ msgstr "startvrdi angivet for ikke-medlemsfunktion '%D'" #~ msgid "invalid initializer for virtual method `%D'" #~ msgstr "ugyldig startvrdi til virtuel medlemsfunktion '%D'" #~ msgid "anonymous struct not inside named type" #~ msgstr "anonym struct er ikke inden i en navngiven type" #~ msgid "namespace-scope anonymous aggregates must be static" #~ msgstr "anonyme variabler af sammensatte typer i navnerumsvirkefelt skal erklres static" #~ msgid "anonymous aggregate with no members" #~ msgstr "anonym sammensat type uden medlemmer" #~ msgid "`operator new' must return type `%T'" #~ msgstr "'operator new' skal returnere typen '%T'" #~ msgid "`operator new' takes type `size_t' (`%T') as first parameter" #~ msgstr "den frste parameter til 'operator new' skal vre af typen 'size_t' ('%T')" #~ msgid "`operator delete' must return type `%T'" #~ msgstr "'operator delete' skal returnere typen '%T'" #~ msgid "`operator delete' takes type `%T' as first parameter" #~ msgstr "den frste parameter til 'operator delete' skal vre af typen '%T'" #~ msgid "too many initialization functions required" #~ msgstr "for mange klargringsfunktioner pkrvet" #~ msgid "inline function `%D' used but never defined" #~ msgstr "indbygget funktion '%D' benyttet, men aldrig defineret" #~ msgid "use of old-style cast" #~ msgstr "brug af ldre type typeomtvingning" #~ msgid "use of `%D' is ambiguous" #~ msgstr "brug af '%D' er tvetydigt" #~ msgid " first declared as `%#D' here" #~ msgstr " frst erklret som '%#D' her" #~ msgid " also declared as `%#D' here" #~ msgstr " ogs erklret som '%#D' her" #~ msgid "`%D' denotes an ambiguous type" #~ msgstr "'%D' angiver en tvetydig type" #~ msgid " first type here" #~ msgstr " frste type her" #~ msgid " other type here" #~ msgstr " anden type her" #~ msgid "declaration of `%D' not in a namespace surrounding `%D'" #~ msgstr "erklring af '%D' er ikke i et navnerum der omgiver '%D'" #~ msgid "`%D' should have been declared inside `%D'" #~ msgstr "'%D' skulle have vret erklret inden i '%D'" #~ msgid "`%D' is not a function," #~ msgstr "'%s' er ikke en funktion," #~ msgid " conflict with `%D'" #~ msgstr " konflikt med '%D'" #~ msgid "unknown namespace `%D'" #~ msgstr "ukendt navnerum '%D'" #~ msgid "`%T' is not a namespace" #~ msgstr "'%T' er ikke et navnerum" #~ msgid "`%D' is not a namespace" #~ msgstr "'%D' er ikke et navnerum" #~ msgid "a using-declaration cannot specify a template-id. Try `using %D'" #~ msgstr "en using-erklring kan ikke angive en skabelons-id; prv 'using %D'" #~ msgid "namespace `%D' not allowed in using-declaration" #~ msgstr "navnerum '%D' ikke tilladt i using-erklring" #~ msgid "`%D' not declared" #~ msgstr "'%D' ikke erklret" #~ msgid "`%D' is already declared in this scope" #~ msgstr "'%D' er allerede erklret i dette navnerum" #~ msgid "using declaration `%D' introduced ambiguous type `%T'" #~ msgstr "using-erklring '%D' introducerede tvetydig type '%T'" #~ msgid "using-declaration for non-member at class scope" #~ msgstr "using-erklring for ikke-medlem ved klassevirkefelt" #~ msgid "using-declaration for destructor" #~ msgstr "using-erklring for destruktionsfunktion" #~ msgid "a using-declaration cannot specify a template-id. Try `using %T::%D'" #~ msgstr "en using-erklring kan ikke angive en skabelons-id; prv 'using %T::%D'" #~ msgid "namespace `%T' undeclared" #~ msgstr "navnerummet '%T' er ikke erklret" #~ msgid "default argument missing for parameter %P of `%+#D'" #~ msgstr "standardparameter mangler for parameter %P i '%+#D'" #~ msgid "extra qualification `%T::' on member `%D' ignored" #~ msgstr "ekstra modifikation '%T::' af medlemmet '%D' ignoreret" #~ msgid "`%T' does not have a class or union named `%D'" #~ msgstr "'%T' har ikke en klasse eller en union ved navn '%D'" #~ msgid "`%T' is not a class or union type" #~ msgstr "'%T' er ikke af en klasse- eller union-type" #~ msgid "template argument is required for `%T'" #~ msgstr "skabelonsparameter er pkrvet for '%T'" #~ msgid "declaration of `%D' in `%D' which does not enclose `%D'" #~ msgstr "erklring af '%D' i '%D' som ikke omgiver '%D'" #~ msgid "`%s' not supported by %s" #~ msgstr "'%s' ikke understttet af %s" #~ msgid "" #~ msgstr "" #~ msgid "(static %s for %s)" #~ msgstr "(statisk %s for %s)" #~ msgid "\\x%x" #~ msgstr "\\x%x" #~ msgid "In %s `%s':" #~ msgstr "I %s '%s':" #~ msgid "%s: In instantiation of `%s':\n" #~ msgstr "%s: i instantiering af '%s':\n" #~ msgid "%s:%d: instantiated from `%s'\n" #~ msgstr "%s:%d: instantieret fra '%s'\n" #~ msgid "%s:%d: instantiated from here\n" #~ msgstr "%s:%d: instantieret herfra\n" #~ msgid "unexpected letter `%c' in locate_error\n" #~ msgstr "uventet bogstav '%c' i locate_error\n" #~ msgid "type `%T' is disallowed in Java `throw' or `catch'" #~ msgstr "typen '%T' er ikke tilladt i Java 'throw' eller 'catch'" #~ msgid "call to Java `catch' or `throw' with `jthrowable' undefined" #~ msgstr "kald til Java 'catch' eller 'throw' mens 'jthrowable' ikke er defineret" #~ msgid "type `%T' is not derived from `java::lang::Throwable'" #~ msgstr "typen '%T' nedarver ikke fra 'java::lang::Throwable'" #~ msgid "mixing C++ and Java catches in a single translation unit" #~ msgstr "blander C++ og Java 'catch' i n oversttelsesenhed" #~ msgid "throwing NULL, which has integral, not pointer type" #~ msgstr "kaster NULL som har en heltals-, ikke en henvisningstype" #~ msgid " in thrown expression" #~ msgstr " i kastet udtryk" #~ msgid "expression '%E' of abstract class type '%T' cannot be used in throw-expression" #~ msgstr "udtrykket '%E' med den abstrakte klassetype '%T' kan ikke bruges i throw-udtryk" #~ msgid "exception of type `%T' will be caught" #~ msgstr "undtagelse af typen '%T' vil blive fanget" #~ msgid " by earlier handler for `%T'" #~ msgstr " af tidligere hndtering af '%T'" #~ msgid "`...' handler must be the last handler for its try block" #~ msgstr "hndteringen '...' skal vre den sidste hndtering i try-blokken" #~ msgid "`%D' is already a friend of class `%T'" #~ msgstr "'%D' er allerede en ven af klassen '%T'" #~ msgid "previous friend declaration of `%D'" #~ msgstr "tidligere friend-erklring af '%D'" #~ msgid "invalid type `%T' declared `friend'" #~ msgstr "ugyldig type '%T' erklret 'friend'" #~ msgid "partial specialization `%T' declared `friend'" #~ msgstr "partiel specialisering '%T' erklret 'friend'" #~ msgid "class `%T' is implicitly friends with itself" #~ msgstr "klassen '%T' er underforstet ven med sig selv" #~ msgid "typename type `%#T' declared `friend'" #~ msgstr "typename-type '%#T' erklret 'friend'" #~ msgid "template parameter type `%T' declared `friend'" #~ msgstr "skabelonsparametertypen '%T' erklret 'friend'" #~ msgid "`%#T' is not a template" #~ msgstr "'%#T' er ikke en skabelon" #~ msgid "`%T' is already a friend of `%T'" #~ msgstr "'%T' er allerede en ven af '%T'" #~ msgid "member `%D' declared as friend before type `%T' defined" #~ msgstr "medlemmet '%D' erklret som friend fr typen '%T' er defineret" #~ msgid "friend declaration `%#D' declares a non-template function" #~ msgstr "friend-erklring '%#D' erklrer en ikke-skabelonsfunktion" #~ msgid "(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning" #~ msgstr "(hvis dette er hvad du nsker, s sikr dig at funktionsskabelonen allerede er blevet erklret og tilfj <> efter funktionsnavnet her) -Wno-non-template-friend deaktiverer denne advarsel" #~ msgid "argument to `%s' missing\n" #~ msgstr "en parameter til '%s' mangler\n" #~ msgid "`%D' should be initialized in the member initialization list" #~ msgstr "'%D' br blive klargjort i medlemsklargringslisten" #~ msgid "default-initialization of `%#D', which has reference type" #~ msgstr "standardklargring af '%#D' som er af en referencetype" #~ msgid "uninitialized reference member `%D'" #~ msgstr "referencemedlem '%D' uden startvrdi" #~ msgid "initializer list treated as compound expression" #~ msgstr "klargringsliste behandlet som et sammensat udtryk" #~ msgid "`%D' will be initialized after" #~ msgstr "'%D' vil blive klargjort efter" #~ msgid "base `%T' will be initialized after" #~ msgstr "stamklasse '%T' vil blive klargjort efter" #~ msgid " `%#D'" #~ msgstr " '%#D'" #~ msgid " base `%T'" #~ msgstr " stamklasse '%T'" #~ msgid "multiple initializations given for base `%T'" #~ msgstr "flere startvrdier angivet for stamklassen '%T'" #~ msgid "initializations for multiple members of `%T'" #~ msgstr "startvrdier for flere medlemmer af '%T'" #~ msgid "base class `%#T' should be explicitly initialized in the copy constructor" #~ msgstr "stamklassen '%#T' br eksplicit blive klargjort i kopikonstruktionsfunktionen" #~ msgid "class `%T' does not have any field named `%D'" #~ msgstr "klassen '%T' har ikke et felt ved navn '%D'" #~ msgid "field `%#D' is static; the only point of initialization is its definition" #~ msgstr "feltet '%#D' er statisk; det eneste sted det kan klargres er ved dets definition" #~ msgid "unnamed initializer for `%T', which has no base classes" #~ msgstr "unavngiven klargring af '%T' som ikke har nogen stamklasser" #~ msgid "unnamed initializer for `%T', which uses multiple inheritance" #~ msgstr "unavngiven klargring af '%T' som benytter multipel nedarvning" #~ msgid "type `%D' is not a direct or virtual base of `%T'" #~ msgstr "typen '%D' er ikke en direkte eller en virtuel stamklasse til '%T'" #~ msgid "type `%D' is not a direct base of `%T'" #~ msgstr "typen '%D' er ikke en direkte stamklasse til '%T'" #~ msgid "bad array initializer" #~ msgstr "ugyldig tildeling af startvrdi til tabel" #~ msgid "`%T' is not an aggregate type" #~ msgstr "'%T' er ikke en sammensat type" #~ msgid "`%T' fails to be an aggregate typedef" #~ msgstr "'%T' er ikke en sammensat typedef" #~ msgid "type `%T' is of non-aggregate type" #~ msgstr "typen '%T' er ikke en sammensat type" #~ msgid "cannot call destructor `%T::~%T' without object" #~ msgstr "kan ikke kalde destruktionsfunktion '%T::~%T' uden objekt" #~ msgid "invalid use of non-static field `%D'" #~ msgstr "ugyldig brug af ikke-statisk felt '%D'" #~ msgid "invalid use of member `%D'" #~ msgstr "ugyldig brug af medlemmet '%D'" #~ msgid "no method `%T::%D'" #~ msgstr "ingen metode ved navn '%T::%D'" #~ msgid "incomplete type `%T' does not have member `%D'" #~ msgstr "ufuldstndig type '%T' har ikke medlemmet '%D'" #~ msgid "`%D' is not a member of type `%T'" #~ msgstr "'%D' er ikke et medlem af typen '%T'" #~ msgid "invalid pointer to bit-field `%D'" #~ msgstr "ugyldig henvisning til bitfeltet '%D'" #~ msgid "object missing in use of pointer-to-member construct" #~ msgstr "der mangler et objekt i henvisning til medlem-konstruktion" #~ msgid "member `%D' is non-static but referenced as a static member" #~ msgstr "medlemmet '%D' er ikke statisk, men refereres som et statisk medlem" #~ msgid "at this point in file" #~ msgstr "ved dette sted i filen" #~ msgid "object missing in `%E'" #~ msgstr "objekt mangler i '%E'" #~ msgid "new of array type fails to specify size" #~ msgstr "new virkende p en tabeltype mangler at angive strrelsen" #~ msgid "size in array new must have integral type" #~ msgstr "strrelse i tabel-new skal vre en heltalstype" #~ msgid "zero size array reserves no space" #~ msgstr "tabel med strrelsen nul reserverer ingen plads" #~ msgid "new cannot be applied to a reference type" #~ msgstr "new kan ikke bruges p en referencetype" #~ msgid "new cannot be applied to a function type" #~ msgstr "new kan ikke bruges p en funktionstype" #~ msgid "call to Java constructor, while `jclass' undefined" #~ msgstr "kald af Java-konstruktionsfunktion mens 'jclass' ikke er defineret" #~ msgid "can't find class$" #~ msgstr "kan ikke finde class$" #~ msgid "invalid type `void' for new" #~ msgstr "ugyldig type 'void' til new" #~ msgid "call to Java constructor with `%s' undefined" #~ msgstr "kald af Java-konstruktionsfunktion mens '%s' ikke er defineret" #~ msgid "ISO C++ forbids initialization in array new" #~ msgstr "ISO C++ forbyder startvrdier i tabel-new" #~ msgid "initializer list being treated as compound expression" #~ msgstr "klargringsliste bliver behandlet som et sammensat udtryk" #~ msgid "ISO C++ forbids aggregate initializer to new" #~ msgstr "ISO C++ forbyder sammensat startvrditildeling ved new" #~ msgid "uninitialized const in `new' of `%#T'" #~ msgstr "konstant uden startvrdi i 'new' af '%#T'" #~ msgid "initializer ends prematurely" #~ msgstr "startvrdien slutter for tidligt" #~ msgid "cannot initialize multi-dimensional array with initializer" #~ msgstr "kan ikke klargre multidimensional tabel med startvrdi" #~ msgid "unknown array size in delete" #~ msgstr "ukendt tabelstrrelse i delete" #~ msgid "type to vector delete is neither pointer or array type" #~ msgstr "variablen til tabel-delete er hverken af en henvisnings- eller en tabeltype" #~ msgid "type name expected before `*'" #~ msgstr "der forventedes et typenavn fr '*'" #~ msgid "cannot declare references to references" #~ msgstr "kan ikke erklre referencer til referencer" #~ msgid "cannot declare pointers to references" #~ msgstr "kan ikke erklre henvisninger til referencer" #~ msgid "type name expected before `&'" #~ msgstr "der forventedes et typenavn fr '&'" #~ msgid "semicolon missing after %s declaration" #~ msgstr "semikolon mangler efter %s-erklring" #~ msgid "semicolon missing after declaration of `%T'" #~ msgstr "semikolon mangler efter erklring af '%T'" #~ msgid "junk at end of #pragma %s" #~ msgstr "ragelse i slutningen 'af #pragma %s'" #~ msgid "invalid #pragma %s" #~ msgstr "ugyldig #pragma %s" #~ msgid "#pragma vtable no longer supported" #~ msgstr "'#pragma vtable' understttes ikke lngere" #~ msgid "#pragma implementation for %s appears after file is included" #~ msgstr "'#pragma implementation' til %s optrder efter filen er inkluderet" #~ msgid "junk at end of #pragma GCC java_exceptions" #~ msgstr "ragelse i slutningen af #pragma GCC java_exceptions" #~ msgid "`%D' not defined" #~ msgstr "'%D' er ikke defineret" #~ msgid "`%D' was not declared in this scope" #~ msgstr "'%D' blev ikke erklret i dette virkefelt" #~ msgid "`%D' undeclared (first use this function)" #~ msgstr "'%D' er ikke erklret (frst benyttet i denne funktion)" # dkkende, og pnere end original i praktisk brug #~ msgid "(Each undeclared identifier is reported only once for each function it appears in.)" #~ msgstr "(et kaldenavn der ikke er erklret, rapporteres kun n gang per funktion)" #~ msgid "`::%D' undeclared (first use here)" #~ msgstr "'::%D' er ikke erklret (frst benyttet her)" #~ msgid "real-valued template parameters when cross-compiling" #~ msgstr "skabelonsparametre med reelle vrdi ved krydsoversttelse" #~ msgid "the mangled name of `%D' will change in a future version of GCC" #~ msgstr "det ABI-navnet for '%D' vil ndre sig i en fremtidig version af GCC" #~ msgid "due to a defect in the G++ 3.2 ABI, G++ has assigned the same mangled name to two different types" #~ msgstr "pga. en fejl i G++ 3.2-ABI'en har G++ tildelt det samme sammensatte navn til det to forskellige typer" #~ msgid "invalid use of member `%D' in static member function" #~ msgstr "ugyldig brug af medlemmet '%D' i statisk medlemsfunktion" #~ msgid "use of namespace `%D' as expression" #~ msgstr "brug af navnerummet '%D' som udtryk" #~ msgid "use of class template `%T' as expression" #~ msgstr "brug af klasseskabelonen '%T' som udtryk" #~ msgid "use of %s from containing function" #~ msgstr "brug af %s fra indeholdende funktion" #~ msgid " `%#D' declared here" #~ msgstr " '%#D' erklret her" #~ msgid "request for member `%D' is ambiguous in multiple inheritance lattice" #~ msgstr "foresprgsel efter medlemmet '%D' er tvetydigt i det multiple nedarvningsnet" #~ msgid "generic thunk code fails for method `%#D' which uses `...'" #~ msgstr "generel thunk-kode mislykkes for metoden '%#D' som bruger '...'" #~ msgid "non-static const member `%#D', can't use default assignment operator" #~ msgstr "ikke-statisk konstant medlem '%#D' kan ikke bruge standardtildelingsoperatoren" #~ msgid "non-static reference member `%#D', can't use default assignment operator" #~ msgstr "ikke-statisk referencemedlem '%#D' kan ikke bruge standardtildelingsoperatoren" #~ msgid "`%s' tag used in naming `%#T'" #~ msgstr "'%s'-mrke benyttet i navngivning af '%#T'" #~ msgid "keyword `export' not implemented, and will be ignored" #~ msgstr "det reserverede ord 'export' er ikke implementeret og vil blive ignoreret" #~ msgid "use of linkage spec `%D' is different from previous spec `%D'" #~ msgstr "brug af kdningsangivelse '%D' er forskellig fra den tidligere angivelse '%D'" #~ msgid "no base or member initializers given following ':'" #~ msgstr "ingen stamklasse- eller medlemsklargringer er angivet efter ':'" #~ msgid "anachronistic old style base class initializer" #~ msgstr "forldet stamklasseklargring" #~ msgid "`>>' should be `> >' in template class name" #~ msgstr "'>>' skulle have vret '> >' i skabelonsklassenavn" #~ msgid "use of template qualifier outside template" #~ msgstr "brug af skabelonsmodifikation uden for skabelon" #~ msgid "ISO C++ forbids an empty condition for `%s'" #~ msgstr "ISO C++ forbyder en tom betingelse til '%s'" #~ msgid "definition of class `%T' in condition" #~ msgstr "definition af klassen '%T' i betingelse" #~ msgid "definition of enum `%T' in condition" #~ msgstr "definition af enum '%T' i betingelse" #~ msgid "definition of array `%#D' in condition" #~ msgstr "definition af tabel '%#D' i betingelse" #~ msgid "old style placement syntax, use () instead" #~ msgstr "forldet placeringssyntaks, brug () i stedet" #~ msgid "`%T' is not a valid expression" #~ msgstr "'%T' er ikke et gyldigt udtryk" #~ msgid "initialization of new expression with `='" #~ msgstr "tildeling af startvrdi til new-udtryk med '='" #~ msgid "ISO C++ forbids compound literals" #~ msgstr "ISO C++ forbyder sammensatte konstanter" #~ msgid "ISO C++ forbids braced-groups within expressions" #~ msgstr "ISO C++ forbyder krllet parantes-grupper inden i udtryk" #~ msgid "sigof type specifier" #~ msgstr "sigof-typeangivelse" #~ msgid "`sigof' applied to non-aggregate expression" #~ msgstr "'sigof' benyttet p et udtryk der ikke er af en sammensat type" #~ msgid "`sigof' applied to non-aggregate type" #~ msgstr "'sigof' benyttet p en type der ikke er sammensat" #~ msgid "using `typename' outside of template" #~ msgstr "bruger 'typename' uden for en skabelon" #~ msgid "storage class specifier `%s' not allowed after struct or class" #~ msgstr "lagringsklasseangivelsen '%s' er ikke tilladt efter struct eller class" #~ msgid "type specifier `%s' not allowed after struct or class" #~ msgstr "typeangivelsen '%s' er ikke tilladt efter struct eller class" #~ msgid "type qualifier `%s' not allowed after struct or class" #~ msgstr "typemodifikationen '%s' er ikke tilladt efter struct eller class" #~ msgid "no body nor ';' separates two class, struct or union declarations" #~ msgstr "der er hverken en krop eller et semikolon mellem to class, struct eller union-erklringer" #~ msgid "no bases given following `:'" #~ msgstr "ingen stamklasse er angivet efter ':'" #~ msgid "`%D' access" #~ msgstr "'%D'-tilgang" #~ msgid "multiple access specifiers" #~ msgstr "mere end n tilgangsangivelse" #~ msgid "multiple `virtual' specifiers" #~ msgstr "mere end n 'virtual'-angivelse" #~ msgid "missing ';' before right brace" #~ msgstr "der mangler et semikolon fr en hjre krllet parantes" #~ msgid "ISO C++ forbids array dimensions with parenthesized type in new" #~ msgstr "ISO C++ forbyder tabeldimensioner med parantetiseret type i new" #~ msgid "`%T' is not a class or namespace" #~ msgstr "'%T' er ikke en klasse eller et navnerum" #~ msgid "ISO C++ forbids label declarations" #~ msgstr "ISO C++ forbyder etiketerklringer" #~ msgid "ISO C++ forbids computed gotos" #~ msgstr "ISO C++ forbyder beregnede goto'er" #~ msgid "label must be followed by statement" #~ msgstr "etiketten skal efterflges af en stning" #~ msgid "must have at least one catch per try block" #~ msgstr "skal have mindst n catch pr. try-blok" #~ msgid "ISO C++ forbids compound statements inside for initializations" #~ msgstr "ISO C++ forbyder sammensatte stninger inden i 'for'-klargringer" #~ msgid "possibly missing ')'" #~ msgstr "muligvis mangler en ')'" #~ msgid "type specifier omitted for parameter" #~ msgstr "typeangivelsen er ikke angivet for parameteren" #~ msgid "`%E' is not a type, use `typename %E' to make it one" #~ msgstr "'%E' er ikke en type, benyt 'typename %E' for at gre den til en" #~ msgid "no type `%D' in `%T'" #~ msgstr "ingen type '%D' i '%T'" #~ msgid "type specifier omitted for parameter `%E'" #~ msgstr "typeangivelse udeladt for parameteren '%E'" #~ msgid "'%D' is used as a type, but is not defined as a type." #~ msgstr "'%D' benyttes som en type, men er ikke defineret som en type" #~ msgid "data member `%D' cannot be a member template" #~ msgstr "datamedlem '%D' kan ikke vre en medlemsskabelon" #~ msgid "invalid member template declaration `%D'" #~ msgstr "ugyldig medlemsskabelonerklring '%D'" #~ msgid "explicit specialization in non-namespace scope `%D'" #~ msgstr "eksplicit specialisering i virkefeltet '%D' der ikke er et navnerum" #~ msgid "enclosing class templates are not explicitly specialized" #~ msgstr "omgivende klasseskabeloner er ikke eksplicit specialiserede" #~ msgid "specializing `%#T' in different namespace" #~ msgstr "specialiserer '%#T' i andet navnerum" # hnger sammen med foregende tekst, derfor ikke 'fra' #~ msgid " from definition of `%#D'" #~ msgstr " i forhold til definition af '%#D'" #~ msgid "specialization of `%T' after instantiation" #~ msgstr "specialisering af '%T' efter instantiering" #~ msgid "specialization `%T' after instantiation `%T'" #~ msgstr "specialisering af '%T' efter instantiering '%T'" #~ msgid "explicit specialization of non-template `%T'" #~ msgstr "eksplicit specialisering af '%T' der ikke er en skabelon" #~ msgid "specialization of %D after instantiation" #~ msgstr "specialisering af '%D' efter instantiering" #~ msgid "%s %+#D" #~ msgstr "%s %+#D" #~ msgid "`%D' is not a function template" #~ msgstr "'%D' er ikke en funktionsskabelon" #~ msgid "template-id `%D' for `%+D' does not match any template declaration" #~ msgstr "skabelons-id '%D' for '%+D' passer ikke til nogen skabelonserklring" #~ msgid "ambiguous template specialization `%D' for `%+D'" #~ msgstr "tvetydig skabelonsspecialisering '%D' for '%+D'" #~ msgid "template-id `%D' in declaration of primary template" #~ msgstr "skabelons-id '%D' i erklring af primr skabelon" #~ msgid "template parameter list used in explicit instantiation" #~ msgstr "skabelonsparameterliste benyttet i eksplicit instantiering" #~ msgid "definition provided for explicit instantiation" #~ msgstr "definition angivet for eksplicit instantiering" #~ msgid "too many template parameter lists in declaration of `%D'" #~ msgstr "for mange skabelonsparameterlister angivet i erklring af '%D'" #~ msgid "too few template parameter lists in declaration of `%D'" #~ msgstr "for f skabelonsparameterlister angivet i erklring af '%D'" #~ msgid "explicit specialization not preceded by `template <>'" #~ msgstr "eksplicit specialisering flger ikke efter 'template <>'" #~ msgid "partial specialization `%D' of function template" #~ msgstr "partiel specialisering '%D' af funktionsskabelon" #~ msgid "default argument specified in explicit specialization" #~ msgstr "standardparameter angivet i eksplicit specialisering" #~ msgid "template specialization with C linkage" #~ msgstr "skabelonsspecialisering med C-kdning" #~ msgid "specialization of implicitly-declared special member function" #~ msgstr "specialisering af underforstet erklret speciel medlemsfunktion" #~ msgid "no member function `%D' declared in `%T'" #~ msgstr "ingen medlemsfunktion '%D' erklret i '%T'" #~ msgid "too many template parameter lists in declaration of `%T'" #~ msgstr "for mange skabelonsparameterlister i erklringen af '%T'" #~ msgid " shadows template parm `%#D'" #~ msgstr " skygger for skabelonsparameter '%#D'" #~ msgid "template parameters not used in partial specialization:" #~ msgstr "skabelonsparametre der ikke bruges i partiel specialisering:" #~ msgid " `%D'" #~ msgstr " '%D'" #~ msgid "partial specialization `%T' does not specialize any template arguments" #~ msgstr "den partielle specialisering '%T' specialiserer ikke nogen skabelonsparametre" # flertalsform undvendig #~ msgid "template argument `%E' involves template parameter(s)" #~ msgstr "skabelonsparameter '%E' involverer skabelonsparameter" # flertalsform undvendig #~ msgid "type `%T' of template argument `%E' depends on template parameter(s)" #~ msgstr "typen '%T' af skabelonsparameteren '%E' afhnger af skabelonsparameter" #~ msgid "no default argument for `%D'" #~ msgstr "ingen standardparameter til '%D'" #~ msgid "template with C linkage" #~ msgstr "skabelon med C-kdning" #~ msgid "template class without a name" #~ msgstr "skabelonsklasse uden et navn" #~ msgid "`%D' does not declare a template type" #~ msgstr "'%D' erklrer ikke en skabelonstype" #~ msgid "template definition of non-template `%#D'" #~ msgstr "skabelonsdefinition af ikke-skabelon '%#D'" #~ msgid "expected %d levels of template parms for `%#D', got %d" #~ msgstr "forvented %d niveauer af skabelonsparametre for '%#D', modtog %d" #~ msgid "got %d template parameters for `%#D'" #~ msgstr "modtog %d skabelonsparametre for '%#D'" #~ msgid "got %d template parameters for `%#T'" #~ msgstr "modtog %d skabelonsparametre for '%#T'" #~ msgid " but %d required" #~ msgstr " men %d pkrvet" #~ msgid "`%T' is not a template type" #~ msgstr "'%T' er ikke en skabelonstype" # hnger sammen med nste tekst #~ msgid "previous declaration `%D'" #~ msgstr "tidligere erklring '%D'" #~ msgid "used %d template parameter%s instead of %d" #~ msgstr "benyttede %d skabelonsparameter%s i stedet for %d" #~ msgid "template parameter `%#D'" #~ msgstr "skabelonsparameter '%#D'" #~ msgid "redeclared here as `%#D'" #~ msgstr "omerklret her som '%#D'" #~ msgid "redefinition of default argument for `%#D'" #~ msgstr "omdefinering af standardparameter for '%#D'" #~ msgid " original definition appeared here" #~ msgstr " oprindelig definition er her" #~ msgid "`%E' is not a valid template argument" #~ msgstr "'%E' er ikke en gyldig skabelonsparameter" #~ msgid "it must be the address of a function with external linkage" #~ msgstr "den skal vre adressen af en funktion med ekstern kdning" #~ msgid "it must be the address of an object with external linkage" #~ msgstr "den skal vre adressen af et objekt med ekstern kdning" #~ msgid "it must be a pointer-to-member of the form `&X::Y'" #~ msgstr "den skal vre en henvisning til medlem p formen '&X::Y'" #~ msgid "string literal %E is not a valid template argument because it is the address of an object with static linkage" #~ msgstr "strengkonstanten %E er ikke en gyldig skabelonsparameter fordi den er adressen af et objekt med statisk kdning" #~ msgid "address of non-extern `%E' cannot be used as template argument" #~ msgstr "adresse p ikke-ekstern '%E' kan ikke bruges som skabelonsparameter" #~ msgid "non-constant `%E' cannot be used as template argument" #~ msgstr "ikke-konstant '%E' kan ikke bruges som skabelonsparameter" #~ msgid "object `%E' cannot be used as template argument" #~ msgstr "objektet '%E' kan ikke bruges som skabelonsparameter" #~ msgid "to refer to a type member of a template parameter, use `typename %E'" #~ msgstr "benyt 'typename %E' for at referere til et typemedlem af en skabelonsparameter" #~ msgid "type/value mismatch at argument %d in template parameter list for `%D'" #~ msgstr "type/vrdi-konflikt ved %d. parameter i skabelonsparameterliste for '%D'" #~ msgid " expected a constant of type `%T', got `%T'" #~ msgstr " forventede en konstant af typen '%T', modtog '%T'" #~ msgid " expected a type, got `%E'" #~ msgstr " forventede en type, modtog '%E'" #~ msgid " expected a type, got `%T'" #~ msgstr " forventede en type, modtog '%T'" #~ msgid " expected a class template, got `%T'" #~ msgstr " forventede en klasseskabelon, modtog '%T'" #~ msgid " expected a template of type `%D', got `%D'" #~ msgstr " forventede en skabelon af typen '%D', modtog '%D'" #~ msgid "template-argument `%T' uses anonymous type" #~ msgstr "skabelonsparameter '%T' benytter anonym type" #~ msgid "template-argument `%T' uses local type `%T'" #~ msgstr "skabelonsparameter '%T' benytter lokal type '%T'" #~ msgid "template-argument `%T' is a variably modified type" #~ msgstr "skabelonsparameter '%T' er en variabelt ndret type" #~ msgid "could not convert template argument `%E' to `%T'" #~ msgstr "kunne ikke konvertere skabelonsparameteren '%E' til '%T'" #~ msgid "wrong number of template arguments (%d, should be %d)" #~ msgstr "forkert antal skabelonsparametre (%d, skulle vre %d)" #~ msgid "provided for `%D'" #~ msgstr "angivet for '%D'" #~ msgid "template argument %d is invalid" #~ msgstr "skabelonsparameter %d er ugyldig" #~ msgid "non-template used as template" #~ msgstr "ikke-skabelon benyttet som skabelon" #~ msgid "`%T' is not a template" #~ msgstr "'%T' er ikke en skabelon" #~ msgid "non-template type `%T' used as a template" #~ msgstr "ikke-skabelonstype '%T' benyttet som skabelon" #~ msgid "for template declaration `%D'" #~ msgstr "til skabelonserklring '%D'" #~ msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'" #~ msgstr "skabelonsinstantieringsdybden overskrider maksimum p %d (benyt -ftemplate-depth-NN for at forge maksimum) ved instantiering af '%D'" #~ msgid "ambiguous class template instantiation for `%#T'" #~ msgstr "tvetydig klasseskabelonsinstantiering for '%#T'" #~ msgid "%s %+#T" #~ msgstr "%s %+#T" #~ msgid "instantiation of `%D' as type `%T'" #~ msgstr "instantiering af '%D' som typen '%T'" #~ msgid "invalid parameter type `%T'" #~ msgstr "ugyldig parametertype '%T'" #~ msgid "in declaration `%D'" #~ msgstr "i erklringen '%D'" #~ msgid "creating pointer to member function of non-class type `%T'" #~ msgstr "opretter henvisning til medlemsfunktion af typen '%T' der ikke er en klasse" #~ msgid "creating array with size zero" #~ msgstr "opretter tabel med strrelsen nul" #~ msgid "creating array with size zero (`%E')" #~ msgstr "opretter tabel med strrelsen nul ('%E')" #~ msgid "forming reference to void" #~ msgstr "danner reference til void" #~ msgid "forming %s to reference type `%T'" #~ msgstr "danner %s til referencetypen '%T'" #~ msgid "creating pointer to member of non-class type `%T'" #~ msgstr "opretter henvisning til medlem af typen '%T' der ikke er en klasse" #~ msgid "creating pointer to member reference type `%T'" #~ msgstr "opretter henvisning til medlemsreference af typen '%T'" #~ msgid "creating array of `%T'" #~ msgstr "opretter tabel af '%T'" #~ msgid "`%T' is not a class, struct, or union type" #~ msgstr "'%T' er ikke en class-, struct- eller union-type" #~ msgid "use of `%s' in template" #~ msgstr "brug af '%s' i skabelon" #~ msgid "type `%T' composed from a local class is not a valid template-argument" #~ msgstr "typen '%T' sammensat fra lokal klasse er ikke en gyldig skabelonsparameter" #~ msgid " trying to instantiate `%D'" #~ msgstr " ved forsg p at instantiere '%D'" #~ msgid "incomplete type unification" #~ msgstr "ufuldstndig typeforening" #~ msgid "use of `%s' in template type unification" #~ msgstr "brug af '%s' i skabelonstypeforening" #~ msgid "explicit instantiation of non-template `%#D'" #~ msgstr "eksplicit instantiering af ikke-skabelon '%#D'" #~ msgid "no matching template for `%D' found" #~ msgstr "ingen passende skabelon for '%D' fundet" #~ msgid "explicit instantiation of `%#D'" #~ msgstr "eksplicit instantiering af '%#D'" #~ msgid "duplicate explicit instantiation of `%#D'" #~ msgstr "'%#D' er blevet eksplicit instantieret mere end n gang" #~ msgid "ISO C++ forbids the use of `extern' on explicit instantiations" #~ msgstr "ISO C++ forbyder brugen af 'extern' ved eksplicitte instantieringer" #~ msgid "storage class `%D' applied to template instantiation" #~ msgstr "lagringsklasse '%D' anvendt p skabelonsinstantiering" #~ msgid "explicit instantiation of non-template type `%T'" #~ msgstr "eksplicit instantiering af '%T' der ikke er en skabelonstype" #~ msgid "explicit instantiation of `%#T' before definition of template" #~ msgstr "eksplicit instantiering af '%T' fr definering af skabelonen" #~ msgid "ISO C++ forbids the use of `%s' on explicit instantiations" #~ msgstr "ISO C++ forbyder brugen af '%s ved eksplicitte instantieringer" #~ msgid "duplicate explicit instantiation of `%#T'" #~ msgstr "'%#T' er blevet eksplicit instantieret mere end n gang" #~ msgid "explicit instantiation of `%D' but no definition available" #~ msgstr "eksplicit instantiering af '%D', men ingen definition tilgngelig" #~ msgid "`%#T' is not a valid type for a template constant parameter" #~ msgstr "'%#T' er ikke en gyldig type for en skabelonsparameterkonstant " #~ msgid "-frepo must be used with -c" #~ msgstr "-frepo skal bruges med -c" #~ msgid "mysterious repository information in %s" #~ msgstr "mystisk info om opbevaringssted i '%s'" #~ msgid "can't create repository information file `%s'" #~ msgstr "kan ikke oprette informationsfilen '%s' til opbevaringssted" #~ msgid "cannot use typeid with -fno-rtti" #~ msgstr "kan ikke bruge typeid med -fno-rtti" #~ msgid "must #include before using typeid" #~ msgstr "'#include ' er ndvendig fr typeid kan benyttes" #~ msgid "cannot create type information for type `%T' because its size is variable" #~ msgstr "kan ikke oprette typeinformation for typen '%T' fordi dens strrelse er variabel" #~ msgid "dynamic_cast of `%#D' to `%#T' can never succeed" #~ msgstr "dynamic_cast af '%#D' til '%#T' kan aldrig lykkes" #~ msgid "cannot dynamic_cast `%E' (of type `%#T') to type `%#T' (%s)" #~ msgstr "kan ikke anvende dynamic_cast p '%E' (af typen '%#T') til typen '%#T' (%s)" #~ msgid "`%T' is an inaccessible base of `%T'" #~ msgstr "'%T' er en utilgngelig stamklasse til '%T'" #~ msgid "`%T' is an ambiguous base of `%T'" #~ msgstr "'%T' er en tvetydig stamklasse til '%T'" #~ msgid "assignment to non-static member `%D' of enclosing class `%T'" #~ msgstr "tildeling til ikke-statisk medlem '%D' af omgivende klasse '%T'" #~ msgid "adjusting pointers for covariant returns" #~ msgstr "justerer henvisninger for kovariante returneringer" #~ msgid "invalid covariant return type for `%#D'" #~ msgstr "ugyldig kovariant returneringstype for '%#D'" #~ msgid " overriding `%#D' (must be pointer or reference to class)" #~ msgstr " overskriver '%#D' (skal vre en henvisning eller reference til klasse)" #~ msgid " overriding `%#D' (must use pointer or reference)" #~ msgstr " overskriver '%#D' (skal vre en henvisning eller reference)" #~ msgid "conflicting return type specified for `%#D'" #~ msgstr "modstridende returtyper angivet for '%#D'" #~ msgid " overriding `%#D'" #~ msgstr " overskriver '%#D'" #~ msgid "looser throw specifier for `%#F'" #~ msgstr "lsere throw-angivelse for '%#F'" #~ msgid " overriding `%#F'" #~ msgstr " overskriver '%#F'" #~ msgid "`%#D' cannot be declared" #~ msgstr "'%#D' kan ikke erklres" #~ msgid " since `%#D' declared in base class" #~ msgstr " eftersom '%#D' er erklret i stamklassen" #~ msgid "`%#D' needs a final overrider" #~ msgstr "'%#D' behver en endelig overskrivning" #~ msgid "type of asm operand `%E' could not be determined" #~ msgstr "typen af asm-operanden '%E' kunne ikke afgres" #~ msgid "ISO C++ does not permit named return values" #~ msgstr "ISO C++ tillader ikke navngivne returvrdier" #~ msgid "return identifier `%D' already in place" #~ msgstr "returkaldenavn '%D' allerede p plads" #~ msgid "can't redefine default return value for constructors" #~ msgstr "kan ikke omdefinere standardreturvrdi for konstruktionsfunktioner" #~ msgid "only constructors take base initializers" #~ msgstr "kun konstruktionsfunktioner har stamklasseklargringer" #~ msgid "`this' is unavailable for static member functions" #~ msgstr "'this' er ikke tilgngelig for statiske medlemsfunktioner" #~ msgid "invalid use of `this' in non-member function" #~ msgstr "ugyldig brug af 'this' i ikke-medlemsfunktion" #~ msgid "invalid use of `this' at top level" #~ msgstr "ugyldig brug af 'this' ved verste niveau" #~ msgid "calling type `%T' like a method" #~ msgstr "kalder typen '%T' som en metode" #~ msgid "destructor specifier `%T::~%T()' must have matching names" #~ msgstr "destruktionsangivelse '%T::~%T()' skal have ens navne" #~ msgid "`%E' is not of type `%T'" #~ msgstr "'%E' er ikke af typen '%T'" #~ msgid "template type parameters must use the keyword `class' or `typename'" #~ msgstr "skabelonstypeparametre skal begynde med 'class' eller 'typename'" #~ msgid "invalid default template argument" #~ msgstr "ugyldig standardparameter i skabelon" #~ msgid "definition of `%#T' inside template parameter list" #~ msgstr "definition af '%#T' inden i skabelonsparameterliste" #~ msgid "invalid definition of qualified type `%T'" #~ msgstr "ugyldig definition af modificeret type '%T'" #~ msgid "invalid base-class specification" #~ msgstr "ugyldig stamklasseangivelse" #~ msgid "base class `%T' has cv qualifiers" #~ msgstr "stamklassen '%T' har const/volatile-modifikationer" #~ msgid "multiple declarators in template declaration" #~ msgstr "flere erklrerer i skabelonserklring" #~ msgid "type of `%E' is unknown" #~ msgstr "typen af '%E' er ukendt" #~ msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy" #~ msgstr "kaldenavnet '%s' er i modstrid med den interne navngivningsstrategi i GNU c++" #~ msgid "parse error at end of saved function text" #~ msgstr "tolkningsfejl ved slutningen af gemt funktionstekst" #~ msgid "%Hend of file read inside definition" #~ msgstr "%Hslutningen af filen lst inden i definition" #~ msgid "parse error in method specification" #~ msgstr "tolkningsfejl i medlemsfunktionsangivelsen" #~ msgid "function body for constructor missing" #~ msgstr "kroppen til konstruktionsfunktionen mangler" #~ msgid "%Hend of file read inside default argument" #~ msgstr "%Hslutningen af filen lst inden i standardparameter" #~ msgid "circular dependency in default args of `%#D'" #~ msgstr "cirkulr afhngighed i standardparametre til '%#D'" #~ msgid "invalid type `%T' for default argument to `%T'" #~ msgstr "ugyldig type '%T' for standardparameter til '%T'" #~ msgid "%s before `%s'" #~ msgstr "%s fr '%s'" #~ msgid "%s before `%c'" #~ msgstr "%s fr '%c'" #~ msgid "%s before `\\%o'" #~ msgstr "%s fr '\\%o'" #~ msgid "%s before `%s' token" #~ msgstr "%s fr symbolet '%s'" #~ msgid "non-lvalue in %s" #~ msgstr "ikke-venstrevrdi i %s" #~ msgid "`%V' qualifiers cannot be applied to `%T'" #~ msgstr "modifikationerne '%V' kan ikke anvendes p '%T'" #~ msgid "`%s' attribute can only be applied to Java class definitions" #~ msgstr "egenskaben '%s' kan kun anvendes med Java-klassedefinitioner" #~ msgid "`%s' attribute can only be applied to class definitions" #~ msgstr "egenskaben '%s' kan kun anvendes med klassedefinitioner" #~ msgid "`%s' is obsolete; g++ vtables are now COM-compatible by default" #~ msgstr "'%s' er forldet; virtuelle tabeller i g++ er nu COM-kompatible som standard" #~ msgid "requested init_priority is not an integer constant" #~ msgstr "den udbedte init_priority er ikke en heltalskonstant" #~ msgid "can only use `%s' attribute on file-scope definitions of objects of class type" #~ msgstr "kan kun bruge egenskaben '%s' p filvirkefeltsdefinitioner af objekter af klassetype" #~ msgid "requested init_priority is out of range" #~ msgstr "den udbedte init_priority er uden for det gyldige interval" #~ msgid "requested init_priority is reserved for internal use" #~ msgstr "den udbedte init_priority er reserveret til intern brug" #~ msgid "`%s' attribute is not supported on this platform" #~ msgstr "egenskaben '%s' er ikke understttet p denne platform" #~ msgid "lang_* check: failed in %s, at %s:%d" #~ msgstr "lang_*-kontrol: mislykkedes i %s, ved %s:%d" #~ msgid "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function" #~ msgstr "ISO C++ forbyder %s mellem henvisning af typen 'void *' og henvisning til funktion" #~ msgid "%s between distinct pointer types `%T' and `%T' lacks a cast" #~ msgstr "%s mellem forskellige henvisningstyper '%T' og '%T' mangler en typeomtvingelse" #~ msgid "ISO C++ prohibits conversion from `%#T' to `(...)'" #~ msgstr "ISO C++ forbyder konvertering fra '%#T' til '(...)'" #~ msgid "invalid application of `%s' to a member function" #~ msgstr "ugyldig brug af '%s' p en medlemsfunktion" #~ msgid "invalid application of `%s' to non-static member" #~ msgstr "ugyldig brug af '%s' p et ikke-statisk medlem" #~ msgid "sizeof applied to a bit-field" #~ msgstr "'sizeof' benyttet p et bitfelt" #~ msgid "ISO C++ forbids applying `sizeof' to an expression of function type" #~ msgstr "ISO C++ forbyder anvendelse af 'sizeof' p et udtryk af en funktionstype" #~ msgid "invalid use of non-lvalue array" #~ msgstr "ugyldig brug af en tabel der ikke kan optrde som en venstrevrdi" #~ msgid "deprecated conversion from string constant to `%T'" #~ msgstr "forldet konvertering fra strengkonstant til '%T'" #~ msgid "request for member `%D' in `%E', which is of non-class type `%T'" #~ msgstr "foresprgsel efter medlemmet '%D' i '%E' som er af en ikke-klassetype '%T'" #~ msgid "`%D' is not a member of `%T'" #~ msgstr "'%D' er ikke et medlem af '%T'" #~ msgid "invalid access to non-static data member `%D' of NULL object" #~ msgstr "ugyldig tilgang til ikke-statisk datamedlem '%D' af NULL-objekt" #~ msgid "(perhaps the `offsetof' macro was used incorrectly)" #~ msgstr "(mske blev 'offsetof'-makroen benyttet forkert)" #~ msgid "`%D::%D' is not a member of `%T'" #~ msgstr "'%D::%D' er ikke et medlem af '%T'" #~ msgid "destructor specifier `%T::~%T' must have matching names" #~ msgstr "destruktionsangivelse '%T::~%T' skal have ens navne" #~ msgid "type `%T' has no destructor" #~ msgstr "typen '%T' har ingen destruktionsfunktion" #~ msgid "`%D' is not a member template function" #~ msgstr "'%D' er ikke en medlemsskabelonfunktion" #~ msgid "`%T' is not a pointer-to-object type" #~ msgstr "'%T' er ikke af en henvisning til objekt-type" #~ msgid "invalid use of `%s' on pointer to member" #~ msgstr "ugyldig brug af '%s' p henvisning til medlem" #~ msgid "invalid type argument" #~ msgstr "ugyldig typeparameter" #~ msgid "ISO C++ forbids subscripting non-lvalue array" #~ msgstr "ISO C++ forbyder indeksering af en ikke-venstrevrdis tabel" #~ msgid "subscripting array declared `register'" #~ msgstr "indeksering af tabel som er erklret 'register'" #~ msgid "object missing in use of `%E'" #~ msgstr "objekt mangler i brug af '%E'" #~ msgid "ISO C++ forbids calling `::main' from within program" #~ msgstr "ISO C++ forbyder kald af '::main' inde fra programmet" #~ msgid "must use .* or ->* to call pointer-to-member function in `%E (...)'" #~ msgstr "brug .* eller ->* i kald af henvisning til medlemsfunktion i '%E (...)'" #~ msgid "`%E' cannot be used as a function" #~ msgstr "'%E' kan ikke bruges som en funktion" #~ msgid "too many arguments to %s `%+#D'" #~ msgstr "for mange parametre til %s '%+#D'" #~ msgid "parameter type of called function is incomplete" #~ msgstr "parametertypen for den kaldte funktion er ufuldstndig" #~ msgid "too few arguments to %s `%+#D'" #~ msgstr "for f parametre til %s '%+#D'" #~ msgid "assuming cast to type `%T' from overloaded function" #~ msgstr "antager typeomtvingning til typen '%T' fra flertydig funktion" #~ msgid "division by zero in `%E / 0'" #~ msgstr "division med nul i '%E / 0'" #~ msgid "division by zero in `%E / 0.'" #~ msgstr "division med nul i '%E / 0.'" #~ msgid "division by zero in `%E %% 0'" #~ msgstr "division med nul i '%E %% 0'" #~ msgid "division by zero in `%E %% 0.'" #~ msgstr "division med nul i '%E %% 0.'" #~ msgid "%s rotate count is negative" #~ msgstr "%s-roteringsantal er negativt" #~ msgid "%s rotate count >= width of type" #~ msgstr "%s-roteringsantal >= bredden af typen" #~ msgid "ISO C++ forbids comparison between pointer and integer" #~ msgstr "ISO C++ forbyder sammenligning mellem henvisningsvariabel og heltal" #~ msgid "comparison between types `%#T' and `%#T'" #~ msgstr "sammenligning mellem typerne '%#T' og '%#T'" #~ msgid "comparison between signed and unsigned integer expressions" #~ msgstr "sammenlign mellem signed og unsigned heltalsudtryk" #~ msgid "invalid operands of types `%T' and `%T' to binary `%O'" #~ msgstr "ugyldige operander af typerne '%T' og '%T' til binr '%O'" #~ msgid "NULL used in arithmetic" #~ msgstr "NULL benyttet i udregning" #~ msgid "ISO C++ forbids using pointer of type `void *' in subtraction" #~ msgstr "ISO C++ forbyder brug af henvisning af typen 'void *' i fratrkning" #~ msgid "ISO C++ forbids using pointer to a function in subtraction" #~ msgstr "ISO C++ forbyder brug af henvisning til funktion i fratrkning" #~ msgid "ISO C++ forbids using pointer to a method in subtraction" #~ msgstr "ISO C++ forbyder brug af henvisning til medlemsfunktion i fratrkning" #~ msgid "ISO C++ forbids using pointer to a member in subtraction" #~ msgstr "ISO C++ forbyder brug af henvisning til medlem i fratrkning" #~ msgid "invalid use of a pointer to an incomplete type in pointer arithmetic" #~ msgstr "ugyldig brug af en henvisning til en ufuldstndig type i henvisningsberegning" #~ msgid "invalid use of '%E' to form a pointer-to-member-function. Use a qualified-id." #~ msgstr "ugyldig brug af '%E' til at danne en henvisning til medlemsfunktion; benyt et kaldenavn med klasseprfiks" #~ msgid "parenthesis around '%E' cannot be used to form a pointer-to-member-function" #~ msgstr "paranteser omkring '%E' kan ikke bruges til at danne en henvisning til medlemsfunktion" #~ msgid "taking address of temporary" #~ msgstr "tager adressen p midlertidig variabel" #~ msgid "ISO C++ forbids %sing an enum" #~ msgstr "ISO C++ forbyder %s af en enum" #~ msgid "cannot %s a pointer to incomplete type `%T'" #~ msgstr "kan ikke %s en henvisning til en ufuldstndig type '%T'" #~ msgid "ISO C++ forbids %sing a pointer of type `%T'" #~ msgstr "ISO C++ forbyder %s af en henvisning af typen '%T'" #~ msgid "cast to non-reference type used as lvalue" #~ msgstr "typeomtvingning til ikke-reference-type benyttet som venstrevrdi" #~ msgid "invalid use of `--' on bool variable `%D'" #~ msgstr "ugyldig brug af '--' p den booleske variabel '%D'" #~ msgid "ISO C++ forbids taking address of function `::main'" #~ msgstr "ISO C++ forbyder at tage adressen p funktionen '::main'" #~ msgid "ISO C++ forbids taking the address of an unqualified non-static member function to form a pointer to member function. Say `&%T::%D'" #~ msgstr "ISO C++ forbyder at tage adressen p en ikke-modificeret, ikke-statisk medlemsfunktion for at danne en henvisning til medlemsfunktion; brug '&%T::%D'" #~ msgid "ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say `&%T::%D'" #~ msgstr "ISO C++ forbyder at tage adressen p en bundet medlemsfunktion for at danne en henvisning til medlemsfunktion; brug '&%T::%D'" #~ msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression" #~ msgstr "ISO C++ forbyder at tage adressen p en typeomtvingning til et udtryk der ikke er en venstrevrdi" #~ msgid "attempt to take address of bit-field structure member `%D'" #~ msgstr "forsg p at finde adressen af bitfeltstrukturmedlemmet '%D'" #~ msgid "taking address of destructor" #~ msgstr "tager adressen p en destruktionsfunktion" #~ msgid "taking address of bound pointer-to-member expression" #~ msgstr "tager adressen p et bundet henvisning til medlem-udtryk" #~ msgid "cannot create pointer to reference member `%D'" #~ msgstr "kan ikke oprette henvisning til reference medlemmet '%D'" #~ msgid "cannot take the address of `this', which is an rvalue expression" #~ msgstr "kan ikke tage adressen af 'this' som er et hjrevrdiudtryk" #~ msgid "address requested for `%D', which is declared `register'" #~ msgstr "adresse forespurgt for '%D' som er erklret 'register'" #~ msgid "static_cast from type `%T' to type `%T' casts away constness" #~ msgstr "static_cast fra typen '%T' til typen '%T' fjerner konstanthed" #~ msgid "invalid static_cast from type `%T' to type `%T'" #~ msgstr "ugyldig static_cast fra typen '%T' til typen '%T'" #~ msgid "invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'" #~ msgstr "ugyldig reinterpret_cast af et hjrevrdiudtryk fra typen '%T' til typen '%T'" #~ msgid "reinterpret_cast from `%T' to `%T' loses precision" #~ msgstr "reinterpret_cast fra '%T' til '%T' mister prcision" #~ msgid "reinterpret_cast from `%T' to `%T' casts away const (or volatile)" #~ msgstr "reinterpret_cast fra '%T' til '%T' fjerner const (eller volatile)" #~ msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object" #~ msgstr "ISO C++ forbyder sammenligninger mellem henvisning til funktion og henvisning til objekt" #~ msgid "invalid reinterpret_cast from type `%T' to type `%T'" #~ msgstr "ugyldig reinterpret_cast fra typen '%T' til typen '%T'" #~ msgid "invalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member type" #~ msgstr "ugyldig brug af const_cast med typen '%T' som ikke er en henvisnings-, reference- eller en henvisning til datamedlem-type" #~ msgid "invalid use of const_cast with type `%T', which is a pointer or reference to a function type" #~ msgstr "ugyldig brug af const_cast med typen '%T' som er en henvisning eller reference til funktion" #~ msgid "invalid const_cast of an rvalue of type `%T' to type `%T'" #~ msgstr "ugyldig const_cast af en hjrevrdi fra typen '%T' til typen '%T'" #~ msgid "invalid const_cast from type `%T' to type `%T'" #~ msgstr "ugyldig const_cast fra typen '%T' til typen '%T'" #~ msgid "ISO C++ forbids casting to an array type `%T'" #~ msgstr "ISO C++ forbyder omtvingelse af typen til en tabeltype '%T'" #~ msgid "invalid cast to function type `%T'" #~ msgstr "ugyldig omtvingelse til funktionstypen '%T'" #~ msgid "cast from `%T' to `%T' discards qualifiers from pointer target type" #~ msgstr "typeomtvingning fra '%T' til '%T' kasserer modifikationer p henvisningsmlets type" #~ msgid "cast from `%T' to `%T' increases required alignment of target type" #~ msgstr "typeomtvingning fra '%T' til '%T' forger den pkrvede justering af mlets type" #~ msgid " in evaluation of `%Q(%#T, %#T)'" #~ msgstr " i evaluering af '%Q(%#T, %#T)'" #~ msgid "ISO C++ forbids cast to non-reference type used as lvalue" #~ msgstr "ISO C++ forbyder omtvingelse af typen til en ikke-reference-type benyttet som venstrevrdi" #~ msgid "incompatible types in assignment of `%T' to `%T'" #~ msgstr "uforenelige typer i tildeling af '%T' til '%T'" #~ msgid "ISO C++ forbids assignment of arrays" #~ msgstr "ISO C++ forbyder tildeling af tabeller" #~ msgid " in pointer to member function conversion" #~ msgstr " i henvisning til medlemsfunktion-omdannelse" #~ msgid " in pointer to member conversion" #~ msgstr " i henvisning til medlem-omdannelse" #~ msgid "pointer to member cast via virtual base `%T' of `%T'" #~ msgstr "henvisning til medlem-typeomtvingning via den virtuelle stamklasse '%T' af '%T'" #~ msgid "pointer to member conversion via virtual base `%T' of `%T'" #~ msgstr "henvisning til medlem-omdannelse via den virtuelle stamklasse '%T' af '%T'" #~ msgid "invalid conversion to type `%T' from type `%T'" #~ msgstr "ugyldig omdannelse til typen '%T' fra typen '%T'" # %s bliver til returnering eller tildeling eller noget i den retning #~ msgid "passing NULL used for non-pointer %s %P of `%D'" #~ msgstr "overbringelse af NULL benyttet for ikke-henvisnings%s %P af '%D'" #~ msgid "%s to non-pointer type `%T' from NULL" #~ msgstr "%s til ikke-henvisningstypen '%T' fra NULL" #~ msgid "passing `%T' for %s %P of `%D'" #~ msgstr "overbringelse af '%T' for ikke-henvisnings%s %P af '%D'" #~ msgid "%s to `%T' from `%T'" #~ msgstr "%s til '%T' fra '%T'" #~ msgid "passing negative value `%E' for %s %P of `%D'" #~ msgstr "overbringelse af negativ vrdi '%E' for %s %P af '%D'" #~ msgid "%s of negative value `%E' to `%T'" #~ msgstr "%s af negativ vrdi '%E' til `%T'" #~ msgid "cannot convert `%T' to `%T' for argument `%P' to `%D'" #~ msgstr "kan ikke konvertere '%T' til '%T' for parameter '%P' til '%D'" #~ msgid "cannot convert `%T' to `%T' in %s" #~ msgstr "kan ikke konvertere '%T' til '%T' i %s" #~ msgid "in passing argument %P of `%+D'" #~ msgstr "i overbringelse af parameter %P af '%+D'" #~ msgid "returning reference to temporary" #~ msgstr "returnerer reference til midlertidig variabel" #~ msgid "reference to non-lvalue returned" #~ msgstr "reference til ikke-venstrevrdi returneret" #~ msgid "reference to local variable `%D' returned" #~ msgstr "reference til den lokale variabel '%D' returneret" #~ msgid "address of local variable `%D' returned" #~ msgstr "adresse af den lokale variabel '%D' returneret" #~ msgid "returning a value from a destructor" #~ msgstr "returnerer en vrdi fra en destruktionsfunktion" #~ msgid "cannot return from a handler of a function-try-block of a constructor" #~ msgstr "kan ikke returnere fra en hndtering af en funktions-try-blok i en konstruktionsfunktion" #~ msgid "returning a value from a constructor" #~ msgstr "returnerer en vrdi fra en konstruktionsfunktion" #~ msgid "return-statement with no value, in function declared with a non-void return type" #~ msgstr "return-stning uden en vrdi i en funktion der er erklret med en ikke-void returtype" #~ msgid "return-statement with a value, in function declared with a void return type" #~ msgstr "return-stning med en vrdi i en funktion der er erklret med en void returtype" #~ msgid "`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)" #~ msgstr "'operator new' m ikke returnere NULL medmindre den er erklret 'throw()' (eller -fcheck-new er benyttet)" #~ msgid "type `%T' is not a base type for type `%T'" #~ msgstr "typen '%T' er ikke en grundtype for typen '%T'" #~ msgid "cannot declare variable `%D' to be of type `%T'" #~ msgstr "kan ikke erklre variablen '%D' til at vre af typen '%T'" #~ msgid "cannot declare parameter `%D' to be of type `%T'" #~ msgstr "kan ikke erklre parameteren '%D' til at vre af typen '%T'" #~ msgid "cannot declare field `%D' to be of type `%T'" #~ msgstr "kan ikke erklre feltet '%D' til at vre af typen '%T'" #~ msgid "invalid return type for member function `%#D'" #~ msgstr "ugyldig returtype for medlemsfunktionen '%#D'" #~ msgid "invalid return type for function `%#D'" #~ msgstr "ugyldig returtype for funktionen '%#D'" #~ msgid "cannot allocate an object of type `%T'" #~ msgstr "kan ikke allokere et objekt af typen '%T'" #~ msgid " because the following virtual functions are abstract:" #~ msgstr " eftersom de flgende virtuelle funktioner er abstrakte:" #~ msgid "\t%#D" #~ msgstr "\t%#D" #~ msgid " since type `%T' has abstract virtual functions" #~ msgstr " eftersom typen '%T' har abstrakte virtuelle funktioner" #~ msgid "constructor syntax used, but no constructor declared for type `%T'" #~ msgstr "konstruktionsfunktionsyntaks benyttet, men ingen konstruktionsfunktion er erklret for typen '%T'" #~ msgid "comma expression used to initialize return value" #~ msgstr "kommaudtryk benyttet til at klargre returvrdi" #~ msgid "cannot initialize arrays using this syntax" #~ msgstr "kan ikke tildele tabeller startvrdier med denne syntaks" #~ msgid "initializing array with parameter list" #~ msgstr "klargr tabel med en parameterliste" #~ msgid "initializer for scalar variable requires one element" #~ msgstr "startvrdien for en skalarvariabel kan kun best af t element" #~ msgid "braces around scalar initializer for `%T'" #~ msgstr "krllede paranteser omkring skalarstartvrdi for '%T'" #~ msgid "ignoring extra initializers for `%T'" #~ msgstr "ignorerer ekstra startvrdier for '%T'" #~ msgid "variable-sized object of type `%T' may not be initialized" #~ msgstr "objekt af typen '%T' med variabel strrelse m ikke tildeles en startvrdi" #~ msgid "subobject of type `%T' must be initialized by constructor, not by `%E'" #~ msgstr "underobjekt af typen '%T' skal klargres af en konstruktionsfunktion, ikke af '%E'" #~ msgid "aggregate has a partly bracketed initializer" #~ msgstr "sammensat type har delvis indklammet startvrdi" #~ msgid "non-trivial labeled initializers" #~ msgstr "ikke-trivielle navngivne startvrdier" #~ msgid "non-empty initializer for array of empty elements" #~ msgstr "en startvrdi der ikke er tom, tildeles til en tabel med tomme elementer" #~ msgid "initializer list for object of class with virtual base classes" #~ msgstr "klargringsliste for objekt af en klasse med virtuelle stamklasser" #~ msgid "initializer list for object of class with base classes" #~ msgstr "klargringsliste for objekt af en klasse med stamklasser" #~ msgid "initializer list for object using virtual functions" #~ msgstr "klargringsliste for objekt med virtuelle funktioner" #~ msgid "missing initializer for member `%D'" #~ msgstr "manglende startvrdi for medlemmet '%D'" #~ msgid "uninitialized const member `%D'" #~ msgstr "konstant medlem '%D' uden startvrdi" #~ msgid "member `%D' with uninitialized const fields" #~ msgstr "medlem '%D' med konstante felter uden startvrdi" #~ msgid "member `%D' is uninitialized reference" #~ msgstr "medlemmet '%D' er en reference uden startvrdi" #~ msgid "index value instead of field name in union initializer" #~ msgstr "indeksvrdi i stedet for feltnavn i union-startvrdi" #~ msgid "no field `%D' in union being initialized" #~ msgstr "intet felt '%D' i union der tildeles startvrdi" #~ msgid "union `%T' with no named members cannot be initialized" #~ msgstr "union '%T' uden navngivne elementer kan ikke tildeles startvrdi" #~ msgid "excess elements in aggregate initializer" #~ msgstr "for mange elementer i startvrdi til sammensat type" #~ msgid "circular pointer delegation detected" #~ msgstr "fundet en henvisningsefterflgelse der gr i ring" #~ msgid "base operand of `->' has non-pointer type `%T'" #~ msgstr "grundoperanden til '->' har en ikke-henvisningstype '%T'" #~ msgid "result of `operator->()' yields non-pointer result" #~ msgstr "resultatet af 'operator->()' er ikke en henvisning" #~ msgid "base operand of `->' is not a pointer" #~ msgstr "grundoperanden til '->' er ikke en henvisning" #~ msgid "`%E' cannot be used as a member pointer, since it is of type `%T'" #~ msgstr "'%E' kan ikke bruges som en medlemshenvisning eftersom udtrykkets type er '%T'" #~ msgid "cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'" #~ msgstr "kan ikke anvende medlemshenvisning '%E' p '%E' som er af den ikke-sammensatte type '%T'" #~ msgid "member type `%T::' incompatible with object type `%T'" #~ msgstr "medlemstypen '%T::' uforenelige med objekttypen '%T'" #~ msgid "`%T' fails to be a typedef or built-in type" #~ msgstr "'%T' er hverken en typedef eller en indbygget type" #~ msgid "ISO C++ forbids defining types within %s" #~ msgstr "ISO C++ forbyder definering af typer inden i %s" #~ msgid "call to function `%D' which throws incomplete type `%#T'" #~ msgstr "kald af en funktion '%D' som kaster en ufuldstndig type '%#T'" #~ msgid "call to function which throws incomplete type `%#T'" #~ msgstr "kald af en funktion som kaster en ufuldstndig type '%#T'" #~ msgid "%s is deprecated, please see the documentation for details" #~ msgstr "%s er forldet, se venligst dokumentationen for detaljer" #~ msgid "Do not obey access control semantics" #~ msgstr "Adlyd ikke tilgangskontrolsemantikker" #~ msgid "Change when template instances are emitted" #~ msgstr "Skift hvornr skabelonsinstanser udsendes" #~ msgid "Check the return value of new" #~ msgstr "Kontrollr returvrdien for new" #~ msgid "Reduce size of object files" #~ msgstr "Reducr strrelsen af objektfiler" #~ msgid "Make string literals `char[]' instead of `const char[]'" #~ msgstr "Gr strengkonstanter til 'char[]' i stedet for 'const char[]'" #~ msgid "Dump the entire translation unit to a file" #~ msgstr "Anbring hele oversttelsesenheden i en fil" #~ msgid "Do not inline member functions by default" #~ msgstr "Integrr ikke medlemsfunktioner som standard" #~ msgid "Do not generate run time type descriptor information" #~ msgstr "Generr ikke typebeskrivelsesoplysninger til krselstidspunktet" #~ msgid "Do not generate code to check exception specifications" #~ msgstr "Generr ikke kode til at kontrollere undtagelsesspecifikationer" #~ msgid "Scope of for-init-statement vars extends outside" #~ msgstr "Udvid virkefeltet for variabler i for-klargringsstninger" #~ msgid "Do not recognize GNU defined keywords" #~ msgstr "Genkend ikke GNU-definerede reserverede ord" #~ msgid "Enable support for huge objects" #~ msgstr "Aktivr understttelse af enorme objekter" #~ msgid "Export functions even if they can be inlined" #~ msgstr "Eksportr funktioner ogs selvom de kan integreres" #~ msgid "Only emit explicit template instantiations" #~ msgstr "Udsend kun eksplicitte skabelonsinstatieringer" #~ msgid "Only emit explicit instantiations of inline templates" #~ msgstr "Udsend kun eksplicitte instatieringer af indlejrede skabeloner" #~ msgid "Don't pedwarn about uses of Microsoft extensions" #~ msgstr "Udsend ikke pedantiske advarsler om brug af Microsoft-udvidelser" #~ msgid "Recognize and/bitand/bitor/compl/not/or/xor" #~ msgstr "Genkend and/bitand/bitor/compl/not/or/xor" #~ msgid "Disable optional diagnostics" #~ msgstr "Deaktivr valgfrie diagnosticeringer" #~ msgid "Downgrade conformance errors to warnings" #~ msgstr "Nedgradr standardoverholdelsesfejl til advarsler" #~ msgid "Enable automatic template instantiation" #~ msgstr "Aktivr automatisk skabelonsinstantiering" #~ msgid "Display statistics accumulated during compilation" #~ msgstr "Vis statistik som indsamles under oversttelsen" #~ msgid "Specify maximum template instantiation depth" #~ msgstr "Angiv maksimal skabelonsinstantieringsdybde" #~ msgid "Use __cxa_atexit to register destructors" #~ msgstr "Benyt __cxa_atexit til at registrere destruktionsfunktioner" #~ msgid "Discard unused virtual functions" #~ msgstr "Kassr ubrugte virtuelle funktioner" #~ msgid "Implement vtables using thunks" #~ msgstr "Implementr virtuelle tabeller vha. thunk-kode" #~ msgid "Emit common-like symbols as weak symbols" #~ msgstr "Udsend almindelige symboler som svage symboler" #~ msgid "Emit cross referencing information" #~ msgstr "Udsend krydsreferenceoplysninger" #~ msgid "Warn about inconsistent return types" #~ msgstr "Advar om inkonsistente returtyper" #~ msgid "Warn about overloaded virtual function names" #~ msgstr "Advar om flertydige virtuelle funktionsnavne" #~ msgid "Don't warn when all ctors/dtors are private" #~ msgstr "Advar ikke nr alle konstruktions-/destruktionsfunktioner er private" #~ msgid "Warn about non virtual destructors" #~ msgstr "Advar om ikke-virtuelle destruktionsfunktioner" #~ msgid "Warn when a function is declared extern, then inline" #~ msgstr "Advar nr en funktion erklret extern erklres inline" #~ msgid "Warn when the compiler reorders code" #~ msgstr "Advar nr overstteren ndrer p ordenen af kode" #~ msgid "Warn when synthesis behavior differs from Cfront" #~ msgstr "Advar nr synteseopfrslen adskiller sig fra Cfront" #~ msgid "Don't warn when type converting pointers to member functions" #~ msgstr "Advar ikke ved typeomdannelse af henvisninger til medlemsfunktioner" #~ msgid "Warn about violations of Effective C++ style rules" #~ msgstr "Advar om overtrdelser af stilreglerne fra Effective C++" #~ msgid "Warn when overload promotes from unsigned to signed" #~ msgstr "Advar nr flertydiggrelse forfremmer fra unsigned til signed" #~ msgid "Warn if a C style cast is used in a program" #~ msgstr "Advar hvis en typeomtvingning i C-stil benyttes" #~ msgid "Don't warn when non-templatized friend functions are declared within a template" #~ msgstr "Advar ikke nr ikke-skabelonsvennefunktioner erklres inde i en skabelon" #~ msgid "Don't announce deprecation of compiler features" #~ msgstr "Annoncr ikke forldelse af overstterfaciliteter" #~ msgid "note:" #~ msgstr "bemrk:" #~ msgid "warning:" #~ msgstr "advarsel: " #~ msgid "fatal:" #~ msgstr "fatal:" #~ msgid "(continued):" #~ msgstr "(fortsat):" #~ msgid "[REPORT BUG!!] %" #~ msgstr "[RAPPORTER FEJL!] %" #~ msgid "[REPORT BUG!!]" #~ msgstr "[RAPPORTER FEJL!]" #~ msgid "ASSIGN'ed label cannot fit into `%A' at %0 -- using wider sibling" #~ msgstr "ASSIGN'et etiket kan ikke passe i '%A' ved %0 - bruger bredere sskende" #~ msgid "no INTEGER type can hold a pointer on this configuration" #~ msgstr "ingen INTEGER-type kan opbevare en henvisning i denne konfiguration" #~ msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide," #~ msgstr "konfiguration: REAL, INTEGER og LOGICAL er %d bit brede," #~ msgid "and pointers are %d bits wide, but g77 doesn't yet work" #~ msgstr "og henvisninger er %d bit brede, men g77 virker endnu ikke" #~ msgid "properly unless they all are 32 bits wide" #~ msgstr "ordentligt medmindre de alle er 32 bit brede" #~ msgid "Please keep this in mind before you report bugs." #~ msgstr "Husk venligst p dette fr du rapporterer fejl." #~ msgid "configuration: char * holds %d bits, but ftnlen only %d" #~ msgstr "konfiguration: char * holder %d bit, men ftnlen kun %d" #~ msgid "" #~ "configuration: char * holds %d bits, but INTEGER only %d --\n" #~ " ASSIGN statement might fail" #~ msgstr "konfiguration: char * holder %d bit, men INTEGER kun %d - ASSIGN-stning kan mislykkes" #~ msgid "In statement function" #~ msgstr "I stningsfunktion" #~ msgid "Outside of any program unit:\n" #~ msgstr "Uden for nogen programenhed:\n" #~ msgid "%A from %B at %0%C" #~ msgstr "%A fra %B ved %0%C" #~ msgid "directory name must immediately follow -I" #~ msgstr "et katalognavn skal flge umiddelbart efter -I" #~ msgid "At %0, INCLUDE file %A exists, but is not readable" #~ msgstr "Ved %0 eksisterer INCLUDE-filen %A, men kan ikke lses" #~ msgid "At %0, INCLUDE nesting too deep" #~ msgstr "Ved %0 er INCLUDE-indlejring for dyb" #~ msgid "Two arithmetic operators in a row at %0 and %1 -- use parentheses" #~ msgstr "To aritmetiske operatorer efter hinanden ved %0 og %1 - benyt paranteser" #~ msgid "Operator at %0 has lower precedence than that at %1 -- use parentheses" #~ msgstr "Operatoren ved %0 har lavere prioritet end den ved %1 - benyt paranteser" #~ msgid "Use .EQV./.NEQV. instead of .EQ./.NE. at %0 for LOGICAL operands at %1 and %2" #~ msgstr "Benyt .EQV./.NEQV. i stedet for .EQ./.NE. ved %0 for LOGICAL-operander ved %1 og %2" #~ msgid "Unsupported operand for ** at %1 -- converting to default INTEGER" #~ msgstr "Ikke-understttet operand for ** ved %1 - konverterer til standard-INTEGER" #~ msgid "overflowed output arg list for `%s'" #~ msgstr "overlb i uddataparameterlist for '%s'" #~ msgid "--driver no longer supported" #~ msgstr "--driver understttes ikke lngere" #~ msgid "argument to `%s' missing" #~ msgstr "parameter til '%s' mangler" #~ msgid "no input files; unwilling to write output files" #~ msgstr "ingen inputfiler; vil ikke skrive outputfiler" #~ msgid "Implicit declaration of `%A' at %0" #~ msgstr "Implicit erklring af '%A' ved %0" #~ msgid "Non-ISO-C-standard escape sequence `\\%A' at %0" #~ msgstr "Undvigesekvensen '\\%A' ved %0 flger ikke ISO C-standarden" #~ msgid "Unknown escape sequence `\\%A' at %0" #~ msgstr "Ukendt undvigesekvens '\\%A' ved %0" #~ msgid "Unterminated escape sequence `\\' at %0" #~ msgstr "Uafsluttet undvigsekvens '\\' ved %0" #~ msgid "Unknown escape sequence `\\' followed by char code 0x%A at %0" #~ msgstr "Ukendt undvigesekvens '\\' efterfulgt af tegnkode 0x%A ved %0" #~ msgid "\\x used at %0 with no following hex digits" #~ msgstr "\\x angivet ved %0 uden efterflgende hexadecimale cifre" #~ msgid "Hex escape at %0 out of range" #~ msgstr "Hexadecimal undvigesekvens ved %0 er uden for det gyldige interval" #~ msgid "Escape sequence at %0 out of range for character" #~ msgstr "Undvigesekvens ved %0 er uden for det gyldig interval for tegn" #~ msgid "hex escape out of range" #~ msgstr "hexadecimal undvigesekvens er uden for det gyldige interval" #~ msgid "non-ANSI-standard escape sequence, `\\%c'" #~ msgstr "undvigesekvensen '\\%c' flger ikke ANSI-standarden" #~ msgid "non-ISO escape sequence `\\%c'" #~ msgstr "undvigesekvensen '\\%c' flger ikke ISO-standarden" #~ msgid "unknown escape sequence `\\%c'" #~ msgstr "ukendt undvigesekvens '\\%c'" #~ msgid "unknown escape sequence: `\\' followed by char code 0x%x" #~ msgstr "ukendt undvigesekvens: '\\' efterfulgt af tegnkoden 0x%x" #~ msgid "badly formed directive -- no closing quote" #~ msgstr "forkert udformet direktiv - intet afsluttende anfrselstegn" #~ msgid "#-lines for entering and leaving files don't match" #~ msgstr "#-linjer til at trde ind og ud af filer passer ikke" #~ msgid "bad directive -- missing close-quote" #~ msgstr "forkert udformet direktiv - intet afsluttende anfrselstegn" #~ msgid "ignoring pragma: %s" #~ msgstr "ignorerer pragma: %s" #~ msgid "invalid #ident" #~ msgstr "ugyldig #ident" #~ msgid "undefined or invalid # directive" #~ msgstr "ugyldigt eller ikke-defineret #-direktiv" #~ msgid "invalid #line" #~ msgstr "ugyldig #line" #~ msgid "use `#line ...' instead of `# ...' in first line" #~ msgstr "benyt '#line ...' i stedet for '# ...' i frste linje" #~ msgid "invalid #-line" #~ msgstr "ugyldig #-linje" #~ msgid "Null character at %0 -- line ignored" #~ msgstr "Nultegn ved %0 - linje ignoreret" #~ msgid "INCLUDE at %0 not the only statement on the source line" #~ msgstr "INCLUDE ved %0 er ikke den eneste stning p kildekodelinjen" #~ msgid "ASSIGNed FORMAT specifier is too small" #~ msgstr "ASSIGN'et FORMAT-angivelse er for lille" #~ msgid "SELECT CASE on CHARACTER type (at %0) not supported -- sorry" #~ msgstr "SELECT CASE p CHARACTER-type (ved %0) er ikke understttet - desvrre" #~ msgid "SELECT (at %0) has duplicate cases -- check integer overflow of CASE(s)" #~ msgstr "SELECT (ved %0) har ens tilflde -- tjek heltalsoverlb af CASEs" #~ msgid "ASSIGN to variable that is too small" #~ msgstr "ASSIGN til variabel der er for lille" #~ msgid "ASSIGNed GOTO target variable is too small" #~ msgstr "ASSIGN'et GOTO-mlvariabel er for lille" #~ msgid "Local adjustable symbol `%A' at %0" #~ msgstr "Lokalt justerbart symbol '%A' ved %0" #~ msgid "data initializer on host with different endianness" #~ msgstr "datastartvrdi p vrt med anden endethed" #~ msgid "%s no longer supported -- try -fvxt" #~ msgstr "%s er ikke lngere understttet - prv -fvxt" #~ msgid "%s no longer supported -- try -fno-vxt -ff90" #~ msgstr "%s er ikke lngere understttet - prv -fno-vxt -ff90" #~ msgid "%s disabled, use normal debugging flags" #~ msgstr "%s deaktiveret, benyt normale fejlanalyseringstilvalg" #~ msgid "Print g77-specific compiler version info, run internal tests" #~ msgstr "Udskriv g77-specifik overstterversioninfo, kr interne test" #~ msgid "Program is written in typical FORTRAN 66 dialect" #~ msgstr "Program er skrevet i typisk FORTRAN 66-dialekt" #~ msgid "Program is written in typical Unix f77 dialect" #~ msgstr "Program er skrevet i typisk Unix f77-dialekt" #~ msgid "Program does not use Unix-f77 dialectal features" #~ msgstr "Program benytter ikke Unix f77-dialektiske faciliteter" #~ msgid "Program is written in Fortran-90-ish dialect" #~ msgstr "Program er skrevet i Fortran 90-agtig dialekt" #~ msgid "Treat local vars and COMMON blocks as if they were named in SAVE statements" #~ msgstr "Behandl lokale variable og COMMON-blokke som om de var nvnt i SAVE-stninger" #~ msgid "Allow $ in symbol names" #~ msgstr "Tillad $ i symbolnavne" #~ msgid "f2c-compatible code need not be generated" #~ msgstr "f2c-kompatibel kode behver ikke at blive genereret" #~ msgid "Unsupported; do not generate libf2c-calling code" #~ msgstr "Ikke-understttet; generr ikke libf2c-kaldende kode" #~ msgid "Unsupported; affects code-generation of arrays" #~ msgstr "Ikke-understttet; pvirker kodegenerering af tabeller" #~ msgid "Program is written in Fortran-90-ish free form" #~ msgstr "Program er skrevet i Fortran 90-agtig fri stil" #~ msgid "Warn about use of (only a few for now) Fortran extensions" #~ msgstr "Advar om brug af (i jeblikket kun nogle f) Fortran-udvidelser" #~ msgid "Program is written in VXT (Digital-like) FORTRAN" #~ msgstr "Program er skrevet i VXT (Digital-agtig) FORTRAN" #~ msgid "Disallow all ugly features" #~ msgstr "Forbyd alle grimme faciliteter" # hollerith? #~ msgid "Hollerith and typeless constants not passed as arguments" #~ msgstr "Hollerith og typelse konstanter overbringes ikke som parametre" #~ msgid "Allow ordinary copying of ASSIGN'ed vars" #~ msgstr "Tillad almindelig kopiering af ASSIGN'ede variable" # RETMIG: ? #~ msgid "Dummy array dimensioned to (1) is assumed-size" #~ msgstr "Dummy-tabel dimensioneret til (1) er antaget strrelse" #~ msgid "Trailing comma in procedure call denotes null argument" #~ msgstr "Afsluttende komma i procedurekald angiver nulparameter" #~ msgid "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z" #~ msgstr "Tillad REAL(Z) og AIMAG(Z) givet DOUBLE COMPLEX Z" #~ msgid "Initialization via DATA and PARAMETER is type-compatible" #~ msgstr "Klargring via DATA og PARAMETER er type-kompatible" #~ msgid "Allow INTEGER and LOGICAL interchangeability" #~ msgstr "Tillad INTEGER og LOGICAL p hinandens plads" #~ msgid "Print internal debugging-related info" #~ msgstr "Udskriv intern fejlanalyseringsrelateret info" #~ msgid "Initialize local vars and arrays to zero" #~ msgstr "Klargr lokale variable og tabeller til nul" #~ msgid "Backslashes in character/hollerith constants not special (C-style)" #~ msgstr "Omvendte skrstreger i tegn/hollerith-konstanter er ikke specielle (C-stil)" #~ msgid "Have front end emulate COMPLEX arithmetic to avoid bugs" #~ msgstr "Lad forenden emulere COMPLEX-beregninger for at undg fejl" #~ msgid "Disable the appending of underscores to externals" #~ msgstr "Deaktivr tilfjelse af understreger bag p eksterne variable" #~ msgid "Never append a second underscore to externals" #~ msgstr "Tilfj aldrig en anden understreg til eksterne variable" #~ msgid "Intrinsics spelled as e.g. SqRt" #~ msgstr "Indbyggede staves som f.eks. SqRt" #~ msgid "Intrinsics in uppercase" #~ msgstr "Indbyggede staves med store bogstaver" #~ msgid "Intrinsics letters in arbitrary cases" #~ msgstr "Der skelnes ikke mellem sm og store bogstaver i indbyggede" #~ msgid "Language keywords spelled as e.g. IOStat" #~ msgstr "Sprogngleord staves som f.eks. IOStat" #~ msgid "Language keywords in uppercase" #~ msgstr "Sprogngleord staves med store bogstaver" #~ msgid "Language keyword letters in arbitrary cases" #~ msgstr "Der skelnes ikke mellem sm og store bogstaver i sprogngleord" #~ msgid "Internally convert most source to uppercase" #~ msgstr "Konvertr det meste kildekode til store bogstaver internt" #~ msgid "Internally preserve source case" #~ msgstr "Bevar de store/sm bogstaver i kildekoden internt" #~ msgid "Symbol names spelled in mixed case" #~ msgstr "Symbolnavne staves med en blanding af store og sm bogstaver" #~ msgid "Symbol names in uppercase" #~ msgstr "Symbolnavne staves med store bogstaver" #~ msgid "Symbol names in lowercase" #~ msgstr "Symbolnavne staves med sm bogstaver" #~ msgid "Program written in uppercase" #~ msgstr "Program skrives med store bogstaver" #~ msgid "Program written in lowercase" #~ msgstr "Program skrives med sm bogstaver" #~ msgid "Program written in strict mixed-case" #~ msgstr "Program skrives med streng blanding af store/sm bogstaver" #~ msgid "Compile as if program written in uppercase" #~ msgstr "Overst som hvis programmet var skrevet med store bogstaver" #~ msgid "Compile as if program written in lowercase" #~ msgstr "Overst som hvis programmet var skrevet med sm bogstaver" #~ msgid "Preserve all spelling (case) used in program" #~ msgstr "Bevar al stavning (store/sm bogstaver) benyttet i programmet" #~ msgid "Delete libU77 intrinsics with bad interfaces" #~ msgstr "Slet libU77-indbyggede med drlige grnseflader" #~ msgid "Disable libU77 intrinsics with bad interfaces" #~ msgstr "Deaktivr libU77-indbyggede med drlige grnseflader" #~ msgid "Hide libU77 intrinsics with bad interfaces" #~ msgstr "Skjul libU77-indbyggede med drlige grnseflader" #~ msgid "Delete non-FORTRAN-77 intrinsics f2c supports" #~ msgstr "Slet f2c-understttelse af ikke-FORTRAN-77-indbyggede" #~ msgid "Disable non-FORTRAN-77 intrinsics f2c supports" #~ msgstr "Deaktivr f2c-understttelse af ikke-FORTRAN-77-indbyggede" #~ msgid "Hide non-FORTRAN-77 intrinsics f2c supports" #~ msgstr "Skjul f2c-understttelse af ikke-FORTRAN-77-indbyggede" #~ msgid "Delete non-FORTRAN-77 intrinsics F90 supports" #~ msgstr "Slet F90-understttelse af ikke-FORTRAN-77-indbyggede " #~ msgid "Disable non-FORTRAN-77 intrinsics F90 supports" #~ msgstr "Deaktivr F90-understttelse af ikke-FORTRAN-77-indbyggede" #~ msgid "Hide non-FORTRAN-77 intrinsics F90 supports" #~ msgstr "Skjul F90-understttelse af ikke-FORTRAN-77-indbyggede" #~ msgid "Delete non-FORTRAN-77 intrinsics g77 supports" #~ msgstr "Slet g77-understttelse af ikke-FORTRAN-77-indbyggede " #~ msgid "Disable non-FORTRAN 77 intrinsics F90 supports" #~ msgstr "Deaktivr g77-understttelse af ikke-FORTRAN-77-indbyggede" #~ msgid "Hide non-FORTRAN 77 intrinsics F90 supports" #~ msgstr "Skjul g77-understttelse af ikke-FORTRAN-77-indbyggede" #~ msgid "Delete MIL-STD 1753 intrinsics" #~ msgstr "Slet MIL-STD 1753-indbyggede" #~ msgid "Disable MIL-STD 1753 intrinsics" #~ msgstr "Deaktivr MIL-STD 1753-indbyggede" #~ msgid "Hide MIL-STD 1753 intrinsics" #~ msgstr "Skjul MIL-STD 1753-indbyggede" #~ msgid "Delete libU77 intrinsics" #~ msgstr "Slet libU77-indbyggede" #~ msgid "Disable libU77 intrinsics" #~ msgstr "Deaktivr libU77-indbyggede" #~ msgid "Hide libU77 intrinsics" #~ msgstr "Skjul libU77-indbyggede" #~ msgid "Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports" #~ msgstr "Slet VXT FORTRAN-understttelse af ikke-FORTRAN-77-indbyggede " #~ msgid "Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports" #~ msgstr "Deaktivr VXT FORTRAN-understttelse af ikke-FORTRAN-77-indbyggede " #~ msgid "Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports" #~ msgstr "Skjul VXT FORTRAN-understttelse af ikke-FORTRAN-77-indbyggede " #~ msgid "Treat initial values of 0 like non-zero values" #~ msgstr "Behandl begyndelsesvrdier p 0 som vrdier forskellig fra nul" #~ msgid "Emit special debugging information for COMMON and EQUIVALENCE (disabled)" #~ msgstr "Udsend speciel fejlanalyseringsinfo for COMMON og EQUIVALENCE (deaktiveret)" #~ msgid "Take at least one trip through each iterative DO loop" #~ msgstr "Tag i det mindste et skridt gennem hver DO-lkke" #~ msgid "Print names of program units as they are compiled" #~ msgstr "Udskriv navne p programenheder efterhnden som de oversttes" #~ msgid "Disable fatal diagnostics about inter-procedural problems" #~ msgstr "Deaktivr fatale diagnosticeringer af interprocedurale procedurer" #~ msgid "Make prefix-radix non-decimal constants be typeless" #~ msgstr "Gr prfiks-grundtal ikke-decimale konstanter typelse" #~ msgid "Generate code to check subscript and substring bounds" #~ msgstr "Generr kode for at tjekke indekserings- og understrengsgrnser" #~ msgid "Fortran-specific form of -fbounds-check" #~ msgstr "Fortran-specifik form for -fbounds-check" #~ msgid "Disable warnings about inter-procedural problems" #~ msgstr "Deaktivr advarsler om interprocedurale problemer" #~ msgid "Warn about constructs with surprising meanings" #~ msgstr "Advar om konstruktioner med overraskende betydninger" #~ msgid "Add a directory for INCLUDE searching" #~ msgstr "Tilfj et katalog til INCLUDE-sgning" #~ msgid "Set the maximum line length" #~ msgstr "Angiv den maksimale linjelngde" #~ msgid "Missing first operand for binary operator at %0" #~ msgstr "Manglende frste operand for binr operator ved %0" #~ msgid "Zero-length character constant at %0" #~ msgstr "Nul-lngde tegnkonstant ved %0" #~ msgid "Invalid token at %0 in expression or subexpression at %1" #~ msgstr "Ugyldigt symbol ved %0 i udtryk eller underudtryk ved %1" #~ msgid "Missing operand for operator at %1 at end of expression at %0" #~ msgstr "Manglende operand for operator ved %1 i slutningen af udtryk ved %0" #~ msgid "Label %A already defined at %1 when redefined at %0" #~ msgstr "Etiket %A er allerede defineret ved %1 ved omdefinering ved %0" #~ msgid "Unrecognized character at %0 [info -f g77 M LEX]" #~ msgstr "Ukendt tegn ved %0 [info -f g77 M LEX]" #~ msgid "Label definition %A at %0 on empty statement (as of %1)" #~ msgstr "Etiketdefinition %A ved %0 i tom stning (ved %1)" #~ msgid "Invalid first character at %0 [info -f g77 M LEX]" #~ msgstr "Ugyldig frste tegn ved %0 [info -f g77 M LEX]" #~ msgid "Line too long as of %0 [info -f g77 M LEX]" #~ msgstr "Linje for lang ved %0 [info -f g77 M LEX]" #~ msgid "Non-numeric character at %0 in label field [info -f g77 M LEX]" #~ msgstr "Tegn der ikke er tal ved %0 i etiketfelt [info -f g77 M LEX]" #~ msgid "Label number at %0 not in range 1-99999" #~ msgstr "Etiketnummer ved %0 er ikke i intervallet 1-99999" #~ msgid "At %0, '!' and '/*' are not valid comment delimiters" #~ msgstr "Ved %0 er '!' og '/*' ikke gyldige kommentarafgrnsninger" #~ msgid "Continuation indicator at %0 must appear in column 6 [info -f g77 M LEX]" #~ msgstr "Fortsttelsesindikator ved %0 skal optrde i kolonne 6 [info -f g77 M LEX]" #~ msgid "Label at %0 invalid with continuation line indicator at %1 [info -f g77 M LEX]" #~ msgstr "Etiket ved %0 er ugyldig med fortsttelseslinjeindikator ved %1 [info -f g77 M LEX]" #~ msgid "Character constant at %0 has no closing apostrophe at %1" #~ msgstr "Tenkonstant ved %0 har ingen afsluttende apostrof ved %1" #~ msgid "Hollerith constant at %0 specified %A more characters than are present as of %1" #~ msgstr "Hollerith-konstant ved %0 angiver %A flere tegn end der optrder ved %1" #~ msgid "Missing close parenthese at %0 needed to match open parenthese at %1" #~ msgstr "Afsluttende parantes ved %0 behves for at svare til ben parantes ved %1" #~ msgid "Integer at %0 too large" #~ msgstr "Heltal ved %0 for stort" #~ msgid "Period at %0 not followed by digits for floating-point number or by `NOT.', `TRUE.', or `FALSE.'" #~ msgstr "Punktum ved %0 efterflges ikke af cifre til kommatal eller af 'NOT.', 'TRUE.' eller 'FALSE.'" #~ msgid "Missing close-period between `.%A' at %0 and %1" #~ msgstr "Manglende afsluttende punktum mellem '.%A' ved %0 og %1" #~ msgid "Invalid exponent at %0 for real constant at %1; nondigit `%A' in exponent field" #~ msgstr "Ugyldig eksponent ved %0 for reel konstant ved %1; ikke-ciffer '%A' i eksponentfelt" #~ msgid "Missing value at %1 for real-number exponent at %0" #~ msgstr "Manglende vrdi ved %1 for reel eksponent ved %0" #~ msgid "Expected binary operator between expressions at %0 and at %1" #~ msgstr "Forventede binr operator mellem udtryk ved %0 og ved %1" #~ msgid "Semicolon at %0 is an invalid token" #~ msgstr "Semikolon ved %0 er et ugyldigt symbol" #~ msgid "Extraneous comma in FORMAT statement at %0" #~ msgstr "Ekstra komma i FORMAT-stning ved %0" #~ msgid "Missing comma in FORMAT statement at %0" #~ msgstr "Manglende komma i FORMAT-stning ved %0" #~ msgid "Spurious sign in FORMAT statement at %0" #~ msgstr "Mystisk fortegn i FORMAT-stning ved %0" #~ msgid "Spurious number in FORMAT statement at %0" #~ msgstr "Mystisk tal i FORMAT-stning ved %0" #~ msgid "Spurious text trailing number in FORMAT statement at %0" #~ msgstr "Mystisk tekstafsluttende tal i FORMAT-stning ved %0" #~ msgid "Unrecognized FORMAT specifier at %0" #~ msgstr "Ukendt FORMAT-angivelse ved %0" #~ msgid "Missing close-parenthese(s) in FORMAT statement at %0" #~ msgstr "Manglende afsluttende parantes i FORMAT-stning ved %0" #~ msgid "Missing number following period in FORMAT statement at %0" #~ msgstr "Manglende tal efter punktum i FORMAT-stning ved %0" #~ msgid "Missing number following `E' in FORMAT statement at %0" #~ msgstr "Manglende tal efter 'E' i FORMAT-stning ved %0" #~ msgid "Spurious trailing comma preceding terminator at %0" #~ msgstr "Mystisk afsluttende komma fr afslutningssymbol ved %0" #~ msgid "At %0, specify OPERATOR instead of ASSIGNMENT for INTERFACE statement not specifying the assignment operator (=)" #~ msgstr "Angiv OPERATOR i stedet for ASSIGNMENT ved %0 for INTERFACE-stning der ikke angiver tildelingsoperatoren (=)" #~ msgid "At %0, specify ASSIGNMENT instead of OPERATOR for INTERFACE statement specifying the assignment operator (=)" #~ msgstr "Angiv ASSIGNMENT i stedet for OPERATOR ved %0 for INTERFACE-stning der angiver tildelingsoperatoren (=)" #~ msgid "Cannot specify =initialization-expr at %0 unless `::' appears before list of objects" #~ msgstr "Kan ikke angive =klargringsudtryk ved %0 medmindre '::' optrder fr listen af objekter" #~ msgid "Reference to label at %1 inconsistent with its definition at %0" #~ msgstr "Reference til etiket ved %1 er inkonsistent med dens definition ved %0" #~ msgid "Reference to label at %1 inconsistent with earlier reference at %0" #~ msgstr "Reference til etiket ved %1 er inkonsistent med tidligere reference ved %0" #~ msgid "DO-statement reference to label at %1 follows its definition at %0" #~ msgstr "DO-stningsreference til etiket ved %1 flger dens definition ved %0" #~ msgid "Reference to label at %1 is outside block containing definition at %0" #~ msgstr "Reference til etiket ved %1 er uden for blok der indeholder definitionen ved %0" #~ msgid "DO-statement references to label at %0 and %2 separated by unterminated block starting at %1" #~ msgstr "DO-stningsreferencer til etiket ved %0 og %2 adskilt af uafsluttet blok der begynder ved %1" #~ msgid "DO-statement reference to label at %0 and label definition at %2 separated by unterminated block starting at %1" #~ msgstr "DO-stningsreference til etiket ved %0 og etiketdefinition ved %2 adskilt af uafsluttet blok der begynder ved %1" #~ msgid "Label definition at %0 invalid on this kind of statement" #~ msgstr "Etiketdefinition ved %0 er ugyldig ved denne slags stning" #~ msgid "Statement at %0 invalid in this context" #~ msgstr "Stning ved %0 er ugyldig i denne kontekst" #~ msgid "Statement at %0 invalid in context established by statement at %1" #~ msgstr "Stning ved %0 er ugyldig i den kontekst der er etableret af stning ved %1" #~ msgid "Statement at %0 must specify construct name specified at %1" #~ msgstr "Stning ved %0 skal angive konstruktionsnavn angivet ved %1" #~ msgid "Construct name at %0 superfluous, no construct name specified at %1" #~ msgstr "Kontruktionsnavn ved %0 er overfldigt, intet kontruktionsnavn angivet ved %1" #~ msgid "Construct name at %0 not the same as construct name at %1" #~ msgstr "Kontruktionsnavn ved %0 er ikke det samme som konstruktionsnavn ved %1" #~ msgid "Construct name at %0 does not match construct name for any containing DO constructs" #~ msgstr "Kontruktionsnavn ved %0 passer ikke med konstruktionsnavn for nogen indeholdende DO-konstruktioner" #~ msgid "Label definition missing at %0 for DO construct specifying label at %1" #~ msgstr "Etiketdefinition mangler ved %0 for DO-konstruktion der angiver etiket ved %1" #~ msgid "Statement at %0 follows ELSE block for IF construct at %1" #~ msgstr "Stning ved %0 flger ELSE-blok for IF-konstruktion ved %1" #~ msgid "No label definition for FORMAT statement at %0" #~ msgstr "Ingen etiketdefinition for FORMAT-stning ved %0" #~ msgid "Second occurrence of ELSE WHERE at %0 within WHERE at %1" #~ msgstr "Anden forekomst af ELSE WHERE ved %0 inden i WHERE ved %1" #~ msgid "END statement at %0 missing `%A' keyword required for internal or module procedure(s) bounded by %1" #~ msgstr "END-stning ved %0 mangler ngleordet '%A' som er pkrvet for interne eller modul-procedurer afgrnset af %1" #~ msgid "MODULE PROCEDURE statement at %0 disallowed because INTERFACE at %1 specifies no generic name, operator, or assignment" #~ msgstr "MODULE PROCEDURE-stning ved %0 er ikke tilladt da INTERFACE ved %1 ikke angiver generisk navn, operator eller tildeling" #~ msgid "BLOCK DATA name at %0 superfluous, no name specified at %1" #~ msgstr "BLOCK DATA-navn ved %0 er overfldigt, intet navn angivet ved %1" #~ msgid "Program name at %0 superfluous, no PROGRAM statement specified at %1" #~ msgstr "Programnavn ved %0 er overfldigt, ingen PROGRAM-stning angivet ved %1" #~ msgid "Program unit name at %0 not the same as name at %1" #~ msgstr "Programenhedsnavn ved %0 er ikke det samme som navn ved %1" #~ msgid "Type name at %0 not the same as name at %1" #~ msgstr "Typenavn ved %0 er ikke det samme som navn ved %1" #~ msgid "End of source file before end of block started at %0" #~ msgstr "Slutning p kildekodefil fr slutning af blok begyndt ved %0" #~ msgid "Undefined label, first referenced at %0" #~ msgstr "Ikke-defineret etiket, frste reference er ved %0" #~ msgid "SAVE statement or attribute at %1 cannot be specified along with SAVE statement or attribute at %0" #~ msgstr "SAVE-stning eller -egenskab ved %1 kan ikke angives sammen med SAVE-stning eller -egenskab ved %0" #~ msgid "PUBLIC or PRIVATE statement at %1 cannot be specified along with PUBLIC or PRIVATE statement at %0" #~ msgstr "PUBLIC- eller PRIVATE-stning ved %1 kan ikke angives sammen med PUBLIC- eller PRIVATE-stning ved %0" #~ msgid "RETURN statement at %0 invalid within a main program unit" #~ msgstr "RETURN-stning ved %0 ugyldig inden i en hovedprogramenhed" #~ msgid "Alternate return specifier at %0 invalid within a main program unit" #~ msgstr "Alternativ returangivelse ved %0 er ugyldig inden i en hovedprogramenhed" #~ msgid "Alternate return specifier at %0 invalid within a function" #~ msgstr "Alternativ returangivelse ved %0 er ugyldig inden i en funktion" #~ msgid "Access specifier or PRIVATE statement at %0 invalid for derived-type definition within other than the specification part of a module" #~ msgstr "Tilgangsangivelse eller PRIVATE-stning ved %0 er ugyldig for nedarvet typedefinition som ikke er i specifikationsdelen af et modul" #~ msgid "Access specifier at %0 must immediately follow derived-type statement at %1 with no intervening statements" #~ msgstr "Tilgangsangivelse ved %0 skal umiddelbart flge nedarvet type-stning ved %1 uden nogen mellemliggende stninger" #~ msgid "No components specified as of %0 for derived-type definition beginning at %1" #~ msgstr "Ingen komponenter angivet ved %0 for nedarvet typedefinition begyndende ved %1" #~ msgid "No components specified as of %0 for structure definition beginning at %1" #~ msgstr "Ingen komponenter angivet ved %0 for strukturdefinition begyndende ved %1" #~ msgid "Missing structure name for outer structure definition at %0" #~ msgstr "Manglende strukturnavn for ydre strukturdefinition ved %0" #~ msgid "Field names at %0 for outer structure definition -- specify them in a subsequent RECORD statement instead" #~ msgstr "Feltnavne ved %0 for ydre strukturdefinition - angiv dem i en efterflgende RECORD-stning i stedet" #~ msgid "Missing field name(s) for structure definition at %0 within structure definition at %1" #~ msgstr "Manglende feltnavne for strukturdefinition ved %0 inden i strukturdefinition ved %1" #~ msgid "No components specified as of %0 for map beginning at %1" #~ msgstr "Ingen komponenter angivet ved %0 for map begyndende ved %1" #~ msgid "Zero or one maps specified as of %0 for union beginning at %1 -- at least two are required" #~ msgstr "Nul eller en map angivet ved %0 for union begyndende ved %1 - mindst to er pkrvet" #~ msgid "Missing %A specifier in statement at %0" #~ msgstr "Manglende %A-angivelse i stning ved %0" #~ msgid "Items in I/O list starting at %0 invalid for namelist-directed I/O" #~ msgstr "Elementer i I/O-liste begyndende ved %0 er ugyldigt for navnlistedirigeret I/O" #~ msgid "Conflicting I/O control specifications at %0 and %1" #~ msgstr "Modstridende I/O-kontrolangivelser ved %0 og %1" #~ msgid "No UNIT= specifier in I/O control list at %0" #~ msgstr "Inge UNIT=-angivelse i I/O-kontrolliste ved %0" #~ msgid "Specification at %0 requires ADVANCE=`NO' specification in same I/O control list" #~ msgstr "Specifikation ved %0 krver ADVANCE='NO'-specifikation i samme I/O-kontrolliste" #~ msgid "Specification at %0 requires explicit FMT= specification in same I/O control list" #~ msgstr "Specifikation ved %0 krver eksplicit FMT=-specifikation i samme I/O-kontrolliste" #~ msgid "Second occurrence of CASE DEFAULT at %0 within SELECT CASE at %1" #~ msgstr "Anden forekomst af CASE DEFAULT ved %0 inden i SELECT CASE ved %1" #~ msgid "Duplicate or overlapping case values/ranges at %0 and %1" #~ msgstr "CASE-vrdi optrder mere end n gang eller intervaller overlapper ved %0 og %1" #~ msgid "Type and/or kind-type parameter disagreement between CASE value or value within range at %0 and SELECT CASE at %1" #~ msgstr "Type og/eller form for type-parameter konflikt mellem CASE-vrdi eller vrdi i interval ved %0 og SELECT CASE ved %1" #~ msgid "Range specification at %0 invalid for CASE statement within logical-type SELECT CASE statement" #~ msgstr "Intervalangivelse ved %0 er ugyldig for CASE-stning inden i SELECT CASE-stning med logisk type" #~ msgid "Fortran 90 feature at %0 unsupported" #~ msgstr "Fortran 90-facilitet ved %0 er ikke understttet" #~ msgid "Invalid declaration of or reference to symbol `%A' at %0 [initially seen at %1]" #~ msgstr "Ugyldig erklring af reference til symbolet '%A' ved %0 (frst set ved %1)" #~ msgid "Null element at %0 for array reference at %1" #~ msgstr "Nulelement ved %0 for tabelreference ved %1" #~ msgid "Too few elements (%A missing) as of %0 for array reference at %1" #~ msgstr "For f elementer (%A mangler) ved %0 for tabelreference ved %1" #~ msgid "Too many elements as of %0 for array reference at %1" #~ msgstr "For mange elementer ved %0 for tabelreference ved %1" #~ msgid "Missing colon as of %0 in substring reference for %1" #~ msgstr "Manglende kolon ved %0 i understrengsreference for %1" #~ msgid "Invalid use at %0 of substring operator on %1" #~ msgstr "Ugyldig brug ved %0 af understrengsoperator p %1" #~ msgid "Substring begin/end point at %0 out of defined range" #~ msgstr "Understrengs begyndelses-/slutpunkt ved %0 er uden for det definerede interval" #~ msgid "Array element value at %0 out of defined range" #~ msgstr "Tabelelementvrdi ved %0 er uden for det definerede interval" #~ msgid "Expression at %0 has incorrect data type or rank for its context" #~ msgstr "Udtryk ved %0 har forkert datatype eller rang for dets kontekst" #~ msgid "Division by 0 (zero) at %0 (IEEE not yet supported)" #~ msgstr "Division med nul ved %0 (IEEE understttes ikke endnu)" #~ msgid "%A step count known to be 0 (zero) at %0" #~ msgstr "%A-skridttller vides at vre nul ved %0" #~ msgid "%A end value plus step count known to overflow at %0" #~ msgstr "%A-slutvrdi plus skridttller vides at forrsage overlb ved %0" #~ msgid "%A begin, end, and step-count values known to result in implementation-dependent behavior due to overflow(s) in intermediate calculations at %0" #~ msgstr "%A-begyndelses-, slut- og skridttller-vrdier vides at resultere i implementeringsafhngig opfrsel pga. overlb i mellemregninger ved %0" #~ msgid "%A begin, end, and step-count values known to result in no iterations at %0" #~ msgstr "%A-begyndelses-, slut- og skridttller-vrdier vides at resultere i at der ikke foretages nogen iterationer ved %0" #~ msgid "Type disagreement between expressions at %0 and %1" #~ msgstr "Typekonflikt mellem udtryk ved %0 og %1" #~ msgid "No specification for implied-DO iterator `%A' at %0" #~ msgstr "Ingen angivelse af underforstet DO-iterator '%A' ved %0" #~ msgid "Gratuitous parentheses surround implied-DO construct at %0" #~ msgstr "Ekstra paranteser omkring underforstet DO-konstruktion ved %0" #~ msgid "Zero-size specification invalid at %0" #~ msgstr "Nulstrrelses angivelse ugyldig ved %0" #~ msgid "Zero-size array at %0" #~ msgstr "Nulstrrelsestabel ved %0" #~ msgid "Target machine does not support complex entity of kind specified at %0" #~ msgstr "Mlarkitekturen understtter ikke den form for kompleks enhed der er angivet ved %0" #~ msgid "Target machine does not support DOUBLE COMPLEX, specified at %0" #~ msgstr "Mlarkitekturen understtter ikke DOUBLE COMPLEX, som angivet ved %0" #~ msgid "Attempt to raise constant zero to a power at %0" #~ msgstr "Forsg at oplfte konstant nul til en potens af %0" #~ msgid "Reference to generic intrinsic `%A' at %0 could be to form %B or %C" #~ msgstr "Reference til generisk indbygget '%A' ved %0 kunne vre for at danne %B eller %C" #~ msgid "Ambiguous use of intrinsic `%A' at %0 [info -f g77 M CMPAMBIG]" #~ msgstr "Tvetydig brug af indbygget '%A' ved %0 [info -f g77 M CMPAMBIG]" #~ msgid "Intrinsic `%A' referenced %Bly at %0, %Cly at %1 [info -f g77 M EXPIMP]" #~ msgstr "Indbygget '%A' refereret til som %B ved %0, som %C ved %1 [info -f g77 M EXPIMP]" #~ msgid "Same name `%A' used for %B at %0 and %C at %1 [info -f g77 M INTGLOB]" #~ msgstr "Samme navn '%A' benyttet for %B ved %0 og %C ved %1 [info -f g77 M INTGLOB]" #~ msgid "Explicit type declaration for intrinsic `%A' disagrees with invocation at %0" #~ msgstr "Eksplicit typeerklring for indbygget '%A' er i modstrid med kald ved %0" #~ msgid "Unable to open INCLUDE file `%A' at %0" #~ msgstr "Kunne ikke bne INCLUDE-filen '%A' ved %0" #~ msgid "Null argument at %0 for statement function reference at %1" #~ msgstr "Nulparameter ved %0 for stningsfunktionsreference ved %1" #~ msgid "Null argument at %0 for procedure invocation at %1" #~ msgstr "Nulparameter ved %0 for procedurekald ved %1" #~ msgid "%A too few arguments (starting with dummy argument `%B') as of %0 for statement function reference at %1" #~ msgstr "%A for f parametre (begyndende ved dummy-parameter '%B') ved %0 for stningsfunktionsreference ved %1" #~ msgid "%A too many arguments as of %0 for statement function reference at %1" #~ msgstr "%A for mange parametre ved %0 for stningsfunktionsreference ved %1" #~ msgid "Array supplied at %1 for dummy argument `%A' in statement function reference at %0" #~ msgstr "Tabel angivet ved %1 for dummy-parameter '%A' i stningsfunktionsreference ved %1" #~ msgid "Unsupported FORMAT specifier at %0" #~ msgstr "Ikke-understttet FORMAT-angivelse ved %0" #~ msgid "Variable-expression FORMAT specifier at %0 -- unsupported" #~ msgstr "Variabel-udtryks FORMAT-angivelse ved %0 - ikke-understttet" #~ msgid "Unsupported VXT statement at %0" #~ msgstr "Ikke-understttet VXT-stning ved %0" #~ msgid "Attempt to specify second initial value for `%A' at %0" #~ msgstr "Forsg p at angive anden startvrdi for '%A' ved %0" #~ msgid "Too few initial values in list of initializers for `%A' at %0" #~ msgstr "For f startvrdier i klargringsliste for '%A' ved %0" #~ msgid "Too many initial values in list of initializers starting at %0" #~ msgstr "For mange startvrdier i klargringsliste ved %0" #~ msgid "Array or substring specification for `%A' out of range in statement at %0" #~ msgstr "Tabel- eller understrengsangivelse for '%A' er uden for det gyldige interval i stning ved %0" #~ msgid "Array subscript #%B out of range for initialization of `%A' in statement at %0" #~ msgstr "Tabelindeks nr. %B er uden for det gyldig interval ved klargring af '%A' i stning ved %0" #~ msgid "Implied do-loop step count of 0 (zero) for iteration variable `%A' in statement at %0" #~ msgstr "Underforstet do-lkkeskridttller p nul for iterationsvariablen '%A' i stning ved %0" #~ msgid "Implied do-loop iteration count of 0 (zero) for iteration variable `%A' in statement at %0" #~ msgstr "Underforstet do-lkkegentagelsestller p nul for iterationsvariablen '%A' i stning ved %0" #~ msgid "Not an integer constant expression in implied do-loop in statement at %0" #~ msgstr "Ikke et heltalskonstantudtryk i underforstet do-lkke i stning ved %0" #~ msgid "Attempt to specify second initial value for element of `%A' at %0" #~ msgstr "Forsg p at angive anden startvdi for element af '%A' ved %0" #~ msgid "Attempt to EQUIVALENCE common areas `%A' and `%B' at %0" #~ msgstr "Forsg p at anvende EQUIVALENCE mellem de almene omrder '%A' og '%B' ved %0" #~ msgid "Can't place `%A' as directed by EQUIVALENCE due to alignment restrictions" #~ msgstr "Kan ikke placere '%A' som angivet af EQUIVALENCE pga. justeringsrestriktioner" #~ msgid "Mismatched EQUIVALENCE requirements for placement of `%A' at both %C and %D bytes offset from `%B'" #~ msgstr "Forkerte EQUIVALENCE-krav for placering af '%A' ved bde %C og %D bytes afstand fra '%B'" #~ msgid "Array or substring specification for `%A' out of range in EQUIVALENCE statement" #~ msgstr "Tabel- eller understrengsspecifikation for '%A' er uden for det gyldige interval i EQUIVALENCE-stning" #~ msgid "Substring of non-CHARACTER entity `%A' in EQUIVALENCE statement" #~ msgstr "Understreng af ikke-CHARACTER enhed '%A' i EQUIVALENCE-stning" #~ msgid "Array reference to scalar variable `%A' in EQUIVALENCE statement" #~ msgstr "Tabelreference til skalar variabel '%A' i EQUIVALENCE-stning" #~ msgid "Array subscript #%B out of range for EQUIVALENCE of `%A'" #~ msgstr "Tabelindeks nr. %B er uden for det gyldige interval for EQUIVALENCE '%A'" #~ msgid "Attempt to extend COMMON area beyond its starting point via EQUIVALENCE of `%A'" #~ msgstr "Forsg p at udvide COMMON-omrde over dets begyndelsespunkt vha. EQUIVALENCE '%A'" #~ msgid "Too few elements in reference to array `%A' in EQUIVALENCE statement" #~ msgstr "For f elementer i reference til tabllen '%A' i EQUIVALENCE-stning" #~ msgid "Too many elements in reference to array `%A' in EQUIVALENCE statement" #~ msgstr "For mange elementer i reference til tabllen '%A' i EQUIVALENCE-stning" #~ msgid "Mixed CHARACTER and non-CHARACTER types via COMMON/EQUIVALENCE -- for example, `%A' and `%B'" #~ msgstr "Blandede CHARACTER- og ikke-CHARACTER-typer vha. COMMON/EQUIVALENCE - f.eks. '%A' og '%B'" #~ msgid "Return value `%A' for FUNCTION at %0 not referenced in subprogram" #~ msgstr "Returvrdi `%A' for FUNCTION ved %0 refereres ikke i underprogram" #~ msgid "Common block `%A' is SAVEd, explicitly or implicitly, at %0 but not SAVEd at %1" #~ msgstr "Almen blok '%A' er SAVEd, eksplicit eller implicit, ved %0, men ikke ved %1" #~ msgid "Common block `%A' is %B %D in length at %0 but %C %E at %1" #~ msgstr "Almen blok '%A' er %B %D i lngde ved %0, men %C %E ved %1" #~ msgid "Blank common initialized at %0" #~ msgstr "Tom almen tildelt startvrdi ved %0" #~ msgid "Intrinsic `%A' is passed as actual argument at %0 but not explicitly declared INTRINSIC" #~ msgstr "Indbygget '%A' er overbragt som faktisk parameter ved %0, men ikke eksplicit erklret INTRINSIC" #~ msgid "External procedure `%A' is passed as actual argument at %0 but not explicitly declared EXTERNAL" #~ msgstr "Ekstern procedure '%A' er overbragt som faktisk parameter ved %0, men ikke eksplicit erklret EXTERNAL" #~ msgid "Character `%A' (for example) is upper-case in symbol name at %0" #~ msgstr "Tegn '%A' (f.eks.) er et stort bogstav i symbolnavn ved %0" #~ msgid "Character `%A' (for example) is lower-case in symbol name at %0" #~ msgstr "Tegn '%A' (f.eks.) er et lille bogstav i symbolnavn ved %0" #~ msgid "Character `%A' not followed at some point by lower-case character in symbol name at %0" #~ msgstr "Tegn '%A' flges ikke af lille bogstav i symbolnavn ved %0" #~ msgid "Initial character `%A' is lower-case in symbol name at %0" #~ msgstr "Begyndelsestegn '%A' er et lille bogstav i symbolnavn ved %0" #~ msgid "NAMELIST not adequately supported by run-time library for source files with case preserved" #~ msgstr "NAMELIST er ikke tilstrkkeligt understttet af krselsbiblioteket for kildefiler med store/sm bogstaver bevaret" #~ msgid "Nested %% construct (%%VAL, %%REF, or %%DESCR) at %0" #~ msgstr "Indlejret %%-konstruktion (%%VAL, %%REF eller %%DESCR) ved %0" #~ msgid "Statement at %0 invalid in BLOCK DATA program unit at %1" #~ msgstr "Stning ved %0 er ugyldig i BLOCK DATA-programenhed ved %1" #~ msgid "Truncating characters on right side of character constant at %0" #~ msgstr "Fjerner tegn p den hjre side af tegnkonstant ved %0" #~ msgid "Truncating characters on right side of hollerith constant at %0" #~ msgstr "Fjerner tegn p den hjre side af hollerith-konstant ved %0" #~ msgid "Truncating non-zero data on left side of numeric constant at %0" #~ msgstr "Fjerner data der ikke er nul, p den venstre side af numerisk konstant ved %0" #~ msgid "Truncating non-zero data on left side of typeless constant at %0" #~ msgstr "Fjerner data der ikke er nul, p den venstre side af typels konstant ved %0" #~ msgid "Typeless constant at %0 too large" #~ msgstr "Typels konstant ved %0 er for stor" #~ msgid "First-column ampersand continuation at %0" #~ msgstr "Frstekolonne og-tegnsfortsttelse ved %0" #~ msgid "Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]" #~ msgstr "Globalt navn '%A' defineret ved %0 er allerede defineret ved %1 [info -f g77 M GLOBALS]" #~ msgid "Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]" #~ msgstr "Globalt navn '%A' er %B ved %0, men er %C ved %1 [info -f g77 M GLOBALS]" #~ msgid "Global name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]" #~ msgstr "Globalt navn '%A' ved %0 har anden type ved %1 [info -f g77 M GLOBALS]" #~ msgid "Too %B arguments passed to `%A' at %0 versus definition at %1 [info -f g77 M GLOBALS]" #~ msgstr "For %B parameter overbragt til '%A' ved %0 mod definitionen ved %1 [info -f g77 M GLOBALS]" #~ msgid "Too %B arguments for `%A' at %0 versus invocation at %1 [info -f g77 M GLOBALS]" #~ msgstr "For %B parametre til '%A' ved %0 mod kald ved %1 [info -f g77 M GLOBALS]" #~ msgid "Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]" #~ msgstr "Parameter nr. %B for '%A' er %C ved %0, men er %D ved %1 [info -f g77 M GLOBALS]" #~ msgid "Array `%A' at %0 is too large to handle" #~ msgstr "Tabellen '%A' ved %0 er for stor til at hndtere" #~ msgid "Statement function `%A' defined at %0 is not used" #~ msgstr "Stningsfunktion '%A' defineret ved %0, men er ikke brugt" #~ msgid "Intrinsic `%A', invoked at %0, known to be non-Y2K-compliant [info -f g77 M Y2KBAD]" #~ msgstr "Indbygget '%A', kaldt ved %0, vides ikke vre r 2000-sikker [info -f g77 M Y2KBAD]" #~ msgid "Internal compiler error -- cannot perform operation" #~ msgstr "Intern overstterfejl - kan ikke udfre operation" #~ msgid "In unknown kind" #~ msgstr "I ukendt ting" #~ msgid "In entity" #~ msgstr "I enheden" #~ msgid "In function" #~ msgstr "I funktionen" #~ msgid "In subroutine" #~ msgstr "I underrutinen" #~ msgid "In program" #~ msgstr "I programmet" #~ msgid "In block-data unit" #~ msgstr "I blokdataenheden" #~ msgid "In common block" #~ msgstr "I den almene blok" #~ msgid "In construct" #~ msgstr "I konstruktionen" #~ msgid "In namelist" #~ msgstr "I navnelisten" #~ msgid "In anything" #~ msgstr "I et eller andet" #~ msgid "internal error in check-init: tree code not implemented: %s" #~ msgstr "intern fejl i check-init: trkode ikke implementeret: %s" #~ msgid "final field '%s' may not have been initialized" #~ msgstr "slutfeltet '%s' bliver mske ikke klargjort" #~ msgid "internal error - too many interface type" #~ msgstr "intern fejl - for mange grnsefladetyper" #~ msgid "bad method signature" #~ msgstr "ugyldig metodesignatur" #~ msgid "misplaced ConstantValue attribute (not in any field)" #~ msgstr "forkert placeret ConstantValue-egenskab (ikke i noget felt)" #~ msgid "duplicate ConstantValue attribute for field '%s'" #~ msgstr "mere end n ConstantValue-egenskab for feltet '%s'" #~ msgid "ConstantValue attribute of field '%s' has wrong type" #~ msgstr "ConstantValue-egenskaben for feltet '%s' har forkert type" #~ msgid "field '%s' not found in class" #~ msgstr "feltet '%s' blev ikke fundet i klassen" #~ msgid "abstract method in non-abstract class" #~ msgstr "abstrakt metode i ikke-abstrakt klasse" #~ msgid "non-static method '%s' overrides static method" #~ msgstr "ikke-statisk metode '%s' overskriver statisk metode" #~ msgid "In %s: overlapped variable and exception ranges at %d" #~ msgstr "I %s: overlappende variabel- og undtagelsesintervaller ved %d" #~ msgid "bad type in parameter debug info" #~ msgstr "ugyldig type i parameterfejlanalyseringsinfo" #~ msgid "bad PC range for debug info for local `%s'" #~ msgstr "ugyldig PC-interval for fejlanalyseringsinfo for lokal '%s'" #~ msgid "stack underflow - dup* operation" #~ msgstr "stakunderlb - dup*-operation" #~ msgid "reference `%s' is ambiguous: appears in interface `%s' and interface `%s'" #~ msgstr "reference '%s' er tvetydig: den optrder i grnsefladen '%s' og grnsefladen '%s'" #~ msgid "field `%s' not found" #~ msgstr "feltet '%s' ikke fundet" #~ msgid "ret instruction not implemented" #~ msgstr "ret-instruktion ikke implementeret" #~ msgid "method '%s' not found in class" #~ msgstr "metoden '%s' ikke fundet i klassen" #~ msgid "failed to find class '%s'" #~ msgstr "kunne ikke finde klassen '%s'" #~ msgid "class '%s' has no method named '%s' matching signature '%s'" #~ msgstr "klassen '%s' har ingen metode ved navn '%s' der passer med signaturen '%s'" #~ msgid "invokestatic on non static method" #~ msgstr "invokestatic p en ikke-statisk metode" #~ msgid "invokestatic on abstract method" #~ msgstr "invokestatic p en abstrakt metode" #~ msgid "invoke[non-static] on static method" #~ msgstr "invoke[non-static] p en statisk metode" #~ msgid "missing field '%s' in '%s'" #~ msgstr "manglende felt '%s' i '%s'" #~ msgid "mismatching signature for field '%s' in '%s'" #~ msgstr "signatur passer ikke med feltet '%s' i '%s'" #~ msgid "assignment to final field `%s' not in field's class" #~ msgstr "tildeling til endeligt felt '%s' er ikke i feltets klasse" #~ msgid "assignment to final static field `%s' not in class initializer" #~ msgstr "tildeling til endeligt statisk felt '%s' er ikke i klassens klargring" #~ msgid "assignment to final field `%s' not in constructor" #~ msgstr "tildeling til endeligt felt '%s' er ikke i konstruktionsfunktion" #~ msgid "can't expand %s" #~ msgstr "kan ikke udfolde %s" #~ msgid "invalid PC in line number table" #~ msgstr "ugyldig PC i linjetalstabel" #~ msgid "unreachable bytecode from %d to before %d" #~ msgstr "kan ikke n bytekode fra %d til fr %d" #~ msgid "unreachable bytecode from %d to the end of the method" #~ msgstr "kan ikke n bytekode fra %d til slutningen af metoden" #~ msgid "unrecogized wide sub-instruction" #~ msgstr "ukendt bred underinstruktion" #~ msgid "source file for class `%s' is newer than its matching class file. Source file `%s' used instead" #~ msgstr "kildekodefilen for klassen '%s' er nyere end dens tilsvarende klassefil; kildekodefilen '%s' benyttet i stedet" #~ msgid "bad string constant" #~ msgstr "ugyldig strengkonstant" #~ msgid "bad value constant type %d, index %d" #~ msgstr "ugyldig vrdikonstanttype %d, indeks %d" #~ msgid "can't reopen %s" #~ msgstr "kan ikke genbne %s" #~ msgid "can't close %s" #~ msgstr "kan ikke lukke %s" #~ msgid "cannot find file for class %s" #~ msgstr "kan ikke finde filen for klassen %s" #~ msgid "not a valid Java .class file" #~ msgstr "ikke en gyldig Java .class-fil" #~ msgid "error while parsing constant pool" #~ msgstr "fejl ved tolkning af konstant omrde" #~ msgid "error in constant pool entry #%d\n" #~ msgstr "fejl i konstantomrdelement nr. %d\n" #~ msgid "reading class %s for the second time from %s" #~ msgstr "lser klassen %s for anden gang fra %s" #~ msgid "error while parsing fields" #~ msgstr "fejl ved tolkning af felter" #~ msgid "error while parsing methods" #~ msgstr "fejl ved tolkning af metoder" #~ msgid "error while parsing final attributes" #~ msgstr "fejl ved tolkning af endelige egenskaber" #~ msgid "the `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute. This generally means that your classpath is incorrectly set. Use `info gcj \"Input Options\"' to see the info page describing how to set the classpath" #~ msgstr "det 'java.lang.Object' som blev fundet i '%s' havde ikke den specielle nullngdes egenskab 'gnu.gcj.gcj-compiled'. Dette betyder som regel at din klassesti er angivet forkert. Prv 'info gcj \"Input Options\"' for at se en infoside der beskriver hvordan man angiver klassestien" #~ msgid "missing Code attribute" #~ msgstr "manglende Code-egenskab" #~ msgid "source file seen twice on command line and will be compiled only once" #~ msgstr "kildekodefil angivet to gange i kommandolinjen og vil kun blive oversat n gang" #~ msgid "no input file specified" #~ msgstr "ingen inddatafiler angivet" #~ msgid "can't close input file %s" #~ msgstr "kan ikke lukke inddatafilen %s" #~ msgid "bad zip/jar file %s" #~ msgstr "delagt zip/jar-fil %s" #~ msgid "internal error in generate_bytecode_insn - tree code not implemented: %s" #~ msgstr "intern fejl i generate_bytecode_insn - trkode er ikke implementeret: %s" #~ msgid "field initializer type mismatch" #~ msgstr "typen af startvrdien for feltet passer ikke" #~ msgid "can't create directory %s" #~ msgstr "kan ikke oprette kataloget %s" #~ msgid "can't create %s" #~ msgstr "kan ikke oprette %s" #~ msgid "only one of `--print-main', `--list-class', and `--complexity' allowed" #~ msgstr "kun n af '--print-main', '--list-class' og '--complexity' tilladt" #~ msgid "can't open output file `%s'" #~ msgstr "kan ikke bne uddatafilen '%s'" #~ msgid "file not found `%s'" #~ msgstr "filen '%s' blev ikke fundet" #~ msgid "can't specify `-D' without `--main'\n" #~ msgstr "kan ikke angive '-D' uden '--main'\n" #~ msgid "`%s' is not a valid class name" #~ msgstr "'%s' er et ugyldigt klassenavn" #~ msgid "--resource requires -o" #~ msgstr "--resource pkrver -o" #~ msgid "warning: already-compiled .class files ignored with -C" #~ msgstr "advarsel: allerede oversatte .class-filer ignoreret med -C" #~ msgid "cannot specify both -C and -o" #~ msgstr "-C og -o er indbyrdes uforenelige" #~ msgid "cannot create temporary file" #~ msgstr "kan ikke oprette midlertidig fil" #~ msgid "using both @FILE with multiple files not implemented" #~ msgstr "brug af @FILE med flere filer er ikke implementeret" #~ msgid "cannot specify `main' class when not linking" #~ msgstr "kan ikke angive 'main'-klassen nr der ikke sammenkdes" #~ msgid "can't do dependency tracking with input from stdin" #~ msgstr "kan ikke udfre afhngighedsflgning med inddata fra standard-ind" #~ msgid "couldn't determine target name for dependency tracking" #~ msgstr "kunne ikke bestemme mlnavn for afhngighedsflgning" #~ msgid "" #~ "unknown encoding: `%s'\n" #~ "This might mean that your locale's encoding is not supported\n" #~ "by your system's iconv(3) implementation. If you aren't trying\n" #~ "to use a particular encoding for your input file, try the\n" #~ "`--encoding=UTF-8' option" #~ msgstr "" #~ "ukendt kodning: '%s'\n" #~ "Dette betyder muligvis at kodningen fra dine regionaldata ikke\n" #~ "understttes af dit systems iconv(3)-implementering. Hvis du \n" #~ "ikke nske at bruge en bestemt kodning for dine inddatafiler, \n" #~ "s prv tilvalget '--encoding=UTF-8'" #~ msgid "can't mangle %s" #~ msgstr "kan ikke sammenstte %s" #~ msgid "internal error - invalid Utf8 name" #~ msgstr "intern fejl - ugyldigt UTF-8-navn" #~ msgid "Missing term" #~ msgstr "Manglende term" #~ msgid "';' expected" #~ msgstr "';' forventet" #~ msgid "Missing name" #~ msgstr "Manglende navn" #~ msgid "'*' expected" #~ msgstr "'*' forventet" #~ msgid "Class or interface declaration expected" #~ msgstr "Klasse- eller grnsefladeerklring forventet" #~ msgid "Missing class name" #~ msgstr "Manglende klassenavn" #~ msgid "'{' expected" #~ msgstr "'{' forventet" #~ msgid "Missing super class name" #~ msgstr "Manglende superklassenavn" #~ msgid "Missing interface name" #~ msgstr "Manglende grnsefladenavn" #~ msgid "Missing variable initializer" #~ msgstr "Manglende variabelstartvrdi" #~ msgid "Invalid declaration" #~ msgstr "Ugyldig erklring" #~ msgid "']' expected" #~ msgstr "']' forventet" #~ msgid "Unbalanced ']'" #~ msgstr "Uafbalanceret ']'" #~ msgid "Invalid method declaration, method name required" #~ msgstr "Ugyldig metodeerklring, metodenavn pkrvet" #~ msgid "Identifier expected" #~ msgstr "Kaldenavn forventet" #~ msgid "Invalid method declaration, return type required" #~ msgstr "Ugyldig metodeerklring, returtype pkrvet" #~ msgid "')' expected" #~ msgstr "')' forventet" #~ msgid "Missing formal parameter term" #~ msgstr "Manglende formel parameterterm" #~ msgid "Missing identifier" #~ msgstr "Manglende kaldenavn" #~ msgid "Missing class type term" #~ msgstr "Manglende klassetypeterm" #~ msgid "Invalid interface type" #~ msgstr "Ugyldig grnsefladetype" #~ msgid "':' expected" #~ msgstr "':' forventet" #~ msgid "Invalid expression statement" #~ msgstr "Ugyldig udtryksstning" #~ msgid "'(' expected" #~ msgstr "'(' forventet" #~ msgid "Missing term or ')'" #~ msgstr "Manglende term eller ')'" #~ msgid "Missing or invalid constant expression" #~ msgstr "Manglende eller ugyldigt konstant udtryk" #~ msgid "Missing term and ')' expected" #~ msgstr "Manglende term eller ')' forventet" #~ msgid "Invalid control expression" #~ msgstr "Ugyldigt kontroludtryk" #~ msgid "Invalid update expression" #~ msgstr "Ugyldigt opdateringsudtryk" #~ msgid "Invalid init statement" #~ msgstr "Ugyldig klargringsstning" #~ msgid "Missing term or ')' expected" #~ msgstr "Manglende term eller ')' forventet" #~ msgid "'class' or 'this' expected" #~ msgstr "'class' eller 'this' forventet" #~ msgid "'class' expected" #~ msgstr "'class' forventet" #~ msgid "')' or term expected" #~ msgstr "')' eller term forventet" #~ msgid "'[' expected" #~ msgstr "'[' forventet" #~ msgid "Field expected" #~ msgstr "Felt forventet" #~ msgid "Missing term and ']' expected" #~ msgstr "Manglende term og ']' forventet" #~ msgid "']' expected, invalid type expression" #~ msgstr "']' forventet, ugyldigt typeudtryk" #~ msgid "Invalid type expression" #~ msgstr "Ugyldigt typeudtryk" #~ msgid "Invalid reference type" #~ msgstr "Ugyldig referencetype" #~ msgid "Constructor invocation must be first thing in a constructor" #~ msgstr "Konstruktionsfunktionskald skal vre det frste i en konstruktionsfunktion" #~ msgid "Only constructors can invoke constructors" #~ msgstr "Kun konstruktionsfunktioner kan kalde konstruktionsfunktioner" #~ msgid ": `%s' JDK1.1(TM) feature" #~ msgstr ": '%s' JDK1.1(TM)-facilitet" #~ msgid "" #~ "%s.\n" #~ "%s" #~ msgstr "" #~ "%s.\n" #~ "%s" #~ msgid "malformed .zip archive in CLASSPATH: %s" #~ msgstr "ugyldigt udformet .zip-arkiv i CLASSPATH: %s" #~ msgid "Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archives" #~ msgstr "Kan ikke finde standardpakken '%s'. Kontrollr CLASSPATH-miljvariablen og tilgangen til arkiverne" #~ msgid "missing static field `%s'" #~ msgstr "manglende statisk felt '%s'" #~ msgid "not a static field `%s'" #~ msgstr "ikke et statisk felt '%s'" #~ msgid "No case for %s" #~ msgstr "Ingen case for %s" #~ msgid "unregistered operator %s" #~ msgstr "ikke-registreret operator %s" #~ msgid "junk at end of signature string" #~ msgstr "ragelse i slutningen signaturstreng" #~ msgid "bad pc in exception_table" #~ msgstr "ugyldig pc i exception_table" #~ msgid "exception handler inside code that is being protected" #~ msgstr "undtagelseshndtering inden i kode der bliver beskyttet" #~ msgid "unknown opcode %d@pc=%d during verification" #~ msgstr "ukendt kode %d@pc=%d under verifikation" #~ msgid "verification error at PC=%d" #~ msgstr "verifikationsfejl ved PC=%d" #~ msgid "Disable automatic array bounds checking" #~ msgstr "Deaktivr automatisk tabelgrnsekontrollering" #~ msgid "Disable assignability checks for stores into object arrays" #~ msgstr "Deaktivr tildelingstjek for lagringer i objekttabeller" #~ msgid "Assume native functions are implemented using JNI" #~ msgstr "Antag at indfdte funktioner er implementeret vha. JNI" #~ msgid "Replace system path" #~ msgstr "Erstat systemsti" #~ msgid "Set class path" #~ msgstr "Angiv klassesti" #~ msgid "Set class path (deprecated: use --classpath instead)" #~ msgstr "Angiv klassesti (forldet: benyt --classpath i stedet)" #~ msgid "Choose class whose main method should be used" #~ msgstr "Vlg klasse hvis main-metode skal bruges" #~ msgid "Choose input encoding (default comes from locale)" #~ msgstr "Vlg inddatakodning (standardvrdi kommer fra regionalindstillinger)" #~ msgid "Add directory to class path" #~ msgstr "Tilfj katalog til klassesti" #~ msgid "Directory where class files should be written" #~ msgstr "Katalog som klassefiler skrives i" #~ msgid "Warn if modifiers are specified when not necessary" #~ msgstr "Advar hvis modifikationer angives nr det ikke er ndvendigt" #~ msgid "Warn if deprecated empty statements are found" #~ msgstr "Advar hvis forldede tomme stninger bliver fundet" #~ msgid "Warn if .class files are out of date" #~ msgstr "Advar hvis .class-filer er forldede" #~ msgid "Always check for non gcj generated classes archives" #~ msgstr "Kontrollr altid for ikke-GCJ-genererede klassearkiver" #~ msgid "Never optimize static class initialization code" #~ msgstr "Optimr aldrig statiske klassers klargringskode" #~ msgid "Use offset tables for virtual method calls" #~ msgstr "Benyt afststabeller til virtuelle metodekald" #~ msgid "object does not conform to the `%s' protocol" #~ msgstr "objekt overholder ikke protokollen '%s'" #~ msgid "class `%s' does not implement the `%s' protocol" #~ msgstr "klassen '%s' implementerer ikke protokollen '%s'" #~ msgid "`%s' cannot be statically allocated" #~ msgstr "'%s' kan ikke allokeres statisk" #~ msgid "unexpected type for `id' (%s)" #~ msgstr "uventet type for 'id' (%s)" #~ msgid "undefined type `id', please import " #~ msgstr "typen 'id' er ikke defineret, importr venligst " #~ msgid "protocol `%s' has circular dependency" #~ msgstr "protokollen '%s' har cirkulr afhngighed" #~ msgid "cannot find protocol declaration for `%s'" #~ msgstr "kan ikke finde protokolerklringen af '%s'" #~ msgid "cannot find interface declaration for `%s'" #~ msgstr "kan ikke finde grnsefladeerklringen af '%s'" #~ msgid "cannot find reference tag for class `%s'" #~ msgstr "kan ikke finde referencemrket for klassen '%s'" #~ msgid "creating selector for non existant method %s" #~ msgstr "opretter vlger for ikke-eksisterende metode '%s'" #~ msgid "cannot find class `%s'" #~ msgstr "kan ikke finde klassen '%s'" #~ msgid "class `%s' already exists" #~ msgstr "klassen '%s' eksisterer allerede" #~ msgid "cannot find interface declaration for `%s', superclass of `%s'" #~ msgstr "kan ikke grnsefladeerklringen af '%s', superklasse til '%s'" #~ msgid "circular inheritance in interface declaration for `%s'" #~ msgstr "cirkulr nedarvning i interface-erklringen af '%s'" #~ msgid "inconsistent instance variable specification" #~ msgstr "inkonsistent instansvariabelangivelse" #~ msgid "can not use an object as parameter to a method\n" #~ msgstr "kan ikke benytte et objekt som parameter til en metode\n" #~ msgid "multiple declarations for method `%s'" #~ msgstr "mere end n erklring af metoden '%s'" #~ msgid "invalid receiver type `%s'" #~ msgstr "ugyldig modtagertype '%s'" #~ msgid "`%s' does not respond to `%s'" #~ msgstr "'%s' svarer ikke p '%s'" #~ msgid "no super class declared in interface for `%s'" #~ msgstr "ingen superklasse erklret i grnsefladen for '%s'" #~ msgid "cannot find class (factory) method" #~ msgstr "kan ikke finde klasse(fabriks)metode" #~ msgid "return type for `%s' defaults to id" #~ msgstr "returtypen for '%s' fr standardvrdien id" #~ msgid "method `%s' not implemented by protocol" #~ msgstr "metoden '%s' er ikke implementeret af protokollen" #~ msgid "return type defaults to id" #~ msgstr "returtype fr standardvrdien id" #~ msgid "cannot find method" #~ msgstr "kan ikke finde metode" #~ msgid "undeclared selector `%s'" #~ msgstr "uerklret vlger '%s'" #~ msgid "instance variable `%s' accessed in class method" #~ msgstr "instansvariablen '%s' tilget i klassemetode" #~ msgid "duplicate definition of class method `%s'" #~ msgstr "mere end n definition af klassemetoden '%s'" #~ msgid "duplicate declaration of class method `%s'" #~ msgstr "mere end n erklring af klassemetoden '%s'" #~ msgid "duplicate definition of instance method `%s'" #~ msgstr "mere end n definition af instansmetoden '%s'" #~ msgid "duplicate declaration of instance method `%s'" #~ msgstr "mere end n erklring af instansmetoden '%s'" #~ msgid "duplicate interface declaration for category `%s(%s)'" #~ msgstr "mere end n grnsefladeerklring af kategorien '%s(%s)'" #~ msgid "instance variable `%s' is declared private" #~ msgstr "instansvariablen '%s' er erklret privat" #~ msgid "instance variable `%s' is declared %s" #~ msgstr "instansvariablen '%s' er erklret '%s'" #~ msgid "static access to object of type `id'" #~ msgstr "statisk tilgang til objekt af typen 'id'" #~ msgid "incomplete implementation of class `%s'" #~ msgstr "ufuldstndig implementering af klassen '%s'" #~ msgid "incomplete implementation of category `%s'" #~ msgstr "ufuldstndig implementering af kategorien '%s'" #~ msgid "method definition for `%c%s' not found" #~ msgstr "metodedefinitionen for '%c%s' ikke fundet" #~ msgid "%s `%s' does not fully implement the `%s' protocol" #~ msgstr "%s '%s' implementerer ikke helt protokollen '%s'" #~ msgid "`@end' missing in implementation context" #~ msgstr "'@end' mangler i implementationskontekst" #~ msgid "reimplementation of class `%s'" #~ msgstr "omimplementering af klassen '%s'" #~ msgid "conflicting super class name `%s'" #~ msgstr "modstridende superklassenavn '%s'" #~ msgid "duplicate interface declaration for class `%s'" #~ msgstr "mere end n grnsefladeerklring af klassen '%s'" #~ msgid "duplicate declaration for protocol `%s'" #~ msgstr "mere end n erklring af protokollen '%s'" #~ msgid "[super ...] must appear in a method context" #~ msgstr "[super ...] skal optrde i en metodekontekst" #~ msgid "potential selector conflict for method `%s'" #~ msgstr "potentiel vlgerkonflikt for metoden '%s'" #~ msgid "`@end' must appear in an implementation context" #~ msgstr "'@end' skal optrde i en implementationskontekst" #~ msgid "method definition not in class context" #~ msgstr "metodedefinitionen optrder ikke i en klassekontekst" #~ msgid "Dump decls to a .decl file" #~ msgstr "Udskriv erklringer i en .decl-fil" #~ msgid "Generate code for GNU runtime environment" #~ msgstr "Generr kode til GNU-krselmilj" #~ msgid "Generate code for NeXT runtime environment" #~ msgstr "Generr kode til NeXT-krselmilj" #~ msgid "Warn if a selector has multiple methods" #~ msgstr "Advar hvis en vlger har flere metoder" #~ msgid "Do not warn if inherited methods are unimplemented" #~ msgstr "Advar ikk hvis nedarvede metoder ikke implementeres" #~ msgid "Generate C header of platform specific features" #~ msgstr "Generr C-inkluderingsfil med platformspecifikke faciliteter" #~ msgid "Specify the name of the class for constant strings" #~ msgstr "Angiv navnet p klassen til konstante strenge" #~ msgid "(debug) trace parsing process" #~ msgstr "(fejlretning) flg fortolkningsprocessen" #~ msgid "(debug) trace lexical analysis" #~ msgstr "(fejlretning) flg lexikalsk analyse" #~ msgid "-current_version only allowed with -dynamiclib" #~ msgstr "-current_version er kun tilladt med -dynamiclib" #~ msgid "-install_name only allowed with -dynamiclib" #~ msgstr "-install_name er kun tilladt med -dynamiclib" #~ msgid "-bundle not allowed with -dynamiclib" #~ msgstr "-bundle er ikke tilladt med -dynamiclib" #~ msgid "-bundle_loader not allowed with -dynamiclib" #~ msgstr "-bundle_loader er ikke tilladt med -dynamiclib" #~ msgid "-client_name not allowed with -dynamiclib" #~ msgstr "-client_name er ikke tilladt med -dynamiclib" #~ msgid "-force_cpusubtype_ALL not allowed with -dynamiclib" #~ msgstr "-force_cpusubtype_ALL er ikke tilladt med -dynamiclib" #~ msgid "-force_flat_namespace not allowed with -dynamiclib" #~ msgstr "-force_flat_namespace er ikke tilladt med -dynamiclib" #~ msgid "-keep_private_externs not allowed with -dynamiclib" #~ msgstr "-keep_private_externs er ikke tilladt med -dynamiclib" #~ msgid "-private_bundle not allowed with -dynamiclib" #~ msgstr "-private_bundle er ikke tilladt med -dynamiclib" #~ msgid "GNU C does not support -C without using -E" #~ msgstr "GNU C understtter ikke -C uden -E" #~ msgid "GNU C does not support -CC without using -E" #~ msgstr "GNU C understtter ikke -CC uden -E" #~ msgid "`-p' not supported; use `-pg' and gprof(1)" #~ msgstr "'-p' understttes ikke; brug '-pg' og gprof(1)" #~ msgid "may not use both -m32 and -m64" #~ msgstr "-m32 og -m64 er indbyrdes uforenelige" #~ msgid "The -shared option is not currently supported for VAX ELF." #~ msgstr "Tilvalget -shared understttes i jeblikket ikke for VAX ELF." #~ msgid "profiling not supported with -mg\n" #~ msgstr "profilgenerering understttes ikke med -mg\n" #~ msgid "-pipe is not supported" #~ msgstr "-pipe understttes ikke" #~ msgid "may not use both -EB and -EL" #~ msgstr "kan ikke bruge bde -EB og -EL" #~ msgid "-pg and -fomit-frame-pointer are incompatible" #~ msgstr "-pg og -fomit-frame-pointer er indbyrdes uforenelige" #~ msgid "mno-cygwin and mno-win32 are not compatible" #~ msgstr "-mno-cygwin og -mnowin32 er indbyrdes uforenelige" #~ msgid "shared and mdll are not compatible" #~ msgstr "shared og mdll er indbyrdes uforenelige" #~ msgid "-E required when input is from standard input" #~ msgstr "-E pkrvet nr inddata kommer fra standardind" #~ msgid "compilation of header file requested" #~ msgstr "oversttelse af inkluderingsfil udbedt" #~ msgid " conflicting code gen style switches are used" #~ msgstr " konfliktende kodegenereringstilvalg er benyttet" #~ msgid "-pg or -p and -fomit-frame-pointer are incompatible" #~ msgstr "-pg eller -p og -fomit-frame-pointer er indbyrdes uforenelige" #~ msgid "choose either big or little endian, not both" #~ msgstr "vlg enten stor- eller lilleendet, ikke begge" #~ msgid "choose either m340 or m210 not both" #~ msgstr "vlg enten m340 eller m210, ikke begge" #~ msgid "the m210 does not have little endian support" #~ msgstr "m210 har ikke understttelse for lilleendet" #~ msgid "-mapcs-26 and -mapcs-32 may not be used together" #~ msgstr "-mapcs-26 og -mapcs-32 kan ikke bruges p samme tid" #~ msgid "-msoft-float and -mhard_float may not be used together" #~ msgstr "-msoft-float og -mhard_float kan ikke bruges p samme tid" #~ msgid "-mbig-endian and -mlittle-endian may not be used together" #~ msgstr "-mbig-endian og -mlittle-endian kan ikke bruges p samme tid" #~ msgid "-mhard-float not supported" #~ msgstr "-mhard-float understttes ikke" #~ msgid "-msingle-float and -msoft-float can not both be specified" #~ msgstr "-msingle-float og -msoft-float er indbyrdes uforenelige" #~ msgid "-c or -S required for Ada" #~ msgstr "-c eller -S krves til Ada" #~ msgid "-fjni and -femit-class-files are incompatible" #~ msgstr "-fjni og -femit-class-files er indbyrdes uforenelige" #~ msgid "-fjni and -femit-class-file are incompatible" #~ msgstr "-fjni og -femit-class-file er indbyrdes uforenelige" #~ msgid "-femit-class-file should used along with -fsyntax-only" #~ msgstr "-femit-class-file skal bruges sammen med -fsyntax-only" #~ msgid "-static not valid with -mcoff" #~ msgstr "-static er ikke gyldig sammen med -mcoff" #~ msgid "-shared not valid with -mcoff" #~ msgstr "-shared er ikke gyldig sammen med -mcoff" #~ msgid "-symbolic not valid with -mcoff" #~ msgstr "-symbolic er ikke gyldig sammen med -mcoff" #~ msgid "-fpic is not valid with -mcoff" #~ msgstr "-fpic er ikke gyldig sammen med -mcoff" #~ msgid "-fPIC is not valid with -mcoff" #~ msgstr "-fPIC er ikke gyldig sammen med -mcoff" #~ msgid "-fpic not valid with -mcoff" #~ msgstr "-fpic er ikke gyldig sammen med -mcoff" #~ msgid "-fPIC not valid with -mcoff" #~ msgstr "-fPIC er ikke gyldig sammen med -mcoff" #~ msgid "__alignof__ applied to an incomplete type" #~ msgstr "__alignof__ benyttet p en ufuldstndig type" #~ msgid "-traditional is deprecated and may be removed" #~ msgstr "-traditional er forldet og kan blive fjernet" #~ msgid "unknown C standard `%s'" #~ msgstr "ukendt C-standard '%s'" #~ msgid "type of external `%s' is not global" #~ msgstr "typen af den eksterne '%s' er ikke global" #~ msgid "typedef `%s' is initialized" #~ msgstr "typedef '%s' bliver tildelt en startvrdi" #~ msgid "unnamed fields of type other than struct or union are not allowed" #~ msgstr "unavngivne felter af andre typer end struct eller union er ikke tilladt" #~ msgid "null format string" #~ msgstr "formateringsstreng er nul" #~ msgid "ignoring #pragma %s" #~ msgstr "ignorerer #pragma: %s" #~ msgid "both 'f' and 'l' suffixes on floating constant" #~ msgstr "bde 'f'- og 'l'-endelser i kommatalskonstant" #~ msgid "floating point number exceeds range of '%s'" #~ msgstr "kommatal overskrider intervallet for '%s" #~ msgid "decimal point in exponent - impossible!" #~ msgstr "decimalkomma i eksponent - umuligt!" #~ msgid "underscore in number" #~ msgstr "understreg i tal" #~ msgid "numeric constant with no digits" #~ msgstr "talkonstant uden cifre" #~ msgid "numeric constant contains digits beyond the radix" #~ msgstr "talkonstant indeholder cifre der ligger ud over grundtallet" #~ msgid "floating constant may not be in radix 16" #~ msgstr "kommatalskonstant m ikke skrives med grundtal 16" #~ msgid "more than one 'f' suffix on floating constant" #~ msgstr "mere end n 'f'-endelse i kommatalskonstant" #~ msgid "traditional C rejects the 'f' suffix" #~ msgstr "traditionel C tillader ikke endelsen 'f'" #~ msgid "more than one 'l' suffix on floating constant" #~ msgstr "mere end n 'l'-endelse i kommatalskonstant" #~ msgid "traditional C rejects the 'l' suffix" #~ msgstr "traditionel C tillader ikke endelsen 'l'" #~ msgid "more than one 'i' or 'j' suffix on floating constant" #~ msgstr "mere end n 'i'- eller 'j'-endelse i kommatalskonstant" #~ msgid "ISO C forbids imaginary numeric constants" #~ msgstr "ISO C forbyder imaginre talkonstanter" #~ msgid "floating constant out of range" #~ msgstr "kommatalskonstant er uden for det gyldige interval" #~ msgid "floating point number exceeds range of 'double'" #~ msgstr "kommatal overskrider intervallet for 'double'" #~ msgid "two 'u' suffixes on integer constant" #~ msgstr "to 'u'-endelser i heltalskonstant" #~ msgid "traditional C rejects the 'u' suffix" #~ msgstr "traditionel C tillader ikke 'u'-endelsen" #~ msgid "three 'l' suffixes on integer constant" #~ msgstr "tre 'l'-endelser i heltalskonstant" #~ msgid "'lul' is not a valid integer suffix" #~ msgstr "'lul' er ikke en gyldig heltalsendelse" #~ msgid "'Ll' and 'lL' are not valid integer suffixes" #~ msgstr "'Ll' og 'lL' er ikke gyldige heltalsendelser" #~ msgid "more than one 'i' or 'j' suffix on integer constant" #~ msgstr "mere end n 'i'- eller 'j'-endelse i heltalskonstant" #~ msgid "invalid suffix on integer constant" #~ msgstr "ugyldig endelse i heltalskonstant" #~ msgid "integer constant is too large for this configuration of the compiler - truncated to %d bits" #~ msgstr "heltalskonstant er for stor til denne konfiguration af overstteren - afkortet til %d bit" #~ msgid "width of integer constant changes with -traditional" #~ msgstr "bredden af heltalskonstant skifter med -traditional" #~ msgid "integer constant is unsigned in ISO C, signed with -traditional" #~ msgstr "heltalskonstant er unsigned i ISO C, signed med -traditional" #~ msgid "width of integer constant may change on other systems with -traditional" #~ msgstr "bredden af heltalskonstant kan skifte p andre systemer med -traditional" #~ msgid "integer constant larger than the maximum value of %s" #~ msgstr "heltalskonstant er strre end den maksimale vrdi for %s" #~ msgid "an unsigned long long int" #~ msgstr "en unsigned long long int" #~ msgid "a long long int" #~ msgstr "en long long int" #~ msgid "an unsigned long int" #~ msgstr "en unsigned long int" #~ msgid "decimal constant is so large that it is unsigned" #~ msgstr "decimalkonstant er s stor at den er unsigned" #~ msgid "complex integer constant is too wide for 'complex int'" #~ msgstr "kompleks heltalskonstant er for bred til 'complex int'" #~ msgid "integer constant is larger than the maximum value for its type" #~ msgstr "heltalskonstant er strre end den maksimale vrdi for dens type" #~ msgid "missing white space after number '%.*s'" #~ msgstr "manglende mellemrum efter tallet '%.*s'" #~ msgid "ISO C does not permit use of `varargs.h'" #~ msgstr "ISO C tillader ikke brug af 'varargs.h'" #~ msgid "storage class specifier in array declarator" #~ msgstr "lagringsklasseanvisning i tabelerklring" #~ msgid "sizeof applied to a function type" #~ msgstr "sizeof benyttet p en funktionstype" #~ msgid "sizeof applied to a void type" #~ msgstr "sizeof benyttet p en void-type" #~ msgid "sizeof applied to an incomplete type" #~ msgstr "sizeof benyttet p en ufuldstndig type" #~ msgid "variable offset is passed partially in stack and in reg" #~ msgstr "variabelafst bliver viderebragt delvis i stak og i register" #~ msgid "variable size is passed partially in stack and in reg" #~ msgstr "variabelstrrelse bliver viderebragt delvis i stak og i register" #~ msgid "execvp %s" #~ msgstr "execvp %s" #~ msgid "floating point numbers are not valid in #if" #~ msgstr "kommatal er ikke tilladt i #if" #~ msgid "traditional C rejects the `U' suffix" #~ msgstr "traditionel C forbyder 'U'-endelsen" #~ msgid "too many 'l' suffixes in integer constant" #~ msgstr "for mange 'l'-endelser i heltalskonstant" #~ msgid "integer constant contains digits beyond the radix" #~ msgstr "heltalskonstanten indeholder cifre der er strre end grundtallet" #~ msgid "integer constant out of range" #~ msgstr "heltalskonstanten er uden for det gyldige interval" #~ msgid "string constants are not valid in #if" #~ msgstr "strengkonstanter er ikke tilladt i #if" #~ msgid "missing binary operator" #~ msgstr "manglende binr operator" #~ msgid "changing search order for system directory \"%s\"" #~ msgstr "skifter sgeorden for systemkataloget \"%s\"" #~ msgid " as it is the same as non-system directory \"%s\"" #~ msgstr " da det er det samme som ikke-system-kataloget \"%s\"" #~ msgid " as it has already been specified as a non-system directory" #~ msgstr " da det allerede er blevet angivet som et ikke-system-katalog" #~ msgid "I/O error on output" #~ msgstr "I/O-fejl p uddata" #~ msgid "argument missing after %s" #~ msgstr "en parameter mangler efter %s" #~ msgid "number missing after %s" #~ msgstr "et tal mangler efter %s" #~ msgid "target missing after %s" #~ msgstr "et ml mangler efter %s" #~ msgid "GNU CPP version %s (cpplib)" #~ msgstr "GNU CPP version %s (cpplib)" #~ msgid "" #~ " -pedantic Issue all warnings demanded by strict ISO C\n" #~ " -pedantic-errors Issue -pedantic warnings as errors instead\n" #~ " -trigraphs Support ISO C trigraphs\n" #~ " -lang-c Assume that the input sources are in C\n" #~ " -lang-c89 Assume that the input sources are in C89\n" #~ msgstr "" #~ " -pedantic Fremkom med alle advarsler pkrvet for nje ISO C\n" #~ " -pedantic-errors Behandl '-pedantic'-advarsler som fejl\n" #~ " -traditional Iagttag opfrsel som en K&R-prprocessor\n" #~ " -trigraphs Understt ANSI C-trigrafer\n" #~ " -lang-c Antag at inddata er C\n" #~ " -lang-c89 Antag at inddata er C89\n" #~ msgid "" #~ " -lang-c++ Assume that the input sources are in C++\n" #~ " -lang-objc Assume that the input sources are in ObjectiveC\n" #~ " -lang-objc++ Assume that the input sources are in ObjectiveC++\n" #~ " -lang-asm Assume that the input sources are in assembler\n" #~ msgstr "" #~ " -lang-c++ Antag at inddata er C++\n" #~ " -lang-cobjc Antag at inddata er Objective C\n" #~ " -lang-cobjc++ Antag at inddata er Objective C++\n" #~ " -lang-asm Antag at inddata er maskinkode\n" #~ msgid "possible start of unterminated string literal" #~ msgstr "muligvis begyndelsen af uafsluttet strengkonstant" #~ msgid "multi-line string literals are deprecated" #~ msgstr "flerlinjers strengkonstanter er forldede" #~ msgid "the meaning of '\\%c' varies with -traditional" #~ msgstr "betydningen af '\\%c' skifter med -traditional" #~ msgid "the meaning of '\\a' varies with -traditional" #~ msgstr "betydningen af '\\a' skifter med -traditional" #~ msgid "the meaning of '\\x' varies with -traditional" #~ msgstr "betydningen af '\\x' skifter med -traditional" #~ msgid "\"%s\" cannot be used as a macro name" #~ msgstr "\"%s\" kan ikke bruges som et makronavn" #~ msgid "directives may not be used inside a macro argument" #~ msgstr "direktiver m ikke optrde inden i en makroparameter" #~ msgid "invalid option %s" #~ msgstr "ugyldigt tilvalg %s" #~ msgid "%s:%d: warning: " #~ msgstr "%s:%d: advarsel: " #~ msgid "%s: warning: " #~ msgstr "%s: advarsel: " #~ msgid "sorry, not implemented: " #~ msgstr "desvrre, ikke implementeret: " #~ msgid "Internal compiler error in %s, at %s:%d" #~ msgstr "Intern overstterfejl i %s ved %s:%d." #~ msgid "Copyright (C) 2002 Free Software Foundation, Inc.\n" #~ msgstr "Copyright 2002 Free Software Foundation, Inc.\n" #~ msgid "argument to `-b' is missing" #~ msgstr "der mangler en parameter til '-b'" #~ msgid "argument to `-V' is missing" #~ msgstr "der mangler en parameter til '-V'" #~ msgid "invalid version number format" #~ msgstr "ugyldigt versionsnummerformat" #~ msgid ".da file contents exhausted too early\n" #~ msgstr "indholdet af .da-filen er udtmt for tidligt\n" #~ msgid ".da file contents not exhausted\n" #~ msgstr "indholdet af .da-filen ikke udtmt\n" #~ msgid "%6.2f%% of %d source lines executed in function %s\n" #~ msgstr "%6.2f%% af %d kildekodelinjer udfrt i funktionen %s\n" #~ msgid "No executable source lines in function %s\n" #~ msgstr "Ingen krbare kildelinjer i funktionen %s\n" #~ msgid "%6.2f%% of %d branches executed in function %s\n" #~ msgstr "%6.2f%% af %d forgreninger udfrt i funktionen %s\n" #~ msgid "%6.2f%% of %d branches taken at least once in function %s\n" #~ msgstr "%6.2f%% af %d forgreninger valgt mindst n gang i funktionen %s\n" #~ msgid "No branches in function %s\n" #~ msgstr "Ingen forgreninger i funktionen %s\n" #~ msgid "%6.2f%% of %d calls executed in function %s\n" #~ msgstr "%6.2f%% af %d kald udfrt i funktionen %s\n" #~ msgid "No calls in function %s\n" #~ msgstr "Ingen kald i funktionen %s\n" #~ msgid "%6.2f%% of %d source lines executed in file %s\n" #~ msgstr "%6.2f%% af %d kildekodelinjer udfrt i filen %s\n" #~ msgid "%6.2f%% of %d branches executed in file %s\n" #~ msgstr "%6.2f%% af %d forgreninger udfrt i filen %s\n" #~ msgid "%6.2f%% of %d branches taken at least once in file %s\n" #~ msgstr "%6.2f%% af %d forgreninger valgt mindst n gang i filen %s\n" #~ msgid "%6.2f%% of %d calls executed in file %s\n" #~ msgstr "%6.2f%% af %d kald udfrt i filen %s\n" #~ msgid "call %d returns = %s\n" #~ msgstr "kald %d returnerer = %s\n" #~ msgid "call %d returns = %s%%\n" #~ msgstr "kald %d returnerer = %s%%\n" #~ msgid "branch %d taken = %s\n" #~ msgstr "forgrening %d valgt = %s\n" #~ msgid "branch %d taken = %s%%\n" #~ msgstr "forgrening %d valgt = %s%%\n" #~ msgid ".da file contents exhausted too early" #~ msgstr "indholdet af .da-filen er udtmt for tidligt" #~ msgid ".da file contents not exhausted" #~ msgstr "indholdet af .da-filen ikke udtmt" #~ msgid "conversion from NaN to int" #~ msgstr "konvertering fra NaN til int" #~ msgid "floating point overflow" #~ msgstr "kommatalsoverlb" #~ msgid "overflow on truncation to integer" #~ msgstr "overlb ved afkortelse til heltal" #~ msgid "overflow on truncation to unsigned integer" #~ msgstr "overlb ved afkortelse til heltal uden fortegn" #~ msgid "%s: argument domain error" #~ msgstr "%s: parameterdomnefejl" #~ msgid "%s: function singularity" #~ msgstr "%s: funktionssingularitet" #~ msgid "%s: overflow range error" #~ msgstr "%s: overlbsintervalfejl" #~ msgid "%s: underflow range error" #~ msgstr "%s: underlbsintervalfejl" #~ msgid "%s: total loss of precision" #~ msgstr "%s: samlet tab af prcision" #~ msgid "%s: partial loss of precision" #~ msgstr "%s: delvist tab af prcision" #~ msgid "%s: NaN - producing operation" #~ msgstr "%s: NaN - producerer operation" #~ msgid "Pretend that host and target use the same FP format" #~ msgstr "Lad som om vrten og mlet bruger samme kommatalsformat" #~ msgid "Compile pointers as triples: value, base & end" #~ msgstr "Overst henvisningsvariabler som tretupler: vrdi, basis og slut" #~ msgid "Do not promote floats to double if using -traditional" #~ msgstr "Forfrem ikke float til double hvis -traditional benyttes" #~ msgid "Attempt to support traditional K&R style C" #~ msgstr "Forsg at understtte traditionel K&R C" #~ msgid "internal error: %s" #~ msgstr "intern fejl: %s" #~ msgid "crossjump disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" #~ msgstr "krydsspring deaktiveret: %d > 1000 basisblokke og %d >= 20 kanter/basisblok" #~ msgid " -a Enable block profiling \n" #~ msgstr " -a Aktivr blokprofilering\n" #~ msgid " -ax Enable jump profiling \n" #~ msgstr " -ax Aktivr springprofilering\n" #~ msgid "profiling does not work without a frame pointer" #~ msgstr "profilering virker ikke uden en rammehenvisning" #~ msgid "floating point numbers not allowed in #if expressions" #~ msgstr "kommatal er ikke tilladt i #if-udtryk" #~ msgid "invalid number in #if expression" #~ msgstr "ugyldigt tal i #if-udtryk" #~ msgid "invalid character constant in #if" #~ msgstr "ugyldig tegnkonstant i #if" #~ msgid "double quoted strings not allowed in #if expressions" #~ msgstr "strenge med dobbelte anfrselstegn er ikke tilladte i #if-udtryk" #~ msgid "invalid token in expression" #~ msgstr "ugyldigt symbol udtryk" #~ msgid "octal character constant does not fit in a byte" #~ msgstr "oktal tegnkonstant kan ikke vre i en byte" #~ msgid "hex character constant does not fit in a byte" #~ msgstr "hexadecimal tegnkonstant kan ikke vre i en byte" #~ msgid "empty #if expression" #~ msgstr "tomt #if-udtryk" #~ msgid "Junk after end of expression." #~ msgstr "ragelse efter slutningen af udtryk" #~ msgid "macro or #include recursion too deep" #~ msgstr "makro eller #include-rekursion er for dyb" #~ msgid "usage: %s [switches] input output" #~ msgstr "brug: %s [tilvalg] inddata uddata" #~ msgid "-traditional is not supported in C++" #~ msgstr "-traditional understttes ikke i C++" #~ msgid "-traditional and -ansi are mutually exclusive" #~ msgstr "-traditional og -ansi er indbyrdes uforenelige" #~ msgid "filename missing after -i option" #~ msgstr "et filnavn mangler efter tilvalget -i" #~ msgid "filename missing after -o option" #~ msgstr "et filnavn mangler efter tilvalget -o" #~ msgid "target missing after %s option" #~ msgstr "et ml mangler efter tilvalget %s" #~ msgid "filename missing after %s option" #~ msgstr "et filnavn mangler efter tilvalget %s" #~ msgid "macro name missing after -%c option" #~ msgstr "et makronavn mangler efter tilvalget -%c" #~ msgid "-pedantic and -traditional are mutually exclusive" #~ msgstr "-pedantic og -traditional er indbyrdes uforenelige" #~ msgid "-trigraphs and -traditional are mutually exclusive" #~ msgstr "-trigraphs og -traditional er indbyrdes uforenelige" #~ msgid "directory name missing after -I option" #~ msgstr "et katalognavn mangler efter '-I'-tilvalg" #~ msgid "`/*' within comment" #~ msgstr "'/*' i en kommentar" #~ msgid "unterminated #%s conditional" #~ msgstr "uafsluttet #%s-betingelse" #~ msgid "not in any file?!" #~ msgstr "ikke i nogen fil?!" #~ msgid "`defined' must be followed by ident or (ident)" #~ msgstr "'defined' skal efterflges af et kaldenavn eller (kaldenavn)" #~ msgid "cccp error: invalid special hash type" #~ msgstr "cccp-fejl: ugyldig speciel hash-type" #~ msgid "#include expects \"fname\" or " #~ msgstr "#include forventer \"filnavn\" eller " #~ msgid "no include path in which to find %.*s" #~ msgstr "der er ingen inkluderingssti at finde %.*s i" #~ msgid "invalid macro name" #~ msgstr "ugyldigt makronavn" #~ msgid "invalid macro name `%s'" #~ msgstr "ugyldigt makronavn '%s'" #~ msgid "parameter name starts with a digit in #define" #~ msgstr "parameternavn begynder med et ciffer i #define" #~ msgid "badly punctuated parameter list in #define" #~ msgstr "ugyldigt punktueret parameterliste i #define" #~ msgid "unterminated parameter list in #define" #~ msgstr "uafsluttet parameterliste i #define" #~ msgid "\"%.*s\" redefined" #~ msgstr "\"%.*s\" omdefineret" #~ msgid "# operator should be followed by a macro argument name" #~ msgstr "operatoren # skal efterflges af et makroparameternavn" #~ msgid "invalid format #line command" #~ msgstr "ugyldigt formateret #line-kommando" #~ msgid "undefining `defined'" #~ msgstr "glemmer definitionen af 'defined'" #~ msgid "undefining `%s'" #~ msgstr "glemmer definitionen af '%s'" #~ msgid "extra text at end of directive" #~ msgstr "ekstra tekst i slutningen af direktiv" #~ msgid "#error%.*s" #~ msgstr "#error%.*s" #~ msgid "#warning%.*s" #~ msgstr "#warning%.*s" #~ msgid "#elif not within a conditional" #~ msgstr "#elif er ikke inde i betingelsesstning" #~ msgid "#%s not within a conditional" #~ msgstr "#%s ikke inde i betingelsesstning" #~ msgid "#else or #elif after #else" #~ msgstr "#else eller #elif efter #else" #~ msgid "#else not within a conditional" #~ msgstr "#else er ikke inde i betingelsesstning" #~ msgid "unbalanced #endif" #~ msgstr "uafbalanceret #endif" #~ msgid "unterminated string or character constant" #~ msgstr "uafsluttet streng- eller tegnkonstant" #~ msgid "arguments given to macro `%s'" #~ msgstr "parametre givet til makroen '%s'" #~ msgid "no args to macro `%s'" #~ msgstr "ingen parametre givet til makroen '%s'" #~ msgid "only 1 arg to macro `%s'" #~ msgstr "kun 1 parameter givet til makroen '%s'" #~ msgid "only %d args to macro `%s'" #~ msgstr "kun %d parametre givet til makroen '%s'" #~ msgid "too many (%d) args to macro `%s'" #~ msgstr "for mange (%d) parametre givet til makroen '%s'" #~ msgid "" #~ "internal error in %s, at tradcpp.c:%d\n" #~ "Please submit a full bug report.\n" #~ "See %s for instructions." #~ msgstr "" #~ "intern fejl i '%s', ved tradcpp:%d\n" #~ "Send venligst en komplet fejlrapport.\n" #~ "Se %s for instruktioner." #~ msgid "optimization turned on" #~ msgstr "optimeringer slet til" #~ msgid "optimization turned off" #~ msgstr "optimeringer slet fra" #~ msgid "optimization level restored" #~ msgstr "optimeringsniveau gendannet" #~ msgid "Use VAX-C alignment" #~ msgstr "Brug VAX-C-justering" #~ msgid "invalid %%V value" #~ msgstr "ugyldig %%V-vrdi" #~ msgid "Generate code assuming DW bit is set" #~ msgstr "Generr kode der antager at DW-bitten er sat" #~ msgid "Generate code assuming DW bit is not set" #~ msgstr "Generr kode der antager at DW-bitten ikke er sat" #~ msgid "Generate code using byte writes" #~ msgstr "Generr kode der bruger byte-skrivninger" #~ msgid "Do not generate byte writes" #~ msgstr "Generr ikke byte-skrivninger" #~ msgid "Use small memory model" #~ msgstr "Brug en lille hukommelsesmodel" #~ msgid "Use normal memory model" #~ msgstr "Brug en normal hukommelsesmodel" #~ msgid "Use large memory model" #~ msgstr "Brug en stor hukommelsesmodel" #~ msgid "Generate 29050 code" #~ msgstr "Generr 29050-kode" #~ msgid "Generate 29000 code" #~ msgstr "Generr 29000-kode" #~ msgid "Use kernel global registers" #~ msgstr "Bruge kerneglobale registre" #~ msgid "Use user global registers" #~ msgstr "Bruge brugerglobale registre" #~ msgid "Emit stack checking code" #~ msgstr "Generr stakkontrolleringskode" #~ msgid "Do not emit stack checking code" #~ msgstr "Generr ikke stakkontrolleringskode" #~ msgid "Work around storem hardware bug" #~ msgstr "Arbejd rundt om storem-hardwarefejl" #~ msgid "Do not work around storem hardware bug" #~ msgstr "Arbejd ikke rundt om storem-hardwarefejl" #~ msgid "Store locals in argument registers" #~ msgstr "Gem lokale variable i parameterregistre" #~ msgid "Do not store locals in arg registers" #~ msgstr "Gem ikke lokale variable i parameterregistre" #~ msgid "Do not generate multm instructions" #~ msgstr "Generr ikke multm-instruktioner" #~ msgid "Do symbol renaming for BSD" #~ msgstr "Foretag symbolomdbning for BSD" #~ msgid "Do symbol renaming for X/OPEN" #~ msgstr "Foretag symbolomdbning for X/OPEN" #~ msgid "Don't do symbol renaming" #~ msgstr "Foretag ikke symbolomdbning" #~ msgid "MCU `%s' not supported" #~ msgstr "MCU '%s' ikke understttet" #~ msgid "Generate code for the C400" #~ msgstr "Generr kode til en C400" #~ msgid "Generate code for the C300" #~ msgstr "Generr kode til en C300" #~ msgid "Generate code for c1" #~ msgstr "Generr kode til en c1" #~ msgid "Generate code for c2" #~ msgstr "Generr kode til en c2" #~ msgid "Generate code for c32" #~ msgstr "Generr kode til en c32" #~ msgid "Generate code for c34" #~ msgstr "Generr kode til en c34" #~ msgid "Use standard calling sequence, with arg count word" #~ msgstr "Benyt standardkaldesekvens, med parameterantalsord" #~ msgid "Place arg count in a nop instruction (faster than push)" #~ msgstr "Anbring parameterantal i en nop-instruktion (hurtigere end push)" #~ msgid "Don't push arg count, depend on symbol table" #~ msgstr "Videresend ikke parameterantal, afhng af symboltabel" #~ msgid "Use data cache for volatile mem refs (default)" #~ msgstr "Benyt datamellemlager for volatile hukommelsesreferencer (standard)" #~ msgid "Don't use data cache for volatile mem refs" #~ msgstr "Benyt ikke datamellemlager for volatile hukommelsesreferencer" #~ msgid "Bypass data cache for volatile mem refs" #~ msgstr "Forbig datamellemlager for volatile hukommelsesreferencer" #~ msgid "Use 64-bit longs" #~ msgstr "Benyt 64 bit-long" #~ msgid "Use cc- and libc-compatible 32-bit longs" #~ msgstr "Benyt cc- og libc-kompatibel 32 bit-long" #~ msgid "inline float constants not supported on this host" #~ msgstr "integrerede kommatalskonstanter er ikke understttede p denne vrt" #~ msgid "Generate code the unix assembler can handle" #~ msgstr "Generr kode som Unix-maskinkodeoverstteren kan hndtere" #~ msgid "Generate code an embedded assembler can handle" #~ msgstr "Generr kode som en indlejret maskinkodeoverstter kan hndtere" #~ msgid "Retain standard MXDB information" #~ msgstr "Bevar standard-MXDB-info" #~ msgid "Retain legend information" #~ msgstr "Bevar indholdsinfo" #~ msgid "Generate external legend information" #~ msgstr "Generr ekstern indholdsinfo" #~ msgid "Emit identifying info in .s file" #~ msgstr "Udsend identificerende info i .s-fil" #~ msgid "Warn when a function arg is a structure" #~ msgstr "Advar nr en funktionsparameter er en struktur" #~ msgid "argument is a structure" #~ msgstr "parameter er en struktur" #~ msgid "half-pic init called on systems that don't support it" #~ msgstr "half-PIC-klargring kaldt p systemer der ikke understtter det" #~ msgid "Profiling uses mcount" #~ msgstr "Profilering benytter mcount" #~ msgid "Emit half-PIC code" #~ msgstr "Udsend half-PIC-kode" #~ msgid "Emit ELF object code" #~ msgstr "Udsend ELF-objektkode" #~ msgid "Emit ROSE object code" #~ msgstr "Udsend ROSE-objektkode" #~ msgid "Symbols have a leading underscore" #~ msgstr "Symboler har en indledende understreg" #~ msgid "Align to >word boundaries" #~ msgstr "Justr til >word-grnserne" #~ msgid "Use mcount for profiling" #~ msgstr "Benyt mcount til profilering" #~ msgid "Use mcount_ptr for profiling" #~ msgstr "Benyt mcount_ptr til profilering" #~ msgid "Generate code which uses the FPU" #~ msgstr "Generr kode som bruger FPU'en" #~ msgid "Do not generate code which uses the FPU" #~ msgstr "Generr ikke kode som bruger FPU'en" #~ msgid "the -mlong-double-64 option does not work yet" #~ msgstr "tilvalget -mlong-double-64 virker ikke endnu" #~ msgid "The -march option is incompatible to -mipsN and therefore ignored." #~ msgstr "Tilvalget -march er uforeneligt med -mipsN og derfor ignoreret." #~ msgid "-mips%d not supported" #~ msgstr "-mips%d er ikke understttet" #~ msgid "-mabi=%s does not support -mips%d" #~ msgstr "-mabi=%s understtter ikke -mips%d" #~ msgid "this target does not support the -mabi switch" #~ msgstr "denne mlarkitektur understtter ikke tilvalget -mabi" #~ msgid "bad value (%s) for -mtune= switch" #~ msgstr "ugyldig vrdi (%s) til tilvalget -mcpu=" #~ msgid "-mips%d does not support 64 bit fp registers" #~ msgstr "-mips%d understtter ikke 64-bit kommatalsregistre" #~ msgid "-mips%d does not support 64 bit gp registers" #~ msgstr "-mips%d understtter ikke 64-bit almene registre" #~ msgid "Use OSF PIC" #~ msgstr "Benyt OSF PIC" #~ msgid "Don't use OSF PIC" #~ msgstr "Benyt ikke OSF PIC" #~ msgid "Optimize for 3900" #~ msgstr "Optimr for 3900" #~ msgid "Optimize for 4650" #~ msgstr "Optimr for 4650" #~ msgid "stack frame too big" #~ msgstr "stakramme for stor" #~ msgid "neither varargs or stdarg in mmix_setup_incoming_varargs" #~ msgstr "hverken variable parametre eller standardparametre mmix_setup_incoming_varargs" #~ msgid "oops, not debugged; fixing up value:" #~ msgstr "ups, ikke fejlanalyseret; retter vrdi:" #~ msgid "Generate little endian data" #~ msgstr "Generr lilleendet data" #~ msgid "Generate big endian data" #~ msgstr "Generr storendet data" #~ msgid "Turn on maintainer testing code" #~ msgstr "Aktivr vedligeholdertestkode" #~ msgid "Enable Transmeta picoJava extensions" #~ msgstr "Aktivr Transmeta picoJava-udvidelser" #~ msgid "Disable Transmeta picoJava extensions" #~ msgstr "Deaktivr Transmeta picoJava-udvidelser" #~ msgid "Disable reorganization pass" #~ msgstr "Deaktivr omorganiseringsfase" #~ msgid "-f%s ignored (all code is position independent)" #~ msgstr "-f%s ignoreret (al kode er positionsuafhngigt)" #~ msgid "-ffunction-sections disabled on AIX when debugging" #~ msgstr "-ffunction-sections deaktiveret p AIX ved fejlanalysering" #~ msgid "-fdata-sections not supported on AIX" #~ msgstr "-fdata-sections er ikke understttet p AIX" #~ msgid "argument 3 of `%s' must be a 2-bit literal" #~ msgstr "parameter til '%s' skal vre en 2 bit-konstant" #~ msgid "%%S computed all 1's mask" #~ msgstr "%%S beregnede alle 1'eres maske" #~ msgid "%%S computed all 0's mask" #~ msgstr "%%S beregnede alle 0's maske" #~ msgid "no viable candidates" #~ msgstr "ingen mulige kandidater" #~ msgid "cannot pass objects of non-POD type `%#T' through `...'" #~ msgstr "kan ikke videregive objekter af en ikke-POD type '%#T' gennem '...'" #~ msgid "`%D' has already been declared in `%T'" #~ msgstr "'%D' er allerede blevet erklret i '%T'" #~ msgid "typedef `%D' is initialized" #~ msgstr "typedef '%D' bliver tildelt en startvrdi" #~ msgid "`%D' as declarator" #~ msgstr "'%D' som erklrer" #~ msgid "size of member `%D' is not constant" #~ msgstr "strrelsen af medlemmet '%D' er ikke konstant" #~ msgid "cannot declare %s to references" #~ msgstr "kan ikke erklre %s til referencer" #~ msgid "invalid type: `void &'" #~ msgstr "ugyldig type: 'void &'" #~ msgid "typedef declaration includes an initializer" #~ msgstr "typedef-erklringen indeholder en startvrdi" #~ msgid "-fname-mangling-version is no longer supported" #~ msgstr "-fname-mangling-version understttes ikke lngere" #~ msgid "candidate%s: %+#D" #~ msgstr "candidate%s: %+#D" #~ msgid " %#D" #~ msgstr " %#D" #~ msgid "member initializers for `%#D'" #~ msgstr "medlemsstartvrdier for '%#D'" #~ msgid " will be re-ordered to match declaration order" #~ msgstr " vil blive omordnet for at passe til erklringsordenen" #~ msgid "multiple initializations given for member `%D'" #~ msgstr "flere startvrdier angivet for medlemmet '%D'" #~ msgid "base initializers for `%#T'" #~ msgstr "stamklasseklargring for '%#T'" #~ msgid " will be re-ordered to match inheritance order" #~ msgstr " vil blive omordnet for at passe til nedarvningsordenen" #~ msgid "base class `%T' already initialized" #~ msgstr "stamklassen '%T' er allerede klargjort" #~ msgid "implementation-reserved name `%D' used" #~ msgstr "implementationsreserveret navn '%D' benyttet" #~ msgid "explicit instantiation of `%#D' after" #~ msgstr "eksplicit instantiering af '%#D' efter" #~ msgid "explicit specialization here" #~ msgstr "eksplicit specialisering her" #~ msgid "explicit instantiation of `%#T' after" #~ msgstr "eksplicit instantiering af '%#T' efter" #~ msgid "base initializer for `%T'" #~ msgstr "stamklasseklargring for '%T'" #~ msgid " will be re-ordered to precede member initializations" #~ msgstr " vil blive omordnet for at komme fr medlemsklargringer" #~ msgid "ignoring `%V' qualifiers on `%T'" #~ msgstr "ignorerer modifikationerne '%V' til '%T'" #~ msgid "ISO C++ forbids applying `sizeof' to a function type" #~ msgstr "ISO C++ forbyder anvendelse af 'sizeof' p en funktionstype" #~ msgid "ISO C++ forbids applying `sizeof' to a member function" #~ msgstr "ISO C++ forbyder anvendelse af 'sizeof' p en medlemsfunktion" #~ msgid "ISO C++ forbids applying `sizeof' to type `void' which is an incomplete type" #~ msgstr "ISO C++ forbyder anvendelse af 'sizeof' p typen 'void' som er en ufuldstndig type" #~ msgid "`sizeof' applied to non-static member" #~ msgstr "'sizeof' benyttet p et ikke-statisk medlem" #~ msgid "`sizeof' applied to incomplete type `%T'" #~ msgstr "'sizeof' benyttet p en ufuldstndig type '%T'" #~ msgid "request for member `%T::%D' in expression of non-aggregate type `%T'" #~ msgstr "foresprgsel for medlemmet '%T::%D' i udtryk med den ikke-sammensatte type '%T'" #~ msgid "invalid use of type decl `%#D' as expression" #~ msgstr "ugyldig brug af typeerklring '%#D' som udtryk" #~ msgid "invalid use of template `%#D' as expression" #~ msgstr "ugyldig brug af skabelon '%#D' som udtryk" #~ msgid "invalid offsetof from non-POD type `%#T'; use pointer to member instead" #~ msgstr "ugyldig offsetof fra ikke-POD type '%#T'; benyt henvisning til medlem i stedet" #~ msgid "pointer to member function called, but not in class scope" #~ msgstr "henvisning til medlem-funktion kaldt, men ikke i klassevirkefelt" #~ msgid "object missing in call to method `%D'" #~ msgstr "objekt mangler i kald til metoden '%D'" #~ msgid "function `%D' declared overloaded, but no definitions appear with which to resolve it?!?" #~ msgstr "funktionen '%D' erklret flertydigt, men ingen definition optrder til at passe den sammen med?!?" #~ msgid "invalid call to member function needing `this' in static member function scope" #~ msgstr "ugyldigt kald af medlemsfunktion som har brug for 'this', i et statisk medlemsfunktionsvirkefelt" #~ msgid "unary `&'" #~ msgstr "unr '&'" #~ msgid "invalid use of undefined type `%#T'" #~ msgstr "ugyldig brug af en ikke-defineret type '%#T'" #~ msgid "forward declaration of `%#T'" #~ msgstr "forhndserklring af '%#T'" #~ msgid "invalid use of `%T'" #~ msgstr "ugyldig brug af '%T'" #~ msgid "invalid use of member (did you forget the `&' ?)" #~ msgstr "ugyldig brug af medlem (glemte du en '&'?)" #~ msgid "invalid use of template type parameter" #~ msgstr "ugyldig brug af skabelonstypeparameter" #~ msgid "address of overloaded function with no contextual type information" #~ msgstr "adresse af flertydig funktion uden kontekstuelle typeoplysninger" #~ msgid "overloaded function with no contextual type information" #~ msgstr "flertydig funktion uden kontekstuelle typeoplysninger" #~ msgid "insufficient contextual information to determine type" #~ msgstr "utilstrkkelige kontekstuelle oplysninger til at afgre typen" #~ msgid "initializer list construction invalid for derived class object `%D'" #~ msgstr "klargringslistekonstruktion er ugyldig for nedarvet klasseobjekt '%D'" #~ msgid "initializer list construction invalid for polymorphic class object `%D'" #~ msgstr "klargringslistekonstruktion er ugyldig for polymorfisk klasseobjekt '%D'" #~ msgid "initializer list construction invalid for `%D'" #~ msgstr "klargringslistekonstruktion er ugyldig for '%D'" #~ msgid "due to the presence of a constructor" #~ msgstr "pga. af tilstedevrelsen af en konstruktionsfunktion" #~ msgid "due to non-public access of member `%D'" #~ msgstr "pga. ikke-public tilgang af medlemmet '%D'" #~ msgid "ISO C++ forbids non-constant aggregate initializer expressions" #~ msgstr "ISO C++ forbyder ikke-konstante startvrdiudtryk for sammensatte typer" #~ msgid "The meaning of `\\x' (at %0) varies with -traditional" #~ msgstr "Betydningen af '\\x' (ved %0) skifter med -traditional" #~ msgid "The meaning of `\\a' (at %0) varies with -traditional" #~ msgstr "Betydningen af '\\a' (ved %0) skifter med -traditional" #~ msgid "the meaning of `\\x' varies with -traditional" #~ msgstr "betydningen af '\\x' skifter med -traditional" #~ msgid "the meaning of `\\a' varies with -traditional" #~ msgstr "betydningen af '\\a' skifter med -traditional" #~ msgid "parse error; also virtual memory exceeded" #~ msgstr "tolkningsfejl; desuden lbet tr for virtuel hukommelse" #~ msgid "Can't specify array dimension in a declaration" #~ msgstr "Kan ikke angive tabeldimension i en erklring" #~ msgid "internal error - use of undefined type" #~ msgstr "intern fejl - brug af ikke-defineret type" #~ msgid "no class name specified as argument to -fconstant-string-class" #~ msgstr "intet klassenavn angivet som parameter til -fconstant-string-class" #~ msgid "-p profiling is no longer supported. Use -pg instead" #~ msgstr "profilgenerering med -p understttes ikke lngere; benyt -pg i stedet for" #~ msgid "incompatible interworking options" #~ msgstr "uforenelige samvirkende tilvalg" #~ msgid "options -mabi=mmixware and -mabi=gnu are mutually exclusive" #~ msgstr "-mabi=mmixware og -mabi=gnu er indbyrdes uforenelige" #~ msgid "-p option not supported: use -pg instead" #~ msgstr "tilvalget -p understttes ikke; benyt -pg i stedet" #~ msgid "-mbsd and -pedantic incompatible" #~ msgstr "-mbsd og -pedantic er indbyrdes uforenelige" #~ msgid "-mbsd and -mxopen incompatible" #~ msgstr "-mbsd og -mxopen er indbyrdes uforenelige" #~ msgid "-mxopen and -pedantic incompatible" #~ msgstr "-mxopen og -pedantic er indbyrdes uforenelige" #~ msgid "may not use both -mfp64 and -msingle-float" #~ msgstr "-mfp64 og -msingle-float er indbyrdes uforenelige" #~ msgid "may not use both -mfp64 and -m4650" #~ msgstr "-mfp64 og -m4650 er indbyrdes uforenelige" #~ msgid "may not use both -mgp32 and -mfp64" #~ msgstr "-mgp32 og -mfp64 er indbyrdes uforenelige" #~ msgid "Only initialized variables can be placed into program memory area." #~ msgstr "Kun variabler med startvrdi kan placeres i programhukommelsesomrdet." #~ msgid "declaration of `%#T'" #~ msgstr "erklring af '%#T'" #~ msgid "a -ifile option requires a -map option" #~ msgstr "et '-ifile'-tilvalg krver et '-map'-tilvalg" #~ msgid "%s before character constant" #~ msgstr "%s fr tegnkonstant" #~ msgid "%s before character 0%o" #~ msgstr "%s fr tegn 0%o" #~ msgid "invalid identifier `%s'" #~ msgstr "ugyldigt kaldenavn '%s'" #~ msgid "parse error at `..'" #~ msgstr "tolkningsfejl ved '..'" #~ msgid "nondigits in number and not hexadecimal" #~ msgstr "tegn der ikke er cifre, optrder i tal" #~ msgid "two `u's in integer constant" #~ msgstr "to 'u'-endelser i heltalskonstant" #~ msgid "`[*]' in parameter declaration only allowed in ISO C 99" #~ msgstr "'[*]' i parametererklring kun tilladt i ISO C 99" #~ msgid "invalid `for (ITERATOR)' syntax" #~ msgstr "ugyldigt 'for (LKKEVARIABEL)'-syntaks" #~ msgid "`for (%s)' inside expansion of same iterator" #~ msgstr "'for (%s)' inden i udfoldning af samme lkkevariabel" #~ msgid "case label within scope of cleanup or variable array" #~ msgstr "case-etiket i oprydningsomrde eller i en variabel tabel" #~ msgid "wrong type argument to %s" #~ msgstr "forkert parametertype til %s" #~ msgid "invalid lvalue in increment" #~ msgstr "ugyldig venstrevrdi i forgelse" #~ msgid "invalid lvalue in decrement" #~ msgstr "ugyldig venstrevrdi i formindskelse" #~ msgid "increment" #~ msgstr "forgelse" #~ msgid "decrement" #~ msgstr "formindskelse" #~ msgid "duplicate array index in initializer" #~ msgstr "tabelindeks i startvrdi optrder mere end n gang" #~ msgid "thumb_load_double_from_address: destination is not a register" #~ msgstr "thumb_load_double_from_adress: destination er ikke et register" #~ msgid "thumb_load_double_from_address: source is not a computed memory address" #~ msgstr "thumb_load_double_from_adress: kilden er ikke en beregnet hukommelsesadresse" #~ msgid "thumb_load_double_from_address: Unhandled address calculation" #~ msgstr "thumb_load_double_from_adress: adresseberegningen er ikke hndteret" #~ msgid "ACCUM_HIGH_REGS class in limit_reload_class" #~ msgstr "ACCUM_HIGH_REGS-klasse i limit_reload_class" #~ msgid "YH_OR_ACCUM_HIGH_REGS found in limit_reload_class" #~ msgstr "YH_OR_ACCUM_HIGH_REGS fundet i limit_reload_class" #~ msgid "YL found in limit_reload_class" #~ msgstr "YL fundet i limit_reload_class" #~ msgid "Invalid register for compare" #~ msgstr "Ugyldigt register til sammenligningen" #~ msgid "Internal gcc abort from %s:%d" #~ msgstr "Intern GCC-afbrydelse fra %s:%d" #~ msgid "Register '%c' already specified in allocation order" #~ msgstr "Registret '%c' er allerede angivet i tildelingsordenen" #~ msgid "Same as -mcpu=i386" #~ msgstr "Magen til -mcpu=i386" #~ msgid "Same as -mcpu=i486" #~ msgstr "Magen til -mcpu=i486" #~ msgid "Same as -mcpu=pentium" #~ msgstr "Magen til -mcpu=pentium" #~ msgid "Same as -mcpu=pentiumpro" #~ msgstr "Magen til -mcpu=pentiumpro" #~ msgid "Emit Intel syntax assembler opcodes" #~ msgstr "Konstrur instruktionerne til maskinkodeoverstteren med Intel-syntaks" #~ msgid "invalid %H value" #~ msgstr "ugyldig %H-vrdi" #~ msgid "invalid %h value" #~ msgstr "ugyldig %h-vrdi" #~ msgid "invalid %Q value" #~ msgstr "ugyldig %Q-vrdi" #~ msgid "invalid %q value" #~ msgstr "ugyldig %q-vrdi" #~ msgid "invalid %p value" #~ msgstr "ugyldig %p-vrdi" #~ msgid "invalid %B value" #~ msgstr "ugyldig %B-vrdi" #~ msgid "invalid %C value" #~ msgstr "ugyldig %C-vrdi" #~ msgid "invalid %E value" #~ msgstr "ugyldig %E-vrdi" #~ msgid "invalid %r value" #~ msgstr "ugyldig %r-vrdi" #~ msgid "-mcpu=%s does not support -mips%d" #~ msgstr "-mcpu=%s understtter ikke -mips%d" #~ msgid "PRINT_OPERAND: letter %c was found & insn was not CONST_INT" #~ msgstr "PRINT_OPERAND: bogstavet %c blev fundet og instruktionen var ikke CONST_INT" #~ msgid "-mptr%d not allowed on -m%d" #~ msgstr "-mptr%d er ikke tilladt p -m%d" #~ msgid "parse errors have confused me too much" #~ msgstr "tolkningsfejl er blevet for forvirrende" #~ msgid "virtual memory exhausted" #~ msgstr "lbet tr for virtuel hukommelse" #~ msgid "the new ABI requires vtable thunks" #~ msgstr "den nye binre grnseflade krver virtuel tabel-afdelinger" #~ msgid "`void' in parameter list must be entire list" #~ msgstr "'void' i en parameterliste skal udgre hele listen" #~ msgid "no file specified with -fdump-translation-unit" #~ msgstr "ingen filer angivet med -fdump-translation-unit" #~ msgid "`__alignof__' applied to a bit-field" #~ msgstr "'__alignof__' brugt p et bitfelt" #~ msgid "(you really want to initialize it separately)" #~ msgstr "(klargr den separat)" #~ msgid "`operator new' takes type `size_t' parameter" #~ msgstr "'operator new' skal have en parameter af typen 'size_t'" #~ msgid "`...' invalid in specification of `operator delete'" #~ msgstr "'...' er ugyldigt i angivelsen af 'operator delete'" #~ msgid "`default' label within scope of cleanup or variable array" #~ msgstr "'default'-etiket i oprydningsomrde eller i en variabel tabel" #~ msgid "initializer for unnamed base class ambiguous" #~ msgstr "klargring af unavngiven stamklasse er flertydig" #~ msgid "invalid #pragma vtable" #~ msgstr "ugyldig #pragma vtable" #~ msgid "%s at end of saved text" #~ msgstr "%s ved slutningen af den gemte tekst" #~ msgid "complex integer constant is too wide for `__complex int'" #~ msgstr "kompleks heltalskonstant er for bred til '__complex int'" #~ msgid "ambiguous request for method pointer `%s'" #~ msgstr "flertydig foresprgsel efter medlemsfunktionshenvisningen '%s'" #~ msgid "taking dynamic typeid of object with -fno-rtti" #~ msgstr "forsg p at finde den dynamiske typeid af et objekt med -fno-rtti" #~ msgid "`com_interface' only supported with -fvtable-thunks" #~ msgstr "'com_interface' understttes kun med -fvtable-thunks" #~ msgid "invalid reference to NULL ptr, use ptr-to-member instead" #~ msgstr "ugyldig reference til NULL-henvisning, benyt en henvisning til medlem i stedet" #~ msgid "Please submit a full bug report." #~ msgstr "Send venligst en komplet fejlrapport." #~ msgid "duplicate label `%s' in switch statement" #~ msgstr "mere end n '%s'-etiket i switch-stningen" #~ msgid "duplicate label (%d) in switch statement" #~ msgstr "mere end n etiket (%d) i switch-stningen" #~ msgid "range values `%s' and `%s' reversed" #~ msgstr "intervalvrdierne '%s' og '%s' vender omvendt" #~ msgid "range values reversed" #~ msgstr "intervalvrdierne vender omvendt" #~ msgid "Can't create cross-reference file `%s'" #~ msgstr "Kan ikke oprette krydsreferencefilen '%s'" #~ msgid "bad is_error(%d) in v_message" #~ msgstr "ugyldig is_error(%d) i v_message" #~ msgid "'defined' without an identifier" #~ msgstr "'defined' optrder uden et kaldenavn" #~ msgid "`##' at start of macro definition" #~ msgstr "'##' i begyndelsen af makrodefinitionen" #~ msgid "empty object-like macro went through full #define" #~ msgstr "en tom objektlignende makro gik gennem komplet #define" #~ msgid "first token = %d not %d in collect_formal_parameters" #~ msgstr "frste symbol = %d er ikke %d i collect_formal_parameters" #~ msgid "impossible token in macro argument list" #~ msgstr "umuligt symbol i makroparameterlisten" #~ msgid "illegal token in macro argument list" #~ msgstr "ugyldigt symbol i makroparameterlisten" #~ msgid "another parameter follows \"...\"" #~ msgstr "der optrder en parameter mere efter \"...\"" #~ msgid "collect_params: argc=%d argslen=0" #~ msgstr "collect_params: argc=%d argslen=0" #~ msgid "C99 does not permit use of __VA_ARGS__ as a macro argument name" #~ msgstr "C99 tillader ikke brug af __VA_ARGS__ som makroparameternavn" #~ msgid "C89 does not permit varargs macros" #~ msgstr "C89 tillader ikke variabel parameterliste-makroer" #~ msgid "collect_params: impossible token type %d" #~ msgstr "collect_params: umulig symboltype %d" #~ msgid "attempt to use poisoned `%s'." #~ msgstr "forsg p at bruge forgiftet '%s'" #~ msgid "macroexpand: unexpected token %d (wanted LPAREN)" #~ msgstr "macroexpand: forventede ikke symbol %d (skulle have vret LPAREN)" #~ msgid "unterminated macro call" #~ msgstr "uafsluttet makrokald" #~ msgid "macro `%s' used with just one arg" #~ msgstr "makroen '%s' kaldt med kun n parameter" #~ msgid "macro `%s' used with only %d args" #~ msgstr "makroen '%s' kaldt med kun %d parametre" #~ msgid "macro `%s' used with too many (%d) args" #~ msgstr "makroen '%s' kaldt med for mange (%d) parametre" #~ msgid "buffers still stacked in cpp_finish" #~ msgstr "mellemlagre er stadig stakket op i cpp_finish" #~ msgid "" #~ "Switches:\n" #~ " -include Include the contents of before other files\n" #~ " -imacros Accept definition of macros in \n" #~ " -iprefix Specify as a prefix for next two options\n" #~ " -iwithprefix Add to the end of the system include path\n" #~ " -iwithprefixbefore Add to the end of the main include path\n" #~ " -isystem Add to the start of the system include path\n" #~ " -idirafter Add to the end of the system include path\n" #~ " -I Add to the end of the main include path\n" #~ " -I- Fine-grained include path control; see info docs\n" #~ " -nostdinc Do not search system include directories\n" #~ " (dirs specified with -isystem will still be used)\n" #~ " -nostdinc++ Do not search system include directories for C++\n" #~ " -o Put output into \n" #~ " -pedantic Issue all warnings demanded by strict ANSI C\n" #~ " -pedantic-errors Issue -pedantic warnings as errors instead\n" #~ " -traditional Follow K&R pre-processor behaviour\n" #~ " -trigraphs Support ANSI C trigraphs\n" #~ " -lang-c Assume that the input sources are in C\n" #~ " -lang-c89 Assume that the input sources are in C89\n" #~ " -lang-c++ Assume that the input sources are in C++\n" #~ " -lang-objc Assume that the input sources are in ObjectiveC\n" #~ " -lang-objc++ Assume that the input sources are in ObjectiveC++\n" #~ " -lang-asm Assume that the input sources are in assembler\n" #~ " -lang-fortran\t\t Assume that the input sources are in Fortran\n" #~ " -lang-chill Assume that the input sources are in Chill\n" #~ " -std= Specify the conformance standard; one of:\n" #~ " gnu89, gnu99, c89, c99, iso9899:1990,\n" #~ " iso9899:199409, iso9899:1999\n" #~ " -+ Allow parsing of C++ style features\n" #~ " -w Inhibit warning messages\n" #~ " -Wtrigraphs Warn if trigraphs are encountered\n" #~ " -Wno-trigraphs Do not warn about trigraphs\n" #~ " -Wcomment{s} Warn if one comment starts inside another\n" #~ " -Wno-comment{s} Do not warn about comments\n" #~ " -Wtraditional Warn if a macro argument is/would be turned into\n" #~ " a string if -traditional is specified\n" #~ " -Wno-traditional Do not warn about stringification\n" #~ " -Wundef Warn if an undefined macro is used by #if\n" #~ " -Wno-undef Do not warn about testing undefined macros\n" #~ " -Wimport Warn about the use of the #import directive\n" #~ " -Wno-import Do not warn about the use of #import\n" #~ " -Werror Treat all warnings as errors\n" #~ " -Wno-error Do not treat warnings as errors\n" #~ " -Wall Enable all preprocessor warnings\n" #~ " -M Generate make dependencies\n" #~ " -MM As -M, but ignore system header files\n" #~ " -MD As -M, but put output in a .d file\n" #~ " -MMD As -MD, but ignore system header files\n" #~ " -MG Treat missing header file as generated files\n" #~ " -g3 Include #define and #undef directives in the output\n" #~ " -D Define a with string '1' as its value\n" #~ " -D= Define a with as its value\n" #~ " -A () Assert the to \n" #~ " -A- () Disable the to \n" #~ " -U Undefine \n" #~ " -v Display the version number\n" #~ " -H Print the name of header files as they are used\n" #~ " -C Do not discard comments\n" #~ " -dM Display a list of macro definitions active at end\n" #~ " -dD Preserve macro definitions in output\n" #~ " -dN As -dD except that only the names are preserved\n" #~ " -dI Include #include directives in the output\n" #~ " -ftabstop= Distance between tab stops for column reporting\n" #~ " -P Do not generate #line directives\n" #~ " -$ Do not allow '$' in identifiers\n" #~ " -remap Remap file names when including files.\n" #~ " --version Display version information\n" #~ " -h or --help Display this information\n" #~ msgstr "" #~ "Tilvalg:\n" #~ " -include Inkludr indholdet af fr andre filer\n" #~ " -imacros Ls makrodefinitionerne i \n" #~ " -iprefix Angiv som et prfiks til de nste to tilvalg\n" #~ " -iwithprefix Fj til slutningen af systeminkluderingsstien\n" #~ " -withprefixbefore Fj til slutningen af den alm. inkluderingssti\n" #~ " -isystem Fj til begyndelsen af systeminkluderingsstien\n" #~ " -idirafter Fj til slutningen af systeminkluderingsstien\n" #~ " -I Fj til slutningen af den alm. inkluderingssti\n" #~ " -I- Nje kontrolleret inkluderingssti; se info-hjlpen\n" #~ " -nostdinc Sg ikke i systeminkluderingskataloger\n" #~ " (kataloger angivet med -isystem sges dog stadig)\n" #~ " -nostdinc++ Sg ikke i systeminkluderingskataloger til C++\n" #~ " -o Send uddata til \n" #~ " -pedantic Fremkom med alle advarsler pkrvet for nje ISO C\n" #~ " -pedantic-errors Behandl '-pedantic'-advarsler som fejl\n" #~ " -traditional Iagttag opfrsel som en K&R-prprocessor\n" #~ " -trigraphs Understt ANSI C-trigrafer\n" #~ " -lang-c Antag at inddata er C\n" #~ " -lang-c89 Antag at inddata er C89\n" #~ " -lang-c++ Antag at inddata er C++\n" #~ " -lang-cobjc Antag at inddata er Objective C\n" #~ " -lang-cobjc++ Antag at inddata er Objective C++\n" #~ " -lang-asm Antag at inddata er maskinkode\n" #~ " -lang-fortran Antag at inddata er Fortran\n" #~ " -lang-chill Antag at inddata er Chill\n" #~ " -std= Angiv at koden retter sig efter en af standarderne:\n" #~ " gnu89, gnu99, c89, c99, iso9899:1990,\n" #~ " iso9899:199409, iso9899:1999\n" #~ " -+ Tillad fortolkning af faciliteter i C++-stil\n" #~ " -w Blokr advarselsmeddelelser\n" #~ " -Wtrigraphs Advar hvis der optrder trigrafer\n" #~ " -Wno-trigraphs Advar ikke om trigrafer\n" #~ " -Wcomment{s} Advar hvis en kommentar begynder inden i en anden\n" #~ " -Wno-comment{s} Advar ikke om kommentarer\n" #~ " -Wtraditional Advar hvis en makroparameter vil blive gjort til en\n" #~ " streng med -traditional\n" #~ " -Wno-traditional Advar ikke om omdannelse til streng\n" #~ " -Wundef Advar hvis en ikkedefineret makro bruges med #if\n" #~ " -Wno-undef Advar ikke om test p makroer der ikke er definerede\n" #~ " -Wimport Advar om brug af #import\n" #~ " -Wno-import Advar ikke om brug af #import\n" #~ " -Werror Behandl alle advarsler som fejl\n" #~ " -Wno-error Behandl ikke alle advarsler som fejl\n" #~ " -Wall Sl alle prprocessoradvarsler til\n" #~ " -M Generr afhngigheder til make\n" #~ " -MM Som -M, men ignorr systeminkluderingsfiler\n" #~ " -MD Som -M, men anbring uddata i en '.d'-fil\n" #~ " -MMD Som -MD, men ignorr systeminkluderingsfiler\n" #~ " -MG Behandl manglende inkl.-filer som genererede filer\n" #~ " -g3 Inkludr #define- og #undef-direktiver i uddata\n" #~ " -D Definr makroen med strengen '1' som vrdi\n" #~ " -D= Definr makroen med vrdien \n" #~ " -A () Angiv at er svar p \n" #~ " -A- () Angiv at ikke er svar p \n" #~ " -U Glem definitionen af \n" #~ " -v Skriv versionsnummeret\n" #~ " -H Skriv navnene p inkluderingsfilerne nr de bruges\n" #~ " -C Fjern ikke kommentarer\n" #~ " -dM Vis til sidst de aktive makrodefinitioner\n" #~ " -dD Bevar makrodefinitioner i uddata\n" #~ " -dN Som -dD bortset fra at kun navnene bevares\n" #~ " -dI Inkludr #include-anvisninger i uddata\n" #~ " -ftabstop= Afstand mellem tabulatorstop i kolonnerapportering\n" #~ " -P Generr ikke #line-angivelser\n" #~ " -$ Tillad ikke '$' i kaldenavne\n" #~ " -remap Omdan filnavne ved filinkludering\n" #~ " --version Udskriv versionsinformation\n" #~ " -h eller --help Vis denne vejledning\n" #~ msgid "mark active in cpp_pop_buffer" #~ msgstr "markr aktiv i cpp_pop_buffer" #~ msgid "length < 0 in cpp_expand_to_buffer" #~ msgstr "lngden < 0 i cpp_expand_to_buffer" #~ msgid "backslash-newline within line comment" #~ msgstr "omvendt skrstreg efterfulgt af linjeskift fundet i en enkeltlinjeskommentar" #~ msgid "C++ style comments are not allowed in traditional C" #~ msgstr "kommentarer i C++-stil er ikke tilladt i traditionel C" #~ msgid "string constant runs past end of line" #~ msgstr "strengkonstanten gr ud over slutningen af linjen" #~ msgid "missing '>' in `#include '" #~ msgstr "manglende '>' i '#include '" #~ msgid "vertical tab in preprocessing directive" #~ msgstr "lodret tabulator i prprocessordirektiv" #~ msgid "form feed in preprocessing directive" #~ msgstr "sideskift i prprocessordirektiv" #~ msgid "null character preserved" #~ msgstr "nultegn bevaret" #~ msgid "comment start split across lines" #~ msgstr "kommentarbegyndelsen delt over to linjer" #~ msgid "comment start '/*' split across lines" #~ msgstr "kommentarbegyndelsen '/*' delt over to linjer" #~ msgid "comment end '*/' split across lines" #~ msgstr "kommentarslutningen '*/' delt over to linjer" #~ msgid "handle_directive called on macro buffer" #~ msgstr "handle_directive kaldt med et makromellemlager" #~ msgid "ignoring #%s because of its indented #" #~ msgstr "ignorerer #%s p grund af den indrykkede '#'" #~ msgid "ISO C does not allow #%s" #~ msgstr "ISO C tillader ikke #%s" #~ msgid "redefining poisoned `%.*s'" #~ msgstr "omdefinerer forgiftet '%.*s'" #~ msgid "garbage at end of #line" #~ msgstr "ragelse i slutningen af #line" #~ msgid "second token after #line is not a string" #~ msgstr "det andet symbol efter #line er ikke en streng" #~ msgid "junk on line after #undef" #~ msgstr "ragelse p linjen efter #undef" #~ msgid "cannot undefine poisoned \"%s\"" #~ msgstr "kan ikke glemme definitionen af forgiftet \"%s\"" #~ msgid "#%s with invalid argument" #~ msgstr "#%s med ugyldig parameter" #~ msgid "Cannot duplicate non-existant exception region." #~ msgstr "Kan ikke mangfoldiggre en ikkeeksisterende undtagelsesregion." #~ msgid "Never issued previous false_label" #~ msgstr "Srgede ikke for tidligere false_label" #~ msgid "output_operand: %s" #~ msgstr "output_operand: %s" #~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d\n" #~ msgstr "NOTE_INSN_BASIC_BLOCK mangler for blok %d\n" #~ msgid "file path prefix `%s%s' never used" #~ msgstr "stiprfikset '%s%s' blev aldrig brugt" #~ msgid "file path prefix `%s' never used" #~ msgstr "stiprfikset '%s' blev aldrig brugt" #~ msgid "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file\n" #~ msgstr "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJKAT] fil\n" #~ msgid "%s: option `--%s' doesn't allow an argument\n" #~ msgstr "%s: tilvalget '--%s' tillader ikke en parameter\n" #~ msgid "%s: option `%c%s' doesn't allow an argument\n" #~ msgstr "%s: tilvalget '%c%s' tillader ikke en parameter\n" #~ msgid "%s: option `%s' requires an argument\n" #~ msgstr "%s: tilvalget '%s' skal have en parameter\n" #~ msgid "%s: unrecognized option `--%s'\n" #~ msgstr "%s: ukendt tilvalg '--%s'\n" #~ msgid "%s: unrecognized option `%c%s'\n" #~ msgstr "%s: ukendt tilvalg '%c%s'\n" #~ msgid "%s: illegal option -- %c\n" #~ msgstr "%s: ugyldigt tilvalg -- %c\n" #~ msgid "%s: invalid option -- %c\n" #~ msgstr "%s: ugyldigt tilvalg -- %c\n" #~ msgid "%s: option requires an argument -- %c\n" #~ msgstr "%s: tilvalget skal have en parameter -- %c\n" #~ msgid "%s: option `-W %s' doesn't allow an argument\n" #~ msgstr "%s: tilvalget '-W %s' tillader ikke en parameter\n" #~ msgid "Objective-C text in C source file" #~ msgstr "Objective C-tekst i C-kildekodefil" #~ msgid "statically allocated objects not supported" #~ msgstr "statisk allokerede objekter understttes ikke" #~ msgid "`asm' cannot be used in function where memory usage is checked" #~ msgstr "'asm' kan ikke benyttes i funktioner hvor hukommelsesforbruget bliver tjekket" #~ msgid "`asm' cannot be used with `-fcheck-memory-usage'" #~ msgstr "'asm' kan ikke benyttes sammen med '-fcheck-memory-usage'" #~ msgid "output operand constraint %d contains `+'" #~ msgstr "uddataoperandbegrnsning %d indeholder '+'" #~ msgid "hard register `%s' listed as input operand to `asm'" #~ msgstr "hardware-register '%s' angivet som inddataoperand til 'asm'" #~ msgid "output pipe has been closed" #~ msgstr "uddataledningen er blevet lukket" #~ msgid "Errors detected in input file (your bison.simple is out of date)\n" #~ msgstr "Fandt fejl i inddatafilen (din bison.simple er forldet)\n" #~ msgid "Data size %ld.\n" #~ msgstr "Datastrrelse %ld.\n" #~ msgid "Unknown stab %s: : 0x%x\n" #~ msgstr "Ukendt stab %s: : 0x%x\n" #~ msgid "__builtin_trap not supported by this target" #~ msgstr "__builtin_trap understttes ikke p denne mlarkitektur" #~ msgid "`%s' previously defined here" #~ msgstr "'%s' tidligere defineret her" #~ msgid "`%s' previously declared here" #~ msgstr "'%s' tidligere erklret her" #~ msgid "profiling does not support code models other than medlow" #~ msgstr "profilgenerering understtter ikke andre kodemodeller end medlow" #~ msgid "Control allocation order of integer registers" #~ msgstr "Kontrollr tildelingsordenen for heltalsregistrene" nescc-1.3.4/libcpp/po/de.po000066400000000000000000007226001177770303300154500ustar00rootroot00000000000000# German translation of gcc messages. # Copyright © 2002, 2003, 2004, 2005 Free Software Foundation, Inc. # Karl Eichwalder , 2002, 2003. # Roland Stigge , 2003, 2004, 2005, 2006, 2007. # This file is distributed under the same license as the gcc package. # msgid "" msgstr "" "Project-Id-Version: cpplib 4.3-b20071109\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2007-11-08 21:08+0000\n" "PO-Revision-Date: 2007-11-11 11:11+0100\n" "Last-Translator: Roland Stigge \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: charset.c:654 #, c-format msgid "conversion from %s to %s not supported by iconv" msgstr "Konvertierung von %s nach %s wird von iconv nicht unterstützt" #: charset.c:657 msgid "iconv_open" msgstr "iconv_open" #: charset.c:665 #, c-format msgid "no iconv implementation, cannot convert from %s to %s" msgstr "keine Implementation für iconv, es kann nicht von %s nach %s konvertiert werden" #: charset.c:742 #, c-format msgid "character 0x%lx is not in the basic source character set\n" msgstr "Zeichen 0x%lx ist nicht im regulären Quellzeichensatz\n" #: charset.c:759 charset.c:1352 msgid "converting to execution character set" msgstr "Konvertierung in Zeichensatz der Ausführung" #: charset.c:765 #, c-format msgid "character 0x%lx is not unibyte in execution character set" msgstr "Zeichen 0x%lx ist kein Unibyte im Ausführungs-Zeichensatz" #: charset.c:889 #, c-format msgid "Character %x might not be NFKC" msgstr "Zeichen %x ist nicht in NFKC" #: charset.c:949 msgid "universal character names are only valid in C++ and C99" msgstr "universelle Zeichennamen sind nur in C++ und C99 gültig" #: charset.c:952 #, c-format msgid "the meaning of '\\%c' is different in traditional C" msgstr "die Bedeutung von '\\%c' ist in traditionellem C anders" #: charset.c:961 msgid "In _cpp_valid_ucn but not a UCN" msgstr "In _cpp_valid_ucn, aber kein UCN" #: charset.c:986 #, c-format msgid "incomplete universal character name %.*s" msgstr "unvollständiger Universal-Zeichenname %.*s" #: charset.c:998 #, c-format msgid "%.*s is not a valid universal character" msgstr "»%.*s« ist kein gültiges universelles Zeichen" #: charset.c:1008 lex.c:484 msgid "'$' in identifier or number" msgstr "'$' in Bezeichner oder Zahl" #: charset.c:1018 #, c-format msgid "universal character %.*s is not valid in an identifier" msgstr "universelles Zeichen %.*s ist nicht gültig in Bezeichner" #: charset.c:1022 #, c-format msgid "universal character %.*s is not valid at the start of an identifier" msgstr "universelles Zeichen %.*s ist nicht gültig am Anfang eines Bezeichners" #: charset.c:1056 charset.c:1571 msgid "converting UCN to source character set" msgstr "UCN wird in Quellzeichensatz konvertiert" #: charset.c:1060 msgid "converting UCN to execution character set" msgstr "UCN wird in Ausführungszeichensatz konvertiert" #: charset.c:1132 msgid "the meaning of '\\x' is different in traditional C" msgstr "die Bedeutung von '\\x' ist in traditionellem C anders" #: charset.c:1149 msgid "\\x used with no following hex digits" msgstr "\\x ohne folgende Hex-Ziffern verwendet" #: charset.c:1156 msgid "hex escape sequence out of range" msgstr "Hex-Fluchtsequenz außerhalb des Wertebereiches" #: charset.c:1195 msgid "octal escape sequence out of range" msgstr "Oktal-Fluchtsequenz außerhalb des Wertebereiches" #: charset.c:1263 msgid "the meaning of '\\a' is different in traditional C" msgstr "die Bedeutung von '\\a' ist in traditionellem C anders" #: charset.c:1270 #, c-format msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "nicht-ISO-standardkonforme Fluchtsequenz '\\%c'" #: charset.c:1278 #, c-format msgid "unknown escape sequence '\\%c'" msgstr "unbekannte Fluchtsequenz '\\%c'" #: charset.c:1286 #, c-format msgid "unknown escape sequence: '\\%s'" msgstr "unbekannte Fluchtsequenz: '\\%s'" #: charset.c:1293 msgid "converting escape sequence to execution character set" msgstr "Fluchtsequenz wird in Zeichensatz der Ausführung konvertiert" #: charset.c:1415 charset.c:1478 msgid "character constant too long for its type" msgstr "Zeichenkonstante zu lang für ihren Typ" #: charset.c:1418 msgid "multi-character character constant" msgstr "Zeichenkonstante mit mehreren Zeichen" #: charset.c:1510 msgid "empty character constant" msgstr "Leere Zeichenkonstante" #: charset.c:1612 #, c-format msgid "failure to convert %s to %s" msgstr "Fehler beim Konvertieren von %s nach %s" #: directives.c:215 directives.c:241 #, c-format msgid "extra tokens at end of #%s directive" msgstr "mehrere Token am Ende der Direktive #%s" #: directives.c:344 #, c-format msgid "#%s is a GCC extension" msgstr "#%s ist eine Erweiterung des GCC" #: directives.c:356 msgid "suggest not using #elif in traditional C" msgstr "es wird empfohlen, in traditionellem C nicht #elif zu verwenden" #: directives.c:359 #, c-format msgid "traditional C ignores #%s with the # indented" msgstr "traditionelles C ignoriert #%s mit eingerücktem #" #: directives.c:363 #, c-format msgid "suggest hiding #%s from traditional C with an indented #" msgstr "es wird empfohlen, #%s vor traditionellem C mit # zu verbergen" #: directives.c:389 msgid "embedding a directive within macro arguments is not portable" msgstr "das Einbetten einer Direktive innerhalb von Makroargumenten ist nicht portierbar" #: directives.c:409 msgid "style of line directive is a GCC extension" msgstr "der Stil der line-Direktive ist eine Erweiterung des GCC" #: directives.c:464 #, c-format msgid "invalid preprocessing directive #%s" msgstr "ungültige Präprozessordirektive #%s" #: directives.c:532 msgid "\"defined\" cannot be used as a macro name" msgstr "»defined« kann nicht als Makroname verwendet werden" #: directives.c:538 #, c-format msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "»%s« kann nicht als Makroname verwendet werden, da es ein Operator in C++ ist" #: directives.c:541 #, c-format msgid "no macro name given in #%s directive" msgstr "kein Makroname in Direktive #%s angegeben" #: directives.c:544 msgid "macro names must be identifiers" msgstr "Makronamen müssen Bezeichner sein" #: directives.c:585 #, c-format msgid "undefining \"%s\"" msgstr "»%s« wird un-definiert" #: directives.c:640 msgid "missing terminating > character" msgstr "fehlendes abschließendes »>«-Zeichen" #: directives.c:695 #, c-format msgid "#%s expects \"FILENAME\" or " msgstr "#%s erwartet \"DATEINAME\" oder " #: directives.c:739 #, c-format msgid "empty filename in #%s" msgstr "leerer Dateiname in #%s" #: directives.c:749 msgid "#include nested too deeply" msgstr "#include ist zu tief geschachtelt" #: directives.c:790 msgid "#include_next in primary source file" msgstr "#include_next in erster Quelldatei" #: directives.c:816 #, c-format msgid "invalid flag \"%s\" in line directive" msgstr "ungültiges Kennzeichen »%s« in line-Direktive" #: directives.c:868 #, c-format msgid "\"%s\" after #line is not a positive integer" msgstr "»%s« hinter #line ist keine positive Ganzzahl" #: directives.c:874 msgid "line number out of range" msgstr "Zeilennummer ist außerhalb des Wertebereiches" #: directives.c:887 directives.c:964 #, c-format msgid "\"%s\" is not a valid filename" msgstr "»%s« ist kein gültiger Dateiname" #: directives.c:924 #, c-format msgid "\"%s\" after # is not a positive integer" msgstr "»%s« hinter # ist keine positive Ganzzahl" #: directives.c:1026 #, c-format msgid "invalid #%s directive" msgstr "ungültige #%s-Direktive" #: directives.c:1089 #, c-format msgid "registering pragmas in namespace \"%s\" with mismatched name expansion" msgstr "Pragmas im Namespace »%s« werden ohne passende Namensauflösung registriert" #: directives.c:1098 #, c-format msgid "registering pragma \"%s\" with name expansion and no namespace" msgstr "Pragma »%s« wird mit Namensauflösung und ohne Namespace registriert" #: directives.c:1116 #, c-format msgid "registering \"%s\" as both a pragma and a pragma namespace" msgstr "»%s« wird sowohl als Pragma als auch als Pragma-Namespace registriert" #: directives.c:1119 #, c-format msgid "#pragma %s %s is already registered" msgstr "#pragma %s %s ist bereits registriert" #: directives.c:1122 #, c-format msgid "#pragma %s is already registered" msgstr "#pragma %s ist bereits registriert" #: directives.c:1152 msgid "registering pragma with NULL handler" msgstr "Pragma mit NULL-Handler wird registriert" #: directives.c:1362 msgid "#pragma once in main file" msgstr "#pragma once in Hauptdatei" #: directives.c:1385 msgid "invalid #pragma GCC poison directive" msgstr "ungültige #pragma GCC Poison Direktive" #: directives.c:1394 #, c-format msgid "poisoning existing macro \"%s\"" msgstr "schlechtes existierendes Makro »%s«" #: directives.c:1413 msgid "#pragma system_header ignored outside include file" msgstr "#pragma system_header außerhalb include-Datei ignoriert" #: directives.c:1437 #, c-format msgid "cannot find source file %s" msgstr "Quelldatei %s kann nicht gefunden werden" #: directives.c:1441 #, c-format msgid "current file is older than %s" msgstr "aktuelle Datei ist älter als %s" #: directives.c:1620 msgid "_Pragma takes a parenthesized string literal" msgstr "_Pragma nimmt ein geklammertes Zeichenkettenliteral" #: directives.c:1693 msgid "#else without #if" msgstr "#else ohne #if" #: directives.c:1698 msgid "#else after #else" msgstr "#else hinter #else" #: directives.c:1700 directives.c:1733 msgid "the conditional began here" msgstr "die Bedingung begann hier" #: directives.c:1726 msgid "#elif without #if" msgstr "#elif ohne #if" #: directives.c:1731 msgid "#elif after #else" msgstr "#elif hinter #else" #: directives.c:1761 msgid "#endif without #if" msgstr "#endif ohne #if" #: directives.c:1838 msgid "missing '(' after predicate" msgstr "fehlendes '(' hinter Prädikat" #: directives.c:1853 msgid "missing ')' to complete answer" msgstr "fehlendes ')', um Antwort abzuschließen" #: directives.c:1873 msgid "predicate's answer is empty" msgstr "Prädikatantwort ist leer" #: directives.c:1900 msgid "assertion without predicate" msgstr "Behauptung ohne Prädikat" #: directives.c:1902 msgid "predicate must be an identifier" msgstr "Prädikat muss ein Bezeichner sein" #: directives.c:1988 #, c-format msgid "\"%s\" re-asserted" msgstr "»%s« wieder behauptet" #: directives.c:2271 #, c-format msgid "unterminated #%s" msgstr "unbeendetes #%s" #: directives-only.c:221 lex.c:1016 traditional.c:162 msgid "unterminated comment" msgstr "nicht beendeter Kommentar" #: errors.c:118 msgid "warning: " msgstr "Warnung: " #: errors.c:120 msgid "internal error: " msgstr "interner Fehler: " #: errors.c:122 msgid "error: " msgstr "Fehler: " #: errors.c:186 msgid "stdout" msgstr "Standardausgabe" #: errors.c:188 #, c-format msgid "%s: %s" msgstr "%s: %s" #: expr.c:261 msgid "too many decimal points in number" msgstr "zu viele Dezimalpunkte in Zahl" #: expr.c:290 expr.c:365 msgid "fixed-point constants are a GCC extension" msgstr "Festkommakonstanten sind eine GCC-Erweiterung" #: expr.c:303 #, c-format msgid "invalid digit \"%c\" in binary constant" msgstr "ungültige Ziffer »%c« in binärer Konstante" #: expr.c:305 #, c-format msgid "invalid digit \"%c\" in octal constant" msgstr "ungültige Ziffer »%c« in Oktal-Konstante" #: expr.c:313 msgid "invalid prefix \"0b\" for floating constant" msgstr "ungültiger Prefix »0b« für Gleitkommakonstante" #: expr.c:319 msgid "use of C99 hexadecimal floating constant" msgstr "Verwendung von hexadezimaler C99-Gleitkommakonstante" #: expr.c:328 msgid "exponent has no digits" msgstr "Exponent hat keine Ziffern" #: expr.c:335 msgid "hexadecimal floating constants require an exponent" msgstr "hexadezimale Gleitkommakonstanten benötigen Exponenten" #: expr.c:341 #, c-format msgid "invalid suffix \"%.*s\" on floating constant" msgstr "ungültiger Suffix »%.*s« an Gleitkommakonstante" #: expr.c:351 expr.c:393 #, c-format msgid "traditional C rejects the \"%.*s\" suffix" msgstr "traditionelles C lehnt den Suffix »%.*s« ab" #: expr.c:358 #, c-format msgid "invalid suffix \"%.*s\" with hexadecimal floating constant" msgstr "ungültiger Suffix »%.*s« mit hexadezimaler Gleitkommakonstante" #: expr.c:369 msgid "decimal float constants are a GCC extension" msgstr "dezimale Gleitkommakonstanten sind eine GCC-Erweiterung" #: expr.c:379 #, c-format msgid "invalid suffix \"%.*s\" on integer constant" msgstr "ungültiger Suffix »%.*s« an Ganzzahlkonstante" #: expr.c:401 msgid "use of C99 long long integer constant" msgstr "C99 long long Ganzzahlkonstante verwendet" #: expr.c:409 msgid "imaginary constants are a GCC extension" msgstr "imaginäre Konstanten sind eine GCC-Erweiterung" #: expr.c:412 msgid "binary constants are a GCC extension" msgstr "binäre Konstanten sind eine GCC-Erweiterung" #: expr.c:505 msgid "integer constant is too large for its type" msgstr "Ganzzahlkonstante ist zu groß für ihren Typ" #: expr.c:517 msgid "integer constant is so large that it is unsigned" msgstr "Ganzzahlkonstante ist so groß, dass sie vorzeichenlos ist" #: expr.c:612 msgid "missing ')' after \"defined\"" msgstr "fehlendes ')' hinter »defined«" #: expr.c:619 msgid "operator \"defined\" requires an identifier" msgstr "Operator »defined« erfordert einen Bezeichner" #: expr.c:627 #, c-format msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "(»%s« ist ein alternatives Token for »%s« in C++)" #: expr.c:637 msgid "this use of \"defined\" may not be portable" msgstr "diese Verwendung von »defined« könnte nicht portierbar sein" #: expr.c:676 msgid "floating constant in preprocessor expression" msgstr "Gleitkommakonstante in Präprozessorausdruck" #: expr.c:682 msgid "imaginary number in preprocessor expression" msgstr "imaginäre Zahl in Präprozessorausdruck" #: expr.c:727 #, c-format msgid "\"%s\" is not defined" msgstr "»%s« ist nicht definiert" #: expr.c:855 expr.c:884 #, c-format msgid "missing binary operator before token \"%s\"" msgstr "fehlender binärer Operator vor Token »%s«" #: expr.c:875 #, c-format msgid "token \"%s\" is not valid in preprocessor expressions" msgstr "Token »%s« ist nicht gültig in Präprozessorausdrücken" #: expr.c:892 msgid "missing expression between '(' and ')'" msgstr "fehlender Ausdruck zwischen '(' und ')'" #: expr.c:895 msgid "#if with no expression" msgstr "#if ohne Ausdruck" #: expr.c:898 #, c-format msgid "operator '%s' has no right operand" msgstr "Operator »%s« hat keinen rechten Operanden" #: expr.c:903 #, c-format msgid "operator '%s' has no left operand" msgstr "Operator »%s« hat keinen linken Operanden" #: expr.c:929 msgid " ':' without preceding '?'" msgstr " ':' ohne vorangehendes '?'" #: expr.c:956 msgid "unbalanced stack in #if" msgstr "unausgeglichener Keller in #if" #: expr.c:975 #, c-format msgid "impossible operator '%u'" msgstr "unmöglicher Operator '%u'" #: expr.c:1065 msgid "missing ')' in expression" msgstr "fehlendes ')' in Ausdruck" #: expr.c:1086 msgid "'?' without following ':'" msgstr "'?' ohne folgendes ':'" #: expr.c:1096 msgid "integer overflow in preprocessor expression" msgstr "Ganzzahlüberlauf in Präprozessorausdruck" #: expr.c:1101 msgid "missing '(' in expression" msgstr "fehlendes '(' in Ausdruck" #: expr.c:1133 #, c-format msgid "the left operand of \"%s\" changes sign when promoted" msgstr "der linke Operand von »%s« ändert bei der Weitergabe das Vorzeichen" #: expr.c:1138 #, c-format msgid "the right operand of \"%s\" changes sign when promoted" msgstr "der rechte Operand von »%s« ändert bei der Weitergabe das Vorzeichen" #: expr.c:1397 msgid "traditional C rejects the unary plus operator" msgstr "traditionelles C weist den unären Plus-Operator zurück" #: expr.c:1480 msgid "comma operator in operand of #if" msgstr "Kommaoperator in Operand von #if" #: expr.c:1612 msgid "division by zero in #if" msgstr "Division durch Null in #if" #: files.c:442 msgid "NULL directory in find_file" msgstr "NULL-Verzeichnis in find_file" #: files.c:480 msgid "one or more PCH files were found, but they were invalid" msgstr "ein oder mehrere PCH-Dateien wurden gefunden, aber sie sind ungültig" #: files.c:483 msgid "use -Winvalid-pch for more information" msgstr "-Winvalid-pch für mehr Informationen verwenden" #: files.c:570 #, c-format msgid "%s is a block device" msgstr "%s ist ein Block-Gerät" #: files.c:587 #, c-format msgid "%s is too large" msgstr "%s ist zu groß" #: files.c:622 #, c-format msgid "%s is shorter than expected" msgstr "%s ist kürzer als erwartet" #: files.c:852 #, c-format msgid "no include path in which to search for %s" msgstr "kein Include-Pfad, um %s zu finden" #: files.c:1157 msgid "Multiple include guards may be useful for:\n" msgstr "Mehrere Include-Wächter könnten nützlich sein für:\n" #: init.c:426 msgid "cppchar_t must be an unsigned type" msgstr "cppchar_t muss ein vorzeichenloser Typ sein" #: init.c:430 #, c-format msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits" msgstr "Präprozessorarithmetik hat maximale Präzision von %lu Bits; Ziel erfordert %lu Bits" #: init.c:437 msgid "CPP arithmetic must be at least as precise as a target int" msgstr "CPP-Arithmetik muss mindestens so genau sein wie das Ziel int" #: init.c:440 msgid "target char is less than 8 bits wide" msgstr "Ziel-char ist weniger als 8 Bits breit" #: init.c:444 msgid "target wchar_t is narrower than target char" msgstr "Ziel-wchar_t ist schmaler als Ziel char" #: init.c:448 msgid "target int is narrower than target char" msgstr "Ziel-int ist schmaler als Ziel-char" #: init.c:453 msgid "CPP half-integer narrower than CPP character" msgstr "CPP Halb-Ganzzahl ist schmaler als CPP-Zeichen" #: init.c:457 #, c-format msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits" msgstr "CPP kann auf diesem Computer keine Wide-Zeichenkonstanten über %lu Bits Breite behandeln, das Ziel benötigt %lu Bits" #: lex.c:283 msgid "backslash and newline separated by space" msgstr "Backslash und Newline durch Leerzeichen getrennt" #: lex.c:288 msgid "backslash-newline at end of file" msgstr "Backslash-Newline am Dateiende" #: lex.c:303 #, c-format msgid "trigraph ??%c converted to %c" msgstr "Trigraph ??%c in %c konvertiert" #: lex.c:310 #, c-format msgid "trigraph ??%c ignored, use -trigraphs to enable" msgstr "Trigraph ??%c ignoriert, -trigraphs zum Aktivieren verwenden" #: lex.c:356 msgid "\"/*\" within comment" msgstr "»/*« innerhalb des Kommentars" #: lex.c:414 #, c-format msgid "%s in preprocessing directive" msgstr "%s in Präprozessordirektive" #: lex.c:423 msgid "null character(s) ignored" msgstr "Null-Zeichen ignoriert" #: lex.c:460 #, c-format msgid "`%.*s' is not in NFKC" msgstr "»%.*s« ist nicht in NFKC" #: lex.c:463 #, c-format msgid "`%.*s' is not in NFC" msgstr "»%.*s« ist nicht in NFC" #: lex.c:551 #, c-format msgid "attempt to use poisoned \"%s\"" msgstr "Versuch, schlechtes »%s« zu verwenden" #: lex.c:559 msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "__VA_ARGS__ kann nur in Erweiterung eines variadischen C99-Makros auftreten" #: lex.c:659 msgid "null character(s) preserved in literal" msgstr "Null-Zeichen im Literal erhalten" #: lex.c:662 #, c-format msgid "missing terminating %c character" msgstr "fehlendes abschließendes Zeichen %c" #: lex.c:1027 msgid "C++ style comments are not allowed in ISO C90" msgstr "C++-Stil-Kommentare sind in ISO-C90 nicht erlaubt" #: lex.c:1029 msgid "(this will be reported only once per input file)" msgstr "(dies wird nur einmal pro Eingabedatei gemeldet)" #: lex.c:1034 msgid "multi-line comment" msgstr "mehrzeiliger Kommentar" #: lex.c:1347 #, c-format msgid "unspellable token %s" msgstr "nicht buchstabierbares Token %s" #: line-map.c:320 #, c-format msgid "In file included from %s:%u" msgstr "In Datei, eingefügt von %s:%u" #: line-map.c:338 #, c-format msgid "" ",\n" " from %s:%u" msgstr "" ",\n" " von %s:%u" #: macro.c:84 #, c-format msgid "macro \"%s\" is not used" msgstr "Makro »%s« wird nicht benutzt" #: macro.c:123 macro.c:319 #, c-format msgid "invalid built-in macro \"%s\"" msgstr "ungültiges eingebautes Makro »%s«" #: macro.c:157 msgid "could not determine file timestamp" msgstr "Datum und Zeit der Datei konnten nicht bestimmt werden" #: macro.c:254 msgid "could not determine date and time" msgstr "Datum und Zeit konnten nicht bestimmt werden" #: macro.c:270 msgid "__COUNTER__ expanded inside directive with -fdirectives-only" msgstr "__COUNTER__ innerhalb von Anweisung mit -fdirectives-only expandiert" #: macro.c:423 msgid "invalid string literal, ignoring final '\\'" msgstr "ungültiges Zeichenkettenliteral, abschließendes '\\' wird ignoriert" #: macro.c:483 #, c-format msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "das Einfügen von »%s« und »%s« ergibt kein gültiges Präprozessor-Token" #: macro.c:558 msgid "ISO C99 requires rest arguments to be used" msgstr "ISO-C99 erfordert, dass Restargumente verwendet werden" #: macro.c:563 #, c-format msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "Makro »%s« erfordert %u Argumente, aber nur %u wurden angegeben" #: macro.c:568 #, c-format msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "dem Makro »%s« wurden %u Argumente übergeben, aber es nimmt nur %u" #: macro.c:679 traditional.c:680 #, c-format msgid "unterminated argument list invoking macro \"%s\"" msgstr "unvollendete Argumentliste beim Makroaufruf »%s«" #: macro.c:782 #, c-format msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "funktionsähnliches Makro »%s« muss mit Argumenten in traditionellem C verwendet werden" #: macro.c:1325 #, c-format msgid "duplicate macro parameter \"%s\"" msgstr "doppelter Makroparameter »%s«" #: macro.c:1371 #, c-format msgid "\"%s\" may not appear in macro parameter list" msgstr "»%s« darf nicht in Makroparameterliste auftreten" #: macro.c:1379 msgid "macro parameters must be comma-separated" msgstr "Makroparameter müssen mit Komma getrennt sein" #: macro.c:1396 msgid "parameter name missing" msgstr "Parametername fehlt" #: macro.c:1413 msgid "anonymous variadic macros were introduced in C99" msgstr "anonyme variadische Makros wurden in C99 eingeführt" #: macro.c:1418 msgid "ISO C does not permit named variadic macros" msgstr "ISO-C erlaubt keine benannten variadischen Makros" #: macro.c:1427 msgid "missing ')' in macro parameter list" msgstr "fehlendes ')' in Makroparameterliste" #: macro.c:1476 msgid "'##' cannot appear at either end of a macro expansion" msgstr "'##' kann nicht an den Enden einer Makroexpansion auftreten" #: macro.c:1510 msgid "ISO C99 requires whitespace after the macro name" msgstr "ISO-C99 erfordert Whitespace hinter Makroname" #: macro.c:1534 msgid "missing whitespace after the macro name" msgstr "Whitespace hinter Makroname fehlt" #: macro.c:1564 msgid "'#' is not followed by a macro parameter" msgstr "'#' wird nicht von einem Makroparameter gefolgt" #: macro.c:1683 #, c-format msgid "\"%s\" redefined" msgstr "»%s« redefiniert" #: macro.c:1688 msgid "this is the location of the previous definition" msgstr "dies ist die Stelle der vorherigen Definition" #: macro.c:1738 #, c-format msgid "macro argument \"%s\" would be stringified in traditional C" msgstr "Makroargument »%s« würde in traditionellem C zum String gewandelt werden" #: macro.c:1761 #, c-format msgid "invalid hash type %d in cpp_macro_definition" msgstr "ungültiger Hash-Typ %d in cpp_macro_definition" #: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377 msgid "while writing precompiled header" msgstr "beim Schreiben des vorkompilierten Headers" #: pch.c:485 #, c-format msgid "%s: not used because `%.*s' not defined" msgstr "%s: nicht verwendet, da »%.*s« nicht definiert" #: pch.c:497 #, c-format msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'" msgstr "%s: nicht verwendet, da »%.*s« als »%s« statt als »%.*s« definiert wurde" #: pch.c:538 #, c-format msgid "%s: not used because `%s' is defined" msgstr "%s: nicht verwendet, da »%s« definiert ist" #: pch.c:558 #, c-format msgid "%s: not used because `__COUNTER__' is invalid" msgstr "%s: nicht verwendet, da »__COUNTER__« ungültig ist" #: pch.c:567 pch.c:737 msgid "while reading precompiled header" msgstr "beim Lesen des vorkompilierten Headers" #: traditional.c:750 #, c-format msgid "detected recursion whilst expanding macro \"%s\"" msgstr "Rekursion bei Expansion des Makros »%s« entdeckt" #: traditional.c:917 msgid "syntax error in macro parameter list" msgstr "Syntaxfehler in Makroparameterliste" #~ msgid "no newline at end of file" #~ msgstr "Kein Newline am Dateiende" #~ msgid "unknown escape sequence: '\\%03o'" #~ msgstr "unbekannte Fluchtsequenz: '\\%03o'" #~ msgid "`%s' attribute directive ignored" #~ msgstr "Attribut-Anweisung »%s« wird ignoriert" #~ msgid "wrong number of arguments specified for `%s' attribute" #~ msgstr "falsche Anzahl an Argumenten für das Attribut »%s« angegeben" #~ msgid "`%s' attribute does not apply to types" #~ msgstr "Attribut »%s« kann nicht auf Typen angewandt werden" #~ msgid "`%s' attribute only applies to function types" #~ msgstr "Attribut »%s« kann nur auf Funktionstypen angewandt werden" #~ msgid "`%s' attribute ignored" #~ msgstr "Attribut »%s« wird ignoriert" #~ msgid "offset outside bounds of constant string" #~ msgstr "Adressabstand ist außerhalb der Grenzen der konstanten Zeichenkette" #~ msgid "second arg to `__builtin_prefetch' must be a constant" #~ msgstr "zweites Argument für »__builtin_prefetch« muss eine Konstante sein" #~ msgid "invalid second arg to __builtin_prefetch; using zero" #~ msgstr "ungültiges zweites Argument für »__builtin_prefetch«; es wird Null verwendet" #~ msgid "third arg to `__builtin_prefetch' must be a constant" #~ msgstr "drittes Argument für »__builtin_prefetch« muss eine Konstante sein" #~ msgid "invalid third arg to __builtin_prefetch; using zero" #~ msgstr "ungültiges drittes Argument für »__builtin_prefetch«; es wird Null verwendet" #~ msgid "argument of `__builtin_args_info' must be constant" #~ msgstr "Argument von »__builtin_args_info« muss konstant sein" #~ msgid "argument of `__builtin_args_info' out of range" #~ msgstr "Argument von »__builtin_args_info« außerhalb des Wertebereichs" #~ msgid "missing argument in `__builtin_args_info'" #~ msgstr "fehlendes Argument in »__builtin_args_info«" #~ msgid "`va_start' used in function with fixed args" #~ msgstr "»va_start« in Funktion mit fester Parameterzahl verwendet" #~ msgid "second parameter of `va_start' not last named argument" #~ msgstr "zweiter Parameter von »va_start« ist nicht letztgenanntes Argument" #~ msgid "`__builtin_next_arg' called without an argument" #~ msgstr "»__builtin_next_arg« ohne Argument gerufen" #~ msgid "too many arguments to function `va_start'" #~ msgstr "zu viele Argumente für »va_start«" #~ msgid "first argument to `va_arg' not of type `va_list'" #~ msgstr "erstes Argument für »va_arg« nicht vom Typ »va_list«" #~ msgid "`%s' is promoted to `%s' when passed through `...'" #~ msgstr "»%s« auf »%s« gesetzt beim Durchlaufen von »...«" #~ msgid "(so you should pass `%s' not `%s' to `va_arg')" #~ msgstr "(Sie sollten also »%s« statt »%s« an »va_arg« übergeben)" #~ msgid "invalid arg to `__builtin_frame_address'" #~ msgstr "ungültiges Argument für »__builtin_frame_address«" #~ msgid "invalid arg to `__builtin_return_address'" #~ msgstr "ungültiges Argument für »__builtin_return_address«" #~ msgid "unsupported arg to `__builtin_frame_address'" #~ msgstr "nicht unterstütztes Argument für »__builtin_frame_address«" #~ msgid "unsupported arg to `__builtin_return_address'" #~ msgstr "nicht unterstütztes Argument für »__builtin_return_address«" #~ msgid "second arg to `__builtin_expect' must be a constant" #~ msgstr "zweites Argument für »__builtin_expect« muss eine Konstante sein" #~ msgid "__builtin_longjmp second argument must be 1" #~ msgstr "zweites Argument für __builtin_longjmp muss 1 sein" #~ msgid "built-in function `%s' not currently supported" #~ msgstr "eingebaute Funktion »%s« gegenwärtig nicht unterstützt" #~ msgid "target format does not support infinity" #~ msgstr "Zielformat unterstützt nicht »unendlich«" #~ msgid "%Hsuggest explicit braces to avoid ambiguous `else'" #~ msgstr "%Hes wird empfohlen, explizite geschweifte Klammern zu setzen, um mehrdeutiges »else« zu vermeiden" #~ msgid "%J'%D' is not defined outside of function scope" #~ msgstr "%J»%D« ist außerhalb des Funktionsgültigkeitsbereiches nicht definiert" #~ msgid "string length `%d' is greater than the length `%d' ISO C%d compilers are required to support" #~ msgstr "Zeichenkettenlänge »%d« ist größer als die Länge »%d«, die von ISO-C%d-Compilern unterstützt werden muss" #~ msgid "overflow in constant expression" #~ msgstr "Überlauf in Konstanten-Ausdruck" #~ msgid "integer overflow in expression" #~ msgstr "Ganzzahlüberlauf in Ausdruck" #~ msgid "floating point overflow in expression" #~ msgstr "Gleitkommaüberlauf in Ausdruck" #~ msgid "vector overflow in expression" #~ msgstr "Vektorüberlauf in Ausdruck" #~ msgid "large integer implicitly truncated to unsigned type" #~ msgstr "große Ganzzahl implizit auf vorzeichenlosen Typen abgeschnitten" #~ msgid "negative integer implicitly converted to unsigned type" #~ msgstr "negative Ganzzahl implizit in vorzeichenlosen Typen konvertiert" #~ msgid "overflow in implicit constant conversion" #~ msgstr "Überlauf in impliziter Konstantenkonvertierung" #~ msgid "operation on `%s' may be undefined" #~ msgstr "Operation auf »%s« könnte undefiniert sein" #~ msgid "expression statement has incomplete type" #~ msgstr "Ausdrucksanweisung hat unvollständigen Typ" #~ msgid "case label does not reduce to an integer constant" #~ msgstr "case-Marke reduziert nicht auf Ganzzahlkonstante" #~ msgid "invalid truth-value expression" #~ msgstr "ungültiger Wahrheitswert-Ausdruck" #~ msgid "invalid operands to binary %s" #~ msgstr "ungültige Operanden für binäres %s" #~ msgid "comparison is always false due to limited range of data type" #~ msgstr "Vergleich ist durch beschränkten Wertebereich des Datentyps stets »unwahr«" #~ msgid "comparison is always true due to limited range of data type" #~ msgstr "Vergleich ist durch beschränkten Wertebereich des Datentyps stets »wahr«" #~ msgid "comparison of unsigned expression >= 0 is always true" #~ msgstr "Vergleich eines vorzeichenlosen Ausdrucks >= 0 ist stets »wahr«" #~ msgid "comparison of unsigned expression < 0 is always false" #~ msgstr "Vergleich eines vorzeichenlosen Ausdrucks < 0 ist stets »unwahr«" #~ msgid "pointer of type `void *' used in arithmetic" #~ msgstr "Zeiger auf Typen »void *« in Arithmetik verwendet" #~ msgid "pointer to a function used in arithmetic" #~ msgstr "Zeiger auf Funktion in Arithmetik verwendet" #~ msgid "pointer to member function used in arithmetic" #~ msgstr "Zeiger auf Elementfunktion in Arithmetik verwendet" #~ msgid "pointer to a member used in arithmetic" #~ msgstr "Zeiger auf Element in Arithmetik verwendet" #~ msgid "struct type value used where scalar is required" #~ msgstr "Wert eines struct-Typs anstelle des geforderten Skalars verwendet" #~ msgid "union type value used where scalar is required" #~ msgstr "Wert eines union-Typs anstelle des geforderten Skalars verwendet" #~ msgid "array type value used where scalar is required" #~ msgstr "Wert eines array-Typs anstelle des geforderten Skalars verwendet" #~ msgid "the address of `%D', will always evaluate as `true'" #~ msgstr "die Adresse von »%D« wird immer zu »true« auswerten" #~ msgid "suggest parentheses around assignment used as truth value" #~ msgstr "um Zuweisung, die als Wahrheitswert verwendet wird, werden Klammern vorgeschlagen" #~ msgid "invalid use of `restrict'" #~ msgstr "ungültige Verwendung von »restrict«" #~ msgid "invalid application of `sizeof' to a function type" #~ msgstr "ungültige Anwendung von »sizeof« auf einen Funktionstypen" #~ msgid "invalid application of `%s' to a void type" #~ msgstr "ungültige Anwendung von »%s« auf einen void-Typen" #~ msgid "invalid application of `%s' to an incomplete type" #~ msgstr "ungültige Anwendung von »%s« auf einen unvollständigen Typen" #~ msgid "`__alignof' applied to a bit-field" #~ msgstr "»__alignof« auf Bitfeld angewandt" #~ msgid "cannot disable built-in function `%s'" #~ msgstr "kann eingebaute Funktion »%s« nicht abschalten" #~ msgid "too few arguments to function `%s'" #~ msgstr "zu wenig Argumente für Funktion »%s«" #~ msgid "too many arguments to function `%s'" #~ msgstr "zu viele Argumente für Funktion »%s«" #~ msgid "non-floating-point argument to function `%s'" #~ msgstr "nicht-Gleitkomma-Argument für Funktion »%s«" #~ msgid "pointers are not permitted as case values" #~ msgstr "Zeiger sind nicht als case-Werte zugelassen" #~ msgid "range expressions in switch statements are non-standard" #~ msgstr "Wertebereichsausdrücke in switch-Anweisungen sind nicht standardkonform" #~ msgid "empty range specified" #~ msgstr "leerer Wertebereich angegeben" #~ msgid "duplicate (or overlapping) case value" #~ msgstr "doppelte (oder sich überschneidende) case-Werte" #~ msgid "%Jthis is the first entry overlapping that value" #~ msgstr "%Jdies ist der erste Eintrag, der diesen Wert überschneidet" #~ msgid "duplicate case value" #~ msgstr "doppelter case-Wert" #~ msgid "%Jpreviously used here" #~ msgstr "%Jbereits hier verwendet" #~ msgid "multiple default labels in one switch" #~ msgstr "mehrere Standardmarken in einem »switch«" #~ msgid "%Jthis is the first default label" #~ msgstr "%Jdies ist die erste Standardmarke" #~ msgid "taking the address of a label is non-standard" #~ msgstr "das Ermitteln der Adresse einer Marke ist nicht standardkonform" #~ msgid "%Hignoring return value of `%D', declared with attribute warn_unused_result" #~ msgstr "%Hder Rückgabewert von »%D« mit dem Attribut warn_unused_result wird ignoriert" #~ msgid "%Hignoring return value of function declared with attribute warn_unused_result" #~ msgstr "%Hder Rückgabewert der Funktion, die mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert" #~ msgid "declaration of \"%s\" shadows a parameter" #~ msgstr "Deklaration von »%s« überdeckt einen Parameter" #~ msgid "declaration of \"%s\" shadows a previous local" #~ msgstr "Deklaration von »%s« überdeckt einen vorhergehenden lokalen Bezeichner" #~ msgid "declaration of \"%s\" shadows a global declaration" #~ msgstr "Deklaration von »%s« überdeckt eine globale Deklaration" #~ msgid "%Jshadowed declaration is here" #~ msgstr "%Jverdeckte Deklaration ist hier" #~ msgid "unknown machine mode `%s'" #~ msgstr "unbekannter Maschinenzustand »%s«" #~ msgid "no data type for mode `%s'" #~ msgstr "kein Datentyp für Zustand »%s«" #~ msgid "invalid pointer mode `%s'" #~ msgstr "ungültiger Zeigermodus »%s«" #~ msgid "unable to emulate '%s'" #~ msgstr "»%s« kann nicht emuliert werden" #~ msgid "%Jsection attribute cannot be specified for local variables" #~ msgstr "%JAbschnitts-Attribut kann nicht für lokale Variablen angegeben werden" #~ msgid "%Jsection of '%D' conflicts with previous declaration" #~ msgstr "%JAbschnitt von »%D« in Konflikt mit vorheriger Deklaration" #~ msgid "%Jsection attribute not allowed for '%D'" #~ msgstr "%JAbschnitts-Attribute nicht erlaubt für »%D«" #~ msgid "%Jsection attributes are not supported for this target" #~ msgstr "%JAbschnitts-Attribute werden für dieses Ziel nicht unterstützt" #~ msgid "requested alignment is not a constant" #~ msgstr "verlangte Ausrichtung ist keine Konstante" #~ msgid "requested alignment is not a power of 2" #~ msgstr "verlangte Ausrichtung ist keine Zweierpotenz" #~ msgid "requested alignment is too large" #~ msgstr "verlangte Ausrichtung ist zu groß" #~ msgid "%Jalignment may not be specified for '%D'" #~ msgstr "%Jfür »%D« darf keine Ausrichtung angegeben werden" #~ msgid "%J'%D' defined both normally and as an alias" #~ msgstr "%J»%D« sowohl normal als auch als Alias definiert" #~ msgid "alias arg not a string" #~ msgstr "Alias-Argument ist keine Zeichenkette" #~ msgid "visibility arg not a string" #~ msgstr "Sichtbarkeitsargument ist keine Zeichenkette" #~ msgid "visibility arg must be one of \"default\", \"hidden\", \"protected\" or \"internal\"" #~ msgstr "Sichtbarkeitsargument muss »default«, »hidden«, »protected« oder »internal« sein" #~ msgid "tls_model arg not a string" #~ msgstr "Argument für tls_model ist keine Zeichenkette" #~ msgid "tls_model arg must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"" #~ msgstr "Argument für tls_model muss »local-exec«, »initial-exec«, »local-dynamic« oder »global-dynamic« sein" #~ msgid "%J'%E' attribute applies only to functions" #~ msgstr "%JAttribut »%E« kann nur auf Funktionen angewandt werden" #~ msgid "%Jcan't set '%E' attribute after definition" #~ msgstr "%Jkann Attribut »%E« nicht nach der Definition setzen" #~ msgid "`%s' attribute ignored for `%s'" #~ msgstr "Attribut »%s« ignoriert für »%s«" #~ msgid "invalid vector type for attribute `%s'" #~ msgstr "ungültiger Vektortyp für Attribut »%s«" #~ msgid "no vector mode with the size and type specified could be found" #~ msgstr "Vektorzustand mit der angegebenen Größe und dem angegebenen Typ konnte nicht gefunden werden" #~ msgid "nonnull attribute without arguments on a non-prototype" #~ msgstr "Nicht-Null-Attribut ohne Argumente für einen Nicht-Prototyp" #~ msgid "nonnull argument has invalid operand number (arg %lu)" #~ msgstr "Nicht-Null-Argument hat ungültige Operandenzahl (Argument %lu)" #~ msgid "nonnull argument with out-of-range operand number (arg %lu, operand %lu)" #~ msgstr "Nicht-Null-Argument mit Operandenzahl außerhalb des Wertebereiches (Argument %lu, Operand %lu)" #~ msgid "nonnull argument references non-pointer operand (arg %lu, operand %lu)" #~ msgstr "Nicht-Null-Argument referenziert Nicht-Zeiger-Operanden (Argument %lu, Operand %lu)" #~ msgid "null argument where non-null required (arg %lu)" #~ msgstr "Null-Argument, wo Nicht-Null erwartet (Argument %lu)" #~ msgid "cleanup arg not an identifier" #~ msgstr "Argument für cleanup ist kein Bezeichner" #~ msgid "cleanup arg not a function" #~ msgstr "Argument für cleanup ist keine Funktion" #~ msgid "%s at end of input" #~ msgstr "%s am Ende der Eingabe" #~ msgid "%s before %s'%c'" #~ msgstr "%s vor %s'%c'" #~ msgid "%s before %s'\\x%x'" #~ msgstr "%s vor %s'\\x%x'" #~ msgid "%s before string constant" #~ msgstr "%s vor Zeichenkettenkonstante" #~ msgid "%s before numeric constant" #~ msgstr "%s vor numerischer Konstante" #~ msgid "%s before \"%s\"" #~ msgstr "%s vor \"%s\"" #~ msgid "%s before '%s' token" #~ msgstr "%s vor »%s«" #~ msgid "%s" #~ msgstr "%s" #~ msgid "void value not ignored as it ought to be" #~ msgstr "void-Wert nicht ignoriert wie es sein sollte" #~ msgid "conversion to non-scalar type requested" #~ msgstr "Konvertierung zu Nicht-Skalar-Typ verlangt" #~ msgid "%Jarray '%D' assumed to have one element" #~ msgstr "%JFeld »%D« als einelementig betrachtet" #~ msgid "%Jlabel `%D' used but not defined" #~ msgstr "%JMarke »%D« verwendet, aber nicht definiert" #~ msgid "%Jlabel `%D' defined but not used" #~ msgstr "%JMarke »%D« definiert aber nicht verwendet" #~ msgid "%Jlabel `%D' declared but not defined" #~ msgstr "%JMarke »%D« deklariert, aber nicht definiert" #~ msgid "%Junused variable `%D'" #~ msgstr "%JVariable »%D« wird nicht verwendet" #~ msgid "a parameter list with an ellipsis can't match an empty parameter name list declaration" #~ msgstr "eine Parameterliste mit Auslassung passt nicht zu einer leeren Parameternamenslistendeklaration" #~ msgid "an argument type that has a default promotion can't match an empty parameter name list declaration" #~ msgstr "ein Argumenttyp mit Standard-Promotion passt nicht zu leerer Parameternamenslistendeklaration" #~ msgid "%Jprototype for '%D' declares more arguments than previous old-style definition" #~ msgstr "%JPrototyp für »%D« deklariert mehr Argumente als vorherige Definition im alten Stil" #~ msgid "%Jprototype for '%D' declares fewer arguments than previous old-style definition" #~ msgstr "%JPrototyp für »%D« deklariert weniger Argumente als vorherige Definition im alten Stil" #~ msgid "%Jprototype for '%D' declares arg %d with incompatible type" #~ msgstr "%JPrototyp für »%D« deklariert Argument %d mit inkompatiblem Typen" #~ msgid "%Jprototype for '%D' follows non-prototype definition" #~ msgstr "%JPrototyp für »%D« folgt einer Nicht-Prototyp-Definition" #~ msgid "%Jprevious definition of '%D' was here" #~ msgstr "%Jvorherige Definition von »%D« war hier" #~ msgid "%Jprevious implicit declaration of '%D' was here" #~ msgstr "%Jvorherige implizite Deklaration von »%D« war hier" #~ msgid "%Jprevious declaration of '%D' was here" #~ msgstr "%Jvorherige Deklaration von »%D« war hier" #~ msgid "%J'%D' redeclared as different kind of symbol" #~ msgstr "%J»%D« redeklariert als andere Symbolart" #~ msgid "%Jbuilt-in function '%D' declared as non-function" #~ msgstr "%Jeingebaute Funktion »%D« als Nicht-Funktion deklariert" #~ msgid "%Jshadowing built-in function '%D'" #~ msgstr "%Jeingebaute Funktion »%D« überdeckt" #~ msgid "%Jconflicting types for built-in function '%D'" #~ msgstr "%Jin Konflikt stehende Typen für eingebaute Funktion »%D«" #~ msgid "%Jconflicting types for '%D'" #~ msgstr "%Jin Konflikt stehende Typen für »%D«" #~ msgid "%Jredefinition of typedef '%D'" #~ msgstr "%JRedefinition des typedef »%D«" #~ msgid "%Jredefinition of '%D'" #~ msgstr "%JRedefinition von »%D«" #~ msgid "%Jstatic declaration of '%D' follows non-static declaration" #~ msgstr "%Jstatische Deklaration von »%D« folgt Nicht-statischer Deklaration" #~ msgid "%Jnon-static declaration of '%D' follows static declaration" #~ msgstr "%JNicht-statische-Deklaration von »%D« folgt statischer Deklaration" #~ msgid "%Jthread-local declaration of '%D' follows non-thread-local declaration" #~ msgstr "%JThread-lokale Deklaration von »%D« folgt nicht-Thread-lokaler Deklaration" #~ msgid "%Jnon-thread-local declaration of '%D' follows thread-local declaration" #~ msgstr "%JNicht-Thread-lokale Deklaration von »%D« folgt Thread-lokaler Deklaration" #~ msgid "%Jextern declaration of '%D' follows declaration with no linkage" #~ msgstr "%Jextern-Deklaration von »%D« folgt Deklaration ohne Bindung" #~ msgid "%Jdeclaration of '%D' with no linkage follows extern declaration" #~ msgstr "%JDeklaration von »%D« ohne Bindung folgt einer externen Deklaration" #~ msgid "%Jredeclaration of '%D' with no linkage" #~ msgstr "%JRedeklarationen von »%D« ohne Bindung" #~ msgid "%Jredeclaration of '%D' with different visibility (old visibility preserved)" #~ msgstr "%JRedeklaration von »%D« mit anderer Sichtbarkeit (alte Sichtbarkeit beibehalten)" #~ msgid "%Jinline declaration of '%D' follows declaration with attribute noinline" #~ msgstr "%Jinline-Deklaration von »%D« folgt Deklaration mit Attribut noinline" #~ msgid "%Jdeclaration of '%D' with attribute noinline follows inline declaration " #~ msgstr "%JDeklaration von »%D« mit Attribut noinline folgt inline-Deklaration " #~ msgid "%J'%D' declared inline after being called" #~ msgstr "%J»%D« als inline deklariert nachdem es aufgerufen wurde" #~ msgid "%J'%D' declared inline after its definition" #~ msgstr "%J»%D« nach der Definition als inline deklariert" #~ msgid "%Jvolatile declaration of '%D' follows non-volatile declaration" #~ msgstr "%J»volatile«-Deklaration von »%D« folgt nicht-»volatile«-Deklaration" #~ msgid "%Jnon-volatile declaration of '%D' follows volatile declaration" #~ msgstr "%JNicht-»volatile«-Deklaration von »%D« folgt »volatile«-Deklaration" #~ msgid "%Jconst declaration of '%D' follows non-const declaration" #~ msgstr "%Jconst-Deklaration für »%D« folgt Nicht-const Deklaration" #~ msgid "%Jnon-const declaration of '%D' follows const declaration" #~ msgstr "%JNicht-const-Deklaration von »%D« folgt const-Deklaration" #~ msgid "%Jredundant redeclaration of '%D'" #~ msgstr "%Jredundante Redeklaration von »%D«" #~ msgid "nested extern declaration of `%s'" #~ msgstr "geschachtelte extern-Deklaration von »%s«" #~ msgid "%Jprevious declaration of '%D'" #~ msgstr "%Jvorherige Deklaration von »%D«" #~ msgid "implicit declaration of function `%s'" #~ msgstr "implizite Deklaration der Funktion »%s«" #~ msgid "`%s' undeclared here (not in a function)" #~ msgstr "»%s« ist hier nicht deklariert (nicht in einer Funktion)" #~ msgid "`%s' undeclared (first use in this function)" #~ msgstr "»%s« nicht deklariert (erste Benutzung in dieser Funktion)" #~ msgid "(Each undeclared identifier is reported only once" #~ msgstr "(Jeder nicht deklarierte Bezeichner wird nur einmal aufgeführt" #~ msgid "for each function it appears in.)" #~ msgstr "für jede Funktion in der er auftritt.)" #~ msgid "label %s referenced outside of any function" #~ msgstr "Marke %s außerhalb einer Funktion referenziert" #~ msgid "duplicate label declaration `%s'" #~ msgstr "doppelte Markendeklaration »%s«" #~ msgid "%Jthis is a previous declaration" #~ msgstr "%Jdies ist eine vorherige Deklaration" #~ msgid "%Hduplicate label `%D'" #~ msgstr "%Hdoppelte Marke »%D«" #~ msgid "%J`%D' previously defined here" #~ msgstr "%J»%D« bereits hier definiert" #~ msgid "%J`%D' previously declared here" #~ msgstr "%J»%D« bereits hier deklariert" #~ msgid "%Htraditional C lacks a separate namespace for labels, identifier `%s' conflicts" #~ msgstr "%Htraditionelles C bietet keinen separaten Namespace für Marken an, Bezeichner »%s« steht in Konflikt" #~ msgid "%H`%s' defined as wrong kind of tag" #~ msgstr "%H»%s« definiert als falsche Symbolart" #~ msgid "unnamed struct/union that defines no instances" #~ msgstr "unbenannte struct/union, die keine Instanzen definiert" #~ msgid "useless keyword or type name in empty declaration" #~ msgstr "nutzloses Schlüsselwort oder Typenname in leerer Deklaration" #~ msgid "two types specified in one empty declaration" #~ msgstr "zwei Typen in einer leeren Deklaration angegeben" #~ msgid "empty declaration" #~ msgstr "leere Deklaration" #~ msgid "ISO C90 does not support `static' or type qualifiers in parameter array declarators" #~ msgstr "ISO-C90 unterstützt kein »static« oder Typkennzeichner in Parameterfelddeklaratoren" #~ msgid "ISO C90 does not support `[*]' array declarators" #~ msgstr "ISO-C90 unterstützt nicht »[*]«-Felddeklaratoren" #~ msgid "GCC does not yet properly implement `[*]' array declarators" #~ msgstr "GCC implementiert noch keine richtigen »[*]«-Felddeklaratoren" #~ msgid "static or type qualifiers in abstract declarator" #~ msgstr "static oder Typkennzeichner in abstraktem Deklarator" #~ msgid "%J'%D' is usually a function" #~ msgstr "%J»%D« ist üblicherweise eine Funktion" #~ msgid "typedef `%s' is initialized (use __typeof__ instead)" #~ msgstr "typedef »%s« ist initialisiert (benutzen Sie stattdessen __typeof__)" #~ msgid "function `%s' is initialized like a variable" #~ msgstr "Funktion »%s« ist wie eine Variable initialisiert" #~ msgid "parameter `%s' is initialized" #~ msgstr "Parameter »%s« ist initialisiert" #~ msgid "variable-sized object may not be initialized" #~ msgstr "Objekt variabler Größe darf nicht initialisiert werden" #~ msgid "variable `%s' has initializer but incomplete type" #~ msgstr "Variable »%s« hat Initialisierung, aber unvollständigen Typ" #~ msgid "elements of array `%s' have incomplete type" #~ msgstr "Elemente des Feldes »%s« haben unvollständigen Typ" #~ msgid "%Jinline function '%D' given attribute noinline" #~ msgstr "%Jinline-Funktion »%D« wurde das Attribut »noinline« gegeben" #~ msgid "%Jinitializer fails to determine size of '%D'" #~ msgstr "%JInitialisierung scheitert an Größenbestimmung von »%D«" #~ msgid "%Jarray size missing in '%D'" #~ msgstr "%JFeldgröße in »%D« fehlt" #~ msgid "%Jzero or negative size array '%D'" #~ msgstr "%JFeldgröße von »%D« ist null oder negativ" #~ msgid "%Jstorage size of '%D' isn't known" #~ msgstr "%JSpeichergröße von »%D« ist unbekannt" #~ msgid "%Jstorage size of '%D' isn't constant" #~ msgstr "%JSpeichergröße von »%D« ist nicht konstant" #~ msgid "%Jignoring asm-specifier for non-static local variable '%D'" #~ msgstr "%Jasm-Symbol für nicht-statische lokale Variable »%D« wird ignoriert" #~ msgid "ISO C forbids forward parameter declarations" #~ msgstr "ISO-C verbietet Vorwärtsdeklaration für Parameter" #~ msgid "" #~ msgstr "" #~ msgid "bit-field `%s' width not an integer constant" #~ msgstr "Breite des Bitfeldes »%s« ist keine Ganzzahlkonstante" #~ msgid "negative width in bit-field `%s'" #~ msgstr "negative Breite in Bitfeld »%s«" #~ msgid "zero width for bit-field `%s'" #~ msgstr "Breite null für Bitfeld »%s«" #~ msgid "bit-field `%s' has invalid type" #~ msgstr "Bitfeld »%s« hat ungültigen Typen" #~ msgid "type of bit-field `%s' is a GCC extension" #~ msgstr "der Typ des Bitfeldes »%s« ist eine Erweiterung des GCC" #~ msgid "width of `%s' exceeds its type" #~ msgstr "Breite von »%s« überschreitet dessen Typen" #~ msgid "`%s' is narrower than values of its type" #~ msgstr "»%s« ist schmaler als die Werte seines Typs" #~ msgid "`long long long' is too long for GCC" #~ msgstr "»long long long« ist für GCC zu lang" #~ msgid "ISO C90 does not support `long long'" #~ msgstr "ISO-C90 unterstützt nicht »long long«" #~ msgid "duplicate `%s'" #~ msgstr "doppeltes »%s«" #~ msgid "`__thread' before `extern'" #~ msgstr "»__thread« vor »extern«" #~ msgid "`__thread' before `static'" #~ msgstr "»__thread« vor »static«" #~ msgid "two or more data types in declaration of `%s'" #~ msgstr "zwei oder mehr Datentypen in Deklaration von »%s«" #~ msgid "`%s' fails to be a typedef or built in type" #~ msgstr "»%s« ist kein typedef oder eingebauter Typ" #~ msgid "type defaults to `int' in declaration of `%s'" #~ msgstr "»int« ist Standardtyp in Deklaration von »%s«" #~ msgid "both long and short specified for `%s'" #~ msgstr "sowohl »long« als auch »short« für »%s« angegeben" #~ msgid "long or short specified with char for `%s'" #~ msgstr "»long« oder »short« mit »char« für »%s« angegeben" #~ msgid "long or short specified with floating type for `%s'" #~ msgstr "»long« oder »short« mit Gleitkommatyp für »%s« angegeben" #~ msgid "the only valid combination is `long double'" #~ msgstr "die einzig gültige Kombination ist »long double«" #~ msgid "both signed and unsigned specified for `%s'" #~ msgstr "sowohl »signed« als auch »unsigned« für »%s« angegeben" #~ msgid "long, short, signed or unsigned invalid for `%s'" #~ msgstr "long, short, signed oder unsigned ist ungültig für »%s«" #~ msgid "long, short, signed or unsigned used invalidly for `%s'" #~ msgstr "long, short, signed oder unsigned ungültig verwendet für »%s«" #~ msgid "complex invalid for `%s'" #~ msgstr "complex ungültig für »%s«" #~ msgid "ISO C90 does not support complex types" #~ msgstr "ISO-C90 unterstützt nicht komplexe Typen" #~ msgid "ISO C does not support plain `complex' meaning `double complex'" #~ msgstr "ISO-C unterstützt nicht »double complex« bedeutendes »complex«" #~ msgid "ISO C does not support complex integer types" #~ msgstr "ISO-C unterstützt keine komplexen Ganzzahltypen" #~ msgid "duplicate `const'" #~ msgstr "doppeltes »const«" #~ msgid "duplicate `restrict'" #~ msgstr "doppeltes »restrict«" #~ msgid "duplicate `volatile'" #~ msgstr "doppeltes »volatile«" #~ msgid "multiple storage classes in declaration of `%s'" #~ msgstr "mehrere Speicherklassen in Deklaration von »%s«" #~ msgid "function definition declared `auto'" #~ msgstr "Funktionsdefinition deklarierte »auto«" #~ msgid "function definition declared `register'" #~ msgstr "Funktionsdefinition deklarierte »register«" #~ msgid "function definition declared `typedef'" #~ msgstr "Funktionsdefinition deklarierte »typedef«" #~ msgid "function definition declared `__thread'" #~ msgstr "Funktionsdefinition deklarierte »__thread«" #~ msgid "storage class specified for structure field `%s'" #~ msgstr "Speicherklasse für Strukturfeld »%s« angegeben" #~ msgid "storage class specified for parameter `%s'" #~ msgstr "Speicherklasse für Parameter »%s« angegeben" #~ msgid "storage class specified for typename" #~ msgstr "Speicherklasse für Typnamen angegeben" #~ msgid "`%s' initialized and declared `extern'" #~ msgstr "»%s« initialisiert und als »extern« deklariert" #~ msgid "`%s' has both `extern' and initializer" #~ msgstr "»%s« hat sowohl »extern« als auch Initialisierung" #~ msgid "file-scope declaration of `%s' specifies `auto'" #~ msgstr "Deklaration von »%s« in Datei-Sichtbarkeitsbereich spezifiziert »auto«" #~ msgid "nested function `%s' declared `extern'" #~ msgstr "geschachtelte Funktion »%s« als »extern« deklariert" #~ msgid "function-scope `%s' implicitly auto and declared `__thread'" #~ msgstr "Funktions-Gültigkeitsbereich »%s« ist implizit auto und deklarierte »__thread«" #~ msgid "static or type qualifiers in non-parameter array declarator" #~ msgstr "»static« oder Typkennzeichner in Nicht-Parameter-Felddeklarator" #~ msgid "declaration of `%s' as array of voids" #~ msgstr "Deklaration von »%s« als Feld von voids" #~ msgid "declaration of `%s' as array of functions" #~ msgstr "Deklaration von »%s« als Feld von Funtionen" #~ msgid "invalid use of structure with flexible array member" #~ msgstr "ungültige Verwendung einer Struktur mit flexiblem Feldelement" #~ msgid "size of array `%s' has non-integer type" #~ msgstr "Feldgröße von »%s« hat Nicht-Ganzzahltyp" #~ msgid "ISO C forbids zero-size array `%s'" #~ msgstr "ISO-C verbietet Feld »%s« der Größe null" #~ msgid "size of array `%s' is negative" #~ msgstr "Feldgröße von »%s« ist negativ" #~ msgid "ISO C90 forbids array `%s' whose size can't be evaluated" #~ msgstr "ISO-C90 verbietet Feld »%s«, dessen Größe nicht ausgewertet werden kann" #~ msgid "ISO C90 forbids variable-size array `%s'" #~ msgstr "ISO-C90 verbietet Feld »%s« variabler Größe" #~ msgid "size of array `%s' is too large" #~ msgstr "Feldgröße von »%s« ist zu groß" #~ msgid "ISO C90 does not support flexible array members" #~ msgstr "ISO-C90 unterstützt keine flexiblen Felder als Elemente" #~ msgid "array type has incomplete element type" #~ msgstr "Feldtyp hat unvollständigen Elementtypen" #~ msgid "`%s' declared as function returning a function" #~ msgstr "»%s« als Funktion, die eine Funktion zurückgibt, deklariert" #~ msgid "`%s' declared as function returning an array" #~ msgstr "»%s« als Funktion, die ein Feld zurückgibt, deklariert" #~ msgid "ISO C forbids qualified void function return type" #~ msgstr "ISO-C verbietet qualifiziertes void als Funktions-Rückgabetypen" #~ msgid "type qualifiers ignored on function return type" #~ msgstr "Typkennzeichner ignoriert an Funktions-Rückgabewert" #~ msgid "ISO C forbids qualified function types" #~ msgstr "ISO-C verbietet qualifizierte Funktionstypen" #~ msgid "invalid type modifier within pointer declarator" #~ msgstr "ungültiger Typmodifizierer innerhalb Zeigerdeklarator" #~ msgid "ISO C forbids const or volatile function types" #~ msgstr "ISO-C verbietet const- oder volatile-Funktionstypen" #~ msgid "variable or field `%s' declared void" #~ msgstr "Variable oder Feld »%s« als »void« deklariert" #~ msgid "attributes in parameter array declarator ignored" #~ msgstr "Attribute in Parameterfelddeklarator ignoriert" #~ msgid "invalid type modifier within array declarator" #~ msgstr "ungültiger Typmodifizierer in Felddeklarator" #~ msgid "field `%s' declared as a function" #~ msgstr "Feld »%s« als Funktion deklariert" #~ msgid "field `%s' has incomplete type" #~ msgstr "Feld »%s« hat unvollständigen Typen" #~ msgid "invalid storage class for function `%s'" #~ msgstr "ungültige Speicherklasse für Funktion »%s«" #~ msgid "`noreturn' function returns non-void value" #~ msgstr "»noreturn«-Funktion gibt nicht-void-Wert zurück" #~ msgid "cannot inline function `main'" #~ msgstr "»main« ist nicht als »inline« möglich" #~ msgid "variable previously declared `static' redeclared `extern'" #~ msgstr "als »extern« redeklarierte Variable war bereits als »static« deklariert" #~ msgid "%Jvariable '%D' declared `inline'" #~ msgstr "%JVariable »%D« als »inline« deklariert" #~ msgid "thread-local storage not supported for this target" #~ msgstr "Thread-lokaler Speicher wird für dieses Ziel nicht unterstützt" #~ msgid "function declaration isn't a prototype" #~ msgstr "Funktionsdeklaration ist kein Prototyp" #~ msgid "parameter names (without types) in function declaration" #~ msgstr "Parameternamen (ohne Typen) in Funktionsdeklaration" #~ msgid "parameter `%s' has incomplete type" #~ msgstr "Parameter »%s« hat unvollständigen Typen" #~ msgid "parameter has incomplete type" #~ msgstr "Parameter hat unvollständigen Typen" #~ msgid "\"void\" as only parameter may not be qualified" #~ msgstr "\"void\" kann als einziger Parameter nicht qualifiziert werden" #~ msgid "\"void\" must be the only parameter" #~ msgstr "\"void\" muss der einzige Parameter sein" #~ msgid "%Jparameter \"%D\" has just a forward declaration" #~ msgstr "%JParameter »%D« hat nur eine Vorwärtsdeklaration" #~ msgid "\"%s %s\" declared inside parameter list" #~ msgstr "\"%s %s\" innerhalb Parameterliste deklariert" #~ msgid "anonymous %s declared inside parameter list" #~ msgstr "anonymes %s innerhalb Parameterliste deklariert" #~ msgid "its scope is only this definition or declaration, which is probably not what you want" #~ msgstr "sein Gültigkeitsbereich umfasst nur diese Definition bzw. Deklaration, was Sie wahrscheinlich nicht wollten" #~ msgid "redefinition of `union %s'" #~ msgstr "Redefinition von »union %s«" #~ msgid "redefinition of `struct %s'" #~ msgstr "Redefinition von »struct %s«" #~ msgid "declaration does not declare anything" #~ msgstr "Deklaration deklariert nichts" #~ msgid "%Jduplicate member '%D'" #~ msgstr "%Jdoppeltes Element »%D«" #~ msgid "%s defined inside parms" #~ msgstr "%s innerhalb Parameter definiert" #~ msgid "union" #~ msgstr "Union" #~ msgid "structure" #~ msgstr "Struktur" #~ msgid "%s has no %s" #~ msgstr "%s hat kein %s" #~ msgid "struct" #~ msgstr "struct" #~ msgid "named members" #~ msgstr "benannte Elemente" #~ msgid "members" #~ msgstr "Elemente" #~ msgid "nested redefinition of `%s'" #~ msgstr "Verschachtelte Redefinition von »%s«" #~ msgid "%Jflexible array member in union" #~ msgstr "%Jflexibles Feldelement in Union" #~ msgid "%Jflexible array member not at end of struct" #~ msgstr "%Jflexibles Feld-Element nicht am Ende von struct" #~ msgid "%Jflexible array member in otherwise empty struct" #~ msgstr "%Jlexibler Feld-Element in ansonsten leerem struct" #~ msgid "%Jinvalid use of structure with flexible array member" #~ msgstr "%Jungültige Verwendung einer Struktur mit flexiblem Feld-Element" #~ msgid "union cannot be made transparent" #~ msgstr "union kann nicht transparent gemacht werden" #~ msgid "redeclaration of `enum %s'" #~ msgstr "Redeklaration von »enum %s«" #~ msgid "enum defined inside parms" #~ msgstr "enum innerhalb von Parametern definiert" #~ msgid "enumeration values exceed range of largest integer" #~ msgstr "Aufzählungswerte überschreiten Wertebereich des größten Ganzzahltypen" #~ msgid "enumerator value for `%s' not integer constant" #~ msgstr "Aufzählungswert für »%s« ist keine Ganzzahlkonstante" #~ msgid "overflow in enumeration values" #~ msgstr "Überlauf in Aufzählungswerten" #~ msgid "ISO C restricts enumerator values to range of `int'" #~ msgstr "ISO-C beschränkt Aufzählungswerte auf Bereich von »int«" #~ msgid "return type is an incomplete type" #~ msgstr "Rückgabetyp ist unvollständig" #~ msgid "return type defaults to `int'" #~ msgstr "Rückgabetyp ist auf »int« voreingestellt" #~ msgid "%Jno previous prototype for '%D'" #~ msgstr "%Jkein vorheriger Prototyp für »%D«" #~ msgid "%J'%D' was used with no prototype before its definition" #~ msgstr "%J»%D« wurde vor seiner Definition ohne Prototyp verwendet" #~ msgid "%Jno previous declaration for '%D'" #~ msgstr "%Jkeine vorherige Deklaration für »%D«" #~ msgid "%J`%D' was used with no declaration before its definition" #~ msgstr "%J»%D« wurde vor seiner Definition ohne Deklaration verwendet" #~ msgid "%Jreturn type of '%D' is not `int'" #~ msgstr "%JRückgabetyp von »%D« ist nicht »int«" #~ msgid "%Jfirst argument of '%D' should be `int'" #~ msgstr "%Jerstes Argument von »%D« sollte »int« sein" #~ msgid "%Jsecond argument of '%D' should be 'char **'" #~ msgstr "%Jzweites Argument von »%D« sollte »char **« sein" #~ msgid "%Jthird argument of '%D' should probably be 'char **'" #~ msgstr "%Jdrittes Argument von »%D« sollte wahrscheinlich »char **« sein" #~ msgid "%J'%D' takes only zero or two arguments" #~ msgstr "%J»%D« benötigt entweder null oder zwei Argumente" #~ msgid "%J'%D' is normally a non-static function" #~ msgstr "%J»%D« ist normalerweise eine Nicht-static-Funktion" #~ msgid "%Jold-style parameter declarations in prototyped function definition" #~ msgstr "%JParameterdeklarationen alten Stils in Prototyp-Funktionsdeklaration" #~ msgid "%Jparameter name omitted" #~ msgstr "%JParametername ausgelassen" #~ msgid "%Jparameter name missing from parameter list" #~ msgstr "%JParametername fehlt in Parameterliste" #~ msgid "%J\"%D\" declared as a non-parameter" #~ msgstr "%J\"%D\" als Nicht-Parameter deklariert" #~ msgid "%Jmultiple parameters named \"%D\"" #~ msgstr "%Jmehrere Parameter wurden »%D« genannt" #~ msgid "%Jparameter \"%D\" declared void" #~ msgstr "%JParameter »%D« als void deklariert" #~ msgid "%Jtype of \"%D\" defaults to \"int\"" #~ msgstr "%JTyp von »%D« ist auf »int« voreingestellt" #~ msgid "%Jparameter \"%D\" has incomplete type" #~ msgstr "%JParameter \"%D\" hat unvollständigen Typen" #~ msgid "%Jdeclaration for parameter \"%D\" but no such parameter" #~ msgstr "%Jnicht vorhandener Parameter »%D« deklariert" #~ msgid "number of arguments doesn't match prototype" #~ msgstr "Anzahl der Argumente passt nicht zum Prototypen" #~ msgid "%Hprototype declaration" #~ msgstr "%HPrototyp-Deklaration" #~ msgid "promoted argument \"%D\" doesn't match prototype" #~ msgstr "weitergegebenes Argument »%D« passt nicht zum Prototypen" #~ msgid "argument \"%D\" doesn't match prototype" #~ msgstr "Argument »%D« passt nicht zum Prototypen" #~ msgid "no return statement in function returning non-void" #~ msgstr "keine return-Anweisung in nicht void zurückgebender Funktion" #~ msgid "this function may return with or without a value" #~ msgstr "diese Funktion kann mit oder ohne Wert zurückkehren" #~ msgid "'for' loop initial declaration used outside C99 mode" #~ msgstr "Anfangsdeklaration in »for«-Schleife außerhalb C99-Modus verwendet" #~ msgid "'struct %s' declared in 'for' loop initial declaration" #~ msgstr "»struct %s« in Anfangsdeklaration einer »for«-Schleife deklariert" #~ msgid "'union %s' declared in 'for' loop initial declaration" #~ msgstr "»union %s« in Anfangsdeklaration einer »for«-Schleife deklariert" #~ msgid "'enum %s' declared in 'for' loop initial declaration" #~ msgstr "»enum %s« in Anfangsdeklaration einer »for«-Schleife deklariert" #~ msgid "%Jdeclaration of non-variable '%D' in 'for' loop initial declaration" #~ msgstr "%JDeklaration der Nicht-Variablen »%D« in Anfangsdeklaration einer »for«-Schleife" #~ msgid "%Jdeclaration of static variable '%D' in 'for' loop initial declaration" #~ msgstr "%JDeklaration der »static«-Variablen »%D« in Anfangsdeklaration einer »for«-Schleife" #~ msgid "%Jdeclaration of 'extern' variable '%D' in 'for' loop initial declaration" #~ msgstr "%JDeklaration der »extern«-Variablen »%D« in Anfangsdeklaration einer »for«-Schleife" #~ msgid "%Jredefinition of global '%D'" #~ msgstr "%JRedefinition des globalen »%D«" #~ msgid "%J'%D' previously defined here" #~ msgstr "%J»%D« bereits hier verwendet" #~ msgid "format string has invalid operand number" #~ msgstr "Formatzeichenkette hat ungültige Operandenzahl" #~ msgid "function does not return string type" #~ msgstr "Funktion gibt keinen Zeichenkettentypen zurück" #~ msgid "format string arg not a string type" #~ msgstr "Format-Zeichenkettenargument ist kein Zeichenkettentyp" #~ msgid "unrecognized format specifier" #~ msgstr "unerkannte Formatangabe" #~ msgid "`%s' is an unrecognized format function type" #~ msgstr "»%s« ist ein nicht erkannter Formatfunktionstyp" #~ msgid "'...' has invalid operand number" #~ msgstr "»...« hat ungültige Operandenzahl" #~ msgid "format string arg follows the args to be formatted" #~ msgstr "Format-Zeichenkettenargument folgt den zu formatierenden Argumenten" #~ msgid "` ' flag" #~ msgstr "» «-Kennzeichen" #~ msgid "the ` ' printf flag" #~ msgstr "das » «-printf-Kennzeichen" #~ msgid "`+' flag" #~ msgstr "»+«-Kennzeichen" #~ msgid "the `+' printf flag" #~ msgstr "das »+«-printf-Kennzeichen" #~ msgid "`#' flag" #~ msgstr "»#«-Kennzeichen" #~ msgid "the `#' printf flag" #~ msgstr "das »#«-printf-Kennzeichen" #~ msgid "`0' flag" #~ msgstr "»0«-Kennzeichen" #~ msgid "the `0' printf flag" #~ msgstr "das »0«-printf-Kennzeichen" #~ msgid "`-' flag" #~ msgstr "»-«-Kennzeichen" #~ msgid "the `-' printf flag" #~ msgstr "das »-«-printf-Kennzeichen" #~ msgid "`'' flag" #~ msgstr "»'«-Kennzeichen" #~ msgid "the `'' printf flag" #~ msgstr "das »'«-printf-Kennzeichen" #~ msgid "`I' flag" #~ msgstr "»I«-Kennzeichen" #~ msgid "the `I' printf flag" #~ msgstr "das »I«-printf-Kennzeichen" #~ msgid "field width" #~ msgstr "Feldbreite" #~ msgid "field width in printf format" #~ msgstr "Feldbreite im printf-Format" #~ msgid "precision" #~ msgstr "Genauigkeit" #~ msgid "precision in printf format" #~ msgstr "Genauigkeit im printf-Format" #~ msgid "length modifier" #~ msgstr "Längenmodifizierer" #~ msgid "length modifier in printf format" #~ msgstr "Längenmodifizierer im printf-Format" #~ msgid "assignment suppression" #~ msgstr "Zuweisungsunterdrückung" #~ msgid "the assignment suppression scanf feature" #~ msgstr "das scanf-Merkmal der Zuweisungsunterdrückung" #~ msgid "`a' flag" #~ msgstr "»a«-Kennzeichen" #~ msgid "the `a' scanf flag" #~ msgstr "das »a«-scanf-Kennzeichen" #~ msgid "field width in scanf format" #~ msgstr "Feldbreite im scanf-Format" #~ msgid "length modifier in scanf format" #~ msgstr "Längenmodifizierer im scanf-Format" #~ msgid "the `'' scanf flag" #~ msgstr "das »'«-scanf-Kennzeichen" #~ msgid "the `I' scanf flag" #~ msgstr "das »I«-scanf-Kennzeichen" #~ msgid "`_' flag" #~ msgstr "»_«-Kennzeichen" #~ msgid "the `_' strftime flag" #~ msgstr "das »_«-strftime-Kennzeichen" #~ msgid "the `-' strftime flag" #~ msgstr "das »-«-strftime-Kennzeichen" #~ msgid "the `0' strftime flag" #~ msgstr "das »0«-strftime-Kennzeichen" #~ msgid "`^' flag" #~ msgstr "»^«-Kennzeichen" #~ msgid "the `^' strftime flag" #~ msgstr "das »^«-strftime-Kennzeichen" #~ msgid "the `#' strftime flag" #~ msgstr "das »#«-strftime-Kennzeichen" #~ msgid "field width in strftime format" #~ msgstr "Feldbreite im strftime-Format" #~ msgid "`E' modifier" #~ msgstr "»E«-Modifizierer" #~ msgid "the `E' strftime modifier" #~ msgstr "der »E«-strftime-Modifizierer" #~ msgid "`O' modifier" #~ msgstr "»O«-Modifizierer" #~ msgid "the `O' strftime modifier" #~ msgstr "der »O«-strftime-Modifizierer" #~ msgid "the `O' modifier" #~ msgstr "der »O«-Modifizierer" #~ msgid "fill character" #~ msgstr "Füllzeichen" #~ msgid "fill character in strfmon format" #~ msgstr "Füllzeichen im strfmon-Format" #~ msgid "the `^' strfmon flag" #~ msgstr "das »^«-strfmon-Kennzeichen" #~ msgid "the `+' strfmon flag" #~ msgstr "das »+«-strfmon-Kennzeichen" #~ msgid "`(' flag" #~ msgstr "»(«-Kennzeichen" #~ msgid "the `(' strfmon flag" #~ msgstr "das »(«-strfmon-Kennzeichen" #~ msgid "`!' flag" #~ msgstr "»!«-Kennzeichen" #~ msgid "the `!' strfmon flag" #~ msgstr "das »!«-strfmon-Kennzeichen" #~ msgid "the `-' strfmon flag" #~ msgstr "das »-«-strfmon-Kennzeichen" #~ msgid "field width in strfmon format" #~ msgstr "Feldbreite im strfmon-Format" #~ msgid "left precision" #~ msgstr "linke Präzision" #~ msgid "left precision in strfmon format" #~ msgstr "linke Präzision im strfmon-Format" #~ msgid "right precision" #~ msgstr "rechte Präzision" #~ msgid "right precision in strfmon format" #~ msgstr "rechte Präzision im strfmon-Format" #~ msgid "length modifier in strfmon format" #~ msgstr "Längenmodifizierer im strfmon-Format" #~ msgid "function might be possible candidate for `%s' format attribute" #~ msgstr "Funktion könnte möglicher Kandidat für Formatattribut »%s« sein" #~ msgid "missing $ operand number in format" #~ msgstr "fehlende $-Operandennummer im Format" #~ msgid "%s does not support %%n$ operand number formats" #~ msgstr "%s unterstützt nicht %%n$-Operandennummerformate" #~ msgid "operand number out of range in format" #~ msgstr "Operandennummer außerhalb des Wertebereiches im Format" #~ msgid "format argument %d used more than once in %s format" #~ msgstr "Formatargument %d mehr als einmal im %s-Format verwendet" #~ msgid "format argument %d unused before used argument %d in $-style format" #~ msgstr "Formatargument %d nicht verwendet vor benutztem Argument %d im $-Stil-Format" #~ msgid "format not a string literal, format string not checked" #~ msgstr "Format ist kein Zeichenkettenliteral, Formatzeichenkette ungeprüft" #~ msgid "format not a string literal and no format arguments" #~ msgstr "Format ist kein Zeichenkettenliteral, und keine Formatargumente" #~ msgid "format not a string literal, argument types not checked" #~ msgstr "Format ist kein Zeichenkettenliteral, Argumenttypen ungeprüft" #~ msgid "too many arguments for format" #~ msgstr "zu viele Argumente für Format" #~ msgid "unused arguments in $-style format" #~ msgstr "unbenutzte Argumente in $-Stil-Format" #~ msgid "zero-length %s format string" #~ msgstr "Format-Zeichenkette %s der Länge null" #~ msgid "format is a wide character string" #~ msgstr "Format ist »wide character«-Zeichenkette" #~ msgid "unterminated format string" #~ msgstr "unbeendete Formatzeichenkette" #~ msgid "embedded `\\0' in format" #~ msgstr "eingebettetes »\\0« im Format" #~ msgid "spurious trailing `%%' in format" #~ msgstr "störendes letztes »%%« im Format" #~ msgid "repeated %s in format" #~ msgstr "wiederholtes %s im Format" #~ msgid "missing fill character at end of strfmon format" #~ msgstr "fehlendes Füllzeichen am Ende des strfmon-Formates" #~ msgid "too few arguments for format" #~ msgstr "zu wenig Argumente für Format" #~ msgid "zero width in %s format" #~ msgstr "Breite null im Format %s" #~ msgid "empty left precision in %s format" #~ msgstr "leere linke Präzision im Format %s" #~ msgid "field precision" #~ msgstr "Feldpräzision" #~ msgid "empty precision in %s format" #~ msgstr "fehlende Präzision im Format %s" #~ msgid "%s does not support the `%s' %s length modifier" #~ msgstr "%s unterstützt nicht den Längenmodifizierer »%s« %s" #~ msgid "conversion lacks type at end of format" #~ msgstr "Konvertierung fehlt der Typ am Ende des Formates" #~ msgid "unknown conversion type character `%c' in format" #~ msgstr "unbekanntes Konvertierungstyp-Zeichen »%c« im Format" #~ msgid "unknown conversion type character 0x%x in format" #~ msgstr "unbekanntes Konvertierungstyp-Zeichen 0x%x im Format" #~ msgid "%s does not support the `%%%c' %s format" #~ msgstr "%s unterstützt nicht das Format »%%%c« %s" #~ msgid "%s used with `%%%c' %s format" #~ msgstr "%s verwendet mit Format »%%%c« %s" #~ msgid "%s does not support %s" #~ msgstr "%s unterstützt nicht %s" #~ msgid "%s does not support %s with the `%%%c' %s format" #~ msgstr "%s unterstützt nicht %s mit dem Format »%%%c« %s" #~ msgid "%s ignored with %s and `%%%c' %s format" #~ msgstr "%s ignoriert mit %s und Format »%%%c« %s" #~ msgid "%s ignored with %s in %s format" #~ msgstr "%s ignoriert mit %s im Format %s" #~ msgid "use of %s and %s together with `%%%c' %s format" #~ msgstr "Verwendung von %s und %s zusammen mit Format »%%%c« %s" #~ msgid "use of %s and %s together in %s format" #~ msgstr "Verwendung von %s und %s zusammen im Format %s" #~ msgid "`%%%c' yields only last 2 digits of year in some locales" #~ msgstr "»%%%c« liefert in manchen Locales nur die letzten 2 Ziffern des Jahres" #~ msgid "`%%%c' yields only last 2 digits of year" #~ msgstr "»%%%c« liefert nur die letzten 2 Ziffern des Jahres" #~ msgid "no closing `]' for `%%[' format" #~ msgstr "kein schließendes »]« für »%%[«-Format" #~ msgid "use of `%s' length modifier with `%c' type character" #~ msgstr "Verwendung des »%s«-Längenmodifizierers mit »%c«-Typ-Zeichen" #~ msgid "%s does not support the `%%%s%c' %s format" #~ msgstr "%s unterstützt nicht das Format »%%%s%c« %s" #~ msgid "operand number specified with suppressed assignment" #~ msgstr "Operandennummer mit unterdrückter Zuweisung angegeben" #~ msgid "operand number specified for format taking no argument" #~ msgstr "Operandennummer für Format ohne Argumente angegeben" #~ msgid "writing through null pointer (arg %d)" #~ msgstr "Schreiben mit Null-Zeiger (Argument %d)" #~ msgid "reading through null pointer (arg %d)" #~ msgstr "Lesen mit Null-Zeiger (Argument %d)" #~ msgid "writing into constant object (arg %d)" #~ msgstr "Schreiben in konstantes Objekt (Argument %d)" #~ msgid "extra type qualifiers in format argument (arg %d)" #~ msgstr "zusätzliche Typqualifizierer in Format-Argument (Argument %d)" #~ msgid "format argument is not a pointer (arg %d)" #~ msgstr "Format-Argument ist kein Zeiger (Argument %d)" #~ msgid "format argument is not a pointer to a pointer (arg %d)" #~ msgstr "Format-Argument ist kein Zeiger auf einen Zeiger (Argument %d)" #~ msgid "pointer" #~ msgstr "Zeiger" #~ msgid "different type" #~ msgstr "anderer Typ" #~ msgid "%s is not type %s (arg %d)" #~ msgstr "%s ist nicht vom Typ %s (Argument %d)" #~ msgid "%s format, %s arg (arg %d)" #~ msgstr "%s Format, %s Argument (Argument %d)" #~ msgid "args to be formatted is not '...'" #~ msgstr "zu formatierendes Argument ist nicht »...«" #~ msgid "strftime formats cannot format arguments" #~ msgstr "strftime-Formate können keine Argumente formatieren" #~ msgid "ignoring duplicate directory \"%s\"\n" #~ msgstr "doppeltes Verzeichnis »%s« wird ignoriert\n" #~ msgid " as it is a non-system directory that duplicates a system directory\n" #~ msgstr " da es ein Nicht-Systemverzeichnis ist, das ein Systemverzeichnis dupliziert\n" #~ msgid "ignoring nonexistent directory \"%s\"\n" #~ msgstr "nicht vorhandenes Verzeichnis »%s« wird ignoriert\n" #~ msgid "#include \"...\" search starts here:\n" #~ msgstr "#include \"...\" - Suche beginnt hier:\n" #~ msgid "#include <...> search starts here:\n" #~ msgstr "#include <...> - Suche beginnt hier:\n" #~ msgid "End of search list.\n" #~ msgstr "Ende der Suchliste.\n" #~ msgid "badly nested C headers from preprocessor" #~ msgstr "schlecht geschachtelte C-Header vom Präprozessor" #~ msgid "ignoring #pragma %s %s" #~ msgstr "ignoriere #pragma %s %s" #~ msgid "%Hstray '@' in program" #~ msgstr "%Hverirrtes »@« im Programm" #~ msgid "stray '%c' in program" #~ msgstr "verirrtes »%c« im Programm" #~ msgid "stray '\\%o' in program" #~ msgstr "verirrtes »\\%o« im Programm" #~ msgid "this decimal constant is unsigned only in ISO C90" #~ msgstr "diese Dezimalkonstante ist nur in ISO-C90 vorzeichenlos" #~ msgid "this decimal constant would be unsigned in ISO C90" #~ msgstr "diese Dezimalkonstante wäre in ISO-C90 vorzeichenlos" #~ msgid "integer constant is too large for \"%s\" type" #~ msgstr "Ganzzahlkonstante ist zu groß für »%s«-Typ" #~ msgid "floating constant exceeds range of \"%s\"" #~ msgstr "Gleitkommakonstante überschreitet Wertebereich von »%s«" #~ msgid "traditional C rejects string constant concatenation" #~ msgstr "traditionelles C weist Stringkonstantenverkettung zurück" #~ msgid "%Jfunction '%F' can never be inlined because it is supressed using -fno-inline" #~ msgstr "%JFunktion »%F« kann nie inline sein, da dies mit -fno-inline unterdrückt wird" #~ msgid "%Jfunction '%F' can never be inlined because it might not be bound within this unit of translation" #~ msgstr "%JFunktion »%F« kann nie inline sein, da sie nicht in diese Übersetzungseinheit gebunden wird" #~ msgid "%Jfunction '%F' can never be inlined because it uses attributes conflicting with inlining" #~ msgstr "%JFunktion »%F« kann nie inline sein, da sie mit inline in Konflikt stehende Attribute hat" #~ msgid "%Jfunction '%F' can never be inlined because it has pending sizes" #~ msgstr "%JFunktion »%F« kann nie inline sein, da sie noch offene Größen hat" #~ msgid "%Jnested function '%F' can never be inlined because it has possibly saved pending sizes" #~ msgstr "%Jdie geschachtelte Funktion »%F« kann nie inline sein, da sie möglicherweise gespeicherte, noch offene Größen hat" #~ msgid "no class name specified with \"%s\"" #~ msgstr "kein Klassenname mit \"%s\" angegeben" #~ msgid "assertion missing after \"%s\"" #~ msgstr "Behauptung fehlt hinter \"%s\"" #~ msgid "macro name missing after \"%s\"" #~ msgstr "Makroname fehlt hinter \"%s\"" #~ msgid "missing path after \"%s\"" #~ msgstr "fehlender Pfad hinter \"%s\"" #~ msgid "missing filename after \"%s\"" #~ msgstr "fehlender Dateiname hinter \"%s\"" #~ msgid "missing makefile target after \"%s\"" #~ msgstr "fehlendes Makefile-Ziel hinter \"%s\"" #~ msgid "-I- specified twice" #~ msgstr "-I- doppelt angegeben" #~ msgid "switch \"%s\" is no longer supported" #~ msgstr "Option »%s« wird nicht mehr unterstützt" #~ msgid "-fhandle-exceptions has been renamed -fexceptions (and is now on by default)" #~ msgstr "-fhandle-exceptions wurde in -fexceptions umbenannt (und ist nun voreingestellt)" #~ msgid "output filename specified twice" #~ msgstr "Ausgabedatei doppelt angegeben" #~ msgid "-Wformat-y2k ignored without -Wformat" #~ msgstr "-Wformat-y2k wird ohne -Wformat ignoriert" #~ msgid "-Wformat-extra-args ignored without -Wformat" #~ msgstr "-Wformat-extra-args wird ohne -Wformat ignoriert" #~ msgid "-Wformat-zero-length ignored without -Wformat" #~ msgstr "-Wformat-zero-length wird ohne -Wformat ignoriert" #~ msgid "-Wformat-nonliteral ignored without -Wformat" #~ msgstr "-Wformat-nonliteral wird ohne -Wformat ignoriert" #~ msgid "-Wformat-security ignored without -Wformat" #~ msgstr "-Wformat-security wird ohne -Wformat ignoriert" #~ msgid "-Wmissing-format-attribute ignored without -Wformat" #~ msgstr "-Wmissing-format-attribute wird ohne -Wformat ignoriert" #~ msgid "opening output file %s: %m" #~ msgstr "Ausgabedatei »%s« wird geöffnet: %m" #~ msgid "too many filenames given. Type %s --help for usage" #~ msgstr "zu viele Dateinamen angegeben. Geben sie »%s --help« für Hilfe ein" #~ msgid "YYDEBUG not defined" #~ msgstr "YYDEBUG ist nicht definiert" #~ msgid "opening dependency file %s: %m" #~ msgstr "Abhängigkeitsdatei »%s« wird geöffnet: %m" #~ msgid "closing dependency file %s: %m" #~ msgstr "Abhängigkeitsdatei »%s« wird geschlossen: %m" #~ msgid "when writing output to %s: %m" #~ msgstr "beim Schreiben der Ausgabe nach %s: %m" #~ msgid "to generate dependencies you must specify either -M or -MM" #~ msgstr "um Abhängigkeiten zu erzeugen, müssen Sie entweder -M oder -MM angeben" #~ msgid "" #~ msgstr "" #~ msgid "" #~ msgstr "" #~ msgid "too late for # directive to set debug directory" #~ msgstr "zu spät für »#«-Direktive, um Debug-Verzeichnis festzulegen" #~ msgid "syntax error" #~ msgstr "Syntaxfehler" #~ msgid "syntax error: cannot back up" #~ msgstr "Syntaxfehler: es kann nicht zurückgesetzt werden" #~ msgid "ISO C forbids an empty source file" #~ msgstr "ISO-C erlaubt keine leeren Quelldateien" #~ msgid "argument of `asm' is not a constant string" #~ msgstr "Argument von »asm« ist keine konstante Zeichenkette" #~ msgid "ISO C forbids data definition with no type or storage class" #~ msgstr "ISO-C verbietet Datendefinition ohne Typ und Speicherklasse" #~ msgid "data definition has no type or storage class" #~ msgstr "Datendefinition hat keinen Typ oder Speicherklasse" #~ msgid "ISO C does not allow extra `;' outside of a function" #~ msgstr "ISO-C erlaubt kein extra »;« außerhalb einer Funktion" #~ msgid "`sizeof' applied to a bit-field" #~ msgstr "»sizeof«-Operator auf ein Bitfeld angewandt" #~ msgid "ISO C forbids omitting the middle term of a ?: expression" #~ msgstr "ISO-C verbietet das Weglassen des mittleren Terms eines ?:-Ausdruckes" #~ msgid "ISO C89 forbids compound literals" #~ msgstr "ISO-C89 verbietet zusammengesetzte Literale" #~ msgid "ISO C forbids braced-groups within expressions" #~ msgstr "ISO-C verbietet geklammerte Gruppen innerhalb von Ausdrücken" #~ msgid "first argument to __builtin_choose_expr not a constant" #~ msgstr "das erste Argument für __builtin_choose_expr ist keine Konstante" #~ msgid "traditional C rejects ISO C style function definitions" #~ msgstr "traditionelles C weist Funktionsdefinitionen im ISO-C-Stil zurück" #~ msgid "old-style parameter declaration" #~ msgstr "Parameterdeklaration alten Stils" #~ msgid "`%s' is not at beginning of declaration" #~ msgstr "»%s« ist nicht am Beginn einer Deklaration" #~ msgid "`typeof' applied to a bit-field" #~ msgstr "»typeof« auf ein Bitfeld angewandt" #~ msgid "ISO C forbids empty initializer braces" #~ msgstr "ISO-C verbietet leere Initialisierungsklammern" #~ msgid "ISO C89 forbids specifying subobject to initialize" #~ msgstr "ISO-C89 verbietet die Angabe von zu initialisierenden Unterobjekten" #~ msgid "obsolete use of designated initializer without `='" #~ msgstr "veraltete Verwendung einer bestimmten Initialisierung ohne »=«" #~ msgid "obsolete use of designated initializer with `:'" #~ msgstr "veraltete Verwendung einer bestimmten Initialisierung mit »:«" #~ msgid "ISO C forbids specifying range of elements to initialize" #~ msgstr "ISO-C verbietet die Angabe eines zu initialisierenden Wertebereiches" #~ msgid "ISO C forbids nested functions" #~ msgstr "ISO-C verbietet verschachtelte Funktionen" #~ msgid "ISO C forbids forward references to `enum' types" #~ msgstr "ISO-C verbietet Vorwärts-Referenzen auf »enum«-Typen" #~ msgid "comma at end of enumerator list" #~ msgstr "Komma am Ende der Aufzählungsliste" #~ msgid "no semicolon at end of struct or union" #~ msgstr "kein Semikolon am Ende von »struct« oder »union«" #~ msgid "extra semicolon in struct or union specified" #~ msgstr "zusätzliches Semikolon in »struct« oder »union« angegeben" #~ msgid "ISO C doesn't support unnamed structs/unions" #~ msgstr "ISO-C unterstützt keine namenlosen structs/unions" #~ msgid "ISO C forbids member declarations with no members" #~ msgstr "ISO-C verbietet Elementdeklarationen ohne Elemente" #~ msgid "label at end of compound statement" #~ msgstr "Marke am Ende einer Verbundanweisung" #~ msgid "ISO C90 forbids mixed declarations and code" #~ msgstr "ISO-C90 verbietet gemischte Deklarationen und Code" #~ msgid "ISO C forbids label declarations" #~ msgstr "ISO-C verbietet Markendeklarationen" #~ msgid "braced-group within expression allowed only inside a function" #~ msgstr "geklammerte Gruppe innerhalb eines Ausdrucks nur in Funktion erlaubt" #~ msgid "empty body in an else-statement" #~ msgstr "leerer Körper in einer else-Anweisung" #~ msgid "%Hempty body in an if-statement" #~ msgstr "%Hleerer Körper in einer if-Anweisung" #~ msgid "break statement not within loop or switch" #~ msgstr "break-Anweisung nicht innerhalb einer Schleife oder »switch«" #~ msgid "continue statement not within a loop" #~ msgstr "continue-Anweisung nicht innerhalb einer Schleife" #~ msgid "ISO C forbids `goto *expr;'" #~ msgstr "ISO-C verbietet »goto *expr;«" #~ msgid "ISO C requires a named argument before `...'" #~ msgstr "ISO-C erfordert ein benanntes Argument vor »...«" #~ msgid "`...' in old-style identifier list" #~ msgstr "»...« in einer Bezeichnerliste alten Stils" #~ msgid "syntax error; also virtual memory exhausted" #~ msgstr "Syntaxfehler; auch virtueller Speicher verbraucht" #~ msgid "parser stack overflow" #~ msgstr "Parser-Keller-Überlauf" #~ msgid "syntax error at '%s' token" #~ msgstr "Syntaxfehler beim Token »%s«" #~ msgid "can't create precompiled header %s: %m" #~ msgstr "der vorkompilierte Header »%s« kann nicht erzeugt werden: %m" #~ msgid "can't write to %s: %m" #~ msgstr "in %s kann nicht geschrieben werden: %m" #~ msgid "`%s' is not a valid output file" #~ msgstr "»%s« ist keine gültige Ausgabedatei" #~ msgid "can't write %s: %m" #~ msgstr "%s kann nicht geschrieben werden: %m" #~ msgid "can't seek in %s: %m" #~ msgstr "in %s kann nicht positioniert werden: %m" #~ msgid "can't read %s: %m" #~ msgstr "%s kann nicht gelesen werden: %m" #~ msgid "%s: not compatible with this GCC version" #~ msgstr "%s: nicht kompatibel mit dieser Version des GCC" #~ msgid "%s: not for %s" #~ msgstr "%s: nicht für %s" #~ msgid "%s: not a PCH file" #~ msgstr "%s: keine PCH-Datei" #~ msgid "%s: created on host `%.*s', but used on host `%s'" #~ msgstr "%s: auf Rechner »%.*s« erzeugt, aber auf Rechner »%s« verwendet" #~ msgid "%s: created for target `%.*s', but used for target `%s'" #~ msgstr "%s: für das Ziel »%.*s« erzeugt, aber für das Ziel »%s« verwendet" #~ msgid "%s: created by version `%.*s', but this is version `%s'" #~ msgstr "%s: durch Version »%.*s« erzeugt, aber dies ist Version »%s«" #~ msgid "%s: created with -g%s, but used with -g%s" #~ msgstr "%s: mit -g%s erzeugt, aber mit -g%s verwendet" #~ msgid "%s: had text segment at different address" #~ msgstr "%s: Textsegment trat an anderer Adresse auf" #~ msgid "calling fdopen" #~ msgstr "fdopen wird aufgerufen" #~ msgid "reading" #~ msgstr "Lesen" #~ msgid "#pragma pack (pop) encountered without matching #pragma pack (push, )" #~ msgstr "#pragma pack (pop) gefunden ohne passendes #pragma pack (push, )" #~ msgid "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, )" #~ msgstr "#pragma pack(pop, %s) gefunden ohne passendes #pragma pack(push, %s, )" #~ msgid "#pragma pack(push[, id], ) is not supported on this target" #~ msgstr "#pragma pack(push[, id], ) wird von diesem Ziel nicht unterstützt" #~ msgid "#pragma pack(pop[, id], ) is not supported on this target" #~ msgstr "#pragma pack(pop[, id], ) wird von diesem Ziel nicht unterstützt" #~ msgid "missing '(' after '#pragma pack' - ignored" #~ msgstr "fehlendes »(« hinter »#pragma pack« - ignoriert" #~ msgid "malformed '#pragma pack' - ignored" #~ msgstr "falsch geformtes »#pragma pack« - ignoriert" #~ msgid "malformed '#pragma pack(push[, id], )' - ignored" #~ msgstr "falsch geformtes »#pragma pack(push[, id], )« - ignoriert" #~ msgid "malformed '#pragma pack(pop[, id])' - ignored" #~ msgstr "falsch geformtes »#pragma pack(pop[, id])« - ignoriert" #~ msgid "unknown action '%s' for '#pragma pack' - ignored" #~ msgstr "unbekannte Aktion »%s« für »#pragma pack« - ignoriert" #~ msgid "junk at end of '#pragma pack'" #~ msgstr "Ausschuss am Ende von »#pragma pack«" #~ msgid "alignment must be a small power of two, not %d" #~ msgstr "Ausrichtung muss eine kleine Zweierpotenz sein, nicht %d" #~ msgid "%Japplying #pragma weak '%D' after first use results in unspecified behavior" #~ msgstr "%JAnwendung von #pragma weak »%D« nach erster Benutzung führt zu nicht spezifiziertem Verhalten" #~ msgid "malformed #pragma weak, ignored" #~ msgstr "falsch geformtes #pragma weak, ignoriert" #~ msgid "junk at end of #pragma weak" #~ msgstr "Ausschuss am Ende von #pragma weak" #~ msgid "malformed #pragma redefine_extname, ignored" #~ msgstr "falsch geformtes #pragma redefine_extname, ignoriert" #~ msgid "junk at end of #pragma redefine_extname" #~ msgstr "Ausschuss am Ende von #pragma redefine_extname" #~ msgid "#pragma redefine_extname conflicts with declaration" #~ msgstr "#pragma redefine_extname steht in Konflikt mit Deklaration" #~ msgid "malformed #pragma extern_prefix, ignored" #~ msgstr "falsch geformtes #pragma extern_prefix, ignoriert" #~ msgid "junk at end of #pragma extern_prefix" #~ msgstr "Ausschuss am Ende von #pragma extern_prefix" #~ msgid "asm declaration conflicts with previous rename" #~ msgstr "asm-Deklaration steht in Konflikt mit vorheriger Umbenennung" #~ msgid "destructor needed for `%D'" #~ msgstr "Destruktor für »%D« benötigt" #~ msgid "where case label appears here" #~ msgstr "wobei die case-Marke hier auftritt" #~ msgid "(enclose actions of previous case statements requiring destructors in their own scope.)" #~ msgstr "(schließen Sie Aktionen vorheriger case-Anweisungen, die Destruktoren benötigen, in ihrem eigenen Gültigkeitsbereich ein)" #~ msgid "%s qualifier ignored on asm" #~ msgstr "%s-Qualifizierer für asm ignoriert" #~ msgid "will never be executed" #~ msgstr "wird niemals ausgeführt" #~ msgid "`%s' has an incomplete type" #~ msgstr "»%s« hat unvollständigen Typ" #~ msgid "invalid use of void expression" #~ msgstr "falsche Benutzung eines void-Ausdruckes" #~ msgid "invalid use of flexible array member" #~ msgstr "falsche Benutzung eines flexiblen Feldelements" #~ msgid "invalid use of array with unspecified bounds" #~ msgstr "falsche Benutzung eines Feldes mit unbekannten Grenzen" #~ msgid "invalid use of undefined type `%s %s'" #~ msgstr "falsche Benutzung des undefinierten Typs »%s %s«" #~ msgid "invalid use of incomplete typedef `%s'" #~ msgstr "falsche Benutzung des unvollständigen typedef »%s«" #~ msgid "function types not truly compatible in ISO C" #~ msgstr "Funktionstypen nicht wirklich kompatibel in ISO-C" #~ msgid "types are not quite compatible" #~ msgstr "Typen nicht sehr kompatibel" #~ msgid "function return types not compatible due to `volatile'" #~ msgstr "Funktionsrückgabetypen nicht kompatibel wegen »volatile«" #~ msgid "arithmetic on pointer to an incomplete type" #~ msgstr "Arithmetik mit Zeiger auf unvollständigen Typen" #~ msgid "%s has no member named `%s'" #~ msgstr "%s hat kein Element namens »%s«" #~ msgid "request for member `%s' in something not a structure or union" #~ msgstr "Anfrage nach Element »%s« in etwas, was keine Struktur oder Variante ist" #~ msgid "dereferencing pointer to incomplete type" #~ msgstr "Dereferenzierung eines Zeigers auf unvollständigen Typen" #~ msgid "dereferencing `void *' pointer" #~ msgstr "Dereferenzierung eines »void *«-Zeigers" #~ msgid "invalid type argument of `%s'" #~ msgstr "falsches Typ-Argument von »%s«" #~ msgid "subscript missing in array reference" #~ msgstr "Index fehlt in Feldreferenz" #~ msgid "array subscript has type `char'" #~ msgstr "Feldindex hat Typ »char«" #~ msgid "array subscript is not an integer" #~ msgstr "Feldindex ist keine Ganzzahl" #~ msgid "ISO C forbids subscripting `register' array" #~ msgstr "ISO-C verbietet, ein »register«-Array zu indizieren" #~ msgid "ISO C90 forbids subscripting non-lvalue array" #~ msgstr "ISO-C90 verbietet, ein Nicht-L-Wert-Feld zu indizieren" #~ msgid "subscript has type `char'" #~ msgstr "Index hat Typ »char«" #~ msgid "subscripted value is neither array nor pointer" #~ msgstr "indizierter Wert ist weder ein Feld noch ein Zeiger" #~ msgid "local declaration of `%s' hides instance variable" #~ msgstr "lokale Deklaration von »%s« verdeckt Instanzvariable" #~ msgid "called object is not a function" #~ msgstr "gerufenes Objekt ist keine Funktion" #~ msgid "function called through a non-compatible type" #~ msgstr "Funktion über nicht kompatiblen Typen aufgerufen" #~ msgid "too many arguments to function" #~ msgstr "zu viele Argumente für Funktion" #~ msgid "type of formal parameter %d is incomplete" #~ msgstr "Typ des formalen Parameters %d ist unvollständig" #~ msgid "%s as integer rather than floating due to prototype" #~ msgstr "%s als Ganzzahl statt Gleitkomma aufgrund des Prototyps" #~ msgid "%s as integer rather than complex due to prototype" #~ msgstr "%s als Ganzzahl statt komplex aufgrund des Prototyps" #~ msgid "%s as complex rather than floating due to prototype" #~ msgstr "%s als komplex statt Gleitkomma aufgrund des Prototyps" #~ msgid "%s as floating rather than integer due to prototype" #~ msgstr "%s als Gleitkomma statt Ganzzahl aufgrund des Prototyps" #~ msgid "%s as complex rather than integer due to prototype" #~ msgstr "%s als komplex statt Ganzzahl aufgrund des Prototyps" #~ msgid "%s as floating rather than complex due to prototype" #~ msgstr "%s als Gleitkomma statt komplex aufgrund des Prototyps" #~ msgid "%s as `float' rather than `double' due to prototype" #~ msgstr "%s als »float« statt »double« aufgrund des Prototyps" #~ msgid "%s with different width due to prototype" #~ msgstr "%s mit anderer Breite aufgrund des Prototyps" #~ msgid "%s as unsigned due to prototype" #~ msgstr "%s als vorzeichenlos aufgrund des Prototyps" #~ msgid "%s as signed due to prototype" #~ msgstr "%s als vorzeichenbehaftet aufgrund des Prototyps" #~ msgid "too few arguments to function" #~ msgstr "zu wenige Argumente für Funktion" #~ msgid "suggest parentheses around + or - inside shift" #~ msgstr "Klammern um + oder - innerhalb von Schiebeoperation empfohlen" #~ msgid "suggest parentheses around && within ||" #~ msgstr "Klammern um && innerhalb von || empfohlen" #~ msgid "suggest parentheses around arithmetic in operand of |" #~ msgstr "Klammern um Arithmetik in Operand von | empfohlen" #~ msgid "suggest parentheses around comparison in operand of |" #~ msgstr "Klammern um Vergleich in Operand von | empfohlen" #~ msgid "suggest parentheses around arithmetic in operand of ^" #~ msgstr "Klammern um Arithmetik in Operand von ^ empfohlen" #~ msgid "suggest parentheses around comparison in operand of ^" #~ msgstr "Klammern um Vergleich in Operand von ^ empfohlen" #~ msgid "suggest parentheses around + or - in operand of &" #~ msgstr "Klammern um + oder - in Operand von & empfohlen" #~ msgid "suggest parentheses around comparison in operand of &" #~ msgstr "Klammern um Vergleich in Operand von & empfohlen" #~ msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" #~ msgstr "Vergleiche wie X<=Y<=Z haben nicht ihre mathematische Bedeutung" #~ msgid "pointer of type `void *' used in subtraction" #~ msgstr "Zeiger des Typs »void *« in Subtraktion verwendet" #~ msgid "pointer to a function used in subtraction" #~ msgstr "Zeiger auf eine Funktion in Subtraktion verwendet" #~ msgid "wrong type argument to unary plus" #~ msgstr "Argument falschen Typs für unäres Plus" #~ msgid "wrong type argument to unary minus" #~ msgstr "Argument falschen Typs für unäres Minus" #~ msgid "ISO C does not support `~' for complex conjugation" #~ msgstr "ISO-C unterstützt nicht »~« für komplexe Konjugation" #~ msgid "wrong type argument to bit-complement" #~ msgstr "Argument falschen Typs für Bit-Komplement" #~ msgid "wrong type argument to abs" #~ msgstr "Argument falschen Typs für abs" #~ msgid "wrong type argument to conjugation" #~ msgstr "Argument falschen Typs für Konjugation" #~ msgid "wrong type argument to unary exclamation mark" #~ msgstr "Argument falschen Typs für unäres Ausrufungszeichen" #~ msgid "ISO C does not support `++' and `--' on complex types" #~ msgstr "ISO-C unterstützt kein »++« und »--« für komplexe Typen" #~ msgid "wrong type argument to increment" #~ msgstr "Argument falschen Typs für Inkrementierung" #~ msgid "wrong type argument to decrement" #~ msgstr "Argument falschen Typs für Dekrementierung" #~ msgid "increment of pointer to unknown structure" #~ msgstr "Erhöhung eines Zeigers auf unbekannte Struktur" #~ msgid "decrement of pointer to unknown structure" #~ msgstr "Verminderung eines Zeigers auf unbekannte Struktur" #~ msgid "invalid lvalue in unary `&'" #~ msgstr "ungültiger L-Wert in unärem »&«" #~ msgid "attempt to take address of bit-field structure member `%s'" #~ msgstr "Versuch, die Adresse des Bitfeld-Element »%s« einer Struktur zu verwenden" #~ msgid "use of conditional expressions as lvalues is deprecated" #~ msgstr "die Verwendung bedingter Ausdrücke als L-Werte ist veraltet" #~ msgid "use of compound expressions as lvalues is deprecated" #~ msgstr "Verwendung zusammengesetzter Ausdrücke als L-Werte ist veraltet" #~ msgid "use of cast expressions as lvalues is deprecated" #~ msgstr "die Verwendung von cast-Ausdrücken als L-Werte ist veraltet" #~ msgid "%s of read-only member `%s'" #~ msgstr "%s des schreibgeschützten Elementes »%s«" #~ msgid "%s of read-only variable `%s'" #~ msgstr "%s der schreibgeschützten Variable »%s«" #~ msgid "%s of read-only location" #~ msgstr "%s der schreibgeschützten Speicherstelle" #~ msgid "cannot take address of bit-field `%s'" #~ msgstr "die Adresse des Bit-Feldes »%s« kann nicht ermittelt werden" #~ msgid "global register variable `%s' used in nested function" #~ msgstr "globale Register-Variable »%s« in verschachtelter Funktion verwendet" #~ msgid "register variable `%s' used in nested function" #~ msgstr "Register-Variable »%s« in verschachtelter Funktion verwendet" #~ msgid "address of global register variable `%s' requested" #~ msgstr "Adresse der globalen Variable »%s« angefordert" #~ msgid "cannot put object with volatile field into register" #~ msgstr "kann kein Objekt mit volatile-Feld in Register laden" #~ msgid "address of register variable `%s' requested" #~ msgstr "Adresse der Register-Variablen »%s« angefordert" #~ msgid "signed and unsigned type in conditional expression" #~ msgstr "Vorzeichenloser und -behafteter Typ in bedingtem Ausdruck" #~ msgid "ISO C forbids conditional expr with only one void side" #~ msgstr "ISO-C verbietet bedingten Ausdruck mit nur einer void-Seite" #~ msgid "ISO C forbids conditional expr between `void *' and function pointer" #~ msgstr "ISO-C verbietet bedingten Ausdruck zwischen »void *« und Funktionszeiger" #~ msgid "pointer type mismatch in conditional expression" #~ msgstr "Zeigertyp passt nicht in bedingtem Ausdruck" #~ msgid "pointer/integer type mismatch in conditional expression" #~ msgstr "Zeiger-/Ganzzahltyp passt nicht in bedingtem Ausdruck" #~ msgid "type mismatch in conditional expression" #~ msgstr "Typ passt nicht in bedingtem Ausdruck" #~ msgid "left-hand operand of comma expression has no effect" #~ msgstr "linker Operand des Komma-Ausdrucks hat keinen Effekt" #~ msgid "cast specifies array type" #~ msgstr "Typkonvertierung gibt Feldtyp an" #~ msgid "cast specifies function type" #~ msgstr "Typkonvertierung gibt Funktionstyp an" #~ msgid "ISO C forbids casting nonscalar to the same type" #~ msgstr "ISO-C verbietet Typkonvertierung von Nicht-Skalar auf selben Typen" #~ msgid "ISO C forbids casts to union type" #~ msgstr "ISO-C verbietet Typkonvertierung auf union-Typ" #~ msgid "cast to union type from type not present in union" #~ msgstr "Typkonvertierung in union-Typ von nicht in union vorhandenem Typen" #~ msgid "cast adds new qualifiers to function type" #~ msgstr "Typkonvertierung fügt neue Typqualifizierer zu Funktionstypen hinzu" #~ msgid "cast discards qualifiers from pointer target type" #~ msgstr "Typkonvertierung streicht Qualifizierer von Zeiger-Zieltyp" #~ msgid "cast increases required alignment of target type" #~ msgstr "Typkonvertierung erfordert Ausrichtung des Zieltyps" #~ msgid "cast from pointer to integer of different size" #~ msgstr "Typkonvertierung von Zeiger auf Ganzzahl anderer Breite" #~ msgid "cast does not match function type" #~ msgstr "Typkonvertierung passt nicht zum Funktionstypen" #~ msgid "cast to pointer from integer of different size" #~ msgstr "Typkonvertierung in Zeiger von Ganzzahl anderer Breite" #~ msgid "type-punning to incomplete type might break strict-aliasing rules" #~ msgstr "Type-Punning auf unvollständigen Typen kann strict-aliasing-Regeln verletzen" #~ msgid "dereferencing type-punned pointer will break strict-aliasing rules" #~ msgstr "Dereferenzierung eines Type-Pun-Zeigers verletzt strict-aliasing-Regeln" #~ msgid "ISO C forbids conversion of function pointer to object pointer type" #~ msgstr "ISO-C verbietet Konvertierung von Funktionszeigern in Objektzeigertyp" #~ msgid "ISO C forbids conversion of object pointer to function pointer type" #~ msgstr "ISO-C verbietet Konvertierung von Objektzeigertypen in Funktionszeigertyp" #~ msgid "invalid lvalue in assignment" #~ msgstr "ungültiger L-Wert in Zuweisung" #~ msgid "assignment" #~ msgstr "Zuweisung" #~ msgid "cannot pass rvalue to reference parameter" #~ msgstr "kann R-Wert nicht an Referenzparameter übergeben" #~ msgid "%s makes qualified function pointer from unqualified" #~ msgstr "%s erzeugt aus unqualifiziertem einen qualifizierten Funktionszeiger" #~ msgid "%s discards qualifiers from pointer target type" #~ msgstr "%s streicht Qualifizierer von Zeiger-Zieltypen" #~ msgid "ISO C prohibits argument conversion to union type" #~ msgstr "ISO-C verbietet Argumentkonvertierung in union-Typ" #~ msgid "ISO C forbids %s between function pointer and `void *'" #~ msgstr "ISO-C verbietet %s zwischen Funktionszeiger und »void *«" #~ msgid "pointer targets in %s differ in signedness" #~ msgstr "Zeigerziele in %s unterscheiden sich im Vorzeichenbesitz" #~ msgid "%s from incompatible pointer type" #~ msgstr "%s von inkompatiblem Zeigertyp" #~ msgid "invalid use of non-lvalue array" #~ msgstr "ungültige Verwendung eines Nicht-L-Wert-Feldes" #~ msgid "%s makes pointer from integer without a cast" #~ msgstr "%s erzeugt Zeiger von Ganzzahl ohne Typkonvertierung" #~ msgid "%s makes integer from pointer without a cast" #~ msgstr "%s erzeugt Ganzzahl von Zeiger ohne Typkonvertierung" #~ msgid "incompatible type for argument %d of `%s'" #~ msgstr "inkompatibler Typ für Argument %d von »%s«" #~ msgid "incompatible type for argument %d of indirect function call" #~ msgstr "inkompatibler Typ für Argument %d eines indirekten Funktionsaufrufes" #~ msgid "incompatible types in %s" #~ msgstr "inkompatible Typen in %s" #~ msgid "passing arg of `%s'" #~ msgstr "Verarbeiten des Argumentes von »%s«" #~ msgid "passing arg of pointer to function" #~ msgstr "Verarbeiten des Zeigerargumentes an Funktion" #~ msgid "passing arg %d of `%s'" #~ msgstr "Verarbeiten des Argumentes %d von »%s«" #~ msgid "passing arg %d of pointer to function" #~ msgstr "Verarbeiten des Argumentes %d von Zeiger auf Funktion" #~ msgid "traditional C rejects automatic aggregate initialization" #~ msgstr "traditionelles C lehnt automatische Gesamt-Initialisierung ab" #~ msgid "(near initialization for `%s')" #~ msgstr "(nahe der Initialisierung für »%s«)" #~ msgid "char-array initialized from wide string" #~ msgstr "char-Feld mit wide-Zeichenkette initialisiert" #~ msgid "int-array initialized from non-wide string" #~ msgstr "int-Feld mit Nicht-wide-Zeichenkette initialisiert" #~ msgid "initializer-string for array of chars is too long" #~ msgstr "Initialisierungs-Zeichenkette für char-Feld ist zu lang" #~ msgid "array initialized from non-constant array expression" #~ msgstr "Feld mit nicht konstantem Feldausdruck initialisiert" #~ msgid "initializer element is not constant" #~ msgstr "Initialisierungselement ist nicht konstant" #~ msgid "initialization" #~ msgstr "Initialisierung" #~ msgid "initializer element is not computable at load time" #~ msgstr "Initialisierungs-Element ist zur Lade-Zeit nicht berechenbar" #~ msgid "invalid initializer" #~ msgstr "ungültige Initialisierung" #~ msgid "opaque vector types cannot be initialized" #~ msgstr "opake Vektortypen können nicht initialisiert werden" #~ msgid "extra brace group at end of initializer" #~ msgstr "zusätzliche geschweifte Klammern am Ende der Initialisierung" #~ msgid "missing braces around initializer" #~ msgstr "geschweifte Klammern fehlen um Initialisierung" #~ msgid "braces around scalar initializer" #~ msgstr "geschweifte Klammern um Skalar-Initialisierung" #~ msgid "initialization of flexible array member in a nested context" #~ msgstr "Initialisierung eines flexiblen Feld-Elements in geschachteltem Kontext" #~ msgid "initialization of a flexible array member" #~ msgstr "Initialisierung eines flexiblen Feld-Elements" #~ msgid "missing initializer" #~ msgstr "fehlende Initialisierung" #~ msgid "empty scalar initializer" #~ msgstr "leere Skalar-Initialisierung" #~ msgid "extra elements in scalar initializer" #~ msgstr "zusätzliche Elemente in Skalar-Initialisierung" #~ msgid "initialization designators may not nest" #~ msgstr "Initialisierungs-Bezeichner dürfen nicht geschachtelt werden" #~ msgid "array index in non-array initializer" #~ msgstr "Feldindex in Nicht-Feld-Initialisierung" #~ msgid "field name not in record or union initializer" #~ msgstr "Feldname nicht in Datensatz- oder union-Initialisierung" #~ msgid "nonconstant array index in initializer" #~ msgstr "nichtkonstanter Feldindex in Initialisierung" #~ msgid "array index in initializer exceeds array bounds" #~ msgstr "Feldindex in Initialisierung überschreitet Feldgrenzen" #~ msgid "empty index range in initializer" #~ msgstr "leerer Indexbereich in Initialisierung" #~ msgid "array index range in initializer exceeds array bounds" #~ msgstr "Feldindexbereich in Initialisierung überschreitet Feldgrenzen" #~ msgid "unknown field `%s' specified in initializer" #~ msgstr "unbekanntes Feld »%s« in Initialisierung angegeben" #~ msgid "initialized field with side-effects overwritten" #~ msgstr "initialisiertes Feld mit Seiteneffekten überschrieben" #~ msgid "excess elements in char array initializer" #~ msgstr "Elementüberschreitung in char-Feld-Initialisierung" #~ msgid "excess elements in struct initializer" #~ msgstr "Elementüberschreitung in struct-Initialisierung" #~ msgid "non-static initialization of a flexible array member" #~ msgstr "nicht-statische Initialisierung eines flexiblen Feldelements" #~ msgid "excess elements in union initializer" #~ msgstr "Elementüberschreitung in union-Initialisierung" #~ msgid "traditional C rejects initialization of unions" #~ msgstr "traditionelles C lehnt Initialisierung von unions ab" #~ msgid "excess elements in array initializer" #~ msgstr "Elementüberschreitung in Feldinitialisierung" #~ msgid "excess elements in vector initializer" #~ msgstr "Elementüberschreitung in Vektorinitialisierung" #~ msgid "excess elements in scalar initializer" #~ msgstr "Elementüberschreitung in Skalar-Initialisierung" #~ msgid "asm template is not a string constant" #~ msgstr "asm-Template ist keine Zeichenkettenkonstante" #~ msgid "invalid lvalue in asm statement" #~ msgstr "ungültiger L-Wert in asm-Anweisung" #~ msgid "modification by `asm'" #~ msgstr "Modifizierung durch »asm«" #~ msgid "function declared `noreturn' has a `return' statement" #~ msgstr "als »noreturn« deklarierte Funktion hat »return«-Anweisung" #~ msgid "`return' with no value, in function returning non-void" #~ msgstr "»return« ohne Wert in nicht void zurückgebender Funktion" #~ msgid "`return' with a value, in function returning void" #~ msgstr "»return« mit Wert in void zurückgebender Funktion" #~ msgid "return" #~ msgstr "return" #~ msgid "function returns address of local variable" #~ msgstr "Funktion liefert Adresse einer lokalen Variablen zurück" #~ msgid "switch quantity not an integer" #~ msgstr "switch-Größe keine Ganzzahl" #~ msgid "`long' switch expression not converted to `int' in ISO C" #~ msgstr "»long« switch-Ausdruck nicht nach »int« konvertiert in ISO C" #~ msgid "case label not within a switch statement" #~ msgstr "case-Marke nicht innerhalb einer switch-Anweisung" #~ msgid "`default' label not within a switch statement" #~ msgstr "»default«-Marke nicht innerhalb einer switch-Anweisung" #~ msgid "division by zero" #~ msgstr "Teilung durch Null" #~ msgid "right shift count is negative" #~ msgstr "Rechts-Schiebe-Weite ist negativ" #~ msgid "right shift count >= width of type" #~ msgstr "Rechts-Schiebe-Weite >= Breite des Typs" #~ msgid "left shift count is negative" #~ msgstr "Links-Schiebe-Weite ist negativ" #~ msgid "left shift count >= width of type" #~ msgstr "Links-Schiebe-Weite >= Breite des Typs" #~ msgid "shift count is negative" #~ msgstr "Schiebeweite ist negativ" #~ msgid "shift count >= width of type" #~ msgstr "Schiebeweite >= Breite des Typs" #~ msgid "comparing floating point with == or != is unsafe" #~ msgstr "Vergleich von Gleitkomma mit == oder != ist unsicher" #~ msgid "ISO C forbids comparison of `void *' with function pointer" #~ msgstr "ISO-C verbietet Vergleich von »void *« mit Funktionszeiger" #~ msgid "comparison of distinct pointer types lacks a cast" #~ msgstr "in Vergleich verschiedener Zeigertypen fehlt Typkonvertierung" #~ msgid "comparison between pointer and integer" #~ msgstr "Vergleich zwischen Zeiger und Ganzzahl" #~ msgid "ISO C forbids ordered comparisons of pointers to functions" #~ msgstr "ISO-C verbietet geordnete Vergleiche zwischen Zeigern auf Funktionen" #~ msgid "comparison of complete and incomplete pointers" #~ msgstr "Vergleich von vollständigen und unvollständigen Zeigern" #~ msgid "ordered comparison of pointer with integer zero" #~ msgstr "geordneter Vergleich von Zeiger mit Ganzzahlnull" #~ msgid "unordered comparison on non-floating point argument" #~ msgstr "ungeordneter Vergleich mit Nicht-Gleitkomma-Argument" #~ msgid "comparison between signed and unsigned" #~ msgstr "Vergleich zwischen vorzeichenbehaftet und vorzeichenlos" #~ msgid "comparison of promoted ~unsigned with constant" #~ msgstr "Vergleich von weitergegebenem ~unsigned mit Konstante" #~ msgid "comparison of promoted ~unsigned with unsigned" #~ msgstr "Vergleich von weitergegebenem ~unsigned mit unsigned" #~ msgid "%Jinlining failed in call to '%F'" #~ msgstr "%J»inline« beim Aufruf von »%F« gescheitert" #~ msgid "called from here" #~ msgstr "von hier aufgerufen" #~ msgid "%Jcan't inline call to '%F'" #~ msgstr "%JAufruf von »%F« kann nicht »inline« erfolgen" #~ msgid "ignoring return value of `%D', declared with attribute warn_unused_result" #~ msgstr "Rückgabewert von »%D«, das mit dem Attribut warn_unused_result definiert wurde, wird ignoriert" #~ msgid "ignoring return value of function declared with attribute warn_unused_result" #~ msgstr "Rückgabewert der mit dem Attribut warn_unused_result definierten Funktion wird ignoriert" #~ msgid "function call has aggregate value" #~ msgstr "Funktionsaufruf hat zusammengesetzten Wert" #~ msgid "bb %d on wrong place" #~ msgstr "bb %d an falscher Stelle" #~ msgid "prev_bb of %d should be %d, not %d" #~ msgstr "prev_bb von %d sollte %d sein, nicht %d" #~ msgid "verify_flow_info: Wrong count of block %i %i" #~ msgstr "verify_flow_info: Falsche Blockzahl %i %i" #~ msgid "verify_flow_info: Wrong frequency of block %i %i" #~ msgstr "verify_flow_info: Falsche Blockfrequenz %i %i" #~ msgid "verify_flow_info: Duplicate edge %i->%i" #~ msgstr "verify_flow_info: Doppelte Kante %i->%i" #~ msgid "verify_flow_info: Wrong probability of edge %i->%i %i" #~ msgstr "verify_flow_info: Falsche Wahrscheinlichkeit der Kante %i->%i %i" #~ msgid "verify_flow_info: Wrong count of edge %i->%i %i" #~ msgstr "verify_flow_info: Falsche Kantenzahl %i->%i %i" #~ msgid "verify_flow_info: Basic block %d succ edge is corrupted" #~ msgstr "verify_flow_info: Nachfolgekante des Basis-Blocks %d ist beschädigt" #~ msgid "Wrong amount of branch edges after unconditional jump %i" #~ msgstr "Falsche Summe der Zweig-Kanten nach unbedingtem Sprung %i" #~ msgid "basic block %d pred edge is corrupted" #~ msgstr "Vorgänger des Basis-Blocks %d ist beschädigt" #~ msgid "basic block %i edge lists are corrupted" #~ msgstr "Kantenlisten des Basis-Blockes %i sind beschädigt" #~ msgid "verify_flow_info failed" #~ msgstr "verify_flow_info gescheitert" #~ msgid "Size of loop %d should be %d, not %d." #~ msgstr "Größe der Schleife %d sollte %d sein, nicht %d" #~ msgid "Bb %d do not belong to loop %d." #~ msgstr "Bb %d gehört nicht zur Schleife %d." #~ msgid "Loop %d's header does not have exactly 2 entries." #~ msgstr "Kopf der Schleife %d hat nicht genau 2 Einträge." #~ msgid "Loop %d's latch does not have exactly 1 successor." #~ msgstr "Falle der Schleife %d hat nicht genau einen Nachfolger." #~ msgid "Loop %d's latch does not have header as successor." #~ msgstr "Falle der Schleife %d hat nicht den Kopf als Nachfolger." #~ msgid "Loop %d's latch does not belong directly to it." #~ msgstr "Falle der Schleife %d gehört nicht direkt zu ihr." #~ msgid "Loop %d's header does not belong directly to it." #~ msgstr "Kopf der Schleife %d gehört nicht direkt zu ihr." #~ msgid "Loop %d's latch is marked as part of irreducible region." #~ msgstr "Falle der Schleife %d ist als Teil einer irreduziblen Region markiert." #~ msgid "Basic block %d should be marked irreducible." #~ msgstr "Basisblock %d sollte als irreduzibel markiert werden." #~ msgid "Basic block %d should not be marked irreducible." #~ msgstr "Basisblock %d sollte nicht als irreduzibel markiert werden." #~ msgid "Edge from %d to %d should be marked irreducible." #~ msgstr "Kante von %d nach %d sollte als irreduzibel markiert werden." #~ msgid "Edge from %d to %d should not be marked irreducible." #~ msgstr "Kante von %d nach %d sollte nicht als irreduzibel markiert werden." #~ msgid "end insn %d for block %d not found in the insn stream" #~ msgstr "Ende-insn %d für Block %d nicht im insn-Stream gefunden" #~ msgid "insn %d is in multiple basic blocks (%d and %d)" #~ msgstr "insn %d ist in mehreren Basisblöcken (%d und %d)" #~ msgid "head insn %d for block %d not found in the insn stream" #~ msgstr "Kopf-insn %d für Block %d nicht im insn-Stream gefunden" #~ msgid "verify_flow_info: REG_BR_PROB does not match cfg %wi %i" #~ msgstr "verify_flow_info: REG_BR_PROB passt nicht zu cfg %wi %i" #~ msgid "Missing REG_EH_REGION note in the end of bb %i" #~ msgstr "Fehlender Vermerk von REG_EH_REGION am Ende vom bb %i" #~ msgid "Too many outgoing branch edges from bb %i" #~ msgstr "Zu viele abgehende Zweig-Kanten vom bb %i" #~ msgid "Fallthru edge after unconditional jump %i" #~ msgstr "Fallthru-Kante nach unbedingtem Sprung %i" #~ msgid "Wrong amount of branch edges after conditional jump %i" #~ msgstr "Falsche Summe der Zweig-Kanten nach bedingtem Sprung %i" #~ msgid "Call edges for non-call insn in bb %i" #~ msgstr "Ruf-Kanten für Nicht-Aufruf-insn im bb %i" #~ msgid "Abnormal edges for no purpose in bb %i" #~ msgstr "Abnormale Kanten ohne Grund in bb %i" #~ msgid "insn %d inside basic block %d but block_for_insn is NULL" #~ msgstr "insn %d innerhalb des Basis-Blockes %d, aber block_for_insn ist NULL" #~ msgid "insn %d inside basic block %d but block_for_insn is %i" #~ msgstr "insn %d innerhalb Basis-Blockes %d, aber block_for_insn ist %i" #~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" #~ msgstr "NOTE_INSN_BASIC_BLOCK fehlt für Block %d" #~ msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d" #~ msgstr "NOTE_INSN_BASIC_BLOCK %d in der Mitte des Basis-Blocks %d" #~ msgid "in basic block %d:" #~ msgstr "im Basis-Block %d:" #~ msgid "flow control insn inside a basic block" #~ msgstr "Flusskontroll-insn innerhalb eines Basis-Blockes" #~ msgid "missing barrier after block %i" #~ msgstr "fehlende Sperre nach Block %i" #~ msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i" #~ msgstr "verify_flow_info: Falsche Blöcke für »fallthru« %i->%i" #~ msgid "verify_flow_info: Incorrect fallthru %i->%i" #~ msgstr "verify_flow_info: Falsches »fallthru« %i->%i" #~ msgid "wrong insn in the fallthru edge" #~ msgstr "falsche insn in »fallthru«-Kante" #~ msgid "basic blocks not laid down consecutively" #~ msgstr "Basis-Blöcke sind nicht fortlaufend" #~ msgid "insn outside basic block" #~ msgstr "insn außerhalb eines Basis-Blockes" #~ msgid "return not followed by barrier" #~ msgstr "»return« nicht gefolgt von Sperre" #~ msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" #~ msgstr "Anzahl der bb-Vermerke in insn-Kette (%d) != n_basic_blocks (%d)" #~ msgid "function body not available" #~ msgstr "Funktionskörper nicht verfügbar" #~ msgid "redefined extern inline functions are not considered for inlining" #~ msgstr "redefinierte »extern inline«-Funktionen kommen nicht als »inline« in Betracht" #~ msgid "function not considered for inlining" #~ msgstr "Funktion kommt nicht für »inline« in Betracht" #~ msgid "function not inlinable" #~ msgstr "Funktion kann nicht »inline« sein" #~ msgid "%D renamed after being referenced in assembly" #~ msgstr "%D nach Referenzierung in Assemblierung umbenannt" #~ msgid "--param large-function-growth limit reached" #~ msgstr "--param large-function-growth: Limit erreicht" #~ msgid "--param large-function-growth limit reached while inlining the caller" #~ msgstr "--param large-function-growth: Limit bei »inline« des Aufrufers erreicht" #~ msgid "--param max-inline-insns-single limit reached" #~ msgstr "--param max-inline-insns-single: Limit erreicht" #~ msgid "--param max-inline-insns-single limit reached after inlining into the callee" #~ msgstr "--param max-inline-insns-single: Limit nach »inline« im Aufgerufenen erreicht" #~ msgid "--param inline-unit-growth limit reached" #~ msgstr "--param inline-unit-growth: Limit erreicht" #~ msgid "recursive inlining" #~ msgstr "rekursives inline" #~ msgid "internal error" #~ msgstr "interner Fehler" #~ msgid "no arguments" #~ msgstr "Keiner Argumente" #~ msgid "fopen %s" #~ msgstr "fopen %s" #~ msgid "fclose %s" #~ msgstr "fclose %s" #~ msgid "collect2 version %s" #~ msgstr "collect2-Version %s" #~ msgid "%d constructor(s) found\n" #~ msgstr "%d Konstruktor(en) gefunden\n" #~ msgid "%d destructor(s) found\n" #~ msgstr "%d Destruktor(en) gefunden\n" #~ msgid "%d frame table(s) found\n" #~ msgstr "%d Rahmentabelle(n) gefunden\n" #~ msgid "%s terminated with signal %d [%s]%s" #~ msgstr "%s mit Signal %d [%s]%s beendet" #~ msgid "%s returned %d exit status" #~ msgstr "%s gab Ende-Status %d zurück" #~ msgid "[cannot find %s]" #~ msgstr "[kann %s nicht finden]" #~ msgid "cannot find `%s'" #~ msgstr "kann »%s« nicht finden" #~ msgid "redirecting stdout: %s" #~ msgstr "leite Standardausgabe um: %s" #~ msgid "[Leaving %s]\n" #~ msgstr "[Verlasse %s]\n" #~ msgid "" #~ "\n" #~ "write_c_file - output name is %s, prefix is %s\n" #~ msgstr "" #~ "\n" #~ "write_c_file - Ausgabename ist %s, Präfix ist %s\n" #~ msgid "cannot find `nm'" #~ msgstr "kann »nm« nicht finden" #~ msgid "pipe" #~ msgstr "Pipe" #~ msgid "fdopen" #~ msgstr "fdopen" #~ msgid "dup2 %d 1" #~ msgstr "dup2 %d 1" #~ msgid "close %d" #~ msgstr "close %d" #~ msgid "execv %s" #~ msgstr "execv %s" #~ msgid "init function found in object %s" #~ msgstr "init-Funktion im Objekt %s gefunden" #~ msgid "fini function found in object %s" #~ msgstr "fini-Funktion im Objekt %s gefunden" #~ msgid "fclose" #~ msgstr "fclose" #~ msgid "unable to open file '%s'" #~ msgstr "kann Datei »%s« nicht öffnen" #~ msgid "unable to stat file '%s'" #~ msgstr "kann Dateistatus für »%s« nicht ermitteln" #~ msgid "unable to mmap file '%s'" #~ msgstr "kann mmap nicht auf Datei »%s« anwenden" #~ msgid "not found\n" #~ msgstr "nicht gefunden\n" #~ msgid "dynamic dependency %s not found" #~ msgstr "dynamische Abhängigkeit %s nicht gefunden" #~ msgid "bad magic number in file '%s'" #~ msgstr "Falsche magische Zahl in Datei »%s«" #~ msgid "dynamic dependencies.\n" #~ msgstr "dynamische Abhängigkeiten.\n" #~ msgid "cannot find `ldd'" #~ msgstr "kann »ldd« nicht finden" #~ msgid "" #~ "\n" #~ "ldd output with constructors/destructors.\n" #~ msgstr "" #~ "\n" #~ "Ausgabe von ldd mit Konstruktoren/Destruktoren.\n" #~ msgid "unable to open dynamic dependency '%s'" #~ msgstr "kann dynamische Abhängigkeit »%s« nicht öffnen" #~ msgid "%s: not a COFF file" #~ msgstr "%s: keine COFF-Datei" #~ msgid "%s: cannot open as COFF file" #~ msgstr "kann %s nicht als COFF-Datei öffnen" #~ msgid "library lib%s not found" #~ msgstr "Bibliothek lib%s nicht gefunden" #~ msgid "" #~ ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n" #~ ";; %d successes.\n" #~ "\n" #~ msgstr "" #~ ";; Kombinierer-Statistik: %d Versuche, %d Ersetzungen (%d benötigten neuen Platz),\n" #~ ";; %d Erfolge.\n" #~ "\n" #~ msgid "" #~ "\n" #~ ";; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n" #~ ";; %d successes.\n" #~ msgstr "" #~ "\n" #~ ";; Kombinierer-Gesamtwerte: %d Versuche, %d Ersetzungen (%d benötigten neuen Platz),\n" #~ ";; %d Erfolge.\n" #~ msgid "cannot convert to a pointer type" #~ msgstr "kann nicht in Zeigertyp konvertieren" #~ msgid "pointer value used where a floating point value was expected" #~ msgstr "Zeigerwert verwendet, wo Gleitkommawert erwartet wurde" #~ msgid "aggregate value used where a float was expected" #~ msgstr "zusammengesetzten Wert verwendet, wo Gleitkomma erwartet wurde" #~ msgid "conversion to incomplete type" #~ msgstr "Konvertierung in unvollständigen Typen" #~ msgid "can't convert between vector values of different size" #~ msgstr "kann nicht zwischen Vektorwerten verschiedener Größen konvertieren" #~ msgid "aggregate value used where an integer was expected" #~ msgstr "zusammengesetzter Wert verwendet, wo Ganzzahl erwartet wurde" #~ msgid "pointer value used where a complex was expected" #~ msgstr "Zeigerwert verwendet, wo »complex« erwartet wurde" #~ msgid "aggregate value used where a complex was expected" #~ msgstr "zusammengesetzer Wert verwendet, wo »complex« erwartet wurde" #~ msgid "can't convert value to a vector" #~ msgstr "kann Wert nicht in Vektor konvertieren" #~ msgid "`%s' is not a gcov data file" #~ msgstr "»%s« ist keine gcov-Datei" #~ msgid "`%s' is version `%.4s', expected version `%.4s'" #~ msgstr "»%s« hat Version »%.4s«, Version »%.4s« erwartet" #~ msgid "coverage mismatch for function %u while reading execution counters." #~ msgstr "Überdeckung passt nicht für Funktion %u beim Lesen der Ausführungszähler." #~ msgid "checksum is %x instead of %x" #~ msgstr "Prüfsumme ist %x statt %x" #~ msgid "number of counters is %d instead of %d" #~ msgstr "Zahl der Zähler ist %d statt %d" #~ msgid "cannot merge separate %s counters for function %u" #~ msgstr "separate %s Zähler für die Funktion %u können nicht verschmolzen werden" #~ msgid "`%s' has overflowed" #~ msgstr "»%s« übergelaufen" #~ msgid "`%s' is corrupted" #~ msgstr "»%s« ist beschädigt" #~ msgid "file %s not found, execution counts assumed to be zero" #~ msgstr "Datei %s nicht gefunden, Ausführungszähler als null angenommen" #~ msgid "no coverage for function '%s' found." #~ msgstr "keine Überdeckung für Funktion »%s« gefunden." #~ msgid "coverage mismatch for function '%s' while reading counter '%s'." #~ msgstr "Überdeckung passt nicht bei Funktion »%s« beim Lesen des Zählers »%s«." #~ msgid "cannot open %s" #~ msgstr "Es ist nicht möglich, »%s« zu öffnen" #~ msgid "error writing `%s'" #~ msgstr "Fehler beim Schreiben der Datei »%s«" #~ msgid "\"%s\" is not a valid option to the preprocessor" #~ msgstr "»%s« ist keine gültige Präprozessoroption" #~ msgid "too many input files" #~ msgstr "zu viele Eingabedateien" #~ msgid ";; Processing block from %d to %d, %d sets.\n" #~ msgstr ";; Bearbeite Block von %d bis %d, %d Sets.\n" #~ msgid "%s:%d: confused by earlier errors, bailing out\n" #~ msgstr "%s:%d: durch frühere Fehler verwirrt, Abbruch\n" #~ msgid "compilation terminated.\n" #~ msgstr "Kompilierung beendet.\n" #~ msgid "Internal compiler error: Error reporting routines re-entered.\n" #~ msgstr "Interner Compilerfehler: Fehlerbehandlungsroutinen doppelt betreten.\n" #~ msgid "in %s, at %s:%d" #~ msgstr "in %s, bei %s:%d" #~ msgid "dominator of %d should be %d, not %d" #~ msgstr "Herrscher über %d sollte %d sein, nicht %d" #~ msgid "DW_LOC_OP %s not implemented\n" #~ msgstr "DW_LOC_OP %s nicht implementiert\n" #~ msgid "can't access real part of complex value in hard register" #~ msgstr "kann nicht auf realen Teil des komplexen Wertes im festen Register zugreifen" #~ msgid "can't access imaginary part of complex value in hard register" #~ msgstr "kann nicht auf imaginären Teil des komplexen Wertes im festen Register zugreifen" #~ msgid "Invalid rtl sharing found in the insn" #~ msgstr "ungültige gemeinsame rtl-Benutzung in insn gefunden" #~ msgid "Shared rtx" #~ msgstr "Gemeinsames rtx" #~ msgid "ICE: emit_insn used where emit_jump_insn needed:\n" #~ msgstr "ICE: emit_insn verwendet, wo emit_jump_insn erforderlich:\n" #~ msgid "abort in %s, at %s:%d" #~ msgstr "Abbruch in %s, bei %s:%d" #~ msgid "exception handling disabled, use -fexceptions to enable" #~ msgstr "Ausnahmebehandlung ausgeschaltet, benutzen Sie -fexeptions zum Anschalten" #~ msgid "argument of `__builtin_eh_return_regno' must be constant" #~ msgstr "Argument für »__builtin_eh_return_regno« muss konstant sein" #~ msgid "__builtin_eh_return not supported on this target" #~ msgstr "__builtin_eh_return für dieses Ziel nicht unterstützt" #~ msgid "stack limits not supported on this target" #~ msgstr "Kellergrenzen nicht für dieses Ziel unterstützt" #~ msgid "function using short complex types cannot be inline" #~ msgstr "Funktion, die komplexe »short«-Typen verwendet, kann nicht »inline« sein" #~ msgid "%Jprior parameter's size depends on '%D'" #~ msgstr "%Jvorherige Parametergröße hängt von »%D« ab" #~ msgid "returned value in block_exit_expr" #~ msgstr "zurückgelieferter Wert in block_exit_expr" #~ msgid "cannot take the address of an unaligned member" #~ msgstr "die Adresse eines nicht ausgerichteten Elements kann nicht ermittelt werden" #~ msgid "negative insn length" #~ msgstr "negative insn-Länge" #~ msgid "could not split insn" #~ msgstr "insn kann nicht aufgeteilt werden" #~ msgid "invalid `asm': " #~ msgstr "ungültiges »asm«: " #~ msgid "nested assembly dialect alternatives" #~ msgstr "geschachtelte Assemblerdialekt-Alternativen" #~ msgid "unterminated assembly dialect alternative" #~ msgstr "unbeendete Assemblerdialekt-Alternative" #~ msgid "operand number missing after %%-letter" #~ msgstr "Operandenzahl fehlt hinter %%-Buchstabe" #~ msgid "operand number out of range" #~ msgstr "Operandenzahl außerhalb des Wertebereiches" #~ msgid "invalid %%-code" #~ msgstr "ungültiger %%-Code" #~ msgid "`%%l' operand isn't a label" #~ msgstr "»%%l«-Operand ist keine Marke" #~ msgid "floating constant misused" #~ msgstr "Gleitkommakonstante falsch benutzt" #~ msgid "invalid expression as operand" #~ msgstr "ungültiger Ausdruck als Operand" #~ msgid "function might be possible candidate for attribute `noreturn'" #~ msgstr "Funktion könnte möglicher Kandidat für Attribut »noreturn« sein" #~ msgid "`noreturn' function does return" #~ msgstr "»noreturn«-Funktion kehrt zurück" #~ msgid "control reaches end of non-void function" #~ msgstr "Kontrollfluss erreicht Ende einer Nicht-void-Funktion" #~ msgid "Attempt to delete prologue/epilogue insn:" #~ msgstr "Versuch, Prolog/Epilog-insn zu löschen" #~ msgid "comparison is always %d due to width of bit-field" #~ msgstr "Vergleich ist immer %d wegen Breite des Bitfeldes" #~ msgid "comparison is always %d" #~ msgstr "Vergleich ist immer %d" #~ msgid "`or' of unmatched not-equal tests is always 1" #~ msgstr "»oder« nicht passender Ungleichheits-Tests ist immer 1" #~ msgid "`and' of mutually exclusive equal-tests is always 0" #~ msgstr "»und« gegenseitig ausschließender Gleichheits-Tests ist immer 0" #~ msgid "fold check: original tree changed by fold" #~ msgstr "Faltungstest: ursprünglicher Baum durch Faltung geändert" #~ msgid "%Jsize of variable '%D' is too large" #~ msgstr "%JGröße der Variable »%D« ist zu hoch" #~ msgid "impossible constraint in `asm'" #~ msgstr "unmögliche Bedingung in »asm«" #~ msgid "%J'%D' might be used uninitialized in this function" #~ msgstr "%J»%D« könnte in dieser Funktion uninitialisiert bleiben" #~ msgid "%Jvariable '%D' might be clobbered by `longjmp' or `vfork'" #~ msgstr "%JVariable »%D« könnte von »longjmp« oder »vfork« zerstört werden" #~ msgid "%Jargument '%D' might be clobbered by `longjmp' or `vfork'" #~ msgstr "%JArgument »%D« könnte von »longjmp« oder »vfork« zerstört werden" #~ msgid "function returns an aggregate" #~ msgstr "Funktion gibt Aggregat zurück" #~ msgid "%Junused parameter '%D'" #~ msgstr "%Jnicht benutzter Parameter »%D«" #~ msgid "ambiguous abbreviation %s" #~ msgstr "mehrdeutige Abkürzung %s" #~ msgid "incomplete `%s' option" #~ msgstr "unvollständige »%s«-Option" #~ msgid "missing argument to `%s' option" #~ msgstr "fehlendes Argument für »%s«-Option" #~ msgid "extraneous argument to `%s' option" #~ msgstr "zusätzliches (belangloses) Argument für »%s«-Option" #~ msgid "Using built-in specs.\n" #~ msgstr "Benutze eingebaute Spezifikationen.\n" #~ msgid "" #~ "Setting spec %s to '%s'\n" #~ "\n" #~ msgstr "" #~ "Setze Spezifikation %s auf '%s'\n" #~ "\n" #~ msgid "Reading specs from %s\n" #~ msgstr "Lese Spezifikationen von %s\n" #~ msgid "specs %%include syntax malformed after %ld characters" #~ msgstr "falsche %%include-Syntax für Spezifikationen nach %ld Zeichen" #~ msgid "could not find specs file %s\n" #~ msgstr "konnte Spezifikationsdatei %s nicht finden\n" #~ msgid "specs %%rename syntax malformed after %ld characters" #~ msgstr "falsche %%rename-Syntax für Spezifikationen nach %ld Zeichen" #~ msgid "specs %s spec was not found to be renamed" #~ msgstr "keine %s-Spezifikation zum Umbenennen gefunden" #~ msgid "%s: attempt to rename spec '%s' to already defined spec '%s'" #~ msgstr "%s: Versuch, Spezifikation »%s« in bereits definierte Spezifikation »%s« umzubenennen" #~ msgid "rename spec %s to %s\n" #~ msgstr "benenne Spezifikation %s nach %s um\n" #~ msgid "" #~ "spec is '%s'\n" #~ "\n" #~ msgstr "" #~ "Spezifikation ist '%s'\n" #~ "\n" #~ msgid "specs unknown %% command after %ld characters" #~ msgstr "Spezifikation: unbekannter %%-Befehl nach %ld Zeichen" #~ msgid "specs file malformed after %ld characters" #~ msgstr "Fehler in Spezifikationsdatei nach %ld Zeichen" #~ msgid "spec file has no spec for linking" #~ msgstr "Spezifikationsdatei hat keine Spezifikation zum Binden" #~ msgid "-pipe not supported" #~ msgstr "-pipe wird nicht unterstützt" # can we use j/n here, too? # 2002-04-23 18:57:43 CEST -ke- #~ msgid "" #~ "\n" #~ "Go ahead? (y or n) " #~ msgstr "" #~ "\n" #~ "Fortfahren? (y oder n) " #~ msgid "" #~ "Internal error: %s (program %s)\n" #~ "Please submit a full bug report.\n" #~ "See %s for instructions." #~ msgstr "" #~ "Interner Fehler: %s (Programm %s)\n" #~ "Bitte senden Sie einen vollständigen Fehlerbericht\n" #~ "auf Englisch ein; Fehler in der deutschen Übersetzung\n" #~ "sind an de@li.org zu melden.\n" #~ "Gehen Sie gemäß den Hinweisen in %s vor." #~ msgid "# %s %.2f %.2f\n" #~ msgstr "# %s %.2f %.2f\n" #~ msgid "Usage: %s [options] file...\n" #~ msgstr "Aufruf: %s [Optionen] Datei...\n" #~ msgid "Options:\n" #~ msgstr "Optionen:\n" #~ msgid " -pass-exit-codes Exit with highest error code from a phase\n" #~ msgstr " -pass-exit-codes Ende mit höchstem Rückgabe-Code einer Phase\n" #~ msgid " --help Display this information\n" #~ msgstr " --help Diese Informationen anzeigen\n" #~ msgid " --target-help Display target specific command line options\n" #~ msgstr " --target-help Zielspezifische Kommandozeilenoptionen anzeigen\n" #~ msgid " (Use '-v --help' to display command line options of sub-processes)\n" #~ msgstr " ('-v --help' zum Anzeigen der Kommandozeilenoptionen von Subprozessen verwenden)\n" #~ msgid " -dumpspecs Display all of the built in spec strings\n" #~ msgstr " -dumpspecs Alle eingebauten Spezifikationszeichenketten anzeigen\n" #~ msgid " -dumpversion Display the version of the compiler\n" #~ msgstr " -dumpversion Compilerversion anzeigen\n" #~ msgid " -dumpmachine Display the compiler's target processor\n" #~ msgstr " -dumpmachine Zielprozessor des Compilers anzeigen\n" #~ msgid " -print-search-dirs Display the directories in the compiler's search path\n" #~ msgstr " -print-search-dirs Verzeichnisse im Suchpfad des Compilers anzeigen\n" #~ msgid " -print-libgcc-file-name Display the name of the compiler's companion library\n" #~ msgstr " -print-libgcc-file-name Name der Begleitbibliothek des Compilers anzeigen\n" #~ msgid " -print-file-name= Display the full path to library \n" #~ msgstr " -print-file-name= Vollen Pfad zur Bibliothek anzeigen\n" #~ msgid " -print-prog-name= Display the full path to compiler component \n" #~ msgstr " -print-prog-name= Vollen Pfad zur Compilerkomponente anzeigen\n" #~ msgid " -print-multi-directory Display the root directory for versions of libgcc\n" #~ msgstr " -print-multi-directory Wurzelverzeichnis für Versionen von libgcc anzeigen\n" #~ msgid "" #~ " -print-multi-lib Display the mapping between command line options and\n" #~ " multiple library search directories\n" #~ msgstr "" #~ " -print-multi-lib Abbildung zwischen Kommandozeilenoptionen und\n" #~ " mehreren Suchverzeichnissen für Bibliotheken anzeigen\n" #~ msgid " -print-multi-os-directory Display the relative path to OS libraries\n" #~ msgstr "" #~ " -print-multi-os-directory Relativen Pfad zu Betriebssystembibliotheken\n" #~ " anzeigen\n" #~ msgid " -Wa, Pass comma-separated on to the assembler\n" #~ msgstr " -Wa, Komma-getrennte an Assembler übergeben\n" #~ msgid " -Wp, Pass comma-separated on to the preprocessor\n" #~ msgstr " -Wp, Komma-getrennte an Präprozessor übergeben\n" #~ msgid " -Wl, Pass comma-separated on to the linker\n" #~ msgstr " -Wl, Komma-getrennte an Linker übergeben\n" #~ msgid " -Xassembler Pass on to the assembler\n" #~ msgstr " -Xassembler an den Assembler übergeben\n" #~ msgid " -Xpreprocessor Pass on to the preprocessor\n" #~ msgstr " -Xpreprocessor an den Präprozessor übergeben\n" #~ msgid " -Xlinker Pass on to the linker\n" #~ msgstr " -Xlinker an den Linker übergeben\n" #~ msgid " -save-temps Do not delete intermediate files\n" #~ msgstr " -save-temps Temporäre Dateien nicht löschen\n" #~ msgid " -pipe Use pipes rather than intermediate files\n" #~ msgstr " -pipe Pipes statt temporärer Dateien verwenden\n" #~ msgid " -time Time the execution of each subprocess\n" #~ msgstr " -time Zeit für Ausführung jedes Subprozesses stoppen\n" #~ msgid " -specs= Override built-in specs with the contents of \n" #~ msgstr "" #~ " -specs= Eingebaute Spezifikationen mit Inhalt der \n" #~ " überschreiben\n" #~ msgid " -std= Assume that the input sources are for \n" #~ msgstr " -std= Annehmen, dass die Eingabequellen für sind\n" #~ msgid " -B Add to the compiler's search paths\n" #~ msgstr " -B zum Suchpfad des Compilers hinzufügen\n" #~ msgid " -b Run gcc for target , if installed\n" #~ msgstr "" #~ " -b GCC für die Ziel- laufen lassen, falls\n" #~ " installiert\n" #~ msgid " -V Run gcc version number , if installed\n" #~ msgstr " -V GCC laufen lassen, falls installiert\n" #~ msgid " -v Display the programs invoked by the compiler\n" #~ msgstr " -v Vom Compiler aufgerufene Programme anzeigen\n" #~ msgid " -### Like -v but options quoted and commands not executed\n" #~ msgstr "" #~ " -### Wie -v, aber mit zitierten Optionen und nicht\n" #~ " ausgeführten Befehlen\n" #~ msgid " -E Preprocess only; do not compile, assemble or link\n" #~ msgstr "" #~ " -E Nur Präprozessor, kein Compiler, Assembler oder\n" #~ " Binder\n" #~ msgid " -S Compile only; do not assemble or link\n" #~ msgstr " -S Nur kompilieren, nicht assemblieren oder binden\n" #~ msgid " -c Compile and assemble, but do not link\n" #~ msgstr " -c Nur kompilieren und assemblieren, aber nicht binden\n" #~ msgid " -o Place the output into \n" #~ msgstr " -o Ausgabe in schreiben\n" #~ msgid "" #~ " -x Specify the language of the following input files\n" #~ " Permissible languages include: c c++ assembler none\n" #~ " 'none' means revert to the default behavior of\n" #~ " guessing the language based on the file's extension\n" #~ msgstr "" #~ " -x Sprache der folgenden Eingabedateien angeben\n" #~ " Zulässige Sprachen sind: c c++ assembler none\n" #~ " 'none' bedeutet den Rückfall auf das Standard-\n" #~ " verhalten, die Sprache aufgrund der Dateinamens-\n" #~ " erweiterung zu vermuten\n" #~ msgid "" #~ "\n" #~ "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n" #~ " passed on to the various sub-processes invoked by %s. In order to pass\n" #~ " other options on to these processes the -W options must be used.\n" #~ msgstr "" #~ "\n" #~ "Optionen, die mit -g, -f, -m, -O, -W, oder --param beginnen, werden automatisch\n" #~ " an die verschiedenen Subprozesse, die von %s aufgerufen werden, übergeben.\n" #~ " Um andere Optionen an diese Prozesse zu übergeben, müssen die Optionen\n" #~ " -W verwendet werden.\n" #~ msgid "`-%c' option must have argument" #~ msgstr "Die Option »-%c« muss ein Argument haben" #~ msgid "couldn't run `%s': %s" #~ msgstr "konnte »%s« nicht ausführen: %s" #~ msgid "%s (GCC) %s\n" #~ msgstr "%s (GCC) %s\n" #~ msgid "" #~ "This is free software; see the source for copying conditions. There is NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" #~ "\n" #~ msgstr "" #~ "Dies ist freie Software; die Kopierbedingungen stehen in den Quellen. Es\n" #~ "gibt KEINE Garantie; auch nicht für VERKAUFBARKEIT oder FÜR SPEZIELLE ZWECKE.\n" #~ "\n" #~ msgid "argument to `-Xlinker' is missing" #~ msgstr "Argument für »-Xlinker« fehlt" #~ msgid "argument to `-Xpreprocessor' is missing" #~ msgstr "Argument für »-Xpreprocessor« fehlt" #~ msgid "argument to `-Xassembler' is missing" #~ msgstr "Argument für »-Xassembler« fehlt" #~ msgid "argument to `-l' is missing" #~ msgstr "Argument für »-l« fehlt" #~ msgid "argument to `-specs' is missing" #~ msgstr "Argument für »-specs« fehlt" #~ msgid "argument to `-specs=' is missing" #~ msgstr "Argument für »-specs=« fehlt" #~ msgid "`-%c' must come at the start of the command line" #~ msgstr "»-%c« muss am Anfang der Kommandozeile stehen" #~ msgid "argument to `-B' is missing" #~ msgstr "Argument für »-B« fehlt" #~ msgid "warning: -pipe ignored because -save-temps specified" #~ msgstr "Warnung: -pipe ignoriert, da -save-temps angegeben" #~ msgid "warning: -pipe ignored because -time specified" #~ msgstr "Warnung: -pipe ignoriert, da -time angegeben" #~ msgid "argument to `-x' is missing" #~ msgstr "Argument für »-x« fehlt" #~ msgid "argument to `-%s' is missing" #~ msgstr "Argument für »-%s« fehlt" #~ msgid "warning: `-x %s' after last input file has no effect" #~ msgstr "Warnung: »-x %s« hinter letzter Eingabedatei hat keine Wirkung" #~ msgid "invalid specification! Bug in cc" #~ msgstr "ungültige Spezifikation! Fehler in cc" #~ msgid "%s\n" #~ msgstr "%s\n" #~ msgid "spec failure: '%%*' has not been initialized by pattern match" #~ msgstr "Spezifikationsfehler: »%%*« wurde nicht durch Mustererkennung initialisiert" #~ msgid "warning: use of obsolete %%[ operator in specs" #~ msgstr "Warnung: Verwendung des veralteten Operators %%[ in Spezifikation" #~ msgid "Processing spec %c%s%c, which is '%s'\n" #~ msgstr "Verarbeite Spezifikation %c%s%c, welche »%s« ist\n" #~ msgid "spec failure: unrecognized spec option '%c'" #~ msgstr "Spezifikationsfehler: nicht erkannte Option »%c«" #~ msgid "unknown spec function `%s'" #~ msgstr "unbekannte Spezifikationsfunktion »%s«" #~ msgid "error in args to spec function `%s'" #~ msgstr "Fehler in Argumenten für Spezifikationsfunktion »%s«" #~ msgid "malformed spec function name" #~ msgstr "schlechter Name für Spezifikationsfunktion" #~ msgid "no arguments for spec function" #~ msgstr "keine Argumente für Spezifikationsfunktion" #~ msgid "malformed spec function arguments" #~ msgstr "schlechte Argumente für Spezifikationsfunktion" #~ msgid "spec failure: more than one arg to SYSROOT_SUFFIX_SPEC." #~ msgstr "Spezifikationsfehler: mehr als ein Argument für SYSROOT_SUFFIX_SPEC." #~ msgid "spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC." #~ msgstr "Spezifikationsfehler: mehr als ein Argument für SYSROOT_HEADERS_SUFFIX_SPEC." #~ msgid "unrecognized option `-%s'" #~ msgstr "nicht erkannte Option »-%s«" #~ msgid "install: %s%s\n" #~ msgstr "installiere: %s%s\n" #~ msgid "programs: %s\n" #~ msgstr "Programme: %s\n" #~ msgid "libraries: %s\n" #~ msgstr "Bibliotheken: %s\n" #~ msgid "" #~ "\n" #~ "For bug reporting instructions, please see:\n" #~ msgstr "" #~ "\n" #~ "Zum Einsenden von Fehlerberichten (auf Englisch) lesen Sie bitte die\n" #~ "folgenden Hinweise; Fehler in der deutschen Übersetzung sind an de@li.org\n" #~ "zu melden:\n" #~ msgid "Configured with: %s\n" #~ msgstr "Konfiguriert mit: %s\n" #~ msgid "Thread model: %s\n" #~ msgstr "Thread-Modell: %s\n" #~ msgid "gcc version %s\n" #~ msgstr "gcc-Version %s\n" #~ msgid "gcc driver version %s executing gcc version %s\n" #~ msgstr "gcc-Treiberversion %s führt gcc Version %s aus\n" #~ msgid "no input files" #~ msgstr "keine Eingabedateien" #~ msgid "%s: linker input file unused because linking not done" #~ msgstr "%s: Eingabedateien des Binders unbenutzt, da keine Bindung geschieht" #~ msgid "cannot specify -o with -c or -S and multiple languages" #~ msgstr "-o kann nicht mit -c oder -S und mehreren Sprachen angegeben werden" #~ msgid "%s: %s compiler not installed on this system" #~ msgstr "%s: %s-Compiler ist auf diesem System nicht installiert" #~ msgid "language %s not recognized" #~ msgstr "Sprache %s nicht erkannt" #~ msgid "internal gcc abort" #~ msgstr "interner Abruch des gcc" #~ msgid "Internal gcov abort.\n" #~ msgstr "Interner gcov-Abbruch.\n" #~ msgid "" #~ "Usage: gcov [OPTION]... SOURCEFILE\n" #~ "\n" #~ msgstr "" #~ "Aufruf: gcov [OPTION]... QUELLDATEI\n" #~ "\n" #~ msgid "" #~ "Print code coverage information.\n" #~ "\n" #~ msgstr "" #~ "Information zur Code-Überdeckung ausgeben.\n" #~ "\n" #~ msgid " -h, --help Print this help, then exit\n" #~ msgstr " -h, --help Diese Hilfe anzeigen\n" #~ msgid " -v, --version Print version number, then exit\n" #~ msgstr " -v, --version Versionsnummer anzeigen\n" #~ msgid " -a, --all-blocks Show information for every basic block\n" #~ msgstr " -a, --all-blocks Informationen für jeden Basisblock zeigen\n" #~ msgid " -b, --branch-probabilities Include branch probabilities in output\n" #~ msgstr " -b, --branch-probabilities Zweigwahrscheinlichkeiten in Ausgabe aufnehmen\n" #~ msgid "" #~ " -c, --branch-counts Given counts of branches taken\n" #~ " rather than percentages\n" #~ msgstr " -c, --branch-counts Angegebene Zweigzahlen statt Anteilen nehmen\n" #~ msgid " -n, --no-output Do not create an output file\n" #~ msgstr " -n, --no-output Keine Ausgabedatei erzeugen\n" #~ msgid "" #~ " -l, --long-file-names Use long output file names for included\n" #~ " source files\n" #~ msgstr "" #~ " -l, --long-file-names Lange Dateinamen für Ausgabedateien für\n" #~ " eingefügte Quelldateien verwenden\n" #~ msgid " -f, --function-summaries Output summaries for each function\n" #~ msgstr " -f, --function-summaries Ausgabezusammenfassungen für jede Funktion\n" #~ msgid " -o, --object-directory DIR|FILE Search for object files in DIR or called FILE\n" #~ msgstr "" #~ " -o, --object-directory DIR|FILE In DIR oder aufgerufener Datei FILE nach\n" #~ " Objektdateien suchen\n" #~ msgid " -p, --preserve-paths Preserve all pathname components\n" #~ msgstr " -p, --preserve-paths Alle Pfadnamenskomponenten bewahren\n" #~ msgid " -u, --unconditional-branches Show unconditional branch counts too\n" #~ msgstr " -u, --unconditional-branches Auch unbedingte Zweigzähler zeigen\n" #~ msgid "" #~ "\n" #~ "For bug reporting instructions, please see:\n" #~ "%s.\n" #~ msgstr "" #~ "\n" #~ "Zum Einsenden von Fehlerberichten (auf Englisch) lesen Sie bitte die Hinweise in:\n" #~ "%s.\n" #~ "Fehler in der deutschen Übersetzung sind an de@li.org zu melden.\n" #~ msgid "gcov (GCC) %s\n" #~ msgstr "gcov (GCC) %s\n" #~ msgid "Copyright (C) 2003 Free Software Foundation, Inc.\n" #~ msgstr "Copyright © 2003 Free Software Foundation, Inc.\n" #~ msgid "" #~ "This is free software; see the source for copying conditions.\n" #~ "There is NO warranty; not even for MERCHANTABILITY or \n" #~ "FITNESS FOR A PARTICULAR PURPOSE.\n" #~ "\n" #~ msgstr "" #~ "Dies ist freie Software; die Kopierbedingungen stehen in den Quellen. Es\n" #~ "gibt KEINE Garantie; auch nicht für VERKAUFBARKEIT oder FÜR SPEZIELLE ZWECKE.\n" #~ "\n" #~ msgid "%s:no functions found\n" #~ msgstr "%s: keine Funktionen gefunden\n" #~ msgid "\n" #~ msgstr "\n" #~ msgid "%s:creating `%s'\n" #~ msgstr "%s: Erzeugen von »%s«\n" #~ msgid "%s:error writing output file `%s'\n" #~ msgstr "%s: Fehler beim Schreiben der Ausgabedatei »%s«\n" #~ msgid "%s:could not open output file `%s'\n" #~ msgstr "%s: Ausgabedatei %s konnte nicht geöffnet werden\n" #~ msgid "%s:cannot open graph file\n" #~ msgstr "%s: Graph-Datei kann nicht geöffnet werden\n" #~ msgid "%s:not a gcov graph file\n" #~ msgstr "%s: keine gcov-Graph-Datei\n" #~ msgid "%s:version `%.4s', prefer `%.4s'\n" #~ msgstr "%s: Version »%.4s«, aber »%.4s« wird bevorzugt\n" #~ msgid "%s:already seen blocks for `%s'\n" #~ msgstr "%s: bereits gesehene Blöcke für »%s«\n" #~ msgid "%s:corrupted\n" #~ msgstr "%s: beschädigt\n" #~ msgid "%s:cannot open data file\n" #~ msgstr "%s: kann nicht geöffnet werden\n" #~ msgid "%s:not a gcov data file\n" #~ msgstr "%s: keine gcov-Datei\n" #~ msgid "%s:version `%.4s', prefer version `%.4s'\n" #~ msgstr "%s: Version »%.4s«, aber Version »%.4s« wird bevorzugt\n" #~ msgid "%s:stamp mismatch with graph file\n" #~ msgstr "%s: Marke passt nicht zur Graph-Datei\n" #~ msgid "%s:unknown function `%u'\n" #~ msgstr "%s: unbekannte Funktion »%u«\n" #~ msgid "%s:profile mismatch for `%s'\n" #~ msgstr "%s: Profil passt nicht für `%s'\n" #~ msgid "%s:overflowed\n" #~ msgstr "%s: übergelaufen\n" #~ msgid "%s:`%s' lacks entry and/or exit blocks\n" #~ msgstr "%s: Eintrag und/oder Exit-Blöcke fehlen in »%s«\n" #~ msgid "%s:`%s' has arcs to entry block\n" #~ msgstr "%s: »%s« hat Bögen zum Eintrittsblock\n" #~ msgid "%s:`%s' has arcs from exit block\n" #~ msgstr "%s: »%s« hat Bögen vom Eintrittsblock\n" #~ msgid "%s:graph is unsolvable for `%s'\n" #~ msgstr "%s: Graph ist für »%s« unlösbar\n" #~ msgid "%s `%s'\n" #~ msgstr "%s: »%s«\n" #~ msgid "Lines executed:%s of %d\n" #~ msgstr "%s von %d Zeilen ausgeführt\n" #~ msgid "No executable lines" #~ msgstr "Keine ausführbaren Zeilen" #~ msgid "Branches executed:%s of %d\n" #~ msgstr "%s von %d Zweigen ausgeführt\n" #~ msgid "Taken at least once:%s of %d\n" #~ msgstr "%s von %d Zweigen mindestens einmal genommen\n" #~ msgid "No branches\n" #~ msgstr "Keine Zweige\n" #~ msgid "Calls executed:%s of %d\n" #~ msgstr "%s von %d Aufrufe ausgeführt\n" #~ msgid "No calls\n" #~ msgstr "Keine Aufrufe\n" #~ msgid "%s:no lines for `%s'\n" #~ msgstr "%s: keine Zeilen für »%s«\n" #~ msgid "call %2d returned %s\n" #~ msgstr "Aufruf %2d gab %s zurück\n" #~ msgid "call %2d never executed\n" #~ msgstr "Aufruf %2d niemals ausgeführt\n" #~ msgid "branch %2d taken %s%s\n" #~ msgstr "Zweig %2d wurde genommen: %s%s\n" #~ msgid "branch %2d never executed\n" #~ msgstr "Zweig %2d niemals ausgeführt\n" #~ msgid "unconditional %2d taken %s\n" #~ msgstr "unbedingtes %2d, genommen: %s\n" #~ msgid "unconditional %2d never executed\n" #~ msgstr "unbedingtes %2d niemals ausgeführt\n" #~ msgid "%s:cannot open source file\n" #~ msgstr "%s: Quelldatei kann nicht geöffnet werden\n" #~ msgid "%s:source file is newer than graph file `%s'\n" #~ msgstr "%s: Quelldatei ist neuer als Graph-Datei »%s«\n" #~ msgid "GCSE disabled" #~ msgstr "GCSE ausgeschaltet" #~ msgid "NULL pointer checks disabled" #~ msgstr "NULL-Zeiger Tests ausgeschaltet" #~ msgid "jump bypassing disabled" #~ msgstr "Sprungumgehungen ausgeschaltet" #~ msgid "%s: %d basic blocks and %d edges/basic block" #~ msgstr "%s: %d Basis-Blöcke und %d Kanten/Basis-Blöcke" #~ msgid "%s: %d basic blocks and %d registers" #~ msgstr "%s: %d Basis-Blöcke und %d Register" #~ msgid "can't write PCH file: %m" #~ msgstr "PCH-Datei kann nicht geschrieben werden: %m" #~ msgid "can't get position in PCH file: %m" #~ msgstr "Position in PCH-Datei kann nicht ermittelt werden: %m" #~ msgid "can't write padding to PCH file: %m" #~ msgstr "Auffüllung für PCH-Datei kann nicht geschrieben werden: %m" #~ msgid "can't read PCH file: %m" #~ msgstr "PCH-Datei kann nicht gelesen werden: %m" #~ msgid "had to relocate PCH" #~ msgstr "PCH musste verschoben werden" #~ msgid "open /dev/zero: %m" #~ msgstr "/dev/zero öffnen: %m" #~ msgid "can't write PCH file" #~ msgstr "PCH-Datei kann nicht geschrieben werden" #~ msgid "Generating PCH files is not supported when using ggc-simple.c" #~ msgstr "Das Erzeugen von PCH-Dateien wird bei Verwendung von ggc-simple.c nicht unterstützt" #~ msgid "%s cannot be used in asm here" #~ msgstr "%s kann nicht hier in »asm« verwendet werden" #~ msgid "can't open %s: %m" #~ msgstr "%s kann nicht geöffnet werden: %m" #~ msgid "fix_sched_param: unknown param: %s" #~ msgstr "fix_sched_param: unbekannter Parameter: %s" #~ msgid "function cannot be inline" #~ msgstr "Funktion kann nicht »inline« sein" #~ msgid "varargs function cannot be inline" #~ msgstr "Varargs-Funktion kann nicht »inline« sein" #~ msgid "function using alloca cannot be inline" #~ msgstr "alloca benutzende Funktion kann nicht »inline« sein" #~ msgid "function using longjmp cannot be inline" #~ msgstr "longjmp benutzende Funktion kann nicht »inline« sein" #~ msgid "function using setjmp cannot be inline" #~ msgstr "setjmp benutzende Funktion kann nicht »inline« sein" #~ msgid "function uses __builtin_eh_return" #~ msgstr "Funktion verwendet __builtin_eh_return" #~ msgid "function with nested functions cannot be inline" #~ msgstr "Funktion mit geschachtelten Funktionen kann nicht »inline« sein" #~ msgid "function with label addresses used in initializers cannot inline" #~ msgstr "Funktion mit Markenadressen in Initialisierungen kann nicht »inline« sein" #~ msgid "function too large to be inline" #~ msgstr "Funktion zu groß um »inline« sein zu können" #~ msgid "no prototype, and parameter address used; cannot be inline" #~ msgstr "kein Prototyp, und Parameteradresse verwendet; kann nicht »inline« sein" #~ msgid "inline functions not supported for this return value type" #~ msgstr "»inline«-Funktionen für diesen Rückgabetyp nicht unterstützt" #~ msgid "function with varying-size return value cannot be inline" #~ msgstr "Funktion mit Rückgabetyp variabler Größe kann nicht »inline« sein" #~ msgid "function with varying-size parameter cannot be inline" #~ msgstr "Funktion mit Parameter variabler Größe kann nicht »inline« sein" #~ msgid "function with transparent unit parameter cannot be inline" #~ msgstr "Funktion mit transparentem Einheiten-Parameter kann nicht »inline« sein" #~ msgid "function with computed jump cannot inline" #~ msgstr "Funktion mit berechnetem Sprung kann nicht »inline« sein" #~ msgid "function with nonlocal goto cannot be inline" #~ msgstr "Funktion mit nichtlokalem Goto kann nicht »inline« sein" #~ msgid "function with target specific attribute(s) cannot be inlined" #~ msgstr "Funktion mit zielspezifischen Attributen kann nicht »inline« sein" #~ msgid "%Hwill never be executed" #~ msgstr "%Hwird niemals ausgeführt" #~ msgid "This switch lacks documentation" #~ msgstr "Dieser Schalter ist undokumentiert" #~ msgid "command line option \"%s\" is valid for %s but not for %s" #~ msgstr "Kommandozeilenoption \"%s\" ist gültig für %s, aber nicht für %s" #~ msgid "missing argument to \"%s\"" #~ msgstr "fehlendes Argument für »%s«" #~ msgid "argument to \"%s\" should be a non-negative integer" #~ msgstr "Argument von »%s« sollte eine nicht-negative Ganzzahl sein" #~ msgid "unrecognized command line option \"%s\"" #~ msgstr "nicht erkannte Kommandozeilenoption »%s«" #~ msgid "-Wuninitialized is not supported without -O" #~ msgstr "-Wuninitialized wird nicht ohne -O unterstützt" #~ msgid "unrecognized register name \"%s\"" #~ msgstr "unbekannter Registername: \"%s\"" #~ msgid "unknown tls-model \"%s\"" #~ msgstr "unbekanntes tls-Modell »%s«" #~ msgid "-fwritable-strings is deprecated; see documentation for details" #~ msgstr "-fwritable-strings veraltet, schauen Sie in die Dokumentation für Details" #~ msgid "%s: --param arguments should be of the form NAME=VALUE" #~ msgstr "%s: »--param«-Argumente sollten von der Form NAME=VALUE sein" #~ msgid "invalid --param value `%s'" #~ msgstr "ungültiger Wert für --param: »%s«" #~ msgid "target system does not support debug output" #~ msgstr "Zielsystem unterstützt nicht Testausgaben" #~ msgid "debug format \"%s\" conflicts with prior selection" #~ msgstr "Testformat »%s« steht in Konflikt mit vorheriger Auswahl" #~ msgid "unrecognised debug output level \"%s\"" #~ msgstr "Testausgabestufe »%s« nicht erkannt" #~ msgid "debug output level %s is too high" #~ msgstr "Testausgabestufe »%s« ist zu groß" #~ msgid "The following options are language-independent:\n" #~ msgstr "Die folgenden Optionen sind sprach-unabhängig:\n" #~ msgid "" #~ "The %s front end recognizes the following options:\n" #~ "\n" #~ msgstr "" #~ "Das %s-Frontend erkennt die folgenden Optionen:\n" #~ "\n" #~ msgid "The --param option recognizes the following as parameters:\n" #~ msgstr "Die Option »--param« erkennt die folgenden Parameter:\n" #~ msgid "invalid parameter `%s'" #~ msgstr "ungültiger Parameter »%s«" #~ msgid "corrupted profile info: run_max * runs < sum_max" #~ msgstr "beschädigte Profilinformation: run_max * runs < sum_max" #~ msgid "corrupted profile info: sum_all is smaller than sum_max" #~ msgstr "beschädigte Profilinformation: sum_all ist kleiner als sum_max" #~ msgid "corrupted profile info: edge from %i to %i exceeds maximal count" #~ msgstr "Info zum beschädigten Profil: Kante von %i nach %i überschreitet Höchstzahl" #~ msgid "corrupted profile info: number of iterations for basic block %d thought to be %i" #~ msgstr "Info zum beschädigten Profil: Anzahl der Durchläufe des Basisblocks %d sollte %i sein" #~ msgid "corrupted profile info: number of executions for edge %d-%d thought to be %i" #~ msgstr "Info zum beschädigten Profil: Anzahl der Ausführungen der Kante »%d-%d« sollte %i sein" #~ msgid "%s: internal abort\n" #~ msgstr "%s: interner Abbruch\n" #~ msgid "%s: error writing file `%s': %s\n" #~ msgstr "%s: Fehler beim Schreiben der Datei »%s«: %s\n" #~ msgid "%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]'\n" #~ msgstr "%s: Aufruf '%s [ -VqfnkN ] [ -i ] [ Dateiname ... ]'\n" #~ msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]'\n" #~ msgstr "%s: Aufruf '%s [ -VqfnkNlgC ] [ -B ] [ Dateiname ... ]'\n" #~ msgid "%s: warning: no read access for file `%s'\n" #~ msgstr "%s: Warnung: kein Leserecht für Datei »%s«\n" #~ msgid "%s: warning: no write access for file `%s'\n" #~ msgstr "%s: Warnung: kein Schreibrecht für Datei »%s«\n" #~ msgid "%s: warning: no write access for dir containing `%s'\n" #~ msgstr "%s: Warnung: kein Schreibrecht für Verzeichnis von »%s«\n" #~ msgid "%s: invalid file name: %s\n" #~ msgstr "%s: ungültiger Dateiname: %s\n" #~ msgid "%s: %s: can't get status: %s\n" #~ msgstr "%s: %s: kann Status nicht ermitteln: %s\n" #~ msgid "" #~ "\n" #~ "%s: fatal error: aux info file corrupted at line %d\n" #~ msgstr "" #~ "\n" #~ "%s: kritischer Fehler: Datei mit Hilfsinformationen beschädigt in Zeile %d\n" #~ msgid "%s:%d: declaration of function `%s' takes different forms\n" #~ msgstr "%s:%d: Deklaration der Funktion »%s« nimmt verschiedene Formen an\n" #~ msgid "%s: compiling `%s'\n" #~ msgstr "%s: »%s« wird kompiliert\n" #~ msgid "%s: wait: %s\n" #~ msgstr "%s: warten: %s\n" #~ msgid "%s: subprocess got fatal signal %d\n" #~ msgstr "%s: Subprozess empfing kritischen Fehler %d\n" #~ msgid "%s: %s exited with status %d\n" #~ msgstr "%s: %s beendet mit Status %d\n" #~ msgid "%s: warning: missing SYSCALLS file `%s'\n" #~ msgstr "%s: Warnung: SYSCALLS-Datei »%s« fehlt\n" #~ msgid "%s: can't read aux info file `%s': %s\n" #~ msgstr "%s: Datei mit Hilfsinformationen »%s« kann nicht gelesen werden: %s\n" #~ msgid "%s: can't get status of aux info file `%s': %s\n" #~ msgstr "%s: Status der Datei mit Hilfsinformationen »%s« kann nicht ermittelt werden: %s\n" #~ msgid "%s: can't open aux info file `%s' for reading: %s\n" #~ msgstr "%s: Datei mit Hilfsinformationen »%s« kann nicht zum Lesen geöffnet werden: %s\n" #~ msgid "%s: error reading aux info file `%s': %s\n" #~ msgstr "%s: Fehler beim Lesen der Datei mit Hilfsinformationen »%s«: %s\n" #~ msgid "%s: error closing aux info file `%s': %s\n" #~ msgstr "%s: Fehler beim Schließen der Datei mit Hilfsinformationen »%s«: %s\n" #~ msgid "%s: can't delete aux info file `%s': %s\n" #~ msgstr "%s: Fehler beim Löschen der Datei mit Hilfsinformationen »%s«: %s\n" #~ msgid "%s: can't delete file `%s': %s\n" #~ msgstr "%s: Fehler beim Löschen der Datei »%s«: %s\n" #~ msgid "%s: warning: can't rename file `%s' to `%s': %s\n" #~ msgstr "%s: Warnung: Fehler beim Umbenennen der Datei »%s« in »%s«: %s\n" #~ msgid "%s: conflicting extern definitions of '%s'\n" #~ msgstr "%s: externe Definitionen von »%s« stehen in Konflikt\n" #~ msgid "%s: declarations of '%s' will not be converted\n" #~ msgstr "%s: Deklarationen von »%s« werden nicht konvertiert\n" #~ msgid "%s: conflict list for '%s' follows:\n" #~ msgstr "%s: Konfliktliste für »%s« folgt:\n" #~ msgid "%s: warning: using formals list from %s(%d) for function `%s'\n" #~ msgstr "%s: Warnung: Formalliste von %s(%d) für Funktion »%s« verwendet\n" #~ msgid "%s: %d: `%s' used but missing from SYSCALLS\n" #~ msgstr "%s: %d: »%s« verwendet, fehlt jedoch in SYSCALLS\n" #~ msgid "%s: %d: warning: no extern definition for `%s'\n" #~ msgstr "%s: %d: Warnung: keine externe Definition für »%s«\n" #~ msgid "%s: warning: no static definition for `%s' in file `%s'\n" #~ msgstr "%s: Warnung: keine statische Definition für »%s« in Datei »%s«\n" #~ msgid "%s: multiple static defs of `%s' in file `%s'\n" #~ msgstr "%s: mehrere statische Definitionen von »%s« in Datei »%s«\n" #~ msgid "%s: %d: warning: source too confusing\n" #~ msgstr "%s: %d: Warnung: Quelle zu verworren\n" #~ msgid "%s: %d: warning: varargs function declaration not converted\n" #~ msgstr "%s: %d: Warnung: Funktionsdeklaration mit variablen Argumenten nicht konvertiert\n" #~ msgid "%s: declaration of function `%s' not converted\n" #~ msgstr "%s: Deklaration der Funktion »%s« nicht konvertiert\n" #~ msgid "%s: warning: too many parameter lists in declaration of `%s'\n" #~ msgstr "%s: Warnung: zu viele Parameterlisten in Deklaration von »%s«\n" #~ msgid "" #~ "\n" #~ "%s: warning: too few parameter lists in declaration of `%s'\n" #~ msgstr "" #~ "\n" #~ "%s: Warnung: zu wenige Parameterlisten in Deklaration von »%s«\n" #~ msgid "%s: %d: warning: found `%s' but expected `%s'\n" #~ msgstr "%s: %d: Warnung: »%s« gefunden, aber »%s« erwartet\n" #~ msgid "%s: local declaration for function `%s' not inserted\n" #~ msgstr "%s: lokale Deklaration für Funktion »%s« nicht eingefügt\n" #~ msgid "" #~ "\n" #~ "%s: %d: warning: can't add declaration of `%s' into macro call\n" #~ msgstr "" #~ "\n" #~ "%s: %d: Warnung: kann Deklaration von »%s« nicht zu Makro-Aufruf hinzufügen\n" #~ msgid "%s: global declarations for file `%s' not inserted\n" #~ msgstr "%s: globale Deklarationen für Datei »%s« wurden nicht eingefügt\n" #~ msgid "%s: definition of function `%s' not converted\n" #~ msgstr "%s: Definition der Funktion »%s« nicht konvertiert\n" #~ msgid "%s: %d: warning: definition of %s not converted\n" #~ msgstr "%s: %d: Warnung: Definition von %s nicht konvertiert\n" #~ msgid "%s: found definition of `%s' at %s(%d)\n" #~ msgstr "%s: Definition von »%s« an Stelle %s(%d) gefunden\n" #~ msgid "%s: %d: warning: `%s' excluded by preprocessing\n" #~ msgstr "%s: %d: Warnung: »%s« durch Präprozessor ausgeschlossen\n" #~ msgid "%s: function definition not converted\n" #~ msgstr "%s: Funktionsdefinition nicht konvertiert\n" #~ msgid "%s: `%s' not converted\n" #~ msgstr "%s: »%s« nicht konvertiert\n" #~ msgid "%s: would convert file `%s'\n" #~ msgstr "%s: würde Datei »%s« konvertieren\n" #~ msgid "%s: converting file `%s'\n" #~ msgstr "%s: Datei »%s« wird konvertiert\n" #~ msgid "%s: can't get status for file `%s': %s\n" #~ msgstr "%s: Status der Datei »%s« kann nicht ermittelt werden: %s\n" #~ msgid "%s: can't open file `%s' for reading: %s\n" #~ msgstr "%s: Datei »%s« kann nicht zum Schreiben geöffnet werden: %s\n" #~ msgid "" #~ "\n" #~ "%s: error reading input file `%s': %s\n" #~ msgstr "" #~ "\n" #~ "%s: Fehler beim Lesen der Eingabedatei »%s«: %s\n" #~ msgid "%s: can't create/open clean file `%s': %s\n" #~ msgstr "%s: die leere Datei »%s« kann nicht erzeugt oder geöffnet werden: %s\n" #~ msgid "%s: warning: file `%s' already saved in `%s'\n" #~ msgstr "%s: Warnung: Datei »%s« bereits in »%s« gesichert\n" #~ msgid "%s: can't link file `%s' to `%s': %s\n" #~ msgstr "%s: die Datei »%s« kann nicht mit »%s« verbunden werden (Link): %s\n" #~ msgid "%s: can't create/open output file `%s': %s\n" #~ msgstr "%s: die Ausgabedatei »%s« kann nicht erzeugt oder geöffnet werden: %s\n" #~ msgid "%s: can't change mode of file `%s': %s\n" #~ msgstr "%s: Rechte der Datei »%s« können nicht geändert werden: %s\n" #~ msgid "%s: cannot get working directory: %s\n" #~ msgstr "%s: aktuelles Verzeichnis kann nicht ermittelt werden: %s\n" #~ msgid "%s: input file names must have .c suffixes: %s\n" #~ msgstr "%s: Namen der Eingabedateien müssen Suffix ».c« haben: %s\n" #~ msgid "Didn't find a coloring.\n" #~ msgstr "Färbung konnte nicht gefunden werden.\n" #~ msgid "output constraint %d must specify a single register" #~ msgstr "Ausgabebedingung %d muss ein einzelnes Register angeben" #~ msgid "output constraint %d cannot be specified together with \"%s\" clobber" #~ msgstr "Ausgabebedingung %d kann nicht zusammen mit »%s« angegeben werden" #~ msgid "output regs must be grouped at top of stack" #~ msgstr "Ausgaberegister müssen oben auf dem Stack gruppiert werden" #~ msgid "implicitly popped regs must be grouped at top of stack" #~ msgstr "implizit geholte (»pop«) Register müssen oben auf dem Stack gruppiert werden" #~ msgid "output operand %d must use `&' constraint" #~ msgstr "Ausgabeoperand %d muss »&«-Bedingung benutzen" #~ msgid "can't use '%s' as a %s register" #~ msgstr "»%s« kann nicht als ein %s-Register verwendet werden" #~ msgid "unknown register name: %s" #~ msgstr "unbekannter Registername: %s" #~ msgid "global register variable follows a function definition" #~ msgstr "globale Registervariable folgt einer Funktionsdefinition" #~ msgid "register used for two global register variables" #~ msgstr "Register für zwei globale Registervariablen verwendet" #~ msgid "call-clobbered register used for global register variable" #~ msgstr "für Ruf vorgesehenes Register wurde für globale Registervariable verwendet" #~ msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)" #~ msgstr "validate_value_data: [%u] Falsches next_regno für leere Kette (%u)" #~ msgid "validate_value_data: Loop in regno chain (%u)" #~ msgstr "validate_value_data: Zyklus in regno-Kette (%u)" #~ msgid "validate_value_data: [%u] Bad oldest_regno (%u)" #~ msgstr "validate_value_data: [%u] Falsches oldest_regno (%u)" #~ msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)" #~ msgstr "validate_value_data: [%u] Nicht leeres Register in Kette (%s %u %i)" #~ msgid "cannot reload integer constant operand in `asm'" #~ msgstr "Ganzzahlkonstantenoperand kann in »asm« nicht neu geladen werden" #~ msgid "impossible register constraint in `asm'" #~ msgstr "unmögliche Registerbedingung in »asm«" #~ msgid "`&' constraint used with no register class" #~ msgstr "»&«-Bedingung ohne Registerklasse verwendet" #~ msgid "unable to generate reloads for:" #~ msgstr "Neuladungen konnten nicht generiert werden für:" #~ msgid "inconsistent operand constraints in an `asm'" #~ msgstr "inkonsistente Operandenbedingungen in einem »asm«" #~ msgid "frame size too large for reliable stack checking" #~ msgstr "Rahmengröße zu groß für zuverlässige Kellerüberprüfung" #~ msgid "try reducing the number of local variables" #~ msgstr "versuchen Sie, die Anzahl der lokalen Variablen zu verringern" #~ msgid "can't find a register in class `%s' while reloading `asm'" #~ msgstr "in der Klasse »%s« konnte während des Neuladens von »asm« kein Register gefunden werden" #~ msgid "unable to find a register to spill in class `%s'" #~ msgstr "in Klasse »%s« konnte kein Register für Überlauf gefunden werden" #~ msgid "this is the insn:" #~ msgstr "dies ist das insn:" #~ msgid "`asm' operand requires impossible reload" #~ msgstr "»asm«-Operand erfordert unmögliches Neuladen" #~ msgid "could not find a spill register" #~ msgstr "es konnte kein Überlaufregister gefunden werden" #~ msgid "`asm' operand constraint incompatible with operand size" #~ msgstr "»asm«-Operandenbedingung inkompatibel mit Operandengröße" #~ msgid "VOIDmode on an output" #~ msgstr "VOIDmode bei einer Ausgabe" #~ msgid "output operand is constant in `asm'" #~ msgstr "Ausgabeoperand ist in »asm« konstant" #~ msgid "unrecognizable insn:" #~ msgstr "unerkennbares insn:" #~ msgid "insn does not satisfy its constraints:" #~ msgstr "insn erfüllt nicht seine Bedingungen:" #~ msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d" #~ msgstr "RTL-Überprüfung: Zugriff von Elt %d von »%s« mit letztem Elt %d in %s, bei %s:%d" #~ msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" #~ msgstr "RTL-Überprüfung: Elt-%d-Typ %c erwartet, haben Typ %c (rtx %s) in %s, bei %s:%d" #~ msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d" #~ msgstr "RTL-Überprüfung: Elt-%d-Typ %c oder %c erwartet, haben Typ %c (rtx %s) in %s, bei %s:%d" #~ msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d" #~ msgstr "RTL-Überprüfung: Code »%s« erwartet, haben »%s« in %s, bei %s:%d" #~ msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d" #~ msgstr "RTL-Überprüfung: Code »%s« oder »%s« erwartet, haben »%s« in %s, bei %s:%d" #~ msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" #~ msgstr "RTL-Überprüfung: Zugriff von Elt %d von Vektor mit letztem Elt %d in %s, bei %s:%d" #~ msgid "RTL flag check: %s used with unexpected rtx code `%s' in %s, at %s:%d" #~ msgstr "RTL-Kennzeichenüberprüfung: %s mit unerwartetem RTX-Code »%s« in %s bei %s:%d verwendet" #~ msgid "jump to `%s' invalidly jumps into binding contour" #~ msgstr "Sprung zu »%s« springt ungültig in bindenden Querschnitt" #~ msgid "%Jlabel '%D' used before containing binding contour" #~ msgstr "%JMarke »%D« verwendet vor enthaltendem bindenden Querschnitt" #~ msgid "output operand constraint lacks `='" #~ msgstr "Bedingung des Ausgabeoperanden erfordert »=«" #~ msgid "output constraint `%c' for operand %d is not at the beginning" #~ msgstr "Ausgabebedingung »%c« für Operand %d steht nicht am Anfang" #~ msgid "operand constraint contains incorrectly positioned '+' or '='" #~ msgstr "Operandenbedingung enthält falsch positioniertes »+« oder »=«" #~ msgid "`%%' constraint used with last operand" #~ msgstr "»%%«-Bedingung mit letztem Operanden verwendet" #~ msgid "matching constraint not valid in output operand" #~ msgstr "dazu passende Bedingung in Ausgabeoperanden ungültig" #~ msgid "read-write constraint does not allow a register" #~ msgstr "Schreib- und Lesebeschränkungen erlauben kein Register" #~ msgid "input operand constraint contains `%c'" #~ msgstr "Bedingung für Eingabeoperanden enthält »%c«" #~ msgid "matching constraint references invalid operand number" #~ msgstr "dazu passende Bedingung referenziert ungültige Operandennummer" #~ msgid "invalid punctuation `%c' in constraint" #~ msgstr "ungültiges Zeichen »%c« in Bedingung" #~ msgid "matching constraint does not allow a register" #~ msgstr "dazu passende Bedingung erlaubt kein Register" #~ msgid "asm-specifier for variable `%s' conflicts with asm clobber list" #~ msgstr "asm-Spezifizierer für Variable »%s« steht in Konflikt mit asm-Konflikt-Liste" #~ msgid "unknown register name `%s' in `asm'" #~ msgstr "unbekannter Registername »%s« in »asm«" #~ msgid "PIC register `%s' clobbered in `asm'" #~ msgstr "PIC-Register »%s« wird in »asm« zerstört" #~ msgid "more than %d operands in `asm'" #~ msgstr "mehr als %d Operanden in »asm«" #~ msgid "output number %d not directly addressable" #~ msgstr "Ausgabezahl %d nicht direkt adressierbar" #~ msgid "asm operand %d probably doesn't match constraints" #~ msgstr "asm-Operand %d passt wahrscheinlich nicht zu den Bedingungen" #~ msgid "use of memory input without lvalue in asm operand %d is deprecated" #~ msgstr "die Verwendung einer Speichereingabe ohne L-Wert in asm-Operand %d ist veraltet" #~ msgid "asm clobber conflict with output operand" #~ msgstr "asm-Konflikt mit Ausgabeoperand" #~ msgid "asm clobber conflict with input operand" #~ msgstr "asm-Konflikt mit Eingabeoperand" #~ msgid "too many alternatives in `asm'" #~ msgstr "zu viele Alternativen in »asm«" #~ msgid "operand constraints for `asm' differ in number of alternatives" #~ msgstr "Operandenbedingungen für »asm« unterscheiden sich in der Anzahl der Alternativen" #~ msgid "duplicate asm operand name '%s'" #~ msgstr "doppelter asm-Operandenname »%s«" #~ msgid "missing close brace for named operand" #~ msgstr "schließende geschweifte Klammer für benannten Operanden fehlt" #~ msgid "undefined named operand '%s'" #~ msgstr "benannter Operand »%s« ist nicht definiert" #~ msgid "%Hstatement with no effect" #~ msgstr "%HAnweisung ohne Effekt" #~ msgid "%Hvalue computed is not used" #~ msgstr "%Hberechneter Wert ist unbenutzt" #~ msgid "%Junused variable '%D'" #~ msgstr "%JVariable »%D« wird nicht verwendet" #~ msgid "%Hunreachable code at beginning of %s" #~ msgstr "%Hunerreichbarer Code am Anfang von %s" #~ msgid "enumeration value `%s' not handled in switch" #~ msgstr "Aufzählungswert »%s« wird nicht von switch behandelt" #~ msgid "case value `%ld' not in enumerated type" #~ msgstr "case-Wert »%ld« nicht in Aufzählungstyp" #~ msgid "case value `%ld' not in enumerated type `%s'" #~ msgstr "case-Wert »%ld« nicht in Aufzählungstyp »%s«" #~ msgid "switch missing default case" #~ msgstr "die Standardfallbehandlung in switch fehlt" #~ msgid "type size can't be explicitly evaluated" #~ msgstr "die Typgröße kann nicht explizit ausgewertet werden" #~ msgid "variable-size type declared outside of any function" #~ msgstr "Typ mit variabler Größe wurde außerhalb einer Funktion definiert" #~ msgid "%Jsize of '%D' is %d bytes" #~ msgstr "%JGröße von »%Ds« ist %d Bytes" #~ msgid "%Jsize of '%D' is larger than %d bytes" #~ msgstr "%JGröße von »%D« übertrifft %d Bytes" #~ msgid "%Jpacked attribute causes inefficient alignment for '%D'" #~ msgstr "%Jgepacktes Attribut verursacht ineffiziente Ausrichtung für »%D«" #~ msgid "%Jpacked attribute is unnecessary for '%D'" #~ msgstr "%Jgepacktes Attribut ist unnötig für »%D«" #~ msgid "%Jpadding struct to align '%D'" #~ msgstr "%Jstruct wird aufgefüllt, um »%D« auszurichten" #~ msgid "padding struct size to alignment boundary" #~ msgstr "struct wird bis zur Ausrichtungsgrenze aufgefüllt" #~ msgid "packed attribute causes inefficient alignment for `%s'" #~ msgstr "gepacktes Attribut verursacht ineffiziente Ausrichtung für »%s«" #~ msgid "packed attribute is unnecessary for `%s'" #~ msgstr "gepacktes Attribut ist unnötig für »%s«" #~ msgid "packed attribute causes inefficient alignment" #~ msgstr "gepacktes Attribut führt zu ineffizienter Ausrichtung" #~ msgid "packed attribute is unnecessary" #~ msgstr "gepacktes Attribut ist unnötig" #~ msgid "__builtin_saveregs not supported by this target" #~ msgstr "__builtin_saveregs wird von diesem Ziel nicht unterstützt" #~ msgid "cannot timevar_pop '%s' when top of timevars stack is '%s'" #~ msgstr "timevar_pop '%s' kann nicht ausgeführt werden, wenn am Anfang des timevars-Stacks '%s' steht" #~ msgid "" #~ "\n" #~ "Execution times (seconds)\n" #~ msgstr "" #~ "\n" #~ "Ausführungszeiten (Sekunden)\n" #~ msgid " TOTAL :" #~ msgstr " GESAMT :" #~ msgid "time in %s: %ld.%06ld (%ld%%)\n" #~ msgstr "Zeit in %s: %ld.%06ld (%ld%%)\n" #~ msgid "collect: reading %s\n" #~ msgstr "sammeln: %s lesen\n" #~ msgid "collect: recompiling %s\n" #~ msgstr "sammeln: %s neu kompilieren\n" #~ msgid "collect: tweaking %s in %s\n" #~ msgstr "sammeln: %s wird in %s eingestellt\n" #~ msgid "collect: relinking\n" #~ msgstr "sammeln: neu binden\n" #~ msgid "ld returned %d exit status" #~ msgstr "ld gab %d als Ende-Status zurück" #~ msgid "%s " #~ msgstr "%s " #~ msgid " %s" #~ msgstr " %s" #~ msgid "invalid option argument `%s'" #~ msgstr "ungültiges Optionsargument »%s«" #~ msgid "getting core file size maximum limit: %m" #~ msgstr "Kern-Dateigrößenlimit wird geholt: %m" #~ msgid "setting core file size limit to maximum: %m" #~ msgstr "Kern-Dateigrößenlimit wird gesetzt: %m" #~ msgid "%J'%F' used but never defined" #~ msgstr "%J»%F« verwendet, aber nirgendwo definiert" #~ msgid "%J'%F' declared `static' but never defined" #~ msgstr "%J»%F« als »static« deklariert, aber nirgendwo definiert" #~ msgid "%J'%D' defined but not used" #~ msgstr "%J»%D« definiert, aber nicht verwendet" #~ msgid "`%s' is deprecated (declared at %s:%d)" #~ msgstr "»%s« ist veraltet (deklariert bei %s:%d)" #~ msgid "`%s' is deprecated" #~ msgstr "»%s« ist veraltet" #~ msgid "type is deprecated (declared at %s:%d)" #~ msgstr "Typ ist veraltet (in %s:%d deklariert)" #~ msgid "type is deprecated" #~ msgstr "Typ ist veraltet" #~ msgid "invalid register name `%s' for register variable" #~ msgstr "ungültiger Registername »%s« für Registervariable" #~ msgid "branch target register load optimization is not intended to be run twice" #~ msgstr "Ladeoptimierung für Zweig-Zielregister ist nicht dafür vorgesehen, mehrfach zu laufen" #~ msgid "" #~ "\n" #~ "Target specific options:\n" #~ msgstr "" #~ "\n" #~ "Zielspezifische Optionen:\n" #~ msgid " -m%-23s [undocumented]\n" #~ msgstr " -m%-23s [undokumentiert]\n" #~ msgid "" #~ "\n" #~ "There are undocumented target specific options as well.\n" #~ msgstr "" #~ "\n" #~ "Es gibt auch undokumentierte zielspezifische Optionen.\n" #~ msgid " They exist, but they are not documented.\n" #~ msgstr " Es gibt sie, aber sie sind nicht dokumentiert.\n" #~ msgid "unrecognized gcc debugging option: %c" #~ msgstr "gcc-Debuggingoption nicht erkannt: %c" #~ msgid "invalid option `%s'" #~ msgstr "ungültige Option »%s«" #~ msgid "" #~ "%s%s%s version %s (%s)\n" #~ "%s\tcompiled by GNU C version %s.\n" #~ "%s%s%s version %s (%s) compiled by CC.\n" #~ msgstr "" #~ "%s%s%s Version %s (%s)\n" #~ "%s\tkompiliert von GNU-C-Version %s.\n" #~ "%s%s%s Version %s (%s) kompiliert von CC.\n" #~ msgid "%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n" #~ msgstr "%s%sGGC-Heuristik: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n" #~ msgid "options passed: " #~ msgstr "angegebene Optionen: " #~ msgid "options enabled: " #~ msgstr "angeschaltete Optionen: " #~ msgid "can't open %s for writing: %m" #~ msgstr "Datei »%s« kann nicht zum Schreiben geöffnet werden: %m" #~ msgid "created and used with different settings of -fpic" #~ msgstr "erzeugt und mit anderen Einstellungen von -fpic verwendet" #~ msgid "created and used with different settings of -fpie" #~ msgstr "erzeugt und mit anderen Einstellungen von -fpie verwendet" #~ msgid "created and used with differing settings of `-m%s'" #~ msgstr "erzeugt und mit anderen Einstellungen von »-m%s« verwendet" #~ msgid "out of memory" #~ msgstr "Platz im Hauptspeicher reicht nicht aus" #~ msgid "instruction scheduling not supported on this target machine" #~ msgstr "Befehlsplanung wird von dieser Zielmaschine nicht unterstützt" #~ msgid "this target machine does not have delayed branches" #~ msgstr "diese Zielmaschine hat keine verzögerten Zweige" #~ msgid "-f%sleading-underscore not supported on this target machine" #~ msgstr "-f%sleading-underscore wird auf dieser Zielmaschine nicht unterstützt" #~ msgid "target system does not support the \"%s\" debug format" #~ msgstr "Zielsystem unterstützt nicht das Testformat \"%s\"" #~ msgid "-ffunction-sections not supported for this target" #~ msgstr "-ffunction-sections wird für dieses Ziel nicht unterstützt" #~ msgid "-fdata-sections not supported for this target" #~ msgstr "-fdata-sections wird für dieses Ziel nicht unterstützt" #~ msgid "-ffunction-sections disabled; it makes profiling impossible" #~ msgstr "-ffunction-sections ausgeschaltet; das macht Profiling unmöglich" #~ msgid "-fprefetch-loop-arrays not supported for this target" #~ msgstr "-fprefetch-loop-arrays wird für dieses Ziel nicht unterstützt" #~ msgid "-fprefetch-loop-arrays not supported for this target (try -march switches)" #~ msgstr "-fprefetch-loop-arrays wird für dieses Ziel nicht unterstützt (versuchen Sie die »-march«-Schalter)" #~ msgid "-fprefetch-loop-arrays is not supported with -Os" #~ msgstr "-fprefetch-loop-arrays wird nicht mit -Os unterstützt" #~ msgid "-ffunction-sections may affect debugging on some targets" #~ msgstr "-ffunction-sections kann für verschiedene Ziele die Fehlersuche beeinträchtigen" #~ msgid "error writing to %s: %m" #~ msgstr "Fehler beim Schreiben der Datei %s: %m" #~ msgid "error closing %s: %m" #~ msgstr "Fehler beim Schließen von %s: %m" #~ msgid "could not open dump file `%s'" #~ msgstr "Abzugsdatei »%s« konnte nicht geöffnet werden" #~ msgid "ignoring unknown option `%.*s' in `-fdump-%s'" #~ msgstr "unbekannte Option »%.*s« in »-fdump-%s« wird ignoriert" #~ msgid "%Jfunction '%F' can never be inlined because it uses alloca (override using the always_inline attribute)" #~ msgstr "%Jdie Funktion »%F« kann nie »inline« sein, da sie alloca verwendet (zum Aufheben: Attribut »always_inline« verwenden)" #~ msgid "%Jfunction '%F' can never be inlined because it uses setjmp" #~ msgstr "%Jdie Funktion »%F« kann nie »inline« sein, da sie setjmp verwendet" #~ msgid "%Jfunction '%F' can never be inlined because it uses variable argument lists" #~ msgstr "%Jdie Funktion »%F« kann nie »inline« sein, da sie eine variable Argumentliste verwendet" #~ msgid "%Jfunction '%F' can never be inlined because it uses setjmp-longjmp exception handling" #~ msgstr "%Jdie Funktion »%F« kann nie »inline« sein, da sie »setjmp-longjmp«-Ausnahmebehandlung verwendet" #~ msgid "%Jfunction '%F' can never be inlined because it contains a nested function" #~ msgstr "%Jdie Funktion »%F« kann nie »inline« sein, da sie eine geschachtelte Funktion enthält" #~ msgid "%Jfunction '%F' can never be inlined because it contains a computed goto" #~ msgstr "%Jdie Funktion »%F« kann nie »inline« sein, da sie ein berechnetes »goto« enthält" #~ msgid "%Jfunction '%F' can never be inlined because it contains a nonlocal goto" #~ msgstr "%Jdie Funktion »%F« kann nie »inline« sein, da sie ein nichtlokales »goto« enthält" #~ msgid "%Jfunction '%F' can never be inlined because it uses variable sized variables" #~ msgstr "%Jdie Funktion »%F« kann nie »inline« sein, da sie Variablen variabler Größe verwendet" #~ msgid "%Jinlining failed in call to '%F': %s" #~ msgstr "%J»inline« beim Aufruf von »%F« gescheitert: %s" #~ msgid "%Jsize of return value of '%D' is %u bytes" #~ msgstr "%JGröße des Rückgabewertes von »%D« ist %u Bytes" #~ msgid "%Jsize of return value of '%D' is larger than %wd bytes" #~ msgstr "%JGröße des Rückgabewertes von »%D« ist größer als %wd Bytes" #~ msgid "arrays of functions are not meaningful" #~ msgstr "Felder von Funktionen sind sinnlos" #~ msgid "function return type cannot be function" #~ msgstr "Rückgabetyp der Funktion kann keine Funktion sein" #~ msgid "invalid initializer for bit string" #~ msgstr "ungültige Initialisierung für Bitstring" #~ msgid "tree check: expected %s, have %s in %s, at %s:%d" #~ msgstr "Baumprüfung: %s erwartet, haben %s in %s, bei %s:%d" #~ msgid "tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d" #~ msgstr "Baumprüfung: Klasse %c erwartet, haben '%c' (%s) in %s, bei %s:%d" #~ msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d" #~ msgstr "Baumprüfung: auf Elt %d von tree_vec mit %d Elts in %s bei %s:%d zugegriffen" #~ msgid "tree check: accessed operand %d of %s with %d operands in %s, at %s:%d" #~ msgstr "Baumprüfung: auf Operand %d von %s mit %d Operanden in %s bei %s:%d zugegriffen" #~ msgid "%J%D causes a section type conflict" #~ msgstr "%J%D löst einen Abschnittstypkonflikt aus" #~ msgid "%Jregister name not specified for '%D'" #~ msgstr "%Jfür »%D« wurde kein Registername angegeben" #~ msgid "%Jinvalid register name for '%D'" #~ msgstr "%Jungültiger Registername für »%D«" #~ msgid "%Jdata type of '%D' isn't suitable for a register" #~ msgstr "%JDatentyp von »%D« eignet sich nicht für Register" #~ msgid "%Jregister specified for '%D' isn't suitable for data type" #~ msgstr "%Jfür »%D« angegebenes Register eignet sich nicht für Datentyp" #~ msgid "global register variable has initial value" #~ msgstr "globle Registervariable hat Anfangswert" #~ msgid "volatile register variables don't work as you might wish" #~ msgstr "»volatile«-Registervariablen funktionieren oft nicht so wie erhofft" #~ msgid "%Jregister name given for non-register variable '%D'" #~ msgstr "%JRegistername für Nicht-Registervariable »%D« verwendet" #~ msgid "%Jstorage size of `%D' isn't known" #~ msgstr "%JSpeichergröße von »%D« ist unbekannt" #~ msgid "%Jalignment of '%D' is greater than maximum object file alignment. Using %d" #~ msgstr "%JAusrichtung von »%D ist größer als maximale Objektdateiausrichtung. %d verwendet«" #~ msgid "thread-local COMMON data not implemented" #~ msgstr "Thread-lokale COMMON-Daten nicht implementiert" #~ msgid "%Jrequested alignment for '%D' is greater than implemented alignment of %d" #~ msgstr "%Jangeforderte Ausrichtung für »%D« ist größer als die implementierte Ausrichtung von %d" #~ msgid "initializer for integer value is too complicated" #~ msgstr "Initialisierung für Ganzzahlwert ist zu kompliziert" #~ msgid "initializer for floating value is not a floating constant" #~ msgstr "Initialisierung für Gleitkommawert ist keine Gleitkommakonstante" #~ msgid "unknown set constructor type" #~ msgstr "unbekannter Mengenkonstruktortyp" #~ msgid "invalid initial value for member `%s'" #~ msgstr "ungültiger Anfangswert für Element »%s«" #~ msgid "%Jweak declaration of '%D' must precede definition" #~ msgstr "%Jschwache Deklaration von »%D« muss der Definition vorangehen" #~ msgid "%Jweak declaration of '%D' after first use results in unspecified behavior" #~ msgstr "%Jschwache Deklaration von »%D« nach erster Benutzung führt zu undefiniertem Verhalten" #~ msgid "%Jweak declaration of '%D' must be public" #~ msgstr "%Jschwache Deklaration von »%D« muss öffentlich sein" #~ msgid "%Jweak declaration of '%D' not supported" #~ msgstr "%Jschwache Deklaration von »%D« wird nicht unterstützt" #~ msgid "only weak aliases are supported in this configuration" #~ msgstr "in dieser Konfiguration werden nur schwache Aliase unterstützt" #~ msgid "alias definitions not supported in this configuration; ignored" #~ msgstr "Alias-Definitionen werden in dieser Konfiguration nicht unterstützt; ignoriert" #~ msgid "visibility attribute not supported in this configuration; ignored" #~ msgstr "Sichtbarkeitsattribute werden in dieser Konfiguration nicht unterstützt; ignoriert" #~ msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d" #~ msgstr "virtuelles Feld %s[%lu]: Element %lu außerhalb der Grenzen in %s, bei %s:%d" #~ msgid "underflowed virtual array %s in %s, at %s:%d" #~ msgstr "Unterlauf im virtuellen Feld %s in %s bei %s:%d" #~ msgid "no sclass for %s stab (0x%x)\n" #~ msgstr "kein »sclass« für %s Stab (0x%x)\n" #~ msgid "fatal error: " #~ msgstr "schwerwiegender Fehler: " #~ msgid "internal compiler error: " #~ msgstr "interner Compiler-Fehler: " #~ msgid "sorry, unimplemented: " #~ msgstr "nicht implementiert: " #~ msgid "anachronism: " #~ msgstr "Anachronismus: " #~ msgid "note: " #~ msgstr "Anmerkung: " #~ msgid "debug: " #~ msgstr "zur Fehlersuche: " #~ msgid "The maximum number of instructions in a single function eligible for inlining" #~ msgstr "Die Höchstzahl der Anweisungen in einer einzelnen für »inline« geeigneten Funktion" #~ msgid "The maximum number of instructions when automatically inlining" #~ msgstr "Die Höchstzahl der Anweisungen für automatisches »inline«" #~ msgid "The maximum number of instructions for the RTL inliner" #~ msgstr "Die Höchstzahl der Anweisungen für RTL »inline«" #~ msgid "The maximum number of instructions to consider to fill a delay slot" #~ msgstr "Die Höchstzahl der zu betrachtenden Anweisungen um Verzögerungsschlitz zu füllen" #~ msgid "The maximum number of instructions to consider to find accurate live register information" #~ msgstr "Die Höchstzahl der zu betrachtenden Anweisungen um richtige aktive Registerinformationen zu finden" #~ msgid "The maximum length of scheduling's pending operations list" #~ msgstr "Die Maximallänge der Liste der anhängigen geplanten Operationen" #~ msgid "The size of function body to be considered large" #~ msgstr "Die Größe eines als groß angesehenen Funktionskörpers" #~ msgid "Maximal growth due to inlining of large function (in percent)" #~ msgstr "Maximales Wachstum durch »inline« einer großen Funktion (in Prozent)" #~ msgid "how much can given compilation unit grow because of the inlining (in percent)" #~ msgstr "um wie viel eine Übersetzungseinheit durch »inline« wachsen kann (in Prozent)" #~ msgid "The maximum amount of memory to be allocated by GCSE" #~ msgstr "Maximalbetrag des von GCSE zu belegenden Speichers" #~ msgid "The maximum number of passes to make when doing GCSE" #~ msgstr "Die Höchstzahl der Durchläufe für GCSE" #~ msgid "The maximum number of instructions to consider to unroll in a loop" #~ msgstr "Die Höchstzahl der zum Aufrollen von Schleifen zu betrachtenden Anweisungen" #~ msgid "The maximum number of instructions to consider to unroll in a loop on average" #~ msgstr "Die Höchstzahl der zum Aufrollen von Schleifen im Mittel zu betrachtenden Anweisungen" #~ msgid "The maximum number of unrollings of a single loop" #~ msgstr "Die Höchstzahl der Iterationen zum Aufrollen in einzelner Schleife" #~ msgid "The maximum number of insns of a peeled loop" #~ msgstr "Die Höchstzahl der insns einer geschälten Schleife" #~ msgid "The maximum number of peelings of a single loop" #~ msgstr "Die Höchstzahl der Schälvorgänge einer einzelnen Schleife" #~ msgid "The maximum number of insns of a completely peeled loop" #~ msgstr "Die Höchstzahl der insns einer vollständig geschälten Schleife" #~ msgid "The maximum number of peelings of a single loop that is peeled completely" #~ msgstr "Die Höchstzahl der Schälvorgänge einer einzelnen Schleife, die vollständig geschält wird" #~ msgid "The maximum number of insns of a peeled loop that rolls only once" #~ msgstr "Die Höchstzahl der insns einer geschälten Schleife, die nur einmal rollt" #~ msgid "`%s' incompatible attribute ignored" #~ msgstr "»%s«-inkompatibles Attribut wird ignoriert" #~ msgid "%Jfunction `%D' definition is marked dllimport." #~ msgstr "%JFunktionsdefinition von »%D« ist als »dllimport« markiert" #~ msgid "%Jinline function '%D' is declared as dllimport: attribute ignored." #~ msgstr "%J»inline«-Funktion »%D« ist als »dllimport« deklariert: Attribute ignoriert." #~ msgid "ms-bitfields not supported for objc" #~ msgstr "ms-Bitfelder nicht unterstützt für objc" #~ msgid "%Jan address area attribute cannot be specified for local variables" #~ msgstr "%Jfür lokale Variablen kann kein Adressabschnittsattribut angegeben werden" #~ msgid "%Jaddress area of '%s' conflicts with previous declaration" #~ msgstr "%JAdressabschnitt von »%s« in Konflikt mit vorheriger Deklaration" #~ msgid "%Jaddress area attribute cannot be specified for functions" #~ msgstr "%JAdressabschnittsattribut kann nicht für Funktionen angegeben werden" #~ msgid "The compiler does not support -march=%s." #~ msgstr "Der Compiler unterstützt nicht -march=%s." #~ msgid "argument `%d' is not a constant" #~ msgstr "Argument »%d« ist keine Konstante" #~ msgid "`trap' attribute is already used" #~ msgstr "»trap«-Attribut wird bereits verwendet" #~ msgid "cannot specify both -msep-data and -mid-shared-library" #~ msgstr "-msep-data und -mid-shared-library können nicht zusammen angegeben werden" #~ msgid "Generate code for a 68040, without any new instructions" #~ msgstr "Code für einen 68040 ohne neue Befehle erzeugen" #~ msgid "Generate code for a 68060, without any new instructions" #~ msgstr "Code für einen 68060 ohne neue Befehle erzeugen" #~ msgid "Generate code for a 68030" #~ msgstr "Code für einen 68030 erzeugen" #~ msgid "Generate code for a 68040" #~ msgstr "Code für einen 68040 erzeugen" #~ msgid "Generate code for a 68060" #~ msgstr "Code für einen 68060 erzeugen" #~ msgid "Generate code for a 520X" #~ msgstr "Code für einen 520X erzeugen" #~ msgid "Generate code for a 5206e" #~ msgstr "Code für einen 5206e erzeugen" #~ msgid "Generate code for a 528x" #~ msgstr "Code für einen 528x erzeugen" #~ msgid "Generate code for a 5307" #~ msgstr "Code für einen 5307 erzeugen" #~ msgid "Generate code for a 5407" #~ msgstr "Code für einen 5407 erzeugen" #~ msgid "Generate code for a 68851" #~ msgstr "Code für einen 68851 erzeugen" #~ msgid "Do no generate code for a 68851" #~ msgstr "Code für einen 68851 erzeugen" #~ msgid "Generate code for a 68302" #~ msgstr "Code für einen 68302 erzeugen" #~ msgid "Generate code for a 68332" #~ msgstr "Code für einen 68332 erzeugen" #~ msgid "Generate code for a cpu32" #~ msgstr "Code für eine cpu32 erzeugen" #~ msgid "can't rewind temp file: %m" #~ msgstr "temporäre Datei konnte nicht zurückgesetzt werden: %m" #~ msgid "can't write to output file: %m" #~ msgstr "in die Ausgabedatei kann nicht geschrieben werden: %m" #~ msgid "can't read from temp file: %m" #~ msgstr "von der temporären Datei kann nicht gelesen werden: %m" #~ msgid "can't close temp file: %m" #~ msgstr "die temporäre Datei kann nicht geschlossen werden: %m" #~ msgid "-fpic is not supported; -fPIC assumed" #~ msgstr "-fpic wird nicht unterstützt; -fPIC angenommen" #~ msgid "-m%s not supported in this configuration" #~ msgstr "-m%s wird in dieser Konfiguration nicht unterstützt" #~ msgid "%Jdata area attributes cannot be specified for local variables" #~ msgstr "%JDatenabschnittsattribute können nicht für lokale Variablen angegeben werden" #~ msgid "%Jdata area of '%D' conflicts with previous declaration" #~ msgstr "%JDatenabschnitt von »%D« in Konflikt mit vorheriger Deklaration" #~ msgid "invalid %%x value" #~ msgstr "ungültiger %%x-Wert" #~ msgid "invalid %%d value" #~ msgstr "ungültiger %%x-Wert" #~ msgid "invalid %%t/%%b value" #~ msgstr "ungültiger %%t/%%b-Wert" #~ msgid "missing argument to \"-%s\"" #~ msgstr "fehlendes Argument für »-%s«" #~ msgid "%s for '%s' in '%s %E'" #~ msgstr "%s vor »%s« in »%s %E«" #~ msgid "no suitable `operator %s' for `%T'" #~ msgstr "kein geeigneter »operator %s« für »%T«" #~ msgid "cannot bind bitfield `%E' to `%T'" #~ msgstr "das Bitfeld »%E« kann nicht mit »%T« verbunden werden" #~ msgid "cannot bind packed field `%E' to `%T'" #~ msgstr "das gepackte Feld »%E« kann nicht mit »%T« verbunden werden" #~ msgid "cannot bind rvalue `%E' to `%T'" #~ msgstr "der R-Wert »%E« kann nicht mit »%T« verbunden werden" #~ msgid "%s has no effect" #~ msgstr "%s hat keinen Effekt" #~ msgid "%Jfunction '%D' redeclared as inline" #~ msgstr "%JFunktion »%D« als inline redeklariert" #~ msgid "%Jprevious declaration of '%D' with attribute noinline" #~ msgstr "%Jvorherige Deklaration von »%D« mit Attribut noinline" #~ msgid "%Jfunction '%D' redeclared with attribute noinline" #~ msgstr "%JFunktion »%D« redeklariert mit Attribut noinline" #~ msgid "%Jprevious declaration of '%D' was inline" #~ msgstr "%Jvorherige Deklaration von »%D« war inline" #~ msgid "conflicting declaration '%#D'" #~ msgstr "in Konflikt stehende Deklaration »%#D«" #~ msgid "'%D' has a previous declaration as `%#D'" #~ msgstr "»%D« hat eine vorherige Deklaration als »%#Ds«" #~ msgid "%Jfollows non-prototype definition here" #~ msgstr "%Jfolgt Nicht-Prototyp-Definition hier" #~ msgid "%Jprevious non-inline declaration here" #~ msgstr "%Jvorherige nicht-inline-Deklaration hier" #~ msgid "%Jconflicts with previous declaration here" #~ msgstr "%Jin Konflikt mit vorheriger Deklaration hier" #~ msgid "%H from here" #~ msgstr "%H von hier" #~ msgid "too many initializers for `%T'" #~ msgstr "zu viele Initialisierer für »%T«" #~ msgid "size of array `%D' has non-integral type `%T'" #~ msgstr "Feldgröße von »%D« hat Nicht-Ganzzahltyp »%T«" #~ msgid "size of array has non-integral type `%T'" #~ msgstr "Feldgröße hat Nicht-Ganzzahltyp »%T«" #~ msgid "declaration of `%D' as %s" #~ msgstr "Deklaration von »%D« als %s" #~ msgid "creating %s" #~ msgstr "Erzeugen von %s" #~ msgid "top-level declaration of `%s' specifies `auto'" #~ msgstr "Deklaration höchster Ebene von »%s« spezifiziert »auto«" #~ msgid "%Jinvalid type qualifier for non-member function type" #~ msgstr "%Jungültiger Typkennzeichner für Nicht-Element-Funktionstyp" #~ msgid "%Jprevious definition here" #~ msgstr "%Jvorherige Definition hier" #~ msgid "invalid member function declaration" #~ msgstr "ungültige Elementfunktionsdeklaration" #~ msgid "anonymous union with no members" #~ msgstr "anonymes union ohne Element" #~ msgid "inline function `%D' used but never defined" #~ msgstr "inline-Funktion »%D«, aber nirgendwo definiert" #~ msgid " when initialized here" #~ msgstr " während es hier initialisiert wurde" #~ msgid "`%#D' is not a non-static data member of `%T'" #~ msgstr "»%#D« ist kein Nicht-static-Datenelement von »%T«" #~ msgid "invalid use of non-static member function `%D'" #~ msgstr "ungültige Verwendung der Nicht-static-Elementfunktion »%D«" #~ msgid "invalid use of non-static data member `%D'" #~ msgstr "ungültige Verwendung des Nicht-static-Datenelementes »%D«" #~ msgid "type mismatch with previous external decl of `%#D'" #~ msgstr "Typen passen nicht zu vorheriger externer Deklaration von »%#D«" #~ msgid "%s %s %p %d\n" #~ msgstr "%s %s %p %d\n" #~ msgid "`%D' attribute directive ignored" #~ msgstr "Attribut-Anweisung »%D« wird ignoriert" #~ msgid "invalid token" #~ msgstr "ungültiges Token" #~ msgid "`%D::%D' has not been declared" #~ msgstr "»%D::%D« wurde nicht deklariert" #~ msgid "`::%D' has not been declared" #~ msgstr "»::%D« wurde nicht deklariert" #~ msgid "`%D' has not been declared" #~ msgstr "»%D« wurde nicht deklariert" #~ msgid "`%D' %s" #~ msgstr "»%D« %s" #~ msgid "invalid template-id" #~ msgstr "ungültige Template-ID" #~ msgid "%s cannot appear in a constant-expression" #~ msgstr "%s kann nicht in einem Konstanten-Ausdruck auftreten" #~ msgid "`%s' does not name a type" #~ msgstr "»%s« bezeichnet keinen Typ" #~ msgid "statement-expressions are allowed only inside functions" #~ msgstr "Anweisungs-Ausdrücke sind nur innerhalb von Funktionen erlaubt" #~ msgid "ISO C++ forbids compound-literals" #~ msgstr "ISO-C++ verbietet zusammengesetzte Literale" #~ msgid "duplicate `friend'" #~ msgstr "doppeltes »friend«" #~ msgid "attributes are not allowed on a function-definition" #~ msgstr "bei einer Funktionsdefinition sind keine Attribute erlaubt" #~ msgid "attributes after parenthesized initializer ignored" #~ msgstr "Attribute hinter geklammerter Initialisierung werden ignoriert" #~ msgid "friend declaration does not name a class or function" #~ msgstr "»friend«-Deklaration benennt keine Klasse oder Funktion" #~ msgid "invalid function declaration" #~ msgstr "ungültige Funktionsdeklaration" #~ msgid "named return values are no longer supported" #~ msgstr "benannte Rückgabewerte werden nicht mehr unterstützt" #~ msgid "%D redeclared with different access" #~ msgstr "%D mit anderem Zugriff redeklariert" #~ msgid "destructor `%D' declared as member template" #~ msgstr "Destruktor »%D« als Element-Template deklariert" #~ msgid "%J original definition appeared here" #~ msgstr "%J ursprüngliche Definition trat hier auf" #~ msgid "`%T' uses anonymous type" #~ msgstr "»%T« verwendet anonymen Typen" #~ msgid "`%T' uses local type `%T'" #~ msgstr "»%T« verwendet lokalen Typen »%T«" #~ msgid "integral expression `%E' is not constant" #~ msgstr "Integralausdruck »%E« ist nicht konstant" #~ msgid "object missing in reference to `%D'" #~ msgstr "Objekt fehlt in Referenz auf »%D«" #~ msgid "`%D' is not a member of `%D'" #~ msgstr "»%D« ist kein Element von »%D«" #~ msgid "`%D' cannot appear in a constant-expression" #~ msgstr "»%D« kann nicht in Konstanten-Ausdruck auftreten" #~ msgid "%s between distinct pointer-to-member types `%T' and `%T' lacks a cast" #~ msgstr "%s zwischen verschiedenen Zeiger-auf-Element-Typen »%T« und »%T« fehlt eine Typkonvertierung" #~ msgid "invalid application of `%s' to a bit-field" #~ msgstr "ungültige Anwendung von »%s« auf ein Bitfeld" #~ msgid "ISO C++ forbids applying `%s' to an expression of function type" #~ msgstr "ISO-C++ verbietet Anwendung von »%s« auf einen Ausdruck mit Funktionstyp" #~ msgid "invalid use of non-static member function" #~ msgstr "falsche Benutzung einer nicht-statischen Elementfunktion" #~ msgid "invalid use of nonstatic data member '%E'" #~ msgstr "ungültige Benutzung des nicht-statischen Datenelements »%E«" #~ msgid "parameter %P of `%D' has incomplete type `%T'" #~ msgstr "Parameter %P von »%D« hat unvollständigen Typen »%T«" #~ msgid "parameter %P has incomplete type `%T'" #~ msgstr "Parameter %P hat unvollständigen Typen »%T«" #~ msgid "%s expression list treated as compound expression" #~ msgstr "%s Ausdrucksliste als zusammengesetzten Ausdruck behandelt" #~ msgid "pointer to member cast via virtual base `%T'" #~ msgstr "Typumwandlung von Zeiger in Element über virtuelle Basis »%T«" #~ msgid "pointer to member conversion via virtual base `%T'" #~ msgstr "Konvertierung von Zeiger in Element über virtuelle Basis »%T«" #~ msgid "return-statement with no value, in function returning '%T'" #~ msgstr "Return-Anweisung ohne Wert, in »%T« zurückgebender Funktion" #~ msgid "return-statement with a value, in function returning 'void'" #~ msgstr "Return-Anweisung mit Wert in »void« zurückgebender Funktion" #~ msgid "Please keep this in mind before you report bugs." #~ msgstr "Bitte bedenken Sie dies, wenn Sie einen Fehlerbericht einsenden." #~ msgid "%Jfinal field '%D' may not have been initialized" #~ msgstr "%Jletztes Feld »%D« könnte nicht initialisiert worden sein" #~ msgid "%J'%D' used prior to declaration" #~ msgstr "%J»%D« bereits vor Deklaration benutzt" #~ msgid "declaration of `%s' shadows a parameter" #~ msgstr "Deklaration von »%s« überdeckt einen Parameter" #~ msgid "declaration of `%s' shadows a symbol from the parameter list" #~ msgstr "Deklaration von »%s« überdeckt ein Symbol aus der Parameterliste" #~ msgid "%Jlabel '%D' used but not defined" #~ msgstr "%JMarke »%D« verwendet, aber nicht definiert" #~ msgid "%Jlabel '%D' defined but not used" #~ msgstr "%JMarke »%D« definiert, aber nicht verwendet" #~ msgid "can't reopen %s: %m" #~ msgstr "Es ist nicht möglich, »%s« erneut zu öffnen: %m" #~ msgid "can't close %s: %m" #~ msgstr "Es ist nicht möglich, »%s« zu schließen: %m" #~ msgid "can't close input file %s: %m" #~ msgstr "die Eingabedatei »%s« kann nicht geschlossen werden: %m" #~ msgid "can't create directory %s: %m" #~ msgstr "das Verzeichnis %s kann nicht erzeugt werden: %m" #~ msgid "can't create %s: %m" #~ msgstr "Es ist nicht möglich, %s zu erzeugen: %m" #~ msgid "`%s' is not a valid class name" #~ msgstr "»%s« ist kein gültiger Klassenname" #~ msgid "--resource requires -o" #~ msgstr "--resource erfordert -o" #~ msgid "cannot specify both -C and -o" #~ msgstr "-C und -o können nicht zusammen angegeben werden" #~ msgid "cannot create temporary file" #~ msgstr "temporäre Datei konnte nicht angelegt werden" #~ msgid "interface `%s' does not have valid constant string layout" #~ msgstr "die Schnittstelle »%s« hat nicht die Form einer konstanten Zeichenkette" #~ msgid "`%s' is not an Objective-C class name or alias" #~ msgstr "»%s« ist kein Klassenname oder Alias in Objective-C" #~ msgid "`%s' redeclared as different kind of symbol" #~ msgstr "»%s« redeklariert als andere Symbolart" #~ msgid "%J%s `%s'" #~ msgstr "%J%s: »%s«" #~ msgid "multiple %s named `%c%s' found" #~ msgstr "mehrere %s namens »%c%s« gefunden" #~ msgid "no super class declared in @interface for `%s'" #~ msgstr "keine Superklasse im @interface für »%s« deklariert" #~ msgid "`%s' may not respond to `%c%s'" #~ msgstr "»%s« antwortet möglicherweise nicht auf »%c%s«" #~ msgid "`%c%s' not implemented by protocol(s)" #~ msgstr "»%c%s« nicht von Protokoll(en) implementiert" #~ msgid "`...' as arguments.)" #~ msgstr "»...« als Argumente.)" #~ msgid "duplicate declaration of method `%c%s'" #~ msgstr "doppelte Deklaration der Methode »%c%s«" #~ msgid "illegal reference type specified for instance variable `%s'" #~ msgstr "unzulässiger Referenztyp für Instanzvariable »%s« angegeben" #~ msgid "instance variable `%s' has unknown size" #~ msgstr "Instanzvariable »%s« hat unbekannte Größe" #~ msgid "type `%s' has virtual member functions" #~ msgstr "der Typ »%s« hat virtuelle Elementfunktionen" #~ msgid "illegal aggregate type `%s' specified for instance variable `%s'" #~ msgstr "unzulässiger Aggregattyp »%s« für Instanzvariable »%s« angegeben" #~ msgid "%s `%s' does not fully implement the `%s' protocol" #~ msgstr "%s »%s« implementiert das »%s«-Protokoll nicht vollständig" #~ msgid "previous declaration of `%s'" #~ msgstr "vorherige Deklaration von »%s«" #~ msgid "Display this information" #~ msgstr "Diese Informationen anzeigen" #~ msgid "Do not discard comments" #~ msgstr "Kommentare nicht verwerfen" #~ msgid "Warn about subscripts whose type is \"char\"" #~ msgstr "Vor Indizes mit Typ \"char\" warnen" #~ msgid "Make implicit function declarations an error" #~ msgstr "Fehler bei impliziten Funktionsdeklaration erzeugen" #~ msgid "Warn if passing too many arguments to a function for its format string" #~ msgstr "Bei zu vielen Argumenten für eine Funktion (anhand Formatzeichenkette) warnen" #~ msgid "Warn about suspicious declarations of \"main\"" #~ msgstr "Vor verdächtigen Deklarationen von \"main\" warnen" #~ msgid "Warn about global functions without previous declarations" #~ msgstr "Vor globalen Funktionen ohne vorherige Deklaration warnen" #~ msgid "Warn about functions which might be candidates for __attribute__((noreturn))" #~ msgstr "Vor Funktionen, die Kandidaten für __attribute__((noreturn)) sind, warnen" #~ msgid "Warn about use of multi-character character constants" #~ msgstr "Bei Verwendung von Zeichenkonstanten mit mehreren Zeichen warnen" #~ msgid "Warn about \"extern\" declarations not at file scope" #~ msgstr "Vor \"extern\"-Deklarationen außerhalb des Dateisichtbarkeitsbereiches warnen" #~ msgid "Warn about code which might break strict aliasing rules" #~ msgstr "Vor Code warnen, der strict-aliasing-Regeln verletzen könnte" #~ msgid "Warn about unprototyped function declarations" #~ msgstr "Vor Funktionsdeklarationen ohne Prototyp warnen" #~ msgid "Warn about features not present in traditional C" #~ msgstr "Vor Sprachmerkmalen, die in traditionellem C nicht verfügbar sind, warnen" #~ msgid "Recognize built-in functions" #~ msgstr "Eingebaute Funktionen erkennen" #~ msgid "Preserve case used in program" #~ msgstr "Im Programm verwendete Groß-/Kleinschreibung beibehalten" #~ msgid "Inline member functions by default" #~ msgstr "Standardmäßig »inline«-Elementfunktionen" #~ msgid "Permit '$' as an identifier character" #~ msgstr "'$' als Bezeichnerzeichen zulassen" #~ msgid "Generate code to check exception specifications" #~ msgstr "Code zur Überprüfung von Exception-Spezifikationen erzeugen" #~ msgid "Place each function into its own section" #~ msgstr "Jede Funktion in ihren eigenen Abschnitt platzieren" #~ msgid "Generate code for GNU runtime environment" #~ msgstr "Code für die GNU-Laufzeitumgebung erzeugen" #~ msgid "Generate code for NeXT (Apple Mac OS X) runtime environment" #~ msgstr "Code für die NeXT (Apple Mac OS X) Laufzeitumgebung erzeugen" #~ msgid "Convert floating point constants to single precision constants" #~ msgstr "Fließkommakonstanten in Konstanten einfacher Genauigkeit konvertieren" #~ msgid "Print internal debugging-related information" #~ msgstr "Interne Testinformationen ausgeben" #~ msgid "Dump declarations to a .decl file" #~ msgstr "Deklaration in .decl-Datei ausgeben" #~ msgid "-o \tPlace output into " #~ msgstr "-o \tAusgabe in schreiben" #~ msgid "Generate C header of platform-specific features" #~ msgstr "C-Header mit Plattform-spezifischen Merkmalen erzeugen" #~ msgid "Remap file names when including files" #~ msgstr "Dateinamen beim Einfügen von Dateien neu abbilden" #~ msgid "GCC does not support -C or -CC without -E" #~ msgstr "GCC unterstützt nicht -C oder -CC ohne -E" #~ msgid "-pipe is not supported" #~ msgstr "-pipe wird nicht unterstützt" #~ msgid "-keep_private_externs not allowed with -dynamiclib" #~ msgstr "-keep_private_externs ist mit -dynamiclib nicht erlaubt" #~ msgid "-private_bundle not allowed with -dynamiclib" #~ msgstr "-private_bundle ist mit -dynamiclib nicht erlaubt" #~ msgid "-pg not supported on this platform" #~ msgstr "-pg wird auf dieser Plattform nicht unterstützt" #~ msgid "GCC does not support -C without using -E" #~ msgstr "GCC unterstützt nicht -C ohne -E" #~ msgid "GCC does not support -CC without using -E" #~ msgstr "GCC unterstützt nicht -CC ohne -E" #~ msgid "`-p' not supported; use `-pg' and gprof(1)" #~ msgstr "»-p« wird nicht unterstützt; verwenden Sie »-pg« und gprof(1)" #~ msgid "may not use both -m32 and -m64" #~ msgstr "-m32 und -m64 können nicht zusammen angegeben werden" #~ msgid "profiling not supported with -mg\n" #~ msgstr "Profiling wird mit -mg nicht unterstützt\n" #~ msgid "does not support multilib" #~ msgstr "unterstützt nicht multilib" #~ msgid "concatenation of string literals with __FUNCTION__ is deprecated" #~ msgstr "Verkettung von Zeichenkettenliteralen mit __FUNCTION__ ist veraltet" #~ msgid "ISO C++ forbids range expressions in switch statements" #~ msgstr "ISO-C++ verbietet Wertebereichsausdrücke in switch-Anweisungen" #~ msgid "ISO C++ forbids taking the address of a label" #~ msgstr "ISO-C++ verbietet die Adresse einer Marke" #~ msgid "declaration of `%s' shadows %s" #~ msgstr "Deklaration von »%s« verdeckt %s" #~ msgid "`struct %s' incomplete in scope ending here" #~ msgstr "»struct %s« im Gültigkeitsbereich, der hier endet, unvollständig" #~ msgid "`union %s' incomplete in scope ending here" #~ msgstr "»union %s« im Gültigkeitsbereich, der hier endet, unvollständig" #~ msgid "`enum %s' incomplete in scope ending here" #~ msgstr "»enum %s« im Gültigkeitsbereich, der hier endet, unvollständig" #~ msgid "shadowing library function `%s'" #~ msgstr "Bibliotheksfunktion »%s« überdeckt" #~ msgid "library function `%s' declared as non-function" #~ msgstr "Bibliotheksfunktion »%s« als Nicht-Funktion deklariert" #~ msgid "redeclaration of `%s'" #~ msgstr "Redeklaration von »%s«" #~ msgid "prototype for `%s' follows and number of arguments doesn't match" #~ msgstr "Prototyp für »%s« folgt und Anzahl der Argumente passt nicht" #~ msgid "prototype for `%s' follows and argument %d doesn't match" #~ msgstr "Prototyp für »%s« folgt und Argument %d passt nicht" #~ msgid "type qualifiers for `%s' conflict with previous decl" #~ msgstr "Typ-Kennzeichner für »%s« stehen in Konflikt mit vorheriger Deklaration" #~ msgid "a parameter" #~ msgstr "ein Parameter" #~ msgid "a previous local" #~ msgstr "ein vorheriges »local«" #~ msgid "a global declaration" #~ msgstr "eine globale Deklaration" #~ msgid "`%s' was declared implicitly `extern' and later `static'" #~ msgstr "»%s« wurde implizit als »extern« und später als »static« deklariert" #~ msgid "previous external decl of `%s'" #~ msgstr "vorherige externe Deklaration von »%s«" #~ msgid "type mismatch with previous implicit declaration" #~ msgstr "Typen passen nicht zu vorheriger impliziter Deklaration" #~ msgid "`%s' was previously implicitly declared to return `int'" #~ msgstr "»%s« wurde bereits implizit deklariert, »int« zurückzugeben" #~ msgid "`%s' was declared `extern' and later `static'" #~ msgstr "»%s« wurde »extern« deklariert und später »static«" #~ msgid "`%s' locally external but globally static" #~ msgstr "»%s« ist lokal extern, aber global »static«" #~ msgid "function `%s' was previously declared within a block" #~ msgstr "Funktion »%s« wurde bereits innerhalb eines Blockes deklariert" #~ msgid "declaration of `%s' has `extern' and is initialized" #~ msgstr "Deklaration von »%s« hat »extern« und ist initialisiert" #~ msgid "ISO C forbids parameter `%s' shadowing typedef" #~ msgstr "ISO-C verbietet typedef verdeckenden Parameter »%s«" #~ msgid "parameter `%s' points to incomplete type" #~ msgstr "Parameter »%s« zeigt auf unvollständigen Typen" #~ msgid "parameter points to incomplete type" #~ msgstr "Parameter zeigt auf unvollständigen Typen" #~ msgid "`void' in parameter list must be the entire list" #~ msgstr "»void« in Parameterliste muss die gesamte Liste sein" #~ msgid "`union %s' declared inside parameter list" #~ msgstr "»union %s« innerhalb Parameterliste deklariert" #~ msgid "`enum %s' declared inside parameter list" #~ msgstr "»enum %s« innerhalb Parameterliste deklariert" #~ msgid "anonymous enum declared inside parameter list" #~ msgstr "anonymes »enum« innerhalb Parameterliste deklariert" #~ msgid "bit-field `%s' type invalid in ISO C" #~ msgstr "Typ des Bitfeldes »%s« ist ungültig in ISO-C" #~ msgid "parm types given both in parmlist and separately" #~ msgstr "Parametertypen sowohl in Parameterliste als auch separat angegeben" #~ msgid "universal-character-name '\\u%04x' not valid in identifier" #~ msgstr "universeller Zeichenname »\\u%04x« nicht gültig in Bezeichner" #~ msgid "ignoring invalid multibyte character" #~ msgstr "ungültiges Multibyte-Zeichen wird ignoriert" #~ msgid "options array incorrectly sorted: %s is before %s" #~ msgstr "Optionenliste falsch sortiert: %s kommt vor %s" #~ msgid "-Wno-strict-prototypes is not supported in C++" #~ msgstr "-Wno-strict-prototypes wird in C++ nicht unterstützt" #~ msgid "" #~ "Switches:\n" #~ " -include Include the contents of before other files\n" #~ " -imacros Accept definition of macros in \n" #~ " -iprefix Specify as a prefix for next two options\n" #~ " -iwithprefix Add to the end of the system include path\n" #~ " -iwithprefixbefore Add to the end of the main include path\n" #~ " -isystem Add to the start of the system include path\n" #~ msgstr "" #~ "Optionen:\n" #~ " -include Inhalt von vor anderen Dateien einfügen\n" #~ " -imacros die Definition von Makros in akzeptieren\n" #~ " -iprefix als Präfix für die nächsten beiden Optionen\n" #~ " angeben\n" #~ " -iwithprefix zum Ende des System-Einfüge-Pfades\n" #~ " hinzufügen\n" #~ " -iwithprefixbefore zum das Ende des Haupt-Einfüge-Pfades\n" #~ " hinzufügen\n" #~ " -isystem zum Anfang des System-Einfüge-Pfades\n" #~ " hinzufügen\n" #~ msgid "" #~ " -idirafter Add to the end of the system include path\n" #~ " -I Add to the end of the main include path\n" #~ " -I- Fine-grained include path control; see info docs\n" #~ " -nostdinc Do not search system include directories\n" #~ " (dirs specified with -isystem will still be used)\n" #~ " -nostdinc++ Do not search system include directories for C++\n" #~ " -o Put output into \n" #~ msgstr "" #~ " -idirafter zum Ende des System-Einfüge-Pfades\n" #~ " hinzufügen\n" #~ " -I zum Anfang des Haupt-Einfüge-Pfades\n" #~ " hinzufügen\n" #~ " -I- Feineinstellung des Einfügepfades; siehe info-\n" #~ " Seiten\n" #~ " -nostdinc keine System-Einfüge-Verzeichnisse durchsuchen\n" #~ " (-isystem Verzeichnisse werden aber verwendet)\n" #~ " -nostdinc++ keine System-Einfüge-Verzeichnisse nach C++\n" #~ " durchsuchen\n" #~ " -o Ausgabe in leiten\n" #~ msgid "" #~ " -trigraphs Support ISO C trigraphs\n" #~ " -std= Specify the conformance standard; one of:\n" #~ " gnu89, gnu99, c89, c99, iso9899:1990,\n" #~ " iso9899:199409, iso9899:1999, c++98\n" #~ " -w Inhibit warning messages\n" #~ " -W[no-]trigraphs Warn if trigraphs are encountered\n" #~ " -W[no-]comment{s} Warn if one comment starts inside another\n" #~ msgstr "" #~ " -trigraphs ISO-C-»Trigraphs« unterstützen\n" #~ " -std= Standardkonformität angeben; eines von:\n" #~ " gnu89, gnu99, c89, c99, iso9899:1990,\n" #~ " iso9899:199409, iso9899:1999, c++98\n" #~ " -w Warnungen unterdrücken\n" #~ " -W[no-]trigraphs Warnungen bei »Trigraphs«\n" #~ " -W[no-]comment{s} Warnungen bei geschachtelten Kommentaren\n" #~ msgid "" #~ " -W[no-]traditional Warn about features not present in traditional C\n" #~ " -W[no-]undef Warn if an undefined macro is used by #if\n" #~ " -W[no-]import Warn about the use of the #import directive\n" #~ msgstr "" #~ " -W[no-]traditional Warnungen bei Merkmalen von traditionellem C\n" #~ " -W[no-]undef Warnungen bei Verwendung undefinierter Makros\n" #~ " mit #if\n" #~ " -W[no-]import Warnungen über die Verwendung der Direktive\n" #~ " #import\n" #~ msgid "" #~ " -W[no-]error Treat all warnings as errors\n" #~ " -W[no-]system-headers Do not suppress warnings from system headers\n" #~ " -W[no-]all Enable most preprocessor warnings\n" #~ msgstr "" #~ " -W[no-]error alle Warnungen als Fehler behandeln\n" #~ " -W[no-]system-headers keine Warnungen von System-Headern unterdrücken\n" #~ " -W[no-]all die meisten Präprozessorwarnungen einschalten\n" #~ msgid "" #~ " -M Generate make dependencies\n" #~ " -MM As -M, but ignore system header files\n" #~ " -MD Generate make dependencies and compile\n" #~ " -MMD As -MD, but ignore system header files\n" #~ " -MF Write dependency output to the given file\n" #~ " -MG Treat missing header file as generated files\n" #~ msgstr "" #~ " -M make-Abhängigkeiten generieren\n" #~ " -MM wie -M, aber System-Header ignorieren\n" #~ " -MD make-Abhängigkeiten generieren und kompilieren\n" #~ " -MMD wie -MD, aber System-Header ignorieren\n" #~ " -MF Abhängigkeiten-Ausgabe in die angegebene Datei\n" #~ " schreiben\n" #~ " -MG fehlende Header-Dateien als generierte Dateien\n" #~ " behandeln\n" #~ msgid "" #~ " -MP\t\t\t Generate phony targets for all headers\n" #~ " -MQ Add a MAKE-quoted target\n" #~ " -MT Add an unquoted target\n" #~ msgstr "" #~ " -MP\t\t\t Generiere falsche (phony) Ziele für Header\n" #~ " -MQ MAKE-zitiertes Ziel hinzufügen\n" #~ " -MT ein unzitiertes Ziel hinzufügen\n" #~ msgid "" #~ " -D Define a with string '1' as its value\n" #~ " -D= Define a with as its value\n" #~ " -A= Assert the to \n" #~ " -A-= Disable the to \n" #~ " -U Undefine \n" #~ " -v Display the version number\n" #~ msgstr "" #~ " -D mit Wert \"1\" definieren\n" #~ " -D= mit Wert definieren\n" #~ " -A= die auf annehmen\n" #~ " -A-= die auf abschalten\n" #~ " -U löschen\n" #~ " -v Version anzeigen\n" #~ msgid "" #~ " -H Print the name of header files as they are used\n" #~ " -C Do not discard comments\n" #~ " -dM Display a list of macro definitions active at end\n" #~ " -dD Preserve macro definitions in output\n" #~ " -dN As -dD except that only the names are preserved\n" #~ " -dI Include #include directives in the output\n" #~ msgstr "" #~ " -H Namen von Header-Dateien anzeigen wenn sie\n" #~ " verwendet werden\n" #~ " -C Kommentare nicht streichen\n" #~ " -dM am Ende eine Liste von Makrodefinitionen anzeigen\n" #~ " -dD Makrodefinitionen in der Ausgabe bewahren\n" #~ " -dN wie -dD nur dass die Namen bewahrt werden\n" #~ " -dI #include-Anweisungen in die Ausgabe einfügen\n" #~ msgid "" #~ " -f[no-]preprocessed Treat the input file as already preprocessed\n" #~ " -ftabstop= Distance between tab stops for column reporting\n" #~ " -P Do not generate #line directives\n" #~ " -remap Remap file names when including files\n" #~ " --help Display this information\n" #~ msgstr "" #~ " -f[no-]preprocessed Eingabedatei als bereits vorverarbeitet behandeln\n" #~ " -ftabstop= Tabulatorenabstand für Spaltenmeldungen\n" #~ " -P keine #line-Direktiven generieren\n" #~ " -remap Dateinamen beim Einfügen neu abbilden\n" #~ " --help diese Information anzeigen\n" #~ msgid "parse error" #~ msgstr "Fehler beim Parsen" #~ msgid "ISO C forbids the address of a cast expression" #~ msgstr "ISO-C verbietet die Adresse eines cast-Ausdruckes" #~ msgid "initializer for static variable is not constant" #~ msgstr "Initialisierer für statische Variable ist nicht konstant" #~ msgid "initializer for static variable uses complicated arithmetic" #~ msgstr "Initialisierer für statische Variable verwendet komplizierte Arithmetik" #~ msgid "aggregate initializer is not constant" #~ msgstr "Gesamt-Initialisierer ist nicht konstant" #~ msgid "aggregate initializer uses complicated arithmetic" #~ msgstr "Gesamt-Initialisierer verwendet komplizierte Arithmetik" #~ msgid "open %s" #~ msgstr "öffne %s" #~ msgid "incompatibilities between object file & expected values" #~ msgstr "Inkompatibilitäten zwischen Objektdatei und erwarteten Werten" #~ msgid "" #~ "\n" #~ "Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n" #~ msgstr "" #~ "\n" #~ "Verarbeite Symboltabelle #%d, Versatz = 0x%.8lx, Art = %s\n" #~ msgid "string section missing" #~ msgstr "Zeichenkettenabschnitt fehlt" #~ msgid "section pointer missing" #~ msgstr "Abschnittszeiger fehlt" #~ msgid "no symbol table found" #~ msgstr "keine Symboltabelle gefunden" #~ msgid "" #~ "\n" #~ "Updating header and load commands.\n" #~ "\n" #~ msgstr "" #~ "\n" #~ "Aktualisiere Kopf und lokale Befehle.\n" #~ "\n" #~ msgid "load command map, %d cmds, new size %ld.\n" #~ msgstr "lade Befehlstabelle, %d Befehle, neue Größe: %ld.\n" #~ msgid "" #~ "writing load commands.\n" #~ "\n" #~ msgstr "" #~ "schreibe Ladebefehle.\n" #~ "\n" #~ msgid "close %s" #~ msgstr "schließe %s" #~ msgid "could not convert 0x%l.8x into a region" #~ msgstr "konnte 0x%l.8x nicht in eine Region konvertieren" #~ msgid "%s function, region %d, offset = %ld (0x%.8lx)\n" #~ msgstr "Funktion %s, Region %d, Versatz = %ld (0x%.8lx)\n" #~ msgid "bad magic number" #~ msgstr "falsche magische Zahl" #~ msgid "bad header version" #~ msgstr "falsche Kopf-Version" #~ msgid "bad raw header version" #~ msgstr "falsche Version des Original-Kopfes" #~ msgid "raw header buffer too small" #~ msgstr "Original-Kopf-Puffer zu klein" #~ msgid "old raw header file" #~ msgstr "alte Original-Kopf-Datei" #~ msgid "unsupported version" #~ msgstr "nicht unterstützte Version" #~ msgid "unknown {de,en}code_mach_o_hdr return value %d" #~ msgstr "unbekannter Rückgabewert %d für {de,en}code_mach_o_hdr" #~ msgid "fstat %s" #~ msgstr "fstat %s" #~ msgid "lseek %s 0" #~ msgstr "lseek %s 0" #~ msgid "read %s" #~ msgstr "Lese %s" #~ msgid "read %ld bytes, expected %ld, from %s" #~ msgstr "%ld Bytes gelesen, %ld erwartet, von %s" #~ msgid "msync %s" #~ msgstr "msync %s" #~ msgid "munmap %s" #~ msgstr "munmap %s" #~ msgid "write %s" #~ msgstr "schreibe %s" #~ msgid "wrote %ld bytes, expected %ld, to %s" #~ msgstr "%ld Bytes geschrieben, %ld erwartet, nach %s" #~ msgid "ISO C++ does not permit \"%s\" in #if" #~ msgstr "ISO-C++ lässt nicht »%s« in #if zu" #~ msgid "invalid character '%c' in #if" #~ msgstr "ungültiges Zeichen '%c' in #if" #~ msgid "invalid character '\\%03o' in #if" #~ msgstr "ungültiges Zeichen '\\%03o' in #if" #~ msgid "absolute file name in remap_filename" #~ msgstr "absoluter Dateiname in remap_filename" #~ msgid "%s: Not a directory" #~ msgstr "%s: Kein Verzeichnis" #~ msgid "directory name missing after %s" #~ msgstr "Verzeichnisname fehlt hinter %s" #~ msgid "file name missing after %s" #~ msgstr "Dateiname fehlt hinter %s" #~ msgid "path name missing after %s" #~ msgstr "Pfadname fehlt hinter %s" #~ msgid "unknown string token %s\n" #~ msgstr "Unbekanntes Zeichenketten-Token %s\n" #~ msgid "non-hex digit '%c' in universal-character-name" #~ msgstr "Nicht-Hex-Ziffer '%c' in Universal-Zeichen-Name" #~ msgid "universal-character-name on EBCDIC target" #~ msgstr "Universal-Zeichen-Name auf EBCDIC Ziel" #~ msgid "universal-character-name out of range" #~ msgstr "Universal-Zeichen-Name außerhalb des Wertebereiches" #~ msgid "escape sequence out of range for its type" #~ msgstr "Fluchtsequenz außerhalb des Wertebereiches seines Typs" #~ msgid "#import is obsolete, use an #ifndef wrapper in the header file" #~ msgstr "#import ist veraltet, benutzen Sie einen #ifndef-Wrapper in der Header-Datei" #~ msgid "#pragma once is obsolete" #~ msgstr "#pragma once ist veraltet" #~ msgid "%s: warnings being treated as errors\n" #~ msgstr "%s: Warnungen als Fehler behandelt\n" #~ msgid "At top level:" #~ msgstr "Auf höchster Ebene:" #~ msgid "In function `%s':" #~ msgstr "In Funktion »%s«:" #~ msgid "" #~ "Please submit a full bug report,\n" #~ "with preprocessed source if appropriate.\n" #~ "See %s for instructions.\n" #~ msgstr "" #~ "Bitte senden Sie einen vollständigen Fehlerbericht auf Englisch ein;\n" #~ "bearbeiten Sie die Quellen zunächst mit einem Präprozessor, wenn es\n" #~ "dienlich ist.\n" #~ "Fehler in der deutschen Übersetzung sind an de@li.org zu melden.\n" #~ "\n" #~ "Gehen Sie gemäß den Hinweisen in %s vor.\n" #~ msgid "In file included from %s:%d" #~ msgstr "In von %s:%d eingefügter Datei" #~ msgid "" #~ ",\n" #~ " from %s:%d" #~ msgstr "" #~ ",\n" #~ " von %s:%d" #~ msgid "internal regno botch: `%s' has regno = %d\n" #~ msgstr "interner RegNr-Fehler: »%s« hat RegNr = %d\n" #~ msgid "support for the DWARF1 debugging format is deprecated" #~ msgstr "Unterstützung für das DWARF1-Debugging-Format ist veraltet" #~ msgid "unsupported wide integer operation" #~ msgstr "breite Ganzzahloperation nicht unterstützt" #~ msgid "mismatched braces in specs" #~ msgstr "unpassende geschweifte Klammern in Spezifikation" #~ msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n" #~ msgstr "Copyright © 2001 Free Software Foundation, Inc.\n" #~ msgid "Could not open basic block file %s.\n" #~ msgstr "Konnte einfache Blockdatei %s nicht öffnen.\n" #~ msgid "Could not open program flow graph file %s.\n" #~ msgstr "Konnte Programmflussgraphdatei %s nicht öffnen.\n" #~ msgid "Could not open data file %s.\n" #~ msgstr "Konnte Datei %s nicht öffnen.\n" #~ msgid "Assuming that all execution counts are zero.\n" #~ msgstr "Angenommen, dass alle Ausführungszähler null sind.\n" #~ msgid "No executable code associated with file %s.\n" #~ msgstr "Kein ausführbarer Code mit Datei %s verbunden.\n" #~ msgid "didn't use all bb entries of graph, function %s\n" #~ msgstr "nicht alle bb-Einträge des Graphen wurden benutzt, Funktion %s\n" #~ msgid "block_num = %ld, num_blocks = %d\n" #~ msgstr "block_num = %ld, num_blocks = %d\n" #~ msgid "ERROR: unexpected line number %ld\n" #~ msgstr "FEHLER: nicht erwartete Zeilennummer %ld\n" #~ msgid "ERROR: too many basic blocks in function %s\n" #~ msgstr "FEHLER: zu viele Basis-Blöcke in Funktion %s\n" #~ msgid "ERROR: out of range line number in function %s\n" #~ msgstr "FEHLER: Zeilennummer außerhalb des Wertebereiches in Funktion %s\n" #~ msgid "Could not open source file %s.\n" #~ msgstr "Konnte Quelldatei %s nicht öffnen.\n" #~ msgid "Unexpected EOF while reading source file %s.\n" #~ msgstr "Unerwartetes Dateiende beim Lesen der Quelldatei %s.\n" #~ msgid "Creating %s.\n" #~ msgstr "Erzeuge %s.\n" #~ msgid "Name `%s' contains quotes" #~ msgstr "Name »%s« enthält Anführungszeichen" #~ msgid "invalid string `%s' in define_cpu_unit" #~ msgstr "ungültige Zeichenkette »%s« in define_cpu_unit" #~ msgid "invalid string `%s' in define_query_cpu_unit" #~ msgstr "ungültige Zeichenkette »%s« in define_query_cpu_unit" #~ msgid "invalid string `%s' in define_bypass" #~ msgstr "ungültige Zeichenkette »%s« in define_bypass" #~ msgid "invalid second string `%s' in exclusion_set" #~ msgstr "ungültige zweite Zeichenkette »%s« in exclusion_set" #~ msgid "invalid first string `%s' in presence_set" #~ msgstr "ungültige erste Zeichenkette »%s« in presence_set" #~ msgid "invalid second string `%s' in presence_set" #~ msgstr "ungültige zweite Zeichenkette »%s« in presence_set" #~ msgid "invalid first string `%s' in absence_set" #~ msgstr "ungültige erste Zeichenkette »%s« in absence_set" #~ msgid "invalid second string `%s' in absence_set" #~ msgstr "ungültige zweite Zeichenkette »%s« in absence_set" #~ msgid "invalid string `%s' in define_automaton" #~ msgstr "ungültige Zeichenkette »%s« in define_automaton" #~ msgid "invalid option `%s' in automata_option" #~ msgstr "ungültige Option »%s« in automata_option" #~ msgid "garbage after ) in reservation `%s'" #~ msgstr "Müll hinter ) in Reservierung »%s«" #~ msgid "invalid `%s' in reservation `%s'" #~ msgstr "ungültiges »%s« in Reservierung »%s«" #~ msgid "repetition `%s' <= 1 in reservation `%s'" #~ msgstr "Wiederholung »%s« <= 1 in Reservierung »%s«" #~ msgid "unit `%s' in exclusion is not declared" #~ msgstr "Einheit »%s« ist nicht im Ausschluss deklariert" #~ msgid "`%s' in exclusion is not unit" #~ msgstr "»%s« im Ausschluss ist keine Einheit" #~ msgid "unit `%s' excludes itself" #~ msgstr "Einheit »%s« schließt sich selbst aus" #~ msgid "units `%s' and `%s' in exclusion set belong to different automata" #~ msgstr "Einheiten »%s« und »%s« in Ausschlussmenge gehören zu verschiedenen Automaten" #~ msgid "unit `%s' excludes and requires presence of `%s'" #~ msgstr "Einheit »%s« schließt »%s« aus und erfordert dessen Anwesenheit" #~ msgid "unit `%s' requires absence and presence of `%s'" #~ msgstr "Einheit »%s« erfordert die An- und Abwesenheit von »%s«" #~ msgid "repeated declaration of automaton `%s'" #~ msgstr "wiederholte Deklaration des Automaten %s" #~ msgid "define_insn_reservation `%s' has negative latency time" #~ msgstr "define_insn_reservation »%s« hat negative Latenzzeit" #~ msgid "`%s' is already used as insn reservation name" #~ msgstr "»%s« wurde bereits als insn Reservierungsname verwendet" #~ msgid "define_bypass `%s - %s' has negative latency time" #~ msgstr "define_bypass »%s - %s« hat negative Latenzzeit" #~ msgid "define_unit `%s' without automaton when one defined" #~ msgstr "define_unit »%s« ohne Automat trotz Automatendefinition" #~ msgid "`%s' is declared as cpu unit" #~ msgstr "»%s« wurde als CPU-Einheit deklariert" #~ msgid "`%s' is declared as cpu reservation" #~ msgstr "»%s« wurde als CPU-Reservierung deklariert" #~ msgid "repeated declaration of unit `%s'" #~ msgstr "wiederholte Deklaration der Einheit »%s«" #~ msgid "repeated declaration of reservation `%s'" #~ msgstr "wiederholte Deklaration der Reservierung »%s«" #~ msgid "there is no insn reservation `%s'" #~ msgstr "es gibt keine insn-Reservierung »%s«" #~ msgid "the same bypass `%s - %s' is already defined" #~ msgstr "die selbe Überbrückung »%s - %s« wurde bereits definiert" #~ msgid "bypass `%s - %s' is already defined" #~ msgstr "Überbrückung »%s - %s« wurde bereits definiert" #~ msgid "undeclared unit or reservation `%s'" #~ msgstr "nicht deklarierte Einheit oder Reservierung »%s«" #~ msgid "unit `%s' is not used" #~ msgstr "Einheit »%s« wird nicht verwendet" #~ msgid "reservation `%s' is not used" #~ msgstr "Reservierung »%s« ist unbenutzt" #~ msgid "cycle in definition of reservation `%s'" #~ msgstr "Zyklus in Definition der Reservierung »%s«" #~ msgid "Units `%s' and `%s' should be in the same automaton" #~ msgstr "Einheiten »%s« und »%s« sollten im selben Automat sein" #~ msgid "-split has no argument." #~ msgstr "-split hat kein Argument." #~ msgid "option `-split' has not been implemented yet\n" #~ msgstr "Option »-split« wurde noch nicht implementiert\n" #~ msgid "Automaton `%s': Insn `%s' will never be issued" #~ msgstr "Automat »%s«: Insn »%s« wird nie verwendet" #~ msgid "Insn `%s' will never be issued" #~ msgstr "Insn »%s« wird nie verwendet" #~ msgid "Errors in DFA description" #~ msgstr "Fehler in DFA-Beschreibung" #~ msgid "Error in writing DFA description file %s" #~ msgstr "Fehler beim Schreiben der DFA-Definitionsdatei %s" #~ msgid "No input file name." #~ msgstr "Kein Eingabedateiname." #~ msgid "Profile does not match flowgraph of function %s (out of date?)" #~ msgstr "Profil passt nicht zum Flussgraphen der Funktion %s (veraltet?)" #~ msgid ".da file corrupted" #~ msgstr ".da-Datei beschädigt" #~ msgid "#`%s' not supported by %s#" #~ msgstr "#»%s« wird von %s# nicht unterstützt" #~ msgid "Copyright (C) 2002 Free Software Foundation, Inc.\n" #~ msgstr "Copyright © 2002 Free Software Foundation, Inc.\n" #~ msgid "I/O error on output" #~ msgstr "Ein-/Ausgabefehler bei der Ausgabe" #~ msgid "" #~ "internal error in %s, at tradcpp.c:%d\n" #~ "Please submit a full bug report.\n" #~ "See %s for instructions." #~ msgstr "" #~ "Interner Fehler in %s bei tradcpp.c:%d\n" #~ "Bitte senden Sie einen vollständigen Fehlerbericht\n" #~ "auf Englisch ein; Fehler in der deutschen Übersetzung\n" #~ "sind an de@li.org zu melden.\n" #~ "Gehen Sie gemäß den Hinweisen in %s vor." nescc-1.3.4/libcpp/po/el.po000066400000000000000000003744071177770303300154700ustar00rootroot00000000000000# Greek translation of gcc. # Copyright (C) 2001, 2002 Free Software Foundation, Inc. # Simos Xenitellis , 2001, 2002. # msgid "" msgstr "" "Project-Id-Version: gcc 3.2\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2007-11-08 21:08+0000\n" "PO-Revision-Date: 2002-08-18 15:46+0100\n" "Last-Translator: Simos Xenitellis \n" "Language-Team: Greek \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-7\n" "Content-Transfer-Encoding: 8bit\n" #: charset.c:654 #, fuzzy, c-format msgid "conversion from %s to %s not supported by iconv" msgstr " `%s' `%s' " #: charset.c:657 msgid "iconv_open" msgstr "" #: charset.c:665 #, c-format msgid "no iconv implementation, cannot convert from %s to %s" msgstr "" #: charset.c:742 #, c-format msgid "character 0x%lx is not in the basic source character set\n" msgstr "" #: charset.c:759 charset.c:1352 msgid "converting to execution character set" msgstr "" #: charset.c:765 #, c-format msgid "character 0x%lx is not unibyte in execution character set" msgstr "" #: charset.c:889 #, c-format msgid "Character %x might not be NFKC" msgstr "" #: charset.c:949 #, fuzzy msgid "universal character names are only valid in C++ and C99" msgstr "U+%04X: " #: charset.c:952 #, c-format msgid "the meaning of '\\%c' is different in traditional C" msgstr "" #: charset.c:961 msgid "In _cpp_valid_ucn but not a UCN" msgstr "" #: charset.c:986 #, c-format msgid "incomplete universal character name %.*s" msgstr "" #: charset.c:998 #, fuzzy, c-format msgid "%.*s is not a valid universal character" msgstr " `%s' ." #: charset.c:1008 lex.c:484 msgid "'$' in identifier or number" msgstr "" #: charset.c:1018 #, c-format msgid "universal character %.*s is not valid in an identifier" msgstr "" #: charset.c:1022 #, c-format msgid "universal character %.*s is not valid at the start of an identifier" msgstr "" #: charset.c:1056 charset.c:1571 msgid "converting UCN to source character set" msgstr "" #: charset.c:1060 msgid "converting UCN to execution character set" msgstr "" #: charset.c:1132 msgid "the meaning of '\\x' is different in traditional C" msgstr "" #: charset.c:1149 msgid "\\x used with no following hex digits" msgstr "" #: charset.c:1156 #, fuzzy msgid "hex escape sequence out of range" msgstr " " #: charset.c:1195 #, fuzzy msgid "octal escape sequence out of range" msgstr " " #: charset.c:1263 msgid "the meaning of '\\a' is different in traditional C" msgstr "" #: charset.c:1270 #, c-format msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "" # src/main.c:663 #: charset.c:1278 #, fuzzy, c-format msgid "unknown escape sequence '\\%c'" msgstr " `%s'" # src/main.c:663 #: charset.c:1286 #, fuzzy, c-format msgid "unknown escape sequence: '\\%s'" msgstr " `%s'" #: charset.c:1293 #, fuzzy msgid "converting escape sequence to execution character set" msgstr " " #: charset.c:1415 charset.c:1478 #, fuzzy msgid "character constant too long for its type" msgstr " " #: charset.c:1418 #, fuzzy msgid "multi-character character constant" msgstr " `%s'" #: charset.c:1510 #, fuzzy msgid "empty character constant" msgstr " " #: charset.c:1612 #, fuzzy, c-format msgid "failure to convert %s to %s" msgstr " %s `%s' `%s'" #: directives.c:215 directives.c:241 #, c-format msgid "extra tokens at end of #%s directive" msgstr "" #: directives.c:344 #, c-format msgid "#%s is a GCC extension" msgstr "" #: directives.c:356 msgid "suggest not using #elif in traditional C" msgstr "" #: directives.c:359 #, c-format msgid "traditional C ignores #%s with the # indented" msgstr "" #: directives.c:363 #, c-format msgid "suggest hiding #%s from traditional C with an indented #" msgstr "" #: directives.c:389 msgid "embedding a directive within macro arguments is not portable" msgstr "" #: directives.c:409 msgid "style of line directive is a GCC extension" msgstr "" #: directives.c:464 #, c-format msgid "invalid preprocessing directive #%s" msgstr "" #: directives.c:532 msgid "\"defined\" cannot be used as a macro name" msgstr "" #: directives.c:538 #, c-format msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "" #: directives.c:541 #, c-format msgid "no macro name given in #%s directive" msgstr "" #: directives.c:544 #, fuzzy msgid "macro names must be identifiers" msgstr " " #: directives.c:585 #, fuzzy, c-format msgid "undefining \"%s\"" msgstr " %s" #: directives.c:640 #, fuzzy msgid "missing terminating > character" msgstr " " #: directives.c:695 #, c-format msgid "#%s expects \"FILENAME\" or " msgstr "" #: directives.c:739 #, fuzzy, c-format msgid "empty filename in #%s" msgstr " %s" #: directives.c:749 msgid "#include nested too deeply" msgstr "" #: directives.c:790 msgid "#include_next in primary source file" msgstr "" #: directives.c:816 #, c-format msgid "invalid flag \"%s\" in line directive" msgstr "" #: directives.c:868 #, fuzzy, c-format msgid "\"%s\" after #line is not a positive integer" msgstr "%s' ." #: directives.c:874 #, fuzzy msgid "line number out of range" msgstr "%s: " #: directives.c:887 directives.c:964 #, fuzzy, c-format msgid "\"%s\" is not a valid filename" msgstr "%s' ." #: directives.c:924 #, fuzzy, c-format msgid "\"%s\" after # is not a positive integer" msgstr "%s' ." #: directives.c:1026 #, fuzzy, c-format msgid "invalid #%s directive" msgstr "%%%c: ." #: directives.c:1089 #, c-format msgid "registering pragmas in namespace \"%s\" with mismatched name expansion" msgstr "" #: directives.c:1098 #, c-format msgid "registering pragma \"%s\" with name expansion and no namespace" msgstr "" #: directives.c:1116 #, c-format msgid "registering \"%s\" as both a pragma and a pragma namespace" msgstr "" #: directives.c:1119 #, c-format msgid "#pragma %s %s is already registered" msgstr "" #: directives.c:1122 #, fuzzy, c-format msgid "#pragma %s is already registered" msgstr " `%s' " #: directives.c:1152 msgid "registering pragma with NULL handler" msgstr "" #: directives.c:1362 msgid "#pragma once in main file" msgstr "" #: directives.c:1385 msgid "invalid #pragma GCC poison directive" msgstr "" #: directives.c:1394 #, c-format msgid "poisoning existing macro \"%s\"" msgstr "" #: directives.c:1413 msgid "#pragma system_header ignored outside include file" msgstr "" #: directives.c:1437 #, fuzzy, c-format msgid "cannot find source file %s" msgstr " : %s" #: directives.c:1441 #, c-format msgid "current file is older than %s" msgstr "" #: directives.c:1620 msgid "_Pragma takes a parenthesized string literal" msgstr "" #: directives.c:1693 msgid "#else without #if" msgstr "" #: directives.c:1698 msgid "#else after #else" msgstr "#else #else" #: directives.c:1700 directives.c:1733 msgid "the conditional began here" msgstr "" #: directives.c:1726 msgid "#elif without #if" msgstr "" #: directives.c:1731 msgid "#elif after #else" msgstr "#elif #else" #: directives.c:1761 msgid "#endif without #if" msgstr "" #: directives.c:1838 msgid "missing '(' after predicate" msgstr "" #: directives.c:1853 msgid "missing ')' to complete answer" msgstr "" #: directives.c:1873 msgid "predicate's answer is empty" msgstr "" #: directives.c:1900 #, fuzzy msgid "assertion without predicate" msgstr " " #: directives.c:1902 #, fuzzy msgid "predicate must be an identifier" msgstr " " #: directives.c:1988 #, c-format msgid "\"%s\" re-asserted" msgstr "" #: directives.c:2271 #, fuzzy, c-format msgid "unterminated #%s" msgstr " o " #: directives-only.c:221 lex.c:1016 traditional.c:162 #, fuzzy msgid "unterminated comment" msgstr " `s'" #: errors.c:118 msgid "warning: " msgstr ": " #: errors.c:120 msgid "internal error: " msgstr " : " #: errors.c:122 #, fuzzy msgid "error: " msgstr " : " #: errors.c:186 #, fuzzy msgid "stdout" msgstr "" # src/request.c:37 #: errors.c:188 #, c-format msgid "%s: %s" msgstr "%s: %s" #: expr.c:261 #, fuzzy msgid "too many decimal points in number" msgstr " " #: expr.c:290 expr.c:365 msgid "fixed-point constants are a GCC extension" msgstr "" #: expr.c:303 #, fuzzy, c-format msgid "invalid digit \"%c\" in binary constant" msgstr " `%s'" #: expr.c:305 #, fuzzy, c-format msgid "invalid digit \"%c\" in octal constant" msgstr " `%s'" #: expr.c:313 #, fuzzy msgid "invalid prefix \"0b\" for floating constant" msgstr " : %s" #: expr.c:319 msgid "use of C99 hexadecimal floating constant" msgstr "" #: expr.c:328 msgid "exponent has no digits" msgstr "" #: expr.c:335 msgid "hexadecimal floating constants require an exponent" msgstr "" #: expr.c:341 #, fuzzy, c-format msgid "invalid suffix \"%.*s\" on floating constant" msgstr " : %s" #: expr.c:351 expr.c:393 #, c-format msgid "traditional C rejects the \"%.*s\" suffix" msgstr "" #: expr.c:358 #, fuzzy, c-format msgid "invalid suffix \"%.*s\" with hexadecimal floating constant" msgstr " : %s" #: expr.c:369 #, fuzzy msgid "decimal float constants are a GCC extension" msgstr "%s: %s " #: expr.c:379 #, fuzzy, c-format msgid "invalid suffix \"%.*s\" on integer constant" msgstr " `%s'" #: expr.c:401 #, fuzzy msgid "use of C99 long long integer constant" msgstr " `%s'" #: expr.c:409 msgid "imaginary constants are a GCC extension" msgstr "" #: expr.c:412 msgid "binary constants are a GCC extension" msgstr "" #: expr.c:505 #, fuzzy msgid "integer constant is too large for its type" msgstr "%s: %s " #: expr.c:517 #, fuzzy msgid "integer constant is so large that it is unsigned" msgstr "%s: %s " #: expr.c:612 #, fuzzy msgid "missing ')' after \"defined\"" msgstr " " #: expr.c:619 msgid "operator \"defined\" requires an identifier" msgstr "" #: expr.c:627 #, c-format msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "" #: expr.c:637 msgid "this use of \"defined\" may not be portable" msgstr "" #: expr.c:676 #, fuzzy msgid "floating constant in preprocessor expression" msgstr " " #: expr.c:682 #, fuzzy msgid "imaginary number in preprocessor expression" msgstr " " #: expr.c:727 #, fuzzy, c-format msgid "\"%s\" is not defined" msgstr " `%s' " #: expr.c:855 expr.c:884 #, fuzzy, c-format msgid "missing binary operator before token \"%s\"" msgstr "%s: .\n" #: expr.c:875 #, fuzzy, c-format msgid "token \"%s\" is not valid in preprocessor expressions" msgstr "%s: : %s" #: expr.c:892 msgid "missing expression between '(' and ')'" msgstr "" #: expr.c:895 msgid "#if with no expression" msgstr "" #: expr.c:898 #, c-format msgid "operator '%s' has no right operand" msgstr "" #: expr.c:903 #, c-format msgid "operator '%s' has no left operand" msgstr "" #: expr.c:929 msgid " ':' without preceding '?'" msgstr "" #: expr.c:956 msgid "unbalanced stack in #if" msgstr "" #: expr.c:975 #, fuzzy, c-format msgid "impossible operator '%u'" msgstr "RPC: RPC" #: expr.c:1065 #, fuzzy msgid "missing ')' in expression" msgstr " " #: expr.c:1086 #, fuzzy msgid "'?' without following ':'" msgstr " : %s" #: expr.c:1096 msgid "integer overflow in preprocessor expression" msgstr "" #: expr.c:1101 #, fuzzy msgid "missing '(' in expression" msgstr " " #: expr.c:1133 #, c-format msgid "the left operand of \"%s\" changes sign when promoted" msgstr "" #: expr.c:1138 #, c-format msgid "the right operand of \"%s\" changes sign when promoted" msgstr "" #: expr.c:1397 msgid "traditional C rejects the unary plus operator" msgstr "" #: expr.c:1480 msgid "comma operator in operand of #if" msgstr "" #: expr.c:1612 #, fuzzy msgid "division by zero in #if" msgstr " : %s" #: files.c:442 msgid "NULL directory in find_file" msgstr "" #: files.c:480 msgid "one or more PCH files were found, but they were invalid" msgstr "" #: files.c:483 msgid "use -Winvalid-pch for more information" msgstr "" #: files.c:570 #, fuzzy, c-format msgid "%s is a block device" msgstr " " # src/shred.c:1134 #: files.c:587 #, fuzzy, c-format msgid "%s is too large" msgstr "%s: " #: files.c:622 #, fuzzy, c-format msgid "%s is shorter than expected" msgstr "%s: .\n" #: files.c:852 #, c-format msgid "no include path in which to search for %s" msgstr "" #: files.c:1157 msgid "Multiple include guards may be useful for:\n" msgstr "" #: init.c:426 #, fuzzy msgid "cppchar_t must be an unsigned type" msgstr " " #: init.c:430 #, c-format msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits" msgstr "" #: init.c:437 msgid "CPP arithmetic must be at least as precise as a target int" msgstr "" #: init.c:440 msgid "target char is less than 8 bits wide" msgstr "" #: init.c:444 msgid "target wchar_t is narrower than target char" msgstr "" #: init.c:448 msgid "target int is narrower than target char" msgstr "" #: init.c:453 msgid "CPP half-integer narrower than CPP character" msgstr "" #: init.c:457 #, c-format msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits" msgstr "" #: lex.c:283 msgid "backslash and newline separated by space" msgstr "" #: lex.c:288 #, fuzzy msgid "backslash-newline at end of file" msgstr " " #: lex.c:303 #, c-format msgid "trigraph ??%c converted to %c" msgstr "" #: lex.c:310 #, c-format msgid "trigraph ??%c ignored, use -trigraphs to enable" msgstr "" #: lex.c:356 msgid "\"/*\" within comment" msgstr "" #: lex.c:414 #, c-format msgid "%s in preprocessing directive" msgstr "" #: lex.c:423 #, fuzzy msgid "null character(s) ignored" msgstr " : " #: lex.c:460 #, fuzzy, c-format msgid "`%.*s' is not in NFKC" msgstr " `%s' " #: lex.c:463 #, fuzzy, c-format msgid "`%.*s' is not in NFC" msgstr " `%s' " #: lex.c:551 #, c-format msgid "attempt to use poisoned \"%s\"" msgstr "" #: lex.c:559 msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "" #: lex.c:659 msgid "null character(s) preserved in literal" msgstr "" #: lex.c:662 #, c-format msgid "missing terminating %c character" msgstr " %c" #: lex.c:1027 msgid "C++ style comments are not allowed in ISO C90" msgstr "" #: lex.c:1029 msgid "(this will be reported only once per input file)" msgstr "" #: lex.c:1034 msgid "multi-line comment" msgstr "" #: lex.c:1347 #, fuzzy, c-format msgid "unspellable token %s" msgstr "%s: %s: %m\n" #: line-map.c:320 #, c-format msgid "In file included from %s:%u" msgstr "" #: line-map.c:338 #, c-format msgid "" ",\n" " from %s:%u" msgstr "" #: macro.c:84 #, fuzzy, c-format msgid "macro \"%s\" is not used" msgstr " `%s' " #: macro.c:123 macro.c:319 #, fuzzy, c-format msgid "invalid built-in macro \"%s\"" msgstr " : %s" #: macro.c:157 #, fuzzy msgid "could not determine file timestamp" msgstr " %s" #: macro.c:254 #, fuzzy msgid "could not determine date and time" msgstr " %s" #: macro.c:270 msgid "__COUNTER__ expanded inside directive with -fdirectives-only" msgstr "" #: macro.c:423 #, fuzzy msgid "invalid string literal, ignoring final '\\'" msgstr " : `%s'" #: macro.c:483 #, c-format msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "" #: macro.c:558 #, fuzzy msgid "ISO C99 requires rest arguments to be used" msgstr " " #: macro.c:563 #, c-format msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "" #: macro.c:568 #, c-format msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "" #: macro.c:679 traditional.c:680 #, c-format msgid "unterminated argument list invoking macro \"%s\"" msgstr "" #: macro.c:782 #, c-format msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "" #: macro.c:1325 #, fuzzy, c-format msgid "duplicate macro parameter \"%s\"" msgstr " `%s'" #: macro.c:1371 #, c-format msgid "\"%s\" may not appear in macro parameter list" msgstr "" #: macro.c:1379 msgid "macro parameters must be comma-separated" msgstr "" #: macro.c:1396 msgid "parameter name missing" msgstr "" #: macro.c:1413 msgid "anonymous variadic macros were introduced in C99" msgstr "" #: macro.c:1418 msgid "ISO C does not permit named variadic macros" msgstr "" #: macro.c:1427 msgid "missing ')' in macro parameter list" msgstr "" #: macro.c:1476 msgid "'##' cannot appear at either end of a macro expansion" msgstr "" #: macro.c:1510 #, fuzzy msgid "ISO C99 requires whitespace after the macro name" msgstr " " #: macro.c:1534 msgid "missing whitespace after the macro name" msgstr "" #: macro.c:1564 msgid "'#' is not followed by a macro parameter" msgstr "" #: macro.c:1683 #, fuzzy, c-format msgid "\"%s\" redefined" msgstr "" #: macro.c:1688 #, fuzzy msgid "this is the location of the previous definition" msgstr " " #: macro.c:1738 #, c-format msgid "macro argument \"%s\" would be stringified in traditional C" msgstr "" #: macro.c:1761 #, c-format msgid "invalid hash type %d in cpp_macro_definition" msgstr "" #: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377 msgid "while writing precompiled header" msgstr "" #: pch.c:485 #, c-format msgid "%s: not used because `%.*s' not defined" msgstr "" #: pch.c:497 #, c-format msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'" msgstr "" #: pch.c:538 #, c-format msgid "%s: not used because `%s' is defined" msgstr "" #: pch.c:558 #, c-format msgid "%s: not used because `__COUNTER__' is invalid" msgstr "" #: pch.c:567 pch.c:737 msgid "while reading precompiled header" msgstr "" #: traditional.c:750 #, c-format msgid "detected recursion whilst expanding macro \"%s\"" msgstr "" #: traditional.c:917 #, fuzzy msgid "syntax error in macro parameter list" msgstr " " #, fuzzy #~ msgid "wrong number of arguments specified for `%s' attribute" #~ msgstr " " #, fuzzy #~ msgid "unknown machine mode `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "no data type for mode `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "section attributes are not supported for this target" #~ msgstr " " #, fuzzy #~ msgid "requested alignment is too large" #~ msgstr " " #, fuzzy #~ msgid "alignment may not be specified for `%s'" #~ msgstr " " #, fuzzy #~ msgid "can't set `%s' attribute after definition" #~ msgstr " " #, fuzzy #~ msgid "`%s' attribute ignored for `%s'" #~ msgstr " `%s' `%s'" #, fuzzy #~ msgid "invalid vector type for attribute `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "__builtin_saveregs not supported by this target" #~ msgstr " " #, fuzzy #~ msgid "missing argument in `__builtin_args_info'" #~ msgstr " `%s'" #, fuzzy #~ msgid "too many arguments to function `va_start'" #~ msgstr " " #, fuzzy #~ msgid "vector overflow in expression" #~ msgstr " " #, fuzzy #~ msgid "invalid truth-value expression" #~ msgstr " " #, fuzzy #~ msgid "invalid operands to binary %s" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid use of `restrict'" #~ msgstr " " #, fuzzy #~ msgid "cannot disable built-in function `%s'" #~ msgstr " ioctl `%s'" #, fuzzy #~ msgid "too few arguments to function `%s'" #~ msgstr ": `%s'" #, fuzzy #~ msgid "too many arguments to function `%s'" #~ msgstr " " #, fuzzy #~ msgid "empty range specified" #~ msgstr " " #, fuzzy #~ msgid "this is the first entry overlapping that value" #~ msgstr " " #, fuzzy #~ msgid "duplicate case value" #~ msgstr " " #, fuzzy #~ msgid "this is the first default label" #~ msgstr " " #, fuzzy #~ msgid "unknown C standard `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "conflicting types for `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "redefinition of `%s'" #~ msgstr " `UNDEFINED'" #, fuzzy #~ msgid "redeclaration of `%s'" #~ msgstr " `%s'\n" #, fuzzy #~ msgid "`%s' declared inline after its definition" #~ msgstr "%s: " #, fuzzy #~ msgid "a parameter" #~ msgstr " " #~ msgid "type mismatch with previous implicit declaration" #~ msgstr " " #~ msgid "previous implicit declaration of `%s'" #~ msgstr " `%s'" #~ msgid "implicit declaration of function `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "duplicate label declaration `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "this is a previous declaration" #~ msgstr " " #, fuzzy #~ msgid "empty declaration" #~ msgstr " " #, fuzzy #~ msgid "array size missing in `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "storage size of `%s' isn't known" #~ msgstr " `%s' \n" #, fuzzy #~ msgid "duplicate `%s'" #~ msgstr " " #, fuzzy #~ msgid "both signed and unsigned specified for `%s'" #~ msgstr " : `%s'" #, fuzzy #~ msgid "complex invalid for `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "duplicate `const'" #~ msgstr " " #, fuzzy #~ msgid "duplicate `restrict'" #~ msgstr " " #, fuzzy #~ msgid "duplicate `volatile'" #~ msgstr " " #, fuzzy #~ msgid "size of array `%s' is too large" #~ msgstr " `%s' ." #, fuzzy #~ msgid "invalid storage class for function `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "cannot inline function `main'" #~ msgstr " fifo `%s'" #, fuzzy #~ msgid "parameter has incomplete type" #~ msgstr " " #, fuzzy #~ msgid "redefinition of `union %s'" #~ msgstr " " #, fuzzy #~ msgid "%s defined inside parms" #~ msgstr " " #~ msgid "union" #~ msgstr "" #~ msgid "structure" #~ msgstr "" # src/request.c:37 #, fuzzy #~ msgid "%s has no %s" #~ msgstr "%s %s" #~ msgid "named members" #~ msgstr " " #~ msgid "members" #~ msgstr "" #, fuzzy #~ msgid "nested redefinition of `%s'" #~ msgstr " locale `%s'" #, fuzzy #~ msgid "negative width in bit-field `%s'" #~ msgstr " " #, fuzzy #~ msgid "`%s' is narrower than values of its type" #~ msgstr "%s' ." #, fuzzy #~ msgid "duplicate member `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "enum defined inside parms" #~ msgstr " %s" #~ msgid "return type defaults to `int'" #~ msgstr " `int'" #, fuzzy #~ msgid "`%s' was used with no declaration before its definition" #~ msgstr " " #~ msgid "return type of `%s' is not `int'" #~ msgstr " `%s' `int'" #~ msgid "first argument of `%s' should be `int'" #~ msgstr " `%s' `int'" #~ msgid "second argument of `%s' should be `char **'" #~ msgstr " `%s' `char **'" #~ msgid "third argument of `%s' should probably be `char **'" #~ msgstr " `%s' `char **'" #~ msgid "`%s' takes only zero or two arguments" #~ msgstr " `%s' " #~ msgid "`%s' is normally a non-static function" #~ msgstr " `%s' - " #~ msgid "parameter name omitted" #~ msgstr " " #, fuzzy #~ msgid "parameter `%s' declared void" #~ msgstr " `%s' " #, fuzzy #~ msgid "multiple parameters named `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "no return statement in function returning non-void" #~ msgstr "`return' , -" #, fuzzy #~ msgid "size of return value of `%s' is larger than %d bytes" #~ msgstr "%s: `%s' %d" #, fuzzy #~ msgid "unrecognized format specifier" #~ msgstr " : %s" #~ msgid "field width" #~ msgstr " " #~ msgid "precision" #~ msgstr "" #, fuzzy #~ msgid "fill character" #~ msgstr " " #, fuzzy #~ msgid "fill character in strfmon format" #~ msgstr " : " #, fuzzy #~ msgid "right precision" #~ msgstr " " #, fuzzy #~ msgid "missing $ operand number in format" #~ msgstr " ." #, fuzzy #~ msgid "operand number out of range in format" #~ msgstr " " #, fuzzy #~ msgid "too many arguments for format" #~ msgstr " " #, fuzzy #~ msgid "format is a wide character string" #~ msgstr " " #, fuzzy #~ msgid "unterminated format string" #~ msgstr " o " #, fuzzy #~ msgid "null format string" #~ msgstr " : `%s'" #, fuzzy #~ msgid "repeated %s in format" #~ msgstr "repeated leap second moment" #, fuzzy #~ msgid "too few arguments for format" #~ msgstr " " #, fuzzy #~ msgid "zero width in %s format" #~ msgstr " %s" #, fuzzy #~ msgid "unknown conversion type character `%c' in format" #~ msgstr " `%s'" #, fuzzy #~ msgid "%s does not support %s" #~ msgstr " fifo " #, fuzzy #~ msgid "different type" #~ msgstr " " #, fuzzy #~ msgid "floating constant out of range" #~ msgstr " " #, fuzzy #~ msgid "'lul' is not a valid integer suffix" #~ msgstr "%s' ." #, fuzzy #~ msgid "integer constant is larger than the maximum value for its type" #~ msgstr "" #~ " bytes `%s' \n" #~ " `long'" #, fuzzy #~ msgid "ignoring invalid multibyte character" #~ msgstr " multibyte " #~ msgid "syntax error" #~ msgstr " " #, fuzzy #~ msgid "syntax error: cannot back up" #~ msgstr " " #, fuzzy #~ msgid "parser stack overflow" #~ msgstr " " #, fuzzy #~ msgid "`%s' is not at beginning of declaration" #~ msgstr " `%s' " #, fuzzy #~ msgid "comma at end of enumerator list" #~ msgstr " " #~ msgid "parse error; also virtual memory exceeded" #~ msgstr " " #~ msgid "parse error" #~ msgstr " " #~ msgid "%s at end of input" #~ msgstr "%s " #~ msgid "%s before %s'%c'" #~ msgstr "%s %s'%c'" #~ msgid "%s before %s'\\x%x'" #~ msgstr "%s %s'\\x%x'" #, fuzzy #~ msgid "%s before string constant" #~ msgstr " " #~ msgid "%s before numeric constant" #~ msgstr "%s " # src/request.c:37 #~ msgid "%s before \"%s\"" #~ msgstr "%s \"%s\"" #~ msgid "%s before '%s' token" #~ msgstr "%s '%s'" #~ msgid "syntax error at '%s' token" #~ msgstr " '%s'" #, fuzzy #~ msgid "#pragma pack(push[, id], ) is not supported on this target" #~ msgstr ": --pid=PID " #, fuzzy #~ msgid "#pragma pack(pop[, id], ) is not supported on this target" #~ msgstr ": --pid=PID " #, fuzzy #~ msgid "malformed '#pragma pack' - ignored" #~ msgstr " " #, fuzzy #~ msgid "malformed #pragma weak, ignored" #~ msgstr " " #, fuzzy #~ msgid "malformed #pragma redefine_extname, ignored" #~ msgstr " " #, fuzzy #~ msgid "junk at end of #pragma redefine_extname" #~ msgstr " o " #, fuzzy #~ msgid "malformed #pragma extern_prefix, ignored" #~ msgstr " " #, fuzzy #~ msgid "junk at end of #pragma extern_prefix" #~ msgstr " o " #, fuzzy #~ msgid "invalid use of void expression" #~ msgstr " " #, fuzzy #~ msgid "invalid use of flexible array member" #~ msgstr " " #, fuzzy #~ msgid "invalid use of undefined type `%s %s'" #~ msgstr " : `%s'" #, fuzzy #~ msgid "invalid use of incomplete typedef `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid type argument of `%s'" #~ msgstr " `%s' ." #, fuzzy #~ msgid "called object is not a function" #~ msgstr " " #, fuzzy #~ msgid "too many arguments to function" #~ msgstr " " #, fuzzy #~ msgid "too few arguments to function" #~ msgstr " " #~ msgid "division by zero" #~ msgstr " " #, fuzzy #~ msgid "unordered comparison on non-floating point argument" #~ msgstr " : %s" #, fuzzy #~ msgid "wrong type argument to abs" #~ msgstr " " #, fuzzy #~ msgid "invalid lvalue in unary `&'" #~ msgstr " " #~ msgid "%s" #~ msgstr "%s" #, fuzzy #~ msgid "%s of read-only variable `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "cannot take address of bit-field `%s'" #~ msgstr " fifo `%s'" #, fuzzy #~ msgid "invalid lvalue in assignment" #~ msgstr " : %s" #, fuzzy #~ msgid "assignment" #~ msgstr " " #~ msgid "%s makes pointer from integer without a cast" #~ msgstr "%s " #, fuzzy #~ msgid "incompatible type for argument %d of `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "incompatible types in %s" #~ msgstr " `%s'" #~ msgid "passing arg %d of `%s'" #~ msgstr " %d `%s'" #~ msgid "passing arg %d of pointer to function" #~ msgstr " %d " # src/request.c:263 #, fuzzy #~ msgid "(near initialization for `%s')" #~ msgstr " " #, fuzzy #~ msgid "initializer element is not constant" #~ msgstr " " # src/request.c:263 #~ msgid "initialization" #~ msgstr "" #, fuzzy #~ msgid "invalid initializer" #~ msgstr " : %s" #, fuzzy #~ msgid "extra brace group at end of initializer" #~ msgstr " " #, fuzzy #~ msgid "missing initializer" #~ msgstr " " #, fuzzy #~ msgid "asm template is not a string constant" #~ msgstr " " #, fuzzy #~ msgid "modification by `asm'" #~ msgstr " " #~ msgid "`return' with no value, in function returning non-void" #~ msgstr "`return' , -" #~ msgid "return" #~ msgstr "" #, fuzzy #~ msgid "can't inline call to `%s'" #~ msgstr " ioctl `%s'" #~ msgid "internal error" #~ msgstr " " #~ msgid "no arguments" #~ msgstr " " # src/getopt1.c:132 # src/getopt1.c:132 #~ msgid "fopen %s" #~ msgstr "fopen %s" #~ msgid "fclose %s" #~ msgstr "fclose %s" #, fuzzy #~ msgid "%s terminated with signal %d [%s]%s" #~ msgstr "%s: C %d\n" #, fuzzy #~ msgid "[cannot find %s]" #~ msgstr " %s" #, fuzzy #~ msgid "cannot find `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "[Leaving %s]\n" #~ msgstr " %s\n" #, fuzzy #~ msgid "cannot find `nm'" #~ msgstr " `%s'" #~ msgid "pipe" #~ msgstr "" #~ msgid "fdopen" #~ msgstr "fdopen" #~ msgid "dup2 %d 1" #~ msgstr "dup2 %d 1" #~ msgid "close %d" #~ msgstr "close %d" #~ msgid "execvp %s" #~ msgstr "execvp %s" #~ msgid "fclose" #~ msgstr "fclose" #, fuzzy #~ msgid "unable to open file '%s'" #~ msgstr " %s" #, fuzzy #~ msgid "unable to stat file '%s'" #~ msgstr " (stat()) `%s': %s" #, fuzzy #~ msgid "unable to mmap file '%s'" #~ msgstr " (mmap) %s.\n" #~ msgid "not found\n" #~ msgstr " \n" #, fuzzy #~ msgid "bad magic number in file '%s'" #~ msgstr " : `%s'" #~ msgid "dynamic dependencies.\n" #~ msgstr " .\n" #, fuzzy #~ msgid "cannot find `ldd'" #~ msgstr " `%s'" #~ msgid "execv %s" #~ msgstr "execv %s" #, fuzzy #~ msgid "%s: not a COFF file" #~ msgstr "%s: " #, fuzzy #~ msgid "%s: cannot open as COFF file" #~ msgstr " " #, fuzzy #~ msgid "library lib%s not found" #~ msgstr " " # src/getopt1.c:132 # src/getopt1.c:132 #~ msgid "open %s" #~ msgstr "open %s" #, fuzzy #~ msgid "section pointer missing" #~ msgstr " %s" #, fuzzy #~ msgid "no symbol table found" #~ msgstr " " #, fuzzy #~ msgid "no cmd_strings found" #~ msgstr " " #, fuzzy #~ msgid "" #~ "writing load commands.\n" #~ "\n" #~ msgstr " " #~ msgid "close %s" #~ msgstr "close %s" #, fuzzy #~ msgid "bad magic number" #~ msgstr " " #~ msgid "bad header version" #~ msgstr " " #, fuzzy #~ msgid "old raw header file" #~ msgstr " " #, fuzzy #~ msgid "unsupported version" #~ msgstr " " # src/request.c:37 #~ msgid "fstat %s" #~ msgstr "fstat %s" #~ msgid "lseek %s 0" #~ msgstr "lseek %s 0" #~ msgid "read %s" #~ msgstr "read %s" #~ msgid "msync %s" #~ msgstr "msync %s" #~ msgid "munmap %s" #~ msgstr "munmap %s" #~ msgid "write %s" #~ msgstr "write %s" #, fuzzy #~ msgid "cannot convert to a pointer type" #~ msgstr " ." #, fuzzy #~ msgid "conversion to incomplete type" #~ msgstr " " #, fuzzy #~ msgid "integer constant out of range" #~ msgstr " " #, fuzzy #~ msgid "invalid character '%c' in #if" #~ msgstr " `%c' `%s'" #, fuzzy #~ msgid "invalid character '\\%03o' in #if" #~ msgstr " `%c' `%s'" #, fuzzy #~ msgid "missing binary operator" #~ msgstr " ." #, fuzzy #~ msgid "ignoring nonexistent directory \"%s\"\n" #~ msgstr " - `%s'\n" #, fuzzy #~ msgid "%s: Not a directory" #~ msgstr " " #, fuzzy #~ msgid "ignoring duplicate directory \"%s\"\n" #~ msgstr " \"%s\"" #, fuzzy #~ msgid "changing search order for system directory \"%s\"" #~ msgstr " \"%s\"" #, fuzzy #~ msgid "End of search list.\n" #~ msgstr " " #, fuzzy #~ msgid "I/O error on output" #~ msgstr " /" #, fuzzy #~ msgid "argument missing after %s" #~ msgstr " " #, fuzzy #~ msgid "assertion missing after %s" #~ msgstr " %s" #, fuzzy #~ msgid "file name missing after %s" #~ msgstr " " #, fuzzy #~ msgid "number missing after %s" #~ msgstr " %s" #, fuzzy #~ msgid "target missing after %s" #~ msgstr " %s\n" #, fuzzy #~ msgid "-I- specified twice" #~ msgstr " " #, fuzzy #~ msgid "possible start of unterminated string literal" #~ msgstr " " #~ msgid "multi-line string literals are deprecated" #~ msgstr " " #, fuzzy #~ msgid "no newline at end of file" #~ msgstr "%s: " #, fuzzy #~ msgid "unknown string token %s\n" #~ msgstr " `s'" # src/main.c:663 #, fuzzy #~ msgid "unknown escape sequence: '\\%03o'" #~ msgstr " `%s'" #~ msgid "invalid option %s" #~ msgstr " %s" #, fuzzy #~ msgid "\"%s\" is not a valid option to the preprocessor" #~ msgstr "%s' ." #~ msgid "too many input files" #~ msgstr " " #~ msgid "%s:%d: warning: " #~ msgstr "%s:%d: : " #~ msgid "%s: warning: " #~ msgstr "%s: : " #~ msgid "((anonymous))" #~ msgstr "(())" # src/request.c:37 #~ msgid "%s: %s: " #~ msgstr "%s: %s: " #~ msgid "sorry, not implemented: " #~ msgstr ", : " #~ msgid "%s " #~ msgstr "%s " #~ msgid " %s" #~ msgstr " %s" #~ msgid "In member function `%s':" #~ msgstr " `%s':" #~ msgid "In function `%s':" #~ msgstr " `%s':" #, fuzzy #~ msgid "compilation terminated.\n" #~ msgstr " " #, fuzzy #~ msgid "Internal compiler error in %s, at %s:%d" #~ msgstr " %s, %u" #~ msgid ":\n" #~ msgstr ":\n" #, fuzzy #~ msgid "`%s' is deprecated" #~ msgstr " `%s' " #, fuzzy #~ msgid "DW_LOC_OP %s not implemented\n" #~ msgstr " " #, fuzzy #~ msgid "can't get current directory" #~ msgstr " ." #, fuzzy #~ msgid "__builtin_eh_return not supported on this target" #~ msgstr " " #, fuzzy #~ msgid "stack limits not supported on this target" #~ msgstr " " #, fuzzy #~ msgid "could not split insn" #~ msgstr " " #, fuzzy #~ msgid "invalid `asm': " #~ msgstr " : %s" #, fuzzy #~ msgid "unterminated assembly dialect alternative" #~ msgstr " " #, fuzzy #~ msgid "operand number missing after %%-letter" #~ msgstr " %s" #, fuzzy #~ msgid "operand number out of range" #~ msgstr " " #, fuzzy #~ msgid "invalid %%-code" #~ msgstr " " #, fuzzy #~ msgid "invalid expression as operand" #~ msgstr "%s: : %s" #~ msgid "control reaches end of non-void function" #~ msgstr " - " # src/shred.c:1134 #, fuzzy #~ msgid "size of variable `%s' is too large" #~ msgstr "%s: " #, fuzzy #~ msgid "unused parameter `%s'" #~ msgstr " `%s'" # src/main.c:785 #, fuzzy #~ msgid "ambiguous abbreviation %s" #~ msgstr " `%s'" #, fuzzy #~ msgid "missing argument to `%s' option" #~ msgstr " `%s'" #, fuzzy #~ msgid "extraneous argument to `%s' option" #~ msgstr " `%s'" #, fuzzy #~ msgid "" #~ "Setting spec %s to '%s'\n" #~ "\n" #~ msgstr " %s %s %s" #, fuzzy #~ msgid "rename spec %s to %s\n" #~ msgstr " %s %s %s" #, fuzzy #~ msgid "specs unknown %% command after %ld characters" #~ msgstr " " #~ msgid "-pipe not supported" #~ msgstr " -pipe " #~ msgid "" #~ "\n" #~ "Go ahead? (y or n) " #~ msgstr "" #~ "\n" #~ " ; (y n) " #~ msgid "# %s %.2f %.2f\n" #~ msgstr "# %s %.2f %.2f\n" #~ msgid "Usage: %s [options] file...\n" #~ msgstr ": %s [] ...\n" #~ msgid "Options:\n" #~ msgstr ":\n" #~ msgid " -pass-exit-codes Exit with highest error code from a phase\n" #~ msgstr " -pass-exit-codes \n" #~ msgid " --help Display this information\n" #~ msgstr " --help \n" #~ msgid " --target-help Display target specific command line options\n" #~ msgstr " --target-help \n" #~ msgid " (Use '-v --help' to display command line options of sub-processes)\n" #~ msgstr " ( '-v --help' )\n" #~ msgid " -dumpspecs Display all of the built in spec strings\n" #~ msgstr " -dumpspecs \n" #~ msgid " -dumpversion Display the version of the compiler\n" #~ msgstr " -dumpversion \n" #~ msgid " -dumpmachine Display the compiler's target processor\n" #~ msgstr " -dumpmachine \n" #~ msgid " -print-search-dirs Display the directories in the compiler's search path\n" #~ msgstr " -print-search-dirs \n" #~ msgid " -print-libgcc-file-name Display the name of the compiler's companion library\n" #~ msgstr " -print-libgcc-file-name \n" #~ msgid " -print-file-name= Display the full path to library \n" #~ msgstr " -print-file-name=<> <>\n" #~ msgid " -print-prog-name= Display the full path to compiler component \n" #~ msgstr " -print-prog-name=<> <>\n" #~ msgid " -print-multi-directory Display the root directory for versions of libgcc\n" #~ msgstr " -print-multi-directory libgcc\n" #~ msgid "" #~ " -print-multi-lib Display the mapping between command line options and\n" #~ " multiple library search directories\n" #~ msgstr "" #~ " -print-multi-lib \n" #~ " \n" #~ " \n" #~ msgid " -Wa, Pass comma-separated on to the assembler\n" #~ msgstr " -Wa,<> <> \n" #~ msgid " -Wp, Pass comma-separated on to the preprocessor\n" #~ msgstr " -Wp,<> <> -\n" #~ msgid " -Wl, Pass comma-separated on to the linker\n" #~ msgstr " -Wl,<> <> \n" #~ msgid " -Xlinker Pass on to the linker\n" #~ msgstr " -Xlinker <> <> \n" #~ msgid " -save-temps Do not delete intermediate files\n" #~ msgstr " -save-temps \n" #~ msgid " -pipe Use pipes rather than intermediate files\n" #~ msgstr " -pipe \n" #~ msgid " -time Time the execution of each subprocess\n" #~ msgstr " -time \n" #~ msgid " -specs= Override built-in specs with the contents of \n" #~ msgstr " -specs=<> <> \n" #~ msgid " -std= Assume that the input sources are for \n" #~ msgstr "" #~ " -std=<> <>\n" #~ "\n" #~ msgid " -B Add to the compiler's search paths\n" #~ msgstr " -B <> <> \n" #~ msgid " -b Run gcc for target , if installed\n" #~ msgstr " -b <> gcc <>, \n" #~ msgid " -V Run gcc version number , if installed\n" #~ msgstr " -V <> <> gcc, \n" #~ msgid " -v Display the programs invoked by the compiler\n" #~ msgstr " -v \n" #~ msgid " -E Preprocess only; do not compile, assemble or link\n" #~ msgstr " -E , \n" #~ msgid " -S Compile only; do not assemble or link\n" #~ msgstr " -S \n" #~ msgid " -c Compile and assemble, but do not link\n" #~ msgstr " -c , \n" #~ msgid " -o Place the output into \n" #~ msgstr " -o <> <>\n" #~ msgid "" #~ " -x Specify the language of the following input files\n" #~ " Permissable languages include: c c++ assembler none\n" #~ " 'none' means revert to the default behavior of\n" #~ " guessing the language based on the file's extension\n" #~ msgstr "" #~ " -x <> \n" #~ " : c c++ assembler none\n" #~ " 'none' \n" #~ " \n" #~ " \n" #~ msgid "" #~ "\n" #~ "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n" #~ " passed on to the various sub-processes invoked by %s. In order to pass\n" #~ " other options on to these processes the -W options must be used.\n" #~ msgstr "" #~ "\n" #~ " -g, -f, -m, -O, -W --param \n" #~ " %s. \n" #~ " , \n" #~ " -W<>.\n" #~ msgid "%s (GCC) %s\n" #~ msgstr "%s (GCC) %s\n" #~ msgid "Copyright (C) 2002 Free Software Foundation, Inc.\n" #~ msgstr " (C) 2002 Free Software Foundation, Inc.\n" # src/main.c:850 #, fuzzy #~ msgid "" #~ "This is free software; see the source for copying conditions. There is NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" #~ "\n" #~ msgstr "" #~ " \n" #~ ". \n" #~ " .\n" #, fuzzy #~ msgid "argument to `-Xlinker' is missing" #~ msgstr " " #, fuzzy #~ msgid "argument to `-l' is missing" #~ msgstr " " #, fuzzy #~ msgid "argument to `-specs' is missing" #~ msgstr " " #, fuzzy #~ msgid "argument to `-specs=' is missing" #~ msgstr " " #, fuzzy #~ msgid "argument to `-b' is missing" #~ msgstr " " #, fuzzy #~ msgid "argument to `-B' is missing" #~ msgstr " " #, fuzzy #~ msgid "argument to `-V' is missing" #~ msgstr " " #, fuzzy #~ msgid "invalid version number format" #~ msgstr " " #, fuzzy #~ msgid "argument to `-x' is missing" #~ msgstr " " #, fuzzy #~ msgid "argument to `-%s' is missing" #~ msgstr " " #, fuzzy #~ msgid "invalid specification! Bug in cc" #~ msgstr " (port)" #, fuzzy #~ msgid "spec failure: unrecognized spec option '%c'" #~ msgstr "%s: `-%c'\n" #~ msgid "unrecognized option `-%s'" #~ msgstr " `-%s'" #~ msgid "install: %s%s\n" #~ msgstr ": %s%s\n" #~ msgid "programs: %s\n" #~ msgstr ": %s\n" #~ msgid "libraries: %s\n" #~ msgstr ": %s\n" #~ msgid "" #~ "\n" #~ "For bug reporting instructions, please see:\n" #~ msgstr "" #~ "\n" #~ " . :\n" #~ msgid "Configured with: %s\n" #~ msgstr " : %s\n" #~ msgid "Thread model: %s\n" #~ msgstr " : %s\n" #~ msgid "gcc version %s\n" #~ msgstr " gcc %s\n" #~ msgid "gcc driver version %s executing gcc version %s\n" #~ msgstr " gcc %s gcc %s\n" #~ msgid "no input files" #~ msgstr " " #~ msgid "%s: %s compiler not installed on this system" #~ msgstr "%s: %s " #~ msgid "internal gcc abort" #~ msgstr " gcc" # src/main.c:178 #, fuzzy #~ msgid "Internal gcov abort.\n" #~ msgstr " (recoding)" #~ msgid "" #~ "Usage: gcov [OPTION]... SOURCEFILE\n" #~ "\n" #~ msgstr "" #~ ": gcov []... [ź]\n" #~ "\n" #~ msgid "" #~ "Print code coverage information.\n" #~ "\n" #~ msgstr "" #~ "E .\n" #~ "\n" #~ msgid " -h, --help Print this help, then exit\n" #~ msgstr " -h, --help , \n" #~ msgid " -v, --version Print version number, then exit\n" #~ msgstr " -v, --version , \n" #~ msgid "" #~ "\n" #~ "For bug reporting instructions, please see:\n" #~ "%s.\n" #~ msgstr "" #~ "\n" #~ " , :\n" #~ "%s.\n" #~ msgid "gcov (GCC) %s\n" #~ msgstr "gcov (GCC) %s\n" #~ msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n" #~ msgstr " (C) 2001 Free Software Foundation, Inc.\n" #, fuzzy #~ msgid "Could not open basic block file %s.\n" #~ msgstr " %s" #, fuzzy #~ msgid "Could not open program flow graph file %s.\n" #~ msgstr " \"%s\"" #, fuzzy #~ msgid "No executable code associated with file %s.\n" #~ msgstr " " #, fuzzy #~ msgid "No branches in function %s\n" #~ msgstr " `%s'.\n" #, fuzzy #~ msgid "No calls in function %s\n" #~ msgstr " URL %s.\n" #, fuzzy #~ msgid "didn't use all bb entries of graph, function %s\n" #~ msgstr " %s\n" #, fuzzy #~ msgid "No branches in file %s\n" #~ msgstr "" #~ " `%s'.\n" #~ "\n" #, fuzzy #~ msgid "No calls in file %s\n" #~ msgstr " `%s'\n" #, fuzzy #~ msgid "Could not open source file %s.\n" #~ msgstr " %s" #, fuzzy #~ msgid "Could not open output file %s.\n" #~ msgstr " `%s'" #~ msgid "Creating %s.\n" #~ msgstr " %s.\n" #, fuzzy #~ msgid "can't open %s" #~ msgstr " `%s'" #, fuzzy #~ msgid "function cannot be inline" #~ msgstr " " #, fuzzy #~ msgid "invalid parameter `%s'" #~ msgstr " `%s' ." #, fuzzy #~ msgid "%s: internal abort\n" #~ msgstr " " #, fuzzy #~ msgid "%s: error writing file `%s': %s\n" #~ msgstr "%s: %s\n" #, fuzzy #~ msgid "%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]'\n" #~ msgstr "%s: %s [ -v ] [ -c ] ...\n" #, fuzzy #~ msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]'\n" #~ msgstr "%s: %s [ -v ] [ -c ] ...\n" #, fuzzy #~ msgid "%s: warning: no read access for file `%s'\n" #~ msgstr "%s: : uname : %s\n" #, fuzzy #~ msgid "%s: warning: no write access for file `%s'\n" #~ msgstr "%s: : uname : %s\n" #, fuzzy #~ msgid "%s: invalid file name: %s\n" #~ msgstr "%s: " #, fuzzy #~ msgid "%s: %s: can't get status: %s\n" #~ msgstr "%s: %s: %s\n" #, fuzzy #~ msgid "%s: compiling `%s'\n" #~ msgstr "%s: %s\n" # src/request.c:37 #, fuzzy #~ msgid "%s: wait: %s\n" #~ msgstr "%s %s" #, fuzzy #~ msgid "%s: subprocess got fatal signal %d\n" #~ msgstr "%s: C %d\n" #, fuzzy #~ msgid "%s: %s exited with status %d\n" #~ msgstr "%s: C %d\n" #, fuzzy #~ msgid "%s: warning: missing SYSCALLS file `%s'\n" #~ msgstr "%s: : uname : %s\n" #, fuzzy #~ msgid "%s: can't read aux info file `%s': %s\n" #~ msgstr "%s: %s: %s\n" #, fuzzy #~ msgid "%s: can't get status of aux info file `%s': %s\n" #~ msgstr " (stat()) `%s': %s" #, fuzzy #~ msgid "%s: can't open aux info file `%s' for reading: %s\n" #~ msgstr " `%s' `%s'" # src/shred.c:1103 #, fuzzy #~ msgid "%s: error reading aux info file `%s': %s\n" #~ msgstr "%s: %s" #, fuzzy #~ msgid "%s: error closing aux info file `%s': %s\n" #~ msgstr "%s: %s: %s\n" #, fuzzy #~ msgid "%s: can't delete aux info file `%s': %s\n" #~ msgstr "%s: %s: %s\n" #, fuzzy #~ msgid "%s: can't delete file `%s': %s\n" #~ msgstr "%s: %s: %s\n" #, fuzzy #~ msgid "%s: warning: can't rename file `%s' to `%s': %s\n" #~ msgstr "%s: : uname : %s\n" #, fuzzy #~ msgid "%s: %d: warning: no extern definition for `%s'\n" #~ msgstr "%s: : " #, fuzzy #~ msgid "" #~ "\n" #~ "%s: warning: too few parameter lists in declaration of `%s'\n" #~ msgstr ": `%s'" #, fuzzy #~ msgid "%s: `%s' not converted\n" #~ msgstr "%s: `%s': " #, fuzzy #~ msgid "%s: would convert file `%s'\n" #~ msgstr "%s: %s\n" #, fuzzy #~ msgid "%s: converting file `%s'\n" #~ msgstr " `%s'\n" #, fuzzy #~ msgid "%s: can't get status for file `%s': %s\n" #~ msgstr " (stat()) `%s': %s" #, fuzzy #~ msgid "%s: can't open file `%s' for reading: %s\n" #~ msgstr "%s: %s: %s\n" #, fuzzy #~ msgid "" #~ "\n" #~ "%s: error reading input file `%s': %s\n" #~ msgstr "%s: %s\n" #, fuzzy #~ msgid "%s: can't create/open clean file `%s': %s\n" #~ msgstr "%s: %s: %s\n" #, fuzzy #~ msgid "%s: can't link file `%s' to `%s': %s\n" #~ msgstr "%s: %s %s: %s\n" #, fuzzy #~ msgid "%s: can't create/open output file `%s': %s\n" #~ msgstr " `%s'" #, fuzzy #~ msgid "%s: can't change mode of file `%s': %s\n" #~ msgstr "%s: %s: %s\n" #, fuzzy #~ msgid "%s: cannot get working directory: %s\n" #~ msgstr "%s: " #, fuzzy #~ msgid "%s: input file names must have .c suffixes: %s\n" #~ msgstr "%s: " #, fuzzy #~ msgid "conversion from NaN to int" #~ msgstr " `%s' `%s' " #, fuzzy #~ msgid "floating point overflow" #~ msgstr " " #, fuzzy #~ msgid "%s: argument domain error" #~ msgstr "%s: " #, fuzzy #~ msgid "%s: overflow range error" #~ msgstr "%s: " #, fuzzy #~ msgid "%s: underflow range error" #~ msgstr "%s: " #, fuzzy #~ msgid "unknown register name: %s" #~ msgstr " `%s'" #, fuzzy #~ msgid "unable to generate reloads for:" #~ msgstr " " #, fuzzy #~ msgid "this is the insn:" #~ msgstr " " #, fuzzy #~ msgid "could not find a spill register" #~ msgstr " " #, fuzzy #~ msgid "unrecognizable insn:" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid punctuation `%c' in constraint" #~ msgstr " `%s' [c*n]" #, fuzzy #~ msgid "unknown register name `%s' in `asm'" #~ msgstr " `%s' `%s'" #, fuzzy #~ msgid "duplicate asm operand name '%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "undefined named operand '%s'" #~ msgstr " %s" #~ msgid "unused variable `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "size of `%s' is larger than %d bytes" #~ msgstr "%s: `%s' %d" #~ msgid " TOTAL :" #~ msgstr " :" #, fuzzy #~ msgid "collect: reading %s\n" #~ msgstr " %s" #~ msgid "ld returned %d exit status" #~ msgstr " ld %d" #, fuzzy #~ msgid "Floating-point operations can trap" #~ msgstr " " #, fuzzy #~ msgid "Do not suppress warnings from system headers" #~ msgstr " " #~ msgid "invalid option `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "internal error: %s" #~ msgstr " : %s" #, fuzzy #~ msgid "" #~ "\n" #~ "Target specific options:\n" #~ msgstr " " #, fuzzy #~ msgid "unrecognized gcc debugging option: %c" #~ msgstr " `-%c'" # src/request.c:806 src/request.c:912 #, fuzzy #~ msgid "unrecognized register name `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "unrecognized option `%s'" #~ msgstr " `-%c'" #, fuzzy #~ msgid "`%s': unknown or unsupported -g option" #~ msgstr "%s: / .\n" #, fuzzy #~ msgid "-param option missing argument" #~ msgstr " " #, fuzzy #~ msgid "invalid --param option: %s" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid parameter value `%s'" #~ msgstr " `%s'" # src/getopt1.c:132 # src/getopt1.c:132 #, fuzzy #~ msgid "options passed: " #~ msgstr " %s" # src/getopt1.c:155 # src/getopt1.c:155 #, fuzzy #~ msgid "options enabled: " #~ msgstr " \n" #, fuzzy #~ msgid "can't open %s for writing" #~ msgstr "%s: " #, fuzzy #~ msgid "ignoring command line option '%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "instruction scheduling not supported on this target machine" #~ msgstr " " #, fuzzy #~ msgid "-f%sleading-underscore not supported on this target machine" #~ msgstr " " #, fuzzy #~ msgid "-ffunction-sections not supported for this target" #~ msgstr " --no-dereference (-h) " #, fuzzy #~ msgid "-fdata-sections not supported for this target" #~ msgstr " " #, fuzzy #~ msgid "-fprefetch-loop-arrays not supported for this target" #~ msgstr " --no-dereference (-h) " #, fuzzy #~ msgid "-fprefetch-loop-arrays is not supported with -Os" #~ msgstr " --no-dereference (-h) " #, fuzzy #~ msgid "error writing to %s" #~ msgstr " %s" #, fuzzy #~ msgid "error closing %s" #~ msgstr " %s" #, fuzzy #~ msgid "invalid character constant in #if" #~ msgstr " " #, fuzzy #~ msgid "invalid token in expression" #~ msgstr " " #, fuzzy #~ msgid "octal character constant does not fit in a byte" #~ msgstr " " #, fuzzy #~ msgid "hex character constant does not fit in a byte" #~ msgstr " " #, fuzzy #~ msgid "Junk after end of expression." #~ msgstr " " #, fuzzy #~ msgid "-traditional is not supported in C++" #~ msgstr " " #, fuzzy #~ msgid "-traditional and -ansi are mutually exclusive" #~ msgstr " --string --check " #, fuzzy #~ msgid "-pedantic and -traditional are mutually exclusive" #~ msgstr "\" %s\" -l " #, fuzzy #~ msgid "-trigraphs and -traditional are mutually exclusive" #~ msgstr " --string --check " #, fuzzy #~ msgid "unterminated #%s conditional" #~ msgstr " o " #, fuzzy #~ msgid "not in any file?!" #~ msgstr " " #, fuzzy #~ msgid "invalid macro name" #~ msgstr " " #, fuzzy #~ msgid "invalid macro name `%s'" #~ msgstr " `%s' ." #, fuzzy #~ msgid "unterminated parameter list in #define" #~ msgstr " " #, fuzzy #~ msgid "invalid format #line command" #~ msgstr " : `%s'" #, fuzzy #~ msgid "undefining `defined'" #~ msgstr "" #, fuzzy #~ msgid "undefining `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "#warning%.*s" #~ msgstr ": " # src/dfa.c:652 src/dfa.c:655 src/dfa.c:682 src/dfa.c:686 src/dfa.c:687 # src/dfa.c:690 src/dfa.c:703 src/dfa.c:704 # src/dfa.c:660 src/dfa.c:663 src/dfa.c:690 src/dfa.c:694 src/dfa.c:695 # src/dfa.c:698 src/dfa.c:711 src/dfa.c:712 #, fuzzy #~ msgid "unbalanced #endif" #~ msgstr " [" #, fuzzy #~ msgid "unterminated string or character constant" #~ msgstr " " #, fuzzy #~ msgid "arguments given to macro `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "no args to macro `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "could not open dump file `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "ignoring unknown option `%.*s' in `-f%s'" #~ msgstr " : %s %s %s" #, fuzzy #~ msgid "invalid initializer for bit string" #~ msgstr " : `%s'" #, fuzzy #~ msgid "register name not specified for `%s'" #~ msgstr " -" #, fuzzy #~ msgid "invalid register name for `%s'" #~ msgstr " : `%s'" #, fuzzy #~ msgid "unknown set constructor type" #~ msgstr " ." #, fuzzy #~ msgid "invalid initial value for member `%s'" #~ msgstr " : `%s'" #, fuzzy #~ msgid "weak declaration of `%s' after first use results in unspecified behavior" #~ msgstr " " #, fuzzy #~ msgid "weak declaration of `%s' not supported" #~ msgstr " " #, fuzzy #~ msgid "too many #pragma options align=reset" #~ msgstr " ." #, fuzzy #~ msgid "malformed '#pragma options', ignoring" #~ msgstr " " #, fuzzy #~ msgid "invalid %%Q value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%C value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%N value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%M value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%m value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%L value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%O value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%P value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%V value" #~ msgstr " " #, fuzzy #~ msgid "-f%s ignored for Unicos/Mk (not supported)" #~ msgstr " fifo " #, fuzzy #~ msgid "-mieee not supported on Unicos/Mk" #~ msgstr " servname ai_socktype" #, fuzzy #~ msgid "trap mode not supported on Unicos/Mk" #~ msgstr " servname ai_socktype" #, fuzzy #~ msgid "rounding mode not supported for VAX floats" #~ msgstr " servname ai_socktype" #, fuzzy #~ msgid "trap mode not supported for VAX floats" #~ msgstr " servname ai_socktype" #, fuzzy #~ msgid "invalid %%H value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%J value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%r value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%R value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%h value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%U value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%s value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%E value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%xn code" #~ msgstr " " #, fuzzy #~ msgid "argument of `%s' attribute is not a string constant" #~ msgstr " `%s' " #, fuzzy #~ msgid "invalid operand to %%R code" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid operand to %%H/%%L code" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid operand to %%U code" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid operand to %%V code" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid operand output code" #~ msgstr " " #, fuzzy #~ msgid "invalid floating point emulation option: -mfpe-%s" #~ msgstr " : %s" #, fuzzy #~ msgid "Don't do symbol renaming" #~ msgstr " " #, fuzzy #~ msgid "MCU `%s' not supported" #~ msgstr " fifo " #, fuzzy #~ msgid "invalid insn:" #~ msgstr " " #, fuzzy #~ msgid "incorrect insn:" #~ msgstr " " #, fuzzy #~ msgid "unknown move insn:" #~ msgstr " `%s'" #, fuzzy #~ msgid "Specify the MCU name" #~ msgstr " " #, fuzzy #~ msgid "trampolines not supported" #~ msgstr " " #, fuzzy #~ msgid "malformed '#pragma %s' - ignored" #~ msgstr " " #, fuzzy #~ msgid "mode not QImode" #~ msgstr "_: \n" #, fuzzy #~ msgid "invalid indirect memory address" #~ msgstr " " #, fuzzy #~ msgid "Do not allocate BK register" #~ msgstr " " #, fuzzy #~ msgid "Enable parallel instructions" #~ msgstr " " #, fuzzy #~ msgid "Disable parallel instructions" #~ msgstr " " #, fuzzy #~ msgid "invalid operand for 'b' modifier" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid operand for 'v' modifier" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid operand for 'P' modifier" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid operand for 'p' modifier" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid operand for 'z' modifier" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid operand for 'H' modifier" #~ msgstr " `%s'" #, fuzzy #~ msgid "bad register" #~ msgstr " " #, fuzzy #~ msgid "invalid operand for 'e' modifier" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid operand for 'm' modifier" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid operand for 'A' modifier" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid operand for 'D' modifier" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid operand for 'T' modifier" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid operand modifier letter" #~ msgstr " `%s'" #, fuzzy #~ msgid "internal error: bad register: %d" #~ msgstr " %s, %u" #, fuzzy #~ msgid "unexpected operand" #~ msgstr " %s" # src/request.c:806 src/request.c:912 #, fuzzy #~ msgid "unrecognized address" #~ msgstr " `%s'" #, fuzzy #~ msgid "unrecognized supposed constant" #~ msgstr " : %s" #, fuzzy #~ msgid "unknown CRIS cpu version specification in -mtune= : %s" #~ msgstr " " #, fuzzy #~ msgid "-fPIC and -fpic are not supported in this configuration" #~ msgstr " " #, fuzzy #~ msgid "unexpected address expression" #~ msgstr " " #, fuzzy #~ msgid "Debug argument support in compiler" #~ msgstr "%s: .\n" #, fuzzy #~ msgid "Debug stack support in compiler" #~ msgstr "%s: .\n" #, fuzzy #~ msgid "invalid addressing mode" #~ msgstr " " #, fuzzy #~ msgid "bad register extension code" #~ msgstr " " #, fuzzy #~ msgid "invalid offset in ybase addressing" #~ msgstr " " #, fuzzy #~ msgid "invalid register in ybase addressing" #~ msgstr " " #, fuzzy #~ msgid "inline float constants not supported on this host" #~ msgstr " " #, fuzzy #~ msgid "invalid mode for gen_tst_reg" #~ msgstr " dlopen()" #, fuzzy #~ msgid "Generate code for near calls" #~ msgstr " " #, fuzzy #~ msgid "Generate code for near jumps" #~ msgstr " " #, fuzzy #~ msgid "profiling not implemented yet" #~ msgstr " " #, fuzzy #~ msgid "trampolines not yet implemented" #~ msgstr " " #, fuzzy #~ msgid "fr30_print_operand: invalid operand to %%A code" #~ msgstr " `%s'" #, fuzzy #~ msgid "fr30_print_operand: invalid %%x code" #~ msgstr " " #, fuzzy #~ msgid "Use registers for argument passing" #~ msgstr " " #, fuzzy #~ msgid "malformed #pragma map, ignored" #~ msgstr " " #, fuzzy #~ msgid "Generate char instructions" #~ msgstr " " #, fuzzy #~ msgid "code model `large' not supported yet" #~ msgstr " " #, fuzzy #~ msgid "%i-bit mode not compiled in" #~ msgstr "%s: .\n" #, fuzzy #~ msgid "argument to `%s' attribute larger than %d" #~ msgstr "%s: `%s' %d" #, fuzzy #~ msgid "invalid UNSPEC as operand" #~ msgstr " UTC" #, fuzzy #~ msgid "invalid operand code `%c'" #~ msgstr " `%s'" # src/grep.c:1133 #, fuzzy #~ msgid "unknown insn mode" #~ msgstr " " #, fuzzy #~ msgid "selector must be an immediate" #~ msgstr " %s " #, fuzzy #~ msgid "mask must be an immediate" #~ msgstr " %s " #, fuzzy #~ msgid "Retain legend information" #~ msgstr " " # lib/argmatch.c:188 #, fuzzy #~ msgid "argument is a structure" #~ msgstr " :" #, fuzzy #~ msgid "Alternate calling convention" #~ msgstr " " #, fuzzy #~ msgid "Use mcount for profiling" #~ msgstr " " #, fuzzy #~ msgid "malformed #pragma align - ignored" #~ msgstr " " #, fuzzy #~ msgid "stack limit expression is not supported" #~ msgstr " " #, fuzzy #~ msgid "Do not use complex addressing modes" #~ msgstr " " #, fuzzy #~ msgid "invalid argument of `%s' attribute" #~ msgstr " `%s' ." #, fuzzy #~ msgid "invalid operand to %%s code" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid operand to %%p code" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid operand to %%T/%%B code" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid operand to %%N code" #~ msgstr " `%s'" #, fuzzy #~ msgid "bad address" #~ msgstr " " #, fuzzy #~ msgid "lo_sum not of register" #~ msgstr "RPC: " #, fuzzy #~ msgid "invalid operand in the instruction" #~ msgstr " `%s' [c*n]" #, fuzzy #~ msgid "invalid register in the instruction" #~ msgstr " `%c' `%s'" #, fuzzy #~ msgid "invalid rotate insn" #~ msgstr " `%s'." #, fuzzy #~ msgid "cannot do z-register replacement" #~ msgstr " " #, fuzzy #~ msgid "Do not use direct addressing mode for soft registers" #~ msgstr " " #, fuzzy #~ msgid "Specify the register allocation order" #~ msgstr " " #, fuzzy #~ msgid "Use unaligned memory references" #~ msgstr " -" #, fuzzy #~ msgid "invalid %%x/X value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%q value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%o value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%p value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%s/S value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%P operand" #~ msgstr " " #, fuzzy #~ msgid "invalid %%B value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%D value" #~ msgstr " " #, fuzzy #~ msgid "invalid code" #~ msgstr " " #, fuzzy #~ msgid "invalid option `-mshort-data-%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid option `-mstack-increment=%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "Emit call graph information" #~ msgstr " " #, fuzzy #~ msgid "-mips%d not supported" #~ msgstr " ai_family " #, fuzzy #~ msgid "-mabi=%s does not support -mips%d" #~ msgstr " ai_socktype " #, fuzzy #~ msgid "invalid option `entry%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "can't rewind temp file" #~ msgstr " " #, fuzzy #~ msgid "can't write to output file" #~ msgstr " `%s'" #, fuzzy #~ msgid "can't read from temp file" #~ msgstr " " #, fuzzy #~ msgid "can't close temp file" #~ msgstr " " #, fuzzy #~ msgid "can not handle inconsistent calls to `%s'" #~ msgstr " ioctl `%s'" #, fuzzy #~ msgid "Use symbolic register names" #~ msgstr " " #, fuzzy #~ msgid "-f%s not supported: ignored" #~ msgstr " fifo " #, fuzzy #~ msgid "stack frame not a multiple of 8 bytes: %d" #~ msgstr " " #, fuzzy #~ msgid "Do not use addresses that allocate global registers" #~ msgstr " " #, fuzzy #~ msgid "Do not use register sb" #~ msgstr " " #, fuzzy #~ msgid "Use bit-field instructions" #~ msgstr " " #, fuzzy #~ msgid "-g option disabled" #~ msgstr " NIS+ " #, fuzzy #~ msgid "Return floating point results in ac0" #~ msgstr " " #, fuzzy #~ msgid "Target does not have split I&D" #~ msgstr "-nt -l\n" #, fuzzy #~ msgid "invalid %%S value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%b value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%z value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%Z value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%k value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%j value" #~ msgstr " " #, fuzzy #~ msgid "-mmultiple is not supported on little endian systems" #~ msgstr " " #, fuzzy #~ msgid "-mstring is not supported on little endian systems" #~ msgstr ": --pid=PID " #, fuzzy #~ msgid "-fdata-sections not supported on AIX" #~ msgstr " " #, fuzzy #~ msgid "unknown ABI specified: '%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "argument 3 of `%s' must be a 2-bit literal" #~ msgstr " `%s' " #, fuzzy #~ msgid "invalid %%f value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%F value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%G value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%j code" #~ msgstr " " #, fuzzy #~ msgid "invalid %%J code" #~ msgstr " " #, fuzzy #~ msgid "invalid %%K value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%T value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%u value" #~ msgstr " " #, fuzzy #~ msgid "invalid %%v value" #~ msgstr " " #, fuzzy #~ msgid "Always pass floating-point arguments in memory" #~ msgstr " : %s" #, fuzzy #~ msgid "Don't always pass floating-point arguments in memory" #~ msgstr " : %s" #, fuzzy #~ msgid "Use AltiVec instructions" #~ msgstr " " #, fuzzy #~ msgid "no description yet" #~ msgstr "( )" #, fuzzy #~ msgid "Use alternate register names" #~ msgstr " " #, fuzzy #~ msgid "bad value for -mcall-%s" #~ msgstr " ai_flags" #, fuzzy #~ msgid "bad value for -msdata=%s" #~ msgstr " ai_flags" #, fuzzy #~ msgid "-mcall-aixdesc must be big endian" #~ msgstr " " #, fuzzy #~ msgid "Cannot decompose address." #~ msgstr " " #~ msgid "64 bit mode" #~ msgstr " 64 bit" #~ msgid "31 bit mode" #~ msgstr " 31 bit" #, fuzzy #~ msgid "mvcle use" #~ msgstr " " #, fuzzy #~ msgid "__builtin_saveregs not supported by this subtarget" #~ msgstr " " #, fuzzy #~ msgid "`%s' attribute argument not a string constant" #~ msgstr " " #, fuzzy #~ msgid "Profiling is not supported on this target." #~ msgstr " " #, fuzzy #~ msgid "%s is not supported by this configuration" #~ msgstr " " #, fuzzy #~ msgid "-mcmodel= is not supported on 32 bit systems" #~ msgstr " " #, fuzzy #~ msgid "invalid %%Y operand" #~ msgstr " " #, fuzzy #~ msgid "invalid %%A operand" #~ msgstr " " #, fuzzy #~ msgid "invalid %%B operand" #~ msgstr " " #, fuzzy #~ msgid "invalid %%c operand" #~ msgstr " " #, fuzzy #~ msgid "invalid %%C operand" #~ msgstr " UTC" #, fuzzy #~ msgid "invalid %%d operand" #~ msgstr " " #, fuzzy #~ msgid "invalid %%D operand" #~ msgstr " " #, fuzzy #~ msgid "invalid %%f operand" #~ msgstr " " #, fuzzy #~ msgid "Utilize Visual Instruction Set" #~ msgstr " " #~ msgid "Use 32-bit ABI" #~ msgstr " ABI 32-bit" #~ msgid "Use 64-bit ABI" #~ msgstr " ABI 64-bit" # src/request.c:806 src/request.c:912 #, fuzzy #~ msgid "unrecognized section name \"%s\"" #~ msgstr " `%s'" # src/dfa.c:569 src/dfa.c:583 src/dfa.c:587 # src/dfa.c:577 src/dfa.c:591 src/dfa.c:595 #, fuzzy #~ msgid "malformed #pragma ghs section" #~ msgstr " " # src/shred.c:1134 #, fuzzy #~ msgid "%s=%s is too large" #~ msgstr "%s: " #, fuzzy #~ msgid "output_move_single:" #~ msgstr " " #, fuzzy #~ msgid "bad test" #~ msgstr " " #, fuzzy #~ msgid "invalid mask" #~ msgstr " " #, fuzzy #~ msgid "invalid address" #~ msgstr " " #, fuzzy #~ msgid "no register in address" #~ msgstr " " #, fuzzy #~ msgid "address offset not a constant" #~ msgstr "%s' ." #, fuzzy #~ msgid "Use the Xtensa boolean register option" #~ msgstr " " #, fuzzy #~ msgid "conversion from `%T' to `%T' is ambiguous" #~ msgstr " `%s' `%s' " # src/getopt.c:813 # src/getopt.c:813 #, fuzzy #~ msgid "call of `(%T) (%A)' is ambiguous" #~ msgstr "%s: `-W %s' \n" #, fuzzy #~ msgid "`%+#D' is inaccessible" #~ msgstr " `%s' -" #, fuzzy #~ msgid "invalid conversion from `%T' to `%T'" #~ msgstr " `%s' `%s' " #, fuzzy #~ msgid " initializing argument %P of `%D'" #~ msgstr " `%s'" #, fuzzy #~ msgid " in call to `%D'" #~ msgstr " `%s'" #, fuzzy #~ msgid " for conversion from `%T' to `%T'" #~ msgstr " `%s' `%s' " #, fuzzy #~ msgid "duplicate enum value `%D'" #~ msgstr " `%s'" #, fuzzy #~ msgid "duplicate nested type `%D'" #~ msgstr " `%s'" #, fuzzy #~ msgid "duplicate member `%D'" #~ msgstr " " #, fuzzy #~ msgid "`%D' invalid in `%T'" #~ msgstr " `%s'" #, fuzzy #~ msgid "`%D' invalid in `%#T'" #~ msgstr " `%s'" #, fuzzy #~ msgid "redefinition of `%#T'" #~ msgstr " `UNDEFINED'" #, fuzzy #~ msgid "previous definition of `%#T'" #~ msgstr " `UNDEFINED'" #~ msgid " by `%D'" #~ msgstr " `%D'" #, fuzzy #~ msgid "negative width in bit-field `%D'" #~ msgstr " " #, fuzzy #~ msgid "field `%#D' with same name as class" #~ msgstr " " #, fuzzy #~ msgid "not enough type information" #~ msgstr " " #, fuzzy #~ msgid "declaration of `%#D'" #~ msgstr " `%s'\n" #, fuzzy #~ msgid "conversion of `%E' from `%T' to `%T' is ambiguous" #~ msgstr " `%s' `%s' " #, fuzzy #~ msgid "converting from `%T' to `%T'" #~ msgstr " `%s' `%s' " #, fuzzy #~ msgid "cannot convert `%E' from type `%T' to type `%T'" #~ msgstr " %s `%s' `%s'" #, fuzzy #~ msgid "conversion from `%T' to `%T' discards qualifiers" #~ msgstr " `%s' `%s' " #, fuzzy #~ msgid "cannot convert type `%T' to type `%T'" #~ msgstr " %s `%s' `%s'" #, fuzzy #~ msgid "conversion from `%#T' to `%#T'" #~ msgstr " `%s' `%s' " #, fuzzy #~ msgid "conversion from `%T' to non-scalar type `%T' requested" #~ msgstr " `%s' `%s' " #, fuzzy #~ msgid "`%#D' previously declared here" #~ msgstr " " #, fuzzy #~ msgid "after previous specification in `%#D'" #~ msgstr "%s: `%s'.\n" #, fuzzy #~ msgid "invalid redeclaration of `%D'" #~ msgstr " `%s'" #, fuzzy #~ msgid "`%#D' hides constructor for `%#T'" #~ msgstr " `%s' `%s'" #~ msgid "implicit declaration of function `%#D'" #~ msgstr " `%#D'" #, fuzzy #~ msgid "duplicate label `%D'" #~ msgstr " " #, fuzzy #~ msgid "invalid use of `%D'" #~ msgstr " `%s'." #, fuzzy #~ msgid "`%D::%D' is not a template" #~ msgstr " `%s' " #, fuzzy #~ msgid "`%#D' is not a static member of `%#T'" #~ msgstr " `%s' `%s'" # src/request.c:263 #, fuzzy #~ msgid "duplicate initialization of %D" #~ msgstr " " #, fuzzy #~ msgid "cannot initialize `%T' from `%T'" #~ msgstr " `.' `..'" #, fuzzy #~ msgid "array size missing in `%D'" #~ msgstr " `%s'" #, fuzzy #~ msgid "uninitialized const `%D'" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid catch parameter" #~ msgstr " " #, fuzzy #~ msgid "creating %s" #~ msgstr " `%s'\n" #, fuzzy #~ msgid "invalid declarator" #~ msgstr " " #, fuzzy #~ msgid "`%D' as declarator" #~ msgstr " `%s' " #, fuzzy #~ msgid "`bool' is now a keyword" #~ msgstr " `%s' ." #, fuzzy #~ msgid "multiple declarations `%T' and `%T'" #~ msgstr " `s'" #, fuzzy #~ msgid "can't initialize friend function `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "friend declaration not in class definition" #~ msgstr " " #, fuzzy #~ msgid "cannot declare %s to references" #~ msgstr " %s" #, fuzzy #~ msgid "invalid type: `void &'" #~ msgstr " `%s'" #, fuzzy #~ msgid "cannot declare member `%T::%s' within `%T'" #~ msgstr " %s `%s' `%s'" #, fuzzy #~ msgid "template parameters cannot be friends" #~ msgstr " " #, fuzzy #~ msgid "invalid use of `::'" #~ msgstr " " #, fuzzy #~ msgid "invalid string constant `%E'" #~ msgstr " " #, fuzzy #~ msgid "duplicate base type `%T' invalid" #~ msgstr " " #, fuzzy #~ msgid "multiple definition of `%#T'" #~ msgstr " locale `%s'" #, fuzzy #~ msgid "-f%s is no longer supported" #~ msgstr " fifo " #, fuzzy #~ msgid "prototype for `%#D' does not match any in class `%T'" #~ msgstr " `%s' `%s'" #~ msgid " %#D" #~ msgstr " %#D" #, fuzzy #~ msgid "local class `%#T' shall not have static data member `%#D'" #~ msgstr " `%s' `%s'" #, fuzzy #~ msgid "invalid initializer for virtual method `%D'" #~ msgstr " `%s'" #, fuzzy #~ msgid "use of old-style cast" #~ msgstr " " # src/getopt.c:628 # src/getopt.c:628 #, fuzzy #~ msgid "use of `%D' is ambiguous" #~ msgstr "%s: `%s' \n" #, fuzzy #~ msgid "`%D' is not a function," #~ msgstr " `%s' ." #, fuzzy #~ msgid "unknown namespace `%D'" #~ msgstr " `%s'" #, fuzzy #~ msgid "`%T' is not a namespace" #~ msgstr " `%s' " #, fuzzy #~ msgid "`%D' is not a namespace" #~ msgstr " `%s' " #, fuzzy #~ msgid "`%D' not declared" #~ msgstr " `%s' " #, fuzzy #~ msgid "`%T' does not have a class or union named `%D'" #~ msgstr " `%s' " #, fuzzy #~ msgid "`%T' is not a class or union type" #~ msgstr " `%s' " #, fuzzy #~ msgid "`%s' not supported by %s" #~ msgstr " " #, fuzzy #~ msgid "%s: In instantiation of `%s':\n" #~ msgstr "%s: `%s'.\n" #, fuzzy #~ msgid "`%#T' is not a template" #~ msgstr " `%s' " #, fuzzy #~ msgid "`%T' is already a friend of `%T'" #~ msgstr " `%s' `%s'" #, fuzzy #~ msgid "argument to `%s' missing\n" #~ msgstr " " #, fuzzy #~ msgid "base class `%T' already initialized" #~ msgstr " `%s' " #, fuzzy #~ msgid "type `%D' is not a direct base of `%T'" #~ msgstr " `%s' ." #, fuzzy #~ msgid "`%T' is not an aggregate type" #~ msgstr " `%s' " #, fuzzy #~ msgid "invalid use of non-static field `%D'" #~ msgstr " : `%s'" #, fuzzy #~ msgid "invalid use of member `%D'" #~ msgstr " : `%s'" #, fuzzy #~ msgid "`%D' is not a member of type `%T'" #~ msgstr " `%s'" #, fuzzy #~ msgid "illegal pointer to bit-field `%D'" #~ msgstr " :`%s'\n" #, fuzzy #~ msgid "invalid type `void' for new" #~ msgstr " dlopen()" #, fuzzy #~ msgid "type name expected before `*'" #~ msgstr " " #, fuzzy #~ msgid "type name expected before `&'" #~ msgstr " " #, fuzzy #~ msgid "invalid #pragma %s" #~ msgstr " `%s' ." #, fuzzy #~ msgid "`%D' not defined" #~ msgstr "" #, fuzzy #~ msgid "name lookup of `%s' changed" #~ msgstr " %s %s\n" #, fuzzy #~ msgid "`%s' tag used in naming `%#T'" #~ msgstr " `%s'" # src/grep.c:785 src/grep.c:792 # src/grep.c:1060 src/grep.c:1067 src/grep.c:1076 #, fuzzy #~ msgid "invalid default template argument" #~ msgstr " " #, fuzzy #~ msgid "`%T' is not a valid expression" #~ msgstr "%s' ." # src/dfa.c:962 # src/dfa.c:970 #, fuzzy #~ msgid "sigof type specifier" #~ msgstr " " #, fuzzy #~ msgid "`%T' is not a class or namespace" #~ msgstr " `%s' " #, fuzzy #~ msgid "no type `%D' in `%T'" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid member template declaration `%D'" #~ msgstr " : `%s'" #, fuzzy #~ msgid " from definition of `%#D'" #~ msgstr " `UNDEFINED'" #~ msgid " `%D'" #~ msgstr " `%D'" #, fuzzy #~ msgid "no default argument for `%D'" #~ msgstr " `%s' ." #, fuzzy #~ msgid "template class without a name" #~ msgstr " " #, fuzzy #~ msgid "template definition of non-template `%#D'" #~ msgstr " locale `%s'" #~ msgid " but %d required" #~ msgstr " %d " #, fuzzy #~ msgid "`%T' is not a template type" #~ msgstr " `%s' " #, fuzzy #~ msgid "template parameter `%#D'" #~ msgstr " `%s'" #, fuzzy #~ msgid "`%E' is not a valid template argument" #~ msgstr "%s' ." #, fuzzy #~ msgid " expected a type, got `%E'" #~ msgstr "%s: `%c'" #, fuzzy #~ msgid " expected a type, got `%T'" #~ msgstr "%s: `%c'" #, fuzzy #~ msgid "wrong number of template arguments (%d, should be %d)" #~ msgstr " " #, fuzzy #~ msgid "template argument %d is invalid" #~ msgstr " " #, fuzzy #~ msgid "`%T' is not a template" #~ msgstr " `%s' " #, fuzzy #~ msgid "invalid parameter type `%T'" #~ msgstr " `%s'" #, fuzzy #~ msgid "creating pointer to member reference type `%T'" #~ msgstr " `%s'" #, fuzzy #~ msgid "creating array of `%T'" #~ msgstr " `%s'\n" #, fuzzy #~ msgid "incomplete type unification" #~ msgstr " " #, fuzzy #~ msgid "no matching template for `%D' found" #~ msgstr " `%s' `%s'" #, fuzzy #~ msgid "duplicate explicit instantiation of `%#D'" #~ msgstr " " #, fuzzy #~ msgid "duplicate explicit instantiation of `%#T'" #~ msgstr " " #, fuzzy #~ msgid "`%#T' is not a valid type for a template constant parameter" #~ msgstr "%s' ." #, fuzzy #~ msgid "can't create repository information file `%s'" #~ msgstr " locale `%s'" #, fuzzy #~ msgid "cannot use typeid with -fno-rtti" #~ msgstr " -a -n" #, fuzzy #~ msgid "`%T' is an inaccessible base of `%T'" #~ msgstr " `%s' `%s'" #, fuzzy #~ msgid "`%T' is an ambiguous base of `%T'" #~ msgstr " `%s' `%s'" #, fuzzy #~ msgid "invalid covariant return type for `%#D'" #~ msgstr " `%c' `%s'" #, fuzzy #~ msgid " overriding `%#D'" #~ msgstr " " #, fuzzy #~ msgid " overriding `%#F'" #~ msgstr " " #, fuzzy #~ msgid "`%#D' cannot be declared" #~ msgstr " ." #, fuzzy #~ msgid "`%E' is not of type `%T'" #~ msgstr " `%s' `%s'" #, fuzzy #~ msgid "invalid definition of qualified type `%T'" #~ msgstr " : `%s'" #, fuzzy #~ msgid "parse error in method specification" #~ msgstr " " #, fuzzy #~ msgid "invalid type `%T' for default argument to `%T'" #~ msgstr " `%s'" #~ msgid "%s before `%s'" #~ msgstr "%s `%s'" #~ msgid "%s before `%c'" #~ msgstr "%s `%c'" #~ msgid "%s before `\\%o'" #~ msgstr "%s `\\%o'" #, fuzzy #~ msgid "%s before `%s' token" #~ msgstr "%s ( `%s')" #, fuzzy #~ msgid "`%V' qualifiers cannot be applied to `%T'" #~ msgstr " `%s' `%s'" #, fuzzy #~ msgid "`%s' attribute is not supported on this platform" #~ msgstr ": --pid=PID " #, fuzzy #~ msgid "invalid use of non-lvalue array" #~ msgstr " " #, fuzzy #~ msgid "type `%T' has no destructor" #~ msgstr " `%s' ." #, fuzzy #~ msgid "invalid use of type decl `%#D' as expression" #~ msgstr " " #, fuzzy #~ msgid "invalid use of template `%#D' as expression" #~ msgstr " " #, fuzzy #~ msgid "`%T' is not a pointer-to-object type" #~ msgstr " `%s' ." #, fuzzy #~ msgid "invalid type argument" #~ msgstr " " #, fuzzy #~ msgid "too many arguments to %s `%+#D'" #~ msgstr " " #, fuzzy #~ msgid "too few arguments to %s `%+#D'" #~ msgstr " " #, fuzzy #~ msgid "division by zero in `%E %% 0'" #~ msgstr " : %s" #, fuzzy #~ msgid "division by zero in `%E %% 0.'" #~ msgstr " : %s" #, fuzzy #~ msgid "invalid use of `--' on bool variable `%D'" #~ msgstr " : `%s'" #, fuzzy #~ msgid "cannot create pointer to reference member `%D'" #~ msgstr " `stat' locale `%s'" #, fuzzy #~ msgid "invalid static_cast from type `%T' to type `%T'" #~ msgstr " `%c' `%s'" #, fuzzy #~ msgid "invalid const_cast from type `%T' to type `%T'" #~ msgstr " `%c' `%s'" #, fuzzy #~ msgid "invalid cast to function type `%T'" #~ msgstr " `%s'" #, fuzzy #~ msgid "cannot convert `%T' to `%T' in %s" #~ msgstr " %s `%s' `%s'" #, fuzzy #~ msgid "in passing argument %P of `%+D'" #~ msgstr " `%s'" #, fuzzy #~ msgid "returning reference to temporary" #~ msgstr "xdr_reference: \n" #, fuzzy #~ msgid "cannot declare variable `%D' to be of type `%T'" #~ msgstr " %s `%s' `%s'" #, fuzzy #~ msgid "cannot declare parameter `%D' to be of type `%T'" #~ msgstr " %s `%s' `%s'" #, fuzzy #~ msgid "cannot declare field `%D' to be of type `%T'" #~ msgstr " `%s' `%s'" #, fuzzy #~ msgid "invalid return type for function `%#D'" #~ msgstr " `%s'" #, fuzzy #~ msgid "cannot allocate an object of type `%T'" #~ msgstr " locale `%s'" #, fuzzy #~ msgid "invalid use of undefined type `%#T'" #~ msgstr " : `%s'" #, fuzzy #~ msgid "declaration of `%#T'" #~ msgstr " `%s'\n" #, fuzzy #~ msgid "invalid use of `%T'" #~ msgstr " `%s'." #, fuzzy #~ msgid "Emit cross referencing information" #~ msgstr " " #~ msgid "note:" #~ msgstr ":" #, fuzzy #~ msgid "warning:" #~ msgstr ": " #~ msgid "fatal:" #~ msgstr ":" #~ msgid "(continued):" #~ msgstr "():" #~ msgid "[REPORT BUG!!] %" #~ msgstr "[ָ ֶ!!] %" #~ msgid "[REPORT BUG!!]" #~ msgstr "[ָ !!]" #, fuzzy #~ msgid "In statement function" #~ msgstr " " #, fuzzy #~ msgid "argument to `%s' missing" #~ msgstr " " #, fuzzy #~ msgid "no input files; unwilling to write output files" #~ msgstr "%s: " #, fuzzy #~ msgid "Implicit declaration of `%A' at %0" #~ msgstr " `%s'" # src/main.c:663 #, fuzzy #~ msgid "Non-ISO-C-standard escape sequence `\\%A' at %0" #~ msgstr " `%s'" # src/main.c:663 #, fuzzy #~ msgid "Unknown escape sequence `\\%A' at %0" #~ msgstr " `%s'" #, fuzzy #~ msgid "Unterminated escape sequence `\\' at %0" #~ msgstr " o " #, fuzzy #~ msgid "Hex escape at %0 out of range" #~ msgstr " " #, fuzzy #~ msgid "Escape sequence at %0 out of range for character" #~ msgstr " " #, fuzzy #~ msgid "hex escape out of range" #~ msgstr " " # src/main.c:663 #, fuzzy #~ msgid "non-ISO escape sequence `\\%c'" #~ msgstr " `%s'" # src/main.c:663 #, fuzzy #~ msgid "unknown escape sequence `\\%c'" #~ msgstr " `%s'" #, fuzzy #~ msgid "ignoring pragma: %s" #~ msgstr " " #, fuzzy #~ msgid "invalid #ident" #~ msgstr " " #, fuzzy #~ msgid "undefined or invalid # directive" #~ msgstr "%%%c: ." #, fuzzy #~ msgid "invalid #line" #~ msgstr " " #, fuzzy #~ msgid "invalid #-line" #~ msgstr " " #, fuzzy #~ msgid "Null character at %0 -- line ignored" #~ msgstr " : " #, fuzzy #~ msgid "Set the maximum line length" #~ msgstr " " #, fuzzy #~ msgid "Missing first operand for binary operator at %0" #~ msgstr " ." #, fuzzy #~ msgid "Zero-length character constant at %0" #~ msgstr " " #, fuzzy #~ msgid "Invalid token at %0 in expression or subexpression at %1" #~ msgstr " " #, fuzzy #~ msgid "Character constant at %0 has no closing apostrophe at %1" #~ msgstr " " #, fuzzy #~ msgid "Integer at %0 too large" #~ msgstr " " #, fuzzy #~ msgid "Unrecognized FORMAT specifier at %0" #~ msgstr " : %s" #, fuzzy #~ msgid "Zero-size specification invalid at %0" #~ msgstr "%s: `%s'.\n" #, fuzzy #~ msgid "Unable to open INCLUDE file `%A' at %0" #~ msgstr " %s" #, fuzzy #~ msgid "Truncating characters on right side of character constant at %0" #~ msgstr " `%s'" #, fuzzy #~ msgid "Typeless constant at %0 too large" #~ msgstr " " #, fuzzy #~ msgid "Array `%A' at %0 is too large to handle" #~ msgstr " `%s' ." #, fuzzy #~ msgid "Internal compiler error -- cannot perform operation" #~ msgstr " %s, %u" # src/grep.c:1133 #, fuzzy #~ msgid "In unknown kind" #~ msgstr " " #~ msgid "In function" #~ msgstr " " #~ msgid "In subroutine" #~ msgstr " " #~ msgid "In program" #~ msgstr " " #~ msgid "In block-data unit" #~ msgstr " -" #~ msgid "In common block" #~ msgstr " " #, fuzzy #~ msgid "internal error - too many interface type" #~ msgstr " %s, %u" #, fuzzy #~ msgid "field `%s' not found" #~ msgstr " `%s' " #, fuzzy #~ msgid "ret instruction not implemented" #~ msgstr " " #, fuzzy #~ msgid "can't expand %s" #~ msgstr "%s: %s: %s\n" #, fuzzy #~ msgid "invalid PC in line number table" #~ msgstr " : `%s'" #, fuzzy #~ msgid "bad string constant" #~ msgstr " " #, fuzzy #~ msgid "can't reopen %s" #~ msgstr " `%s'" #, fuzzy #~ msgid "can't close %s" #~ msgstr " `%s'" #, fuzzy #~ msgid "cannot find file for class %s" #~ msgstr " C: %s \n" #, fuzzy #~ msgid "not a valid Java .class file" #~ msgstr " " #, fuzzy #~ msgid "error while parsing constant pool" #~ msgstr " " #, fuzzy #~ msgid "error while parsing fields" #~ msgstr " " #, fuzzy #~ msgid "error while parsing methods" #~ msgstr " " #, fuzzy #~ msgid "error while parsing final attributes" #~ msgstr " `%s'" #, fuzzy #~ msgid "missing Code attribute" #~ msgstr " " #, fuzzy #~ msgid "no input file specified" #~ msgstr " " #, fuzzy #~ msgid "can't close input file %s" #~ msgstr " `%s'" #, fuzzy #~ msgid "field initializer type mismatch" #~ msgstr " /" #, fuzzy #~ msgid "can't create directory %s" #~ msgstr "%s: %s: %s\n" #, fuzzy #~ msgid "can't create %s" #~ msgstr " `%s'" #, fuzzy #~ msgid "can't open output file `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "file not found `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "`%s' is not a valid class name" #~ msgstr "%s' ." #, fuzzy #~ msgid "--resource requires -o" #~ msgstr " " #, fuzzy #~ msgid "cannot specify both -C and -o" #~ msgstr " " #, fuzzy #~ msgid "cannot create temporary file" #~ msgstr ": " #, fuzzy #~ msgid "cannot specify `main' class when not linking" #~ msgstr " ." #, fuzzy #~ msgid "can't mangle %s" #~ msgstr " %s" #, fuzzy #~ msgid "internal error - invalid Utf8 name" #~ msgstr " %s, %u" #, fuzzy #~ msgid "Missing name" #~ msgstr " " #~ msgid "';' expected" #~ msgstr " ';'" #~ msgid "'*' expected" #~ msgstr " '*'" #, fuzzy #~ msgid "Missing class name" #~ msgstr " " #~ msgid "'{' expected" #~ msgstr " '{'" #, fuzzy #~ msgid "Missing interface name" #~ msgstr " " #, fuzzy #~ msgid "Missing term" #~ msgstr " " #, fuzzy #~ msgid "Invalid declaration" #~ msgstr " " #~ msgid "']' expected" #~ msgstr " ']'" # src/dfa.c:652 src/dfa.c:655 src/dfa.c:682 src/dfa.c:686 src/dfa.c:687 # src/dfa.c:690 src/dfa.c:703 src/dfa.c:704 # src/dfa.c:660 src/dfa.c:663 src/dfa.c:690 src/dfa.c:694 src/dfa.c:695 # src/dfa.c:698 src/dfa.c:711 src/dfa.c:712 #, fuzzy #~ msgid "Unbalanced ']'" #~ msgstr " [" #, fuzzy #~ msgid "Identifier expected" #~ msgstr " " #~ msgid "')' expected" #~ msgstr " '('" #, fuzzy #~ msgid "Missing formal parameter term" #~ msgstr " " #, fuzzy #~ msgid "Missing identifier" #~ msgstr " " #, fuzzy #~ msgid "Invalid interface type" #~ msgstr " (verifier) " #~ msgid "':' expected" #~ msgstr " ':'" #, fuzzy #~ msgid "Invalid expression statement" #~ msgstr " " #~ msgid "'(' expected" #~ msgstr " '('" #, fuzzy #~ msgid "Missing term or ')'" #~ msgstr " `%s'" #, fuzzy #~ msgid "Missing or invalid constant expression" #~ msgstr "%s: : %s" #, fuzzy #~ msgid "Invalid control expression" #~ msgstr " " #, fuzzy #~ msgid "Invalid update expression" #~ msgstr " " #, fuzzy #~ msgid "Invalid init statement" #~ msgstr " " #, fuzzy #~ msgid "'class' expected" #~ msgstr " ')'\n" #, fuzzy #~ msgid "')' or term expected" #~ msgstr " ')'\n" #~ msgid "'[' expected" #~ msgstr " '['" #, fuzzy #~ msgid "Field expected" #~ msgstr " " #, fuzzy #~ msgid "']' expected, invalid type expression" #~ msgstr " " #, fuzzy #~ msgid "Invalid type expression" #~ msgstr " " #, fuzzy #~ msgid "Invalid reference type" #~ msgstr " -" #~ msgid "" #~ "%s.\n" #~ "%s" #~ msgstr "" #~ "%s.\n" #~ "%s" #, fuzzy #~ msgid "missing static field `%s'" #~ msgstr " " #, fuzzy #~ msgid "not a static field `%s'" #~ msgstr " (stat()) `%s': %s" #, fuzzy #~ msgid "No case for %s" #~ msgstr " : %s" #, fuzzy #~ msgid "unregistered operator %s" #~ msgstr " %d\n" #, fuzzy #~ msgid "internal error - use of undefined type" #~ msgstr " %s, %u" #, fuzzy #~ msgid "junk at end of signature string" #~ msgstr " o " #, fuzzy #~ msgid "bad pc in exception_table" #~ msgstr " " #, fuzzy #~ msgid "Warn if modifiers are specified when not necessary" #~ msgstr " --string" #, fuzzy #~ msgid "cannot find protocol declaration for `%s'" #~ msgstr " `%.*s'" #, fuzzy #~ msgid "cannot find interface declaration for `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "cannot find reference tag for class `%s'" #~ msgstr " C: %s \n" #, fuzzy #~ msgid "cannot find class `%s'" #~ msgstr " ioctl `%s'" #, fuzzy #~ msgid "class `%s' already exists" #~ msgstr "( )" #, fuzzy #~ msgid "inconsistent instance variable specification" #~ msgstr " " #, fuzzy #~ msgid "multiple declarations for method `%s'" #~ msgstr " `s'" #, fuzzy #~ msgid "invalid receiver type `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "`%s' does not respond to `%s'" #~ msgstr " `%s' `%s'" # src/outer.c:102 #, fuzzy #~ msgid "no super class declared in interface for `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "method `%s' not implemented by protocol" #~ msgstr " " # src/install.c:562 #, fuzzy #~ msgid "cannot find method" #~ msgstr " " #, fuzzy #~ msgid "duplicate definition of class method `%s'" #~ msgstr " locale `%s'" #, fuzzy #~ msgid "duplicate declaration of class method `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "duplicate definition of instance method `%s'" #~ msgstr " locale `%s'" #, fuzzy #~ msgid "duplicate declaration of instance method `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "incomplete implementation of category `%s'" #~ msgstr " `%s'" # src/request.c:806 src/request.c:912 #, fuzzy #~ msgid "conflicting super class name `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "duplicate interface declaration for class `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "duplicate declaration for protocol `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "profiling not supported with -mg\n" #~ msgstr " " #, fuzzy #~ msgid "may not use both -m32 and -m64" #~ msgstr " " #, fuzzy #~ msgid "-mapcs-26 and -mapcs-32 may not be used together" #~ msgstr "" #~ " \n" #~ " ." #, fuzzy #~ msgid "-msoft-float and -mhard_float may not be used together" #~ msgstr "" #~ " \n" #~ " ." #, fuzzy #~ msgid "-mbig-endian and -mlittle-endian may not be used together" #~ msgstr "" #~ " \n" #~ " ." #, fuzzy #~ msgid "-p option not supported: use -pg instead" #~ msgstr " -C , -Z" #~ msgid "-pipe is not supported" #~ msgstr " -pipe " #, fuzzy #~ msgid "-mhard-float not supported" #~ msgstr " " #, fuzzy #~ msgid "options -mabi=mmixware and -mabi=gnu are mutually exclusive" #~ msgstr "\" %s\" -l " #, fuzzy #~ msgid "__builtin_trap not supported by this target" #~ msgstr " " #, fuzzy #~ msgid "ignoring #pragma %s" #~ msgstr " " #, fuzzy #~ msgid "invalid %H value" #~ msgstr " " #, fuzzy #~ msgid "invalid %h value" #~ msgstr " " #, fuzzy #~ msgid "invalid %Q value" #~ msgstr " " #, fuzzy #~ msgid "invalid %q value" #~ msgstr " " #, fuzzy #~ msgid "invalid %p value" #~ msgstr " " #, fuzzy #~ msgid "invalid %B value" #~ msgstr " " #, fuzzy #~ msgid "invalid %C value" #~ msgstr " " #, fuzzy #~ msgid "invalid %E value" #~ msgstr " " #, fuzzy #~ msgid "invalid %r value" #~ msgstr " " #, fuzzy #~ msgid "bad string length in %s" #~ msgstr " " #, fuzzy #~ msgid "mode mismatch in %s expression" #~ msgstr " `%s'" # src/main.c:697 src/main.c:751 #, fuzzy #~ msgid "no label named `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "this is the first ELSE label" #~ msgstr " " #, fuzzy #~ msgid "duplicate CASE value" #~ msgstr " " #, fuzzy #~ msgid "this is the first entry for that value" #~ msgstr " " #, fuzzy #~ msgid "CASE value out of range" #~ msgstr " " #, fuzzy #~ msgid "empty range" #~ msgstr " " #, fuzzy #~ msgid "internal error - unknown type in multiple assignment" #~ msgstr " - addtype ttisgmt" #, fuzzy #~ msgid "cannot convert to a boolean mode" #~ msgstr " U+%04X " #, fuzzy #~ msgid "cannot convert to a char mode" #~ msgstr " U+%04X " #, fuzzy #~ msgid "powerset tuple element out of range" #~ msgstr "%s: " #, fuzzy #~ msgid "missing variant fields (at least `%s')" #~ msgstr " `%s'" #, fuzzy #~ msgid "bad initializer for field `%s'" #~ msgstr " byte " #, fuzzy #~ msgid "invalid array tuple label" #~ msgstr " " #, fuzzy #~ msgid "array tuple index out of range" #~ msgstr "%s: " #, fuzzy #~ msgid "too many array tuple values" #~ msgstr " " #, fuzzy #~ msgid "missing array tuple element %s" #~ msgstr " `%s'" #, fuzzy #~ msgid "missing array tuple elements %s : %s" #~ msgstr " `%s'" #, fuzzy #~ msgid "`%s' must not be declared readonly" #~ msgstr " `%s' " # src/request.c:263 #, fuzzy #~ msgid "no initialization allowed for `%s'" #~ msgstr " " #, fuzzy #~ msgid "location for `%s' not read-compatible" #~ msgstr " `%s' ." #, fuzzy #~ msgid "too few tag labels" #~ msgstr " " #, fuzzy #~ msgid "too many tag labels" #~ msgstr " " #, fuzzy #~ msgid "...is duplicated here" #~ msgstr " " #, fuzzy #~ msgid "mode of `%s' is not a mode" #~ msgstr " `%s' ." #, fuzzy #~ msgid "duplicate grant for `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "previous grant for `%s'" #~ msgstr " %s" #, fuzzy #~ msgid "duplicate definition `%s'" #~ msgstr " " #, fuzzy #~ msgid "previous definition of `%s'" #~ msgstr " `UNDEFINED'" # src/main.c:785 #, fuzzy #~ msgid "ambiguous choice for seize `%s' -" #~ msgstr " `%s'" #, fuzzy #~ msgid "INTERNAL ERROR: handle_one_level is broken" #~ msgstr " : expand_token ()" #, fuzzy #~ msgid "conditional expression not allowed in %s" #~ msgstr " ( ): %s" #, fuzzy #~ msgid "internal error: unknown expression mode in %s" #~ msgstr " %s, %u" #, fuzzy #~ msgid "array is not addressable" #~ msgstr " `%s' ." #~ msgid "too few arguments in call to `%s'" #~ msgstr " `%s'" #~ msgid "too many arguments in call to `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "cannot dereference, not a pointer" #~ msgstr " " #, fuzzy #~ msgid "invalid type argument of `->'" #~ msgstr " `%s' ." #, fuzzy #~ msgid "no field named `%s'" #~ msgstr " %s" #, fuzzy #~ msgid "argument %d to ABSTIME must be of integer type" #~ msgstr " <%s> " #, fuzzy #~ msgid "parameter 2 must be a positive integer" #~ msgstr " %s " #, fuzzy #~ msgid "argument 1 to `%s' must be of floating point mode" #~ msgstr " `%s' " #, fuzzy #~ msgid "first argument to `%s' must be a mode" #~ msgstr " `%s' " #~ msgid "too many arguments to procedure `%s'" #~ msgstr " `%s'" #~ msgid "too many arguments to procedure" #~ msgstr " " #, fuzzy #~ msgid "too few arguments to procedure `%s'" #~ msgstr ": `%s'" #, fuzzy #~ msgid "too few arguments to procedure" #~ msgstr " " #, fuzzy #~ msgid "syntax error (integer used as function)" #~ msgstr " " #, fuzzy #~ msgid "syntax error - missing operator, comma, or '('?" #~ msgstr " : %s" #, fuzzy #~ msgid "internal error - bad built-in function `%s'" #~ msgstr " %s, %u" #, fuzzy #~ msgid "invalid operation on array of chars" #~ msgstr " " #, fuzzy #~ msgid "invalid left operand of %s" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid right operand of %s" #~ msgstr " `%s'" #, fuzzy #~ msgid "ADDR requires a LOCATION argument" #~ msgstr " `-k' " #, fuzzy #~ msgid "-> expression is not addressable" #~ msgstr " : %s" #, fuzzy #~ msgid "%s is not addressable" #~ msgstr " `%s' " #, fuzzy #~ msgid "can't write to %s" #~ msgstr " : %s" #, fuzzy #~ msgid "FORBID is not yet implemented" #~ msgstr " " #, fuzzy #~ msgid "text length must be greater then 0" #~ msgstr "%s: " #, fuzzy #~ msgid "argument %d of %s must be a location" #~ msgstr " <%s> " #, fuzzy #~ msgid "argument 2 of ASSOCIATE must not be an empty string" #~ msgstr "%s: `%s' " #, fuzzy #~ msgid "argument 2 to ASSOCIATE must be a string" #~ msgstr " <%s> " #, fuzzy #~ msgid "argument 3 to ASSOCIATE must be a string" #~ msgstr " <%s> " #, fuzzy #~ msgid "too many arguments in call to MODIFY" #~ msgstr " " #, fuzzy #~ msgid "argument 2 of MODIFY must not be an empty string" #~ msgstr "%s: `%s' " #, fuzzy #~ msgid "argument 2 to MODIFY must be a string" #~ msgstr " <%s> " #, fuzzy #~ msgid "argument 3 to MODIFY must be a string" #~ msgstr " <%s> " #, fuzzy #~ msgid "incompatible index mode" #~ msgstr " " #, fuzzy #~ msgid "argument %d of %s must be of mode ACCESS" #~ msgstr " <%s> " #, fuzzy #~ msgid "too few arguments in call to `readrecord'" #~ msgstr " bytes " #, fuzzy #~ msgid "incompatible record mode" #~ msgstr " (truncated)" #, fuzzy #~ msgid "too few arguments in call to `writerecord'" #~ msgstr " bytes " #, fuzzy #~ msgid "argument %d of %s must be of mode TEXT" #~ msgstr " <%s> " #, fuzzy #~ msgid "argument %d must be referable" #~ msgstr " <%s> " #, fuzzy #~ msgid "too few arguments for this format string" #~ msgstr " " #, fuzzy #~ msgid "internal error in check_format_string" #~ msgstr " %s, %u" # src/recode.c:171 #, fuzzy #~ msgid "no padding character (offset %d)" #~ msgstr " %3d" #, fuzzy #~ msgid "too many arguments for this format string" #~ msgstr " " #, fuzzy #~ msgid "missing index expression" #~ msgstr " " #, fuzzy #~ msgid "too few arguments in call to `readtext'" #~ msgstr " " #, fuzzy #~ msgid "non-constant expression" #~ msgstr " " #, fuzzy #~ msgid "invalid C'xx' " #~ msgstr " UTC" #, fuzzy #~ msgid "unrecognized compiler directive" #~ msgstr " `-%c'" #, fuzzy #~ msgid "unrecognized compiler directive `%s'" #~ msgstr " `-%c'" #, fuzzy #~ msgid "invalid control sequence" #~ msgstr " " #, fuzzy #~ msgid "unterminated string literal" #~ msgstr " o " #, fuzzy #~ msgid "invalid number format `%s'" #~ msgstr " : `%s'" #, fuzzy #~ msgid "can't find %s" #~ msgstr " %s" #, fuzzy #~ msgid "invalid `%c' character in name" #~ msgstr " " #, fuzzy #~ msgid "loop identifier undeclared" #~ msgstr " " #, fuzzy #~ msgid "BY expression is negative or zero" #~ msgstr " : %s" #, fuzzy #~ msgid "start label '%s' does not match end label '%s'" #~ msgstr " `%s' `%s'" #, fuzzy #~ msgid "expected a name here" #~ msgstr "%s: ." #, fuzzy #~ msgid "expected a name string here" #~ msgstr "%s: ." #, fuzzy #~ msgid "missing defining occurrence" #~ msgstr " " #, fuzzy #~ msgid "missing '(' in exception list" #~ msgstr " " #, fuzzy #~ msgid "syntax error in exception list" #~ msgstr " %s: %s" #, fuzzy #~ msgid "empty ON-condition" #~ msgstr " /" #, fuzzy #~ msgid "expected another rename clause" #~ msgstr "%s: ." #, fuzzy #~ msgid "syntax error while parsing signal definition statement" #~ msgstr " %s: %s" #, fuzzy #~ msgid "expression is not an action" #~ msgstr " : %s" #, fuzzy #~ msgid "syntax error in action" #~ msgstr " " #, fuzzy #~ msgid "bad tuple field name list" #~ msgstr " byte " #, fuzzy #~ msgid "invalid syntax for label in tuple" #~ msgstr " byte " #, fuzzy #~ msgid "missing field name" #~ msgstr " " #, fuzzy #~ msgid "missing field" #~ msgstr " " #, fuzzy #~ msgid "VARYING bit-strings not implemented" #~ msgstr " " #, fuzzy #~ msgid "SIGNAL is not a valid mode" #~ msgstr " " #, fuzzy #~ msgid "syntax error - missing mode" #~ msgstr " locale " #~ msgid " `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "undeclared identifier `%s'" #~ msgstr " : `%s'" #, fuzzy #~ msgid "too many arguments to process `%s'" #~ msgstr " " #, fuzzy #~ msgid "too many arguments to process" #~ msgstr " " #, fuzzy #~ msgid "too few arguments to process `%s'" #~ msgstr " " #, fuzzy #~ msgid "too few arguments to process" #~ msgstr " " #, fuzzy #~ msgid "GEN_INST parameter 2 must be an integer mode" #~ msgstr " %s " #, fuzzy #~ msgid "%s is not a declared process" #~ msgstr " `%s' " #, fuzzy #~ msgid " and no default priority was set." #~ msgstr " ." #, fuzzy #~ msgid " and no destination process specified" #~ msgstr " " #, fuzzy #~ msgid "slice length out-of-range" #~ msgstr " " #, fuzzy #~ msgid "too many index expressions" #~ msgstr " " #, fuzzy #~ msgid "cannot convert to float" #~ msgstr " U+%04X " #, fuzzy #~ msgid "cannot convert float to this mode" #~ msgstr "yp_update: \n" #, fuzzy #~ msgid "internal error in chill_root_resulting_mode" #~ msgstr " %s, %u" #, fuzzy #~ msgid "cannot process BIN (>32)" #~ msgstr " ." #, fuzzy #~ msgid "negative string length" #~ msgstr " " #, fuzzy #~ msgid "floating point ranges" #~ msgstr " : %s" #, fuzzy #~ msgid "starting word in POS must be an integer constant" #~ msgstr " %s " #, fuzzy #~ msgid "length in POS must be an integer constant" #~ msgstr " %s " #, fuzzy #~ msgid "end bit in POS must be an integer constant" #~ msgstr " %s " #, fuzzy #~ msgid "invalid parameterized type" #~ msgstr "%s: " # src/main.c:659 #, fuzzy #~ msgid "ambiguous request for method pointer `%s'" #~ msgstr " `%s'" #, fuzzy #~ msgid "invalid use of %D" #~ msgstr " " #, fuzzy #~ msgid "internal error #%d" #~ msgstr " NIS" #, fuzzy #~ msgid "can't to open %s" #~ msgstr " `%s'" nescc-1.3.4/libcpp/po/es.po000066400000000000000000000623211177770303300154640ustar00rootroot00000000000000# Mensajes en espaol para cpplib-4.3-b20071109 # Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. # Cristian Othn Martnez Vera , 2001, 2002, 2003, 2004, 2005, 2006, 2007. # msgid "" msgstr "" "Project-Id-Version: cpplib-4.3-b20071109\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2007-11-08 21:08+0000\n" "PO-Revision-Date: 2007-11-13 19:48-0600\n" "Last-Translator: Cristian Othn Martnez Vera \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: charset.c:654 #, c-format msgid "conversion from %s to %s not supported by iconv" msgstr "la conversin de %s a %s no est soportada por iconv" #: charset.c:657 msgid "iconv_open" msgstr "iconv_open" #: charset.c:665 #, c-format msgid "no iconv implementation, cannot convert from %s to %s" msgstr "no hay una implementacin de iconv, no se puede convertir de %s a %s" #: charset.c:742 #, c-format msgid "character 0x%lx is not in the basic source character set\n" msgstr "el carcter 0x%lx no est en el conjunto bsico de caracteres fuente\n" #: charset.c:759 charset.c:1352 msgid "converting to execution character set" msgstr "convirtiendo al conjunto de caracteres de ejecucin" #: charset.c:765 #, c-format msgid "character 0x%lx is not unibyte in execution character set" msgstr "el carcter 0x%lx no es unibyte en el conjunto de caracteres de ejecucin" #: charset.c:889 #, c-format msgid "Character %x might not be NFKC" msgstr "El carcter %x puede no ser NFKC" #: charset.c:949 msgid "universal character names are only valid in C++ and C99" msgstr "los nombres universales de carcter slo son vlidos en C++ y C99" #: charset.c:952 #, c-format msgid "the meaning of '\\%c' is different in traditional C" msgstr "el significado de '\\%c' es diferente en C tradicional" #: charset.c:961 msgid "In _cpp_valid_ucn but not a UCN" msgstr "En _cpp_valid_unc pero no es un UCN" #: charset.c:986 #, c-format msgid "incomplete universal character name %.*s" msgstr "nombre universal de carcter %.*s incompleto" #: charset.c:998 #, c-format msgid "%.*s is not a valid universal character" msgstr "%.*s no es un carcter universal vlido" #: charset.c:1008 lex.c:484 msgid "'$' in identifier or number" msgstr "'$' en el identificador o nmero" #: charset.c:1018 #, c-format msgid "universal character %.*s is not valid in an identifier" msgstr "el carcter universal %.*s no es vlido en un identificador" #: charset.c:1022 #, c-format msgid "universal character %.*s is not valid at the start of an identifier" msgstr "el carcter universal %.*s no es vlido al inicio de un identificador" #: charset.c:1056 charset.c:1571 msgid "converting UCN to source character set" msgstr "convirtiendo un NUC al conjunto de caracteres fuente" #: charset.c:1060 msgid "converting UCN to execution character set" msgstr "convirtiendo un NUC al conjunto de caracteres de ejecucin" #: charset.c:1132 msgid "the meaning of '\\x' is different in traditional C" msgstr "el significado de '\\x' es diferente en C tradicional" #: charset.c:1149 msgid "\\x used with no following hex digits" msgstr "se us \\x sin dgitos hexadecimales a continuacin" #: charset.c:1156 msgid "hex escape sequence out of range" msgstr "secuencia de escape hexadecimal fuera de rango" #: charset.c:1195 msgid "octal escape sequence out of range" msgstr "secuencia de escape octal fuera de rango" #: charset.c:1263 msgid "the meaning of '\\a' is different in traditional C" msgstr "el significado de '\\a' es diferente en C tradicional" #: charset.c:1270 #, c-format msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "secuencia de escape que no es estndard ISO, '\\%c'" #: charset.c:1278 #, c-format msgid "unknown escape sequence '\\%c'" msgstr "secuencia de escape desconocida, '\\%c'" #: charset.c:1286 #, c-format msgid "unknown escape sequence: '\\%s'" msgstr "secuencia de escape desconocida: '\\%s'" #: charset.c:1293 msgid "converting escape sequence to execution character set" msgstr "convirtiendo una secuencia de escape al conjunto de caracteres de ejecucin" #: charset.c:1415 charset.c:1478 msgid "character constant too long for its type" msgstr "constante de carcter demasiado grande para su tipo" #: charset.c:1418 msgid "multi-character character constant" msgstr "constante de carcter con mltiples caracteres" #: charset.c:1510 msgid "empty character constant" msgstr "constante de carcter vaca" #: charset.c:1612 #, c-format msgid "failure to convert %s to %s" msgstr "no se puede convertir %s a %s" #: directives.c:215 directives.c:241 #, c-format msgid "extra tokens at end of #%s directive" msgstr "elementos extra al final de la directiva #%s" #: directives.c:344 #, c-format msgid "#%s is a GCC extension" msgstr "#%s es una extensin de GCC" #: directives.c:356 msgid "suggest not using #elif in traditional C" msgstr "se sugiere no usar #elif en C tradicional" #: directives.c:359 #, c-format msgid "traditional C ignores #%s with the # indented" msgstr "C tradicional ignora #%s con el # indentado" #: directives.c:363 #, c-format msgid "suggest hiding #%s from traditional C with an indented #" msgstr "se sugiere ocultar #%s de C tradicional con un # indentado" #: directives.c:389 msgid "embedding a directive within macro arguments is not portable" msgstr "imbuir una directiva dentro de los argumentos de una macro no es transportable" #: directives.c:409 msgid "style of line directive is a GCC extension" msgstr "la directiva de estilo de lnea es una extensin de GCC" #: directives.c:464 #, c-format msgid "invalid preprocessing directive #%s" msgstr "directiva de preprocesamiento #%s invlida" #: directives.c:532 msgid "\"defined\" cannot be used as a macro name" msgstr "\"defined\" no se puede usar como un nombre de macro" #: directives.c:538 #, c-format msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "no se puede usar \"%s\" como un nombre de macro porque es un operador en C++" #: directives.c:541 #, c-format msgid "no macro name given in #%s directive" msgstr "no se dio un nombre de macro en la directiva #%s" #: directives.c:544 msgid "macro names must be identifiers" msgstr "los nombres de macro deben ser identificadores" #: directives.c:585 #, c-format msgid "undefining \"%s\"" msgstr "borrando la definicin de \"%s\"" #: directives.c:640 msgid "missing terminating > character" msgstr "falta el carcter de terminacin >" #: directives.c:695 #, c-format msgid "#%s expects \"FILENAME\" or " msgstr "#%s espera \"NOMBRE_ARCHIVO\" " #: directives.c:739 #, c-format msgid "empty filename in #%s" msgstr "nombre de fichero vaco en #%s" #: directives.c:749 msgid "#include nested too deeply" msgstr "#include anidado con demasiada profundidad" #: directives.c:790 msgid "#include_next in primary source file" msgstr "#include_next en fichero primario de cdigo fuente" #: directives.c:816 #, c-format msgid "invalid flag \"%s\" in line directive" msgstr "indicador \"%s\" invlido en la lnea de la directiva" #: directives.c:868 #, c-format msgid "\"%s\" after #line is not a positive integer" msgstr "\"%s\" despus de #line no es un entero positivo" #: directives.c:874 msgid "line number out of range" msgstr "nmero de lnea fuera de rango" #: directives.c:887 directives.c:964 #, c-format msgid "\"%s\" is not a valid filename" msgstr "\"%s\" no es un nombre de fichero vlido" #: directives.c:924 #, c-format msgid "\"%s\" after # is not a positive integer" msgstr "\"%s\" despus de # no es un entero positivo" #: directives.c:1026 #, c-format msgid "invalid #%s directive" msgstr "directiva #%s invlida" #: directives.c:1089 #, c-format msgid "registering pragmas in namespace \"%s\" with mismatched name expansion" msgstr "registrando pragmas en el espaco de nombres \"%s\" con una expansin de nombre que no coincide" #: directives.c:1098 #, c-format msgid "registering pragma \"%s\" with name expansion and no namespace" msgstr "registrando el pragma \"%s\" con expansin de nombre y sin un espacio de nombres" #: directives.c:1116 #, c-format msgid "registering \"%s\" as both a pragma and a pragma namespace" msgstr "registrando \"%s\" como un pragma y como un espacio de nombres de pragma" #: directives.c:1119 #, c-format msgid "#pragma %s %s is already registered" msgstr "#pragma %s %s ya est registrado" #: directives.c:1122 #, c-format msgid "#pragma %s is already registered" msgstr "#pragma %s ya est registrado" #: directives.c:1152 msgid "registering pragma with NULL handler" msgstr "registrando un pragma con manejador NULL" #: directives.c:1362 msgid "#pragma once in main file" msgstr "#pragma una vez en el fichero principal" #: directives.c:1385 msgid "invalid #pragma GCC poison directive" msgstr "directiva #pragma de GCC envenenada invlida" #: directives.c:1394 #, c-format msgid "poisoning existing macro \"%s\"" msgstr "envenenando la macro existente \"%s\"" #: directives.c:1413 msgid "#pragma system_header ignored outside include file" msgstr "#pragma system_header ignorado fuera del fichero a incluir" #: directives.c:1437 #, c-format msgid "cannot find source file %s" msgstr "no se puede encontrar el fichero fuente %s" #: directives.c:1441 #, c-format msgid "current file is older than %s" msgstr "el fichero actual es ms antiguo que %s" #: directives.c:1620 msgid "_Pragma takes a parenthesized string literal" msgstr "_Pragma lleva una cadena literal entre parntesis" #: directives.c:1693 msgid "#else without #if" msgstr "#else sin #if" #: directives.c:1698 msgid "#else after #else" msgstr "#else despus de #else" #: directives.c:1700 directives.c:1733 msgid "the conditional began here" msgstr "el condicional empez aqu" #: directives.c:1726 msgid "#elif without #if" msgstr "#elif sin #if" #: directives.c:1731 msgid "#elif after #else" msgstr "#elif despus de #else" #: directives.c:1761 msgid "#endif without #if" msgstr "#endif sin #if" #: directives.c:1838 msgid "missing '(' after predicate" msgstr "falta '(' antes del predicado" #: directives.c:1853 msgid "missing ')' to complete answer" msgstr "falta ')' para completar la respuesta" #: directives.c:1873 msgid "predicate's answer is empty" msgstr "el predicado de la respuesta est vaco" #: directives.c:1900 msgid "assertion without predicate" msgstr "afirmacin sin predicado" #: directives.c:1902 msgid "predicate must be an identifier" msgstr "el predicado debe ser un identificador" #: directives.c:1988 #, c-format msgid "\"%s\" re-asserted" msgstr "\"%s\" reafirmado" #: directives.c:2271 #, c-format msgid "unterminated #%s" msgstr "#%s sin terminar" #: directives-only.c:221 lex.c:1016 traditional.c:162 msgid "unterminated comment" msgstr "comentario sin terminar" #: errors.c:118 msgid "warning: " msgstr "aviso: " #: errors.c:120 msgid "internal error: " msgstr "error interno: " #: errors.c:122 msgid "error: " msgstr "error: " #: errors.c:186 msgid "stdout" msgstr "salida estndard" #: errors.c:188 #, c-format msgid "%s: %s" msgstr "%s: %s" #: expr.c:261 msgid "too many decimal points in number" msgstr "demasiados puntos decimales en el nmero" #: expr.c:290 expr.c:365 msgid "fixed-point constants are a GCC extension" msgstr "las constantes de coma fija son una extensin GCC" #: expr.c:303 #, c-format msgid "invalid digit \"%c\" in binary constant" msgstr "dgito \"%c\" invlido en la constante binaria" #: expr.c:305 #, c-format msgid "invalid digit \"%c\" in octal constant" msgstr "dgito \"%c\" invlido en la constante octal" #: expr.c:313 msgid "invalid prefix \"0b\" for floating constant" msgstr "prefijo \"0b\" invlido en la constante de coma flotante" #: expr.c:319 msgid "use of C99 hexadecimal floating constant" msgstr "uso de una constante de coma flotante hexadecimal C99" #: expr.c:328 msgid "exponent has no digits" msgstr "el exponente no tiene dgitos" #: expr.c:335 msgid "hexadecimal floating constants require an exponent" msgstr "las constantes de coma flotante hexadecimal requieren un exponente" #: expr.c:341 #, c-format msgid "invalid suffix \"%.*s\" on floating constant" msgstr "sufijo \"%.*s\" invlido en la constante de coma flotante" #: expr.c:351 expr.c:393 #, c-format msgid "traditional C rejects the \"%.*s\" suffix" msgstr "C tradicional rechaza el sufijo \"%.*s\"" #: expr.c:358 #, c-format msgid "invalid suffix \"%.*s\" with hexadecimal floating constant" msgstr "sufijo \"%.*s\" invlido en la constante de coma flotante hexadecimal" #: expr.c:369 msgid "decimal float constants are a GCC extension" msgstr "las constantes de coma flotante decimal son una extensin GCC" #: expr.c:379 #, c-format msgid "invalid suffix \"%.*s\" on integer constant" msgstr "sufijo \"%.*s\" invlido en la constante entera" #: expr.c:401 msgid "use of C99 long long integer constant" msgstr "uso de una constante entera long long C99" #: expr.c:409 msgid "imaginary constants are a GCC extension" msgstr "las constantes imaginarias son una extensin GCC" #: expr.c:412 msgid "binary constants are a GCC extension" msgstr "las constantes binarias son una extensin GCC" #: expr.c:505 msgid "integer constant is too large for its type" msgstr "la constante entera es demasiado grande para su tipo" #: expr.c:517 msgid "integer constant is so large that it is unsigned" msgstr "la constante entera es tan grande que es unsigned" #: expr.c:612 msgid "missing ')' after \"defined\"" msgstr "falta `)' despus de \"defined\"" #: expr.c:619 msgid "operator \"defined\" requires an identifier" msgstr "el operador \"defined\" requiere un identificador" #: expr.c:627 #, c-format msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "(\"%s\" es un elemento alternativo para \"%s\" en C++)" #: expr.c:637 msgid "this use of \"defined\" may not be portable" msgstr "este uso de \"defined\" puede no ser transportable" #: expr.c:676 msgid "floating constant in preprocessor expression" msgstr "constante de coma flotante en una expresin del preprocesador" #: expr.c:682 msgid "imaginary number in preprocessor expression" msgstr "nmero imaginario en una expresin del preprocesador" #: expr.c:727 #, c-format msgid "\"%s\" is not defined" msgstr "\"%s\" no est definido" #: expr.c:855 expr.c:884 #, c-format msgid "missing binary operator before token \"%s\"" msgstr "falta un operador binario antes del elemento \"%s\"" #: expr.c:875 #, c-format msgid "token \"%s\" is not valid in preprocessor expressions" msgstr "el elemento \"%s\" no es vlido en las expresiones del preprocesador" #: expr.c:892 msgid "missing expression between '(' and ')'" msgstr "falta una expresin entre '(' y ')'" #: expr.c:895 msgid "#if with no expression" msgstr "#if sin expresin" #: expr.c:898 #, c-format msgid "operator '%s' has no right operand" msgstr "el operador '%s' no tiene operando derecho" #: expr.c:903 #, c-format msgid "operator '%s' has no left operand" msgstr "el operador `%s' no tiene operando izquierdo" #: expr.c:929 msgid " ':' without preceding '?'" msgstr " ':' sin una '?' precedente" #: expr.c:956 msgid "unbalanced stack in #if" msgstr "pila desbalanceada en #if" #: expr.c:975 #, c-format msgid "impossible operator '%u'" msgstr "operador '%u' imposible" #: expr.c:1065 msgid "missing ')' in expression" msgstr "falta un ')' en la expresin" #: expr.c:1086 msgid "'?' without following ':'" msgstr "'?' sin ':' a continuacin" #: expr.c:1096 msgid "integer overflow in preprocessor expression" msgstr "desbordamiento entero en expresin del preprocesador" #: expr.c:1101 msgid "missing '(' in expression" msgstr "falta un '(' en la expresin" #: expr.c:1133 #, c-format msgid "the left operand of \"%s\" changes sign when promoted" msgstr "el operando izquierdo de \"%s\" cambia el signo cuando es promovido" #: expr.c:1138 #, c-format msgid "the right operand of \"%s\" changes sign when promoted" msgstr "el operando derecho de \"%s\" cambia el signo cuando es promovido" #: expr.c:1397 msgid "traditional C rejects the unary plus operator" msgstr "C tradicional rechaza el operador unario mas" #: expr.c:1480 msgid "comma operator in operand of #if" msgstr "operador coma en operando de #if" #: expr.c:1612 msgid "division by zero in #if" msgstr "divisin por cero en #if" #: files.c:442 msgid "NULL directory in find_file" msgstr "directorio NULL en find_file" #: files.c:480 msgid "one or more PCH files were found, but they were invalid" msgstr "se encontr uno o ms ficheros PCH, pero eran invlidos" #: files.c:483 msgid "use -Winvalid-pch for more information" msgstr "use -Winvalid-pch para ms informacin" #: files.c:570 #, c-format msgid "%s is a block device" msgstr "%s es un dispositivo de bloques" #: files.c:587 #, c-format msgid "%s is too large" msgstr "%s es demasiado grande" #: files.c:622 #, c-format msgid "%s is shorter than expected" msgstr "%s es ms corto de lo esperado" #: files.c:852 #, c-format msgid "no include path in which to search for %s" msgstr "no hay ruta de inclusin en la cual se pueda buscar %s" #: files.c:1157 msgid "Multiple include guards may be useful for:\n" msgstr "Guardias mltiples de include pueden ser tiles para:\n" #: init.c:426 msgid "cppchar_t must be an unsigned type" msgstr "cppchar_t debe ser de un tipo unsigned" #: init.c:430 #, c-format msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits" msgstr "la aritmtica del preprocesador tiene una precisin mxima de %lu bits; el objetivo requiere de %lu bits" #: init.c:437 msgid "CPP arithmetic must be at least as precise as a target int" msgstr "la aritmtica de CPP debe se al menos tan precisa como un int del objetivo" #: init.c:440 msgid "target char is less than 8 bits wide" msgstr "el char del objetivo tiene menos de 8 bits de ancho" #: init.c:444 msgid "target wchar_t is narrower than target char" msgstr "el wchar_t del objetivo es ms estrecho que el char del objetivo" #: init.c:448 msgid "target int is narrower than target char" msgstr "el int del objetivo es ms estrecho que el char del objetivo" #: init.c:453 msgid "CPP half-integer narrower than CPP character" msgstr "el medio-entero de CPP es ms estrecho que el carcter de CPP" #: init.c:457 #, c-format msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits" msgstr "CPP no puede manejar constantes de carcter anchas ms all de %lu bits en este objetivo, pero el objetivo requiere %lu bits" #: lex.c:283 msgid "backslash and newline separated by space" msgstr "caracteres de barra invertida y fin de lnea separados por espacio" #: lex.c:288 msgid "backslash-newline at end of file" msgstr "no hay caractr de barra invertida o fin de lnea al final del fichero" #: lex.c:303 #, c-format msgid "trigraph ??%c converted to %c" msgstr "trigrafo ??%c convertido a %c" #: lex.c:310 #, c-format msgid "trigraph ??%c ignored, use -trigraphs to enable" msgstr "se ignora el trigrafo ??%c, use -trigraphs para reconocerlo" #: lex.c:356 msgid "\"/*\" within comment" msgstr "\"/*\" dentro de un comentario" #: lex.c:414 #, c-format msgid "%s in preprocessing directive" msgstr "%s en la directiva de preprocesamiento" #: lex.c:423 msgid "null character(s) ignored" msgstr "caracter(es) nulo(s) ignorados" #: lex.c:460 #, c-format msgid "`%.*s' is not in NFKC" msgstr "`%.*s' no est en NFKC" #: lex.c:463 #, c-format msgid "`%.*s' is not in NFC" msgstr "`%.*s' no est en NFC" #: lex.c:551 #, c-format msgid "attempt to use poisoned \"%s\"" msgstr "intento de usar \"%s\" envenenado" #: lex.c:559 msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "__VA_ARGS__ solamente puede aparecer en la expansin de una macro variadic C99" #: lex.c:659 msgid "null character(s) preserved in literal" msgstr "caracter(es) nulo(s) preservados en la literal" #: lex.c:662 #, c-format msgid "missing terminating %c character" msgstr "falta el carcter de terminacin %c" #: lex.c:1027 msgid "C++ style comments are not allowed in ISO C90" msgstr "los comentarios de estilo C++ no se permiten en ISO C90" #: lex.c:1029 msgid "(this will be reported only once per input file)" msgstr "(esto se reportar solamente una vez por cada fichero de entrada)" #: lex.c:1034 msgid "multi-line comment" msgstr "comentario en mltiples lneas" #: lex.c:1347 #, c-format msgid "unspellable token %s" msgstr "elemento %s impronunciable" #: line-map.c:320 #, c-format msgid "In file included from %s:%u" msgstr "En el fichero includo de %s:%u" #: line-map.c:338 #, c-format msgid "" ",\n" " from %s:%u" msgstr "" ",\n" " de %s:%u" #: macro.c:84 #, c-format msgid "macro \"%s\" is not used" msgstr "la macro \"%s\" no se utiliza" #: macro.c:123 macro.c:319 #, c-format msgid "invalid built-in macro \"%s\"" msgstr "macro interna \"%s\" invlida" #: macro.c:157 msgid "could not determine file timestamp" msgstr "no se puede determinar la marca de fecha del fichero" #: macro.c:254 msgid "could not determine date and time" msgstr "no se puede determinar la fecha y la hora" #: macro.c:270 msgid "__COUNTER__ expanded inside directive with -fdirectives-only" msgstr "se expande __COUNTER__ dentro de una directiva con -fdirectives-only" #: macro.c:423 msgid "invalid string literal, ignoring final '\\'" msgstr "cadena literal invlida, se ignora el '\\' final" #: macro.c:483 #, c-format msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "pegar \"%s\" y \"%s\" no da un elemento vlido de preprocesamiento" #: macro.c:558 msgid "ISO C99 requires rest arguments to be used" msgstr "ISO C99 requiere que el resto de los argumentos sea usado" #: macro.c:563 #, c-format msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "la macro \"%s\" requiere %u argumentos, pero solo se proporcionan %u" #: macro.c:568 #, c-format msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "la macro \"%s\" recibi %u argumentos, pero solamente tom %u" #: macro.c:679 traditional.c:680 #, c-format msgid "unterminated argument list invoking macro \"%s\"" msgstr "lista de argumentos sin terminar al invocar la macro \"%s\"" #: macro.c:782 #, c-format msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "la funcin de macro \"%s\" se debe usar con argumentos en C tradicional" #: macro.c:1325 #, c-format msgid "duplicate macro parameter \"%s\"" msgstr "parmetro de macro \"%s\" duplicado" #: macro.c:1371 #, c-format msgid "\"%s\" may not appear in macro parameter list" msgstr "\"%s\" podra faltar en la lista de parmetro de macro" #: macro.c:1379 msgid "macro parameters must be comma-separated" msgstr "los parmetros de macro deben ser separados por comas" #: macro.c:1396 msgid "parameter name missing" msgstr "falta el nombre del parmetro" #: macro.c:1413 msgid "anonymous variadic macros were introduced in C99" msgstr "los macros variadic annimos se introdujeron en C99" #: macro.c:1418 msgid "ISO C does not permit named variadic macros" msgstr "ISO C no permite macros variadic nombrados" #: macro.c:1427 msgid "missing ')' in macro parameter list" msgstr "falta parntesis derecho en la lista de parmetros de macro" #: macro.c:1476 msgid "'##' cannot appear at either end of a macro expansion" msgstr "'##' no puede aparece en o al final de una expansin de macro" #: macro.c:1510 msgid "ISO C99 requires whitespace after the macro name" msgstr "ISO C99 requiere espacios en blanco despus del nombre de macro" #: macro.c:1534 msgid "missing whitespace after the macro name" msgstr "faltan espacios en blanco despus del nombre de macro" #: macro.c:1564 msgid "'#' is not followed by a macro parameter" msgstr "'#' no es seguido por un parmetro de macro" #: macro.c:1683 #, c-format msgid "\"%s\" redefined" msgstr "se redefini \"%s\"" #: macro.c:1688 msgid "this is the location of the previous definition" msgstr "esta es la ubicacin de la definicin previa" #: macro.c:1738 #, c-format msgid "macro argument \"%s\" would be stringified in traditional C" msgstr "el argumento de macro \"%s\" debera ser convertido a cadena en C tradicional" #: macro.c:1761 #, c-format msgid "invalid hash type %d in cpp_macro_definition" msgstr "tipo de hash %d invlido en cpp_macro_definition" #: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377 msgid "while writing precompiled header" msgstr "al escribir el encabezado precompilado" #: pch.c:485 #, c-format msgid "%s: not used because `%.*s' not defined" msgstr "%s: no se usa porque `%.*s' no est definido" #: pch.c:497 #, c-format msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'" msgstr "%s: no se usa porque `%.*s' est definido como `%s' no como `%.*s'" #: pch.c:538 #, c-format msgid "%s: not used because `%s' is defined" msgstr "%s: no se usa porque `%s' est definido" #: pch.c:558 #, c-format msgid "%s: not used because `__COUNTER__' is invalid" msgstr "%s: no se usa porque `__COUNTER__' es invlido" #: pch.c:567 pch.c:737 msgid "while reading precompiled header" msgstr "al leer el encabezado precompilado" #: traditional.c:750 #, c-format msgid "detected recursion whilst expanding macro \"%s\"" msgstr "se detect recursin al expandir la macro \"%s\"" #: traditional.c:917 msgid "syntax error in macro parameter list" msgstr "error de sintaxis en la lista de parmetros de macro" #~ msgid "no newline at end of file" #~ msgstr "no hay caractr de fin de lnea al final del fichero" #~ msgid "unknown escape sequence: '\\%03o'" #~ msgstr "secuencia de escape desconocida: '\\%03o'" nescc-1.3.4/libcpp/po/fr.po000066400000000000000000030010141177770303300154570ustar00rootroot00000000000000# Messages franais pour GNU concernant gcc. # Copyright 2001 Free Software Foundation, Inc. # Michel Robitaille , traducteur depuis/since 1996. # # Vocabulaire utilis # lvalue = membre gauche # deprecated = obsolte # out of range = hors des limites # range = gamme # scope = port, champ # shadowing = masquer # embedded PIC = PIC enchss # CPU = processeur # structure with flexible member # = structure ayant un membre flexible # flag = fanion # forward declaration # = dclaration anticipe # token = lment lexical (dans le contexte du parsing) # to subscript = indicer # top-level = hors de toute fonction # member function = fonction membre # # Pas traduit: # thread # # J'ai des doutes pour : # inline = enligne (pas systmatiquement) # oui dans le contexte du langage C par exemple MR # non autrement ...de manire gnrale MR # section attribute attribut de section OK MR # wide char caractre long ...non mieux caractre large MR # plus conforme l'esprit. # # ------ # literals littral, ou mot compos ? # msgid "ISO C89 forbids compound literals" # msgstr "le C89 ISO interdit les mots composs" # # symbol table table des symboles ou table de symbole # command map carte des commandes # Combiner combinateur # msgid "" # ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n" # ";; %d successes.\n" # "\n" # msgstr "" # ";; Statistiques du combinateur : %d tentatives, %d substitutions (%d requrant un nouvel espace),\n" # ";; %d succs.\n" # "\n" # # promote promouvoir # msgid "the left operand of \"%s\" changes sign when promoted" # msgstr "L'oprande gauche de %s change de signe lors de sa promotion" # # include guards ??? # msgid "Multiple include guards may be useful for:\n" # msgstr "De multiples balises pour les inclusions peuvent tre utiles pour :\n" # # # universal-character-name ??? # msgid "incomplete universal-character-name" # msgid "non-hex digit '%c' in universal-character-name" # msgid "universal-character-name on EBCDIC target" # # poisoning empoisonnement # msgid "poisoning existing macro \"%s\"" # msgstr "empoisonnement de la macro existente %s " # MR 9-jan 2004: poisoning etc... transform par corruption corrompu etc.. # MR 24-mai 2004: poison etc...suite au msg concernant le #pragma once et #pragma poison # # Autres rgles: # - j'ai ajout un adjectif par rapport l'anglais si le message est # une phrase avec verbe conjug. # - ISO est considr comme un adjectif dans C ISO # # Erreurs corriges: # librairies, assumer # # A faire: # - s/en ligne/en-ligne/ modifi 9-janv-2004 MR # - s/en-ligne/enligne/ modifi 18-fvrier-2004 MR pcq expression ou terme enlignage vs inlining # - hors gamme a t chang pour hors limite ...MR 09-jan-2004 # - literal # - chane de format => formatage # - scope # - support est un faux ami # # A rapporter upstream: # <<<<<<<< # In c-opts.c, begining line 1732, a lot of options are of the kind: # " -W[no-]trigraphs Warn if trigraphs are encountered\n" # I guess it would be better to change them all to something like # " -W[no-]trigraphs Warn [or not] if trigraphs are encountered\n" # # # #: c-opts.c:1759 # " -MP\t\t\t Generate phony targets for all headers\n" # you may want to change the \t to spaces, as it is done for the other lines. # # #: c-typeck.c:3166 c-typeck.c:4632 c-typeck.c:4648 c-typeck.c:4664 # #: final.c:3146 final.c:3148 gcc.c:4397 rtl-error.c:122 toplev.c:1694 # #: config/cris/cris.c:529 cp/typeck.c:4341 java/expr.c:364 java/verify.c:1467 # #: java/verify.c:1468 java/verify.c:1483 # #, c-format # msgid "%s" # msgstr "%s" # # Are you sure you want to translate the messages in cfgrtl.c, or are they # debugging informations ? # # You may want to use ngettext instead of putting (s) in text. # msgid "null character(s) preserved in literal" # # >>>>>>>>> # msgid "" msgstr "" "Project-Id-Version: GNU cpplib 4.0.0\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2007-11-08 21:08+0000\n" "PO-Revision-Date: 2005-06-12 08:00-0500\n" "Last-Translator: Michel Robitaille \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: charset.c:654 #, c-format msgid "conversion from %s to %s not supported by iconv" msgstr "conversion de %s vers %s n'est pas support par iconv" #: charset.c:657 msgid "iconv_open" msgstr "iconv_open" #: charset.c:665 #, c-format msgid "no iconv implementation, cannot convert from %s to %s" msgstr "pas d'implantation iconv, ne peut convertir de %s vers %s" #: charset.c:742 #, c-format msgid "character 0x%lx is not in the basic source character set\n" msgstr "caractre 0x%lx n'est pas dans le jeu de caractres de base\n" #: charset.c:759 charset.c:1352 msgid "converting to execution character set" msgstr "conversion vers un jeu d'excution de caractres" #: charset.c:765 #, c-format msgid "character 0x%lx is not unibyte in execution character set" msgstr "caractre 0x%lx n'est pas unibyte dans le jeu de caractres d'excution" #: charset.c:889 #, c-format msgid "Character %x might not be NFKC" msgstr "" #: charset.c:949 msgid "universal character names are only valid in C++ and C99" msgstr "noms de caractre universel sont seulement valides en C++ et C89" #: charset.c:952 #, c-format msgid "the meaning of '\\%c' is different in traditional C" msgstr "la signification de \\%c est diffrente en C traditionel" #: charset.c:961 msgid "In _cpp_valid_ucn but not a UCN" msgstr "" # FIXME #: charset.c:986 #, c-format msgid "incomplete universal character name %.*s" msgstr "nom de caractre universel incomplet %.*s" #: charset.c:998 #, c-format msgid "%.*s is not a valid universal character" msgstr "%.*s n'est pas un caractre universel valide" #: charset.c:1008 lex.c:484 msgid "'$' in identifier or number" msgstr " $ dans un identificateur ou un nombre" #: charset.c:1018 #, c-format msgid "universal character %.*s is not valid in an identifier" msgstr "caractre universel %.*s n'est pas valide dans un identificcateur" #: charset.c:1022 #, c-format msgid "universal character %.*s is not valid at the start of an identifier" msgstr "caractre universel %.*s n'est pas valide au dbut d'un identificcateur" #: charset.c:1056 charset.c:1571 msgid "converting UCN to source character set" msgstr "conversion UCN vers le jeu source de caractres" #: charset.c:1060 msgid "converting UCN to execution character set" msgstr "conversion UCN vers le jeu d'excution de caractres" #: charset.c:1132 msgid "the meaning of '\\x' is different in traditional C" msgstr "la signification de \\x est diffrente en C traditionel" #: charset.c:1149 msgid "\\x used with no following hex digits" msgstr "\\x utilis sans tre suivi de chiffres en hexdcimal" #: charset.c:1156 msgid "hex escape sequence out of range" msgstr "squence d'chappement hexadcimale hors limite" #: charset.c:1195 msgid "octal escape sequence out of range" msgstr "squence d'chappement octale hors limite" #: charset.c:1263 msgid "the meaning of '\\a' is different in traditional C" msgstr "la signification de \\a est diffrente en C traditionel" #: charset.c:1270 #, c-format msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "squence d'chappement \\%c non conforme au standard ISO" #: charset.c:1278 #, c-format msgid "unknown escape sequence '\\%c'" msgstr "squence d'chappement \\%c inconnue" #: charset.c:1286 #, fuzzy, c-format msgid "unknown escape sequence: '\\%s'" msgstr "squence d'chappement \\%c inconnue" #: charset.c:1293 msgid "converting escape sequence to execution character set" msgstr "conversion d'une squence d'chappement vers un jeu d'excution de caractres" #: charset.c:1415 charset.c:1478 msgid "character constant too long for its type" msgstr "constante caractre trop longue pour son type" #: charset.c:1418 msgid "multi-character character constant" msgstr "constante caractre multi-caractres" #: charset.c:1510 msgid "empty character constant" msgstr "constante caractre vide" #: charset.c:1612 #, c-format msgid "failure to convert %s to %s" msgstr "chec de conversion de %s vers %s" #: directives.c:215 directives.c:241 #, c-format msgid "extra tokens at end of #%s directive" msgstr "lments lexicaux superflus la fin de la directive #%s" #: directives.c:344 #, c-format msgid "#%s is a GCC extension" msgstr "#%s est une extension GCC" #: directives.c:356 msgid "suggest not using #elif in traditional C" msgstr "il est suggr de ne pas utiliser #elif en C traditionnel" #: directives.c:359 #, c-format msgid "traditional C ignores #%s with the # indented" msgstr "le C traditionel ignore la directive #%s si le caractre # est indent" #: directives.c:363 #, c-format msgid "suggest hiding #%s from traditional C with an indented #" msgstr "il est suggr de cacher #%s au C traditionel en indentant le # " #: directives.c:389 msgid "embedding a directive within macro arguments is not portable" msgstr "placer une directive dans les arguments d'une macro n'est pas portable" #: directives.c:409 msgid "style of line directive is a GCC extension" msgstr "la directive de style de ligne est extension GCC" #: directives.c:464 #, c-format msgid "invalid preprocessing directive #%s" msgstr "directive de pr-traitement #%s invalide" #: directives.c:532 msgid "\"defined\" cannot be used as a macro name" msgstr " defined ne peut tre utilis comme nom de macro" #: directives.c:538 #, c-format msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr " %s ne peut tre utilis comme nom de macro car c'est un oprateur en C++" #: directives.c:541 #, c-format msgid "no macro name given in #%s directive" msgstr "aucun nom de macro donn dans la directive #%s" #: directives.c:544 msgid "macro names must be identifiers" msgstr "les noms de macro doivent tre des identificateurs" #: directives.c:585 #, c-format msgid "undefining \"%s\"" msgstr "indfinition de %s " #: directives.c:640 msgid "missing terminating > character" msgstr "caractre > de terminaison manquant" #: directives.c:695 #, c-format msgid "#%s expects \"FILENAME\" or " msgstr "#%s attend \"NOM_DE_FICHIER\" ou " #: directives.c:739 #, c-format msgid "empty filename in #%s" msgstr "nom de fichier vide dans #%s" #: directives.c:749 msgid "#include nested too deeply" msgstr "#include imbriqu trop profondment" #: directives.c:790 msgid "#include_next in primary source file" msgstr "#include_next dans un fichier source primaire" #: directives.c:816 #, c-format msgid "invalid flag \"%s\" in line directive" msgstr "fanion %s invalide dans la ligne de directive" #: directives.c:868 #, c-format msgid "\"%s\" after #line is not a positive integer" msgstr " %s aprs #line n'est pas un nombre entier positif" #: directives.c:874 msgid "line number out of range" msgstr "numro de ligne hors limite" #: directives.c:887 directives.c:964 #, c-format msgid "\"%s\" is not a valid filename" msgstr " %s n'est pas un nom de fichier valide" #: directives.c:924 #, c-format msgid "\"%s\" after # is not a positive integer" msgstr " %s aprs # n'est pas un nombre entier positif" #: directives.c:1026 #, fuzzy, c-format msgid "invalid #%s directive" msgstr "directive #ident invalide" #: directives.c:1089 #, c-format msgid "registering pragmas in namespace \"%s\" with mismatched name expansion" msgstr "" # FIXME #: directives.c:1098 #, fuzzy, c-format msgid "registering pragma \"%s\" with name expansion and no namespace" msgstr "enregistrement de \"%s\" la fois comme une pragma et un espace de nom de pragma" # FIXME #: directives.c:1116 #, c-format msgid "registering \"%s\" as both a pragma and a pragma namespace" msgstr "enregistrement de \"%s\" la fois comme une pragma et un espace de nom de pragma" #: directives.c:1119 #, c-format msgid "#pragma %s %s is already registered" msgstr "la #pragma %s %s est dj enregistre" #: directives.c:1122 #, c-format msgid "#pragma %s is already registered" msgstr "la #pragma %s est dj enregistre" #: directives.c:1152 msgid "registering pragma with NULL handler" msgstr "" # FIXME #: directives.c:1362 msgid "#pragma once in main file" msgstr "#pragma once utilise une seule fois dans le fichier principal" # FIXME #: directives.c:1385 msgid "invalid #pragma GCC poison directive" msgstr "la directive GCC #pragma poison est invalide" # FIXME #: directives.c:1394 #, c-format msgid "poisoning existing macro \"%s\"" msgstr "limination de la macro existente %s " #: directives.c:1413 msgid "#pragma system_header ignored outside include file" msgstr "#pragma system_header ignore en dehors du fichier d'inclusion" #: directives.c:1437 #, c-format msgid "cannot find source file %s" msgstr "impossible de trouver le fichier source %s" #: directives.c:1441 #, c-format msgid "current file is older than %s" msgstr "le fichier courant est plus vieux que %s" #: directives.c:1620 msgid "_Pragma takes a parenthesized string literal" msgstr "_Pragma prend une chane entoure de parenthrese" #: directives.c:1693 msgid "#else without #if" msgstr "#else sans #if" #: directives.c:1698 msgid "#else after #else" msgstr "#else aprs #else" #: directives.c:1700 directives.c:1733 msgid "the conditional began here" msgstr "la condition dbute ici" #: directives.c:1726 msgid "#elif without #if" msgstr "#elif sans #if" #: directives.c:1731 msgid "#elif after #else" msgstr "#elif aprs #else" #: directives.c:1761 msgid "#endif without #if" msgstr "#endif sans #if" #: directives.c:1838 msgid "missing '(' after predicate" msgstr " ( manquante aprs le prdicat" #: directives.c:1853 msgid "missing ')' to complete answer" msgstr " ) manquante pour completer la rponse" #: directives.c:1873 msgid "predicate's answer is empty" msgstr "la rponse du prdicat est vide" #: directives.c:1900 msgid "assertion without predicate" msgstr "assertion sans prdicat" #: directives.c:1902 msgid "predicate must be an identifier" msgstr "le prdicat doit tre un identificateur" # FIXME #: directives.c:1988 #, c-format msgid "\"%s\" re-asserted" msgstr " %s re-asserti" #: directives.c:2271 #, c-format msgid "unterminated #%s" msgstr "#%s non termin" #: directives-only.c:221 lex.c:1016 traditional.c:162 msgid "unterminated comment" msgstr "commentaire non termin" #: errors.c:118 msgid "warning: " msgstr "attention : " #: errors.c:120 msgid "internal error: " msgstr "erreur interne : " #: errors.c:122 msgid "error: " msgstr "erreur: " #: errors.c:186 msgid "stdout" msgstr "stdout" #: errors.c:188 #, c-format msgid "%s: %s" msgstr "%s : %s" #: expr.c:261 msgid "too many decimal points in number" msgstr "trop de points dcimaux dans le nombre" #: expr.c:290 expr.c:365 #, fuzzy msgid "fixed-point constants are a GCC extension" msgstr "les constantes imaginaires sont une extension GCC" #: expr.c:303 #, fuzzy, c-format msgid "invalid digit \"%c\" in binary constant" msgstr "chiffre %c invalide dans la constante en base 8" #: expr.c:305 #, c-format msgid "invalid digit \"%c\" in octal constant" msgstr "chiffre %c invalide dans la constante en base 8" #: expr.c:313 #, fuzzy msgid "invalid prefix \"0b\" for floating constant" msgstr "suffixe %.*s invalide pour une constante flottante" #: expr.c:319 msgid "use of C99 hexadecimal floating constant" msgstr "usage d'une constante hexadcimale constante la C99" #: expr.c:328 msgid "exponent has no digits" msgstr "l'exposant n'a pas de chiffre" #: expr.c:335 msgid "hexadecimal floating constants require an exponent" msgstr "la contante hexadcimale flottante require un exposant" #: expr.c:341 #, c-format msgid "invalid suffix \"%.*s\" on floating constant" msgstr "suffixe %.*s invalide pour une constante flottante" #: expr.c:351 expr.c:393 #, c-format msgid "traditional C rejects the \"%.*s\" suffix" msgstr "le C traditionnel interdit le suffixe %.*s " #: expr.c:358 #, fuzzy, c-format msgid "invalid suffix \"%.*s\" with hexadecimal floating constant" msgstr "suffixe %.*s invalide pour une constante flottante" #: expr.c:369 #, fuzzy msgid "decimal float constants are a GCC extension" msgstr "les constantes imaginaires sont une extension GCC" #: expr.c:379 #, c-format msgid "invalid suffix \"%.*s\" on integer constant" msgstr "suffixe %.*s invalide pour une constante entire" #: expr.c:401 msgid "use of C99 long long integer constant" msgstr "usage d'une constante entire long long la C99" #: expr.c:409 msgid "imaginary constants are a GCC extension" msgstr "les constantes imaginaires sont une extension GCC" #: expr.c:412 #, fuzzy msgid "binary constants are a GCC extension" msgstr "les constantes imaginaires sont une extension GCC" #: expr.c:505 msgid "integer constant is too large for its type" msgstr "constante entire trop grande pour tenir dans son type" #: expr.c:517 msgid "integer constant is so large that it is unsigned" msgstr "cette constante entire est si grande qu'elle ne peut tre signe" #: expr.c:612 msgid "missing ')' after \"defined\"" msgstr " ) manquant aprs defined " #: expr.c:619 msgid "operator \"defined\" requires an identifier" msgstr "l'oprateur defined requiert un identificateur" #: expr.c:627 #, c-format msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "( %s est un lment lexical alternatif pour %s en C++)" #: expr.c:637 msgid "this use of \"defined\" may not be portable" msgstr "cette utilisation de defined peut ne pas tre portable" #: expr.c:676 msgid "floating constant in preprocessor expression" msgstr "constante flottante dans une expresion pour le prprocesseur" #: expr.c:682 msgid "imaginary number in preprocessor expression" msgstr "constante complexe dans une expresion pour le prprocesseur" #: expr.c:727 #, c-format msgid "\"%s\" is not defined" msgstr " %s n'est pas dfini" #: expr.c:855 expr.c:884 #, c-format msgid "missing binary operator before token \"%s\"" msgstr "oprateur binaire manquant avant l'lment lexical %s " #: expr.c:875 #, c-format msgid "token \"%s\" is not valid in preprocessor expressions" msgstr "l'lment lexical %s n'est pas valide dans les expressions pour le prprocesseur" #: expr.c:892 msgid "missing expression between '(' and ')'" msgstr "expression manquante entre '(' et ')'" #: expr.c:895 msgid "#if with no expression" msgstr "#if sans expression" #: expr.c:898 #, c-format msgid "operator '%s' has no right operand" msgstr "l'oprateur %s n'a pas d'oprande droite" #: expr.c:903 #, c-format msgid "operator '%s' has no left operand" msgstr "oprateur %s n'a pas d'oprande gauche" #: expr.c:929 msgid " ':' without preceding '?'" msgstr " : n'est pas prcd de ? " #: expr.c:956 msgid "unbalanced stack in #if" msgstr "pile non balance dans #if" #: expr.c:975 #, c-format msgid "impossible operator '%u'" msgstr "oprateur impossible %u " #: expr.c:1065 msgid "missing ')' in expression" msgstr " ) manquante dans l'expresion" #: expr.c:1086 msgid "'?' without following ':'" msgstr " ? n'est pas suivi de : " #: expr.c:1096 msgid "integer overflow in preprocessor expression" msgstr "dbordement d'entier dans l'expresion pour le prprocesseur" #: expr.c:1101 msgid "missing '(' in expression" msgstr " ( manquante dans l'expresion" #: expr.c:1133 #, c-format msgid "the left operand of \"%s\" changes sign when promoted" msgstr "L'oprande gauche de %s change de signe lors de sa promotion" #: expr.c:1138 #, c-format msgid "the right operand of \"%s\" changes sign when promoted" msgstr "L'oprande droite de %s change de signe lors de sa promotion" #: expr.c:1397 msgid "traditional C rejects the unary plus operator" msgstr "le C traditionnel rejette le plus unaire" #: expr.c:1480 msgid "comma operator in operand of #if" msgstr "oprateur virgule dans l'oprande de #if" #: expr.c:1612 msgid "division by zero in #if" msgstr "division par zro dans #if" #: files.c:442 msgid "NULL directory in find_file" msgstr "rpertoire NUL dans find_file" #: files.c:480 msgid "one or more PCH files were found, but they were invalid" msgstr "un ou plusieurs fichiers PCH ont t reprs, mais ils taient invalides" #: files.c:483 msgid "use -Winvalid-pch for more information" msgstr "utiliser -Winvalid-pch pour plus d'informations" # FIXME #: files.c:570 #, c-format msgid "%s is a block device" msgstr "%s est un priphrique de blocs" #: files.c:587 #, c-format msgid "%s is too large" msgstr "%s est trop grand" #: files.c:622 #, c-format msgid "%s is shorter than expected" msgstr "%s est plus petit que prvu" #: files.c:852 #, c-format msgid "no include path in which to search for %s" msgstr "aucun chemin d'inclusion dans lequel on pourrait reprer %s" # FIXME #: files.c:1157 msgid "Multiple include guards may be useful for:\n" msgstr "De multiples balises pour les inclusions peuvent tre utiles pour:\n" #: init.c:426 msgid "cppchar_t must be an unsigned type" msgstr "cppchar_t doit tre d'un type non sign" #: init.c:430 #, c-format msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits" msgstr "l'arithmtique du prprocesseur a une prcision maximale de %lu bits ; la cible require %lu bits" #: init.c:437 msgid "CPP arithmetic must be at least as precise as a target int" msgstr "l'arithmtique de CPP doit tre au moins aussi prcise que le type int de la cible" #: init.c:440 msgid "target char is less than 8 bits wide" msgstr "sur la cible, char fait moins de 8 bits" #: init.c:444 msgid "target wchar_t is narrower than target char" msgstr "sur la cible, wchar_t est plus petit que char " #: init.c:448 msgid "target int is narrower than target char" msgstr "sur la cible, int est plus petit que char " #: init.c:453 msgid "CPP half-integer narrower than CPP character" msgstr "les demi-entiers de CPP sont plus petit que les caractres de CPP" #: init.c:457 #, c-format msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits" msgstr "CPP sur cette machine ne peut grer les constantes larges de caractres de plus de %lu bits, mais la cible require %lu bits" #: lex.c:283 msgid "backslash and newline separated by space" msgstr " \\ et retour de chariot spars par un blanc" #: lex.c:288 msgid "backslash-newline at end of file" msgstr " \\ en fin de ligne la fin du fichier" #: lex.c:303 #, c-format msgid "trigraph ??%c converted to %c" msgstr "trigraphe ??%c converti en %c" #: lex.c:310 #, c-format msgid "trigraph ??%c ignored, use -trigraphs to enable" msgstr "trigraphe ??%c ignor, utilisez -trigraphs pour le permettre" #: lex.c:356 msgid "\"/*\" within comment" msgstr " /* l'intrieur d'un commentaire" #: lex.c:414 #, c-format msgid "%s in preprocessing directive" msgstr "%s dans la directive du prprocesseur" # I18N #: lex.c:423 msgid "null character(s) ignored" msgstr "caractre(s) nul(s) ignor(s)" #: lex.c:460 #, fuzzy, c-format msgid "`%.*s' is not in NFKC" msgstr " %s n'est pas un canevas" #: lex.c:463 #, fuzzy, c-format msgid "`%.*s' is not in NFC" msgstr " %s n'est pas un canevas" # FIXME #: lex.c:551 #, c-format msgid "attempt to use poisoned \"%s\"" msgstr "tentative d'utilisation d'un %s corrompu" #: lex.c:559 msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr " __VA_ARGS__ peut seulement appratre dans l'expansion des macros C99 nombre variable d'arguments" #: lex.c:659 msgid "null character(s) preserved in literal" msgstr "caractre(s) nul prserv(s) dans la chane" #: lex.c:662 #, c-format msgid "missing terminating %c character" msgstr "caractre %c de terminaison manquant" #: lex.c:1027 msgid "C++ style comments are not allowed in ISO C90" msgstr "Les commentaires la C++ ne sont pas permis en C89 ISO" #: lex.c:1029 msgid "(this will be reported only once per input file)" msgstr "(ceci sera rapport une seule fois seulement par fichier d'entre)" #: lex.c:1034 msgid "multi-line comment" msgstr "commentaire multi-lignes" #: lex.c:1347 #, c-format msgid "unspellable token %s" msgstr "l'lment lexical %s ne peut tre pel" #: line-map.c:320 #, c-format msgid "In file included from %s:%u" msgstr "Dans le fichier inclus partir de %s:%u" #: line-map.c:338 #, c-format msgid "" ",\n" " from %s:%u" msgstr "" ",\n" " partir de %s:%u" #: macro.c:84 #, c-format msgid "macro \"%s\" is not used" msgstr "la macro %s n'est pas utilise" #: macro.c:123 macro.c:319 #, c-format msgid "invalid built-in macro \"%s\"" msgstr "macro interne invalide %s " #: macro.c:157 #, fuzzy msgid "could not determine file timestamp" msgstr "ne peut dterminer la date et l'heure" #: macro.c:254 msgid "could not determine date and time" msgstr "ne peut dterminer la date et l'heure" #: macro.c:270 msgid "__COUNTER__ expanded inside directive with -fdirectives-only" msgstr "" #: macro.c:423 msgid "invalid string literal, ignoring final '\\'" msgstr "chane invalide, \\ final ignor" #: macro.c:483 #, c-format msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "le collage de %s et de %s ne donne pas d'lment lexical de pr-traitement valide" #: macro.c:558 msgid "ISO C99 requires rest arguments to be used" msgstr "ISO C99 requiert que tous les arguments soient utiliss" #: macro.c:563 #, c-format msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "macro %s requiert %u arguments, mais seulement %u ont t passs" #: macro.c:568 #, c-format msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "la macro %s a reu %u arguments, mais elle n'en prend que %u" #: macro.c:679 traditional.c:680 #, c-format msgid "unterminated argument list invoking macro \"%s\"" msgstr "liste d'arguments non termine invoquant la macro %s " #: macro.c:782 #, c-format msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "la macro %s ressemblant une fonction doit utilise avec des arguments en C traditionnel" #: macro.c:1325 #, c-format msgid "duplicate macro parameter \"%s\"" msgstr "paramtre de macro %s en double" #: macro.c:1371 #, c-format msgid "\"%s\" may not appear in macro parameter list" msgstr " %s peut ne pas apparatre parmi les paramtres de macros" #: macro.c:1379 msgid "macro parameters must be comma-separated" msgstr "les paramtres de macro doivent tre spars par des virgules" #: macro.c:1396 msgid "parameter name missing" msgstr "nom de paramtre manquant" #: macro.c:1413 msgid "anonymous variadic macros were introduced in C99" msgstr "les macros anonymes nombre variable d'arguments ont t introduites avec le C99" #: macro.c:1418 msgid "ISO C does not permit named variadic macros" msgstr "ISO C ne permet pas les macros nommes nombre variable d'arguments" #: macro.c:1427 msgid "missing ')' in macro parameter list" msgstr " ) manquante dans la liste des paramtres de macros" # FIXME #: macro.c:1476 msgid "'##' cannot appear at either end of a macro expansion" msgstr " ## ne peut apparatre chacune des fins de l'expansion de macros" #: macro.c:1510 msgid "ISO C99 requires whitespace after the macro name" msgstr "ISO C99 requiert un blanc aprs le nom de la macro" #: macro.c:1534 msgid "missing whitespace after the macro name" msgstr "blanc d'espacement manquant aprs le nom de la macro" #: macro.c:1564 msgid "'#' is not followed by a macro parameter" msgstr " # n'est pas suivi d'un paramtre de macro" #: macro.c:1683 #, c-format msgid "\"%s\" redefined" msgstr " %s redfini" #: macro.c:1688 msgid "this is the location of the previous definition" msgstr "ceci est la localisation d'une prcdente dfinition" #: macro.c:1738 #, c-format msgid "macro argument \"%s\" would be stringified in traditional C" msgstr "l'argument macro %s serait chang en chaine en C traditionnel" #: macro.c:1761 #, c-format msgid "invalid hash type %d in cpp_macro_definition" msgstr "type de hachage %d invalide dans cpp_macro_definition" #: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377 msgid "while writing precompiled header" msgstr "lors de l'criture de l'en-tte pr-compile" #: pch.c:485 #, c-format msgid "%s: not used because `%.*s' not defined" msgstr "%s: n'est pas utilis parce que %.*s n'est pas dfinie" #: pch.c:497 #, c-format msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'" msgstr "%s: n'est pas utilis parce que %.*s est dfini en tant %s et non pas %.*s " #: pch.c:538 #, c-format msgid "%s: not used because `%s' is defined" msgstr "%s: non utilis parce que %s est dfini" #: pch.c:558 #, fuzzy, c-format msgid "%s: not used because `__COUNTER__' is invalid" msgstr "%s: non utilis parce que %s est dfini" #: pch.c:567 pch.c:737 msgid "while reading precompiled header" msgstr "lors de la lecture de l'en-tte pr-compile" #: traditional.c:750 #, c-format msgid "detected recursion whilst expanding macro \"%s\"" msgstr "rcursion dtecte lors de l'expansion de la macro %s " #: traditional.c:917 msgid "syntax error in macro parameter list" msgstr "erreur de syntaxe dans la liste de paramtres macro" #~ msgid "unknown escape sequence: '\\%03o'" #~ msgstr "squence d'chappement \\%03o inconnue" #~ msgid "no newline at end of file" #~ msgstr "pas de retour chariot la fin du fichier" #~ msgid "`%s' attribute directive ignored" #~ msgstr "attribut de directive %s ignor" #~ msgid "wrong number of arguments specified for `%s' attribute" #~ msgstr "nombre erron d'arguments spcifi pour l'attribut %s " #~ msgid "`%s' attribute does not apply to types" #~ msgstr "l'attribut %s ne s'applique pas aux types" #~ msgid "`%s' attribute only applies to function types" #~ msgstr "l'attribut %s ne s'applique qu' des types de fonction" #~ msgid "`%s' attribute ignored" #~ msgstr "attribut %s ignor" #~ msgid "offset outside bounds of constant string" #~ msgstr "dcalage hors des limites d'une chane de constante" #~ msgid "second arg to `__builtin_prefetch' must be a constant" #~ msgstr "second argument de __builtin_prefetch doit tre une constante" #~ msgid "invalid second arg to __builtin_prefetch; using zero" #~ msgstr "second argument invalide de __builtin_prefetch ; utilisation de zro" #~ msgid "third arg to `__builtin_prefetch' must be a constant" #~ msgstr "troisime argument de __builtin_prefetch doit tre une constante" #~ msgid "invalid third arg to __builtin_prefetch; using zero" #~ msgstr "troisime argument invalide de __builtin_prefetch ; utilisation de zro" #~ msgid "argument of `__builtin_args_info' must be constant" #~ msgstr "argument de __builtin_args_info doit tre une constante" #~ msgid "argument of `__builtin_args_info' out of range" #~ msgstr "argument de __builtin_args_info hors des limites" #~ msgid "missing argument in `__builtin_args_info'" #~ msgstr "argument manquant dans __builtin_args_info " #~ msgid "`va_start' used in function with fixed args" #~ msgstr " va_start utilis dans une fonction ayant des arguments fixes" #~ msgid "second parameter of `va_start' not last named argument" #~ msgstr "second paramtre de va_start n'est pas le dernier argument nomm" #~ msgid "`__builtin_next_arg' called without an argument" #~ msgstr " __builtin_next_arg appel sans argument" #~ msgid "too many arguments to function `va_start'" #~ msgstr "trop d'arguments pour la function va_start " #~ msgid "first argument to `va_arg' not of type `va_list'" #~ msgstr "premier argument de va_arg n'est pas de type va_list " #~ msgid "`%s' is promoted to `%s' when passed through `...'" #~ msgstr " %s a t promu %s lors du passage travers ... " #~ msgid "(so you should pass `%s' not `%s' to `va_arg')" #~ msgstr "(vous devriez donc passer %s et non %s va_arg )" #~ msgid "if this code is reached, the program will abort" #~ msgstr "si ce code est atteint, le programme s'arrtera" #~ msgid "invalid arg to `__builtin_frame_address'" #~ msgstr "argument de __builtin_frame_address invalide" #~ msgid "invalid arg to `__builtin_return_address'" #~ msgstr "argument de __builtin_return_address invalide" #~ msgid "unsupported arg to `__builtin_frame_address'" #~ msgstr "argument de __builtin_frame_address non support" #~ msgid "unsupported arg to `__builtin_return_address'" #~ msgstr "argument de __builtin_return_address non support" #~ msgid "second arg to `__builtin_expect' must be a constant" #~ msgstr "le second argument de __builtin_expect doit tre une constante" #~ msgid "__builtin_longjmp second argument must be 1" #~ msgstr "le second argument de __builtin_longjmp doit tre 1" #~ msgid "built-in function `%s' not currently supported" #~ msgstr "fonction interne %s n'est pas actuellement supporte" #~ msgid "target format does not support infinity" #~ msgstr "le format cible ne supporte pas l'infini" #~ msgid "%Hsuggest explicit braces to avoid ambiguous `else'" #~ msgstr "%Hon vous suggre des accolades explicitement pour viter des else ambigus" #~ msgid "%J'%D' is not defined outside of function scope" #~ msgstr "%J %D n'est pas dfini l'extrieur de la porte de la fonction" #~ msgid "string length `%d' is greater than the length `%d' ISO C%d compilers are required to support" #~ msgstr "longueur de la chane %d plus grande que la longueur %d que les compilateurs ISO C%d doivent supporter" #~ msgid "overflow in constant expression" #~ msgstr "dbordement dans l'expression de la constante" #~ msgid "integer overflow in expression" #~ msgstr "dbordement d'entier dans l'expression" #~ msgid "floating point overflow in expression" #~ msgstr "dbordement d'un nombre en virgule flottante dans l'expression" #~ msgid "vector overflow in expression" #~ msgstr "dbordement du vecteur dans l'expression" #~ msgid "large integer implicitly truncated to unsigned type" #~ msgstr "grand entier implicitement tronqu pour un type non sign" #~ msgid "negative integer implicitly converted to unsigned type" #~ msgstr "entier ngatif implicitement converti en un type non sign" #~ msgid "overflow in implicit constant conversion" #~ msgstr "dbordement dans la conversion implicte de la constante" #~ msgid "operation on `%s' may be undefined" #~ msgstr "l'opration portant sur %s est peut tre indfinie" #~ msgid "expression statement has incomplete type" #~ msgstr "la dclaration de l'expression a un type incomplet" #~ msgid "case label does not reduce to an integer constant" #~ msgstr "l'tiquette du case ne se rduit pas en une constante entire" #~ msgid "invalid truth-value expression" #~ msgstr "expression valeur de vrit invalide" #~ msgid "invalid operands to binary %s" #~ msgstr "oprandes invalides pour le binaire %s" #~ msgid "comparison is always false due to limited range of data type" #~ msgstr "comparaison est toujours fausse en raison d'une gamme limite de type de donnes" #~ msgid "comparison is always true due to limited range of data type" #~ msgstr "comparaison est toujours vraie en raison d'une gamme limite de type de donnes" #~ msgid "comparison of unsigned expression >= 0 is always true" #~ msgstr "comparaison d'une expression non signe >=0 est toujours vraie" #~ msgid "comparison of unsigned expression < 0 is always false" #~ msgstr "comparaison d'une expression non signe < 0 est toujours fausse" #~ msgid "pointer of type `void *' used in arithmetic" #~ msgstr "usage en arithmtique d'un pointeur de type void * " #~ msgid "pointer to a function used in arithmetic" #~ msgstr "usage en arithmtique d'un pointeur vers une fonction" #~ msgid "pointer to member function used in arithmetic" #~ msgstr "usage en arithmtique d'un pointeur vers une fonction membre" #~ msgid "struct type value used where scalar is required" #~ msgstr "valeur de type struct utilis l o un scalaire est attendu" #~ msgid "union type value used where scalar is required" #~ msgstr "valeur de type union utilis l o un scalaire est attendu" #~ msgid "array type value used where scalar is required" #~ msgstr "valeur de type array utilis l o un scalaire est attendu" #~ msgid "the address of `%D', will always evaluate as `true'" #~ msgstr "l'adresse de %D sera toujours value comme tant true " #~ msgid "suggest parentheses around assignment used as truth value" #~ msgstr "parenthses suggres autour de l'affectation utilise comme valeur de vrit" #~ msgid "invalid use of `restrict'" #~ msgstr "usage de restrict invalide" #~ msgid "invalid application of `sizeof' to a function type" #~ msgstr "application de sizeof sur un type de fonction invalide" #~ msgid "invalid application of `%s' to a void type" #~ msgstr "application invalide de %s sur un type void" #~ msgid "invalid application of `%s' to an incomplete type" #~ msgstr "application invalide de %s sur un type incomplet" #~ msgid "`__alignof' applied to a bit-field" #~ msgstr " __alignof appliqu sur un champ de bits" #~ msgid "cannot disable built-in function `%s'" #~ msgstr "ne peut dsactiver la fonction interne %s " #~ msgid "too few arguments to function `%s'" #~ msgstr "pas assez d'arguments pour la fonction %s " #~ msgid "too many arguments to function `%s'" #~ msgstr "trop d'arguments pour la fonction %s " #~ msgid "non-floating-point argument to function `%s'" #~ msgstr "argument pour la fonction %s n'tant pas en virgule flottante" #~ msgid "pointers are not permitted as case values" #~ msgstr "les pointeurs ne sont pas permis comme valeurs de case " #~ msgid "range expressions in switch statements are non-standard" #~ msgstr "l'tendue des expressions dans les dclarations switch ne sont pas standard" #~ msgid "empty range specified" #~ msgstr "intervalle vide spcifi" #~ msgid "duplicate (or overlapping) case value" #~ msgstr "valeur du case dupplique (ou en chevauchant une autre)" #~ msgid "%Jthis is the first entry overlapping that value" #~ msgstr "%Jest la premire entre chevauchant cette valeur" #~ msgid "duplicate case value" #~ msgstr "valeur du case dupplique" #~ msgid "%Jpreviously used here" #~ msgstr "%Jprcdemment utilis ici" #~ msgid "multiple default labels in one switch" #~ msgstr "plusieurs tiquettes par dfaut dans un switch " #~ msgid "%Jthis is the first default label" #~ msgstr "%Jest la premire tiquette par dfaut" #~ msgid "taking the address of a label is non-standard" #~ msgstr "prendre l'adresse d'une tiquette n'est pas standard" #~ msgid "%Hignoring return value of `%D', declared with attribute warn_unused_result" #~ msgstr "%Hvaleur retourner %D ignore, dclare avec l'attribut warn_unused_result" #~ msgid "%Hignoring return value of function declared with attribute warn_unused_result" #~ msgstr "%Hvaleur retourner ignore de la fonction dclare avec l'attribut warn_unused_result" #~ msgid "unknown machine mode `%s'" #~ msgstr "mode machine %s inconnu" #~ msgid "no data type for mode `%s'" #~ msgstr "aucun type de donnes pour le mode %s " #~ msgid "invalid pointer mode `%s'" #~ msgstr "mode pointeur invalide %s " #~ msgid "unable to emulate '%s'" #~ msgstr "impossible d'muler %s " #~ msgid "%Jsection attribute cannot be specified for local variables" #~ msgstr "%Jl'attribut de section ne peut tre spcifi pour des variables locales" #~ msgid "%Jsection of '%D' conflicts with previous declaration" #~ msgstr "%Jsection de %D en conflit avec une dclaration prcdente" #~ msgid "%Jsection attribute not allowed for '%D'" #~ msgstr "%Jattribut de section n'est pas permis pour %D " #~ msgid "%Jsection attributes are not supported for this target" #~ msgstr "%Jattributs de section ne sont pas supports pour la cible" #~ msgid "requested alignment is not a constant" #~ msgstr "l'alignement demand n'est pas une constante" #~ msgid "requested alignment is not a power of 2" #~ msgstr "l'alignement demand n'est pas une puissance de 2" #~ msgid "requested alignment is too large" #~ msgstr "l'alignement demand est trop grand" #~ msgid "%Jalignment may not be specified for '%D'" #~ msgstr "%Jl'alignement ne peut pas tre spcifi pour %D " #~ msgid "%J'%D' defined both normally and as an alias" #~ msgstr "%J'%D dfini la fois normalement et en tant qu'alias" #~ msgid "alias arg not a string" #~ msgstr "l'argument d'alias n'est pas une chane" #~ msgid "visibility arg not a string" #~ msgstr "l'argument de visibilit n'est pas une chane" #~ msgid "visibility arg must be one of \"default\", \"hidden\", \"protected\" or \"internal\"" #~ msgstr "l'argument de visibilit doit tre l'un de default (par dfaut), hidden (masqu), protected (protg) ou internal (interne)" #~ msgid "tls_model arg not a string" #~ msgstr "l'argument de tls_model n'est pas une chane" #~ msgid "tls_model arg must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"" #~ msgstr "l'argument de tls_model doit tre l'un de local-exec , initial-exec , local-dynamic or global-dynamic " #~ msgid "%J'%E' attribute applies only to functions" #~ msgstr "%J'%E l'attribut ne s'applique seulement qu' des fonctions" #~ msgid "%Jcan't set '%E' attribute after definition" #~ msgstr "%Jne peut initialiser l'attribut %E aprs dfinition" #~ msgid "`%s' attribute ignored for `%s'" #~ msgstr "attribut %s ignor pour %s " #~ msgid "invalid vector type for attribute `%s'" #~ msgstr "type de vecteur invalide pour l'attribut %s " #~ msgid "no vector mode with the size and type specified could be found" #~ msgstr "aucun mode vecteur avec la taille et le type spcifi n'a t trouv" #~ msgid "nonnull attribute without arguments on a non-prototype" #~ msgstr "attribut non nul sans argument sur un non-prototype" #~ msgid "nonnull argument has invalid operand number (arg %lu)" #~ msgstr "un argument non nul a un nombre d'oprande invalide (argument %lu)" #~ msgid "nonnull argument with out-of-range operand number (arg %lu, operand %lu)" #~ msgstr "un argument non nul a un nombre d'oprande hors des bornes (arg %lu, oprande %lu)" #~ msgid "nonnull argument references non-pointer operand (arg %lu, operand %lu)" #~ msgstr "un argument non nul rfrence une oprande qui n'est pas un pointeur (arg %lu, oprande %lu)" #~ msgid "null argument where non-null required (arg %lu)" #~ msgstr "argument nul l o un non-nul est requis (arg %lu)" #~ msgid "cleanup arg not an identifier" #~ msgstr "argument de nettoyage n'est pas un identificateur" #~ msgid "cleanup arg not a function" #~ msgstr "argument de nettoyage n'est pas une fonction" #~ msgid "%s at end of input" #~ msgstr "%s la fin de l'entre" #~ msgid "%s before %s'%c'" #~ msgstr "%s avant %s %c " #~ msgid "%s before %s'\\x%x'" #~ msgstr "%s avant %s'\\x%x'" #~ msgid "%s before string constant" #~ msgstr "%s avant une chane constante" #~ msgid "%s before numeric constant" #~ msgstr "%s avant une constante numrique" #~ msgid "%s before \"%s\"" #~ msgstr "%s avant %s " #~ msgid "%s before '%s' token" #~ msgstr "%s avant un lment lexical %s " #~ msgid "%s" #~ msgstr "%s" #~ msgid "void value not ignored as it ought to be" #~ msgstr "valeur void n'a pas t ignore comme elle aurait d l'tre" #~ msgid "conversion to non-scalar type requested" #~ msgstr "conversion vers un type non scalaire demande" #~ msgid "%Jarray '%D' assumed to have one element" #~ msgstr "%Jon assume que le tableau %D n'a qu'un seul lment" #~ msgid "%Jlabel `%D' used but not defined" #~ msgstr "%Jtiquette %D utilise mais non dfinie" #~ msgid "%Jlabel `%D' defined but not used" #~ msgstr "%Jtiquette %D dfinie mais non utilise" #~ msgid "%Jlabel `%D' declared but not defined" #~ msgstr "%Jtiquette %D utilise mais non dfinie" #~ msgid "%Junused variable `%D'" #~ msgstr "%Jvariable inutilise %D " #~ msgid "a parameter list with an ellipsis can't match an empty parameter name list declaration" #~ msgstr "un paramtre de la liste avec une ellipse ne peut concorder une dclaration vide de liste de noms de paramtres" #~ msgid "an argument type that has a default promotion can't match an empty parameter name list declaration" #~ msgstr "un type d'argument ayant une promotion par dfaut ne peut concorder avec une dclaration vide de noms de paramtres" #~ msgid "%Jprototype for '%D' declares more arguments than previous old-style definition" #~ msgstr "%Jprototype pour %D dclare plus d'arguments que la dfinition prcdente de style ancien" #~ msgid "%Jprototype for '%D' declares fewer arguments than previous old-style definition" #~ msgstr "%Jprototype pour %D dclare moins d'arguments que la dfinition prcdente de style ancien" #~ msgid "%Jprototype for '%D' declares arg %d with incompatible type" #~ msgstr "%Jprototype pour %D dclare l'arguments %d avec un type incompatible" #~ msgid "%Jprototype for '%D' follows non-prototype definition" #~ msgstr "%Jprototype pour %D suit la dfinition d'un non prototype" #~ msgid "%Jprevious definition of '%D' was here" #~ msgstr "%Jdfinition prcdente de %D tait ici" #~ msgid "%Jprevious implicit declaration of '%D' was here" #~ msgstr "%Jdclaration prcdente implicite de %D tait ici" #~ msgid "%Jprevious declaration of '%D' was here" #~ msgstr "%Jdclaration prcdente de %D tait ici" #~ msgid "%J'%D' redeclared as different kind of symbol" #~ msgstr "%J %D redclar comme une sorte diffrente de symbole" #~ msgid "%Jbuilt-in function '%D' declared as non-function" #~ msgstr "%Jfonction interne %D n'est pas dclare comme une fonction" #~ msgid "%Jshadowing built-in function '%D'" #~ msgstr "%Jmasquage de la fonction interne %D " #~ msgid "%Jconflicting types for built-in function '%D'" #~ msgstr "%Jtypes conflictuels pour la fonction interne %D " #~ msgid "%Jconflicting types for '%D'" #~ msgstr "%Jtypes conflictuels pour %D " #~ msgid "%Jredefinition of typedef '%D'" #~ msgstr "%Jredfinition de %D " #~ msgid "%Jredefinition of '%D'" #~ msgstr "%Jredfinition de %D " #~ msgid "%Jstatic declaration of '%D' follows non-static declaration" #~ msgstr "%Jdclaration statique de %D suit une dclaration non statique" #~ msgid "%Jnon-static declaration of '%D' follows static declaration" #~ msgstr "%Jdclaration non statique de %D suite une dclaration statique" #~ msgid "%Jthread-local declaration of '%D' follows non-thread-local declaration" #~ msgstr "%Jdclaration de thread local de %D suit une dclaration non thread-local" #~ msgid "%Jnon-thread-local declaration of '%D' follows thread-local declaration" #~ msgstr "%Jdclaration non thread local de %D suit une dclaration de thread local" #~ msgid "%Jextern declaration of '%D' follows declaration with no linkage" #~ msgstr "%Jdclaration externe de %D suit une dclaraion sans lien" #~ msgid "%Jdeclaration of '%D' with no linkage follows extern declaration" #~ msgstr "%Jdclaration de %D sasn lien suivant une dclaration externe" #~ msgid "%Jredeclaration of '%D' with no linkage" #~ msgstr "%Jredclaration de %D sans lien" #~ msgid "%Jredeclaration of '%D' with different visibility (old visibility preserved)" #~ msgstr "%Jredclaration de %D avec une visibilit diffrente (visibilit prcdente conserve)" #~ msgid "%Jinline declaration of '%D' follows declaration with attribute noinline" #~ msgstr "%Jdclaration enligne de %D suit la dclaration avec un attribut non enligne" #~ msgid "%Jdeclaration of '%D' with attribute noinline follows inline declaration " #~ msgstr "%Jclaration de %D avec un attribut non enligne suit une dclaration enligne" #~ msgid "%J'%D' declared inline after being called" #~ msgstr "%J %D dclar enligne aprs avoir t appel" #~ msgid "%J'%D' declared inline after its definition" #~ msgstr "%J %D dclar enligne aprs sa dfinition" #~ msgid "%Jredefinition of parameter '%D'" #~ msgstr "%Jredfinition du paramtre %D " #~ msgid "%Jvolatile declaration of '%D' follows non-volatile declaration" #~ msgstr "%Jdclaration volatile de %D suit une dclaration non volatile" #~ msgid "%Jnon-volatile declaration of '%D' follows volatile declaration" #~ msgstr "%Jdclaration non volatile de %D suit une dclaration volatile" #~ msgid "%Jconst declaration of '%D' follows non-const declaration" #~ msgstr "%Jdclaration de constante de %D suit une dclaration de non constante" #~ msgid "%Jnon-const declaration of '%D' follows const declaration" #~ msgstr "%Jdclaration de non constante de %D suit une dclaration de constante" #~ msgid "%Jredundant redeclaration of '%D'" #~ msgstr "%Jdclaration redondante de %D " #~ msgid "%Jdeclaration of '%D' shadows a parameter" #~ msgstr "%Jdclaration de %D masque un paramtre" #~ msgid "%Jdeclaration of '%D' shadows a global declaration" #~ msgstr "%Jdclaration de %D masque une dclaration globale" #~ msgid "%Jdeclaration of '%D' shadows a previous local" #~ msgstr "%Jdclaration de %D masque la dclaration d'un local prcdent" #~ msgid "%Jshadowed declaration is here" #~ msgstr "%Jdclaration est masque ici" #~ msgid "nested extern declaration of `%s'" #~ msgstr "dclaration de %s externe imbrique" #~ msgid "%Jprevious declaration of '%D'" #~ msgstr "%Jdclaration prcdente de %D " #~ msgid "implicit declaration of function `%s'" #~ msgstr "dclaration implicite de la fonction %s " #~ msgid "`%s' undeclared here (not in a function)" #~ msgstr " %s non dclar ici (hors de toute fonction)" #~ msgid "`%s' undeclared (first use in this function)" #~ msgstr " %s non dclar (premire utilisation dans cette fonction)" #~ msgid "(Each undeclared identifier is reported only once" #~ msgstr "(Chaque identificateur non dclar est rapport une seule fois" #~ msgid "for each function it appears in.)" #~ msgstr "pour chaque fonction dans laquelle il apparat.)" #~ msgid "label %s referenced outside of any function" #~ msgstr "tiquette %s rfrence l'extrieur de toute fonction" #~ msgid "duplicate label declaration `%s'" #~ msgstr "dclaration de l'tiquette %s en double" #~ msgid "%Jthis is a previous declaration" #~ msgstr "%Jest la dclaration prcdente" #~ msgid "%Hduplicate label `%D'" #~ msgstr "%Htiquette %D apparat en double" #~ msgid "%J`%D' previously defined here" #~ msgstr "%J %D prcdemment dfini ici" #~ msgid "%J`%D' previously declared here" #~ msgstr "%J %D prcdemment dclar ici" #~ msgid "%Htraditional C lacks a separate namespace for labels, identifier `%s' conflicts" #~ msgstr "%HC traditionnel manque d'un espace nom spar pour les tiquettes, identificateur %D est en conflit" #~ msgid "%H`%s' defined as wrong kind of tag" #~ msgstr "%H %s dfini incorrectement comme une mauvais sorte d'tiquette" #~ msgid "unnamed struct/union that defines no instances" #~ msgstr "struct/union sans nom ne dfinissant aucune instance" #~ msgid "useless keyword or type name in empty declaration" #~ msgstr "mot cl ou nom de type inutile dans une dclaration vide" #~ msgid "two types specified in one empty declaration" #~ msgstr "deux types spcifis dans une dclaration vide" #~ msgid "empty declaration" #~ msgstr "dclaration vide" #~ msgid "ISO C90 does not support `static' or type qualifiers in parameter array declarators" #~ msgstr "ISO C90 ne supporte pas static ou les qualificateurs de type dans les dclarateurs de tableau de paramtres" #~ msgid "ISO C90 does not support `[*]' array declarators" #~ msgstr "ISO C90 ne supporte pas [*] dans les dclarateurs de tableau" #~ msgid "GCC does not yet properly implement `[*]' array declarators" #~ msgstr "GCC n'implmente pas encore correctement les dclarateurs de tableau [*] " #~ msgid "static or type qualifiers in abstract declarator" #~ msgstr "static ou qualificateurs de type dans un dclarateur abstrait" #~ msgid "%J'%D' is usually a function" #~ msgstr "%J %D est habituellement une fonction" #~ msgid "typedef `%s' is initialized (use __typeof__ instead)" #~ msgstr "typedef %s est initialis (utilisez __typeof__ la place)" #~ msgid "function `%s' is initialized like a variable" #~ msgstr "la fonction %s est initialise comme une variable" #~ msgid "parameter `%s' is initialized" #~ msgstr "le paramtre %s est initialis" #~ msgid "variable-sized object may not be initialized" #~ msgstr "un objet de taille variable peut ne pas tre initialis" #~ msgid "variable `%s' has initializer but incomplete type" #~ msgstr "la variable %s est initialise alors qu'elle est de type incomplet" #~ msgid "elements of array `%s' have incomplete type" #~ msgstr "les lments du tableau %s ont des types incomplets" #~ msgid "%Jinline function '%D' given attribute noinline" #~ msgstr "%J fonction enligne %D a reu l'attribut non enligne" #~ msgid "%Jinitializer fails to determine size of '%D'" #~ msgstr "%Jinitialisateur a chou dterminer la taille de %D " #~ msgid "%Jarray size missing in '%D'" #~ msgstr "%Jtaille du tableau est manquante dans %D " #~ msgid "%Jzero or negative size array '%D'" #~ msgstr "%Jtableau %D de taille zro ou ngative" #~ msgid "%Jstorage size of '%D' isn't known" #~ msgstr "%Jtaille de stockage de %D n'est pas connue" #~ msgid "%Jstorage size of '%D' isn't constant" #~ msgstr "%Jtaille de stockage de %D n'est pas une constante" #~ msgid "%Jignoring asm-specifier for non-static local variable '%D'" #~ msgstr "%Jspcificateur asm ignor pour la variable locale non statique %D " #~ msgid "ISO C forbids forward parameter declarations" #~ msgstr "ISO C interdit la dclaration anticipe de paramtres" #~ msgid "" #~ msgstr "" #~ msgid "bit-field `%s' width not an integer constant" #~ msgstr "la largeur du champ de bits %s n'est pas une constante entire" #~ msgid "negative width in bit-field `%s'" #~ msgstr "largeur ngative du champ de bits %s " #~ msgid "zero width for bit-field `%s'" #~ msgstr "largeur nulle pour le champ de bits %s " #~ msgid "bit-field `%s' has invalid type" #~ msgstr "le champ de bits %s a un type invalide" #~ msgid "type of bit-field `%s' is a GCC extension" #~ msgstr "le type de champ de bit %s est une extension GCC" #~ msgid "width of `%s' exceeds its type" #~ msgstr "la largeur de %s excde son type" #~ msgid "`%s' is narrower than values of its type" #~ msgstr " %s est plus troit que les valeurs de son type" #~ msgid "`long long long' is too long for GCC" #~ msgstr " long long long est trop long pour GCC" #~ msgid "ISO C90 does not support `long long'" #~ msgstr "ISO C90 ne permet pas long long " #~ msgid "duplicate `%s'" #~ msgstr " %s apparat en double" #~ msgid "`__thread' before `extern'" #~ msgstr " __thread avant extern " #~ msgid "`__thread' before `static'" #~ msgstr " __thread avant static " #~ msgid "two or more data types in declaration of `%s'" #~ msgstr "deux types de donnes ou plus dans la dclaration de %s " #~ msgid "`%s' fails to be a typedef or built in type" #~ msgstr " %s n'a pu devenir un typedef ou un type construit" #~ msgid "type defaults to `int' in declaration of `%s'" #~ msgstr "dans la dclaration de %s , utilisation de int par dfaut pour le type" #~ msgid "both long and short specified for `%s'" #~ msgstr " long et short spcifis la fois pour %s " #~ msgid "long or short specified with char for `%s'" #~ msgstr " long ou short spcifi avec char pour %s " #~ msgid "long or short specified with floating type for `%s'" #~ msgstr " long ou short spcifi avec un type flottant pour %s " #~ msgid "the only valid combination is `long double'" #~ msgstr "la seule combinaison valide est long double " #~ msgid "both signed and unsigned specified for `%s'" #~ msgstr " %s est la fois sign et non sign" #~ msgid "long, short, signed or unsigned invalid for `%s'" #~ msgstr " long , short , signed ou unsigned invalide pour %s " #~ msgid "long, short, signed or unsigned used invalidly for `%s'" #~ msgstr " long , short , signed ou unsigned utilis incorrectement pour %s " #~ msgid "complex invalid for `%s'" #~ msgstr " complex invalide pour %s " #~ msgid "ISO C90 does not support complex types" #~ msgstr "ISO C90 ne permet pas les types complex " #~ msgid "ISO C does not support plain `complex' meaning `double complex'" #~ msgstr "ISO C ne permet pas d'utiliser complex la place de double complex " #~ msgid "ISO C does not support complex integer types" #~ msgstr "ISO C interdit le type d'entiers complexes" #~ msgid "duplicate `const'" #~ msgstr " const apparat en double" #~ msgid "duplicate `restrict'" #~ msgstr " restrict apparat en double" #~ msgid "duplicate `volatile'" #~ msgstr " volatile apparat en double" #~ msgid "multiple storage classes in declaration of `%s'" #~ msgstr "multiples classes de stockage dans la dclaration de %s " #~ msgid "function definition declared `auto'" #~ msgstr "dfinition de fonction dclar auto " #~ msgid "function definition declared `register'" #~ msgstr "dfinition de fonction dclare register " #~ msgid "function definition declared `typedef'" #~ msgstr "dfinition de fonction dclare typedef " #~ msgid "function definition declared `__thread'" #~ msgstr "dfinition de fonction dclare __thread " #~ msgid "storage class specified for structure field `%s'" #~ msgstr "classe de stockage spcifie pour le champ de structure %s " #~ msgid "storage class specified for parameter `%s'" #~ msgstr "classe de stockage spcifie pour le paramtre %s " #~ msgid "storage class specified for typename" #~ msgstr "classe de stockage spcifi pour un typename" #~ msgid "`%s' initialized and declared `extern'" #~ msgstr " %s initialis et dclar extern " #~ msgid "`%s' has both `extern' and initializer" #~ msgstr " %s a les deux extern et initialisateur" #~ msgid "file-scope declaration of `%s' specifies `auto'" #~ msgstr "la dclaration de l'tendue de fichier %s spcifie auto " #~ msgid "nested function `%s' declared `extern'" #~ msgstr "fonction imbrique %s dclare extern " #~ msgid "function-scope `%s' implicitly auto and declared `__thread'" #~ msgstr " %s dans le champ de la fonction est implicitement dclar auto, et dclar __thread " #~ msgid "static or type qualifiers in non-parameter array declarator" #~ msgstr "static ou qualificateurs de type dans un dclarateur de tableau n'tant pas un paramtre" #~ msgid "declaration of `%s' as array of voids" #~ msgstr "dclaration de %s comme un tableau de void " #~ msgid "declaration of `%s' as array of functions" #~ msgstr "dclaration de %s comme un tableau de fonctions" #~ msgid "invalid use of structure with flexible array member" #~ msgstr "utilisation invalide d'une structure ayant un membre flexible" #~ msgid "size of array `%s' has non-integer type" #~ msgstr "la taille du tableau %s n'est pas de type entier" #~ msgid "ISO C forbids zero-size array `%s'" #~ msgstr "ISO C interdit le tableau de taille zro %s " #~ msgid "size of array `%s' is negative" #~ msgstr "la taille du tableau %s est ngative" #~ msgid "ISO C90 forbids array `%s' whose size can't be evaluated" #~ msgstr "ISO C90 interdit le tableau %s dont la taille ne peut tre value" #~ msgid "ISO C90 forbids variable-size array `%s'" #~ msgstr "ISO C90 interdit le tableau %s de taille variable" #~ msgid "size of array `%s' is too large" #~ msgstr "la taille du tableau %s est trop grande" #~ msgid "ISO C90 does not support flexible array members" #~ msgstr "ISO C90 interdit les tableaux ayant des membres flexibles" #~ msgid "array type has incomplete element type" #~ msgstr "les lments du tableau sont de type incomplet" #~ msgid "`%s' declared as function returning a function" #~ msgstr " %s dclar comme une fonction retournant une fonction" #~ msgid "`%s' declared as function returning an array" #~ msgstr " %s dclar comme une fonction retournant un tableau" #~ msgid "ISO C forbids qualified void function return type" #~ msgstr "ISO C interdit d'utiliser un void qualifi en valeur retourner par la fonction" #~ msgid "type qualifiers ignored on function return type" #~ msgstr "qualificateurs de type ignors pour le type retourner par la fonction" #~ msgid "ISO C forbids qualified function types" #~ msgstr "ISO C interdit les types de fonction qualifis" #~ msgid "invalid type modifier within pointer declarator" #~ msgstr "modificateur de type invalide dans la dclaration de pointeur" #~ msgid "ISO C forbids const or volatile function types" #~ msgstr "ISO C interdit les fonction de type volatile ou constante" #~ msgid "variable or field `%s' declared void" #~ msgstr "variable ou champ %s dclar void " #~ msgid "attributes in parameter array declarator ignored" #~ msgstr "les attributs dans un dclarateur de tableau de paramtres sont ignors" #~ msgid "invalid type modifier within array declarator" #~ msgstr "modificateur invalide de type l'intrieur d'un dclarateur de tableau" #~ msgid "field `%s' declared as a function" #~ msgstr "champ %s dclar comme une fonction" #~ msgid "field `%s' has incomplete type" #~ msgstr "champ %s est de type incomplet" #~ msgid "invalid storage class for function `%s'" #~ msgstr "classe de stockage invalide pour la fonction %s " #~ msgid "`noreturn' function returns non-void value" #~ msgstr "fonction marque noreturn retourne une valeur n'tant pas de type void " #~ msgid "cannot inline function `main'" #~ msgstr "ne peut transformer main en fonction enligne" #~ msgid "variable previously declared `static' redeclared `extern'" #~ msgstr "variable prcdemment dclare static redclare extern " #~ msgid "%Jvariable '%D' declared `inline'" #~ msgstr "%Jvariable %D dclare inline " #~ msgid "thread-local storage not supported for this target" #~ msgstr "cette cible ne permet pas le stockage en local au thread" #~ msgid "function declaration isn't a prototype" #~ msgstr "la dclaration de fonction n'est pas un prototype valide" #~ msgid "parameter names (without types) in function declaration" #~ msgstr "noms de paramtres (sans type) dans la dclaration de fonction" #~ msgid "parameter `%s' has incomplete type" #~ msgstr "le paramtre %s a un type incomplet" #~ msgid "parameter has incomplete type" #~ msgstr "le paramtre a un type incomplet" #~ msgid "\"void\" as only parameter may not be qualified" #~ msgstr "\"void\" comme seul paramtre ne peut tre qualifi" #~ msgid "\"void\" must be the only parameter" #~ msgstr "\"void\" doit tre le seul paramtre" #~ msgid "%Jparameter \"%D\" has just a forward declaration" #~ msgstr "%Jparamtre %D n'a qu'une dclaration anticipe" #~ msgid "\"%s %s\" declared inside parameter list" #~ msgstr "\"%s %s\" dclare l'intrieur de la liste de paramtres" #~ msgid "anonymous %s declared inside parameter list" #~ msgstr "structure anonyme %s dclare l'intrieur de la liste des paramtres" #~ msgid "its scope is only this definition or declaration, which is probably not what you want" #~ msgstr "visible uniquement depuis cette dfinition ou dclaration, ce qui n'est probablement pas ce que vous dsirez" #~ msgid "redefinition of `union %s'" #~ msgstr "redfinition de union %s " #~ msgid "redefinition of `struct %s'" #~ msgstr "redfinition de struct %s " #~ msgid "declaration does not declare anything" #~ msgstr "dclaration ne dclarant rien du tout" #~ msgid "%Jduplicate member '%D'" #~ msgstr "%Jmembre %D est double" #~ msgid "%s defined inside parms" #~ msgstr "%s dfini l'intrieur des paramtres" #~ msgid "union" #~ msgstr "union" #~ msgid "structure" #~ msgstr "structure" #~ msgid "%s has no %s" #~ msgstr "%s n'a pas de %s" #~ msgid "struct" #~ msgstr "struct" #~ msgid "named members" #~ msgstr "membres nomms" #~ msgid "members" #~ msgstr "membres" #~ msgid "nested redefinition of `%s'" #~ msgstr "redfinition imbrique de %s " #~ msgid "%Jflexible array member in union" #~ msgstr "%Jmembre flexible de tableau dans l'union" #~ msgid "%Jflexible array member not at end of struct" #~ msgstr "%Jle membre flexible de tableau n'est pas la fin de la structure" #~ msgid "%Jflexible array member in otherwise empty struct" #~ msgstr "%Jmembre flexible de tableau dans une structure vide par ailleurs" #~ msgid "%Jinvalid use of structure with flexible array member" #~ msgstr "%Jutilisation invalide d'une structure ayant un membre flexible" #~ msgid "union cannot be made transparent" #~ msgstr "union ne peut pas tre rendu transparente" #~ msgid "redeclaration of `enum %s'" #~ msgstr "redclaration de enum %s " #~ msgid "enum defined inside parms" #~ msgstr "enum dfini l'intrieur des paramtres" #~ msgid "enumeration values exceed range of largest integer" #~ msgstr "valeurs d'numration excde les bornes du plus grand entier" #~ msgid "enumerator value for `%s' not integer constant" #~ msgstr "valeur de l'numrateur pour %s n'est pas une constante entire" #~ msgid "overflow in enumeration values" #~ msgstr "dbordement dans les valeurs de l'numration" #~ msgid "ISO C restricts enumerator values to range of `int'" #~ msgstr "ISO C restreint les valeurs de l'numrateur aux bornes d'un int " #~ msgid "return type is an incomplete type" #~ msgstr "le type du retour est incomplet" #~ msgid "return type defaults to `int'" #~ msgstr "le type du retour est int par dfaut" #~ msgid "%Jno previous prototype for '%D'" #~ msgstr "%Jaucun prototype prcdent pour %D " #~ msgid "%J'%D' was used with no prototype before its definition" #~ msgstr "%J %D a t utilis sans prototype avant sa dfinition" #~ msgid "%Jno previous declaration for '%D'" #~ msgstr "%Jaucune dclaration prcdente pour %D " #~ msgid "%J`%D' was used with no declaration before its definition" #~ msgstr "%J %D a t utilis sans dclaration avant sa dfinition" #~ msgid "%Jreturn type of '%D' is not `int'" #~ msgstr "%Jle type de retour de %D n'est pas int " #~ msgid "%Jfirst argument of '%D' should be `int'" #~ msgstr "%Jle premier argument de %D devrait tre int " #~ msgid "%Jsecond argument of '%D' should be 'char **'" #~ msgstr "%Jle second argument de %D devrait tre char ** " #~ msgid "%Jthird argument of '%D' should probably be 'char **'" #~ msgstr "%Jle troisime argument de %D devrait probablement tre char ** " #~ msgid "%J'%D' takes only zero or two arguments" #~ msgstr "%J %D prend soit aucun argument ou soit deux arguments" #~ msgid "%J'%D' is normally a non-static function" #~ msgstr "%J %D n'est pas normalement une fonction statique" #~ msgid "%Jold-style parameter declarations in prototyped function definition" #~ msgstr "%Jdclaration de paramtre d'ancien style dans la dfinition prototype de fonction" #~ msgid "%Jparameter name omitted" #~ msgstr "%Jnom de paramtre omis" #~ msgid "%Jparameter name missing from parameter list" #~ msgstr "%Jnom du paramtre manquant dans la liste des paramtres" #~ msgid "%J\"%D\" declared as a non-parameter" #~ msgstr "%J\"%D\" dclar comme un non paramtre" #~ msgid "%Jmultiple parameters named \"%D\"" #~ msgstr "%Jplusieurs paramtres nomms %D " #~ msgid "%Jparameter \"%D\" declared void" #~ msgstr "%Jparamtre \"%D\" dclar void " #~ msgid "%Jtype of \"%D\" defaults to \"int\"" #~ msgstr "%Jtype de %D est int par dfaut" #~ msgid "%Jparameter \"%D\" has incomplete type" #~ msgstr "%Jparamtre \"%D\" a un type incomplet" #~ msgid "%Jdeclaration for parameter \"%D\" but no such parameter" #~ msgstr "%Jdclaration du paramtre %D mais pas de tel paramtre" #~ msgid "number of arguments doesn't match prototype" #~ msgstr "le nombre d'arguments ne concorde pas avec celui du prototype" #~ msgid "%Hprototype declaration" #~ msgstr "%Hdclaration de prototype" #~ msgid "promoted argument \"%D\" doesn't match prototype" #~ msgstr "argument promu \"%D\" ne concorde pas avec le prototype" #~ msgid "argument \"%D\" doesn't match prototype" #~ msgstr "argument \"%D\" ne concorde pas avec le prototype" #~ msgid "no return statement in function returning non-void" #~ msgstr " return manquant dans une fonction devant retourner une valeur" #~ msgid "this function may return with or without a value" #~ msgstr "cette fonction devrait finir en retournant ou non une valeur" #~ msgid "'for' loop initial declaration used outside C99 mode" #~ msgstr "dclaration initiale de la boucle for utilise en dehors du mode C99" #~ msgid "'struct %s' declared in 'for' loop initial declaration" #~ msgstr " struct %s dclare dans la dclaration initiale de la boucle for " #~ msgid "'union %s' declared in 'for' loop initial declaration" #~ msgstr " union %s dclare dans la dclaration initiale de la boucle for " #~ msgid "'enum %s' declared in 'for' loop initial declaration" #~ msgstr " enum %s dclare dans la dclaration initiale de la boucle for " #~ msgid "%Jdeclaration of non-variable '%D' in 'for' loop initial declaration" #~ msgstr "%Jdclaration de %D (qui n'est pas une variable) dans la dclaration initiale de for " #~ msgid "%Jdeclaration of static variable '%D' in 'for' loop initial declaration" #~ msgstr "%Jdclaration de la variable statique %D dans la dclaration initiale de la boucle for " #~ msgid "%Jdeclaration of 'extern' variable '%D' in 'for' loop initial declaration" #~ msgstr "%Jdclaration de la variable externe %D dans la dclaration initiale for " #~ msgid "%Jredefinition of global '%D'" #~ msgstr "%Jredfinition globale de %D " #~ msgid "%J'%D' previously defined here" #~ msgstr "%J %D prcdemment dfini ici" #~ msgid "format string has invalid operand number" #~ msgstr "la chane de format a un nombre invalide d'oprandes" #~ msgid "function does not return string type" #~ msgstr "fonction ne retourne pas un type string " #~ msgid "format string arg not a string type" #~ msgstr "l'argument de la chane de format n'est pas de type string " #~ msgid "unrecognized format specifier" #~ msgstr "spcificateur de format non reconnu" #~ msgid "`%s' is an unrecognized format function type" #~ msgstr " %s a un format de type de fonction non reconnu" #~ msgid "'...' has invalid operand number" #~ msgstr " ... a un nombre invalide d'oprandes" #~ msgid "format string arg follows the args to be formatted" #~ msgstr "l'argument de la chane de format suit les arguments devant tre formats" #~ msgid "` ' flag" #~ msgstr "fanion " #~ msgid "the ` ' printf flag" #~ msgstr "le fanion de printf" #~ msgid "`+' flag" #~ msgstr "fanion + " #~ msgid "the `+' printf flag" #~ msgstr "le fanion + de printf" #~ msgid "`#' flag" #~ msgstr "fanion # " #~ msgid "the `#' printf flag" #~ msgstr "le fanion # de printf" #~ msgid "`0' flag" #~ msgstr "fanion 0 " #~ msgid "the `0' printf flag" #~ msgstr "le fanion 0 de printf" #~ msgid "`-' flag" #~ msgstr "fanion - " #~ msgid "the `-' printf flag" #~ msgstr "le fanion - de printf" #~ msgid "`'' flag" #~ msgstr "fanion ' " #~ msgid "the `'' printf flag" #~ msgstr "le fanion ' de printf" #~ msgid "`I' flag" #~ msgstr "fanion I " #~ msgid "the `I' printf flag" #~ msgstr "le fanion I de printf" #~ msgid "field width" #~ msgstr "largeur de champ" #~ msgid "field width in printf format" #~ msgstr "largeur de champ dans le format de printf" #~ msgid "precision" #~ msgstr "prcision" #~ msgid "precision in printf format" #~ msgstr "prcision dans le format de printf" #~ msgid "length modifier" #~ msgstr "modificateur de longueur" #~ msgid "length modifier in printf format" #~ msgstr "modificateur de longueur dans le format printf" #~ msgid "assignment suppression" #~ msgstr "suppression d'affectation" #~ msgid "the assignment suppression scanf feature" #~ msgstr "options de scanf pour la suppression d'affectation" #~ msgid "`a' flag" #~ msgstr "fanion a " #~ msgid "the `a' scanf flag" #~ msgstr "le fanion a de scanf" #~ msgid "field width in scanf format" #~ msgstr "largeur de champ dans le format de scanf" #~ msgid "length modifier in scanf format" #~ msgstr "modificateur de longueur dans le format de scanf" #~ msgid "the `'' scanf flag" #~ msgstr "la fanion ' de scanf" #~ msgid "the `I' scanf flag" #~ msgstr "le fanion I de scanf" #~ msgid "`_' flag" #~ msgstr "fanion _ " #~ msgid "the `_' strftime flag" #~ msgstr "le fanion _ de strftime" #~ msgid "the `-' strftime flag" #~ msgstr "le fanion - de strftime" #~ msgid "the `0' strftime flag" #~ msgstr "le fanion 0 de strftime" #~ msgid "`^' flag" #~ msgstr "fanion ^ " #~ msgid "the `^' strftime flag" #~ msgstr "la fanion ^ de strftime" #~ msgid "the `#' strftime flag" #~ msgstr "le fanion # de strftime" #~ msgid "field width in strftime format" #~ msgstr "largeur de champ dans le format de strftime" #~ msgid "`E' modifier" #~ msgstr "modificateur E " #~ msgid "the `E' strftime modifier" #~ msgstr "le modificateur E de strftime" #~ msgid "`O' modifier" #~ msgstr "modificateur O " #~ msgid "the `O' strftime modifier" #~ msgstr "le modificateur O de strftime" #~ msgid "the `O' modifier" #~ msgstr "le modificateur O " #~ msgid "fill character" #~ msgstr "caractre de remplissage" #~ msgid "fill character in strfmon format" #~ msgstr "caractre de remplissage dans le format de strfmon" #~ msgid "the `^' strfmon flag" #~ msgstr "le fanion ^ de strfmon" #~ msgid "the `+' strfmon flag" #~ msgstr "le fanion + de strfmon" #~ msgid "`(' flag" #~ msgstr "fanion ( " #~ msgid "the `(' strfmon flag" #~ msgstr "le fanion ( de strfmon" #~ msgid "`!' flag" #~ msgstr "fanion ! " #~ msgid "the `!' strfmon flag" #~ msgstr "le fanion ! de strfmon" #~ msgid "the `-' strfmon flag" #~ msgstr "le fanion - de strfmon" #~ msgid "field width in strfmon format" #~ msgstr "largeur de champ dans le format de strfmon" #~ msgid "left precision" #~ msgstr "prcision de gauche" #~ msgid "left precision in strfmon format" #~ msgstr "prcision de gauche dans le format de strfmon" #~ msgid "right precision" #~ msgstr "prcision de droite" #~ msgid "right precision in strfmon format" #~ msgstr "prcision de droite dans le format de strfmon" #~ msgid "length modifier in strfmon format" #~ msgstr "modificateur de longueur dans le format de strfmon" #~ msgid "function might be possible candidate for `%s' format attribute" #~ msgstr "la fonction est peut tre candidate pour l'attribut de format de %s " #~ msgid "missing $ operand number in format" #~ msgstr "$ manquant dans le format pour l'oprande du nombre" #~ msgid "%s does not support %%n$ operand number formats" #~ msgstr "%s ne permet pas le format d'oprande de nombre %%n$" #~ msgid "operand number out of range in format" #~ msgstr "oprande de nombre au del de la limite dans le format" #~ msgid "format argument %d used more than once in %s format" #~ msgstr "argument de format %d utilis plus d'une fois dans le format %s" #~ msgid "format argument %d unused before used argument %d in $-style format" #~ msgstr "argument de format %d inutilis avant l'utilisation de l'argument %d dans le format de style $" #~ msgid "format not a string literal, format string not checked" #~ msgstr "le format n'est pas une chane littrale, le format n'est pas vrif" #~ msgid "format not a string literal and no format arguments" #~ msgstr "le format n'est pas une chane littrale et pas d'argument de format" #~ msgid "format not a string literal, argument types not checked" #~ msgstr "le format n'est pas une chane littrale, le type des arguments n'est pas vrifi" #~ msgid "too many arguments for format" #~ msgstr "trop d'arguments pour le format" #~ msgid "unused arguments in $-style format" #~ msgstr "arguments inutiliss dans le format de style $" #~ msgid "zero-length %s format string" #~ msgstr "chane de format de longueur nulle %s" #~ msgid "format is a wide character string" #~ msgstr "le format est une chane large de caractres" #~ msgid "unterminated format string" #~ msgstr "chane de format non termine" #~ msgid "embedded `\\0' in format" #~ msgstr " \\0 inclu dans le format" #~ msgid "spurious trailing `%%' in format" #~ msgstr "des caractres %% douteux tranent dans le format" #~ msgid "repeated %s in format" #~ msgstr "%s rpt dans le format" #~ msgid "missing fill character at end of strfmon format" #~ msgstr "caractre de remplissage manquant la fin du format pour strfmon" #~ msgid "too few arguments for format" #~ msgstr "trop peu d'arguments dans le format" #~ msgid "zero width in %s format" #~ msgstr "largeur zro dans le format %s" #~ msgid "empty left precision in %s format" #~ msgstr "prcision de gauche vide dans le format %s" #~ msgid "field precision" #~ msgstr "champ de prcision" #~ msgid "empty precision in %s format" #~ msgstr "prcision vide dans le format %s" #~ msgid "%s does not support the `%s' %s length modifier" #~ msgstr "%s ne supporte pas %s %s comme modificateur de longueur" #~ msgid "conversion lacks type at end of format" #~ msgstr "il manque un type pour la conversion la fin du format" #~ msgid "unknown conversion type character `%c' in format" #~ msgstr "type de caractre de conversion inconnu %c dans le format" #~ msgid "unknown conversion type character 0x%x in format" #~ msgstr "type de caractre de conversion inconnu 0x%x dans le format" #~ msgid "%s does not support the `%%%c' %s format" #~ msgstr "%s ne supporte pas le format %%%c %s" #~ msgid "%s used with `%%%c' %s format" #~ msgstr "%s utilis avec le format %%%c %s" #~ msgid "%s does not support %s" #~ msgstr "%s ne supporte pas %s" #~ msgid "%s does not support %s with the `%%%c' %s format" #~ msgstr "%s ne supporte pas %s avec le format %%%c %s " #~ msgid "%s ignored with %s and `%%%c' %s format" #~ msgstr "%s ignor avec %s et le format %%%c %s" #~ msgid "%s ignored with %s in %s format" #~ msgstr "%s ignor avec %s dans le format %s" #~ msgid "use of %s and %s together with `%%%c' %s format" #~ msgstr "utilisation de %s et de %s ensemble dans le format %%%c %s" #~ msgid "use of %s and %s together in %s format" #~ msgstr "utilisation de %s et de %s ensemble dans le format %s" #~ msgid "`%%%c' yields only last 2 digits of year in some locales" #~ msgstr " %%%c laisse seulement les 2 derniers chiffres de l'anne avec certaines locales" #~ msgid "`%%%c' yields only last 2 digits of year" #~ msgstr " %%%c laisse seulement les 2 derniers chiffres de l'anne" #~ msgid "no closing `]' for `%%[' format" #~ msgstr "pas de ] fermant pour le format %%[ " #~ msgid "use of `%s' length modifier with `%c' type character" #~ msgstr "utilisation du modificateur de longueur %s avec le type de caractre %c " #~ msgid "%s does not support the `%%%s%c' %s format" #~ msgstr "%s ne supporte par le format %%%s%c %s" #~ msgid "operand number specified with suppressed assignment" #~ msgstr "nombre d'oprandes spcifi avec des affectations suprimes" #~ msgid "operand number specified for format taking no argument" #~ msgstr "nombre d'oprandes spcifi pour un format n'acceptant aucun argument" #~ msgid "writing through null pointer (arg %d)" #~ msgstr "criture travers un pointeur nul (arg %d)" #~ msgid "reading through null pointer (arg %d)" #~ msgstr "lecture l'aide d'un pointeur nul (arg %d)" #~ msgid "writing into constant object (arg %d)" #~ msgstr "criture dans un objet constant (arg %d)" #~ msgid "extra type qualifiers in format argument (arg %d)" #~ msgstr "qualificateur de type additionnel dans l'argument du format (arg %d)" #~ msgid "format argument is not a pointer (arg %d)" #~ msgstr "l'argument de format n'est pas un pointeur (arg %d)" #~ msgid "format argument is not a pointer to a pointer (arg %d)" #~ msgstr "l'argument de format n'est pas un pointeur de pointeur (arg %d)" #~ msgid "pointer" #~ msgstr "pointeur" #~ msgid "different type" #~ msgstr "type diffrent" #~ msgid "%s is not type %s (arg %d)" #~ msgstr "%s n'est pas de type %s (arg %d)" #~ msgid "%s format, %s arg (arg %d)" #~ msgstr "format %s, arg %s (arg %d)" #~ msgid "args to be formatted is not '...'" #~ msgstr "les arguments devant tre formats ne sont pas ... " #~ msgid "strftime formats cannot format arguments" #~ msgstr "Les formats de strftime ne peuvent pas formater d'argument" #~ msgid "ignoring duplicate directory \"%s\"\n" #~ msgstr "le rpertoire %s est ignor car prsent deux fois\n" #~ msgid " as it is a non-system directory that duplicates a system directory\n" #~ msgstr " car il s'agit d'un rpertoire non systme dupliquant un rpertoire systme\n" #~ msgid "ignoring nonexistent directory \"%s\"\n" #~ msgstr "le rpertoire %s est ignor car inexistant\n" #~ msgid "#include \"...\" search starts here:\n" #~ msgstr "la recherche pour #include \"...\" dbute ici :\n" #~ msgid "#include <...> search starts here:\n" #~ msgstr "la recherche pour #include <...> dbute ici:\n" #~ msgid "End of search list.\n" #~ msgstr "Fin de la liste de recherche.\n" #~ msgid "badly nested C headers from preprocessor" #~ msgstr "en-ttes C du prprocesseur incorrectement imbriqus" #~ msgid "ignoring #pragma %s %s" #~ msgstr "#pragma %s %s ignor" #~ msgid "%Hstray '@' in program" #~ msgstr "%H @ perdu dans le programme" #~ msgid "stray '%c' in program" #~ msgstr " %c perdu dans le programme" #~ msgid "stray '\\%o' in program" #~ msgstr " \\%o perdu dans le programme" #~ msgid "this decimal constant is unsigned only in ISO C90" #~ msgstr "cette constante dcimale est unsigned seulement en C90 ISO" #~ msgid "this decimal constant would be unsigned in ISO C90" #~ msgstr "cette constante dcimale serait unsigned en C90 ISO" #~ msgid "integer constant is too large for \"%s\" type" #~ msgstr "constante entire trop grande pour le type %s " #~ msgid "floating constant exceeds range of \"%s\"" #~ msgstr "constante en nombre flottant excdant les limites de %s " #~ msgid "traditional C rejects string constant concatenation" #~ msgstr "le C traditionel rejette la concatnation de chanes de constantes" #~ msgid "%Jfunction '%F' can never be inlined because it is suppressed using -fno-inline" #~ msgstr "%Jfonction %F ne jamais tre enligne parce qu'elle supprime l'utilisation de -fno-inline" #~ msgid "%Jfunction '%F' can never be inlined because it might not be bound within this unit of translation" #~ msgstr "%Jfonction %F ne jamais tre enligne parce qu'elle ne peut tre li dans cette unit de traduction" #~ msgid "%Jfunction '%F' can never be inlined because it uses attributes conflicting with inlining" #~ msgstr "%Jfonction %F ne jamais tre enligne parce qu'elle utilise un attribut en conflit avec l'enlignage" #~ msgid "%Jfunction '%F' can never be inlined because it has pending sizes" #~ msgstr "%Jfonction %F ne jamais tre enligne parce qu'elle a des tailles en attente" #~ msgid "%Jnested function '%F' can never be inlined because it has possibly saved pending sizes" #~ msgstr "%Jfonction imbriqu %F ne peut jamais tre enligne parce qu'ella possiblement sauvegard des tailles en attente" #~ msgid "no class name specified with \"%s\"" #~ msgstr "aucun nom de classe spcifi avec \"%s\"" #~ msgid "assertion missing after \"%s\"" #~ msgstr "assertion manquante aprs \"%s\"" #~ msgid "macro name missing after \"%s\"" #~ msgstr "nom de macro manquant aprs \"%s\"" #~ msgid "missing path after \"%s\"" #~ msgstr "cible manquante aprs \"%s\"" #~ msgid "missing filename after \"%s\"" #~ msgstr "nom de fichier manquant aprs \"%s\"" #~ msgid "missing makefile target after \"%s\"" #~ msgstr "cible manquante dans le makefile aprs \"%s\"" #~ msgid "-I- specified twice" #~ msgstr "-I- spcifi deux fois" #~ msgid "switch \"%s\" is no longer supported" #~ msgstr "l'option %s n'est plus supporte" #~ msgid "-fhandle-exceptions has been renamed -fexceptions (and is now on by default)" #~ msgstr "-fhandle-exceptions a t renomm -fexceptions (et est maintenant utilis par dfaut)" #~ msgid "output filename specified twice" #~ msgstr "nom du fichier de sortie spcifi deux fois" #~ msgid "-Wformat-y2k ignored without -Wformat" #~ msgstr "-Wformat-y2k ignore sans -Wformat" #~ msgid "-Wformat-extra-args ignored without -Wformat" #~ msgstr "-Wformat-extra-args ignore sans -Wformat" #~ msgid "-Wformat-zero-length ignored without -Wformat" #~ msgstr "-Wformat-zero-length ignore sans -Wformat" #~ msgid "-Wformat-nonliteral ignored without -Wformat" #~ msgstr "-Wformat-nonliteral ignore sans -Wformat" #~ msgid "-Wformat-security ignored without -Wformat" #~ msgstr "-Wformat-security ignore sans -Wformat" #~ msgid "-Wmissing-format-attribute ignored without -Wformat" #~ msgstr "-Wmissing-format-attribute ignore sans -Wformat" #~ msgid "opening output file %s: %m" #~ msgstr "ouverture du fichier de sortie %s: %m" #~ msgid "too many filenames given. Type %s --help for usage" #~ msgstr "trop de noms de fichiers. Taper %s --help pour en connatre l'usage" #~ msgid "YYDEBUG not defined" #~ msgstr "YYDEBUG n'est pas dfini" #~ msgid "opening dependency file %s: %m" #~ msgstr "ouverture du fichier de dpendances %s: %m" #~ msgid "closing dependency file %s: %m" #~ msgstr "fermeture du fichier de dpendances %s: %m" #~ msgid "when writing output to %s: %m" #~ msgstr "lors de l'criture de la sortie dans %s: %m" #~ msgid "to generate dependencies you must specify either -M or -MM" #~ msgstr "pour gnrer les dpendances, vous devez spcifier -M ou -MM" #~ msgid "" #~ msgstr "" #~ msgid "" #~ msgstr "" #~ msgid "too late for # directive to set debug directory" #~ msgstr "il est trop tard pour la directive # pour fixer un rpertoire de mise au point" #~ msgid "syntax error" #~ msgstr "erreur de syntaxe" # FIXME #~ msgid "syntax error: cannot back up" #~ msgstr "erreur de syntaxe : impossible de reculer" #~ msgid "ISO C forbids an empty source file" #~ msgstr "ISO C interdit un fichier source vide" #~ msgid "argument of `asm' is not a constant string" #~ msgstr "l'argument de asm n'est pas une chane de constante" #~ msgid "ISO C forbids data definition with no type or storage class" #~ msgstr "ISO C interdit la dfinition de donnes sans type ni classe de stockage" #~ msgid "data definition has no type or storage class" #~ msgstr "la dfinition de donnes n'a pas de type ni de classe de stockage" #~ msgid "ISO C does not allow extra `;' outside of a function" #~ msgstr "ISO C ne permet pas de ; additionnel en dehors d'une fonction" #~ msgid "`sizeof' applied to a bit-field" #~ msgstr " sizeof appliqu un champ de bits" #~ msgid "ISO C forbids omitting the middle term of a ?: expression" #~ msgstr "ISO C interdit l'omission du terme central de l'expression ?:" # FIXME #~ msgid "ISO C90 forbids compound literals" #~ msgstr "ISO C90 interdit les mots composs" #~ msgid "ISO C forbids braced-groups within expressions" #~ msgstr "ISO C interdit les groupes d'accolades l'intrieur d'expressions" #~ msgid "first argument to __builtin_choose_expr not a constant" #~ msgstr "le premier argument de __builtin_choose_expr n'est pas une constante" #~ msgid "traditional C rejects ISO C style function definitions" #~ msgstr "le C traditionel rejette les dfinitions de fonction de style ISO C" #~ msgid "old-style parameter declaration" #~ msgstr "dclaration de paramtre d'un style dsuet" #~ msgid "`%s' is not at beginning of declaration" #~ msgstr " %s n'est pas au dbut de la dclaration" #~ msgid "`typeof' applied to a bit-field" #~ msgstr " typeof appliqu un champ de bits" #~ msgid "ISO C forbids empty initializer braces" #~ msgstr "ISO C interdit d'initialiser avec des accolades vides" #~ msgid "ISO C90 forbids specifying subobject to initialize" #~ msgstr "ISO C90 interdit de spcifier des sous-objets initialiser" #~ msgid "obsolete use of designated initializer without `='" #~ msgstr "utilisation obsolte d'une initialisation dsigne sans = " #~ msgid "obsolete use of designated initializer with `:'" #~ msgstr "utilisation obsolte d'une initialisation dsigne avec : " #~ msgid "ISO C forbids specifying range of elements to initialize" #~ msgstr "ISO C interdit de spcifier les bornes des lments initaliser" #~ msgid "ISO C forbids nested functions" #~ msgstr "ISO C interdit les fonctions imbriques" #~ msgid "ISO C forbids forward references to `enum' types" #~ msgstr "ISO C interdit les rfrences anticipe vers un type enum " #~ msgid "comma at end of enumerator list" #~ msgstr "virgule la fin de liste d'numerateurs" #~ msgid "no semicolon at end of struct or union" #~ msgstr "pas de point virgule la fin de la structure ou de l'union" #~ msgid "extra semicolon in struct or union specified" #~ msgstr "point virgule superflu dans la structure ou dans l'union" #~ msgid "ISO C doesn't support unnamed structs/unions" #~ msgstr "ISO C ne permet pas les structures et unions sans nom" #~ msgid "ISO C forbids member declarations with no members" #~ msgstr "ISO C interdit les dclarations de membre sans aucun membre" #~ msgid "label at end of compound statement" #~ msgstr "tiquette la fin d'une dclaration compose" #~ msgid "ISO C90 forbids mixed declarations and code" #~ msgstr "ISO C89 interdit les mlanges de dclarations et de code" #~ msgid "ISO C forbids label declarations" #~ msgstr "ISO C interdit la dclaration d'tiquette" #~ msgid "braced-group within expression allowed only inside a function" #~ msgstr "groupe entre accolades l'intrieur d'expression permis seulement l'intrieur d'une fonction" #~ msgid "empty body in an else-statement" #~ msgstr "le corps du else est vide" #~ msgid "%Hempty body in an if-statement" #~ msgstr "%Hle corps de la dclaration du if est vide" #~ msgid "break statement not within loop or switch" #~ msgstr "mot-cl break l'extrieur de toute boucle ou switch " #~ msgid "continue statement not within a loop" #~ msgstr "mot-cl continue l'extrieur de toute boucle" #~ msgid "ISO C forbids `goto *expr;'" #~ msgstr "ISO C interdit goto *expr; " #~ msgid "ISO C requires a named argument before `...'" #~ msgstr "ISO C requiert un argument nomm devant ... " #~ msgid "`...' in old-style identifier list" #~ msgstr " ... dans une liste d'identificateurs de style ancien" #~ msgid "parse error; also virtual memory exhausted" #~ msgstr "erreur d'analyse syntaxique; et la mmoire virtuelle est puise" #~ msgid "parse error" #~ msgstr "erreur d'analyse syntaxique" #~ msgid "parser stack overflow" #~ msgstr "dbordement de la pile de l'analyseur syntaxique" #~ msgid "syntax error at '%s' token" #~ msgstr "erreur de syntaxe l'lment lexical %s " #~ msgid "can't create precompiled header %s: %m" #~ msgstr "ne peut crer une en-tte prcompile %s: %m" #~ msgid "can't write to %s: %m" #~ msgstr "ne peut crire dans %s: %m" #~ msgid "`%s' is not a valid output file" #~ msgstr " %s n'est pas un nom de fichier valide" #~ msgid "can't write %s: %m" #~ msgstr "ne peut crire dans %s: %m" #~ msgid "can't seek in %s: %m" #~ msgstr "ne peut se positionner dans %s: %m" #~ msgid "can't read %s: %m" #~ msgstr "ne peut lire %s: %m" #~ msgid "%s: not compatible with this GCC version" #~ msgstr "%s: n'est pas compatible avec cette version de GCC" #~ msgid "%s: not for %s" #~ msgstr "%s: non pour %s" #~ msgid "%s: not a PCH file" #~ msgstr "%s: n'est pas un fichier PCH" #~ msgid "%s: created on host `%.*s', but used on host `%s'" #~ msgstr "%s: cr sur l'hte %.*s , mais utilis sur l'hte %s " #~ msgid "%s: created for target `%.*s', but used for target `%s'" #~ msgstr "%s: cr pour la cible %.*s , mais utilis pour la cible %s " #~ msgid "%s: created by version `%.*s', but this is version `%s'" #~ msgstr "%s: cr pour la version %.*s , mais utilis avec la version %s " #~ msgid "%s: created using different flags" #~ msgstr "%s: cr en utilisant des fanions diffrents" #~ msgid "%s: created with -g%s, but used with -g%s" #~ msgstr "%s: cr avec -g%s, mais utilis avec -g%s" #~ msgid "%s: had text segment at different address" #~ msgstr "%s: a un segment texte une adresse diffrente" # I18N #~ msgid "calling fdopen" #~ msgstr "appel de fdopen()" #~ msgid "reading" #~ msgstr "en lecture" #~ msgid "#pragma pack (pop) encountered without matching #pragma pack (push, )" #~ msgstr "#pragma pack (pop) rencontr sans #pragma pack (push, ) correspondant" #~ msgid "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, )" #~ msgstr "#pragma pack(pop, %s) rencontr sans #pragma pack(push, %s, ) correspondant" #~ msgid "#pragma pack(push[, id], ) is not supported on this target" #~ msgstr "#pragma pack(push[, id], ) n'est pas permis sur cette cible" #~ msgid "#pragma pack(pop[, id], ) is not supported on this target" #~ msgstr "#pragma pack(pop[, id], ) n'est pas permis sur cette cible" #~ msgid "missing '(' after '#pragma pack' - ignored" #~ msgstr " ( manquante aprs #pragma pack - ignor" #~ msgid "malformed '#pragma pack' - ignored" #~ msgstr " #pragma pack mal compose - ignor" #~ msgid "malformed '#pragma pack(push[, id], )' - ignored" #~ msgstr " #pragma pack(push[, id], ) mal compose - ignor" #~ msgid "malformed '#pragma pack(pop[, id])' - ignored" #~ msgstr " #pragma pack(pop[, id]) mal compose, ignor" #~ msgid "unknown action '%s' for '#pragma pack' - ignored" #~ msgstr "action %s inconnue pour #pragma pack - ignor" #~ msgid "junk at end of '#pragma pack'" #~ msgstr "rebut la fin de #pragma pack " #~ msgid "alignment must be a small power of two, not %d" #~ msgstr "l'alignement doit tre une petite puissance de 2, pas %d" #~ msgid "%Japplying #pragma weak '%D' after first use results in unspecified behavior" #~ msgstr "%Japplication de la #pragma weak %D aprs la premire utilisation conduit un comportement non spcifi" #~ msgid "malformed #pragma weak, ignored" #~ msgstr "#pragma weak mal compose, ignor" #~ msgid "junk at end of #pragma weak" #~ msgstr "rebut la fin de #pragma weak" #~ msgid "malformed #pragma redefine_extname, ignored" #~ msgstr "#pragma redefine_extname mal compose, ignor" #~ msgid "junk at end of #pragma redefine_extname" #~ msgstr "rebut la fin de #pragma redefine_extname" #~ msgid "#pragma redefine_extname conflicts with declaration" #~ msgstr "#pragma redefine_extname en conflit avec la dclaration" #~ msgid "malformed #pragma extern_prefix, ignored" #~ msgstr "#pragma extern_prefix mal compose, ignor" #~ msgid "junk at end of #pragma extern_prefix" #~ msgstr "rebut la fin de #pragma extern_prefix" #~ msgid "asm declaration conflicts with previous rename" #~ msgstr "dclaration asm en conflit avec le changement de nom prcdent" #~ msgid "destructor needed for `%D'" #~ msgstr "destructeur requis pour %D " #~ msgid "where case label appears here" #~ msgstr "o les tiquettes de case apparaissent ici" # FIXME #~ msgid "(enclose actions of previous case statements requiring destructors in their own scope.)" #~ msgstr "(les actions dans les case prcdents requierent des destructeurs dans leur propre champ.)" #~ msgid "%s qualifier ignored on asm" #~ msgstr "%s qualificateur ignor avec asm" # FIXME: c'est de l'assembleur ? #~ msgid "will never be executed" #~ msgstr "ne sera jamais excut" #~ msgid "`%s' has an incomplete type" #~ msgstr " %s a un type incomplet" #~ msgid "invalid use of void expression" #~ msgstr "utilisation invalide d'expression void" #~ msgid "invalid use of flexible array member" #~ msgstr "utilisation invalide d'un membre flexible de tableau" #~ msgid "invalid use of array with unspecified bounds" #~ msgstr "utilisation invalide d'un tableau sans borne spcifie" #~ msgid "invalid use of undefined type `%s %s'" #~ msgstr "utilisation invalide d'un type indfini %s %s " #~ msgid "invalid use of incomplete typedef `%s'" #~ msgstr "utilisation invalide d'un typedef incomplet %s " #~ msgid "function types not truly compatible in ISO C" #~ msgstr "types de fonction pas vraiment compatibles en C ISO" #~ msgid "types are not quite compatible" #~ msgstr "les types ne sont pas vraiment compatibles" #~ msgid "function return types not compatible due to `volatile'" #~ msgstr "les types retourns d'une fonction ne sont pas compatibles en raison de volatile " #~ msgid "arithmetic on pointer to an incomplete type" #~ msgstr "arithmtique sur un pointeur vers un type incomplet" #~ msgid "%s has no member named `%s'" #~ msgstr "%s n'a pas de membre nomm %s " #~ msgid "request for member `%s' in something not a structure or union" #~ msgstr "requte du membre %s dans quelque chose n'tant ni une structure ni une union" #~ msgid "dereferencing pointer to incomplete type" #~ msgstr "drfrencement d'un pointeur de type incomplet" #~ msgid "dereferencing `void *' pointer" #~ msgstr "drfrencement d'un pointeur void * " #~ msgid "invalid type argument of `%s'" #~ msgstr "type d'argument invalide pour %s " #~ msgid "subscript missing in array reference" #~ msgstr "indice manquant dans la rfrence du tableau" #~ msgid "array subscript has type `char'" #~ msgstr "l'indice du tableau est de type char " #~ msgid "array subscript is not an integer" #~ msgstr "l'indice du tableau n'est pas un entier" #~ msgid "ISO C forbids subscripting `register' array" #~ msgstr "ISO C interdit de sous-indicer des tableaux register " #~ msgid "ISO C90 forbids subscripting non-lvalue array" #~ msgstr "ISO C90 interdit d'indicer de tableau n'tant pas membre gauche" #~ msgid "subscript has type `char'" #~ msgstr "indice de type char " #~ msgid "subscripted value is neither array nor pointer" #~ msgstr "la valeur indice n'est ni un tableau ni un pointeur" #~ msgid "local declaration of `%s' hides instance variable" #~ msgstr "la dclaration locale de %s masque l'instance d'une variable" #~ msgid "called object is not a function" #~ msgstr "l'objet appel n'est pas une fonction" #~ msgid "function called through a non-compatible type" #~ msgstr "fonction appelle travers un type non compatible" #~ msgid "too many arguments to function" #~ msgstr "trop d'arguments pour la fonction" #~ msgid "type of formal parameter %d is incomplete" #~ msgstr "le type du paramtre formel %d est incomplet" #~ msgid "%s as integer rather than floating due to prototype" #~ msgstr "%s est entier plutt que flottant en raison du prototype" #~ msgid "%s as integer rather than complex due to prototype" #~ msgstr "%s est entier plutt que complexe en raison du prototype" #~ msgid "%s as complex rather than floating due to prototype" #~ msgstr "%s est complexe plutt que flottant en raison du prototype" #~ msgid "%s as floating rather than integer due to prototype" #~ msgstr "%s est flottant plutt qu'entier en raison du prototype" #~ msgid "%s as complex rather than integer due to prototype" #~ msgstr "%s est complexe plutt qu'entier en raison du prototype" #~ msgid "%s as floating rather than complex due to prototype" #~ msgstr "%s est flottant plutt que complexe en raison du prototype" #~ msgid "%s as `float' rather than `double' due to prototype" #~ msgstr "%s est float plutt qu'un double en raison du prototype" #~ msgid "%s with different width due to prototype" #~ msgstr "%s a une largeur diffrente en raison du prototype" #~ msgid "%s as unsigned due to prototype" #~ msgstr "%s est non sign en raison du prototype" #~ msgid "%s as signed due to prototype" #~ msgstr "%s est sign en raison du prototype" #~ msgid "too few arguments to function" #~ msgstr "trop peu d'arguments pour la fonction" #~ msgid "suggest parentheses around + or - inside shift" #~ msgstr "parenthses suggres autour de + ou - l'intrieur du dcalage" #~ msgid "suggest parentheses around && within ||" #~ msgstr "parenthses suggres autour de && l'intrieur de ||" #~ msgid "suggest parentheses around arithmetic in operand of |" #~ msgstr "parenthses suggres autour de l'arithmtique dans l'oprande de |" #~ msgid "suggest parentheses around comparison in operand of |" #~ msgstr "parenthses suggres autour de la comparaison dans l'oprande de |" #~ msgid "suggest parentheses around arithmetic in operand of ^" #~ msgstr "parenthses suggres autour de l'arithmtique dans l'oprande de ^" #~ msgid "suggest parentheses around comparison in operand of ^" #~ msgstr "parenthses suggres autour de la comparaison dans l'oprande de ^" #~ msgid "suggest parentheses around + or - in operand of &" #~ msgstr "parenthses suggres autour de + ou - dans l'oprande de &" #~ msgid "suggest parentheses around comparison in operand of &" #~ msgstr "parenthses suggres autour de la comparaison dans l'oprande de &" #~ msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" #~ msgstr "les comparaisons telles que X<=Y<=Z n'ont pas de signification mathmatique" #~ msgid "pointer of type `void *' used in subtraction" #~ msgstr "pointeur de type void * utilis dans une soustraction" #~ msgid "pointer to a function used in subtraction" #~ msgstr "pointeur vers un fonction utilis dans une soustraction" #~ msgid "wrong type argument to unary plus" #~ msgstr "type d'argument erron pour le plus unaire" #~ msgid "wrong type argument to unary minus" #~ msgstr "type d'argument erron pour le moins unaire" #~ msgid "ISO C does not support `~' for complex conjugation" #~ msgstr "ISO C ne permet pas d'utiliser ~ pour le complexe conjugu" #~ msgid "wrong type argument to bit-complement" #~ msgstr "type d'argument erron pour un complment de bit" #~ msgid "wrong type argument to abs" #~ msgstr "type d'argument erron pour abs" #~ msgid "wrong type argument to conjugation" #~ msgstr "type d'argument erron pour la conjugaison" #~ msgid "wrong type argument to unary exclamation mark" #~ msgstr "type d'argument erron pour le point d'exclamation unaire" #~ msgid "ISO C does not support `++' and `--' on complex types" #~ msgstr "ISO C ne permet pas ++ ni -- sur les types complexes" #~ msgid "wrong type argument to increment" #~ msgstr "type d'argument erron pour un incrment" #~ msgid "wrong type argument to decrement" #~ msgstr "type d'argument erron pour un dcrment" #~ msgid "increment of pointer to unknown structure" #~ msgstr "incrment d'un pointeur vers une structure inconnue" #~ msgid "decrement of pointer to unknown structure" #~ msgstr "dcrment d'un pointeur vers une structure inconnue" #~ msgid "invalid lvalue in unary `&'" #~ msgstr "membre gauche invalide pour le & unaire" #~ msgid "attempt to take address of bit-field structure member `%s'" #~ msgstr "tentative pour prendre l'adresse du membre %s d'une structure de champ de bits" #~ msgid "use of conditional expressions as lvalues is deprecated" #~ msgstr "utilisation d'expressions conditionnelles comme lvalues est obsolte" #~ msgid "use of compound expressions as lvalues is deprecated" #~ msgstr "utilisation d'expressions composes comme lvalues est obsolte" #~ msgid "use of cast expressions as lvalues is deprecated" #~ msgstr "utilisation de transtypage d'expressions comme lvalues est obsolte" #~ msgid "%s of read-only member `%s'" #~ msgstr "%s d'un membre en lecture seule %s " #~ msgid "%s of read-only variable `%s'" #~ msgstr "%s d'une variable en lecture seule %s " #~ msgid "%s of read-only location" #~ msgstr "%s d'une position en lecture seule" #~ msgid "cannot take address of bit-field `%s'" #~ msgstr "ne peut prendre l'adresse du champ de bits %s " #~ msgid "global register variable `%s' used in nested function" #~ msgstr "variable globale de registre %s utilise dans une fonction imbrique" #~ msgid "register variable `%s' used in nested function" #~ msgstr "variable de registre %s utilise dans une fonction imbrique" #~ msgid "address of global register variable `%s' requested" #~ msgstr "adresse d'une variable registre globale %s requise" #~ msgid "cannot put object with volatile field into register" #~ msgstr "impossible de mettre un objet avec un champ volatile dans un registre" #~ msgid "address of register variable `%s' requested" #~ msgstr "adresse d'une variable registre %s requise" #~ msgid "signed and unsigned type in conditional expression" #~ msgstr "type sign et non sign dans une expression conditionnelle" #~ msgid "ISO C forbids conditional expr with only one void side" #~ msgstr "ISO C interdit une expression conditionnelle dont un seul ct est void " #~ msgid "ISO C forbids conditional expr between `void *' and function pointer" #~ msgstr "ISO C interdit une expression conditionnelle entre void * et un pointeur de fonction" #~ msgid "pointer type mismatch in conditional expression" #~ msgstr "non concordance de type de pointeurs dans un expression conditionnelle" #~ msgid "pointer/integer type mismatch in conditional expression" #~ msgstr "non concordance entre pointeur et entier dans une expression conditionnelle" #~ msgid "type mismatch in conditional expression" #~ msgstr "non concordance de type dans une expression conditionnelle" #~ msgid "left-hand operand of comma expression has no effect" #~ msgstr "l'oprande gauche de la virgule n'a pas d'effet" #~ msgid "cast specifies array type" #~ msgstr "le transtypage spcifie un type de tableau" #~ msgid "cast specifies function type" #~ msgstr "le transtypage spcifie un type de fonction" #~ msgid "ISO C forbids casting nonscalar to the same type" #~ msgstr "ISO C interdit le transtypage d'un type non scalaire vers lui-mme" #~ msgid "ISO C forbids casts to union type" #~ msgstr "ISO C interdit le transtypage vers un type union" #~ msgid "cast to union type from type not present in union" #~ msgstr "transtypage vers un type union depuis un type absent de l'union" #~ msgid "cast adds new qualifiers to function type" #~ msgstr "le transtypage ajoute un nouveau qualificateur au type de la fonction" #~ msgid "cast discards qualifiers from pointer target type" #~ msgstr "le transtypage annule des qualificateurs du type pointeur cibl" #~ msgid "cast increases required alignment of target type" #~ msgstr "le transtypage augmente l'alignement requis pour le type cibl" #~ msgid "cast from pointer to integer of different size" #~ msgstr "transtypage d'un pointeur vers un entier de taille diffrente" #~ msgid "cast does not match function type" #~ msgstr "le transtypage ne concorde pas avec le type de la fonction" #~ msgid "cast to pointer from integer of different size" #~ msgstr "transtypage vers un pointeur depuis un entier de taille diffrente" # FIXME #~ msgid "type-punning to incomplete type might break strict-aliasing rules" #~ msgstr "type-punning vers un type incomplet peut briser les rgles stricte d'aliases" # FIXME #~ msgid "dereferencing type-punned pointer will break strict-aliasing rules" #~ msgstr "drfrencement du pointeur type-punned brisera les strictes d'aliases" #~ msgid "ISO C forbids conversion of function pointer to object pointer type" #~ msgstr "ISO C interdit la conversion d'un pointeur de fonction en un type pointeur d'objet" #~ msgid "ISO C forbids conversion of object pointer to function pointer type" #~ msgstr "ISO C interdit la conversion d'un pointeur d'objet vers un type de pointeur une fonction" #~ msgid "invalid lvalue in assignment" #~ msgstr "membre gauche de l'affectation invalide" #~ msgid "assignment" #~ msgstr "affectation" #~ msgid "cannot pass rvalue to reference parameter" #~ msgstr "impossible de passer un membre droit en paramtre par rfrence" #~ msgid "%s makes qualified function pointer from unqualified" #~ msgstr "%s qualifie un pointeur de fonction non qualifi" #~ msgid "%s discards qualifiers from pointer target type" #~ msgstr "%s annule des qualificateurs du type du pointeur cible" #~ msgid "ISO C prohibits argument conversion to union type" #~ msgstr "ISO C interdit la conversion d'argument en type union" #~ msgid "ISO C forbids %s between function pointer and `void *'" #~ msgstr "ISO C interdit %s entre pointeur de fonction et void * " #~ msgid "pointer targets in %s differ in signedness" #~ msgstr "les cibles des pointeurs dans %s n'ont pas toutes de signe" #~ msgid "%s from incompatible pointer type" #~ msgstr "%s d'un type pointeur incompatible" #~ msgid "invalid use of non-lvalue array" #~ msgstr "utilisation invalide d'un tableau n'tant pas membre gauche" #~ msgid "%s makes pointer from integer without a cast" #~ msgstr "%s transforme un entier en pointeur sans transtypage" #~ msgid "%s makes integer from pointer without a cast" #~ msgstr "%s transforme un pointeur en entier sans transtypage" #~ msgid "incompatible type for argument %d of `%s'" #~ msgstr "type incompatible pour l'argument n%d de %s " #~ msgid "incompatible type for argument %d of indirect function call" #~ msgstr "type incompatible pour l'argument n%d de l'appel indirect de fonction" #~ msgid "incompatible types in %s" #~ msgstr "type incompatibles dans %s" #~ msgid "passing arg of `%s'" #~ msgstr "passage des arguments de %s " #~ msgid "passing arg of pointer to function" #~ msgstr "passage des arguments au pointeur de fonction" #~ msgid "passing arg %d of `%s'" #~ msgstr "passage de l'argument n%d de %s " #~ msgid "passing arg %d of pointer to function" #~ msgstr "passage de l'argument n%d au pointeur de fonction" #~ msgid "traditional C rejects automatic aggregate initialization" #~ msgstr "le C traditionel rejette l'initialisation automatique d'aggrgats" #~ msgid "(near initialization for `%s')" #~ msgstr "(prs de l'initialisation de %s )" #~ msgid "char-array initialized from wide string" #~ msgstr "tableau de caractres initialis l'aide d'une chane large de caractres" #~ msgid "int-array initialized from non-wide string" #~ msgstr "tableau d'entier initialis l'aide d'une chane non-large" #~ msgid "initializer-string for array of chars is too long" #~ msgstr "la chane d'initialisation est trop longue pour le tableau de caractres" #~ msgid "array initialized from non-constant array expression" #~ msgstr "tableau initialis l'aide de l'expression de tableau non constante" #~ msgid "initializer element is not constant" #~ msgstr "un lment de l'initialisation n'est pas une constante" #~ msgid "initialization" #~ msgstr "initialisation" #~ msgid "initializer element is not computable at load time" #~ msgstr "un lment de l'initialisation n'est pas valuable lors du chargement" #~ msgid "invalid initializer" #~ msgstr "initialisation invalide" #~ msgid "opaque vector types cannot be initialized" #~ msgstr "type de vecteur opaque ne peut tre initialis" #~ msgid "extra brace group at end of initializer" #~ msgstr "groupe d'accolades superflu la fin de l'initialisation" #~ msgid "missing braces around initializer" #~ msgstr "accolades manquantes autour de l'initialisation" #~ msgid "braces around scalar initializer" #~ msgstr "accolades autour d'une initialisation de scalaire" #~ msgid "initialization of flexible array member in a nested context" #~ msgstr "initialisation d'un membre de tableau flexible dans un contexte imbriqu" #~ msgid "initialization of a flexible array member" #~ msgstr "initialisation d'un membre de tableau flexible" #~ msgid "missing initializer" #~ msgstr "initialisation manquante" #~ msgid "empty scalar initializer" #~ msgstr "initialisation vide de scalaire" #~ msgid "extra elements in scalar initializer" #~ msgstr "lments superflus dans l'initialisation de scalaire" #~ msgid "initialization designators may not nest" #~ msgstr "l'initialisation des dsignateurs ne doit pas tre imbrique" #~ msgid "array index in non-array initializer" #~ msgstr "index de tableau dans l'initialisation de quelque chose n'tant pas un tableau" #~ msgid "field name not in record or union initializer" #~ msgstr "nom de champ dans l'initialisation de quelque chose n'tant ni un enregistrement ni une union" #~ msgid "nonconstant array index in initializer" #~ msgstr "index de tableau non constant dans l'initialisation" #~ msgid "array index in initializer exceeds array bounds" #~ msgstr "index de tableau hors limites lors de l'initialisation" #~ msgid "empty index range in initializer" #~ msgstr "borne d'index vide lors de l'initialisation" #~ msgid "array index range in initializer exceeds array bounds" #~ msgstr "plage d'index du tableau excdant les bornes lors de l'initialisation" #~ msgid "unknown field `%s' specified in initializer" #~ msgstr "champ inconnu %s spcifi lors de l'initialisation" #~ msgid "initialized field with side-effects overwritten" #~ msgstr "le champ initialis par effet de bord a t cras" #~ msgid "excess elements in char array initializer" #~ msgstr "lments en excs dans l'initialisation de tableau de caractres" #~ msgid "excess elements in struct initializer" #~ msgstr "lments en excs dans l'initialisation de la structure" #~ msgid "non-static initialization of a flexible array member" #~ msgstr "initialisation non statique d'un membre de tableau flexible" #~ msgid "excess elements in union initializer" #~ msgstr "lments en excs dans l'initialisation d'union" #~ msgid "traditional C rejects initialization of unions" #~ msgstr "le C traditionel rejette l'initialisation d'union" #~ msgid "excess elements in array initializer" #~ msgstr "lments en excs dans l'initialisation de tableau" #~ msgid "excess elements in vector initializer" #~ msgstr "lments en excs dans l'initialisation du vecteur" #~ msgid "excess elements in scalar initializer" #~ msgstr "lments en excs dans l'initialisation d'un scalaire" #~ msgid "asm template is not a string constant" #~ msgstr "le canevas asm n'est pas une chane de constante" #~ msgid "invalid lvalue in asm statement" #~ msgstr "membre gauche invalide avec asm" #~ msgid "modification by `asm'" #~ msgstr "modification par asm " #~ msgid "function declared `noreturn' has a `return' statement" #~ msgstr "fonction dclare avec noreturn utilisant le mot-cl return " #~ msgid "`return' with no value, in function returning non-void" #~ msgstr " return sans valeur dans une fonction retournant autre chose que void" #~ msgid "`return' with a value, in function returning void" #~ msgstr " return avec une valeur dans une fonction retournant un void" #~ msgid "return" #~ msgstr "return" #~ msgid "function returns address of local variable" #~ msgstr "cette fonction retourne l'adresse d'une variable locale" #~ msgid "switch quantity not an integer" #~ msgstr "quantit du switch n'est pas un entier" #~ msgid "`long' switch expression not converted to `int' in ISO C" #~ msgstr "expression long du switch non convertie en int par ISO C" #~ msgid "case label not within a switch statement" #~ msgstr "tiquette de case en dehors de tout switch" #~ msgid "`default' label not within a switch statement" #~ msgstr "tiquette default en dehors de tout switch" #~ msgid "division by zero" #~ msgstr "division par zro" #~ msgid "right shift count is negative" #~ msgstr "le compteur de dcalage vers la droite est ngatif" #~ msgid "right shift count >= width of type" #~ msgstr "compteur de dcalage vers la droite >= la largeur du type" #~ msgid "left shift count is negative" #~ msgstr "le compteur de dcalage vers la gauche est ngatif" #~ msgid "left shift count >= width of type" #~ msgstr "compteur de dcalage vers la gauche >= la largeur du type" #~ msgid "shift count is negative" #~ msgstr "le compteur de dcalage est ngatif" #~ msgid "shift count >= width of type" #~ msgstr "compteur de dcalage >= la largeur du type" #~ msgid "comparing floating point with == or != is unsafe" #~ msgstr "comparer des nombres flottants l'aide de == ou != n'est pas sr" #~ msgid "ISO C forbids comparison of `void *' with function pointer" #~ msgstr "ISO C interdit la comparaison de void * avec un pointeur de fonction" #~ msgid "comparison of distinct pointer types lacks a cast" #~ msgstr "il manque un transtypage pour comparer des types distincts de pointeur" #~ msgid "comparison between pointer and integer" #~ msgstr "comparaison entre un pointeur et un entier" #~ msgid "ISO C forbids ordered comparisons of pointers to functions" #~ msgstr "ISO C interdit les comparaisons ordonnes de pointeurs vers des fonctions" #~ msgid "comparison of complete and incomplete pointers" #~ msgstr "comparaison de pointeurs complet et incomplet" #~ msgid "ordered comparison of pointer with integer zero" #~ msgstr "comparaison ordonne de pointeur avec le zro entier" #~ msgid "unordered comparison on non-floating point argument" #~ msgstr "comparaison non ordonne sur un argument n'tant pas en virgule flottante" #~ msgid "comparison between signed and unsigned" #~ msgstr "comparaison entre lment sign et lment non sign" #~ msgid "comparison of promoted ~unsigned with constant" #~ msgstr "comparaison entre lment promu ~unsigned et une constante" #~ msgid "comparison of promoted ~unsigned with unsigned" #~ msgstr "comparaison entre lment promu ~unsigned et un lment non sign" #~ msgid "%Jinlining failed in call to '%F'" #~ msgstr "%Jenlignage a chou dans l'appel %F " #~ msgid "called from here" #~ msgstr "appel d'ici" #~ msgid "%Jcan't inline call to '%F'" #~ msgstr "%Jimpossible d'enligner l'appel %F " #~ msgid "ignoring return value of `%D', declared with attribute warn_unused_result" #~ msgstr "valeur retourner %D ignore, dclar avec l'attribut warn_unused_result" #~ msgid "ignoring return value of function declared with attribute warn_unused_result" #~ msgstr "valeur retourner d'une fonction ignore, dclar avec l'attribut warn_unused_result" #~ msgid "function call has aggregate value" #~ msgstr "l'appel de fonction a une valeur d'aggrgat" #~ msgid "bb %d on wrong place" #~ msgstr "bb %d au mauvais endroit" #~ msgid "prev_bb of %d should be %d, not %d" #~ msgstr "prev_bb de %d devrait tre %d, pas %d" #~ msgid "verify_flow_info: Wrong count of block %i %i" #~ msgstr "verify_flow_info: Nombre de blocs erron %i %i" #~ msgid "verify_flow_info: Wrong frequency of block %i %i" #~ msgstr "verify_flow_info: Frquence de blocs errone %i %i" #~ msgid "verify_flow_info: Duplicate edge %i->%i" #~ msgstr "verify_flow_info: arrte duplique %i->%i" #~ msgid "verify_flow_info: Wrong probability of edge %i->%i %i" #~ msgstr "verify_flow_info: probabilit de l'arrte %i->%i %i errone" #~ msgid "verify_flow_info: Wrong count of edge %i->%i %i" #~ msgstr "verify_flow_info: Mauvais nombre d'arrte %i->%i %i" #~ msgid "verify_flow_info: Basic block %d succ edge is corrupted" #~ msgstr "verify_flow_info: l'arrte succ du bloc de base %d est corrompue" #~ msgid "Wrong amount of branch edges after unconditional jump %i" #~ msgstr "Mauvais nombre d'arrtes de branchement aprs le branchement inconditionnel %i" #~ msgid "basic block %d pred edge is corrupted" #~ msgstr "arrte pred du bloc de base %d corrompue" #~ msgid "basic block %i edge lists are corrupted" #~ msgstr "les listes d'arrtes du bloc de base %i sont corrompues" #~ msgid "verify_flow_info failed" #~ msgstr "verify_flow_info a chou" #~ msgid "Size of loop %d should be %d, not %d." #~ msgstr "La taille de la boucle %d devrait tre %d, et non %d." # FIXME #~ msgid "Bb %d do not belong to loop %d." #~ msgstr "Bb %d n'appartient pas la boucle %d." #~ msgid "Loop %d's header does not have exactly 2 entries." #~ msgstr "L'en-tte de la boucle %d n'a pas exactement 2 entres." #~ msgid "Loop %d's latch does not have exactly 1 successor." #~ msgstr "Le verrou %d de la boucle n'a pas exactement 1 successeur." #~ msgid "Loop %d's latch does not have header as successor." #~ msgstr "Le verrou %d de la boucle n'a pas une en-tte comme successeur." #~ msgid "Loop %d's latch does not belong directly to it." #~ msgstr "Le verrou %d de la boucle ne lui appartient pas directement." #~ msgid "Loop %d's header does not belong directly to it." #~ msgstr "L'entte de la boucle %d ne lui appartient pas directement." #~ msgid "Loop %d's latch is marked as part of irreducible region." #~ msgstr "Le verrou %d de la boucle est dfini comme faisant partie d'une zone irrductible" #~ msgid "Basic block %d should be marked irreducible." #~ msgstr "bloc de base %d devrait tre marqu irrductible." #~ msgid "Basic block %d should not be marked irreducible." #~ msgstr "bloc de base %d ne devrait pas tre marqu irrductible." #~ msgid "Edge from %d to %d should be marked irreducible." #~ msgstr "Bordures partir de %d %d devraient tre marqus irrductibles." #~ msgid "Edge from %d to %d should not be marked irreducible." #~ msgstr "Bordures partir de %d %d ne devraient tre marques irrductibles." #~ msgid "end insn %d for block %d not found in the insn stream" #~ msgstr "fin insn %d du bloc %d n'a pas t repr dans le flot insn" #~ msgid "insn %d is in multiple basic blocks (%d and %d)" #~ msgstr "insn %d est dans de multiples blocs de base (%d et %d)" #~ msgid "head insn %d for block %d not found in the insn stream" #~ msgstr "en-tte insn %d du bloc %d n'a pas t repre dans le flot insn" #~ msgid "verify_flow_info: REG_BR_PROB does not match cfg %wi %i" #~ msgstr "verify_flow_info: REG_BR_PROB ne correspond pas la config %wi %i" #~ msgid "Missing REG_EH_REGION note in the end of bb %i" #~ msgstr "REG_EH_REGION note manquante la fin du bb %i" #~ msgid "Too many outgoing branch edges from bb %i" #~ msgstr "Trop d'arrtes de branchement sortantes dans le bb %i" #~ msgid "Fallthru edge after unconditional jump %i" #~ msgstr "Arrte fallthru aprs le branchement inconditionnel %i" #~ msgid "Wrong amount of branch edges after conditional jump %i" #~ msgstr "Mauvais nombre d'arrtes de branchement aprs le branchement conditionnel %i" #~ msgid "Call edges for non-call insn in bb %i" #~ msgstr "Arrtes d'appel pour un insn n'tant pas d'appel dans le bb %i" #~ msgid "Abnormal edges for no purpose in bb %i" #~ msgstr "Arrte anormale sans but dans le bb %i" #~ msgid "insn %d inside basic block %d but block_for_insn is NULL" #~ msgstr "insn %d l'intrieur du bloc de base %d mais block_for_insn est NULL" #~ msgid "insn %d inside basic block %d but block_for_insn is %i" #~ msgstr "insn %d l'intrieur du bloc de base %d mais block_for_insn est %i" #~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" #~ msgstr "NOTE_INSN_BASIC_BLOCK manquant pour le bloc %d" #~ msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d" #~ msgstr "NOTE_INSN_BASIC_BLOCK %d au milieu du bloc de base %d" #~ msgid "in basic block %d:" #~ msgstr "dans le bloc de base %d :" #~ msgid "flow control insn inside a basic block" #~ msgstr "insn de contrle de flot l'intrieur d'un bloc de base" #~ msgid "missing barrier after block %i" #~ msgstr "barrire manquante aprs le boc %i" #~ msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i" #~ msgstr "verify_flow_info: blocs incorrects pour le fallthru %i->%i" #~ msgid "verify_flow_info: Incorrect fallthru %i->%i" #~ msgstr "verify_flow_info: fallthru incorrect %i->%i" #~ msgid "wrong insn in the fallthru edge" #~ msgstr "insn errone dans l'arrte fallthru" #~ msgid "basic blocks not laid down consecutively" #~ msgstr "les blocs de base ne se suivent pas conscutivement" #~ msgid "insn outside basic block" #~ msgstr "insn l'extrieur de tout bloc de base" #~ msgid "return not followed by barrier" #~ msgstr "return n'est pas suivi d'une barrire" # FIXME # bb est une abrviation courante dans cette partie du fichier pour basic block #~ msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" #~ msgstr "nombre de bb not dans la chane d'insn (%d) != n_basic_blocks (%d)" #~ msgid "function body not available" #~ msgstr "corps de la fonction n'est pas disponible" #~ msgid "redefined extern inline functions are not considered for inlining" #~ msgstr "fonctions externes enlignes redfinies n'ont pas t retenues pour l'enlignage" #~ msgid "function not considered for inlining" #~ msgstr "fonction n'a pas t retenue pour l'enlignage" #~ msgid "function not inlinable" #~ msgstr "fonction ne peut tre enligne" #~ msgid "%D renamed after being referenced in assembly" #~ msgstr " %D renomm aprs avoir t rfrenc durant l'assemblage" #~ msgid "--param large-function-growth limit reached" #~ msgstr "--param large-function-growth limite atteinte" #~ msgid "--param large-function-growth limit reached while inlining the caller" #~ msgstr "--param large-function-growth limite atteinte lors de l'enlignage de l'appelant" #~ msgid "--param max-inline-insns-single limit reached" #~ msgstr "--param max-inline-insns-single limite atteinte" #~ msgid "--param max-inline-insns-single limit reached after inlining into the callee" #~ msgstr "--param max-inline-insns-single limite atteinte aprs l'enlignage dans l'appell" #~ msgid "--param inline-unit-growth limit reached" #~ msgstr "--param inline-unit-growth limite atteinte" #~ msgid "recursive inlining" #~ msgstr "enlignage rcursif" #~ msgid "internal error" #~ msgstr "erreur interne" #~ msgid "no arguments" #~ msgstr "pas d'argument" # I18N #~ msgid "fopen %s" #~ msgstr "fopen() %s" # I18N #~ msgid "fclose %s" #~ msgstr "fclose() %s" #~ msgid "collect2 version %s" #~ msgstr "collect2 version %s" #~ msgid "%d constructor(s) found\n" #~ msgstr "%d constructeur(s) trouv(s)\n" #~ msgid "%d destructor(s) found\n" #~ msgstr "%d destructeur(s) trouv(s)\n" #~ msgid "%d frame table(s) found\n" #~ msgstr "%d table(s) de trame trouve(s)\n" #~ msgid "%s terminated with signal %d [%s]%s" #~ msgstr "%s termin par le signal %d [%s]%s" #~ msgid "%s returned %d exit status" #~ msgstr "%s a retourn %d comme valeur de sortie" #~ msgid "[cannot find %s]" #~ msgstr "[%s introuvable]" #~ msgid "cannot find `%s'" #~ msgstr " %s introuvable" #~ msgid "redirecting stdout: %s" #~ msgstr "redirection de stdout : %s" # FIXME #~ msgid "[Leaving %s]\n" #~ msgstr "[Laissant %s]\n" #~ msgid "" #~ "\n" #~ "write_c_file - output name is %s, prefix is %s\n" #~ msgstr "" #~ "\n" #~ "write_c_file - le nom de sortie est %s, le prfixe est %s\n" #~ msgid "cannot find `nm'" #~ msgstr " nm introuvable" # I18N #~ msgid "pipe" #~ msgstr "pipe" # I18N #~ msgid "fdopen" #~ msgstr "fdopen" # I18N #~ msgid "dup2 %d 1" #~ msgstr "dup2 %d 1" # I18N #~ msgid "close %d" #~ msgstr "close %d" # I18N #~ msgid "execv %s" #~ msgstr "execv %s" #~ msgid "init function found in object %s" #~ msgstr "fonction init trouve dans l'objet %s" #~ msgid "fini function found in object %s" #~ msgstr "fonction fini() trouve dans l'objet %s" # I18N #~ msgid "fclose" #~ msgstr "fclose" #~ msgid "unable to open file '%s'" #~ msgstr "impossible d'ouvrir le fichier %s " #~ msgid "unable to stat file '%s'" #~ msgstr "impossible d'analyser le fichier %s avec stat()" #~ msgid "unable to mmap file '%s'" #~ msgstr "incpable de projeter en mmoire le fichier %s avec nmap()" #~ msgid "not found\n" #~ msgstr "introuvable\n" #~ msgid "dynamic dependency %s not found" #~ msgstr "dpendance dynamique %s introuvable" #~ msgid "bad magic number in file '%s'" #~ msgstr "le nombre magique du fichier %s est erron" #~ msgid "dynamic dependencies.\n" #~ msgstr "dpendances dynamiques.\n" #~ msgid "cannot find `ldd'" #~ msgstr " ldd introuvable" #~ msgid "" #~ "\n" #~ "ldd output with constructors/destructors.\n" #~ msgstr "" #~ "\n" #~ "sortie de ldd avec constructeurs/destructeurs.\n" #~ msgid "unable to open dynamic dependency '%s'" #~ msgstr "incapable d'ouvrir la dpendance dynamique %s " #~ msgid "%s: not a COFF file" #~ msgstr "%s : n'est pas un fichier COFF" #~ msgid "%s: cannot open as COFF file" #~ msgstr "%s : ne peut ouvrir en tant que fichier COFF" # I18N #~ msgid "library lib%s not found" #~ msgstr "bibliothque lib%s introuvable" #~ msgid "" #~ ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n" #~ ";; %d successes.\n" #~ "\n" #~ msgstr "" #~ ";; Statistiques du combinateur : %d tentatives, %d substitutions (%d requrant un nouvel espace),\n" #~ ";; %d succs.\n" #~ "\n" #~ msgid "" #~ "\n" #~ ";; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n" #~ ";; %d successes.\n" #~ msgstr "" #~ "\n" #~ ";; Totaux du combinateur : %d tentatives, %d substitutions (%d requrant un nouvel espace),\n" #~ ";; %d succs.\n" #~ "\n" #~ msgid "cannot convert to a pointer type" #~ msgstr "ne peut convertir en un type pointeur" #~ msgid "pointer value used where a floating point value was expected" #~ msgstr "valeur de pointeur utilise l o une valeur virgule flottante tait attendue" #~ msgid "aggregate value used where a float was expected" #~ msgstr "valeur d'aggrgat utilise l o un flottant tait attendu" #~ msgid "conversion to incomplete type" #~ msgstr "conversion vers un type incomplet" #~ msgid "can't convert between vector values of different size" #~ msgstr "ne peut convertir entre des valeurs de vecteurs de tailles diffrentes" #~ msgid "aggregate value used where an integer was expected" #~ msgstr "valeur d'aggrgat utilise l o un entier tait attendu" #~ msgid "pointer value used where a complex was expected" #~ msgstr "valeur de pointeur utilise l o un complexe tait attendu" #~ msgid "aggregate value used where a complex was expected" #~ msgstr "valeur d'aggrgat utilise l o un complexe tait attendu" #~ msgid "can't convert value to a vector" #~ msgstr "ne peut convertir une valeur en vecteur" #~ msgid "`%s' is not a gcov data file" #~ msgstr " %s n'est pas un fichier de donnes gcov" #~ msgid "`%s' is version `%.4s', expected version `%.4s'" #~ msgstr " %s est de version %.4s , version %.4s attendue" #~ msgid "coverage mismatch for function %u while reading execution counters." #~ msgstr "non concordance de la couverture pour la fonction %u lors de la lecture des compteurs d'excution" #~ msgid "checksum is %x instead of %x" #~ msgstr "somme de contrle est %x au lieu de %x" #~ msgid "number of counters is %d instead of %d" #~ msgstr "nombre de compteurs est %d au lieu de %d" #~ msgid "cannot merge separate %s counters for function %u" #~ msgstr "ne peut faire la fusion spare des compteurs %s pour la fonction %u" #~ msgid "`%s' has overflowed" #~ msgstr " %s a dborb" #~ msgid "`%s' is corrupted" #~ msgstr " %s est corrompu" #~ msgid "file %s not found, execution counts assumed to be zero" #~ msgstr "fichier %s non repr, compteur d'excution assum tre zro" #~ msgid "no coverage for function '%s' found." #~ msgstr "pas de couverture repre pour la fonction %s " #~ msgid "coverage mismatch for function '%s' while reading counter '%s'." #~ msgstr "non concordance de la couverture pour la fonction %s lors de la lecture des compteurs d'excution %s " #~ msgid "cannot open %s" #~ msgstr "ne peut ouvrir %s" #~ msgid "error writing `%s'" #~ msgstr "erreur d'criture dans %s" #~ msgid "\"%s\" is not a valid option to the preprocessor" #~ msgstr " %s n'est pas une option valide pour le prprocesseur" #~ msgid "too many input files" #~ msgstr "trop de fichiers d'entre" # FIXME: Initialis, ou ensembles? #~ msgid ";; Processing block from %d to %d, %d sets.\n" #~ msgstr ";; traitement du bloc de %d %d, %d initialiss.\n" #~ msgid "%s:%d: confused by earlier errors, bailing out\n" #~ msgstr "%s:%d: embrouill par les erreurs prcdentes, abandon\n" #~ msgid "compilation terminated.\n" #~ msgstr "compilation termine.\n" # FIXME #~ msgid "Internal compiler error: Error reporting routines re-entered.\n" #~ msgstr "erreur interne au compilateur : routine de rapport d'erreur prempte.\n" #~ msgid "in %s, at %s:%d" #~ msgstr "dans %s, %s:%d" # FIXME #~ msgid "dominator of %d should be %d, not %d" #~ msgstr "le dominateur de %d devrait tre %d, et non %d" #~ msgid "DW_LOC_OP %s not implemented\n" #~ msgstr "DW_LOC_OP %s n'est pas implant\n" #~ msgid "can't access real part of complex value in hard register" #~ msgstr "ne peut accder la partie relle d'une valeur complexe dans un registre matriel" #~ msgid "can't access imaginary part of complex value in hard register" #~ msgstr "ne peut accder la partie imaginaire d'une valeur complexe dans un registre matriel" #~ msgid "Invalid rtl sharing found in the insn" #~ msgstr "partage rtl invalide repr dans l'insn" #~ msgid "Shared rtx" #~ msgstr "rtx partag" #~ msgid "ICE: emit_insn used where emit_jump_insn needed:\n" #~ msgstr "ICE : emit_insn utilis l o emit_jump_insn tait attendu :\n" #~ msgid "abort in %s, at %s:%d" #~ msgstr "abandon dans %s, %s:%d" #~ msgid "exception handling disabled, use -fexceptions to enable" #~ msgstr "traitement des exceptions dsactiv, utiliser -fexceptions pour l'activer" #~ msgid "argument of `__builtin_eh_return_regno' must be constant" #~ msgstr "l'argument de __builtin_eh_return_regno doit tre une constante" #~ msgid "__builtin_eh_return not supported on this target" #~ msgstr " __builtin_eh_return n'est pas possible sur cette cible" # FIXME #~ msgid "stack limits not supported on this target" #~ msgstr "les limites de la pile ne sont pas supportes sur cette cible" #~ msgid "function using short complex types cannot be inline" #~ msgstr "un foncton utilisant un type complex short ne peut tre enligne" #~ msgid "%Jprior parameter's size depends on '%D'" #~ msgstr "%Jtaille du paramtre prcdent dpend de %D " #~ msgid "returned value in block_exit_expr" #~ msgstr "valeur retourne dans block_exit_expr" #~ msgid "cannot take the address of an unaligned member" #~ msgstr "ne peut prendre l'adresse d'un membre non align" #~ msgid "negative insn length" #~ msgstr "longueur ngative insn" #~ msgid "could not split insn" #~ msgstr "n'a pu sparer insn" #~ msgid "invalid `asm': " #~ msgstr " asm invalide: " #~ msgid "nested assembly dialect alternatives" #~ msgstr "assemblage de dialectes alternatifs imbriqus" #~ msgid "unterminated assembly dialect alternative" #~ msgstr "assemblage de dialectes alternatifs non termin" #~ msgid "operand number missing after %%-letter" #~ msgstr "numro d'oprande manquant aprs %%-letter" #~ msgid "operand number out of range" #~ msgstr "nombre d'oprandes hors limite" #~ msgid "invalid %%-code" #~ msgstr "%%-code est invalide" #~ msgid "`%%l' operand isn't a label" #~ msgstr "oprande %%l n'est pas une tiquette" #~ msgid "floating constant misused" #~ msgstr "constante flottante mal utilise" #~ msgid "invalid expression as operand" #~ msgstr "expression invalide comme oprande" #~ msgid "function might be possible candidate for attribute `noreturn'" #~ msgstr "fonction peut tre une possible candidate pour l'attribut norreturn " #~ msgid "`noreturn' function does return" #~ msgstr "fonction avec noreturn effectue des retour" #~ msgid "control reaches end of non-void function" #~ msgstr "contrle a atteint la fin non void de la fonction" #~ msgid "Attempt to delete prologue/epilogue insn:" #~ msgstr "Tentative pour dtruire le prologue/pilogue insn:" #~ msgid "comparison is always %d due to width of bit-field" #~ msgstr "comparaison est toujours %d en raison de la largeur du champ de bits" #~ msgid "comparison is always %d" #~ msgstr "comparaison est toujours %d" #~ msgid "`or' of unmatched not-equal tests is always 1" #~ msgstr " or de tests non pair de non galit est troujours 1" #~ msgid "`and' of mutually exclusive equal-tests is always 0" #~ msgstr " and de tests d'galit mutuellement exclusifs est toujours 0" #~ msgid "fold check: original tree changed by fold" #~ msgstr "vrification fold: arbre originale modifi par fold" #~ msgid "%Jsize of variable '%D' is too large" #~ msgstr "%Jtaille de la variable %D est trop grande" #~ msgid "impossible constraint in `asm'" #~ msgstr "contrainte impossible dans asm " #~ msgid "%J'%D' might be used uninitialized in this function" #~ msgstr "%J %D pourrait tre utilis sans tre initialis dans cette fonction" #~ msgid "%Jvariable '%D' might be clobbered by `longjmp' or `vfork'" #~ msgstr "%Jvariable %D pourrait tre maltraite par un longjmp ou un vfork " #~ msgid "%Jargument '%D' might be clobbered by `longjmp' or `vfork'" #~ msgstr "%Jargument %D pourrait tre maltraite par un longjmp ou un vfork " #~ msgid "function returns an aggregate" #~ msgstr "fonction retourne un aggrgat" #~ msgid "%Junused parameter '%D'" #~ msgstr "%Jparamtre %D inutilis" #~ msgid "ambiguous abbreviation %s" #~ msgstr "abrviation %s est ambigu" #~ msgid "incomplete `%s' option" #~ msgstr "option %s est incomplte" #~ msgid "missing argument to `%s' option" #~ msgstr "argument manquant l'option %s " #~ msgid "extraneous argument to `%s' option" #~ msgstr "argument superflu l'option %s " #~ msgid "Using built-in specs.\n" #~ msgstr "Utilisation des specs internes.\n" #~ msgid "" #~ "Setting spec %s to '%s'\n" #~ "\n" #~ msgstr "" #~ "Initialisation des spec %s %s \n" #~ "\n" #~ msgid "Reading specs from %s\n" #~ msgstr "Lecture des spcification partir de %s\n" #~ msgid "specs %%include syntax malformed after %ld characters" #~ msgstr "syntaxe des specs %%include mal compose aprs %ld caractres" #~ msgid "could not find specs file %s\n" #~ msgstr "ne peut reprer le fichiers des specs %s\n" #~ msgid "specs %%rename syntax malformed after %ld characters" #~ msgstr "specs de la syntaxe %%rename mal composes aprs %ld caractres" #~ msgid "specs %s spec was not found to be renamed" #~ msgstr "specs de la spcification %s n'a pas t trouv pour tre renommer" #~ msgid "%s: attempt to rename spec '%s' to already defined spec '%s'" #~ msgstr "%s: tentative pour renommner la spcification %s un spcification %s dj dfinie" #~ msgid "rename spec %s to %s\n" #~ msgstr "renomm les specs %s %s\n" #~ msgid "" #~ "spec is '%s'\n" #~ "\n" #~ msgstr "" #~ "spec est %s \n" #~ "\n" #~ msgid "specs unknown %% command after %ld characters" #~ msgstr "specs inconnus de la commande %% aprs %ld caractres" #~ msgid "specs file malformed after %ld characters" #~ msgstr "fichier de specs mal compos aprs %ld caractres" #~ msgid "spec file has no spec for linking" #~ msgstr "fichier de specs n'a pas de spcification pour l'dition de liens" #~ msgid "-pipe not supported" #~ msgstr "-pipe n'est pas support" #~ msgid "" #~ "\n" #~ "Go ahead? (y or n) " #~ msgstr "" #~ "\n" #~ "Aller de l'avant? (y ou n) " #~ msgid "" #~ "Internal error: %s (program %s)\n" #~ "Please submit a full bug report.\n" #~ "See %s for instructions." #~ msgstr "" #~ "Erreur internal error: %s (programme %s)\n" #~ "SVP soumettre un rapport complet d'anomalies.\n" #~ "Consulter %s pour les instructions." #~ msgid "# %s %.2f %.2f\n" #~ msgstr "# %s %.2f %.2f\n" #~ msgid "Usage: %s [options] file...\n" #~ msgstr "Usage: %s [options] fichier...\n" #~ msgid "Options:\n" #~ msgstr "Options:\n" #~ msgid " -pass-exit-codes Exit with highest error code from a phase\n" #~ msgstr " -pass-exit-codes quitter avec le plus grand code d'erreur de la phase\n" #~ msgid " --help Display this information\n" #~ msgstr " --help afficher l'aide mmoire\n" #~ msgid " --target-help Display target specific command line options\n" #~ msgstr " --target-help afficher les options spcifiques de la ligne de commande\n" #~ msgid " (Use '-v --help' to display command line options of sub-processes)\n" #~ msgstr " (Utiliser -v --help pour afficher les options de la ligne de commande des sous-processus)\n" #~ msgid " -dumpspecs Display all of the built in spec strings\n" #~ msgstr " -dumpspecs afficher tous les construits des chanes de specs\n" #~ msgid " -dumpversion Display the version of the compiler\n" #~ msgstr " -dumpversion afficher la version du compilateur\n" #~ msgid " -dumpmachine Display the compiler's target processor\n" #~ msgstr " -dumpmachine afficher le processeur cibl par le compilateur\n" #~ msgid " -print-search-dirs Display the directories in the compiler's search path\n" #~ msgstr " -print-search-dirs afficher les rpertoires du chemin de recherche du compiltateur\n" #~ msgid " -print-libgcc-file-name Display the name of the compiler's companion library\n" #~ msgstr " -print-libgcc-file-name afficher le nom de la bibliothque compagne du compilateur\n" #~ msgid " -print-file-name= Display the full path to library \n" #~ msgstr " -print-file-name= afficher le chemin d'accs complet vers la bibliothque \n" #~ msgid " -print-prog-name= Display the full path to compiler component \n" #~ msgstr " -print-prog-name= afficher le chemin d'accs complet vers le composant du compilateur \n" #~ msgid " -print-multi-directory Display the root directory for versions of libgcc\n" #~ msgstr " -print-multi-directory afficher la racine du rpertoire des version libgcc\n" #~ msgid "" #~ " -print-multi-lib Display the mapping between command line options and\n" #~ " multiple library search directories\n" #~ msgstr "" #~ " -print-multi-lib Afficher la table de projection entre les options de\n" #~ " la ligne de commande et les multiples rpertoires de\n" #~ " recherches des bibliothques\n" #~ msgid " -print-multi-os-directory Display the relative path to OS libraries\n" #~ msgstr " -print-multi-os-directory afficher le chemin relatif du rpertoire vers les librairies de l'OS\n" #~ msgid " -Wa, Pass comma-separated on to the assembler\n" #~ msgstr " -Wa, passer les spares par des virgules l'assembleur\n" #~ msgid " -Wp, Pass comma-separated on to the preprocessor\n" #~ msgstr " -Wp, passer les spares par des virgules au prprocesseur\n" #~ msgid " -Wl, Pass comma-separated on to the linker\n" #~ msgstr " -Wl, passer les spares par des virgules l'diteur de liens\n" #~ msgid " -Xassembler Pass on to the assembler\n" #~ msgstr " -Xassembler passer l'ument l'assembleur\n" #~ msgid " -Xpreprocessor Pass on to the preprocessor\n" #~ msgstr " -Xpreprocessor passer l'ument au pr-processeur\n" #~ msgid " -Xlinker Pass on to the linker\n" #~ msgstr " -Xlinker passer l' l'diteur de liens\n" #~ msgid " -save-temps Do not delete intermediate files\n" #~ msgstr " -save-temps ne pas dtruire les fichiers intermdiaires\n" #~ msgid " -pipe Use pipes rather than intermediate files\n" #~ msgstr " -pipe utiliser des pipes au lieu de fichiers intermdiares\n" #~ msgid " -time Time the execution of each subprocess\n" #~ msgstr " -time mesurer le temps d'excution de chaque sous-processus\n" #~ msgid " -specs= Override built-in specs with the contents of \n" #~ msgstr " -specs= craser les specs internes l'aide du contenu du \n" #~ msgid " -std= Assume that the input sources are for \n" #~ msgstr " -std= Prsumer que les fichiers sources respectent le \n" #~ msgid " -B Add to the compiler's search paths\n" #~ msgstr " -B ajouter le aux chemins de recherche du compilateur\n" #~ msgid " -b Run gcc for target , if installed\n" #~ msgstr " -b excuter gcc pour la cible, si install\n" #~ msgid " -V Run gcc version number , if installed\n" #~ msgstr " -V excuter le numro de de gcc, si installe\n" #~ msgid " -v Display the programs invoked by the compiler\n" #~ msgstr " -v afficher les programmes invoqus par le compilateur\n" #~ msgid " -### Like -v but options quoted and commands not executed\n" #~ msgstr " -### identique -v mais les options et les commandes entre guillemets ne sont pas excutes\n" #~ msgid " -E Preprocess only; do not compile, assemble or link\n" #~ msgstr " -E pr-traiter seulement; ne pas compiler, assembler ou diter les liens\n" #~ msgid " -S Compile only; do not assemble or link\n" #~ msgstr " -S compiler seulement; ne pas assembler ou diter les liens\n" #~ msgid " -c Compile and assemble, but do not link\n" #~ msgstr " -S compiler et assembler, mais ne pas diter les liens\n" #~ msgid " -o Place the output into \n" #~ msgstr " -o placer la sortie dans le \n" #~ msgid "" #~ " -x Specify the language of the following input files\n" #~ " Permissible languages include: c c++ assembler none\n" #~ " 'none' means revert to the default behavior of\n" #~ " guessing the language based on the file's extension\n" #~ msgstr "" #~ " -x spcifier le langage des fichiers suivants d'entre\n" #~ " Les langages permis sont: c c++ assembler none\n" #~ " none signifiant d'utiliser le comportement par dfaut\n" #~ " en tentant d'identifier le langage par l'extension du fichier\n" #~ msgid "" #~ "\n" #~ "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n" #~ " passed on to the various sub-processes invoked by %s. In order to pass\n" #~ " other options on to these processes the -W options must be used.\n" #~ msgstr "" #~ "\n" #~ "Options dbutant par -g, -f, -m, -O, -W, ou --param sont automatiquement\n" #~ " passs aux divers sous-processus invoqus par %s. Afin de passer\n" #~ " les autres options ces processus l'option -W doit tre utilis.\n" #~ msgid "`-%c' option must have argument" #~ msgstr "l'option -%c require un argument" #~ msgid "couldn't run `%s': %s" #~ msgstr "impossible d'excuter %s : %s" #~ msgid "%s (GCC) %s\n" #~ msgstr "%s (GCC) %s\n" #~ msgid "(C)" #~ msgstr "" #~ msgid "" #~ "This is free software; see the source for copying conditions. There is NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" #~ "\n" #~ msgstr "" #~ "Ce logiciel est libre; voir les sources pour les conditions de copie. Il n'y a PAS\n" #~ "GARANTIE; ni implicite pour le MARCHANDAGE ou pour un BUT PARTICULIER.\n" #~ "\n" #~ msgid "argument to `-Xlinker' is missing" #~ msgstr "argument de -Xlinker est manquant" #~ msgid "argument to `-Xpreprocessor' is missing" #~ msgstr "argument de -Xpreprocessor est manquant" #~ msgid "argument to `-Xassembler' is missing" #~ msgstr "argument de -Xassembler est manquant" #~ msgid "argument to `-l' is missing" #~ msgstr "argument pour -l est manquant" #~ msgid "argument to `-specs' is missing" #~ msgstr "argument de -specs est manquant" #~ msgid "argument to `-specs=' is missing" #~ msgstr "argument de -specs= est manquant" #~ msgid "`-%c' must come at the start of the command line" #~ msgstr " -%c doit apparatre au dbut de la ligne de commande" #~ msgid "argument to `-B' is missing" #~ msgstr "argument de -B est manquant" #~ msgid "warning: -pipe ignored because -save-temps specified" #~ msgstr "AVERTISSEMENT: -pipe ignor parce que -save-temps a t spcifi" #~ msgid "warning: -pipe ignored because -time specified" #~ msgstr "AVERTISSEMENT: -pipe ignor parce que -time a t spcifi" #~ msgid "argument to `-x' is missing" #~ msgstr "argument pour -x est manquant" #~ msgid "argument to `-%s' is missing" #~ msgstr "argument pour -%s est manquant" #~ msgid "warning: `-x %s' after last input file has no effect" #~ msgstr "AVERTISSEMENT: -x %s aprs le dernier fichier d'entre n'a pas d'effet" #~ msgid "invalid specification! Bug in cc" #~ msgstr "spcification invalide! Bug dans cc." #~ msgid "%s\n" #~ msgstr "%s\n" #~ msgid "spec failure: '%%*' has not been initialized by pattern match" #~ msgstr "chec du spec: %%* n'a pas t initialis par concordance du canevas" #~ msgid "warning: use of obsolete %%[ operator in specs" #~ msgstr "AVERTISSEMENT: utilisation obsolte de l'oprateur %%[ dans les specs" #~ msgid "Processing spec %c%s%c, which is '%s'\n" #~ msgstr "Traitement du spec %c%s%c, lequel est %s \n" #~ msgid "spec failure: unrecognized spec option '%c'" #~ msgstr "chec de spec: option %c de spec non reconnue" #~ msgid "unknown spec function `%s'" #~ msgstr "spcification de fonction inconnue %s :" #~ msgid "error in args to spec function `%s'" #~ msgstr "ERREUR d'arguments pour la spcification de fonction %s " #~ msgid "malformed spec function name" #~ msgstr "nom de spcification de fonction mal compos" #~ msgid "no arguments for spec function" #~ msgstr "aucun argument pour la spcification de fonction" #~ msgid "malformed spec function arguments" #~ msgstr "arguments de spcification de fonction mal composs" #~ msgid "spec failure: more than one arg to SYSROOT_SUFFIX_SPEC." #~ msgstr "chec de spcification: plus d'un argument SYSROOT_SUFFIX_SPEC." #~ msgid "spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC." #~ msgstr "chec de spcification: plus d'un argument SYSROOT_HEADERS_SUFFIX_SPEC." #~ msgid "unrecognized option `-%s'" #~ msgstr "option -%s non reconnue" #~ msgid "install: %s%s\n" #~ msgstr "installs: %s%s\n" #~ msgid "programs: %s\n" #~ msgstr "programmes: %s\n" #~ msgid "libraries: %s\n" #~ msgstr "libraries: %s\n" #~ msgid "" #~ "\n" #~ "For bug reporting instructions, please see:\n" #~ msgstr "" #~ "\n" #~ "Pour les instructons afin de rapporter des anomales, SVP consulter:\n" #~ msgid "Configured with: %s\n" #~ msgstr "Configur avec: %s\n" #~ msgid "Thread model: %s\n" #~ msgstr "Modle de thread: %s\n" #~ msgid "gcc version %s\n" #~ msgstr "version gcc %s\n" #~ msgid "gcc driver version %s executing gcc version %s\n" #~ msgstr "version du pilote gcc %s excutant le version %s de gcc\n" #~ msgid "no input files" #~ msgstr "pas de fichier l'entre" #~ msgid "%s: linker input file unused because linking not done" #~ msgstr "%s: fichier d'entre d'dition de liens n'est pas utilis parce l'dition de lien n'a pas t faite" #~ msgid "cannot specify -o with -c or -S and multiple languages" #~ msgstr "ne peut spcifier -o avec -c ou -S et de multiples langages" #~ msgid "%s: %s compiler not installed on this system" #~ msgstr "%s: %s compilateur n'est pas install sur ce systme" #~ msgid "language %s not recognized" #~ msgstr "language %s n'est pas reconnu" #~ msgid "internal gcc abort" #~ msgstr "abandon interne de gcc" #~ msgid "Internal gcov abort.\n" #~ msgstr "Abandon interne de gcov.\n" #~ msgid "" #~ "Usage: gcov [OPTION]... SOURCEFILE\n" #~ "\n" #~ msgstr "" #~ "Usage: gcov [OPTION]... FICHIER-SOURCE\n" #~ "\n" #~ msgid "" #~ "Print code coverage information.\n" #~ "\n" #~ msgstr "" #~ "Produire les informations de la couverture du code.\n" #~ "\n" #~ msgid " -h, --help Print this help, then exit\n" #~ msgstr " -h, --help afficher l'aide mmoire\n" #~ msgid " -v, --version Print version number, then exit\n" #~ msgstr " -v, --version excuter le numro de de gcc, si installe\n" #~ msgid " -a, --all-blocks Show information for every basic block\n" #~ msgstr " -a, --all-blocks afficher l'information pour chaque bloc de base\n" #~ msgid " -b, --branch-probabilities Include branch probabilities in output\n" #~ msgstr " -b, --branch-probabilities inclure les probabilits de branchement dans la sortie\n" #~ msgid "" #~ " -c, --branch-counts Given counts of branches taken\n" #~ " rather than percentages\n" #~ msgstr "" #~ " -c, --branch-counts donner le dcompte de branchements pris\n" #~ " plutt que les pourcentages\n" #~ msgid " -n, --no-output Do not create an output file\n" #~ msgstr " -n, --no-output ne crer de fichier de sortie\n" #~ msgid "" #~ " -l, --long-file-names Use long output file names for included\n" #~ " source files\n" #~ msgstr "" #~ " -l, --long-file-names utiliser des longs noms de fichiers pour\n" #~ " les fichier sources d'inclusion\n" #~ msgid " -f, --function-summaries Output summaries for each function\n" #~ msgstr " -f, --function-summaries produire un sommaire pour chaque fonction\n" #~ msgid " -o, --object-directory DIR|FILE Search for object files in DIR or called FILE\n" #~ msgstr " -o, --object-directory RP|FICHIERS rechercher les fichiers objets dans le RPertoire ou appells FICHIERS\n" #~ msgid " -p, --preserve-paths Preserve all pathname components\n" #~ msgstr " -p, --preserve-paths prserver tous les composants des chemins d'accs\n" #~ msgid " -u, --unconditional-branches Show unconditional branch counts too\n" #~ msgstr " -u, --unconditional-branches afficher les compteurs de branchement inconditionnel aussi\n" #~ msgid "" #~ "\n" #~ "For bug reporting instructions, please see:\n" #~ "%s.\n" #~ msgstr "" #~ "\n" #~ "Pour les instructons afin de rapporter des anomales, SVP consulter:\n" #~ "%s.\n" #~ msgid "gcov (GCC) %s\n" #~ msgstr "gcov (GCC) %s\n" #~ msgid "" #~ "This is free software; see the source for copying conditions.\n" #~ "There is NO warranty; not even for MERCHANTABILITY or \n" #~ "FITNESS FOR A PARTICULAR PURPOSE.\n" #~ "\n" #~ msgstr "" #~ "Ce logiciel est libre; voir les sources pour les conditions de copie. \n" #~ "Il n'y a PAS GARANTIE; ni implicite pour le MARCHANDAGE ou\n" #~ "pour un BUT PARTICULIER.\n" #~ "\n" #~ msgid "%s:no functions found\n" #~ msgstr "%s: aucune fonction repre\n" # I18N #~ msgid "\n" #~ msgstr "\n" #~ msgid "%s:creating `%s'\n" #~ msgstr "%s: cration de %s \n" #~ msgid "%s:error writing output file `%s'\n" #~ msgstr "%s: ERREUR d'criture dans le fichier de sortie %s .\n" #~ msgid "%s:could not open output file `%s'\n" #~ msgstr "%s: ne peut ouvrir le fichier de sortie %s .\n" #~ msgid "%s:cannot open graph file\n" #~ msgstr "%s: ne peut ouvrir le fichier de graphe\n" #~ msgid "%s:not a gcov graph file\n" #~ msgstr "%s: n'est pas un fichier de graphe gcov\n" #~ msgid "%s:version `%.4s', prefer `%.4s'\n" #~ msgstr "%s:version %.4s , prfre %.4s \n" #~ msgid "%s:already seen blocks for `%s'\n" #~ msgstr "%s:blocs dj vus pour %s \n" #~ msgid "%s:corrupted\n" #~ msgstr "%s:corrompu\n" #~ msgid "%s:cannot open data file\n" #~ msgstr "%s: ne peut ouvrir le fichier de donnes\n" #~ msgid "%s:not a gcov data file\n" #~ msgstr "%s: n'est pas un fichier de donnes gcov\n" #~ msgid "%s:version `%.4s', prefer version `%.4s'\n" #~ msgstr "%s:version %.4s , prfre la version %.4s \n" #~ msgid "%s:stamp mismatch with graph file\n" #~ msgstr "%s: estampille ne concorde par avec le fichier de graphe\n" #~ msgid "%s:unknown function `%u'\n" #~ msgstr "%s: fonction inconnue %u \n" #~ msgid "%s:profile mismatch for `%s'\n" #~ msgstr "%s: profile ne concorde pas pour %s \n" #~ msgid "%s:overflowed\n" #~ msgstr "%s: dbordement\n" #~ msgid "%s:`%s' lacks entry and/or exit blocks\n" #~ msgstr "%s: %s manque de blocs d'entre et/ou de sortie\n" #~ msgid "%s:`%s' has arcs to entry block\n" #~ msgstr "%s: %s possde des arcs vers un bloc d'entre\n" #~ msgid "%s:`%s' has arcs from exit block\n" #~ msgstr "%s: %s possdes des arcs partir du bloc de sortie\n" #~ msgid "%s:graph is unsolvable for `%s'\n" #~ msgstr "%s: graphe n'a pas de solution pour %s \n" #~ msgid "%s `%s'\n" #~ msgstr "%s %s \n" #~ msgid "Lines executed:%s of %d\n" #~ msgstr "Lignes excutes: %s de %d\n" #~ msgid "No executable lines" #~ msgstr "Auncue ligne excutable" #~ msgid "Branches executed:%s of %d\n" #~ msgstr "Branchements excuts: %s de %d\n" #~ msgid "Taken at least once:%s of %d\n" #~ msgstr "Branchements pris au moins une fois: %s de %d\n" #~ msgid "No branches\n" #~ msgstr "Pas de branchement\n" #~ msgid "Calls executed:%s of %d\n" #~ msgstr "Appels excuts: %s de %d\n" #~ msgid "No calls\n" #~ msgstr "Pas d'appel\n" #~ msgid "%s:no lines for `%s'\n" #~ msgstr "%s: pas de ligne pour %s \n" #~ msgid "call %2d returned %s\n" #~ msgstr "appel %2d a retourn %s\n" # FIXME: c'est de l'assembleur ? #~ msgid "call %2d never executed\n" #~ msgstr "call %2d n'est jamais t excut\n" #~ msgid "branch %2d taken %s%s\n" #~ msgstr "branchement %2d a pris %s%s\n" #~ msgid "branch %2d never executed\n" #~ msgstr "branchement %2d n'a jamais t excut\n" #~ msgid "unconditional %2d taken %s\n" #~ msgstr "inconditionnel %2d a pris %s\n" # FIXME: c'est de l'assembleur ? #~ msgid "unconditional %2d never executed\n" #~ msgstr "inconditionnel %2d n'a jamais t excut\n" #~ msgid "%s:cannot open source file\n" #~ msgstr "%s: ne peut ouvrir le fichier source\n" #~ msgid "%s:source file is newer than graph file `%s'\n" #~ msgstr "%s: fichier source est plus rcent que le fichier graphe %s \n" #~ msgid "GCSE disabled" #~ msgstr "GCSE dsactiv" #~ msgid "NULL pointer checks disabled" #~ msgstr "vrification des pointeurs NULS dsactive" #~ msgid "jump bypassing disabled" #~ msgstr "saut d'vitement dsactiv" #~ msgid "%s: %d basic blocks and %d edges/basic block" #~ msgstr "%s: %d blocs de base et %d blocs edges/basic" #~ msgid "%s: %d basic blocks and %d registers" #~ msgstr "%s: %d blocs basic et %d registres" #~ msgid "can't write PCH file: %m" #~ msgstr "ne peut crire le fichier PCH: %m" #~ msgid "can't get position in PCH file: %m" #~ msgstr "ne peut obtenir la position dans le fichier PCH: %m" #~ msgid "can't write padding to PCH file: %m" #~ msgstr "ne peut crire de remplissage dans le fichier PCH: %m" #~ msgid "can't read PCH file: %m" #~ msgstr "ne peut lire le fichier PCH: %m" #~ msgid "had to relocate PCH" #~ msgstr "a d relocaliser PCH" #~ msgid "open /dev/zero: %m" #~ msgstr "ouverture de /dev/zero: %m" #~ msgid "can't write PCH file" #~ msgstr "ne peut crire dans le fichier PCH" #~ msgid "Generating PCH files is not supported when using ggc-simple.c" #~ msgstr "Gnration des ficheirs PCH n'est pas support lors de l'utilisation de ggc-simple.c" #~ msgid "%s cannot be used in asm here" #~ msgstr "%s ne peut tre utilis dans asm ici" #~ msgid "can't open %s: %m" #~ msgstr "ne peut ouvrir %s: %m" #~ msgid "fix_sched_param: unknown param: %s" #~ msgstr "fix_sched_param: paramtre inconnu: %s" #~ msgid "function cannot be inline" #~ msgstr "fonction ne pas pas tre enligne" #~ msgid "varargs function cannot be inline" #~ msgstr "varargs de fonction ne peuvent par tre enligne" #~ msgid "function using alloca cannot be inline" #~ msgstr "fonction utilisant alloca ne pas pas tre enligne" #~ msgid "function using longjmp cannot be inline" #~ msgstr "fonction utilisant longjmp ne peut pas tre enligne" #~ msgid "function using setjmp cannot be inline" #~ msgstr "fonction utilisant setjmp ne peut pas tre enligne" #~ msgid "function uses __builtin_eh_return" #~ msgstr "fonction utilise __builtin_eh_return " #~ msgid "function with nested functions cannot be inline" #~ msgstr "fonction avec fonctions imbriques ne peut pas tre enligne" #~ msgid "function with label addresses used in initializers cannot inline" #~ msgstr "un fonction avec tiquette d'adresses utilise pour l'initialisation ne peut pas tre enligne (inline)" #~ msgid "function too large to be inline" #~ msgstr "fonction trop grande pour tre enligne" #~ msgid "no prototype, and parameter address used; cannot be inline" #~ msgstr "pas de prototpe, et de adresse de paramtre utilise; ne peut pas tre enligne" #~ msgid "inline functions not supported for this return value type" #~ msgstr "fonctions enligne ne peuvent pas tre supportes pour ce type de valeur retourne" #~ msgid "function with varying-size return value cannot be inline" #~ msgstr "fonction avec une valeur retourne de taille variable ne peut pas tre enligne" #~ msgid "function with varying-size parameter cannot be inline" #~ msgstr "fonction avec un paramtre de taille variable ne peut pas tre enligne" #~ msgid "function with transparent unit parameter cannot be inline" #~ msgstr "fonction avec une unit transparente de paramtre ne peut pas tre enligne" #~ msgid "function with computed jump cannot inline" #~ msgstr "fonction avec un saut calcul ne peut pas tre enligne" #~ msgid "function with nonlocal goto cannot be inline" #~ msgstr "fonction avec un goto non local ne peut pas tre enligne" #~ msgid "function with target specific attribute(s) cannot be inlined" #~ msgstr "fonction avec des attributs spcifiques la cible ne peut pas tre enligne" # FIXME: c'est de l'assembleur ? #~ msgid "%Hwill never be executed" #~ msgstr "%Hne sera jamais excut" #~ msgid "This switch lacks documentation" #~ msgstr "Cette option manque de documentation" #~ msgid "command line option \"%s\" is valid for %s but not for %s" #~ msgstr "l'option de la ligne de commande \"%s\" est valide pour %s mais pas pour %s" #~ msgid "missing argument to \"%s\"" #~ msgstr "argument manquant \"%s\"" #~ msgid "argument to \"%s\" should be a non-negative integer" #~ msgstr "argument de \"%s\" doit tre un entier non ngatif" #~ msgid "unrecognized command line option \"%s\"" #~ msgstr "option \"%s\" de la ligne de commande non reconnue" #~ msgid "-Wuninitialized is not supported without -O" #~ msgstr "-Wuninitialized n'est pas support sans -O" #~ msgid "unrecognized register name \"%s\"" #~ msgstr "nom de registre non reconnue \"%s\"" #~ msgid "unknown tls-model \"%s\"" #~ msgstr "tls-model \"%s\" inconnu" #~ msgid "-fwritable-strings is deprecated; see documentation for details" #~ msgstr "-fwritable-strings est obsolte, voir la documentation pour les dtails" #~ msgid "%s: --param arguments should be of the form NAME=VALUE" #~ msgstr "%s: arguments de --param devrait tre de la forme NOM=VALEUR" #~ msgid "invalid --param value `%s'" #~ msgstr "valeur de --param invalide %s " #~ msgid "target system does not support debug output" #~ msgstr "le ssytme cible ne supporte pas la sortie pour mise au point" #~ msgid "debug format \"%s\" conflicts with prior selection" #~ msgstr "le format de mise au point \"%s\" entre en conflit avec une slection prcdente" #~ msgid "unrecognised debug output level \"%s\"" #~ msgstr "niveau de sortie de mise au point non reconnu \"%s\"" #~ msgid "debug output level %s is too high" #~ msgstr "niveau de sortie de mise au point %s est trop lev" #~ msgid "The following options are language-independent:\n" #~ msgstr "Les options suivantes sont indpendantes du langage:\n" #~ msgid "" #~ "The %s front end recognizes the following options:\n" #~ "\n" #~ msgstr "" #~ "L'interface %s reconnat les options suivantes:\n" #~ "\n" #~ msgid "The --param option recognizes the following as parameters:\n" #~ msgstr "L'option --param reconnat les paramtres suivant:\n" #~ msgid "invalid parameter `%s'" #~ msgstr "paramtre invalide %s " #~ msgid "corrupted profile info: run_max * runs < sum_max" #~ msgstr "profile info corrompu: run_max * runs < sum_max" #~ msgid "corrupted profile info: sum_all is smaller than sum_max" #~ msgstr "info profile corrompu: sum_all est plus petit que sum_max" #~ msgid "corrupted profile info: edge from %i to %i exceeds maximal count" #~ msgstr "info de profilage corrompu: bordure (edge) %i %i excde le compte maximal" #~ msgid "corrupted profile info: number of iterations for basic block %d thought to be %i" #~ msgstr "info de profilage corrompu: nombre d'itrations pour un bloc basic %d devrait tre %i" #~ msgid "corrupted profile info: number of executions for edge %d-%d thought to be %i" #~ msgstr "info de profilage corrompu: nombre d'excutions pour bordures (edge) %d-%d devrait tre %i" #~ msgid "%s: internal abort\n" #~ msgstr "%s: abandon interne\n" #~ msgid "%s: error writing file `%s': %s\n" #~ msgstr "%s: erreur d'criture au fichier %s : %s\n" #~ msgid "%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]'\n" #~ msgstr "%s: usage %s [ -VqfnkN ] [ -i ] [ nom-de-fichier ... ] \n" #~ msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]'\n" #~ msgstr "%s: usage %s [ -VqfnkNlgC ] [ -B ] [ nom-de-fichier ... ] \n" #~ msgid "%s: warning: no read access for file `%s'\n" #~ msgstr "%s: AVERTISSEMENT: aucun accs en lecture du fichier %s \n" #~ msgid "%s: warning: no write access for file `%s'\n" #~ msgstr "%s: AVERTISSEMENT: aucun accs en criture du fichier %s \n" #~ msgid "%s: warning: no write access for dir containing `%s'\n" #~ msgstr "%s: AVERTISSEMENT: aucun accs en criture du rpertoire contenant %s \n" #~ msgid "%s: invalid file name: %s\n" #~ msgstr "%s: nom de fichier invalide: %s\n" #~ msgid "%s: %s: can't get status: %s\n" #~ msgstr "%s: %s: ne peut obtenir l'tat: %s\n" #~ msgid "" #~ "\n" #~ "%s: fatal error: aux info file corrupted at line %d\n" #~ msgstr "" #~ "\n" #~ "%s: erreur fatale: fichier auxiliaire d'infos la ligne %d\n" #~ msgid "%s:%d: declaration of function `%s' takes different forms\n" #~ msgstr "%s:%d: dclaration de fonction %s prend diffrentes formes\n" #~ msgid "%s: compiling `%s'\n" #~ msgstr "%s: en compilation %s \n" #~ msgid "%s: wait: %s\n" #~ msgstr "%s: en attente: %s\n" #~ msgid "%s: subprocess got fatal signal %d\n" #~ msgstr "%s: sous-processus a reu le signal fatal %d\n" #~ msgid "%s: %s exited with status %d\n" #~ msgstr "%s: %s a termin avec le statut %d\n" #~ msgid "%s: warning: missing SYSCALLS file `%s'\n" #~ msgstr "%s: AVERTISSEMENT: fichier des SYSCALLS %s est manquant\n" #~ msgid "%s: can't read aux info file `%s': %s\n" #~ msgstr "%s: ne peut lire le fichier auxiliaire d'infos %s : %s\n" #~ msgid "%s: can't get status of aux info file `%s': %s\n" #~ msgstr "%s: ne peut obtenir l'tat du fichier auxiliaire d'infos %s : %s\n" #~ msgid "%s: can't open aux info file `%s' for reading: %s\n" #~ msgstr "%s: ne peut ouvrir le fichier auxiliaire d'infos %s en lecture: %s\n" #~ msgid "%s: error reading aux info file `%s': %s\n" #~ msgstr "%s: erreur lors de la lecture du fichier auxilaire d'infos %s : %s\n" #~ msgid "%s: error closing aux info file `%s': %s\n" #~ msgstr "%s: erreur lors de la fermeture du fichier auxiliaire d'infos %s : %s\n" #~ msgid "%s: can't delete aux info file `%s': %s\n" #~ msgstr "%s: ne peut dtruire le fichier auxiliaire d'infos %s : %s\n" #~ msgid "%s: can't delete file `%s': %s\n" #~ msgstr "%s: ne peut dtruire le fichier %s : %s\n" #~ msgid "%s: warning: can't rename file `%s' to `%s': %s\n" #~ msgstr "%s: AVERTISSEMENT: ne peut renommer le fichier %s %s : %s\n" #~ msgid "%s: conflicting extern definitions of '%s'\n" #~ msgstr "%s: dfinitions externes conflictuelles de %s \n" #~ msgid "%s: declarations of '%s' will not be converted\n" #~ msgstr "%s: dclarations de %s ne seront pas converties\n" #~ msgid "%s: conflict list for '%s' follows:\n" #~ msgstr "%s: liste conflictuelle pour %s suit:\n" #~ msgid "%s: warning: using formals list from %s(%d) for function `%s'\n" #~ msgstr "%s: AVERTISSEMENT: using la liste des formels de %s(%d) pour la fonction %s \n" #~ msgid "%s: %d: `%s' used but missing from SYSCALLS\n" #~ msgstr "%s: %d: %s utilis mais manquant dans les SYSCALLS\n" #~ msgid "%s: %d: warning: no extern definition for `%s'\n" #~ msgstr "%s: %d: AVERTISSEMENT: pas de dfinition externe pour %s \n" #~ msgid "%s: warning: no static definition for `%s' in file `%s'\n" #~ msgstr "%s: AVERTISSEMENT: pas de dfinition statique pour %s dans le fichier %s \n" #~ msgid "%s: multiple static defs of `%s' in file `%s'\n" #~ msgstr "%s: multiples dfinitions statiques de %s dans le fichier %s \n" #~ msgid "%s: %d: warning: source too confusing\n" #~ msgstr "%s: %d: AVERTISSEMENT: trop de confusions dans le source\n" #~ msgid "%s: %d: warning: varargs function declaration not converted\n" #~ msgstr "%s: %d: AVERTISSEMENT: dclaration de varargs de fonction non convertis\n" #~ msgid "%s: declaration of function `%s' not converted\n" #~ msgstr "%s: dclaration de la fonction %s non convertie\n" #~ msgid "%s: warning: too many parameter lists in declaration of `%s'\n" #~ msgstr "%s: AVERTISSEMENT: trop de paramtres de listes dans la dclaration de %s \n" #~ msgid "" #~ "\n" #~ "%s: warning: too few parameter lists in declaration of `%s'\n" #~ msgstr "" #~ "\n" #~ "%s: AVERTISSEMENT: trop peu de paramtres de listes dans la dclaration de %s \n" #~ msgid "%s: %d: warning: found `%s' but expected `%s'\n" #~ msgstr "%s: %d: AVERTISSEMENT: a obtenu %s mais attendait %s \n" #~ msgid "%s: local declaration for function `%s' not inserted\n" #~ msgstr "%s: dclaration locale pour la fonction %s n'a pas t insre\n" #~ msgid "" #~ "\n" #~ "%s: %d: warning: can't add declaration of `%s' into macro call\n" #~ msgstr "" #~ "\n" #~ "%s: %d: AVERTISSEMENT: ne peut ajouter une dclaration de %s dans l'appel macro\n" #~ msgid "%s: global declarations for file `%s' not inserted\n" #~ msgstr "%s: dclarations globale du fichier %s n'ont pas t insres\n" #~ msgid "%s: definition of function `%s' not converted\n" #~ msgstr "%s: dfinition de la fonction %s n'a pas t convertie\n" #~ msgid "%s: %d: warning: definition of %s not converted\n" #~ msgstr "%s: %d: AVERTISSEMENT: dfinition de %s n'a pas t convertie\n" #~ msgid "%s: found definition of `%s' at %s(%d)\n" #~ msgstr "%s: dfinition de %s trouv %s(%d)\n" #~ msgid "%s: %d: warning: `%s' excluded by preprocessing\n" #~ msgstr "%s: %d: AVERTISSEMENT: %s exclu par le prprocesseur\n" #~ msgid "%s: function definition not converted\n" #~ msgstr "%s: dfinition de fonction n'a pas t convertie\n" #~ msgid "%s: `%s' not converted\n" #~ msgstr "%s: %s n'a pas t converti\n" #~ msgid "%s: would convert file `%s'\n" #~ msgstr "%s: devrait convertir le fichier %s \n" #~ msgid "%s: converting file `%s'\n" #~ msgstr "%s: conversion du fichier %s \n" #~ msgid "%s: can't get status for file `%s': %s\n" #~ msgstr "%s: ne peut obtenur l'tat du fichier %s : %s\n" #~ msgid "%s: can't open file `%s' for reading: %s\n" #~ msgstr "%s: ne peut ouvrir le fichier %s en lecture: %s\n" #~ msgid "" #~ "\n" #~ "%s: error reading input file `%s': %s\n" #~ msgstr "" #~ "\n" #~ "%s: erreur de lecture du fichier d'entre %s : %s\n" #~ msgid "%s: can't create/open clean file `%s': %s\n" #~ msgstr "%s: ne peut crer/ouvrir un fichier propre %s : %s\n" #~ msgid "%s: warning: file `%s' already saved in `%s'\n" #~ msgstr "%s: AVERTISSEMENT: fichier %s est dj sauvegard dans %s \n" #~ msgid "%s: can't link file `%s' to `%s': %s\n" #~ msgstr "%s: ne peut lier le fichier %s %s : %s\n" #~ msgid "%s: can't create/open output file `%s': %s\n" #~ msgstr "%s: ne peut crer/ouvrier le fichier de sortie %s : %s\n" #~ msgid "%s: can't change mode of file `%s': %s\n" #~ msgstr "%s: ne peut changer le mode du fichier %s : %s\n" #~ msgid "%s: cannot get working directory: %s\n" #~ msgstr "%s: ne peut reprer le rpertoire de travail: %s\n" #~ msgid "%s: input file names must have .c suffixes: %s\n" #~ msgstr "%s: noms de fichiers d'entre doivent avoir le suffixe .c: %s\n" #~ msgid "Didn't find a coloring.\n" #~ msgstr "N'a pas repr une coloration.\n" #~ msgid "output constraint %d must specify a single register" #~ msgstr "Contrainte de sortie %d doit spcifier un simple registre" #~ msgid "output constraint %d cannot be specified together with \"%s\" clobber" #~ msgstr "contrainte de sortie %d ne doit pas tre spcifi avec %s clobber" #~ msgid "output regs must be grouped at top of stack" #~ msgstr "registres de sortie doivent tre regroups au haut de la pile" #~ msgid "implicitly popped regs must be grouped at top of stack" #~ msgstr "les registres implicitement dpils doivent tre groups au haut de la pile" #~ msgid "output operand %d must use `&' constraint" #~ msgstr "oprande de sortie %d doit utiliser la contrainte & " #~ msgid "can't use '%s' as a %s register" #~ msgstr "ne peut utiliser %s comme le registre %s" #~ msgid "unknown register name: %s" #~ msgstr "nom de registre inconnu: %s" #~ msgid "global register variable follows a function definition" #~ msgstr "variable registre globale suit la dfinition d'une fonction" #~ msgid "register used for two global register variables" #~ msgstr "registre utilis pour deux variables registres globales" #~ msgid "call-clobbered register used for global register variable" #~ msgstr "registre maltrait par un appel utilis par un variable registre globale" #~ msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)" #~ msgstr "validate_value_data: [%u] next_regno erron pour une chane vide (%u)" #~ msgid "validate_value_data: Loop in regno chain (%u)" #~ msgstr "validate_value_data: boucle dans la chane regno (%u)" #~ msgid "validate_value_data: [%u] Bad oldest_regno (%u)" #~ msgstr "validate_value_data: [%u] oldest_regno erron (%u)" #~ msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)" #~ msgstr "validate_value_data: [%u] registre non vide dans la chane (%s %u %i)" #~ msgid "cannot reload integer constant operand in `asm'" #~ msgstr "ne peut recharger l'oprande de constante entire dans asm " #~ msgid "impossible register constraint in `asm'" #~ msgstr "impossible de contraindre les registres en asm " #~ msgid "`&' constraint used with no register class" #~ msgstr "contrainte & utilis sans classe registre" #~ msgid "unable to generate reloads for:" #~ msgstr "incapable de gnrer des recharges pour:" #~ msgid "inconsistent operand constraints in an `asm'" #~ msgstr "contrainte d'oprande inconsistente en asm " #~ msgid "frame size too large for reliable stack checking" #~ msgstr "taille de trame trop grande pour une vrification fiable de la pile" #~ msgid "try reducing the number of local variables" #~ msgstr "essayer de rduire le nombre de variables locales" #~ msgid "can't find a register in class `%s' while reloading `asm'" #~ msgstr "ne peut reprer un registre dans la classe %s durant le rechargement asm " #~ msgid "unable to find a register to spill in class `%s'" #~ msgstr "incapable de trouver un registre de dversement dans la classe %s " #~ msgid "this is the insn:" #~ msgstr "ceci est le insn:" #~ msgid "`asm' operand requires impossible reload" #~ msgstr "oprande asm requiert une recharge impossible" #~ msgid "could not find a spill register" #~ msgstr "ne peut reprer un registre de dversement" #~ msgid "`asm' operand constraint incompatible with operand size" #~ msgstr "contrainte de l'oprande asm incompatible avec la taille de l'oprande" #~ msgid "VOIDmode on an output" #~ msgstr "mode VOID sur une sortie" #~ msgid "output operand is constant in `asm'" #~ msgstr "oprande de sortie est une constante dans asm " #~ msgid "unrecognizable insn:" #~ msgstr "insn non reconnaissable:" #~ msgid "insn does not satisfy its constraints:" #~ msgstr "insn ne satisfait pas ses contraintes:" #~ msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d" #~ msgstr "vrification RTL: accs de elt %d de %s avec le dernier elt %d dans %s, %s:%d" #~ msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" #~ msgstr "vrification RTL: attendu elt %d de type %c , a %c (rtx %s) dans %s, %s:%d" #~ msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d" #~ msgstr "vrification RTL: attendu elt %d de type %c ou %c , a %c (rtx %s) dans %s, %s:%d" #~ msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d" #~ msgstr "vrification RTL: code attendu %s , a %s dans %s, %s:%d" #~ msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d" #~ msgstr "vrification RTL: code attendu %s ou %s , a %s dans %s, %s:%d" #~ msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" #~ msgstr "vrification RTL: accs de elt %d du vecteur avec le dernier elt %d dans %s, %s:%d" #~ msgid "RTL flag check: %s used with unexpected rtx code `%s' in %s, at %s:%d" #~ msgstr "vrification du fanion RTL: %s utilis avec un code rtx inattendu, %s dans %s, %s:%d" #~ msgid "jump to `%s' invalidly jumps into binding contour" #~ msgstr "saut vers %s saute de manire invalide dans un contour de liaison" #~ msgid "%Jlabel '%D' used before containing binding contour" #~ msgstr "%Jtiquette %D utilis avant de contenir le contour de liaison" #~ msgid "output operand constraint lacks `='" #~ msgstr "contrainte de sortie de l'oprande manque = " #~ msgid "output constraint `%c' for operand %d is not at the beginning" #~ msgstr "contrainte de sortie %c pour l'oprande %d n'est pas au dbut" #~ msgid "operand constraint contains incorrectly positioned '+' or '='" #~ msgstr "contrainte de l'oprande contient + ou - incorrectement positionn" #~ msgid "`%%' constraint used with last operand" #~ msgstr "contrainte %% utilise avec la dernire oprande" #~ msgid "matching constraint not valid in output operand" #~ msgstr "contrainte concordante n'est pas valide dans une oprande de sortie" #~ msgid "read-write constraint does not allow a register" #~ msgstr "contrainte de lecture-ccriture ne permet pas de registre" #~ msgid "input operand constraint contains `%c'" #~ msgstr "contrainte d'entre de l'oprande contient %c " #~ msgid "matching constraint references invalid operand number" #~ msgstr "nombre d'oprandes invalides pour rfrences de containte concordantes" #~ msgid "invalid punctuation `%c' in constraint" #~ msgstr "ponctuation invalide %c dans la contrainte" #~ msgid "matching constraint does not allow a register" #~ msgstr "contrainte de concordance ne permet pas de reigstre" #~ msgid "asm-specifier for variable `%s' conflicts with asm clobber list" #~ msgstr "asm-specifier pour la variable %s est en conflit avec la liste asm clobber" #~ msgid "unknown register name `%s' in `asm'" #~ msgstr "nom de registre inconnu %s dans asm " #~ msgid "PIC register `%s' clobbered in `asm'" #~ msgstr "registre PIC %s est maltrait dans asm " #~ msgid "more than %d operands in `asm'" #~ msgstr "plus que %d oprandes dans asm " #~ msgid "output number %d not directly addressable" #~ msgstr "nombre de sortie %d n,est pas directement adressable" #~ msgid "asm operand %d probably doesn't match constraints" #~ msgstr "oprande asm %d ne concorde pas probablement avec les contraintes" #~ msgid "use of memory input without lvalue in asm operand %d is deprecated" #~ msgstr "utilisation de l'entr mmoire sans lvalue dans l'oprande asm %d est obsolte" #~ msgid "asm clobber conflict with output operand" #~ msgstr "asm clobber est en conflit sans oprande de sortie" #~ msgid "asm clobber conflict with input operand" #~ msgstr "asm globber est en conflit avec l'oprande d'entre" #~ msgid "too many alternatives in `asm'" #~ msgstr "trop d'alternatives dans asm " #~ msgid "operand constraints for `asm' differ in number of alternatives" #~ msgstr "contraintes de l'oprande pour asm diffrent en nombre d'alternatives" #~ msgid "duplicate asm operand name '%s'" #~ msgstr "nom d'oprande asm %s apparat en double" #~ msgid "missing close brace for named operand" #~ msgstr "accolade de fermeture manquante pour l'oprand nomme" #~ msgid "undefined named operand '%s'" #~ msgstr "oprande nomme %s indfinie" #~ msgid "%Hstatement with no effect" #~ msgstr "%Hdclaration sasn effet" #~ msgid "%Hvalue computed is not used" #~ msgstr "%Hvaleur calcule n'est pas utilise" #~ msgid "%Junused variable '%D'" #~ msgstr "%Jvariable %D inutilise" #~ msgid "%Hunreachable code at beginning of %s" #~ msgstr "%Hcode inatteignable au dbut de %s" #~ msgid "enumeration value `%s' not handled in switch" #~ msgstr "valeur d'numration %s n'est pas traite dans le switch" #~ msgid "case value `%ld' not in enumerated type" #~ msgstr "valeur du case %ld n'est pas dans le type numr" #~ msgid "case value `%ld' not in enumerated type `%s'" #~ msgstr "valeur du case %ld n'est pas dans le type numr %s " #~ msgid "switch missing default case" #~ msgstr "switch n'a pas de case par dfaut" #~ msgid "type size can't be explicitly evaluated" #~ msgstr "taille du type ne peut tre explicitement value" #~ msgid "variable-size type declared outside of any function" #~ msgstr "type de taille variable dclar l'extrieur den'importe quelle fonction" #~ msgid "%Jsize of '%D' is %d bytes" #~ msgstr "%Jtaille de %D est de %d octets" #~ msgid "%Jsize of '%D' is larger than %d bytes" #~ msgstr "%Jtaille de %D est plus grande que %d octets" #~ msgid "%Jpacked attribute causes inefficient alignment for '%D'" #~ msgstr "%Jattribut empaquet provoque un alignement inefficient pour %D " #~ msgid "%Jpacked attribute is unnecessary for '%D'" #~ msgstr "%Jattribut empaquet n'est pas ncessaire pour %D " #~ msgid "%Jpadding struct to align '%D'" #~ msgstr "%Jremplissage du struct pour aligner %D " #~ msgid "padding struct size to alignment boundary" #~ msgstr "remplissage la taille du struct pour aligner les frontires" #~ msgid "packed attribute causes inefficient alignment for `%s'" #~ msgstr "attribut empaquet provoque un alignement inefficient pour %s " #~ msgid "packed attribute is unnecessary for `%s'" #~ msgstr "attribut empaquet n'est pas ncessaire pour %s " #~ msgid "packed attribute causes inefficient alignment" #~ msgstr "attribut empaquet provoque un alignement inefficient" #~ msgid "packed attribute is unnecessary" #~ msgstr "attribut empaquet n'est pas ncessaire" #~ msgid "__builtin_saveregs not supported by this target" #~ msgstr " __builtin_saveregs n'est pas support par cette cible" #~ msgid "cannot timevar_pop '%s' when top of timevars stack is '%s'" #~ msgstr "ne peut faire timevar_pop %s lorsque le haut de la pile timevars est %s " #~ msgid "" #~ "\n" #~ "Execution times (seconds)\n" #~ msgstr "" #~ "\n" #~ "Temps d'excution (secondes)\n" #~ msgid " TOTAL :" #~ msgstr " TOTAL :" #~ msgid "time in %s: %ld.%06ld (%ld%%)\n" #~ msgstr "temps pass dans %s: %ld.%06ld (%ld%%)\n" #~ msgid "collect: reading %s\n" #~ msgstr "collect: lecture de %s\n" #~ msgid "collect: recompiling %s\n" #~ msgstr "collect: recompilation de %s\n" #~ msgid "collect: tweaking %s in %s\n" #~ msgstr "collect: tordage de %s dans %s\n" #~ msgid "collect: relinking\n" #~ msgstr "collect: r-dition des liens\n" #~ msgid "ld returned %d exit status" #~ msgstr "ld a retourn %d code d'tat d'excution" # I18N #~ msgid "%s " #~ msgstr "%s " # I18N #~ msgid " %s" #~ msgstr " %s" #~ msgid "invalid option argument `%s'" #~ msgstr "argument de l'option invalide %s " #~ msgid "getting core file size maximum limit: %m" #~ msgstr "limite maximale obtenue de la taille du fichier de vidange (core file): %m" #~ msgid "setting core file size limit to maximum: %m" #~ msgstr "initialisation de la limite maximal de la taille du fichier de vidance (core file): %m" #~ msgid "%J'%F' used but never defined" #~ msgstr "%J %F utilis mais n'a jamais t dfini" #~ msgid "%J'%F' declared `static' but never defined" #~ msgstr "%J %F dclar static mais n'a jamais t dfinie" #~ msgid "%J'%D' defined but not used" #~ msgstr "%J %F dfini mais n'a pas t utilis" #~ msgid "`%s' is deprecated (declared at %s:%d)" #~ msgstr " %s est obsolte (dclar %s:%d)" #~ msgid "`%s' is deprecated" #~ msgstr " %s est obsolte" #~ msgid "type is deprecated (declared at %s:%d)" #~ msgstr "type est obsolte (dclar %s:%d)" #~ msgid "type is deprecated" #~ msgstr "type est obsolte" #~ msgid "invalid register name `%s' for register variable" #~ msgstr "nom de registre invalide %s pour un variable registre" #~ msgid "branch target register load optimization is not intended to be run twice" #~ msgstr "optimisation du chargement du registre cible de branchement est pas prvu pour tre excut deux fois" #~ msgid "" #~ "\n" #~ "Target specific options:\n" #~ msgstr "" #~ "\n" #~ "Options spcifiques la cible:\n" #~ msgid " -m%-23s [undocumented]\n" #~ msgstr " -m%-23s [non document]\n" #~ msgid "" #~ "\n" #~ "There are undocumented target specific options as well.\n" #~ msgstr "" #~ "\n" #~ "Il y a des options spcifiques la cible qui ne sont pas documents aussi.\n" #~ msgid " They exist, but they are not documented.\n" #~ msgstr " Ils existent, mais ils ne sont pas documents.\n" #~ msgid "unrecognized gcc debugging option: %c" #~ msgstr "option gcc de mise au point non reconnue: %c" #~ msgid "invalid option `%s'" #~ msgstr "option invalide %s " #~ msgid "" #~ "%s%s%s version %s (%s)\n" #~ "%s\tcompiled by GNU C version %s.\n" #~ "%s%s%s version %s (%s) compiled by CC.\n" #~ msgstr "" #~ "%s%s%s version %s (%s)\n" #~ "%s\tcompil par GNU C version %s.\n" #~ "%s%s%s version %s (%s) compil par CC.\n" #~ msgid "%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n" #~ msgstr "heuristiques %s%sGGC: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n" #~ msgid "options passed: " #~ msgstr "options passes: " #~ msgid "options enabled: " #~ msgstr "options autorises: " #~ msgid "can't open %s for writing: %m" #~ msgstr "ne peut ouvrir %s en criture: %m" #~ msgid "created and used with different settings of -fpic" #~ msgstr "cr et utilis avec des configurations diffrentes de -fpic" #~ msgid "created and used with different settings of -fpie" #~ msgstr "cr et utilis avec des configurations diffrentes de -fpie" #~ msgid "created and used with differing settings of `-m%s'" #~ msgstr "cr et utilis avec des configurations diffrentes de -m%s " #~ msgid "out of memory" #~ msgstr "mmoire puise" #~ msgid "instruction scheduling not supported on this target machine" #~ msgstr "instruction d'ordonnancement n'est pas supporte sur cette machine cible" #~ msgid "this target machine does not have delayed branches" #~ msgstr "cette machine cible n'a pas de branchments avec dlais" #~ msgid "-f%sleading-underscore not supported on this target machine" #~ msgstr "-f%sleading-underscore n'est pas support sur cette machine cible" #~ msgid "target system does not support the \"%s\" debug format" #~ msgstr "systme cible ne supporte par le format \"%s\" de mise au point" #~ msgid "-ffunction-sections not supported for this target" #~ msgstr "-ffunction-sections n'est pas support pour cette cible" #~ msgid "-fdata-sections not supported for this target" #~ msgstr "-fdata-sections n'est pas support pour cette machine cible" #~ msgid "-ffunction-sections disabled; it makes profiling impossible" #~ msgstr "-ffunction-sections dsactiv; cela rend le profilage impossible" #~ msgid "-fprefetch-loop-arrays not supported for this target" #~ msgstr "-fprefetch-loop-arrays n'est pas support pour cette machine cible" #~ msgid "-fprefetch-loop-arrays not supported for this target (try -march switches)" #~ msgstr "-fprefetch-loop-arrays n'est pas support sur cette machine cible (essayer -march options)" #~ msgid "-fprefetch-loop-arrays is not supported with -Os" #~ msgstr "-fprefetch-loop-arrays n'est pas support avec -Os" #~ msgid "-ffunction-sections may affect debugging on some targets" #~ msgstr "-ffunction-sections peut affecter la mise au point sur quelques machines cibles." #~ msgid "error writing to %s: %m" #~ msgstr "erreur d'criture dans %s: %m" #~ msgid "error closing %s: %m" #~ msgstr "erreur de fermeture %s: %m" #~ msgid "could not open dump file `%s'" #~ msgstr "ne peut ouvrir le fichier de vidange %s " #~ msgid "ignoring unknown option `%.*s' in `-fdump-%s'" #~ msgstr "option inconnue %.*s ignore dans -fdump-%s " #~ msgid "%Jfunction '%F' can never be inlined because it uses alloca (override using the always_inline attribute)" #~ msgstr "%Jfonction %F ne peut tre enligne parce qu'elle utilise alloca (crasant l'utiliastion de l'attribut always_inline)" #~ msgid "%Jfunction '%F' can never be inlined because it uses setjmp" #~ msgstr "%Jfonction %F ne peut tre enligne parce qu'elle utilise setjmp" #~ msgid "%Jfunction '%F' can never be inlined because it uses variable argument lists" #~ msgstr "%Jfonction %F ne peut tre enligne parce qu'elle utilise une liste variable d'arguments" #~ msgid "%Jfunction '%F' can never be inlined because it uses setjmp-longjmp exception handling" #~ msgstr "%Jfonction %F ne peut tre enligne parce qu'elle utilise le traitement d'exception setjmp-longjmp" #~ msgid "%Jfunction '%F' can never be inlined because it contains a nested function" #~ msgstr "%Jfonction %F ne peut tre enligne parce qu'elle contient une fonction imbrique" #~ msgid "%Jfunction '%F' can never be inlined because it contains a computed goto" #~ msgstr "%Jfonction %F ne peut tre enligne parce qu'elle contient un goto calcul" #~ msgid "%Jfunction '%F' can never be inlined because it contains a nonlocal goto" #~ msgstr "%Jfonction %F ne peut tre enligne parce qu'elle contient un goto qui n'est pas local" #~ msgid "%Jfunction '%F' can never be inlined because it uses variable sized variables" #~ msgstr "%Jfonction %F ne peut tre enligne parce qu'elle utilise une taille variable de variables" #~ msgid "%Jinlining failed in call to '%F': %s" #~ msgstr "%Jl'enlignage de l'appel %F : %s a chou" #~ msgid "%Jsize of return value of '%D' is %u bytes" #~ msgstr "%Jtaille de la valeur retourne par %D est %u octets" #~ msgid "%Jsize of return value of '%D' is larger than %wd bytes" #~ msgstr "%Jtaille de la valeur retourne par %D suprieure %wd octets" #~ msgid "arrays of functions are not meaningful" #~ msgstr "tableaux de fonctions n'a pas grand sens" #~ msgid "function return type cannot be function" #~ msgstr "Le type retourn d'une fonction ne peut tre une fonction" #~ msgid "invalid initializer for bit string" #~ msgstr "initialisation invalide pour une chane de bits" #~ msgid "tree check: expected %s, have %s in %s, at %s:%d" #~ msgstr "vrification de l'arbre: attendait %s, obtenu %s dans %s, %s:%d" #~ msgid "tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d" #~ msgstr "vrification de l'arbre: attendait classe %c , obtenu %c (%s) dans %s, %s:%d" #~ msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d" #~ msgstr "vrification de l'arbre: accs de elt %d de tree-vec avec %d elts dans %s, %s:%d" #~ msgid "tree check: accessed operand %d of %s with %d operands in %s, at %s:%d" #~ msgstr "vrification de l'arbre: oprande accd %d de %s avec %d oprandes dans %s, %s:%d" #~ msgid "%J%D causes a section type conflict" #~ msgstr "%J%D cause un conflit du type de section" #~ msgid "%Jregister name not specified for '%D'" #~ msgstr "%Jnom de registre n'est pas spcifi pour %D " #~ msgid "%Jinvalid register name for '%D'" #~ msgstr "%Jnom de registre invalide pour %D " #~ msgid "%Jdata type of '%D' isn't suitable for a register" #~ msgstr "%Jtype de donnes de %D n'est pas applicable pour un registre" #~ msgid "%Jregister specified for '%D' isn't suitable for data type" #~ msgstr "%Jregistre spcifi pour %D n'est applicable un type de donnes" #~ msgid "global register variable has initial value" #~ msgstr "variable globale registre a une valeur initiale" #~ msgid "volatile register variables don't work as you might wish" #~ msgstr "variables resgistres volatiles ne fonctionne pas comme vous le souhaiteriez" #~ msgid "%Jregister name given for non-register variable '%D'" #~ msgstr "%Jnom de registre donn pour une variable non registre %D " #~ msgid "%Jstorage size of `%D' isn't known" #~ msgstr "%Jtaille de stockage de %D n'est pas connue" #~ msgid "%Jalignment of '%D' is greater than maximum object file alignment. Using %d" #~ msgstr "%Jalignement de %D est plus grand que l'alignement maximal du fichier objet. %d est utilis." #~ msgid "thread-local COMMON data not implemented" #~ msgstr "thread-local COMMON data n'est pas implant" #~ msgid "%Jrequested alignment for '%D' is greater than implemented alignment of %d" #~ msgstr "%Jrequte d'alignement pour '%D' est plus grand que l'alignement implant de %d" #~ msgid "initializer for integer value is too complicated" #~ msgstr "initialisation d'entier trop complique" #~ msgid "initializer for floating value is not a floating constant" #~ msgstr "l'initialisation d'une valeur virgule flottante n'est pas une constante virgule flottante" #~ msgid "unknown set constructor type" #~ msgstr "type de jeu de constructeurs inconnu" #~ msgid "invalid initial value for member `%s'" #~ msgstr "valeur initiale invalide pour le membre %s " #~ msgid "%Jweak declaration of '%D' must precede definition" #~ msgstr "%Jdclaration faible de %D qui doit tre prcde d'une dfinition" #~ msgid "%Jweak declaration of '%D' after first use results in unspecified behavior" #~ msgstr "%Jdclaration faible de %D aprs une premire utilisation des rsultats d'un comportement non spcifi" #~ msgid "%Jweak declaration of '%D' must be public" #~ msgstr "%Jdclaration faible de %D doit tre publique" #~ msgid "%Jweak declaration of '%D' not supported" #~ msgstr "%Jdclaration faible de %D n'est pas supporte" #~ msgid "only weak aliases are supported in this configuration" #~ msgstr "seulement les alias faibles sont supports dans cette configuration" #~ msgid "alias definitions not supported in this configuration; ignored" #~ msgstr "dfinitions d'alias ne sont pas supports dans cette configuration; ignor" #~ msgid "visibility attribute not supported in this configuration; ignored" #~ msgstr "visibilit de l'attribut n'est pas support dans cette configuration; ignor" #~ msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d" #~ msgstr "tableau virtuel %s[%lu]: lment %lu hors limite dans %s, %s:%d" #~ msgid "underflowed virtual array %s in %s, at %s:%d" #~ msgstr "sous dbordement du tableau virtuele %s dans %s, %s:%d" #~ msgid "no sclass for %s stab (0x%x)\n" #~ msgstr "pas de sclass pour le stab %s (0x%x)\n" #~ msgid "fatal error: " #~ msgstr "erreur fatale: " #~ msgid "internal compiler error: " #~ msgstr "erreur interne du compilateur: " #~ msgid "sorry, unimplemented: " #~ msgstr "dsol, pas implant: " #~ msgid "anachronism: " #~ msgstr "anachronisme: " #~ msgid "note: " #~ msgstr "note: " #~ msgid "debug: " #~ msgstr "mise au point: " #~ msgid "The maximum number of instructions in a single function eligible for inlining" #~ msgstr "Le nombre maximum d'instructions dans une fonction simple ligible au type enligne" #~ msgid "The maximum number of instructions when automatically inlining" #~ msgstr "Le nombre maximum d'instructions lorsqu'automatiquement de type enligne" #~ msgid "The maximum number of instructions for the RTL inliner" #~ msgstr "Le nombre maximum d'instructions pour la fonction d'enlignage RTL" #~ msgid "The maximum number of instructions to consider to fill a delay slot" #~ msgstr "Le nombre maximum d'instructions considrer pour remplir une slot dlai" #~ msgid "The maximum number of instructions to consider to find accurate live register information" #~ msgstr "Le nombre maximum d'instructions considrer pour reprer un registre d'information actif et prcis" #~ msgid "The maximum length of scheduling's pending operations list" #~ msgstr "La longueur maximale de la liste des opration en attente d'ordonnancement" #~ msgid "The size of function body to be considered large" #~ msgstr "La taille du corps de la fonction est considr comme tant grande" #~ msgid "Maximal growth due to inlining of large function (in percent)" #~ msgstr "Croissance maximal en raison de l'enlignage d'une grande fonction (en pourcent)" #~ msgid "how much can given compilation unit grow because of the inlining (in percent)" #~ msgstr "quelle croissance d'une unit de compilation peut tre tolre en raison de l'enlignage (en pourcent)" #~ msgid "The maximum amount of memory to be allocated by GCSE" #~ msgstr "La taille maximale de mmoire tre allou par GCSE" #~ msgid "The maximum number of passes to make when doing GCSE" #~ msgstr "Le nombre maxium de passes effectuer lors de l'excution de GCSE" #~ msgid "The maximum number of instructions to consider to unroll in a loop" #~ msgstr "Le nombre maximum d'instructions considrer inclure dans une boucle" #~ msgid "The maximum number of instructions to consider to unroll in a loop on average" #~ msgstr "Le nombre maximum d'instructions considrer inclure dans une boucle en moyenne" #~ msgid "The maximum number of unrollings of a single loop" #~ msgstr "Le nombre maximum d'instructions inclure dans une boucle simple" #~ msgid "The maximum number of insns of a peeled loop" #~ msgstr "Le nombre maximum d'insns de boucle rduite" #~ msgid "The maximum number of peelings of a single loop" #~ msgstr "Le nombre maxium de passes de rduction d'une boucle simple" #~ msgid "The maximum number of insns of a completely peeled loop" #~ msgstr "Le nombre maximum d'insns d'une boucle compltement rduite" #~ msgid "The maximum number of peelings of a single loop that is peeled completely" #~ msgstr "Le nombre maximum de rductions d'une boucle simple qui a t compltement rduite" #~ msgid "The maximum number of insns of a peeled loop that rolls only once" #~ msgstr "Le nombre maximum d'insns d'une boucle rduite qui tourne une seule fois" #~ msgid "The maximum number of insns of an unswitched loop" #~ msgstr "Le nombre maximum d'insns d'une boucle sans branchement" #~ msgid "The maximum number of unswitchings in a single loop" #~ msgstr "Le nombre maximum de non branchement dans une boucle simple" #~ msgid "Select fraction of the maximal count of repetitions of basic block in program given basic block needs to have to be considered hot" #~ msgstr "Slectionner la fraction du dcompte maximal de rptition du bloc de base dans le programme selon le bloc de bsae donn doit tre considr comme chaud hot " #~ msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot" #~ msgstr "Slectionner la fraction de la frquence maximale d'excutions du bloc de base dans la fonction selon le bloc de bsae donn doit tre considr comme chaud hot " #~ msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available" #~ msgstr "Le pourcentage de fonction, pondr par la frquence d'excutions, qui doit tre couvert la formation de la trace. Utilis lorsque le feedback par profile est disponible" #~ msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is not available" #~ msgstr "Le pourcentage de fonction, pondr par la frquence d'excutions, qui doit tre couvert la formation de la trace. Utilis lorsque le feedback par profilage n'est disponible" #~ msgid "Maximal code growth caused by tail duplication (in percent)" #~ msgstr "Croissance maximal du code en raison de duplication de queue (en pourcent)" #~ msgid "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percent)" #~ msgstr "Stopper la croissance renverse si la probabilit inverse des meilleures bordures est infrieure ce seuil (en pourcent)" #~ msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is available" #~ msgstr "Stopper la croissance anticipe si la probabilit des meilleures bordures est infrieure ce seuil (en pourcent). Utilis lorsque le feedback par profilage est disponible" #~ msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is not available" #~ msgstr "Stopper la croissance anticipe si la probabilit des meilleures bordures est infrieure ce seuil (en pourcent). Utilis lorsque le feedback par profilage n'est pas disponible" #~ msgid "The maximum number of incoming edges to consider for crossjumping" #~ msgstr "Le nombre maximum de bordures considrer pour les sauts croiss" #~ msgid "The maximum length of path considered in cse" #~ msgstr "La longueur maximale des chemins considrs dans cse" #~ msgid "The maximum memory locations recorded by cselib" #~ msgstr "Le nombre maximum de localisations mmoire enregistres par cselib" #~ msgid "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap" #~ msgstr "L'expansion minimale des tas pour lancer la collecte des rebuts, en pourcentage de la taille totale du tas." #~ msgid "Minimum heap size before we start collecting garbage, in kilobytes" #~ msgstr "La taille minimale du tas avant de lancer la collecte des rebuts, en kilo-octets." #~ msgid "The maximum number of instructions to search backward when looking for equivalent reload" #~ msgstr "Le nombre maximum d'instructions rechercher antrieurement lors d'une recherche d'une recharge quivalente" #~ msgid "too many #pragma options align=reset" #~ msgstr "trop d'options pour #pragma pour align=reset" #~ msgid "malformed '#pragma options', ignoring" #~ msgstr " #pragma options mal compos, ignor" #~ msgid "junk at end of '#pragma options'" #~ msgstr "rebut la fin de #pragma options " #~ msgid "malformed '#pragma options align={mac68k|power|reset}', ignoring" #~ msgstr " #pragma options align={mac68k|power|reset} mal compos, ignor" #~ msgid "missing '(' after '#pragma unused', ignoring" #~ msgstr " ( manquante aprs #pragma unused , ignor" #~ msgid "missing ')' after '#pragma unused', ignoring" #~ msgstr " ( manquante aprs #pragma unused , ignor" #~ msgid "junk at end of '#pragma unused'" #~ msgstr "rebut la fin de #pragma unused " #~ msgid "internal and protected visibility attributes not supportedin this configuration; ignored" #~ msgstr "visibilit des attributs internes et protges n'est pas supporte dans cette configuration; ignor" #~ msgid "-msystem-v and -p are incompatible" #~ msgstr "-msystem-v et -p sont incompatibles" #~ msgid "-msystem-v and -mthreads are incompatible" #~ msgstr "-msystem-v et -mthreads sont incompatibles" #~ msgid "profiler support for WindISS" #~ msgstr "support du profileur pour WindISS" #~ msgid "-f%s ignored for Unicos/Mk (not supported)" #~ msgstr "-f%s ignor pour Unicos/Mk (non support)" #~ msgid "-mieee not supported on Unicos/Mk" #~ msgstr "-mieee n'est pas support sur Unicos/Mk" #~ msgid "-mieee-with-inexact not supported on Unicos/Mk" #~ msgstr "-mieee-with-inexact n'est pas support sur Unicos/Mk" #~ msgid "bad value `%s' for -mtrap-precision switch" #~ msgstr "valeur %s errone pour l'option -mtrap-precision" #~ msgid "bad value `%s' for -mfp-rounding-mode switch" #~ msgstr "valeur %s errone pour l'option -mfp-rounding-mode" #~ msgid "bad value `%s' for -mfp-trap-mode switch" #~ msgstr "valeur %s errone pour l'option -mfp-trap-mode" #~ msgid "bad value `%s' for -mtls-size switch" #~ msgstr "valeur %s errone pour l'option -mtls-size" #~ msgid "bad value `%s' for -mcpu switch" #~ msgstr "valeur %s errone pour l'option -mcpu" #~ msgid "trap mode not supported on Unicos/Mk" #~ msgstr "mode trappe n'est pas support sur Unicos/Mk" #~ msgid "fp software completion requires -mtrap-precision=i" #~ msgstr "compltion logicielle FP requiert -mtrap-precision=i" #~ msgid "rounding mode not supported for VAX floats" #~ msgstr "mode d'arondissement n'est pas support pour les flottants sur VAX" #~ msgid "trap mode not supported for VAX floats" #~ msgstr "mode trappe n'est pas support avec les flottants sur VAX" #~ msgid "128-bit long double not supported for VAX floats" #~ msgstr "long double de 128 bits ne sont pas support pour les flottants sur VAX" #~ msgid "L%d cache latency unknown for %s" #~ msgstr "latence de la cache L%d inconnue pour %s" #~ msgid "bad value `%s' for -mmemory-latency" #~ msgstr "valeur %s errone pour -mmemory-latency" #~ msgid "invalid %%H value" #~ msgstr "valeur %%H invalide" #~ msgid "invalid %%J value" #~ msgstr "valeur %%J invalide" #~ msgid "invalid %%r value" #~ msgstr "valeur %%r invalide" #~ msgid "invalid %%R value" #~ msgstr "valeur %%R invalide" #~ msgid "invalid %%N value" #~ msgstr "valeur %%N invalide" #~ msgid "invalid %%P value" #~ msgstr "valeur %%P invalide" #~ msgid "invalid %%h value" #~ msgstr "valeur %%h invalide" #~ msgid "invalid %%L value" #~ msgstr "valeur %%L invalide" #~ msgid "invalid %%m value" #~ msgstr "valeur %%m invalide" #~ msgid "invalid %%M value" #~ msgstr "valeur %%M invalide" #~ msgid "invalid %%U value" #~ msgstr "valeur %%U invalide" #~ msgid "invalid %%s value" #~ msgstr "valeur %%s invalide" #~ msgid "invalid %%C value" #~ msgstr "valeur %%C invalide" #~ msgid "invalid %%E value" #~ msgstr "valeur %%E invalide" #~ msgid "unknown relocation unspec" #~ msgstr "relocalisation unspec inconnue" #~ msgid "invalid %%xn code" #~ msgstr "valeur %%xn invalide" #~ msgid "bad builtin fcode" #~ msgstr "construit interne erron de fcode" #~ msgid "Use hardware fp" #~ msgstr "Utiliser le FP matriel" #~ msgid "Do not use hardware fp" #~ msgstr "Ne pas utiliser l'unit FP matrielle" #~ msgid "Use fp registers" #~ msgstr "Utiliser les registres FP" #~ msgid "Do not use fp registers" #~ msgstr "Ne pas utiliser les registres FP" #~ msgid "Do not assume GAS" #~ msgstr "Ne pas prsumer la prsence de GAS" #~ msgid "Assume GAS" #~ msgstr "Prsumer la prsence de GAS" #~ msgid "Request IEEE-conformant math library routines (OSF/1)" #~ msgstr "Requte des routine de la bibliothque mathmatique conforme IEEE (OSF/1)" #~ msgid "Emit IEEE-conformant code, without inexact exceptions" #~ msgstr "Produire du code conforme IEEE, sans exceptions inexactes" #~ msgid "Emit IEEE-conformant code, with inexact exceptions" #~ msgstr "Produire du code conforme IEEE, avec exceptions inexactes" #~ msgid "Do not emit complex integer constants to read-only memory" #~ msgstr "Ne pas produire des constantes entires complexes en mmoire en mode lecture seulement" #~ msgid "Use VAX fp" #~ msgstr "Utiliser les registres FP sur VAX" #~ msgid "Do not use VAX fp" #~ msgstr "Ne pas utiliser les registres FP sur VAX" #~ msgid "Emit code for the byte/word ISA extension" #~ msgstr "Produire du code pour les octets/mots des extensions ISA" #~ msgid "Emit code for the motion video ISA extension" #~ msgstr "Produire du code pour les extensions vido ISA" #~ msgid "Emit code for the fp move and sqrt ISA extension" #~ msgstr "Produire du code pour les dplacements FP et sqrt des extensions ISA" #~ msgid "Emit code for the counting ISA extension" #~ msgstr "Produire du code pour les extensions ISA de comptage" #~ msgid "Emit code using explicit relocation directives" #~ msgstr "Produire du code utilisant des directives explicites de relocalisation" #~ msgid "Emit 16-bit relocations to the small data areas" #~ msgstr "Produire du code de 16 bits pour le relocalisation des petites zones de donnes" #~ msgid "Emit 32-bit relocations to the small data areas" #~ msgstr "Produire du code de 32 bits pour le relocalisation des petites zones de donnes" #~ msgid "Emit direct branches to local functions" #~ msgstr "Omettre le branchement direct aux fonctions locales" #~ msgid "Emit rdval instead of rduniq for thread pointer" #~ msgstr "Produire rdval au lieu de rduniq pour le pointeur de thread" #~ msgid "Use 128-bit long double" #~ msgstr "Utiliser un long double de 128 bits" #~ msgid "Use 64-bit long double" #~ msgstr "Utiliser un long double de 64 bits" #~ msgid "Use features of and schedule given CPU" #~ msgstr "Utiliser les options et ordonnancer pour le processeur donn " #~ msgid "Schedule given CPU" #~ msgstr "Ordonnancer le processeur donn" #~ msgid "Control the generated fp rounding mode" #~ msgstr "Contrler le mode d'arondissement FP gnr" #~ msgid "Control the IEEE trap mode" #~ msgstr "Contrler le mode trappe IEEE" #~ msgid "Control the precision given to fp exceptions" #~ msgstr "Contrler la prcision donne des exceptions FP" #~ msgid "Tune expected memory latency" #~ msgstr "Ajuster la latence mmoire attendue" #~ msgid "Specify bit size of immediate TLS offsets" #~ msgstr "Spcifier la taille de bit des dcalages immdiats TLS" #~ msgid "bad value (%s) for -mcpu switch" #~ msgstr "valeur (%s) errone pour l'option -mcpu" #~ msgid "argument of `%s' attribute is not a string constant" #~ msgstr "argument de l'attribut %s n'est pas une chane de constante" #~ msgid "argument of `%s' attribute is not \"ilink1\" or \"ilink2\"" #~ msgstr "l'argument de l'attribut %s n'est pas ilink1 ou ilink2 " #~ msgid "invalid operand to %%R code" #~ msgstr "oprande invalide pour le code %%R" #~ msgid "invalid operand to %%H/%%L code" #~ msgstr "oprande invalide pour le code %%H/%%L" #~ msgid "invalid operand to %%U code" #~ msgstr "oprande invalide pour le code %%U" #~ msgid "invalid operand to %%V code" #~ msgstr "oprande invalide pour le code %%V" #~ msgid "invalid operand output code" #~ msgstr "oprande invalide pour le code de sortie" #~ msgid "switch -mcpu=%s conflicts with -march= switch" #~ msgstr "l'option -mcpu=%s est en conflit avec l'option -march= " #~ msgid "bad value (%s) for %s switch" #~ msgstr "valeur (%s) errone pour l'option %s" #~ msgid "target CPU does not support APCS-32" #~ msgstr "le processeur cible ne supporte pas APCS-32" #~ msgid "target CPU does not support APCS-26" #~ msgstr "le processeur cible ne supporte pas APCS-26" #~ msgid "target CPU does not support interworking" #~ msgstr "le processeur cible ne supporte pas l'inter-rseautage" #~ msgid "target CPU does not support THUMB instructions" #~ msgstr "le processeur cible ne supporte pas les instructions THUMB" #~ msgid "future releases of GCC will not support -mapcs-26" #~ msgstr "les prochaines versions de GCC ne supporteront pas -mapcs-26" #~ msgid "enabling backtrace support is only meaningful when compiling for the Thumb" #~ msgstr "autoriser le support de pistage arrire si seulement significatif lors de la compilation pour le Thumb" #~ msgid "enabling callee interworking support is only meaningful when compiling for the Thumb" #~ msgstr "autoriser le support d'inter-rseautage des appels si seulement significatif lors de la compilation pour le Thumb" #~ msgid "enabling caller interworking support is only meaningful when compiling for the Thumb" #~ msgstr "autoriser le support d'inter-rseautage des appelants si seulement significatif lors de la compilation pour le Thumb" #~ msgid "interworking forces APCS-32 to be used" #~ msgstr "l'inter-rseautage force l'utilisation de APCS-32" #~ msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" #~ msgstr "-mapcs-stack-check incompatible avec -mno-apcs-frame" #~ msgid "-fpic and -mapcs-reent are incompatible" #~ msgstr "-fpic et -mapcs-reent sont incompatibles" #~ msgid "APCS reentrant code not supported. Ignored" #~ msgstr "Code rentrant APCS n'est pas support. Ignor" #~ msgid "-g with -mno-apcs-frame may not give sensible debugging" #~ msgstr "-g avec -mno-apcs-frame peut ne pas donner une mise au point sense" #~ msgid "passing floating point arguments in fp regs not yet supported" #~ msgstr "passage d'argument en virgule flottante dans les registres FP n'est pas encore support" #~ msgid "invalid floating point emulation option: -mfpe-%s" #~ msgstr "option d'mulation en virgule flottante invalide: -mfpe-%s" #~ msgid "-mfpe switch not supported by ep9312 target cpu - ignored." #~ msgstr "opeion -mfpe n'est pas supporte par le processeur cible ep9312 - ignor" #~ msgid "structure size boundary can only be set to 8 or 32" #~ msgstr "taille des bornes de la structure peut seulement tre 8 ou 32" #~ msgid "-mpic-register= is useless without -fpic" #~ msgstr "-mpic-register= est inutile sans -fpic" #~ msgid "unable to use '%s' for PIC register" #~ msgstr "incapable d'utiliser %s pour un registre PIC" #~ msgid "`%s' attribute only applies to functions" #~ msgstr "attribut %s s'applique seulement aux fonctions" #~ msgid "unable to compute real location of stacked parameter" #~ msgstr "incapable de calculer la localisation relle de la pile de paramtres" #~ msgid "selector must be an immediate" #~ msgstr "slecteur doit tre un immdiat" #~ msgid "mask must be an immediate" #~ msgstr "masque doit tre un immdiat" #~ msgid "no low registers available for popping high registers" #~ msgstr "pas de registre bas disponible pour faire ressortir les registres du haut" #~ msgid "interrupt Service Routines cannot be coded in Thumb mode" #~ msgstr "routines d'interruption de service ne peuvent tre codes en mode THUMB" #~ msgid "%Jinitialized variable '%D' is marked dllimport" #~ msgstr "%Jvariable initialis %D est marque dllimport" #~ msgid "%Jstatic variable '%D' is marked dllimport" #~ msgstr "%Jvariable statique %D est marque dllimport" #~ msgid "Generate APCS conformant stack frames" #~ msgstr "Gnrer des trames de pile conformes APCS" #~ msgid "Store function names in object code" #~ msgstr "Sotcker les noms de fonctions dans le code objet" #~ msgid "Use the 32-bit version of the APCS" #~ msgstr "Utilise la version 32 bts de APCS" #~ msgid "Pass FP arguments in FP registers" #~ msgstr "Passer les arguments FP par les registres FP" #~ msgid "Generate re-entrant, PIC code" #~ msgstr "Gnrer du code PIC r-entrant" #~ msgid "The MMU will trap on unaligned accesses" #~ msgstr "Le MMU va intercepter les accs mal aligns" #~ msgid "Use library calls to perform FP operations" #~ msgstr "Utiliser les appels de bibliothque pour excuter les oprations FP" #~ msgid "Use hardware floating point instructions" #~ msgstr "Utiliser les instructions matrielles en virgule flottante" #~ msgid "Assume target CPU is configured as big endian" #~ msgstr "Prsumer que le processeur cible est un systme octets de poids fort" #~ msgid "Assume target CPU is configured as little endian" #~ msgstr "Prsumer que le processeur cible est un systme octets de poids faible" #~ msgid "Assume big endian bytes, little endian words" #~ msgstr "Prsumer un systme octets de poids fort pour les octets et faible pour les mots" #~ msgid "Support calls between Thumb and ARM instruction sets" #~ msgstr "Supporter les appels des jeux d'instructions THUMB et ARM" #~ msgid "Generate a call to abort if a noreturn function returns" #~ msgstr "Gnrer un appel pour stopper si une fonction sans retour retourne un rsultat" #~ msgid "Do not move instructions into a function's prologue" #~ msgstr "Ne pas dplacer les instruction dans le prologue de fonction" #~ msgid "Do not load the PIC register in function prologues" #~ msgstr "Ne pas charger le registre PIC dans les prologue de fonction" #~ msgid "Generate call insns as indirect calls, if necessary" #~ msgstr "Gnrer l'appel insn comme un appel indirect, si ncessaire" #~ msgid "Compile for the Thumb not the ARM" #~ msgstr "Compiler pour le THUMB et non pas le ARM" #~ msgid "Thumb: Generate (non-leaf) stack frames even if not needed" #~ msgstr "Thumb: gnrer (non feuilles) trames de pile mme si non ncessaire" #~ msgid "Thumb: Generate (leaf) stack frames even if not needed" #~ msgstr "Thumb : Gnrer (feuilles) trames de pile mme si non ncessaire" #~ msgid "Thumb: Assume non-static functions may be called from ARM code" #~ msgstr "Thumb : Prsumer que les fonctions non statiques peuvent tre appeles du code ARM" #~ msgid "Thumb: Assume function pointers may go to non-Thumb aware code" #~ msgstr "Thumb : Prsumer que les pointeurs de fonction peuvent tomber dans le code en dehors non sensible au Thumb" #~ msgid "Cirrus: Place NOPs to avoid invalid instruction combinations" #~ msgstr "Cirrus: insrer des NOP pour viter un combinaison d'instructions invalides" #~ msgid "Cirrus: Do not break up invalid instruction combinations with NOPs" #~ msgstr "Cirrus: ne pas briser la combinaison d'instructions invalides avec des NOP" #~ msgid "Specify the name of the target CPU" #~ msgstr "Spcifier le nom du processeur cible" #~ msgid "Specify the name of the target architecture" #~ msgstr "Spcifier le nom de l'architecture cible" #~ msgid "Specify the version of the floating point emulator" #~ msgstr "Spcifier la version de l'mulateur en virgule flottante" #~ msgid "Specify the minimum bit alignment of structures" #~ msgstr "Spcifier le minimum de bits pour l'alignement de structures" #~ msgid "Specify the register to be used for PIC addressing" #~ msgstr "Spcifier le registre utiliser pour l'adressage PIC" #~ msgid "Ignore dllimport attribute for functions" #~ msgstr "Ignorer l'attribut dllimport pour les fonctions" #~ msgid "large frame pointer change (%d) with -mtiny-stack" #~ msgstr "grand pointeur de trames change (%d) avec -mtiny-stack" #~ msgid "bad address, not (reg+disp):" #~ msgstr "adresse errone, pas (reg+disp):" #~ msgid "internal compiler error. Bad address:" #~ msgstr "erreur internal du compilateur. Adresse errone:" #~ msgid "internal compiler error. Unknown mode:" #~ msgstr "erreur internal du compilateur. Mode inconnu:" #~ msgid "invalid insn:" #~ msgstr "insn invalide:" #~ msgid "incorrect insn:" #~ msgstr "insn incoorect:" #~ msgid "unknown move insn:" #~ msgstr "insn de dplacement inconnu:" #~ msgid "bad shift insn:" #~ msgstr "dcalage insn erron:" #~ msgid "internal compiler error. Incorrect shift:" #~ msgstr "erreur internal du compilateur. Dcalage incorrect:" #~ msgid "only initialized variables can be placed into program memory area" #~ msgstr "seules les variables initialises peuvent tre places dans la zone mmoire du programme" #~ msgid "only uninitialized variables can be placed in the .noinit section" #~ msgstr "seuls les variables non initialises peuvent tre places dans une section .noinit" #~ msgid "MCU `%s' supported for assembler only" #~ msgstr "MCU %s est support pour l'assembleur seulement" #~ msgid "Assume int to be 8 bit integer" #~ msgstr "Prsumer que les int sont des entiers de 8 bits" #~ msgid "Change the stack pointer without disabling interrupts" #~ msgstr "Changer le pointeur de pile sans dsactiver les interruptions" #~ msgid "Use subroutines for function prologue/epilogue" #~ msgstr "Utiliser des sous-routines pour le prologue/epilogue de fonction" #~ msgid "Change only the low 8 bits of the stack pointer" #~ msgstr "Changer seulement les 8 bits du bas du pointeur de pile" #~ msgid "Do not generate tablejump insns" #~ msgstr "Ne pas gnrer les sauts de table insns" #~ msgid "Use rjmp/rcall (limited range) on >8K devices" #~ msgstr "Utiliser rjpm/rcall (tendue limite) sur des priphriques >8K" #~ msgid "Output instruction sizes to the asm file" #~ msgstr "Produire les tailles d'instructions dans le fichier asm" #~ msgid "Specify the initial stack address" #~ msgstr "Spcifier l'adresse initiale de la pile" #~ msgid "Specify the MCU name" #~ msgstr "Spcifier le nom du MCU" #~ msgid "trampolines not supported" #~ msgstr "trampolines ne sont pas supportes" #~ msgid "missing '(' after '#pragma %s' - ignored" #~ msgstr "( manquante aprs #pragma %s - ignor" #~ msgid "missing function name in '#pragma %s' - ignored" #~ msgstr "nom de fonction manquant dans #pragma %s - ignor" #~ msgid "malformed '#pragma %s' - ignored" #~ msgstr "#pragma %s mal compos - ignor" #~ msgid "missing section name in '#pragma %s' - ignored" #~ msgstr "nom de section manquant dans #pragma %s - ignor" #~ msgid "missing ')' for '#pragma %s' - ignored" #~ msgstr ") manquante pour #pragma %s - ignor" #~ msgid "junk at end of '#pragma %s'" #~ msgstr "rebut la fin de #pragma %s'" #~ msgid "unknown CPU version %d, using 40.\n" #~ msgstr "version de processeur %d inconnue, 40 est utilis.\n" #~ msgid "ISR %s requires %d words of local vars, max is 32767" #~ msgstr "ISR %s requiert %d mots de var. locales, max est 32767." #~ msgid "using CONST_DOUBLE for address" #~ msgstr "CONST_DOUBLE utilis pour l'adresse" #~ msgid "c4x_address_cost: Invalid addressing mode" #~ msgstr "c4x_address_cost: mode d'adressage invalide" #~ msgid "c4x_print_operand: %%L inconsistency" #~ msgstr "c4x_print_operand: %%L inconsistent" #~ msgid "c4x_print_operand: %%N inconsistency" #~ msgstr "c4x_print_operand: %%N inconsistent" #~ msgid "c4x_print_operand: %%O inconsistency" #~ msgstr "c4x_print_operand: %%O inconsisten" #~ msgid "c4x_print_operand: Bad operand case" #~ msgstr "c4x_print_operand: oprande errone pour un case" #~ msgid "c4x_print_operand_address: Bad post_modify" #~ msgstr "c4x_print_operand_address: post-modification errone" #~ msgid "c4x_print_operand_address: Bad pre_modify" #~ msgstr "c4x_print_operand_address: pr-modification errone" #~ msgid "c4x_print_operand_address: Bad operand case" #~ msgstr "c4x_print_operand_address: oprande errone pour un case" #~ msgid "c4x_rptb_insert: Cannot find start label" #~ msgstr "c4x_rptb_insert: ne peut reprer l'tiquette de dpart" #~ msgid "mode not QImode" #~ msgstr "mode n'est pas QImode" #~ msgid "invalid indirect memory address" #~ msgstr "adresse mmoire d'indirection invalide" #~ msgid "invalid indirect (S) memory address" #~ msgstr "adresse mmoire (S) d'indirection invalide" #~ msgid "c4x_valid_operands: Internal error" #~ msgstr "c4x_valid_operands: erreur interne" #~ msgid "c4x_operand_subword: invalid mode" #~ msgstr "c4x_oprande_subword: mode invalide" #~ msgid "c4x_operand_subword: invalid operand" #~ msgstr "c4x_operand_subword: oprande invalide" #~ msgid "c4x_operand_subword: invalid autoincrement" #~ msgstr "c4x_operand_subword: autoincrement invalide" #~ msgid "c4x_operand_subword: invalid address" #~ msgstr "c4x_operand_subword: adresse invalide" #~ msgid "c4x_operand_subword: address not offsettable" #~ msgstr "c4x_operand_subword: un dcalage d'adresse ne peut s'appliquer sur cette adresse" #~ msgid "c4x_rptb_rpts_p: Repeat block top label moved\n" #~ msgstr "c4x_rptb_rpts_p: tiquette suprieur de bloc de rptition dplace\n" #~ msgid "Small memory model" #~ msgstr "Modle de mmoire petite" #~ msgid "Big memory model" #~ msgstr "Modle de mmoire grande" #~ msgid "Use MPYI instruction for C3x" #~ msgstr "Utiliser les instructions MPYI pour C3x" #~ msgid "Do not use MPYI instruction for C3x" #~ msgstr "Ne pas utiliser les instructions MPYI pour C3x" #~ msgid "Use fast but approximate float to integer conversion" #~ msgstr "Utiliser le mode rapide mais approximatif de conversion de flottant entier" #~ msgid "Use slow but accurate float to integer conversion" #~ msgstr "Utiliser le mode lent mais prcis de conversion de flottant entier" #~ msgid "Enable use of RTPS instruction" #~ msgstr "Autoriser l'utilisation de l'instruction RTPS" #~ msgid "Disable use of RTPS instruction" #~ msgstr "Interdire l'utilisation de l'instruction RTPS" #~ msgid "Enable use of RTPB instruction" #~ msgstr "Autoriser l'utilisation de l'instruction RTPB" #~ msgid "Disable use of RTPB instruction" #~ msgstr "Interdire l'utilisation de l'instruction RTPB" #~ msgid "Generate code for C30 CPU" #~ msgstr "Gnrer du code pour processeur C30" #~ msgid "Generate code for C31 CPU" #~ msgstr "Gnrer du code pour processeur C31" #~ msgid "Generate code for C32 CPU" #~ msgstr "Gnrer du code pour processeur C32" #~ msgid "Generate code for C33 CPU" #~ msgstr "Gnrer du code pour processeur C33" #~ msgid "Generate code for C40 CPU" #~ msgstr "Gnrer du code pour processeur C40" #~ msgid "Generate code for C44 CPU" #~ msgstr "Gnrer du code pour processeur C44" #~ msgid "Emit code compatible with TI tools" #~ msgstr "Produire du code compatible avec les outils TI" #~ msgid "Emit code to use GAS extensions" #~ msgstr "Produire du code pour utiliser les extensions GAS" #~ msgid "Save DP across ISR in small memory model" #~ msgstr "Sauvegarder DP travers ISR dans le modle de mmoire restreinte" #~ msgid "Don't save DP across ISR in small memory model" #~ msgstr "Ne pas sauvegarder DP travers ISR dans le modle de mmoire restreinte" #~ msgid "Pass arguments on the stack" #~ msgstr "Passer les arguments sur la pile" #~ msgid "Pass arguments in registers" #~ msgstr "Passer les arguments par les registres" #~ msgid "Enable new features under development" #~ msgstr "Autoriser les nouvelles options en dveloppement" #~ msgid "Disable new features under development" #~ msgstr "Dsactiver les nouvelles options en dveloppement" #~ msgid "Use the BK register as a general purpose register" #~ msgstr "Utiliser le registre BK comme registre gnral tout usage" #~ msgid "Do not allocate BK register" #~ msgstr "Ne pas allouer de registre BK" #~ msgid "Enable use of DB instruction" #~ msgstr "Activer l'utilisation d'instruction DB" #~ msgid "Disable use of DB instruction" #~ msgstr "Dsactiver l'utilisation d'instruction DB" #~ msgid "Enable debugging" #~ msgstr "Permettre la mise au point" #~ msgid "Disable debugging" #~ msgstr "Dsactiver la mise au point" #~ msgid "Force constants into registers to improve hoisting" #~ msgstr "Forcer les constantes dans les registres pour amliorer la monte" #~ msgid "Don't force constants into registers" #~ msgstr "Ne pas forcer les constantes dans les registres" #~ msgid "Force RTL generation to emit valid 3 operand insns" #~ msgstr "Forcer la gnration RTL pour produire des oprandes insn 3 valides" #~ msgid "Allow RTL generation to emit invalid 3 operand insns" #~ msgstr "Autoriser la gnration RTL pour produire des oprandes insn 3 invalides" #~ msgid "Allow unsigned iteration counts for RPTB/DB" #~ msgstr "Autoriser un compteur non sign d'itrations pour RPTB/DB" #~ msgid "Disallow unsigned iteration counts for RPTB/DB" #~ msgstr "Interdire un compteur non sign d'itration pour RPTB/DB" #~ msgid "Preserve all 40 bits of FP reg across call" #~ msgstr "Prserver tous les 40 bits du registre FP travers les appels" #~ msgid "Only preserve 32 bits of FP reg across call" #~ msgstr "Prserver seulement 32 bits du registre FP travers les appels" #~ msgid "Enable parallel instructions" #~ msgstr "Autoriser les instructions parallles" #~ msgid "Disable parallel instructions" #~ msgstr "Interdire les instructions parallles" #~ msgid "Enable MPY||ADD and MPY||SUB instructions" #~ msgstr "Autoriser les instructions MPY||ADD et MPY||SUB" #~ msgid "Disable MPY||ADD and MPY||SUB instructions" #~ msgstr "Interdire les instructions MPY||ADD et MPY||SUB" #~ msgid "Assume that pointers may be aliased" #~ msgstr "Prsumer que les pointeurs peuvent tre aliass" #~ msgid "Assume that pointers not aliased" #~ msgstr "Prsumer que les pointeurs ne peuvent pas tre aliass" #~ msgid "Specify maximum number of iterations for RPTS" #~ msgstr "Spcifier le nombre maximum d'itrations pour RPTS" #~ msgid "Select CPU to generate code for" #~ msgstr "Slectionner le processeur pour lequel le code doit tre gnr" #~ msgid "unexpected index-type in cris_print_index" #~ msgstr "type d'index inattendu dans cris_print_index" #~ msgid "unexpected base-type in cris_print_base" #~ msgstr "type de base inattendu dans cris_print_base" #~ msgid "stackframe too big: %d bytes" #~ msgstr "trame de pile trop grande: %d octets" #~ msgid "allocated but unused delay list in epilogue" #~ msgstr "allou mais liste de dlai non utilise dans l'pilogue" #~ msgid "unexpected function type needing stack adjustment for __builtin_eh_return" #~ msgstr "type de fonction inattendue ajustement de la pile ncessaire pour __builtin_eh_return " #~ msgid "invalid operand for 'b' modifier" #~ msgstr "oprande invalide pour le modificateur b " #~ msgid "invalid operand for 'v' modifier" #~ msgstr "oprande invalide pour le modificateur v " #~ msgid "invalid operand for 'P' modifier" #~ msgstr "oprande invalide pour le modificateur P " #~ msgid "invalid operand for 'p' modifier" #~ msgstr "oprande invalide pour le modificateur p " #~ msgid "invalid operand for 'z' modifier" #~ msgstr "oprande invalide pour le modificateur z " #~ msgid "invalid operand for 'H' modifier" #~ msgstr "oprande invalide pour le modificateur H " #~ msgid "bad register" #~ msgstr "registre erron" #~ msgid "invalid operand for 'e' modifier" #~ msgstr "oprande invalide pour le modificateur e " #~ msgid "invalid operand for 'm' modifier" #~ msgstr "oprande invalide pour le modificateur m " #~ msgid "invalid operand for 'A' modifier" #~ msgstr "oprande invalide pour le modificateur A " #~ msgid "invalid operand for 'D' modifier" #~ msgstr "oprande invalide pour le modificateur D " #~ msgid "invalid operand for 'T' modifier" #~ msgstr "oprande invalide pour le modificateur T " #~ msgid "invalid operand modifier letter" #~ msgstr "oprande invalide pour le modificateur de lettre" #~ msgid "internal error: bad register: %d" #~ msgstr "erreur interne: registre erron: %d" #~ msgid "unexpected multiplicative operand" #~ msgstr "oprande multiplicative inattendue" #~ msgid "unexpected operand" #~ msgstr "oprande inattendue" #~ msgid "unrecognized address" #~ msgstr "adresse non reconnue" #~ msgid "internal error: sideeffect-insn affecting main effect" #~ msgstr "erreur interne: effet de bord de insn sideeffect-insn ayant un effet principal" #~ msgid "internal error: cris_side_effect_mode_ok with bad operands" #~ msgstr "erreur interne: cris_side_effect_mode_ok avec des oprandes errones" #~ msgid "unrecognized supposed constant" #~ msgstr "suppose constante non reconnue" #~ msgid "unrecognized supposed constant in cris_global_pic_symbol" #~ msgstr "suppose constante non reconnue dans cris_global_pic_symbol" #~ msgid "-max-stackframe=%d is not usable, not between 0 and %d" #~ msgstr "-max-stackframe=%d n'est pas utilisable, n'est pas entre 0 et %d" #~ msgid "unknown CRIS version specification in -march= or -mcpu= : %s" #~ msgstr "spcification de version CRIS inconnue dans -march= ou -mcpu= : %s" #~ msgid "unknown CRIS cpu version specification in -mtune= : %s" #~ msgstr "spcification de version CRIS inconnue dans -mtune= : %s" #~ msgid "-fPIC and -fpic are not supported in this configuration" #~ msgstr "-fPIC et -fpic ne sont pas supportes par cette configuration" #~ msgid "that particular -g option is invalid with -maout and -melinux" #~ msgstr "l'option particulire -g est invalide avec -maout et -melinux" #~ msgid "unexpected side-effects in address" #~ msgstr "effets de bord inattendue dans l'adresse" #~ msgid "unexpected PIC symbol" #~ msgstr "symbole PIC inattendue" #~ msgid "PIC register isn't set up" #~ msgstr "le registre n'est pas initialis" #~ msgid "unexpected address expression" #~ msgstr "expression d'adresse inattendue" #~ msgid "emitting PIC operand, but PIC register isn't set up" #~ msgstr "gnration d'une oprande PIC mais le registre PIC n'est pas initialis" #~ msgid "unexpected NOTE as addr_const:" #~ msgstr "NOTE inattendu comme addr_conts:" #~ msgid "Compile for the MMU-less Etrax 100-based elinux system" #~ msgstr "Compiler pour le MMU-less Etrax 100-based de systme elinux" #~ msgid "For elinux, request a specified stack-size for this program" #~ msgstr "Pour elinux, faire la requte pour un taille de pile spcifique pour ce programme" #~ msgid "Work around bug in multiplication instruction" #~ msgstr "Travailler autour de l'anomalie dans l'instructions de multiplication" #~ msgid "Compile for ETRAX 4 (CRIS v3)" #~ msgstr "Compil pour ETRAX 4 (CRIS v3)" #~ msgid "Compile for ETRAX 100 (CRIS v8)" #~ msgstr "Compile pour ETRAX 100 (CRIS v8)" #~ msgid "Emit verbose debug information in assembly code" #~ msgstr "Produire des informations de mise au point dans le code assembl" #~ msgid "Do not use condition codes from normal instructions" #~ msgstr "Ne pas utiliser du code conditionnel pour des instructions normales" #~ msgid "Do not emit addressing modes with side-effect assignment" #~ msgstr "Ne pas produire de modes d'adressage avec des affectations avec effet de bord" #~ msgid "Do not tune stack alignment" #~ msgstr "Ne pas ajuster l'alignement de la pile" #~ msgid "Do not tune writable data alignment" #~ msgstr "Ne pas ajuster l'alignement les sections de donnes dynamiques" #~ msgid "Do not tune code and read-only data alignment" #~ msgstr "Ne pas ajuster l'alignement du code et des sections de donnes statiques" #~ msgid "Align code and data to 32 bits" #~ msgstr "Aligner le code et les donnes sur 32 bits" #~ msgid "Don't align items in code or data" #~ msgstr "Ne pas aligner les items dans le code ou les donnes" #~ msgid "Do not emit function prologue or epilogue" #~ msgstr "Ne pas gnrer de prologue ou d'pilogue de fonction" #~ msgid "Use the most feature-enabling options allowed by other options" #~ msgstr "Utiliser le plus d'options autorisant autorisant des options permises par les autres options" #~ msgid "Override -mbest-lib-options" #~ msgstr "craser -mbest-lib-options" #~ msgid "Generate code for the specified chip or CPU version" #~ msgstr "Gnrer le code pour la version de processeur ou de circuit spcifie" #~ msgid "Tune alignment for the specified chip or CPU version" #~ msgstr "Ajuster l'alignement pour la version de processeur ou de circuit spcifie" #~ msgid "Warn when a stackframe is larger than the specified size" #~ msgstr "Avertir lorsqu'une trame de pile est plus grande que la taille spcifie" #~ msgid "no FUNCTION_PROFILER for CRIS" #~ msgstr "pas de FUNCTION_PROFILER pour CRIS" #~ msgid "Together with -fpic and -fPIC, do not use GOTPLT references" #~ msgstr "ensemble avec -fpic et -fPIC, ne pas utiliser les rfrences GOTPLT" #~ msgid "bad modes_tieable_p for register %s, mode1 %s, mode2 %s" #~ msgstr "modes_tieable_p errone pour le registre %s, mode1 %s, mode2 %s" #~ msgid "bad insn to d30v_print_operand_address:" #~ msgstr "insn erron pour d30v_print_operand_addresse:" #~ msgid "bad insn to d30v_print_operand_memory_reference:" #~ msgstr "insn erron pour d30v_print_operand_memory_reference:" #~ msgid "bad insn to d30v_print_operand, 'f' modifier:" #~ msgstr "insn erron pour d30v_print_operand, modificateur f :" #~ msgid "bad insn to d30v_print_operand, 'A' modifier:" #~ msgstr "insn erron pour d30v_print_operand, modificateur A :" #~ msgid "bad insn to d30v_print_operand, 'M' modifier:" #~ msgstr "insn erron pour d30v_print_operand, modificateur M :" #~ msgid "bad insn to print_operand, 'F' or 'T' modifier:" #~ msgstr "insn erron pour print_operand, modificateur F ou T :" #~ msgid "bad insn to print_operand, 'B' modifier:" #~ msgstr "insn erron pour print_operand, modificateur B :" #~ msgid "bad insn to print_operand, 'E' modifier:" #~ msgstr "insn erron pour print_operand, modificateur E :" #~ msgid "bad insn to print_operand, 'R' modifier:" #~ msgstr "insn erron to print_operand, modificateur R :" #~ msgid "bad insn to print_operand, 's' modifier:" #~ msgstr "insn erron to print_operand, modificateur s :" #~ msgid "bad insn in d30v_print_operand, 0 case" #~ msgstr "insn erron dans d30v_print_operand, cas 0" #~ msgid "d30v_emit_comparison" #~ msgstr "d30v_emit_comparison" #~ msgid "bad call to d30v_move_2words" #~ msgstr "appel erron d30v_move_2words" #~ msgid "Enable use of conditional move instructions" #~ msgstr "Autoriser l'utilisation des instructions conditionnelles move" #~ msgid "Disable use of conditional move instructions" #~ msgstr "Interdire l'utilisation des instructions conditionnelles move" #~ msgid "Debug argument support in compiler" #~ msgstr "Mettre au point le support d'argument dans le compilateur" #~ msgid "Debug stack support in compiler" #~ msgstr "Mettre au point le support de la pile dans le compilateur" #~ msgid "Debug memory address support in compiler" #~ msgstr "Mettre au point le support d'adresses dans le compilateur" #~ msgid "Make adjacent short instructions parallel if possible" #~ msgstr "Rendre adjacentes les instructions short en instructions parallles si possible" #~ msgid "Do not make adjacent short instructions parallel" #~ msgstr "Ne pas rendre adjacentes les instructions short en instructions parallles" #~ msgid "Link programs/data to be in external memory by default" #~ msgstr "Faire l'dition de lien des programmes/donnes comme tant externe la mmoire par dfaut" #~ msgid "Link programs/data to be in onchip memory by default" #~ msgstr "Faire l'dition de lien des programmes/donnes comme tant interne dans la circuiterie de la mmoire par dfaut" #~ msgid "Change the branch costs within the compiler" #~ msgstr "Changer les cots de branchement l'intrieur du compilateur" #~ msgid "Change the threshold for conversion to conditional execution" #~ msgstr "Changer le seuil pour la conversion en une excution conditionnelle" #~ msgid "stack size > 32k" #~ msgstr "taille de la pile > 32k" #~ msgid "invalid addressing mode" #~ msgstr "mode d'adressage invalide" #~ msgid "bad register extension code" #~ msgstr "code d'extension de registre erron" #~ msgid "invalid offset in ybase addressing" #~ msgstr "dcalage invalide dans l'adresse ybase" #~ msgid "invalid register in ybase addressing" #~ msgstr "registre invalide dans l'adressage ybase" #~ msgid "invalid shift operator in emit_1600_core_shift" #~ msgstr "oprateur de dcalage invalide dans emit_1600_core_shift" #~ msgid "invalid mode for gen_tst_reg" #~ msgstr "mode invalide pour gen_tst_reg" #~ msgid "invalid mode for integer comparison in gen_compare_reg" #~ msgstr "mode invalide pour la comparaison d'entiers dans gen_compare_reg" #~ msgid "Pass parameters in registers (default)" #~ msgstr "Passer les paramtres par les registres (par dfaut)" #~ msgid "Don't pass parameters in registers" #~ msgstr "Ne pas passer les paramtres par les registres" #~ msgid "Generate code for near calls" #~ msgstr "Gnrer du code pour les appels proches" #~ msgid "Don't generate code for near calls" #~ msgstr "Ne pas gnrer du code pour les appels proches" #~ msgid "Generate code for near jumps" #~ msgstr "Gnrer du code pour les sauts proches" #~ msgid "Don't generate code for near jumps" #~ msgstr "Ne pas gnrer du code pour les sauts proches" #~ msgid "Generate code for a bit-manipulation unit" #~ msgstr "Gnrer du code pour une unit de manipulation de bits" #~ msgid "Don't generate code for a bit-manipulation unit" #~ msgstr "Ne pas gnrer du code pour une unit de manipulation de bits" #~ msgid "Generate code for memory map1" #~ msgstr "Gnrer du code pour la mmoire map1" #~ msgid "Generate code for memory map2" #~ msgstr "Gnrer du code pour la mmoire map2" #~ msgid "Generate code for memory map3" #~ msgstr "Gnrer du code pour la mmoire map3" #~ msgid "Generate code for memory map4" #~ msgstr "Gnrer du code pour la mmoire map4" #~ msgid "Ouput extra code for initialized data" #~ msgstr "Produire du code additionnel pour les donnes initialises" #~ msgid "Don't let reg. allocator use ybase registers" #~ msgstr "Ne pas laisser l'allocateur de registres utiliser les registres ybase" #~ msgid "Output extra debug info in Luxworks environment" #~ msgstr "Produire des informations supplmentaires de mise au point dans l'environnement Luxworks" #~ msgid "Save temp. files in Luxworks environment" #~ msgstr "Sauvegarder les fichiers temporaires dans l'environnement Luxworks" #~ msgid "Specify alternate name for text section" #~ msgstr "Spcifier un nom alternatif pour la section texte" #~ msgid "Specify alternate name for data section" #~ msgstr "Spcifier un nom alternatif pour la section donnes" #~ msgid "Specify alternate name for bss section" #~ msgstr "Spcifier un nom alternatif pour la section bss" #~ msgid "Specify alternate name for constant section" #~ msgstr "Spcifier un nom alternatif pour la section des constantes" #~ msgid "Specify alternate name for dsp16xx chip" #~ msgstr "Spcifier un nom alternatif pour le cirsuit dsp16xx" #~ msgid "profiling not implemented yet" #~ msgstr "profilage n'est pas implant encore" #~ msgid "trampolines not yet implemented" #~ msgstr "trampolines ne sont pas encore implantes" #~ msgid "fr30_print_operand_address: unhandled address" #~ msgstr "fr30_print_operand_address: adresse non traite" #~ msgid "fr30_print_operand: unrecognized %%p code" #~ msgstr "fr30_print_operand: code %%p non reconnue" #~ msgid "fr30_print_operand: unrecognized %%b code" #~ msgstr "fr30_print_operand: code %%b non reconnue" #~ msgid "fr30_print_operand: unrecognized %%B code" #~ msgstr "fr30_print_operand: code %%B non reconnu" #~ msgid "fr30_print_operand: invalid operand to %%A code" #~ msgstr "fr30_print_operand: oprande invalide pour code %%A" #~ msgid "fr30_print_operand: invalid %%x code" #~ msgstr "fr30_print_operand: code %%x invalide" #~ msgid "fr30_print_operand: invalid %%F code" #~ msgstr "fr30_print_operand: code %%F invalide" #~ msgid "fr30_print_operand: unknown code" #~ msgstr "fr30_print_operand: code inconnu" #~ msgid "fr30_print_operand: unhandled MEM" #~ msgstr "fr30_print_operand: MEM non trait" #~ msgid "Assume small address space" #~ msgstr "Prsumer un petit espace d'adressage" #~ msgid "Unknown cpu: -mcpu=%s" #~ msgstr "Processeur inconnu : -mcpu=%s" #~ msgid "-fpic and -gdwarf are incompatible (-fpic and -g/-gdwarf-2 are fine)" #~ msgstr "-fpic et -gdwarf sont incompatibles (-fpic et -g/-gdwarf-2 sont acceptables)" #~ msgid "Bad insn to frv_print_operand_address:" #~ msgstr "insn erron pour frv_print_operand_addresse:" #~ msgid "Bad register to frv_print_operand_memory_reference_reg:" #~ msgstr "registre erron pour frv_print_operand_memory_reference_reg:" #~ msgid "Bad insn to frv_print_operand_memory_reference:" #~ msgstr "insn erron pour frv_print_operand_memory_reference:" #~ msgid "Bad insn in frv_print_operand, bad const_double" #~ msgstr "insn erron dans frv_print_operand, bad const_double" #~ msgid "Bad insn to frv_print_operand, 'C' modifier:" #~ msgstr "insn erron pour frv_print_operand, modificateur C :" #~ msgid "Bad insn to frv_print_operand, 'c' modifier:" #~ msgstr "insn erron pour frv_print_operand, modificateur c :" #~ msgid "Bad insn to frv_print_operand, 'e' modifier:" #~ msgstr "insn erron pour frv_print_operand, modificateur e :" #~ msgid "Bad insn to frv_print_operand, 'F' modifier:" #~ msgstr "insn erron pour frv_print_operand, modificateur F :" #~ msgid "Bad insn to frv_print_operand, 'f' modifier:" #~ msgstr "insn erron pour frv_print_operand, modificateur f :" #~ msgid "Bad insn to frv_print_operand, 'L' modifier:" #~ msgstr "insn erron pour frv_print_operand, modificateur L :" #~ msgid "Bad insn to frv_print_operand, 'M/N' modifier:" #~ msgstr "insn erron pour frv_print_operand, modificateur M/N :" #~ msgid "Bad insn to frv_print_operand, 'O' modifier:" #~ msgstr "insn erron pour frv_print_operand, modificateur O :" #~ msgid "Bad insn to frv_print_operand, P modifier:" #~ msgstr "insn erron pour frv_print_operand, modificateur P :" #~ msgid "Bad insn in frv_print_operand, z case" #~ msgstr "insn erron dans frv_print_operand, case z" #~ msgid "Bad insn in frv_print_operand, 0 case" #~ msgstr "insn erron dans frv_print_operand, case 0" #~ msgid "frv_print_operand: unknown code" #~ msgstr "frv_print_operand: code inconnu" #~ msgid "Bad output_move_single operand" #~ msgstr "oprande output_move_single errone" #~ msgid "Bad output_move_double operand" #~ msgstr "oprande output_move_double errone" #~ msgid "Bad output_condmove_single operand" #~ msgstr "oprande output_condmove_single errone" #~ msgid "frv_registers_update" #~ msgstr "frv_registers_update" #~ msgid "frv_registers_used_p" #~ msgstr "frv_registers_used_p" #~ msgid "frv_registers_set_p" #~ msgstr "frv_registers_set_p" #~ msgid "accumulator is not a constant integer" #~ msgstr "accumulateur n'est pas une constante en entier" #~ msgid "accumulator number is out of bounds" #~ msgstr "numro de l'accumulateur est hors limite" #~ msgid "inappropriate accumulator for `%s'" #~ msgstr "accumulateur inappropri pour %s " #~ msgid "`%s' expects a constant argument" #~ msgstr " %s attend un argument de constante" #~ msgid "constant argument out of range for `%s'" #~ msgstr "argument de constante hors limite pour %s " #~ msgid "media functions are not available unless -mmedia is used" #~ msgstr "fonctions mdia ne sont pas disponibles mois que -mmedia soit utilis" #~ msgid "this media function is only available on the fr500" #~ msgstr "cette fonction mdia est seulement disponible sur le fr500" #~ msgid "this media function is only available on the fr400" #~ msgstr "cette fonction mdia est seulement disponible sur le fr400" #~ msgid " (frv)" #~ msgstr " (frv)" #~ msgid "-ms2600 is used without -ms" #~ msgstr "-ms2600 est utilis sans -ms" #~ msgid "-mn is used without -mh or -ms" #~ msgstr "-mm est utilis sans -mh ou -ms" #~ msgid "Generate H8S code" #~ msgstr "Gnrer du code H8S" #~ msgid "Do not generate H8S code" #~ msgstr "Ne pas gnrer du code H8S" #~ msgid "Generate H8S/2600 code" #~ msgstr "Gnrer du code H8S/S2600" #~ msgid "Do not generate H8S/2600 code" #~ msgstr "Ne pas gnrer du code H8S/2600" #~ msgid "Make integers 32 bits wide" #~ msgstr "Rendre les entiers larges de 32 bits" #~ msgid "Use registers for argument passing" #~ msgstr "Utiliser les registres pour le passage d'arguments" #~ msgid "Do not use registers for argument passing" #~ msgstr "Ne pas utiliser les registres pour le passage d'arguments" #~ msgid "Consider access to byte sized memory slow" #~ msgstr "Considrer l'accs mmoire lent pour la taille d'octets" #~ msgid "Enable linker relaxing" #~ msgstr "Activer la rlche par l'diteur de liens" #~ msgid "Generate H8/300H code" #~ msgstr "Gnrer du code H8/300H" #~ msgid "Enable the normal mode" #~ msgstr "Activer le mode normal" #~ msgid "Do not generate H8/300H code" #~ msgstr "Ne pas gnrer du code H8/300H" #~ msgid "Use H8/300 alignment rules" #~ msgstr "Utiliser les rgles d'alignement H8/300" #~ msgid "junk at end of #pragma map" #~ msgstr "rebut la fin de #pragma map" #~ msgid "malformed #pragma map, ignored" #~ msgstr "#pragma map mal compos, ignor" #~ msgid "real name is too long - alias ignored" #~ msgstr "nom rel est trop long - alias ignor" #~ msgid "alias name is too long - alias ignored" #~ msgstr "nom d'alias est trop long - alias ignor" #~ msgid "internal error--no jump follows compare:" #~ msgstr "erreur interne--pas de saut suivant la comparaison:" #~ msgid "Generate char instructions" #~ msgstr "Gnrer des instructions char " #~ msgid "Do not generate char instructions" #~ msgstr "Ne pas gnrer des instructions char " #~ msgid "code model %s not supported in PIC mode" #~ msgstr "model de code %s n'est pas support en mode PIC" #~ msgid "bad value (%s) for -mcmodel= switch" #~ msgstr "valeur errone (%s) pour l'opton -mcmodel=" #~ msgid "bad value (%s) for -masm= switch" #~ msgstr "valeur errone (%s) pour l'option -masm" #~ msgid "code model `%s' not supported in the %s bit mode" #~ msgstr "model de code %s n'est pas support dans le mode %s bits" #~ msgid "code model `large' not supported yet" #~ msgstr "model de code large n'est pas support encore" #~ msgid "%i-bit mode not compiled in" #~ msgstr "mode %i bits pas compil en" #~ msgid "CPU you selected does not support x86-64 instruction set" #~ msgstr "le processeur slectionn ne supporte pas le jeu d'instructions x86-64" #~ msgid "bad value (%s) for -march= switch" #~ msgstr "valeur errone (%s) pour l'option -march=" #~ msgid "bad value (%s) for -mtune= switch" #~ msgstr "valeur errone (%s) pour l'option -mtune=" #~ msgid "-mregparm=%d is not between 0 and %d" #~ msgstr "-mregparm=%d n'est pas entre 0 et %d" #~ msgid "-malign-loops is obsolete, use -falign-loops" #~ msgstr "-malign-loops est obsolte, utiliser -falign-loops" #~ msgid "-malign-loops=%d is not between 0 and %d" #~ msgstr "-malign-loops=%d n'est pas entre 0 et %d" #~ msgid "-malign-jumps is obsolete, use -falign-jumps" #~ msgstr "-malign-jumps est obsolte, utiliser -falign-loops" #~ msgid "-malign-functions is obsolete, use -falign-functions" #~ msgstr "-malign-functions est obsolte, utiliser -falign-loops" #~ msgid "-mpreferred-stack-boundary=%d is not between %d and 12" #~ msgstr "-mpreferred-stack-boundary=%d n'est pas entre %d et 12" #~ msgid "-mbranch-cost=%d is not between 0 and 5" #~ msgstr "-mbranch-cost=%d n'est pas entre 0 et 5" #~ msgid "bad value (%s) for -mtls-dialect= switch" #~ msgstr "valeur errone (%s) pour l'option -mtls-dialect" #~ msgid "-malign-double makes no sense in the 64bit mode" #~ msgstr "-malign-double n'a aucun sens en mode 64 bits" #~ msgid "-mrtd calling convention not supported in the 64bit mode" #~ msgstr "la conversion d'appel -mrtd n'est pas support en mode 64 bits" #~ msgid "SSE instruction set disabled, using 387 arithmetics" #~ msgstr "jeu d'instructions SSE dsactiv, arithmtique 387 est utilis" #~ msgid "387 instruction set disabled, using SSE arithmetics" #~ msgstr "jeu d'instructions 387 dsactiv, arithmtique SSE est utilis" #~ msgid "bad value (%s) for -mfpmath= switch" #~ msgstr "valeur errone (%s) pour l'option -mfpmath" #~ msgid "fastcall and stdcall attributes are not compatible" #~ msgstr "les attributs fastcall et stdcall ne sont pas compatibles" #~ msgid "fastcall and regparm attributes are not compatible" #~ msgstr "les attributs fastcall et regparm ne sont pas compatibles" #~ msgid "`%s' attribute requires an integer constant argument" #~ msgstr "l'attribut %s requiert un argument de type constante entire" #~ msgid "argument to `%s' attribute larger than %d" #~ msgstr "l'argument pour l'attribut %s est plus grand que %d" #~ msgid "SSE vector argument without SSE enabled changes the ABI" #~ msgstr "l'argument vecteur SSE sans autorisation SSE modifie l'ABI " #~ msgid "MMX vector argument without MMX enabled changes the ABI" #~ msgstr "l'argument vecteur SSE sans autorisation MXX modifie l'ABI " #~ msgid "SSE vector return without SSE enabled changes the ABI" #~ msgstr "vecteur SSE retourn sans autorisation SSE des changements de l'ABI " #~ msgid "invalid UNSPEC as operand" #~ msgstr "UNSPEC invalide comme oprande" #~ msgid "extended registers have no high halves" #~ msgstr "registres tendus n'a pas de demis hauts" #~ msgid "unsupported operand size for extended register" #~ msgstr "taille d'oprande non supporte pour un registre tendu" #~ msgid "operand is neither a constant nor a condition code, invalid operand code 'c'" #~ msgstr "l'oprande n'est ni une constante ni du code de condition, code d'oprande invalide c " #~ msgid "invalid operand code `%c'" #~ msgstr "oprande invalide pour %c " #~ msgid "invalid constraints for operand" #~ msgstr "contrainte invalide pour l'oprande" #~ msgid "unknown insn mode" #~ msgstr "mode insn inconnu" #~ msgid "selector must be an integer constant in the range 0..%i" #~ msgstr "le slecteur doit tre une constante entire entre les bornes 0..%i" #~ msgid "shift must be an immediate" #~ msgstr "dcalage doit tre un immdiat" #~ msgid "`%s' incompatible attribute ignored" #~ msgstr "attribut %s incompatible ignor" #~ msgid "%Jfunction `%D' definition is marked dllimport." #~ msgstr "%Jdfinition de la fonction %D est marque dllimport" #~ msgid "%Jvariable `%D' definition is marked dllimport." #~ msgstr "%Jdfinition de la variable %D est marque dllimport" #~ msgid "%Jexternal linkage required for symbol '%D' because of '%s' attribute." #~ msgstr "%Jdition de lien externe requise pour le symbole %D en raison de l'attribut %s " #~ msgid "`%s' attribute only applies to variables" #~ msgstr "attribut %s s'applique seulement aux variables" #~ msgid "%Jfunction '%D' is defined after prior declaration as dllimport: attribute ignored" #~ msgstr "%Jfonction %D est dfinie aprs un dclaration antrieure en tant que dllimport: attribut ignor" #~ msgid "%Jinline function '%D' is declared as dllimport: attribute ignored." #~ msgstr "%Jfonction enligne %D est dclare en tant que dllimport: attribut ignor." #~ msgid "%Jdefinition of static data member '%D' of dllimport'd class." #~ msgstr "%Jdfinition d'un membre statique de donnes %D de la classe dllimport" #~ msgid "%Jinconsistent dll linkage for '%D', dllexport assumed." #~ msgstr "%Jdition de lien dll inconsistent pour %D : dllexport assum." #~ msgid "`%s' declared as both exported to and imported from a DLL" #~ msgstr " %s dclar la fois comme export et import d'une DLL" #~ msgid "%Jfailure in redeclaration of '%D': dllimport'd symbol lacks external linkage." #~ msgstr "%Jchec dans la redclation de %D : symbol dllimport manque de liens externes." #~ msgid "%J'%D' defined locally after being referenced with dllimport linkage" #~ msgstr "%J %D dfini localement aprs avoir t rfrenc avec lien dllimport." #~ msgid "%J'%D' redeclared without dllimport attribute after being referenced with dllimport linkage" #~ msgstr "%J %D redclar sans attribut dllimport aprs avoir t rfrenc avec lien dllimport." #~ msgid "%J'%D' causes a section type conflict" #~ msgstr "%J %D cause un conflit du type de section" #~ msgid "Use the Cygwin interface" #~ msgstr "Utiliser l'interface Cygwin" #~ msgid "Use the Mingw32 interface" #~ msgstr "Utiliser l'interface Mingw32" #~ msgid "Create GUI application" #~ msgstr "Crer une application de type GUI" #~ msgid "Don't set Windows defines" #~ msgstr "Ne pas initialiser les dfinitions Windows" #~ msgid "Set Windows defines" #~ msgstr "Initialiser les dfinitions Windows" #~ msgid "Create console application" #~ msgstr "Crer une application de type console" #~ msgid "Generate code for a DLL" #~ msgstr "Gnrer le code pour un DLL" #~ msgid "Ignore dllimport for functions" #~ msgstr "Ignorer dllimport pour fonctions" #~ msgid "Use Mingw-specific thread support" #~ msgstr "Utilise le support de thread spcifique Mingw" #~ msgid "-f%s ignored for target (all code is position independent)" #~ msgstr "-f%s ignor pour la cible (tout le code set indpendant de la position)" #~ msgid "-mbnu210 is ignored (option is obsolete)" #~ msgstr "-mbnu210 est ignor (option obsolte)" #~ msgid "ms-bitfields not supported for objc" #~ msgstr "ms-bitfields n'est pas support pour objc" #~ msgid "Alternate calling convention" #~ msgstr "Convention alternative d'appels" #~ msgid "Use normal calling convention" #~ msgstr "Utiliser la convention normale d'appels" #~ msgid "Align some doubles on dword boundary" #~ msgstr "Aligner quelques doubles sur des frontires de mots doubles" #~ msgid "Align doubles on word boundary" #~ msgstr "Aligner les doubles sur des frontires de mots" #~ msgid "Uninitialized locals in .bss" #~ msgstr "Var. locales non initialises dans .bss" #~ msgid "Uninitialized locals in .data" #~ msgstr "Var. locales non initialises dans .data" #~ msgid "Use IEEE math for fp comparisons" #~ msgstr "Utiliser les mathmatiques IEEE pour les comparaisons FP" #~ msgid "Do not use IEEE math for fp comparisons" #~ msgstr "Ne pas utiliser les mathmatiques IEEE pour les comparaisons FP" #~ msgid "Return values of functions in FPU registers" #~ msgstr "Retourner les valeurs de fonctions dans les registres FPU" #~ msgid "Do not return values of functions in FPU registers" #~ msgstr "Ne pas retourner les valeurs de fonctions dans les registres FPU" #~ msgid "Do not generate sin, cos, sqrt for FPU" #~ msgstr "Ne pas gnrer sin, cos, sqrt pour le FPU" #~ msgid "Generate sin, cos, sqrt for FPU" #~ msgstr "Gnrer sin, cos, sqrt pour le FPU" #~ msgid "Omit the frame pointer in leaf functions" #~ msgstr "Omettre le pointeur de trame dans les fonctions feuilles" #~ msgid "Enable stack probing" #~ msgstr "Autoriser le sondage de la pile" #~ msgid "Align destination of the string operations" #~ msgstr "Aligner la destination des oprations sur les chanes" #~ msgid "Do not align destination of the string operations" #~ msgstr "Ne pas aligner la destination des oprations sur les chanes" #~ msgid "Inline all known string operations" #~ msgstr "Permettre l'enlignage dans toutes les oprations portant sur les chanes" #~ msgid "Do not inline all known string operations" #~ msgstr "Ne pas permettre l'enlignage dans toutes les oprations portant sur les chanes" #~ msgid "Use push instructions to save outgoing arguments" #~ msgstr "Utiliser les instructions push pour sauvegardes les arguments sortants" #~ msgid "Do not use push instructions to save outgoing arguments" #~ msgstr "Ne pas utiliser les instructions push pour sauvegardes les arguments sortants" #~ msgid "Support MMX built-in functions" #~ msgstr "Supporte les fonctions internes MMX" #~ msgid "Do not support MMX built-in functions" #~ msgstr "Ne supporte pas les fonctions internes MMX" #~ msgid "Support 3DNow! built-in functions" #~ msgstr "Supporte les fonctions internes 3DNOW!" #~ msgid "Do not support 3DNow! built-in functions" #~ msgstr "Ne supporte pas les fonctions internes 3DNOW!" #~ msgid "Support MMX and SSE built-in functions and code generation" #~ msgstr "Supporte les fonctions internes MMX et SSE et la gnration de code" #~ msgid "Do not support MMX and SSE built-in functions and code generation" #~ msgstr "Ne supporte pas les fonctions internes MMX et SSE et la gnration de code" #~ msgid "Support MMX, SSE and SSE2 built-in functions and code generation" #~ msgstr "Supporte les fonctions internes MMX, SSE et SSE2 et la gnration de code" #~ msgid "Do not support MMX, SSE and SSE2 built-in functions and code generation" #~ msgstr "Ne supporte pas les fonctions internes MMX, SSE et SSE2 et la gnration de code" #~ msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" #~ msgstr "Supporte les fonctions internes MMX, SSE, SSE2 et SSE3 et la gnration de code" #~ msgid "Do not support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" #~ msgstr "Ne supporte pas les fonctions internes MMX, SSE, SSE2 et SSE3 et la gnration de code" #~ msgid "sizeof(long double) is 16" #~ msgstr "sizeof(long double) est 16" #~ msgid "sizeof(long double) is 12" #~ msgstr "sizeof(long double) est 12" #~ msgid "Generate 64bit x86-64 code" #~ msgstr "Gnrer du code 64 bits pour x86-64" #~ msgid "Generate 32bit i386 code" #~ msgstr "Gnrer du code 32 bits pour i386" #~ msgid "Use native (MS) bitfield layout" #~ msgstr "Utiliser une configuration de champ de bits native (MS)" #~ msgid "Use gcc default bitfield layout" #~ msgstr "Utiliser la configuration par dfaut de gcc pour les champs de bits" #~ msgid "Use red-zone in the x86-64 code" #~ msgstr "Utiliser la zone-rouge pour le code x86-64" #~ msgid "Do not use red-zone in the x86-64 code" #~ msgstr "Ne pas utiliser la zone-rouge pour le code x86-64" #~ msgid "Use direct references against %gs when accessing tls data" #~ msgstr "Utiliser la rfrence directe envers %gs lors de l'accs des donnes tls" #~ msgid "Do not use direct references against %gs when accessing tls data" #~ msgstr "Ne pas utiliser la rfrence directe envers %gs lors de l'accs des donnes tls" #~ msgid "Schedule code for given CPU" #~ msgstr "Ordonnancer le code pour le processeur donn" #~ msgid "Generate floating point mathematics using given instruction set" #~ msgstr "Gnrer les mathmatiques en virgule flottante avec le jeu d'instructions donnes" #~ msgid "Generate code for given CPU" #~ msgstr "Gnrer le code pour le processeur donn" #~ msgid "Number of registers used to pass integer arguments" #~ msgstr "Nombre de registres utiliss pour passer les arguments entiers" #~ msgid "Loop code aligned to this power of 2" #~ msgstr "Codes de boucles aligns selon une puissance de 2" #~ msgid "Jump targets are aligned to this power of 2" #~ msgstr "Sauts de cibles aligns selon une puissance de 2" #~ msgid "Function starts are aligned to this power of 2" #~ msgstr "Dbuts des fonction aligns selon une puissance de 2" #~ msgid "Attempt to keep stack aligned to this power of 2" #~ msgstr "Tentative de conservation de la pile aligne selon une puissance de 2" #~ msgid "Branches are this expensive (1-5, arbitrary units)" #~ msgstr "Branchements coteux ce point (1-4, units arbitraires)" #~ msgid "Use given x86-64 code model" #~ msgstr "Utiliser le modle de x86-64 donn" #~ msgid "Use given assembler dialect" #~ msgstr "Utiliser la syntaxe de l'assembleur donn" #~ msgid "Use given thread-local storage dialect" #~ msgstr "Utiliser le dialecte de stockage du thread local fourni" #~ msgid "Generate ELF output" #~ msgstr "Gnrer la sortie ELF" #~ msgid "environment variable DJGPP not defined" #~ msgstr "variable d'environment DJGPP non dfinie" #~ msgid "environment variable DJGPP points to missing file '%s'" #~ msgstr "variable d'environment DJGPP pointe sur un fichier manquant %s " #~ msgid "environment variable DJGPP points to corrupt file '%s'" #~ msgstr "variable d'environment DJGPP pointe vers un fichier corrompu %s " #~ msgid "Generate code which uses the FPU" #~ msgstr "Gnrer du code qui utilise le FPU" #~ msgid "Do not generate code which uses the FPU" #~ msgstr "Ne pas gnrer du code qui utilise le FPU" #~ msgid "sorry, not implemented: #pragma align NAME=SIZE" #~ msgstr "dsol, pas implant: #pragma align NOM=TAILLE" #~ msgid "malformed #pragma align - ignored" #~ msgstr "#pragma align mal compos - ignor" #~ msgid "sorry, not implemented: #pragma noalign NAME" #~ msgstr "dsol, pas implant: #pragma noalign NOM" #~ msgid "conflicting architectures defined - using C series" #~ msgstr "architectures conflictuelles dfinies - utilise les sries C" #~ msgid "conflicting architectures defined - using K series" #~ msgstr "architectures conflictuelles dfinies - utilise les sries K" #~ msgid "iC2.0 and iC3.0 are incompatible - using iC3.0" #~ msgstr "iC2.0 et iC3.0 sont incompatibles - utilise iC3.0" #~ msgid "stack limit expression is not supported" #~ msgstr "expression limitant la pile n'est pas supporte" #~ msgid "Generate SA code" #~ msgstr "Gnrer du code SA" #~ msgid "Generate SB code" #~ msgstr "Gnrer du code SB" #~ msgid "Generate KA code" #~ msgstr "Gnrer du code KA" #~ msgid "Generate KB code" #~ msgstr "Gnrer du code KB" #~ msgid "Generate JA code" #~ msgstr "Gnrer du code JA" #~ msgid "Generate JD code" #~ msgstr "Gnrer du code JD" #~ msgid "Generate JF code" #~ msgstr "Gnrer du code JF" #~ msgid "generate RP code" #~ msgstr "Gnrer du code RP" #~ msgid "Generate MC code" #~ msgstr "Gnrer du code MC" #~ msgid "Generate CA code" #~ msgstr "Gnrer du code CA" #~ msgid "Generate CF code" #~ msgstr "Gnrer du code CF" #~ msgid "Use software floating point" #~ msgstr "Utiliser le traitement par logiciel des nombres flottants" #~ msgid "Use alternate leaf function entries" #~ msgstr "Utiliser les entres alternatives pour les fonctions de feuilles" #~ msgid "Do not use alternate leaf function entries" #~ msgstr "Ne pas utiliser les entres alternatives pour les fonctions de feuilles" #~ msgid "Perform tail call optimization" #~ msgstr "Effectuer une optimisation sur mesure des appels" #~ msgid "Do not perform tail call optimization" #~ msgstr "Ne pas effectuer une optimisation sur mesure des appels" #~ msgid "Use complex addressing modes" #~ msgstr "Utiliser les modes d'adressage complexes" #~ msgid "Do not use complex addressing modes" #~ msgstr "Ne pas utiliser les modes d'adressage complexes" #~ msgid "Align code to 8 byte boundary" #~ msgstr "Aligner le code sur des frontires de 8 octets" #~ msgid "Do not align code to 8 byte boundary" #~ msgstr "Ne pas aligner le code sur des frontires de 8 octets" #~ msgid "Enable compatibility with iC960 v2.0" #~ msgstr "Autoriser la compatibilit avec iC960 v2.0" #~ msgid "Enable compatibility with iC960 v3.0" #~ msgstr "Autoriser la compatibilit avec iC960 v3.0" #~ msgid "Enable compatibility with ic960 assembler" #~ msgstr "Autoriser la compatibilit avec l'assembleur iC960" #~ msgid "Do not permit unaligned accesses" #~ msgstr "Ne pas permettre les accs non aligns" #~ msgid "Permit unaligned accesses" #~ msgstr "Permettre les accs non aligns" #~ msgid "Layout types like Intel's v1.3 gcc" #~ msgstr "Utiliser une disposition de type Intel's v1.3 gcc" #~ msgid "Do not layout types like Intel's v1.3 gcc" #~ msgstr "Ne pas utiliser une disposition de type Intel's v1.3 gcc" #~ msgid "Use 64 bit long doubles" #~ msgstr "Utiliser les doubles longs de 64 bits" #~ msgid "Enable linker relaxation" #~ msgstr "Autoriser la relche par l'diteur de liens" #~ msgid "Do not enable linker relaxation" #~ msgstr "Ne pas autoriser la relche par l'diteur de liens" #~ msgid "malformed #pragma builtin" #~ msgstr "construit #pragma mal compos" #~ msgid "invalid argument of `%s' attribute" #~ msgstr "type d'argument invalide pour l'attribut %s " #~ msgid "%Jan address area attribute cannot be specified for local variables" #~ msgstr "%Jun attribut d'adresse de zone de donnes ne peut pas tre spcifi pour des variables locales" #~ msgid "%Jaddress area of '%s' conflicts with previous declaration" #~ msgstr "%Jl'adresse de la zone %s entre en conflit avec un dclaration prcdente" #~ msgid "%Jaddress area attribute cannot be specified for functions" #~ msgstr "%Jl'attribut de la zone d'adresse ne peut pas tre spcifi pour des fonctiones" #~ msgid "ia64_print_operand: unknown code" #~ msgstr "ia64_print_operand: code inconnu" #~ msgid "value of -mfixed-range must have form REG1-REG2" #~ msgstr "valeur de -mfixed-range doit avoir la forme REG1-REG2" #~ msgid "%s-%s is an empty range" #~ msgstr "%s-%s est une tendue vide" #~ msgid "cannot optimize floating point division for both latency and throughput" #~ msgstr "ne peut optimiser la division en point flottant la fois pour la latence et le dbit" #~ msgid "cannot optimize integer division for both latency and throughput" #~ msgstr "ne peut optimiser la division entire la fois pour la latence et le dbit" #~ msgid "cannot optimize square root for both latency and throughput" #~ msgstr "ne peut optimiser la racine carre la fois pour la latence et le dbit" #~ msgid "not yet implemented: latency-optimized inline square root" #~ msgstr "pas encore implant: racine carre enligne optimise pour la latence" #~ msgid "bad value (%s) for -mtls-size= switch" #~ msgstr "valeur errone (%s) pour l'option -mtls-size" #~ msgid "bad value (%s) for -tune= switch" #~ msgstr "valeur errone (%s) pour l'option -tune=" #~ msgid "Generate big endian code" #~ msgstr "Gnrer du code de systme octets de poids fort" #~ msgid "Generate little endian code" #~ msgstr "Gnrer du code de systme octets de poids faible" #~ msgid "Generate code for GNU as" #~ msgstr "Gnrer du code pour GNU tel que" #~ msgid "Generate code for Intel as" #~ msgstr "Gnrer du code pour Intel tel que" #~ msgid "Generate code for GNU ld" #~ msgstr "Gnrer du code pour GNU ld" #~ msgid "Generate code for Intel ld" #~ msgstr "Gnrer du code pour Intel ld" #~ msgid "Generate code without GP reg" #~ msgstr "Gnrer du code sans registre GP" #~ msgid "Emit stop bits before and after volatile extended asms" #~ msgstr "Produire de stop bits avant et aprs les asms tendus" #~ msgid "Don't emit stop bits before and after volatile extended asms" #~ msgstr "Ne pas produire de stop bits avant et aprs les asms tendus" #~ msgid "Emit code for Itanium (TM) processor B step" #~ msgstr "Produire du code pour le processeur B Itanium (TM)" #~ msgid "Use in/loc/out register names" #~ msgstr "Utilise les noms des registres in/loc/out " #~ msgid "Disable use of sdata/scommon/sbss" #~ msgstr "Interdire l'utilisation de sdata/scommon/sbss" #~ msgid "Enable use of sdata/scommon/sbss" #~ msgstr "Autoriser l'utilisation de sdata/scommon/sbss" #~ msgid "gp is constant (but save/restore gp on indirect calls)" #~ msgstr "gp est une constante (mais save/restore gp fait par appels indirects)" #~ msgid "Generate self-relocatable code" #~ msgstr "Gnrer du code auto-relocalisable" #~ msgid "Generate inline floating point division, optimize for latency" #~ msgstr "Gnrer la division enligne en point flottant, optimiser pour la latence" #~ msgid "Generate inline floating point division, optimize for throughput" #~ msgstr "Gnrer la division en point flottant enligne, optimiser pour le dbit" #~ msgid "Generate inline integer division, optimize for latency" #~ msgstr "Gnrer la division entire enligne, optimiser pour la latence" #~ msgid "Generate inline integer division, optimize for throughput" #~ msgstr "Gnrer la divisions entire enligne, optimiser pour le dbit" #~ msgid "Generate inline square root, optimize for latency" #~ msgstr "Gnrer la racine carre enligne, optimiser pour la latence" #~ msgid "Generate inline square root, optimize for throughput" #~ msgstr "Gnrer la racine carre enligne, optimiser pour le dbit" #~ msgid "Enable Dwarf 2 line debug info via GNU as" #~ msgstr "Autoriser les infos de lignes de mise au point Dwarf 2 via GNU tel que" #~ msgid "Disable Dwarf 2 line debug info via GNU as" #~ msgstr "Interdire les infos de lignes de mise au point Dwarf 2 via GNU tel que" #~ msgid "Enable earlier placing stop bits for better scheduling" #~ msgstr "Autoriser l'insertion antrieure de stop bits pour un meilleur ordonnancement" #~ msgid "Disable earlier placing stop bits" #~ msgstr "Interdire l'installation antrieure de bits d'arrt" #~ msgid "Specify range of registers to make fixed" #~ msgstr "spcifier l'tendue des registres pour la rendre fixe" #~ msgid "bad operand" #~ msgstr "oprande errone" #~ msgid "bad value (%s) for -mcpu= switch" #~ msgstr "valeur errone (%s) pour l'option -mcpu=" #~ msgid "The compiler does not support -march=%s." #~ msgstr "Le compilateur ne supporte pas -march=%s." #~ msgid "gp_offset (%ld) or end_offset (%ld) is less than zero." #~ msgstr "gp_offset (%ld) ou end_offset (%ld) est plus petit que zro." #~ msgid "argument `%d' is not a constant" #~ msgstr "l'argument de %d n'est pas une constante" #~ msgid "PRINT_OPERAND_ADDRESS, null pointer" #~ msgstr "PRINT_OPERAND_ADDRESS, pointeur nul" #~ msgid "PRINT_OPERAND: Unknown punctuation '%c'" #~ msgstr "PRINT_OPERAND: ponctuation %c inconnue" #~ msgid "PRINT_OPERAND null pointer" #~ msgstr "PRINT_OPERAND pointeur nul" #~ msgid "invalid %%P operand" #~ msgstr "oprande %%P invalide" #~ msgid "invalid %%p value" #~ msgstr "valeur %%p invalide" #~ msgid "invalid use of %%d, %%x, or %%X" #~ msgstr "utilisation invalide de %%d, %%x, ou %%X" #~ msgid "No default crt0.o" #~ msgstr "Aucun dfaut pour crt0.o" #~ msgid "Use GP relative sdata/sbss sections" #~ msgstr "Utiliser GP en mode relatif aux sections sdata/sbss" #~ msgid "Don't use GP relative sdata/sbss sections" #~ msgstr "Ne pas utiliser GP en mode relatif aux sections sdata/sbss" #~ msgid "Use ROM instead of RAM" #~ msgstr "Utiliser le ROM au lieu de la RAM" #~ msgid "Don't use ROM instead of RAM" #~ msgstr "Ne pas utiliser le ROM au lieu de la RAM" #~ msgid "Put uninitialized constants in ROM (needs -membedded-data)" #~ msgstr "Placer les constantes non itialises dans le ROM (a besoin de -membedded-data)" #~ msgid "Don't put uninitialized constants in ROM" #~ msgstr "Ne pas placer les constantes non itialises dans le ROM (a besoin de -membedded-data)" #~ msgid "Specify CPU for scheduling purposes" #~ msgstr "Spcifier le processeur pour les besoins de l'ordonnancement" #~ msgid "Specify CPU for code generation purposes" #~ msgstr "Spcifier le processeur pour les besoins de la gnration de code" #~ msgid "bad value (%s) for -mmodel switch" #~ msgstr "valeur errone (%s) pour l'option -mmodel" #~ msgid "bad value (%s) for -msdata switch" #~ msgstr "valeur errone (%s) pour l'option -msdata" #~ msgid "bad value (%s) for -flush-trap=n (0= found without a %%< in assembler pattern" #~ msgstr "erreur interne: %%> trouv sans %%< dans le canevas d'assemblage" #~ msgid "internal error: %%} found without a %%{ in assembler pattern" #~ msgstr "erreur interne: %%} trouv sans %%{ dans le canevas d'assemblage" #~ msgid "PRINT_OPERAND: unknown punctuation '%c'" #~ msgstr "PRINT_OPERAND: ponctuation %c inconnue" #~ msgid "PRINT_OPERAND, invalid insn for %%C" #~ msgstr "PRINT_OPERAND insn invalide pour %%C" #~ msgid "PRINT_OPERAND, invalid insn for %%N" #~ msgstr "PRINT_OPERAND insn invalide pour %%N" #~ msgid "PRINT_OPERAND, invalid insn for %%F" #~ msgstr "PRINT_OPERAND insn invalide pour %%F" #~ msgid "PRINT_OPERAND, invalid insn for %%W" #~ msgstr "PRINT_OPERAND insn invalide pour %%W" #~ msgid "PRINT_OPERAND, invalid operand for relocation" #~ msgstr "PRINT_OPERAND, oprande invalide pour la relocalisation" #~ msgid "can not handle inconsistent calls to `%s'" #~ msgstr "ne peut traiter des appels inconsistents %s " #~ msgid "the cpu name must be lower case" #~ msgstr "le nom du cpu doit tre en minuscules" #~ msgid "bad value (%s) for %s" #~ msgstr "valeur (%s) errone pour %s" #~ msgid "can't rewind temp file: %m" #~ msgstr "ne peut rembobiner le fichier temporaire: %m" #~ msgid "can't write to output file: %m" #~ msgstr "ne peut crire dans le fichier de sortie: %m" #~ msgid "can't read from temp file: %m" #~ msgstr "ne peut lire du fichier temporaire: %m" #~ msgid "can't close temp file: %m" #~ msgstr "ne peut fermer le fichier temporaire: %m" #~ msgid "Same as -mabi=32, just trickier" #~ msgstr "Identique -mabi=32, juste plus complexe" #~ msgid "Use 64-bit int type" #~ msgstr "Utiliser le type int de 64 bits" #~ msgid "Use 64-bit long type" #~ msgstr "Utiliser le type long de 64 bits" #~ msgid "Use 32-bit long type" #~ msgstr "Utiliser le type long de 32 bits" #~ msgid "Optimize lui/addiu address loads" #~ msgstr "Optimiser les chargements d'adresses lui/addiu" #~ msgid "Don't optimize lui/addiu address loads" #~ msgstr "Ne pas optimiser les chargements d'adresses lui/addiu" #~ msgid "Use MIPS as" #~ msgstr "Utiliser MIPS tel que" #~ msgid "Use GNU as" #~ msgstr "Utiliser GNU tel que" #~ msgid "Use symbolic register names" #~ msgstr "Utiliser les noms de registres symboliques" #~ msgid "Don't use symbolic register names" #~ msgstr "Ne pas utiliser les noms de registres symboliques" #~ msgid "Use GP relative sdata/sbss sections (now ignored)" #~ msgstr "Utiliser GP en mode relatif aux sections sdata/sbss (maintenant ignor)" #~ msgid "Don't use GP relative sdata/sbss sections (now ignored)" #~ msgstr "Ne pas utiliser GP en mode relatif aux sections sdata/sbss (maintenant ignor)" #~ msgid "Output compiler statistics (now ignored)" #~ msgstr "Afficher les statistiques de compilation (maintenant ignor)" #~ msgid "Don't output compiler statistics" #~ msgstr "Ne pas afficher les statistiques de compilation" #~ msgid "Don't optimize block moves" #~ msgstr "Ne pas optimiser les dplacements de blocs" #~ msgid "Optimize block moves" #~ msgstr "Optimiser les dplacements de blocs" #~ msgid "Use mips-tfile asm postpass" #~ msgstr "Utiliser la post-passe de type mips-tfile de l'assembleur" #~ msgid "Don't use mips-tfile asm postpass" #~ msgstr "Ne pas utiliser la post-passe de type mips-tfile de l'assembleur" #~ msgid "Use hardware floating point" #~ msgstr "Utiliser l'unit matrielle en virgule flottante" #~ msgid "Use 64-bit FP registers" #~ msgstr "Utiliser les registres FP de 64 bits" #~ msgid "Use 32-bit FP registers" #~ msgstr "Utiliser les registres FP de 32 bits" #~ msgid "Use 64-bit general registers" #~ msgstr "Utiliser les registres gnraux de 64 bits" #~ msgid "Use 32-bit general registers" #~ msgstr "Utiliser les registres gnraux de 32 bits" #~ msgid "Use Irix PIC" #~ msgstr "Utiliser le code PIC Irix" #~ msgid "Don't use Irix PIC" #~ msgstr "Ne pas utiliser le code PIC Irix" #~ msgid "Use indirect calls" #~ msgstr "Utiliser les appels indirects" #~ msgid "Don't use indirect calls" #~ msgstr "Ne pas utiliser les appels indirects" #~ msgid "Use embedded PIC" #~ msgstr "Utiliser le code PIC enchss" #~ msgid "Don't use embedded PIC" #~ msgstr "Ne pas utiliser le code PIC enchss" #~ msgid "Use big-endian byte order" #~ msgstr "Utiliser l'ordre des octets pour systme octets de poids fort" #~ msgid "Use little-endian byte order" #~ msgstr "Utiliser l'ordre des octets pour systme octets de poids faible" #~ msgid "Use single (32-bit) FP only" #~ msgstr "Utiliser un simple FP (32 bits) seulement" #~ msgid "Don't use single (32-bit) FP only" #~ msgstr "Ne pas utiliser un simple FP (32 bits) seulement" #~ msgid "Use multiply accumulate" #~ msgstr "Utiliser les multiplications par accumulations" #~ msgid "Don't use multiply accumulate" #~ msgstr "Ne pas utiliser les multiplications par accumulations" #~ msgid "Don't generate fused multiply/add instructions" #~ msgstr "Ne pas gnrer des instructions fusionns de multiplication/addition" #~ msgid "Generate fused multiply/add instructions" #~ msgstr "Gnrer des instructions fusionns de multiplication/addition" #~ msgid "Work around early 4300 hardware bug" #~ msgstr "Contourner le bug matriel des premiers 4300" #~ msgid "Don't work around early 4300 hardware bug" #~ msgstr "Ne pas contourner le bug matriel des premiers 4300" #~ msgid "Work around errata for early SB-1 revision 2 cores" #~ msgstr "Contourner l'erreur pour la rvision 2 du noyau des versions initiales SB-1" #~ msgid "Don't work around errata for early SB-1 revision 2 cores" #~ msgstr "Ne pas contourner l'erreur pour la rvision 2 du noyau des versions initiales SB-1" #~ msgid "Trap on integer divide by zero" #~ msgstr "Intercepter les divisions par zros sur des entiers" #~ msgid "Don't trap on integer divide by zero" #~ msgstr "Ne pas intercepter les divisions par zros sur des entiers" #~ msgid "Use Branch Likely instructions, overriding default for arch" #~ msgstr "Utiliser des instructions se comportant comme des branchements, crasant le dfaut de l'architecture" #~ msgid "Don't use Branch Likely instructions, overriding default for arch" #~ msgstr "Ne pas utiliser des instructions se comportant comme des branchements, crasant le dfaut de l'architecture" #~ msgid "Use NewABI-style %reloc() assembly operators" #~ msgstr "Utiliser NewABI-style %reloc() les oprateurs d'assemblage" #~ msgid "Use assembler macros instead of relocation operators" #~ msgstr "Utiliser les macros assembleurs au lieu des oprateurs de relocalisation" #~ msgid "Generate mips16 code" #~ msgstr "Gnrer du code mips16" #~ msgid "Generate normal-mode code" #~ msgstr "Gnrer du code en mode normal" #~ msgid "Lift restrictions on GOT size" #~ msgstr "Enlever les restrictions sur la taille GOT" #~ msgid "Do not lift restrictions on GOT size" #~ msgstr "Ne pas enlever les restrictions sur la taille GOT" #~ msgid "Specify an ABI" #~ msgstr "Spcifier une ABI" #~ msgid "Specify a Standard MIPS ISA" #~ msgstr "Spcifier le standard MIPS ISA" #~ msgid "mips16 function profiling" #~ msgstr "profilage de fonction mips16" #~ msgid "-f%s not supported: ignored" #~ msgstr "-f%s n'est pas support: ignor" #~ msgid "too large function value type, needs %d registers, have only %d registers for this" #~ msgstr "valeur de type de fonction trop grande, a besoin de %d registres mais seuls %d disponibles" #~ msgid "function_profiler support for MMIX" #~ msgstr "function_profiler support pour MMIX" #~ msgid "MMIX Internal: Last named vararg would not fit in a register" #~ msgstr "MMIX interne: dernier vararg nomm ne pourra tre insr dans un registre" #~ msgid "MMIX Internal: Expected a CONST_INT, not this" #~ msgstr "MMIX interne: attendait CONST_INT, pas ceci" #~ msgid "MMIX Internal: Bad register: %d" #~ msgstr "MMIX interne: registre erron: %d" #~ msgid "MMIX Internal: Bad value for 'm', not a CONST_INT" #~ msgstr "MMIX interne: valeur errone pour m , pas un CONST_INT" #~ msgid "MMIX Internal: Expected a register, not this" #~ msgstr "MMIX interne: attendait un registre, pas ceci" #~ msgid "MMIX Internal: Expected a constant, not this" #~ msgstr "MMIX interne: attendait une constante, pas ceci" #~ msgid "MMIX Internal: Missing `%c' case in mmix_print_operand" #~ msgstr "MMIX interne: cas %c manquant dans mmix_print_operand" #~ msgid "MMIX Internal: Cannot decode this operand" #~ msgstr "MMIX interne: ne peut dcoder cette oprande" #~ msgid "MMIX Internal: This is not a recognized address" #~ msgstr "MMIX interne: ce n'est pas une adresse reconnue" #~ msgid "stack frame not a multiple of 8 bytes: %d" #~ msgstr "trame de pile n'est pas un multiple de 8 octets: %d" #~ msgid "stack frame not a multiple of octabyte: %d" #~ msgstr "trame de pile n'est pas un multiple de 8 octets: %d" #~ msgid "MMIX Internal: %s is not a shiftable int" #~ msgstr "MMIX interne: %s n'est pas un entier pouvant dcal" #~ msgid "MMIX Internal: Trying to output invalidly reversed condition:" #~ msgstr "MMIX interne: tentative de produire incorrectement une condition renverse:" #~ msgid "MMIX Internal: What's the CC of this?" #~ msgstr "MMIX interne: quel sorte de CC est-ce?" #~ msgid "MMIX Internal: What is the CC of this?" #~ msgstr "MMIX interne: quel sorte de CC est-ce?" #~ msgid "MMIX Internal: This is not a constant:" #~ msgstr "interne MMIX: ce n'est pas une constante:" #~ msgid "Set start-address of the program" #~ msgstr "Adress de dpart du programme fixe" #~ msgid "Set start-address of data" #~ msgstr "Adresse de dpart des donnes fixe" #~ msgid "For intrinsics library: pass all parameters in registers" #~ msgstr "Pour les bibliothques intrinsques : passer tous les paramtres par registre" #~ msgid "Use register stack for parameters and return value" #~ msgstr "Utiliser le registre de la pile pour les paramtres et la valeur retourne" #~ msgid "Use call-clobbered registers for parameters and return value" #~ msgstr "utiliser les registres d'appels maltraits pour les paramtres et les valeurs retournes" #~ msgid "Use epsilon-respecting floating point compare instructions" #~ msgstr "Utiliser un epsilon respectant les instructions de comparaison en virgule flottante" #~ msgid "Use zero-extending memory loads, not sign-extending ones" #~ msgstr "utiliser des chargements mmoire avec zro extension, pas celles avec signe d'extension" #~ msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)" #~ msgstr "gnrer des rsultats de division avec reste ayant le mme signe que le diviseur (pas le dividende)" #~ msgid "Prepend global symbols with \":\" (for use with PREFIX)" #~ msgstr "pr ajouter les symboles globaux avec : (pour l'utilisation avec PREFIX)" #~ msgid "Do not provide a default start-address 0x100 of the program" #~ msgstr "Ne pas fournir d'adresse de dpart par dfaut 0x100 du programme" #~ msgid "Link to emit program in ELF format (rather than mmo)" #~ msgstr "Faire l'dition de liens pour produire le programme en format ELF (au lieu de mmo)" #~ msgid "Use P-mnemonics for branches statically predicted as taken" #~ msgstr "Utiliser les mnmoniques P pour les branchements statiquement prvus tre pris" #~ msgid "Don't use P-mnemonics for branches" #~ msgstr "Ne pas utiliser les mnmoniques P pour les branchements" #~ msgid "Use addresses that allocate global registers" #~ msgstr "Utiliser les adresses qui allouent des registres globaux" #~ msgid "Do not use addresses that allocate global registers" #~ msgstr "Ne pas utiliser des adresses qui allouent des registres globaux" #~ msgid "Generate a single exit point for each function" #~ msgstr "Gnrer un point de sortie simple pour chaque fonction" #~ msgid "Do not generate a single exit point for each function" #~ msgstr "Ne pas gnrer un point de sortie simple pour chaque fonction" #~ msgid "Target the AM33 processor" #~ msgstr "Cible le processeur AM33" #~ msgid "Target the AM33/2.0 processor" #~ msgstr "Cibler le processeur AM33/2.0" #~ msgid "Enable linker relaxations" #~ msgstr "Autoriser la relche de l'diteur de liens" #~ msgid "Work around hardware multiply bug" #~ msgstr "Contourner le bug matriel de la multiplication" #~ msgid "Do not work around hardware multiply bug" #~ msgstr "Ne pas contourner le bug matriel de la multiplication" #~ msgid "Don't use hardware fp" #~ msgstr "Ne pas utiliser le FP matriel" #~ msgid "Alternative calling convention" #~ msgstr "Convention alternative d'appels" #~ msgid "Pass some arguments in registers" #~ msgstr "Passer quelques arguments par les registres" #~ msgid "Pass all arguments on stack" #~ msgstr "PAsser tous les arguments par la pile" #~ msgid "Optimize for 32532 cpu" #~ msgstr "Optimiser pour le processeur 32532" #~ msgid "Optimize for 32332 cpu" #~ msgstr "Optimiser pour le processeur 32332" #~ msgid "Optimize for 32032" #~ msgstr "Optimiser pour le 32022" #~ msgid "Register sb is zero. Use for absolute addressing" #~ msgstr "Registre sb est zro. Utilis pour l'adressage absolu" #~ msgid "Do not use register sb" #~ msgstr "Ne pas utiliser le registre sb" #~ msgid "Use bit-field instructions" #~ msgstr "Utiliser les instructions de champs de bits" #~ msgid "Do not use bit-field instructions" #~ msgstr "Ne pas utiliser les instructions de champs de bits" #~ msgid "Generate code for high memory" #~ msgstr "Gnrer du code pour la partie haute de la mmoire" #~ msgid "Generate code for low memory" #~ msgstr "Gnrer du code pour la partie basse de la mmoire" #~ msgid "32381 fpu" #~ msgstr "FPU 32381" #~ msgid "Use multiply-accumulate fp instructions" #~ msgstr "Utiliser les instructions FP de multiplications avec accumulations" #~ msgid "Do not use multiply-accumulate fp instructions" #~ msgstr "Ne pas utiliser les instructions FP de multiplications avec accumulations" #~ msgid "\"Small register classes\" kludge" #~ msgstr "\"Petites classes de registres\" kludge" #~ msgid "No \"Small register classes\" kludge" #~ msgstr "Pas de \"Petites classes de registres\" kludge" #~ msgid "" #~ "unknown -mschedule= option (%s).\n" #~ "Valid options are 700, 7100, 7100LC, 7200, 7300, and 8000\n" #~ msgstr "" #~ "Option inconnue -mschedule= (%s)\n" #~ "Les options valides sont 700, 7100, 7100LC, 7200, 7300 et 8000\n" #~ msgid "" #~ "unknown -march= option (%s).\n" #~ "Valid options are 1.0, 1.1, and 2.0\n" #~ msgstr "" #~ "Option inconnue -march= (%s)\n" #~ "Les options valides sont 1.0, 1.1 et 2.0\n" #~ msgid "PIC code generation is not supported in the portable runtime model\n" #~ msgstr "La gnration de code PIC n'est pas supporte dans le modle portable d'excution\n" #~ msgid "PIC code generation is not compatible with fast indirect calls\n" #~ msgstr "La gnration de code PIC n'est pas compatible avec les appels indirects rapides.\n" #~ msgid "-g is only supported when using GAS on this processor," #~ msgstr "L'option -g est seulement supporte lorsque GAS est utilis sur ce processeur," #~ msgid "Generate cpp defines for server IO" #~ msgstr "Gnrer les defines pour les IO d'un serveur" #~ msgid "Generate cpp defines for workstation IO" #~ msgstr "Gnrer les defines pour les IO d'une station de travail" #~ msgid "Generate PA1.1 code" #~ msgstr "Gnrer du code PA1.1" #~ msgid "Generate PA1.0 code" #~ msgstr "Gnrer du code PA1.0" #~ msgid "Generate PA2.0 code (requires binutils 2.10 or later)" #~ msgstr "Gnrer du code PA2.0 (ncessite binutils 2.10 ou suprieur)" #~ msgid "Disable FP regs" #~ msgstr "Dsactiver les registres FP" #~ msgid "Do not disable FP regs" #~ msgstr "Ne pas dsactiver les registres FP" #~ msgid "Disable space regs" #~ msgstr "Dsactiver l'espace registre" #~ msgid "Do not disable space regs" #~ msgstr "Ne pas dsactiver l'espace registre" #~ msgid "Put jumps in call delay slots" #~ msgstr "Mettre des sauts dant les fentes de dlais" #~ msgid "Do not put jumps in call delay slots" #~ msgstr "Ne pas mettre des sauts dant les fentes de dlais" #~ msgid "Disable indexed addressing" #~ msgstr "dsactiver l'adressage index" #~ msgid "Do not disable indexed addressing" #~ msgstr "Ne pas dsactiver l'adressage index" #~ msgid "Use portable calling conventions" #~ msgstr "Utiliser les conventions d'appels portables" #~ msgid "Do not use portable calling conventions" #~ msgstr "Ne pas utiliser les conventions d'appel portables" #~ msgid "Assume code will be assembled by GAS" #~ msgstr "Assumer que le code sera assembl par GAS" #~ msgid "Do not assume code will be assembled by GAS" #~ msgstr "Ne pas assumer que le code sera assembl par GAS" #~ msgid "Do not use software floating point" #~ msgstr "Ne pas utiliser le logiciel pour virgule flottante" #~ msgid "Emit long load/store sequences" #~ msgstr "Gnrer des instructions multiples pour chargement/stockage" #~ msgid "Do not emit long load/store sequences" #~ msgstr "Ne pas gnrer les instructions multiples de chargement/stockage" #~ msgid "Generate fast indirect calls" #~ msgstr "Ne pas utiliser les appels rapides indirects" #~ msgid "Do not generate fast indirect calls" #~ msgstr "Ne pas gnrer de directives rapides indirects" #~ msgid "Generate code for huge switch statements" #~ msgstr "Gnrer du code pour les grandes dclarations de branchements" #~ msgid "Do not generate code for huge switch statements" #~ msgstr "Ne pas gnrer du code pour les grandes dclarations de branchement" #~ msgid "Always generate long calls" #~ msgstr "Gnrer toujours des appels longs" #~ msgid "Generate long calls only when needed" #~ msgstr "Gnrer des appels longs lorsque ncessaire" #~ msgid "Enable linker optimizations" #~ msgstr "Activer les optimisations par l'diteur de liens" #~ msgid "Specify architecture for code generation. Values are 1.0, 1.1, and 2.0. 2.0 requires gas snapshot 19990413 or later." #~ msgstr "Spcifier l'architecture pour la gnration de code. Les valeurs sont 1.0, 1.1 et 2.0. 2.0 requiert gas snapshot 19990413 ou plus rcent." #~ msgid "Assume code will be linked by GNU ld" #~ msgstr "Assumer que le code sera li par GNU ld" #~ msgid "Assume code will be linked by HP ld" #~ msgstr "Assumer que le code sera li par HP ld" #~ msgid "Do not use hardware floating point" #~ msgstr "Ne pas utiliser le matriel pour virgule flottante" #~ msgid "Return floating point results in ac0" #~ msgstr "Le rsultat retourn en virgule flottante se retrouve dans AC0." #~ msgid "Return floating point results in memory" #~ msgstr "Le rsultat retourn en virgule flottante se retrouve en mmoire." #~ msgid "Generate code for an 11/40" #~ msgstr "Gnrer du code pour un 11/40" #~ msgid "Generate code for an 11/45" #~ msgstr "Gnrer du code pour un 11/45" #~ msgid "Generate code for an 11/10" #~ msgstr "Gnrer du code pour un 11/10" #~ msgid "Use 32 bit int" #~ msgstr "Utiliser des int de 32 bits" #~ msgid "Use 16 bit int" #~ msgstr "Utiliser des int de 16 bits" #~ msgid "Use 32 bit float" #~ msgstr "Utiliser des flottants de 32 bits" #~ msgid "Use 64 bit float" #~ msgstr "Utiliser des flottants de 64 bits" #~ msgid "Target has split I&D" #~ msgstr "Cible a un I&D spar" #~ msgid "Target does not have split I&D" #~ msgstr "Cible n'a pas un I&D spar" #~ msgid "Use UNIX assembler syntax" #~ msgstr "Utliser la syntaxe de l'assembleur UNIX" #~ msgid "Use DEC assembler syntax" #~ msgstr "Utliser la syntaxe de l'assembleur DEC" #~ msgid "Segmentation Fault (code)" #~ msgstr "Faute de segmentation (code)" #~ msgid "Out of stack space.\n" #~ msgstr "Manque d'espace sur la pile.\n" #~ msgid "Try running `%s' in the shell to raise its limit.\n" #~ msgstr "Essayer d'excuter %s dans le shell pour augmenter la limite.\n" #~ msgid "Segmentation Fault" #~ msgstr "Faute de segmentation" #~ msgid "While setting up signal stack: %m" #~ msgstr "Lors de la configuration de la pile de signaux: %m" #~ msgid "While setting up signal handler: %m" #~ msgstr "Lors de la configuration de la routine de traitement de signal: %m" #~ msgid "couldn't unmap pch_address_space: %m\n" #~ msgstr "ne peut dfaire la map pch_address_space: %m\n" #~ msgid "ignoring malformed #pragma longcall" #~ msgstr "#pragma longcall mal compos" #~ msgid "missing open paren" #~ msgstr "parenthse ouvrante manquante" #~ msgid "missing number" #~ msgstr "nombre manquant" #~ msgid "missing close paren" #~ msgstr "parenthse fermante manquante" #~ msgid "number must be 0 or 1" #~ msgstr "le nombre doit tre 0 ou 1" #~ msgid "junk at end of #pragma longcall" #~ msgstr "rebut la fin de #pragma longcall" #~ msgid "-mmultiple is not supported on little endian systems" #~ msgstr "-mmultiple n'est pas support sur des systme octets de poids faible" #~ msgid "-mstring is not supported on little endian systems" #~ msgstr "-mstring n'est pas support sur des systme octets de poids faible" #~ msgid "unknown -mdebug-%s switch" #~ msgstr "option -mdebug-%s inconnue" #~ msgid "unknown -mtraceback arg `%s'; expecting `full', `partial' or `none'" #~ msgstr "argument %s inconnu de l'option -mtraceback; attendu full , partial ou none " #~ msgid "Unknown switch -mlong-double-%s" #~ msgstr "option -mlong-double-%s inconnue" #~ msgid "unknown -m%s= option specified: '%s'" #~ msgstr "option -m%s= inconnue spcifie: %s " #~ msgid "not configured for ABI: '%s'" #~ msgstr "pas configur pour ABI: %s " #~ msgid "unknown ABI specified: '%s'" #~ msgstr "ABI spcifi inconnu: %s " #~ msgid "unknown -malign-XXXXX option specified: '%s'" #~ msgstr "option -malign-XXXXX inconnue spcifie: %s " #~ msgid "Cannot return value in vector register because altivec instructions are disabled, use -maltivec to enable them." #~ msgstr "Ne peut retourner la valeur dans le registre de vecteur parce que les instructions altivec sont dsactives, utiliser -maltivec pour les autoriser" #~ msgid "Cannot pass argument in vector register because altivec instructions are disabled, use -maltivec to enable them." #~ msgstr "Ne peut relayer l'argument dans le registre de vecteur parce que les instructions altivec sont dsactives, utiliser -maltivec pour les autoriser" #~ msgid "argument 1 must be a 5-bit signed literal" #~ msgstr "argument 1 doit tre un litral sign de 5 bits" #~ msgid "argument 2 must be a 5-bit unsigned literal" #~ msgstr "argument 2 doit tre un litral non sign de 5 bits" #~ msgid "argument 1 of __builtin_altivec_predicate must be a constant" #~ msgstr "argument 1 de __builtin_altivec_predicate doit tre une constante" #~ msgid "argument 1 of __builtin_altivec_predicate is out of range" #~ msgstr "argument 1 de __builtin_altivec_predicate est hors limite" #~ msgid "argument 3 must be a 4-bit unsigned literal" #~ msgstr "argument 3 doit tre un litral non sign de 4 bits" #~ msgid "argument to `%s' must be a 2-bit unsigned literal" #~ msgstr "argument de %s doit tre un litral non sign de 2 bits" #~ msgid "argument to dss must be a 2-bit unsigned literal" #~ msgstr "argument de dss doit tre un litral non sign de 2 bits" #~ msgid "argument 1 of __builtin_spe_predicate must be a constant" #~ msgstr "argument 1 de __builtin_spe_predicate doit tre une constante" #~ msgid "argument 1 of __builtin_spe_predicate is out of range" #~ msgstr "argument 1 de __builtin_spe_predicate est hors limite" #~ msgid "your function will be miscompiled" #~ msgstr "votre fonction sera mal compile" #~ msgid "invalid %%f value" #~ msgstr "valeur %%f invalide" #~ msgid "invalid %%F value" #~ msgstr "valeur %%F invalide" #~ msgid "invalid %%G value" #~ msgstr "valeur %%G invalide" #~ msgid "invalid %%j code" #~ msgstr "valeur %%j invalide" #~ msgid "invalid %%J code" #~ msgstr "valeur %%J invalide" #~ msgid "invalid %%k value" #~ msgstr "valeur %%k invalide" #~ msgid "invalid %%K value" #~ msgstr "valeur %%K invalide" #~ msgid "invalid %%O value" #~ msgstr "valeur %%O invalide" #~ msgid "invalid %%q value" #~ msgstr "valeur %%q invalide" #~ msgid "invalid %%S value" #~ msgstr "valeur %%S invalide" #~ msgid "invalid %%T value" #~ msgstr "valeur %%T invalide" #~ msgid "invalid %%u value" #~ msgstr "valeur %%u invalide" #~ msgid "invalid %%v value" #~ msgstr "valeur %%v invalide" #~ msgid "no profiling of 64-bit code for this ABI" #~ msgstr "pas de profilage du code de 64 bits pour cet ABI" #~ msgid "Always pass floating-point arguments in memory" #~ msgstr "Toujours passer des arguments en virgule flottante en mmoire" #~ msgid "Don't always pass floating-point arguments in memory" #~ msgstr "Na pas toujours passer des arguments en virgule flottante en mmoire" #~ msgid "Support message passing with the Parallel Environment" #~ msgstr "Supporter le passage de messages dans un environnement parallle" #~ msgid "Compile for 64-bit pointers" #~ msgstr "Compiler pour des pointeurs de 64 bits" #~ msgid "Compile for 32-bit pointers" #~ msgstr "Compiler pour des pointeurs de 32 bits" #~ msgid "-maix64 and POWER architecture are incompatible" #~ msgstr "-maix64 et architecture POWER sont incompatibles" #~ msgid "-maix64 requires PowerPC64 architecture remain enabled" #~ msgstr "-maix64 requiert une architecture PowerPC64 qui demeure slectionne" #~ msgid "-maix64 required: 64-bit computation with 32-bit addressing not yet supported" #~ msgstr "-maix64 requis: calcul en 64 bits avec un adressage de 32 bits n'est pas encore support" #~ msgid "Generate code suitable for executables (NOT shared libs)" #~ msgstr "Gnrer du code adapt pour les excutables (PAS les librairies partages)" #~ msgid "-mdynamic-no-pic overrides -fpic or -fPIC" #~ msgstr "-mdynamic-no-pic crase -fpic ou -fPIC" #~ msgid "-fpic is not supported; -fPIC assumed" #~ msgstr "-fpic n'est pas support; -fPIC assum" #~ msgid "-m64 requires a PowerPC64 cpu" #~ msgstr "-m64 requiert un processeur PowerPC64" #~ msgid "Call mcount for profiling before a function prologue" #~ msgstr "Appeller mcount pour le profilage avant le prologue de la fonction" #~ msgid "Call mcount for profiling after a function prologue" #~ msgstr "Ne pas appeller mcount pour le profilage avant le prologue de la fonction" #~ msgid "Use POWER instruction set" #~ msgstr "Utiliser le jeu d'instructions du POWER" #~ msgid "Use POWER2 instruction set" #~ msgstr "Utiliser le jeu d'instructions du POWER2" #~ msgid "Do not use POWER2 instruction set" #~ msgstr "Ne pas utiliser le jeu d'instructions du POWER2" #~ msgid "Do not use POWER instruction set" #~ msgstr "Ne pas utiliser le jeu d'instructions du POWER" #~ msgid "Use PowerPC instruction set" #~ msgstr "Utiliser le jeu d'instructions du PowerPC" #~ msgid "Do not use PowerPC instruction set" #~ msgstr "Ne pas utiliser le jeu d'instructions du PowerPC" #~ msgid "Use PowerPC General Purpose group optional instructions" #~ msgstr "Utiliser le groupe d'instructions optionnelles d'utilit gnral du PowerPC" #~ msgid "Do not use PowerPC General Purpose group optional instructions" #~ msgstr "Ne pas utiliser le groupe d'instructions optionnelles d'usage gnral du PowerPC" #~ msgid "Use PowerPC Graphics group optional instructions" #~ msgstr "Utiliser le groupe d'instructions graphiques optionnelles du PowerPC" #~ msgid "Do not use PowerPC Graphics group optional instructions" #~ msgstr "Ne pas utiliser le groupe d'instructions optionnelles graphiques du PowerPC" #~ msgid "Use PowerPC-64 instruction set" #~ msgstr "Utiliser le jeu d'instructions du PowerPC-64" #~ msgid "Do not use PowerPC-64 instruction set" #~ msgstr "Ne pas utiliser le jeu d'instructions du PowerPC-64" #~ msgid "Use AltiVec instructions" #~ msgstr "Utiliser les instructions AltiVec" #~ msgid "Do not use AltiVec instructions" #~ msgstr "Ne pas utiliser les instructions AltiVec" #~ msgid "Use new mnemonics for PowerPC architecture" #~ msgstr "Utiliser les nouvelles mnmoniques pour l'architecture du PowerPC" #~ msgid "Use old mnemonics for PowerPC architecture" #~ msgstr "Utiliser les anciennes mnmoniques pour l'architecture du PowerPC" #~ msgid "Put everything in the regular TOC" #~ msgstr "Place tout dans le TOC rgulier" #~ msgid "Place floating point constants in TOC" #~ msgstr "Placer les constantes en virgule flottante dans le TOC" #~ msgid "Do not place floating point constants in TOC" #~ msgstr "Ne pas placer les constantes en virgule flottante dans le TOC" #~ msgid "Place symbol+offset constants in TOC" #~ msgstr "Placer les constantes symboles+dcalages dans le TOC" #~ msgid "Do not place symbol+offset constants in TOC" #~ msgstr "Ne pas placer les constantes symboles+dcalages dans le TOC" #~ msgid "Place variable addresses in the regular TOC" #~ msgstr "Placer les adresses variables dans un TOC rgulier" #~ msgid "Generate load/store multiple instructions" #~ msgstr "Gnrer les instructions multiples de chargement/stockage" #~ msgid "Do not generate load/store multiple instructions" #~ msgstr "Ne pas gnrer les instructions multiples de chargement/stockage" #~ msgid "Generate string instructions for block moves" #~ msgstr "Gnrer les instructions chanes pour les dplacements de blocs" #~ msgid "Do not generate string instructions for block moves" #~ msgstr "Ne pas gnrer les instructions chanes pour les dplacements de blocs" #~ msgid "Generate load/store with update instructions" #~ msgstr "Gnrer les instructions de mise jour de chargement/stockage" #~ msgid "Do not generate load/store with update instructions" #~ msgstr "Ne pas gnrer les instructions de mise jour de chargement/stockage" #~ msgid "Do not generate fused multiply/add instructions" #~ msgstr "Ne pas gnrer des instructions fusionns de multiplication/addition" #~ msgid "Do not schedule the start and end of the procedure" #~ msgstr "Ne pas ordonnancer le dbut et la fin de la procdure" #~ msgid "Return all structures in memory (AIX default)" #~ msgstr "Retourner toutes les structures en mmoire (par dfaut sur AIX)" #~ msgid "Return small structures in registers (SVR4 default)" #~ msgstr "Retourner les petites structures par les registres (par dfaut sur SVR4)" #~ msgid "Generate single field mfcr instruction" #~ msgstr "Gnrer des instructions champ simple mfcr" #~ msgid "Do not generate single field mfcr instruction" #~ msgstr "Ne pas gnrer des instructions champ simple mfcr" #~ msgid "Use features of and schedule code for given CPU" #~ msgstr "Utiliser les options et ordonnancer le code pour le processeur donn" #~ msgid "Enable debug output" #~ msgstr "Autoriser la sortie lors de la mise au point" #~ msgid "Select full, part, or no traceback table" #~ msgstr "Slectionner full , part ou none " #~ msgid "Specify ABI to use" #~ msgstr "Spcifier l'ABI utiliser" #~ msgid "Specify size of long double (64 or 128 bits)" #~ msgstr "Spcifier la taille des long double (64 ou 128 bits)" #~ msgid "Specify yes/no if isel instructions should be generated" #~ msgstr "Spcifier yes (pour oui)/ no (pour non) si les instruction isel doivent tre gnrs" #~ msgid "Specify yes/no if SPE SIMD instructions should be generated" #~ msgstr "Spcifier yes (pour oui) /no (pour non) si les instructions SPE SIMD doivent tre gnres" #~ msgid "Specify yes/no if using floating point in the GPRs" #~ msgstr "Spcifier yes (pour oui) /no (pour non) si les nombres en virgule flottante sont utiliss dans le GPR" #~ msgid "Specify yes/no if VRSAVE instructions should be generated for AltiVec" #~ msgstr "Spcifier yes (pour oui)/ no (pour non) si les instruction VRSAVE doivent tre gnrs pour ALtiVec" #~ msgid "Avoid all range limits on call instructions" #~ msgstr "viter toutes les limites sur les instructions d'appel" #~ msgid "Determine which dependences between insns are considered costly" #~ msgstr "Dterminer laquelle des dpendances entre les insns qui sont considres coteuses" #~ msgid "Specify which post scheduling nop insertion scheme to apply" #~ msgstr "Spcifier lequel schme de post ordonnancement d'insertion de NOP doit tre appliqu" #~ msgid "Specify alignment of structure fields default/natural" #~ msgstr "Spcifier l'alignement des champs de structure par dfaut/naturel" #~ msgid "Specify scheduling priority for dispatch slot restricted insns" #~ msgstr "Spcifier la priorit d'ordonnancement pour la rpartition de fentes insns restreintes" #~ msgid "RETURN_ADDRESS_OFFSET not supported" #~ msgstr "RETURN_ADDRESS_OFFSET n'est pas support" #~ msgid "Select ABI calling convention" #~ msgstr "Slectionner la convention d'appel ABI" #~ msgid "Select method for sdata handling" #~ msgstr "Slectionner la mthode de traitement sdata" #~ msgid "Align to the base type of the bit-field" #~ msgstr "Aligner la base du type du champ de bits" #~ msgid "Don't align to the base type of the bit-field" #~ msgstr "Ne pas aligner la base du type du champ de bits" #~ msgid "Don't assume that unaligned accesses are handled by the system" #~ msgstr "Ne pas prsumer que les accs non alignes sont traits par le systme" #~ msgid "Assume that unaligned accesses are handled by the system" #~ msgstr "Prsumer que les accs non alignes sont traits par le systme" #~ msgid "Produce code relocatable at runtime" #~ msgstr "Produire du code relocalisable au moment de l'excution" #~ msgid "Don't produce code relocatable at runtime" #~ msgstr "Ne pas produire du code relocalisable au moment de l'excution" #~ msgid "Produce little endian code" #~ msgstr "Produire du code pour systme octets de poids faible (little endian)" #~ msgid "Produce big endian code" #~ msgstr "Produire du code pour systme octets de poids fort (big endian)" #~ msgid "no description yet" #~ msgstr "aucune description encore" #~ msgid "Use EABI" #~ msgstr "Utiliser EABI" #~ msgid "Don't use EABI" #~ msgstr "Ne pas utiliser EABI" #~ msgid "Do not allow bit-fields to cross word boundaries" #~ msgstr "Ne pas permettre les champs de bits de traverser des frontires de mots" #~ msgid "Use alternate register names" #~ msgstr "Utiliser les noms alternatifs de registres" #~ msgid "Don't use alternate register names" #~ msgstr "Ne pas utiliser les noms alternatifs de registres" #~ msgid "Link with libsim.a, libc.a and sim-crt0.o" #~ msgstr "Faire l'dition de liens avec libsim.a, libc.a et sim-crt0.o" #~ msgid "Link with libads.a, libc.a and crt0.o" #~ msgstr "Faire l'dition de liens avec libads.a, libc.a and crt0.o" #~ msgid "Link with libyk.a, libc.a and crt0.o" #~ msgstr "Faire l'dition de liens avec libyk.a, libc.a and crt0.o" #~ msgid "Link with libmvme.a, libc.a and crt0.o" #~ msgstr "Faire l'dition de liens avec libmvme.a, libc.a and crt0.o" #~ msgid "Set the PPC_EMB bit in the ELF flags header" #~ msgstr "Initialiser le bit PPC_EMB bit dans l'en-tte des fanions ELF" #~ msgid "Use the WindISS simulator" #~ msgstr "Utiliser le simulateur WindISS" #~ msgid "Generate 64-bit code" #~ msgstr "Gnrer du code 64 bits" #~ msgid "Generate 32-bit code" #~ msgstr "Gnrer du code 32 bits" #~ msgid "bad value for -mcall-%s" #~ msgstr "valeur errone pour -mcall-%s" #~ msgid "bad value for -msdata=%s" #~ msgstr "valeur errone pour -msdata=%s" #~ msgid "-mrelocatable and -msdata=%s are incompatible" #~ msgstr "-mrelocatable et -msdata=%s sont incompatibles" #~ msgid "-f%s and -msdata=%s are incompatible" #~ msgstr "-f%s et -msdata=%s sont incompatibles" #~ msgid "-msdata=%s and -mcall-%s are incompatible" #~ msgstr "-msdata=%s et -mcall-%s sont incompatibles" #~ msgid "-mrelocatable and -mno-minimal-toc are incompatible" #~ msgstr "-mrelocatable et -mno-minimal-toc sont incompatibles" #~ msgid "-mrelocatable and -mcall-%s are incompatible" #~ msgstr "-mrelocatable et -mcall-%s sont incompatibles" #~ msgid "-fPIC and -mcall-%s are incompatible" #~ msgstr "-fPIC et -mcall-%s sont incompatibles" #~ msgid "-mcall-aixdesc must be big endian" #~ msgstr "-mcall-aixdesc doit tre pour un systme octets de poids fort" #~ msgid "-m%s not supported in this configuration" #~ msgstr "-m%s n'est pas support par cette configuration" #~ msgid "Unknown cpu used in -march=%s." #~ msgstr "Processeur inconnu utilis dans -march=%s" #~ msgid "Unknown cpu used in -mtune=%s." #~ msgstr "Processeur inconnu dans -mtune=%s" #~ msgid "z/Architecture mode not supported on %s." #~ msgstr "z/mode d'architecture n'est pas support sur %s" #~ msgid "64-bit ABI not supported in ESA/390 mode." #~ msgstr "ABI 64 bits n'est pas support en mode ESA/390" #~ msgid "invalid UNSPEC as operand (1)" #~ msgstr "UNSPEC invalide comme oprande (1)" #~ msgid "invalid UNSPEC as operand (2)" #~ msgstr "UNSPEC invalide comme oprande (2)" #~ msgid "UNKNOWN in s390_output_symbolic_const !?" #~ msgstr "INCONNU dans s390_output_symbolic_const !?" #~ msgid "Cannot decompose address." #~ msgstr "Ne pas dcomposer l'adresse" #~ msgid "UNKNOWN in print_operand !?" #~ msgstr "INCONNNU dans print_operand !?" #~ msgid "Total size of local variables exceeds architecture limit." #~ msgstr "Taille totale des variables locales excde la limite de l'architecture" #~ msgid "Set backchain" #~ msgstr "Fixer la chane arrire" #~ msgid "Don't set backchain (faster, but debug harder" #~ msgstr "Ne pas fixer la chane arrire (plus rapide mais plus difficle mettre au point)" #~ msgid "Use bras for executable < 64k" #~ msgstr "Utiliser bras pour les excutables < 64k" #~ msgid "Don't use bras" #~ msgstr "Ne pas utiliser bras" #~ msgid "Additional debug prints" #~ msgstr "Imprimer des informations additionnelles en mode dbug" #~ msgid "Don't print additional debug prints" #~ msgstr "Ne pas imprimer des informations additionnelles en mode dbug" #~ msgid "64 bit ABI" #~ msgstr "ABI de 64 bits" #~ msgid "31 bit ABI" #~ msgstr "ABI de 64 bits" #~ msgid "z/Architecture" #~ msgstr "z/Architecture" #~ msgid "ESA/390 architecture" #~ msgstr "architecture ESA/390" #~ msgid "mvcle use" #~ msgstr "mvcle utilis" #~ msgid "mvc&ex" #~ msgstr "mvc&ex" #~ msgid "enable tpf OS code" #~ msgstr "autoriser le code OS tpf" #~ msgid "disable tpf OS code" #~ msgstr "interdire le code OS tpf" #~ msgid "disable fused multiply/add instructions" #~ msgstr "interdire les instructions fusionns de multiplication/addition" #~ msgid "enable fused multiply/add instructions" #~ msgstr "autoriser les instructions fusionns de multiplication/addition" #~ msgid "__builtin_saveregs not supported by this subtarget" #~ msgstr "__builtin_saveregs n'est pas support par la sous-cible" #~ msgid "attribute interrupt_handler is not compatible with -m5-compact" #~ msgstr "attribut interrupt_handler n'est pas compatible avec -m5-compact" #~ msgid "`%s' attribute only applies to interrupt functions" #~ msgstr "attribut %s s'applique seulement des fonctions d'interruption" #~ msgid "`%s' attribute argument not a string constant" #~ msgstr "l'attribut %s de l'argument n'est pas une contante chane" #~ msgid "`%s' attribute argument not an integer constant" #~ msgstr "l'attribut %s de l'argument n'est pas une contante entire" #~ msgid "Profiling is not supported on this target." #~ msgstr "le profilage n'est pas support sur cette cible" #~ msgid "%s is not supported by this configuration" #~ msgstr "%s n'est pas support par cette configuration" #~ msgid "-mlong-double-64 not allowed with -m64" #~ msgstr "-mlong-double-64 n'est pas permis avec -m64" #~ msgid "-mcmodel= is not supported on 32 bit systems" #~ msgstr "-mcmodel= n'est pas support sur les systmes de 32 bits" #~ msgid "invalid %%Y operand" #~ msgstr "oprande %%Y invalide" #~ msgid "invalid %%A operand" #~ msgstr "oprande %%A invalide" #~ msgid "invalid %%B operand" #~ msgstr "Oprande %%B invalide" #~ msgid "invalid %%c operand" #~ msgstr "oprande %%c invalide" #~ msgid "invalid %%C operand" #~ msgstr "oprande %%C invalide" #~ msgid "invalid %%d operand" #~ msgstr "oprande %%d invalide" #~ msgid "invalid %%D operand" #~ msgstr "oprande %%D invalide" #~ msgid "invalid %%f operand" #~ msgstr "oprande %%f invalide" #~ msgid "invalid %%s operand" #~ msgstr "oprande %%s invalide" #~ msgid "long long constant not a valid immediate operand" #~ msgstr "constante long long n'est pas une oprande immdiate valide" #~ msgid "floating point constant not a valid immediate operand" #~ msgstr "constante en virgule flottante n'est pas une oprande immdiate valide" #~ msgid "Use 128 bit long doubles" #~ msgstr "Utiliser des longs doubles de 128 bits" #~ msgid "Generate code for big endian" #~ msgstr "Gnrer du code pour un systme octets de poids fort" #~ msgid "Generate code for little endian" #~ msgstr "Gnrer du code pour un systme octets de poids faible" #~ msgid "Use little-endian byte order for data" #~ msgstr "Utiliser l'ordre des octets de poids faible pour les donnes" #~ msgid "Assume possible double misalignment" #~ msgstr "Prsumer un possible mauvais alignement des doubles" #~ msgid "Assume all doubles are aligned" #~ msgstr "Prsumer que tous les doubles sont aligns" #~ msgid "Pass -assert pure-text to linker" #~ msgstr "Passer -assert pure-text l'diteur de liens" #~ msgid "Do not pass -assert pure-text to linker" #~ msgstr "Ne pas passer -assert pure-text l'diteur de liens" #~ msgid "Use flat register window model" #~ msgstr "Utiliser le modle de fentre de registre plat" #~ msgid "Do not use flat register window model" #~ msgstr "Ne pas utiliser le modle de fentre de registre plat" #~ msgid "Use ABI reserved registers" #~ msgstr "Utiliser les registres rservs ABI" #~ msgid "Do not use ABI reserved registers" #~ msgstr "Ne pas utiliser les registres rservs ABI" #~ msgid "Use hardware quad fp instructions" #~ msgstr "Utiliser les instructions matrielles quad FP" #~ msgid "Do not use hardware quad fp instructions" #~ msgstr "Ne pas utiliser les instructions matrielles quad FP" #~ msgid "Compile for v8plus ABI" #~ msgstr "Compiler pour ABI v8plus" #~ msgid "Do not compile for v8plus ABI" #~ msgstr "Ne pas compiler pour ABI v8plus" #~ msgid "Utilize Visual Instruction Set" #~ msgstr "Utiliser le jeu d'instructions Visual" #~ msgid "Do not utilize Visual Instruction Set" #~ msgstr "Ne pas utiliser le jeu d'instructions Visual" #~ msgid "Optimize for Cypress processors" #~ msgstr "Optimiser pour les processeurs Cypress" #~ msgid "Optimize for SPARCLite processors" #~ msgstr "Optimiser pour les processeurs SPARCLite" #~ msgid "Optimize for F930 processors" #~ msgstr "Optimiser pour les processeurs F930" #~ msgid "Optimize for F934 processors" #~ msgstr "Optimiser pour les processeurs F934" #~ msgid "Use V8 SPARC ISA" #~ msgstr "Utiliser le V8 SPARC ISA" #~ msgid "Optimize for SuperSPARC processors" #~ msgstr "Optimiser pour les processeurs SuperSPARC" #~ msgid "Pointers are 64-bit" #~ msgstr "Pointeurs sont de 64 bits" #~ msgid "Pointers are 32-bit" #~ msgstr "Pointeurs sont de 32 bits" #~ msgid "Use 32-bit ABI" #~ msgstr "Utiliser ABI de 32 bits" #~ msgid "Use 64-bit ABI" #~ msgstr "Utiliser ABI de 64 bits" #~ msgid "Use stack bias" #~ msgstr "Utiliser le biais de la pile" #~ msgid "Do not use stack bias" #~ msgstr "Ne pas utiliser le biais de la pile" #~ msgid "Use structs on stronger alignment for double-word copies" #~ msgstr "Utiliser des structs avec alignement plus fort pour les copies de mots-doubles" #~ msgid "Do not use structs on stronger alignment for double-word copies" #~ msgstr "Ne pas utiliser des structs avec alignement plus fort pour les copies de mots-doubles" #~ msgid "Optimize tail call instructions in assembler and linker" #~ msgstr "Optimiser sur mesure les instructions d'appel avec l'assembleur et l'diteur de liens" #~ msgid "Do not optimize tail call instructions in assembler or linker" #~ msgstr "Ne pas optimiser sur mesure les instructions d'appel avec l'assembleur et l'diteur de liens" #~ msgid "Use given SPARC code model" #~ msgstr "Utiliser le modle donn de code pour le SPARC" #~ msgid "Constant halfword load operand out of range." #~ msgstr "chargement de l'oprande de la constante demi-mot est hors limite" #~ msgid "Constant arithmetic operand out of range." #~ msgstr "oprande arithmtique de la constante est hors limite" #~ msgid "Local variable memory requirements exceed capacity." #~ msgstr "La mmoire requise pour les variables locales excde la capacit disponible." #~ msgid "function_profiler support" #~ msgstr "function_profiler support" #~ msgid "cannot use va_start in interrupt function" #~ msgstr "ne peut utiliser va-start dans une fonction d'interruption" #~ msgid "`B' operand is not constant" #~ msgstr "oprande B n'est pas une constante" #~ msgid "`B' operand has multiple bits set" #~ msgstr "l'oprande B a de multiples jeux de bits" #~ msgid "`o' operand is not constant" #~ msgstr "oprande o n'est pas une constante" #~ msgid "xstormy16_print_operand: unknown code" #~ msgstr "xstormy16_print_operand: code inconnu" #~ msgid "switch statement of size %lu entries too large" #~ msgstr "dclaration de switch de taille %lu entre est trop grande" #~ msgid "#pragma GHS endXXXX found without previous startXXX" #~ msgstr "#pragma GHS endXXXX repr sans tre prcd de startXXX" #~ msgid "#pragma GHS endXXX does not match previous startXXX" #~ msgstr "#pragma GHS endXXX ne concorde pas avec le prcdent startXXX" #~ msgid "cannot set interrupt attribute: no current function" #~ msgstr "ne peut initialiser l'attribut d'interruption: aucune fonction courante" #~ msgid "cannot set interrupt attribute: no such identifier" #~ msgstr "ne peut initialiser l'attribut d'interruption: pas de tel identificateur" #~ msgid "junk at end of #pragma ghs section" #~ msgstr "rebut la fin de la section #pragma ghs" #~ msgid "unrecognized section name \"%s\"" #~ msgstr "nom de section non reconnue %s " #~ msgid "malformed #pragma ghs section" #~ msgstr "sectin mal compose #pragma ghs" #~ msgid "junk at end of #pragma ghs interrupt" #~ msgstr "rebut la fin de l'interruption #pragma ghs" #~ msgid "junk at end of #pragma ghs starttda" #~ msgstr "rebut la fin de #pragma ghs starttda" #~ msgid "junk at end of #pragma ghs startsda" #~ msgstr "rebut la fin de #pragma ghs startsda" #~ msgid "junk at end of #pragma ghs startzda" #~ msgstr "rebut la fin de #pragma ghs startzda" #~ msgid "junk at end of #pragma ghs endtda" #~ msgstr "rebut la fin de #pragma ghs endtda" #~ msgid "junk at end of #pragma ghs endsda" #~ msgstr "rebut la fin de #pragma ghs endsda" #~ msgid "junk at end of #pragma ghs endzda" #~ msgstr "rebut la fin de #pragma ghs endzda" #~ msgid "%s=%s is not numeric" #~ msgstr "%s=%s n'est pas numrique" #~ msgid "%s=%s is too large" #~ msgstr "%s=%s est trop grand" #~ msgid "const_double_split got a bad insn:" #~ msgstr "const_double_split a reu un insn erron:" #~ msgid "output_move_single:" #~ msgstr "output_move_single:" #~ msgid "%Jdata area attributes cannot be specified for local variables" #~ msgstr "%Jattribut de zone de donnes ne peut tre spcifi pour des variables locales" #~ msgid "%Jdata area of '%D' conflicts with previous declaration" #~ msgstr "%Jzone de donnes de %D entre en conflit avec un dclaration prcdente" #~ msgid "bogus JR construction: %d\n" #~ msgstr "construction JR bogg: %d\n" #~ msgid "bad amount of stack space removal: %d" #~ msgstr "taille errone pour l'enlvement d'espace de la pile: %d" #~ msgid "bogus JARL construction: %d\n" #~ msgstr "construction JARL bogge: %d\n" #~ msgid "Bogus DISPOSE construction: %d\n" #~ msgstr "construction DISPOSE bogg: %d\n" #~ msgid "Too much stack space to dispose of: %d" #~ msgstr "Trop d'espace pour l'empilage pour la disposition de: %d" #~ msgid "Bogus PREPEARE construction: %d\n" #~ msgstr "construction PREPEARE bogge: %d\n" #~ msgid "Too much stack space to prepare: %d" #~ msgstr "Trop d'espace pour l'empilage pour la prparation: %d" #~ msgid "Support Green Hills ABI" #~ msgstr "Supporter l'ABI Green Hills" #~ msgid "Prohibit PC relative function calls" #~ msgstr "Interdire les appels relatifs de fonctions par le PC" #~ msgid "Reuse r30 on a per function basis" #~ msgstr "R-utiliser R30 sur une base par fonction" #~ msgid "Use stubs for function prologues" #~ msgstr "Utiliser des stubs pour les prologues de fonction" #~ msgid "Same as: -mep -mprolog-function" #~ msgstr "Identique : -mep -mprolog-function" #~ msgid "Enable backend debugging" #~ msgstr "Autoriser la mise au point par la fin" #~ msgid "Compile for the v850 processor" #~ msgstr "Compiler pour le processeur v850" #~ msgid "Compile for v850e1 processor" #~ msgstr "Compiler pour le processeur v850e1" #~ msgid "Compile for v850e processor" #~ msgstr "Compiler pour le processeur v850e" #~ msgid "Enable the use of the short load instructions" #~ msgstr "Activer l'utilisation d'instructions courtes de chargement" #~ msgid "Do not use the callt instruction" #~ msgstr "Ne pas utiliser l'instruction callt" #~ msgid "Do not use registers r2 and r5" #~ msgstr "Ne pas utiliser les registres r2 et r5" #~ msgid "Enforce strict alignment" #~ msgstr "Forcer l'alignement stricte" #~ msgid "Use 4 byte entries in switch tables" #~ msgstr "Utiliser des entres de 4 octets dans les tables de switch" #~ msgid "Set the max size of data eligible for the TDA area" #~ msgstr "Initialiser la taille maximale des donnes ligibles pour la zone TDA" #~ msgid "Set the max size of data eligible for the SDA area" #~ msgstr "Initialiser la taille maximale des donnes ligibles pour la zone SDA" #~ msgid "Set the max size of data eligible for the ZDA area" #~ msgstr "Initialiser la taille maximale des donnes ligibles pour la zone ZDA" #~ msgid "boolean registers required for the floating-point option" #~ msgstr "registres boolens requis pour l'option de virgule flottante" #~ msgid "-f%s is not supported with CONST16 instructions" #~ msgstr "-f%s n'est pas support avec les instructions CONST16" #~ msgid "PIC is required but not supported with CONST16 instructions" #~ msgstr "PIC est requis mais non support avec des instructions CONST16" #~ msgid "invalid %%D value" #~ msgstr "valeur %%D invalide" #~ msgid "invalid mask" #~ msgstr "masque invalide" #~ msgid "invalid %%x value" #~ msgstr "valeur %%x invalide" #~ msgid "invalid %%d value" #~ msgstr "valeur %%d invalide" #~ msgid "invalid %%t/%%b value" #~ msgstr "valeur %%t/%%b invalide" #~ msgid "invalid address" #~ msgstr "adresse invalide" #~ msgid "no register in address" #~ msgstr "pas de registre dans l'adresse" #~ msgid "address offset not a constant" #~ msgstr "dcalage d'adresse n'est pas une constante" #~ msgid "only uninitialized variables can be placed in a .bss section" #~ msgstr "seules les variables non initialises peuvent tre places dans une section .bss" #~ msgid "Use CONST16 instruction to load constants" #~ msgstr "Utiliser les instructions CONST16 pour charger les constantes" #~ msgid "Use PC-relative L32R instruction to load constants" #~ msgstr "Utiliser les instructions L32R relatives au PC pour charger les constantes" #~ msgid "Disable fused multiply/add and multiply/subtract FP instructions" #~ msgstr "Interdire les instructions fusionns FP de multiplication/addition et de multiplication/soustraction" #~ msgid "Enable fused multiply/add and multiply/subtract FP instructions" #~ msgstr "Permettre les instructions fusionns FP de multiplication/addition et de multiplication/soustraction" #~ msgid "Intersperse literal pools with code in the text section" #~ msgstr "Entrecouper les lots de litraux avec le code dans la section texte" #~ msgid "Put literal pools in a separate literal section" #~ msgstr "Placer les lots de litraux dans des sections spares de litraux" #~ msgid "Automatically align branch targets to reduce branch penalties" #~ msgstr "Aligner automatiquement les branchements cibles pour rduire les pnalits de branchement" #~ msgid "Do not automatically align branch targets" #~ msgstr "Ne pas aligner automatiquement les branchements cibles pour rduire les pnalits de branchement" #~ msgid "Use indirect CALLXn instructions for large programs" #~ msgstr "Utiliser les instructions indirectes CALLXn pour les grands programmes" #~ msgid "Use direct CALLn instructions for fast calls" #~ msgstr "Utiliser les instructions directes CALLn pour des appels rapides" #~ msgid "missing argument to \"-%s\"" #~ msgstr "argument manquant -%s " #~ msgid "`-gnat' misspelled as `-gant'" #~ msgstr " -gnat mal pell comme -gant " #~ msgid "unable to call pointer to member function here" #~ msgstr "incapable de faire l'appel avec le pointeur vers la fonction membre ici" #~ msgid "%s %D(%T, %T, %T) " #~ msgstr "%s %D(%T, %T, %T) " #~ msgid "%s %D(%T, %T) " #~ msgstr "%s %D(%T, %T) " #~ msgid "%s %D(%T) " #~ msgstr "%s %D(%T) " #~ msgid "%s %T " #~ msgstr "%s %T " #~ msgid "%J%s %+#D " #~ msgstr "%J%s %+#D " #~ msgid "%J%s %+#D" #~ msgstr "%J%s %+#D" #~ msgid "candidates are:" #~ msgstr "candidats sont:" #~ msgid "conversion from `%T' to `%T' is ambiguous" #~ msgstr "conversion de %T vers %T est ambigu" #~ msgid "no matching function for call to `%D(%A)'" #~ msgstr "pas de fonction concordante pour l'appel de %D(%A) " #~ msgid "call of overloaded `%D(%A)' is ambiguous" #~ msgstr "appel du surcharg %D(%A) est ambigu" #~ msgid "pointer-to-member function %E cannot be called without an object; consider using .* or ->*" #~ msgstr "pointeur vers fonction membre %E ne peut tre appel sans un objet; utilisez .* ou ->*" #~ msgid "no match for call to `(%T) (%A)'" #~ msgstr "pas de concordance pour l'appel de (%T) (%A) " #~ msgid "call of `(%T) (%A)' is ambiguous" #~ msgstr "appel de (%T) (%A) est ambigu" #~ msgid "%s for ternary 'operator?:' in '%E ? %E : %E'" #~ msgstr "%s pour operator?: ternaire dans %E ? %E : %E " #~ msgid "%s for 'operator%s' in '%E%s'" #~ msgstr "%s pour operator%s dans %E%s " #~ msgid "%s for 'operator[]' in '%E[%E]'" #~ msgstr "%s pour operator[] dans %E[%E] " #~ msgid "%s for '%s' in '%s %E'" #~ msgstr "%s pour %s dans %s %E " #~ msgid "%s for 'operator%s' in '%E %s %E'" #~ msgstr "%s pour operator%s dans %E %s %E " #~ msgid "%s for 'operator%s' in '%s%E'" #~ msgstr "%s pour operator%s dans %s%E " #~ msgid "ISO C++ forbids omitting the middle term of a ?: expression" #~ msgstr "ISO C++ interdit l'omission du terme milieu de l'expression ?:" #~ msgid "`%E' has type `void' and is not a throw-expression" #~ msgstr " %E a le type void et n'est pas une expression de retour de type throw" #~ msgid "operands to ?: have different types" #~ msgstr "oprande vers ?: a diffrents types" #~ msgid "enumeral mismatch in conditional expression: `%T' vs `%T'" #~ msgstr "non concordance de type numr dans l'expression conditionnelle: %T vs %T " #~ msgid "enumeral and non-enumeral type in conditional expression" #~ msgstr "type numr et non numr dans l'expression conditionnelle" #~ msgid "no `%D(int)' declared for postfix `%s', trying prefix operator instead" #~ msgstr "pas %D(int) dclar pour le postfixe %s , essaie avec l'oprateur prfixe la place" #~ msgid "using synthesized `%#D' for copy assignment" #~ msgstr "utilisation du synthtis %#D pour l'affectaion par copie" #~ msgid " where cfront would use `%#D'" #~ msgstr " o cfront utiliserait %#D " #~ msgid "comparison between `%#T' and `%#T'" #~ msgstr "comparaison entre %#T et %#T " #~ msgid "no suitable `operator %s' for `%T'" #~ msgstr "pas operator %s adapt pour %T " #~ msgid "`%+#D' is private" #~ msgstr " %+#D est priv" #~ msgid "`%+#D' is protected" #~ msgstr " %+#D est protg" #~ msgid "`%+#D' is inaccessible" #~ msgstr " %+#D et inaccessible" #~ msgid "within this context" #~ msgstr " l'intrieur du contexte" #~ msgid "invalid conversion from `%T' to `%T'" #~ msgstr "conversion invalide de %T vers %T " #~ msgid " initializing argument %P of `%D'" #~ msgstr " initialisation de l'argument %P de %D " #~ msgid "cannot bind bitfield `%E' to `%T'" #~ msgstr "ne peut lier le champ de bits %E avec %T " #~ msgid "cannot bind packed field `%E' to `%T'" #~ msgstr "ne peut lier le champs empaquet %E avec %T " #~ msgid "cannot bind rvalue `%E' to `%T'" #~ msgstr "ne peut lier la rvalue %E avec %T " #~ msgid "cannot pass objects of non-POD type `%#T' through `...'; call will abort at runtime" #~ msgstr "ne peut recevoir d'objets de type non POD %#T through ... ; l'appel chouera lors de l'xecution" #~ msgid "cannot receive objects of non-POD type `%#T' through `...'; call will abort at runtime" #~ msgstr "ne peut recevoir d'objets de type non POD %#T through ... ; l'appel chouera lors de l'xecution" #~ msgid "the default argument for parameter %d of `%D' has not yet been parsed" #~ msgstr "argument par dfaut pour le paramtre %d de %D n'a pas encore t analys" #~ msgid "passing `%T' as `this' argument of `%#D' discards qualifiers" #~ msgstr "passant %T comme cet argument de %#D carte les qualificateurs" #~ msgid "`%T' is not an accessible base of `%T'" #~ msgstr " %T est une base accessible de %T " #~ msgid "could not find class$ field in java interface type `%T'" #~ msgstr "ne peut reprer le champ classe$ dans le type d'interface JAVA %T " #~ msgid "call to non-function `%D'" #~ msgstr "appel une non fonction %D " #~ msgid "request for member `%D' in `%E', which is of non-aggregate type `%T'" #~ msgstr "requte du membre %D dans %E , lequel n'est pas de type aggrgat %T " #~ msgid "no matching function for call to `%T::%s(%A)%#V'" #~ msgstr "pas de fonction concordante pour l'appel %T::%s(%A)%#V " #~ msgid "call of overloaded `%s(%A)' is ambiguous" #~ msgstr "appel du surcharg %s(%A) est ambigu" #~ msgid "cannot call member function `%D' without object" #~ msgstr "ne peut appeler la fonction membre %D sans objet" #~ msgid "passing `%T' chooses `%T' over `%T'" #~ msgstr "passant %T choisit %T au lieu de %T " #~ msgid " in call to `%D'" #~ msgstr " dans l'appel de %D " #~ msgid "choosing `%D' over `%D'" #~ msgstr "choix de %D la place de %D " #~ msgid " for conversion from `%T' to `%T'" #~ msgstr " pour la conversion de %T vers %T " #~ msgid " because conversion sequence for the argument is better" #~ msgstr " parce que la squence de conversion pour l'argument est meilleure" #~ msgid "ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:" #~ msgstr "ISO C++ indique qu'ils sont ambigus mme travers la plus mauvaise conversion pour le premier que la plus mauvaise pour la seconde:" #~ msgid "candidate 1:" #~ msgstr "candidat 1:" #~ msgid "candidate 2:" #~ msgstr "candidat 2:" #~ msgid "could not convert `%E' to `%T'" #~ msgstr "ne peut convertir %E vers %T " #~ msgid "invalid initialization of non-const reference of type '%T' from a temporary of type '%T'" #~ msgstr "initialisation invalide pour une rfrence un non constante de type %T partir d'un type temporaire de type %T " #~ msgid "invalid initialization of reference of type '%T' from expression of type '%T'" #~ msgstr "initialisation invalide de rfrence d'un type %T partir d'une expression de type %T " #~ msgid "cannot convert from base `%T' to derived type `%T' via virtual base `%T'" #~ msgstr "ne peut convertir de la base %T un type driv %T via la base virtuel %T " #~ msgid "Java class '%T' cannot have an implicit non-trivial destructor" #~ msgstr "classe Java %T ne peut avoir un destructeur implicite non trivial" #~ msgid "Java class '%T' cannot have a destructor" #~ msgstr "classe Java %T ne peut avoir un destructeur" #~ msgid "`%#D' and `%#D' cannot be overloaded" #~ msgstr " %#D et %#D ne peut tre surcharg" #~ msgid "conflicting access specifications for method `%D', ignored" #~ msgstr "spcifications d'accs conflictuelles pour la mthode %D , ignor" #~ msgid "conflicting access specifications for field `%s', ignored" #~ msgstr "spcifications d'accs conflictuelles pour le champ %s , ignor" #~ msgid "`%D' names constructor" #~ msgstr " %D nomme le constructeur" #~ msgid "`%D' invalid in `%T'" #~ msgstr " %D invalide dans %T " #~ msgid "no members matching `%D' in `%#T'" #~ msgstr "aucun membre concordant %D dans %#T " #~ msgid "`%D' invalid in `%#T'" #~ msgstr " %D invalide dans %#T " #~ msgid " because of local method `%#D' with same name" #~ msgstr " parce que la mthode locale %#D a le mme nom" #~ msgid " because of local member `%#D' with same name" #~ msgstr " parce que le membre local %#D a le mme nom" #~ msgid "base class `%#T' has a non-virtual destructor" #~ msgstr "classe de base %#T a un destructeur non virtuel" #~ msgid "base `%T' with only non-default constructor in class without a constructor" #~ msgstr "base %T avec seulement le constructeur non par dfaut dans la classe sans un constructeur" #~ msgid "all member functions in class `%T' are private" #~ msgstr "toutes les fonctions membres de la classe %T sont privs" #~ msgid "`%#T' only defines a private destructor and has no friends" #~ msgstr " %#T dfinit seulement les constructeurs privs et n'a pas d'amis" #~ msgid "`%#T' only defines private constructors and has no friends" #~ msgstr " %#T dfinit seulement les constructeurs privs et n'a pas d'amis" #~ msgid "no unique final overrider for `%D' in `%T'" #~ msgstr "pas d'craseur unique final pour %D dans %T " #~ msgid "`%D' was hidden" #~ msgstr " %D tait cach" #~ msgid " by `%D'" #~ msgstr " par %D " #~ msgid "`%#D' invalid; an anonymous union can only have non-static data members" #~ msgstr " %#D invalide; une union anonyme peut seulement avoir des donnes non statiques de membres" #~ msgid "private member `%#D' in anonymous union" #~ msgstr "membre priv %#D dans une union anonyme" #~ msgid "protected member `%#D' in anonymous union" #~ msgstr "membre protg %#D dans une union anonyme" #~ msgid "vtable layout for class `%T' may not be ABI-compliant and may change in a future version of GCC due to implicit virtual destructor" #~ msgstr "disposition vtable pour la classe %T peut ne pas tre compatible avec l'ABI et peut tre modifi dans une version future deGCC en raison d'un destructeur virtuel implicite" #~ msgid "bit-field `%#D' with non-integral type" #~ msgstr "largeur du champ de bits %#D n'est pas une constante entire" #~ msgid "bit-field `%D' width not an integer constant" #~ msgstr "largeur du champ de bits %D n'est pas une constante entire" #~ msgid "negative width in bit-field `%D'" #~ msgstr "largeur ngative du champ de bits %D " #~ msgid "zero width for bit-field `%D'" #~ msgstr "largeur zro pour le champ de bits %D " #~ msgid "width of `%D' exceeds its type" #~ msgstr "largeur de %D excde son type" #~ msgid "`%D' is too small to hold all values of `%#T'" #~ msgstr " %D est trop petit pour contenir toutes les valeurs de %#T " #~ msgid "member `%#D' with constructor not allowed in union" #~ msgstr "membre %#D avec consructeur n'est pas permis dans l'union" #~ msgid "member `%#D' with destructor not allowed in union" #~ msgstr "membre %#D avec destructeur n'est pas permis dans l'union" #~ msgid "member `%#D' with copy assignment operator not allowed in union" #~ msgstr "membre %#D avec oprateur d,affectation par copie n'st pas permis dans l'union" #~ msgid "multiple fields in union `%T' initialized" #~ msgstr "champs multiples dans l'union %T initialiss" #~ msgid "ignoring packed attribute on unpacked non-POD field `%#D'" #~ msgstr "attribut empaquet ignor sur un champ non POD non paquet %#D " #~ msgid "`%D' may not be static because it is a member of a union" #~ msgstr " %D peut ne pas tre statique parce qu'il est membre de l'uniont" #~ msgid "`%D' may not have reference type `%T' because it is a member of a union" #~ msgstr " %D peut ne pas avoir de type rfrenc %T parce qu'il est membre de l'union" #~ msgid "field `%D' in local class cannot be static" #~ msgstr "champ %D dans une classe locale ne peut tre statique" #~ msgid "field `%D' invalidly declared function type" #~ msgstr "champ %D incorrectement valid comme un type de fonction" #~ msgid "field `%D' invalidly declared method type" #~ msgstr "champ %D incorrectement valid comme un type de mthode" #~ msgid "non-static reference `%#D' in class without a constructor" #~ msgstr "rfrence non statique %#D dans la classe sans un constructeur" #~ msgid "non-static const member `%#D' in class without a constructor" #~ msgstr "constante non statique de membre %#D dans la classe sans un constructeur" #~ msgid "field `%#D' with same name as class" #~ msgstr "champ %#D avec le mme nom qu'une classe" #~ msgid "`%#T' has pointer data members" #~ msgstr " %#T a un pointeur vers un membre de donnes" #~ msgid " but does not override `%T(const %T&)'" #~ msgstr " mais n'crase pas %T(const %T&) " #~ msgid " or `operator=(const %T&)'" #~ msgstr " ou operator=(const %T&) " #~ msgid " but does not override `operator=(const %T&)'" #~ msgstr " mais n'crase pas operator=(const %T&) " #~ msgid "offset of empty base `%T' may not be ABI-compliant and maychange in a future version of GCC" #~ msgstr "dcalage d'une base vide %T peut ne pas tre compatible avec l'ABI et peut tre modifi dans une version future de GCC" #~ msgid "class `%T' will be considered nearly empty in a future version of GCC" #~ msgstr "classe %T devra tre considre pratiquement vide dans une version future de GCC" #~ msgid "initializer specified for non-virtual method `%D'" #~ msgstr "initialisation spcifie pour une mthode non virtuelle %D " #~ msgid "offset of virtual base `%T' is not ABI-compliant and may change in a future version of GCC" #~ msgstr "dcalage relatif d'une base virtuelle %T n'est pas compatible avec l'ABI et peut tre modifi dans une version future de GCC" #~ msgid "direct base `%T' inaccessible in `%T' due to ambiguity" #~ msgstr "base directe %T inaccessible dans %T en raison de l'ambiguit" #~ msgid "virtual base `%T' inaccessible in `%T' due to ambiguity" #~ msgstr "base virtuelle %T inaccessible dans %T en raison de l'ambiguit" #~ msgid "size assigned to `%T' may not be ABI-compliant and may change in a future version of GCC" #~ msgstr "taille assigne %T peut ne pas tre compatible avec l'ABI et peut tre modifi dans une version future de GCC" #~ msgid "the offset of `%D' may not be ABI-compliant and may change in a future version of GCC" #~ msgstr "le dcalage relatif de %D peut ne pas tre compatible avec l'ABI et peut tre modifi dans une version future de GCC" #~ msgid "offset of `%D' is not ABI-compliant and may change in a future version of GCC" #~ msgstr "le dcalage relatif de %D peut ne pas tre compatible avec l'ABI et peut tre modifi dans une version future de GCC" #~ msgid "`%D' contains empty classes which may cause base classes to be placed at different locations in a future version of GCC" #~ msgstr " %D contient des classes vides lesquelles peuvent placer les classes de base une localisation diffrente dans une version future de GCC" #~ msgid "layout of classes derived from empty class `%T' may change in a future version of GCC" #~ msgstr "disposition des classes est drivs de la classe vide %T peut tre modifie dans une version future de GCC" #~ msgid "redefinition of `%#T'" #~ msgstr "redfinition de %#T " #~ msgid "`%#T' has virtual functions but non-virtual destructor" #~ msgstr " %#T a des fonctions virtuelles mais un destructeur non virtuel" #~ msgid "trying to finish struct, but kicked out due to previous parse errors" #~ msgstr "tentative de compltion du struct, mais a t stopp en raison d'erreurs prcdentes d'analyses syntaxiques" #~ msgid "language string `\"%s\"' not recognized" #~ msgstr "chane du langage \"%s\" n'est pas reconnue" #~ msgid "cannot resolve overloaded function `%D' based on conversion to type `%T'" #~ msgstr "ne peut rsoudre la fonction surcharg %D bas sur la conversion vers le type %T " #~ msgid "no matches converting function `%D' to type `%#T'" #~ msgstr "pas de concordance de conversion de fonction %D vers le type %#T " #~ msgid "converting overloaded function `%D' to type `%#T' is ambiguous" #~ msgstr "conversion d'une fonction surcharge %D vers le type %#T est ambigu" #~ msgid "assuming pointer to member `%D'" #~ msgstr "pointeur assum vers le membre %D " #~ msgid "(a pointer to member can only be formed with `&%E')" #~ msgstr "(un pointeur vers un membre peut seulement tre form avec &%E)" #~ msgid "not enough type information" #~ msgstr "pas assez d'information sur le type" #~ msgid "argument of type `%T' does not match `%T'" #~ msgstr "argument de type %T ne concorde pas avec %T " #~ msgid "invalid operation on uninstantiated type" #~ msgstr "opration invalide sur un type non instanci" #~ msgid "declaration of `%#D'" #~ msgstr "dclaration de %#D " #~ msgid "changes meaning of `%D' from `%+#D'" #~ msgstr "changements signifiant de %D partir de %+#D " #~ msgid "inter-module optimisations not implemented yet" #~ msgstr "les optimisations inter-module n'est pas implant encore" #~ msgid "can't convert from incomplete type `%T' to `%T'" #~ msgstr "ne peut convertir d'un type incomplet %T vers %T " #~ msgid "conversion of `%E' from `%T' to `%T' is ambiguous" #~ msgstr "conversion de %E partir de %T vers %T est ambigu" #~ msgid "converting from `%T' to `%T'" #~ msgstr "conversion de %T vers %T " #~ msgid "cannot convert `%E' from type `%T' to type `%T'" #~ msgstr "ne peut convertir %E du type %T vers le type %T " #~ msgid "pointer to member cast from `%T' to `%T' is via virtual base" #~ msgstr "pointeur vers un membre transtyp de %T %T est fait via une base virtuelle" #~ msgid "invalid conversion from '%T' to '%T'" #~ msgstr "conversion invalide de %T vers %T " #~ msgid "conversion from `%T' to `%T' discards qualifiers" #~ msgstr "conversion de %T %T carte les qualificateurs" #~ msgid "casting `%T' to `%T' does not dereference pointer" #~ msgstr "transtypage de %T vers %T ne fait pas de d-rfrence de pointeur" #~ msgid "cannot convert type `%T' to type `%T'" #~ msgstr "ne peut convertir type %T vers le type %T " #~ msgid "conversion from `%#T' to `%#T'" #~ msgstr "conversion de %#T vers %#T " #~ msgid "`%#T' used where a `%T' was expected" #~ msgstr " %#T utilis o %T tait attendu" #~ msgid "`%#T' used where a floating point value was expected" #~ msgstr " %#T utilis o un nombre flottant tait attendu" #~ msgid "conversion from `%T' to non-scalar type `%T' requested" #~ msgstr "conversion de %T vers un type non scalaire %T demande" #~ msgid "object of incomplete type `%T' will not be accessed in %s" #~ msgstr "objet de type incomplet %T ne sera pas accessible dans %s" #~ msgid "object of type `%T' will not be accessed in %s" #~ msgstr "objet de type %T ne sera pas acccessible dans %s" #~ msgid "object `%E' of incomplete type `%T' will not be accessed in %s" #~ msgstr "objet %E d'un type incomplet %T ne sera pas accessible dans %s" #~ msgid "%s cannot resolve address of overloaded function" #~ msgstr "%s ne peut rsoudre l'adresse la fonction surcharge" #~ msgid "%s is a reference, not call, to function `%E'" #~ msgstr "%s est un rfrence, pas un appel, la fonction %E " #~ msgid "%s has no effect" #~ msgstr "%s n'a pas d'effet" #~ msgid "converting NULL to non-pointer type" #~ msgstr "conversion d'un NULL vers un type non pointeur" #~ msgid "ambiguous default type conversion from `%T'" #~ msgstr "conversion de type par dfaut ambigu partir de %T " #~ msgid " candidate conversions include `%D' and `%D'" #~ msgstr " conversions de candidat inclut %D et %D " #~ msgid "label `%D' used but not defined" #~ msgstr "tiquette %D utilise mais non dfinie" #~ msgid "label `%D' defined but not used" #~ msgstr "tiquette %D dfinie mais non utilise" #~ msgid "previous declaration of `%D'" #~ msgstr "dclaration prcdente de %D " #~ msgid "%Jfunction '%D' redeclared as inline" #~ msgstr "%Jfonction %D redclare comme tant enligne" #~ msgid "%Jprevious declaration of '%D' with attribute noinline" #~ msgstr "%Jdclaration prcdente de %D avec l'attribut non enligne" #~ msgid "%Jfunction '%D' redeclared with attribute noinline" #~ msgstr "%Jfonction %D redclare avec l'attribut non enligne" #~ msgid "%Jprevious declaration of '%D' was inline" #~ msgstr "%Jdclaration prcdente de %D tait enligne" #~ msgid "shadowing %s function `%#D'" #~ msgstr "%s masque la fonction %#D " #~ msgid "library function `%#D' redeclared as non-function `%#D'" #~ msgstr "fonction %#D de la bibliothque redclare comme n'tant pas une fonction %#D " #~ msgid "conflicts with built-in declaration `%#D'" #~ msgstr "conflits avec la dclaration interne de %#D " #~ msgid "new declaration `%#D'" #~ msgstr "nouvelle dclaration de %#D " #~ msgid "ambiguates built-in declaration `%#D'" #~ msgstr "ambiguits de la dclaration interne de %#D " #~ msgid "`%#D' redeclared as different kind of symbol" #~ msgstr " %#D redclar comme une sorte diffrente de symbole" #~ msgid "previous declaration of `%#D'" #~ msgstr "dclaration prcdente de %#D " #~ msgid "declaration of template `%#D'" #~ msgstr "dclaration du canevas %#D " #~ msgid "conflicts with previous declaration `%#D'" #~ msgstr "conflits avec la dclaration prcdente de %#D " #~ msgid "ambiguates old declaration `%#D'" #~ msgstr "ambiguits d'une vieille dclaration de %#D " #~ msgid "declaration of C function `%#D' conflicts with" #~ msgstr "dclaration de la fonction C %#D en conflit avec" #~ msgid "previous declaration `%#D' here" #~ msgstr "dclaration prcdente de %#D ici" #~ msgid "conflicting declaration '%#D'" #~ msgstr "dclaration conflictuelle %#D " #~ msgid "'%D' has a previous declaration as `%#D'" #~ msgstr " %D a une dclaration prcdente tel que %#D " #~ msgid "`%#D' previously defined here" #~ msgstr " %#D prcdemment dfini ici" #~ msgid "`%#D' previously declared here" #~ msgstr " %#D prcdemment dclar ici" #~ msgid "prototype for `%#D'" #~ msgstr "prototype de %#D " #~ msgid "%Jfollows non-prototype definition here" #~ msgstr "%Jsuit la dfinition d'un non prototype ici" #~ msgid "previous declaration of `%#D' with %L linkage" #~ msgstr "dclaration prcdente de %#D avec le lien %L" #~ msgid "conflicts with new declaration with %L linkage" #~ msgstr "conflits avec la nouvelle dclaration avec le lien %L" #~ msgid "default argument given for parameter %d of `%#D'" #~ msgstr "argument par dfaut donn pour le paramtre %d de %#D " #~ msgid "after previous specification in `%#D'" #~ msgstr "aprs la dclaration prcdente dans %#D " #~ msgid "`%#D' was used before it was declared inline" #~ msgstr " %#D a t utilis avant qu'il ne soit dclar enligne" #~ msgid "%Jprevious non-inline declaration here" #~ msgstr "%Jdclaration prcdente non enligne ici" #~ msgid "redundant redeclaration of `%D' in same scope" #~ msgstr "dclaration redondante de %D dans la mme tendue" #~ msgid "declaration of `%F' throws different exceptions" #~ msgstr "dclaration de %F amne diffrentes exceptions" #~ msgid "than previous declaration `%F'" #~ msgstr "qu'une prcdente dclaratio %F " #~ msgid "explicit specialization of %D after first use" #~ msgstr "spcialisation explicite de %D aprs la premire utilisation" #~ msgid "%J'%D': visibility attribute ignored because it" #~ msgstr "%J %D : attribut de visibilit ignor en cause de lui" #~ msgid "%Jconflicts with previous declaration here" #~ msgstr "%Jentre en conflit avec la dclaration prcdente ici" #~ msgid "implicit declaration of function `%#D'" #~ msgstr "dclaration implicite de la fonction %#D " #~ msgid "label `%s' referenced outside of any function" #~ msgstr "tiquette %s rfrence l'extrieur de n'importe quelle fonction" #~ msgid "jump to label `%D'" #~ msgstr "saut l'tiquette %D " #~ msgid "jump to case label" #~ msgstr "saut l'tiquette du case " #~ msgid "%H from here" #~ msgstr "%H partir d'ici" #~ msgid " crosses initialization of `%#D'" #~ msgstr " initialisation croise pour %#D " #~ msgid " enters scope of non-POD `%#D'" #~ msgstr " entre dans la port d'un non POD %#D " #~ msgid " enters try block" #~ msgstr " entre dans le bloc d'essais" #~ msgid " enters catch block" #~ msgstr " entre dans le bloc d'interceptions" #~ msgid " from here" #~ msgstr " partir d'ici" #~ msgid "%J enters catch block" #~ msgstr "%J entre dans le bloc d'interception" #~ msgid " skips initialization of `%#D'" #~ msgstr " saut d'initialisation pour %#D " #~ msgid "label named wchar_t" #~ msgstr "tiquette nomme wchar_t" #~ msgid "duplicate label `%D'" #~ msgstr "tiquette %D apparat en double" #~ msgid "`%D' used without template parameters" #~ msgstr " %D utilis sans canevas de paramtres" #~ msgid "no class template named `%#T' in `%#T'" #~ msgstr "pas de canevas de classe nomm %#T in %#T " #~ msgid "no type named `%#T' in `%#T'" #~ msgstr "pas de type nomm dans %#T dans %#T " #~ msgid "%Jan anonymous union cannot have function members" #~ msgstr "%Jun UNION anonyme ne peut avoir de fonctions membres" #~ msgid "member %#D' with constructor not allowed in anonymous aggregate" #~ msgstr "membre %#D avec constructeur n'est pas permis dans un aggrgat anonyme" #~ msgid "member %#D' with destructor not allowed in anonymous aggregate" #~ msgstr "membre %#D avec destructeur n'est pas permis dans un aggrgat anonyme" #~ msgid "member %#D' with copy assignment operator not allowed in anonymous aggregate" #~ msgstr "membre %#D avec oprateur d'affectation par copie n'est pas permis dans un aggrgat anonyme" #~ msgid "redeclaration of C++ built-in type `%T'" #~ msgstr "redclaration du type interne C++ %T " #~ msgid "multiple types in one declaration" #~ msgstr "types multiples dans une dclaration" #~ msgid "missing type-name in typedef-declaration" #~ msgstr "nom de type manquant dans la dclaration typedef" #~ msgid "ISO C++ prohibits anonymous structs" #~ msgstr "ISO C++ interdit les structures anonymes" #~ msgid "`%D' can only be specified for functions" #~ msgstr " %D ne peut seulement tre spcifier pour les fonctions" #~ msgid "`%D' can only be specified inside a class" #~ msgstr " %D peut seulement tre spcifi l'intrieur d'une classe" #~ msgid "`%D' can only be specified for constructors" #~ msgstr " %D ne peut seulement tre spcifi pour les constructeurs" #~ msgid "`%D' can only be specified for objects and functions" #~ msgstr " %D ne peut seulement tre spcifi pour les objets et les fonctions" #~ msgid "typedef `%D' is initialized (use __typeof__ instead)" #~ msgstr "typedef %D est initialis (use __typeof__ instead)" #~ msgid "function `%#D' is initialized like a variable" #~ msgstr "fonction %#D est initialise comme une variable" #~ msgid "declaration of `%#D' has `extern' and is initialized" #~ msgstr "dclaration de %#D est externe et initialis" #~ msgid "`%#D' is not a static member of `%#T'" #~ msgstr " %#D n'est pas un membre statique de %#T " #~ msgid "ISO C++ does not permit `%T::%D' to be defined as `%T::%D'" #~ msgstr "ISO C++ ne permet pas que %T::%D soit dfini comme %T::%D " #~ msgid "duplicate initialization of %D" #~ msgstr "initialisation en double de %D" #~ msgid "declaration of `%#D' outside of class is not definition" #~ msgstr "dclaraion de %#D en dehors de la classe n'est pas une dfinition" #~ msgid "variable `%#D' has initializer but incomplete type" #~ msgstr "la variable %#D est initialise, mais a un type incomplet" #~ msgid "elements of array `%#D' have incomplete type" #~ msgstr "lments du tableau %#D ont un type incomplet" #~ msgid "aggregate `%#D' has incomplete type and cannot be defined" #~ msgstr "aggrgat %#D a un type incomplet et ne peut tre dfini" #~ msgid "`%D' declared as reference but not initialized" #~ msgstr " %D dclar comme rfrence mais n'est pas initialis" #~ msgid "ISO C++ forbids use of initializer list to initialize reference `%D'" #~ msgstr "ISO C++ interdit l'usage de liste d'initialiseur pour initialiser la rfrence %D " #~ msgid "cannot initialize `%T' from `%T'" #~ msgstr "ne peut initialiser %T partir de %T " #~ msgid "initializer fails to determine size of `%D'" #~ msgstr "l'initialisation n'a pu dterminer la taille de %D " #~ msgid "array size missing in `%D'" #~ msgstr "taille de tableau manquante dans %D " #~ msgid "zero-size array `%D'" #~ msgstr "tableau %D de taille zro" #~ msgid "storage size of `%D' isn't known" #~ msgstr "taille de stockage de %D n'est pas connue" #~ msgid "storage size of `%D' isn't constant" #~ msgstr "taille de stockage de %D n'est pas une constante" #~ msgid "sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)" #~ msgstr "dsol: smantique de fonction enligne de donnes statiques %#D est errone (vous obtiendrez de multiples copies)" #~ msgid "%J you can work around this by removing the initializer" #~ msgstr "%J vous pouvez contourner cela en enlevant l'initialiseur" #~ msgid "uninitialized const `%D'" #~ msgstr "constante %D non initialise" #~ msgid "brace-enclosed initializer used to initialize `%T'" #~ msgstr "initialiseur utilis entre accolades pour initialiser %T " #~ msgid "initializer for `%T' must be brace-enclosed" #~ msgstr "initialiseur de %T doit tre entre accolades" #~ msgid "ISO C++ does not allow designated initializers" #~ msgstr "ISO C++ ne permet de dsigner les initialiseurs" #~ msgid "`%T' has no non-static data member named `%D'" #~ msgstr " %T n'a pas de membre de donnes non statique nomm %D " #~ msgid "name `%D' used in a GNU-style designated initializer for an array" #~ msgstr "nom %D utilis dans un style GNU de l'initialisateur dsign pour un tableau" #~ msgid "too many initializers for `%T'" #~ msgstr "trop d'initialiseurs pour %T " #~ msgid "variable-sized object `%D' may not be initialized" #~ msgstr "objet de taille variable %D peut ne pas tre initialis" #~ msgid "`%D' has incomplete type" #~ msgstr " %D a un type incomplet" #~ msgid "`%D' must be initialized by constructor, not by `{...}'" #~ msgstr " %D doit tre initialis par un constructeur, non pas par {...} " #~ msgid "structure `%D' with uninitialized const members" #~ msgstr "structure %D avec constantes non initialises de membres" #~ msgid "structure `%D' with uninitialized reference members" #~ msgstr "structure %D avec rfrences non initialises de membres" #~ msgid "assignment (not initialization) in declaration" #~ msgstr "affectation (non pas l'initialisation) dans la dclaration" #~ msgid "cannot initialize `%D' to namespace `%D'" #~ msgstr "ne peut initialiser %D l'espace de noms %D " #~ msgid "shadowing previous type declaration of `%#D'" #~ msgstr "masque la dclaration prcdente de %#D " #~ msgid "`%D' cannot be thread-local because it has non-POD type `%T'" #~ msgstr " %D ne peut tre utilis comme un thread local parce qu'il a un non POD de type %T " #~ msgid "`%D' is thread-local and so cannot be dynamically initialized" #~ msgstr " %D est un thread local et ne peut donc pas tre initialis dynamiquement" #~ msgid "invalid catch parameter" #~ msgstr "paramtre d'interception invalide" #~ msgid "destructor for alien class `%T' cannot be a member" #~ msgstr "destructeur pour la classe trangre %T ne peut tre un membre" #~ msgid "constructor for alien class `%T' cannot be a member" #~ msgstr "constructeur pour la classe trangre %T ne peut tre un membre" #~ msgid "`%D' declared as a `virtual' %s" #~ msgstr " %D dclar comme virtual %s" #~ msgid "`%D' declared as an `inline' %s" #~ msgstr " %D dclar comme inline %s" #~ msgid "`const' and `volatile' function specifiers on `%D' invalid in %s declaration" #~ msgstr "spcificateurs de fonction const et volatile invalide pour %D dans la dclaration %s" #~ msgid "`%D' declared as a friend" #~ msgstr " %D dclar comme un ami" #~ msgid "`%D' declared with an exception specification" #~ msgstr " %D dclar avec une exception de spcification" #~ msgid "cannot declare `::main' to be a template" #~ msgstr "ne peut dclarer ::main comme tant un canevas" #~ msgid "cannot declare `::main' to be inline" #~ msgstr "ne peut dclarer ::main tre enligne" #~ msgid "cannot declare `::main' to be static" #~ msgstr "ne peut dclarer ::main comme tant static" #~ msgid "`main' must return `int'" #~ msgstr " main doit retourner int " #~ msgid "non-local function `%#D' uses anonymous type" #~ msgstr "fonction non locale %#D utilise un type anonyme" #~ msgid "`%#D' does not refer to the unqualified type, so it is not used for linkage" #~ msgstr " %#D ne rfre pas un type non qualifi, aussi il n'est pas utilis pour la liaison" #~ msgid "non-local function `%#D' uses local type `%T'" #~ msgstr "fonction non locale %#D utilise un type local %T " #~ msgid "%smember function `%D' cannot have `%T' method qualifier" #~ msgstr "%sfonction membre %D ne peut avoir %T comme qualificateur de mthode" #~ msgid "defining explicit specialization `%D' in friend declaration" #~ msgstr "dfinition explicite de spcialisation %D dans lka dclaration ami" #~ msgid "invalid use of template-id `%D' in declaration of primary template" #~ msgstr "utilisation invalide du template-id %D dans la dclaration du canevas primaire" #~ msgid "default arguments are not allowed in declaration of friend template specialization `%D'" #~ msgstr "arguments par dfaut ne sont pas permis dans la dclaration amie de la spcialisation du canevas %D " #~ msgid "`inline' is not allowed in declaration of friend template specialization `%D'" #~ msgstr " inline n'estpas permis dans la dclaration amie de la spcialisation du canevas %D " #~ msgid "definition of implicitly-declared `%D'" #~ msgstr "dfinition implicitement dclare %D " #~ msgid "no `%#D' member function declared in class `%T'" #~ msgstr "pas de fonction membre %#D dclare dans la classe %T " #~ msgid "non-local variable `%#D' uses local type `%T'" #~ msgstr "variable non locale %#D utilise un type local %T " #~ msgid "invalid in-class initialization of static data member of non-integral type `%T'" #~ msgstr "initialisation invalide dans la class de donnes de membre statiques d'un non entier de type %T " #~ msgid "ISO C++ forbids in-class initialization of non-const static member `%D'" #~ msgstr "ISO C++ interdit l'initialisation intra-classe d'un membre statique non constant %D " #~ msgid "ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'" #~ msgstr "ISO C++ interdit l'initialisation d'une membre constant %D d'un type non entier %T " #~ msgid "size of array `%D' has non-integral type `%T'" #~ msgstr "taille du tableau %D n'est pas de type entier %T " #~ msgid "size of array has non-integral type `%T'" #~ msgstr "taille du tableau a type non entier %T " #~ msgid "size of array `%D' is negative" #~ msgstr "taille du tableau %D est ngative" #~ msgid "size of array is negative" #~ msgstr "taille du tableau est ngative" #~ msgid "ISO C++ forbids zero-size array `%D'" #~ msgstr "ISO C++ interdit les tableaux de taille zro %D " #~ msgid "ISO C++ forbids zero-size array" #~ msgstr "ISO C++ interdit les tableaux de taille zro" #~ msgid "size of array `%D' is not an integral constant-expression" #~ msgstr "taille du tableau %D n'a pas une expression de constante de type entier" #~ msgid "size of array is not an integral constant-expression" #~ msgstr "taille du tableau n'est pas une expression de constante de type entier" #~ msgid "ISO C++ forbids variable-size array `%D'" #~ msgstr "ISO C++ interdit les tableaus de taille variable %D " #~ msgid "ISO C++ forbids variable-size array" #~ msgstr "ISO C++ interdit le tableau de taille variable" #~ msgid "overflow in array dimension" #~ msgstr "dbordement dans les dimensions du tableau" #~ msgid "declaration of `%D' as %s" #~ msgstr "dclaration de %D comme %s " #~ msgid "creating %s" #~ msgstr "cration de %s" #~ msgid "declaration of `%D' as multidimensional array must have bounds for all dimensions except the first" #~ msgstr "dclaration de %D comme tableau multidimensionel doit avoir des bornes pour chaque dimension except pour la premire" #~ msgid "multidimensional array must have bounds for all dimensions except the first" #~ msgstr "tableau multidimensionel doit avoir des bornes pour chaque dimension except pour la premire" #~ msgid "return type specification for constructor invalid" #~ msgstr "spcification de type retourn pour un constructeur est invalide" #~ msgid "return type specification for destructor invalid" #~ msgstr "spcification de type retourn pour un destructeur est invalide" #~ msgid "operator `%T' declared to return `%T'" #~ msgstr "oprateur %T dclar comme retournant %T " #~ msgid "return type specified for `operator %T'" #~ msgstr "type spcifi retourn pour l'oprateur %T " #~ msgid "destructors must be member functions" #~ msgstr "les destructeurs doivent tre des fonctions membres" #~ msgid "destructor `%T' must match class name `%T'" #~ msgstr "destructeur %T doit concorder avec le nom de la classe %T " #~ msgid "declarator-id missing; using reserved word `%D'" #~ msgstr "declarator-id manquant; utilisation du mot rserv %D " #~ msgid "type `%T' is not derived from type `%T'" #~ msgstr "type %T n'est pas driv du type %T " #~ msgid "`%T' specified as declarator-id" #~ msgstr " %T spcifi comme declarator-id" #~ msgid " perhaps you want `%T' for a constructor" #~ msgstr " peut-tre que vous voulez %T comme constructeur" #~ msgid "invalid use of template-name '%E' in a declarator" #~ msgstr "utilisation invalide du template-name %E dans le dclarateur" #~ msgid "declaration of `%D' as non-function" #~ msgstr "dclaration de %D comme non-fonction" #~ msgid "`bool' is now a keyword" #~ msgstr " bool est maintenant un mot cl" #~ msgid "extraneous `%T' ignored" #~ msgstr " %T surperflu ignor" #~ msgid "multiple declarations `%T' and `%T'" #~ msgstr "multiples dclarations %T et %T " #~ msgid "ISO C++ does not support `long long'" #~ msgstr "ISO C++ ne permet pas long long " #~ msgid "ISO C++ forbids declaration of `%s' with no type" #~ msgstr "ISO C++ interdit la dclaration de %s sans type" #~ msgid "short, signed or unsigned invalid for `%s'" #~ msgstr "short, signed ou unsigned est invalide pour %s " #~ msgid "long and short specified together for `%s'" #~ msgstr "long et short spcifis ensembles pour %s " #~ msgid "signed and unsigned given together for `%s'" #~ msgstr "signed et unsigned donns ensembles pour %s " #~ msgid "qualifiers are not allowed on declaration of `operator %T'" #~ msgstr "qualificateurs ne sont pas permis dans la dclaration de operator %T " #~ msgid "member `%D' cannot be declared both virtual and static" #~ msgstr "membre %D ne peut tre dclar virtuel et statique" #~ msgid "`%T::%D' is not a valid declarator" #~ msgstr " %T::%D n'est pas un dclarateur valide" #~ msgid "storage class specifiers invalid in parameter declarations" #~ msgstr "spcificateurs de classe de stockage invalides dans la dclaration des paramtres" #~ msgid "typedef declaration invalid in parameter declaration" #~ msgstr "dclaration typedef invalide dans le paramtre de la dclaration" #~ msgid "virtual outside class declaration" #~ msgstr "virtuel en dehors de la dclaration de classe" #~ msgid "storage class specified for %s `%s'" #~ msgstr "classe de stockage spcifie pour %s %s " #~ msgid "top-level declaration of `%s' specifies `auto'" #~ msgstr "la dclaration hors de toute fonction de %s a spcifi auto " #~ msgid "storage class specifiers invalid in friend function declarations" #~ msgstr "spcificateurs de classe de stockage invalide dans les dclarations de fonction amie" #~ msgid "destructor cannot be static member function" #~ msgstr "le destructeur ne peut tre une fonction membre statique" #~ msgid "destructors may not be `%s'" #~ msgstr "destructeurs ne peut tre %s " #~ msgid "constructor cannot be static member function" #~ msgstr "le constructeur ne peut tre une fonction membre statique" #~ msgid "constructors cannot be declared virtual" #~ msgstr "constructeurs ne peut tre dclars virtuels" #~ msgid "constructors may not be `%s'" #~ msgstr "constructeurs ne peuvent pas tre %s " #~ msgid "return value type specifier for constructor ignored" #~ msgstr "type de valeur retourne d'un spcificateur pour un constructeur est ignor" #~ msgid "can't initialize friend function `%s'" #~ msgstr "ne peut initialiser la fonction amie %s " #~ msgid "virtual functions cannot be friends" #~ msgstr "fonctions virtuelles ne peuvent tre amies" #~ msgid "friend declaration not in class definition" #~ msgstr "dclaration amie n'est pas dans la dfinition de classe" #~ msgid "can't define friend function `%s' in a local class definition" #~ msgstr "ne peut dfinir une fonction amie %s dans une dfinition locale de classe" #~ msgid "destructors may not have parameters" #~ msgstr "destructeurs ne peuvent pas avoir de paramtre" #~ msgid "cannot declare reference to `%#T'" #~ msgstr "ne peut dclarer une rfrence vers %#T " #~ msgid "cannot declare pointer to `%#T'" #~ msgstr "ne peut dclarer un pointeur vers %#T " #~ msgid "cannot declare pointer to `%#T' member" #~ msgstr "ne peut dclarer un pointeur vers le membre %#T " #~ msgid "extra qualification `%T::' on member `%s' ignored" #~ msgstr "qualification additionnelle %T:: sur le membre %s est ignore" #~ msgid "cannot declare member function `%T::%s' within `%T'" #~ msgstr "ne peut dclarer la fonction membre %T::%s l'intrieur de %T " #~ msgid "cannot declare member `%T::%s' within `%T'" #~ msgstr "ne peut dclarer le membre %T::%s l'intrieur de %T " #~ msgid "data member may not have variably modified type `%T'" #~ msgstr "membre de donnes peut ne pas avoir de type %T modifi de manire variable" #~ msgid "parameter may not have variably modified type `%T'" #~ msgstr "paramtre peut ne pas avoir de type %T modifi de manire variable" #~ msgid "only declarations of constructors can be `explicit'" #~ msgstr "seuls les dclarations de constructeurs peuvent tre explicit " #~ msgid "non-member `%s' cannot be declared `mutable'" #~ msgstr "le non membre %s ne peut tre dclar mutable " #~ msgid "non-object member `%s' cannot be declared `mutable'" #~ msgstr "un membre non objet %s ne peut tre dclar mutable " #~ msgid "function `%s' cannot be declared `mutable'" #~ msgstr "fonction %s ne peut tre dclare mutable " #~ msgid "static `%s' cannot be declared `mutable'" #~ msgstr "static %s ne peut tre dclar mutable " #~ msgid "const `%s' cannot be declared `mutable'" #~ msgstr "const %s ne peut tre dclar mutable " #~ msgid "template-id `%D' used as a declarator" #~ msgstr "identificateur de canevas %D utilis comme dclarateur" #~ msgid "ISO C++ forbids nested type `%D' with same name as enclosing class" #~ msgstr "ISO C++ interdit le type imbriqu %D avec le mme nom que la classe de fermeture" #~ msgid "%Jtypedef name may not be a nested-name-specifier" #~ msgstr "%Jnom du typedef peut ne pas tre un nom de spcificateur imbriqu" #~ msgid "%Jinvalid type qualifier for non-member function type" #~ msgstr "%Jqualificateur de type invalide pour un type de fonction non membre" #~ msgid "type qualifiers specified for friend class declaration" #~ msgstr "qulificateurs de types spcifis pour la dclaration d'une classe amie" #~ msgid "`inline' specified for friend class declaration" #~ msgstr " inline spcifi pour la dclaration d'une classe amie" #~ msgid "template parameters cannot be friends" #~ msgstr "paramtres du canevas ne peuvent pas tre amis" #~ msgid "friend declaration requires class-key, i.e. `friend class %T::%D'" #~ msgstr "dclaration ami requiert une cl de classe, i.e. friend class %T::%D " #~ msgid "friend declaration requires class-key, i.e. `friend %#T'" #~ msgstr "dclaration amie requiert une cl de classes, i.e. friend %#T " #~ msgid "trying to make class `%T' a friend of global scope" #~ msgstr "tentative de rendre la classe %T un ami de la porte globale" #~ msgid "invalid qualifiers on non-member function type" #~ msgstr "qualificteurs invalide pour un type de fonction (autre que fonction membre)" #~ msgid "abstract declarator `%T' used as declaration" #~ msgstr "dclaration abstrait %T utilis dans la dclaration" #~ msgid "unnamed variable or field declared void" #~ msgstr "variable non nomme ou champ dclar void" #~ msgid "variable or field declared void" #~ msgstr "variable ou champ dclar void" #~ msgid "cannot use `::' in parameter declaration" #~ msgstr "ne peut utiliser :: dans le paramtre d'un dclaration" #~ msgid "invalid use of `::'" #~ msgstr "utilisation invalide de :: " #~ msgid "function `%D' cannot be declared friend" #~ msgstr "fonction %D ne peut tre dclare amie" #~ msgid "can't make `%D' into a method -- not in a class" #~ msgstr "ne peut rendre %D dans la mthode -- n'est pas dans la classe" #~ msgid "function `%D' declared virtual inside a union" #~ msgstr "fonction %D dclar comme virtuelle l'intrieur d'un agrgat" #~ msgid "`%D' cannot be declared virtual, since it is always static" #~ msgstr " %D ne peut tre dclar virtuel, alors qu'il est toujours statique" #~ msgid "field `%D' has incomplete type" #~ msgstr "champ %D a un type incomplet" #~ msgid "name `%T' has incomplete type" #~ msgstr "nom %T a un type incomplet" #~ msgid " in instantiation of template `%T'" #~ msgstr " dans l'instanciation du canevas %T " #~ msgid "`%s' is neither function nor member function; cannot be declared friend" #~ msgstr " %s n'est ni une fonction ni une fonction membre ; ne peut tre dclar ami" #~ msgid "member functions are implicitly friends of their class" #~ msgstr "les fonctions membres sont implicitement amis de leur classe" #~ msgid "ISO C++ forbids initialization of member `%D'" #~ msgstr "ISO C++ interdit l'initialisation du membre %D " #~ msgid "making `%D' static" #~ msgstr "rendant %D statique" #~ msgid "storage class `auto' invalid for function `%s'" #~ msgstr "classe de stockage auto invalide pour une fonction %s " #~ msgid "storage class `register' invalid for function `%s'" #~ msgstr "classe de stockage register invalide pour une fonction %s " #~ msgid "storage class `__thread' invalid for function `%s'" #~ msgstr "classe de stockage __thread invalide pour la fonction %s " #~ msgid "storage class `static' invalid for function `%s' declared out of global scope" #~ msgstr "classe de stockage static invalide pour une fonction %s dclare en dehors de la porte globale" #~ msgid "storage class `inline' invalid for function `%s' declared out of global scope" #~ msgstr "classe de stockage inline invalide pour une fonction %s dclare en dehors de la porte globale" #~ msgid "virtual non-class function `%s'" #~ msgstr "fonction virtuelle d'une non classe %s " #~ msgid "cannot declare member function `%D' to have static linkage" #~ msgstr "ne peut dclarer la fonction membre %D comme ayant un lien statique" #~ msgid "cannot declare static function inside another function" #~ msgstr "ne peut dclarer une fonction statique l'intrieur d'une autre fonction" #~ msgid "`static' may not be used when defining (as opposed to declaring) a static data member" #~ msgstr " static ne peut pas tre utilis lors de la dfinition (contrairement la dclaration) de donnes de membres statiques" #~ msgid "static member `%D' declared `register'" #~ msgstr "mambre statique %D dclar register " #~ msgid "cannot explicitly declare member `%#D' to have extern linkage" #~ msgstr "ne peut explicitement dclarer le membre %#D comme ayant une liaison externe" #~ msgid "default argument for `%#D' has type `%T'" #~ msgstr "argument par dfaut pour %#D un type %T " #~ msgid "default argument for parameter of type `%T' has type `%T'" #~ msgstr "argument par dfaut pour le paramtre de type %T a le type %T " #~ msgid "default argument `%E' uses local variable `%D'" #~ msgstr "argument par dfaut %E utiliser une variable locale %D " #~ msgid "invalid string constant `%E'" #~ msgstr "constante chane invalide %E " #~ msgid "invalid integer constant in parameter list, did you forget to give parameter name?" #~ msgstr "constante entire invalide dans la liste de paramtre, avez-vous oublier de donner un nom de paramtre?" #~ msgid "parameter `%D' invalidly declared method type" #~ msgstr "paramtre %D incorrectement valid comme type de mthode" #~ msgid "parameter `%D' includes %s to array of unknown bound `%T'" #~ msgstr "paramtre %D inclut %s au tableau de bornes inconnues %T " #~ msgid "invalid constructor; you probably meant `%T (const %T&)'" #~ msgstr "constructeur invalide; vous vouliez probablement dire %T (const %T&) " #~ msgid "`%D' must be a nonstatic member function" #~ msgstr " %D doit tre une fonction membre non statique" #~ msgid "`%D' must be either a non-static member function or a non-member function" #~ msgstr " %D doit tre soit un membre non statique de fonction ou une fonction non membre" #~ msgid "`%D' must have an argument of class or enumerated type" #~ msgstr " %D doit avoir un argument de classe ou de type numr" #~ msgid "conversion to %s%s will never use a type conversion operator" #~ msgstr "conversion de %s%s ne sera jamais utilis dans un type d'oprateur de conversion" #~ msgid "ISO C++ prohibits overloading operator ?:" #~ msgstr "ISO C++ interdit la surcharge de l'oprateur ?:" #~ msgid "postfix `%D' must take `int' as its argument" #~ msgstr "postfixe %D doit prendre int comme argument" #~ msgid "postfix `%D' must take `int' as its second argument" #~ msgstr "postfixe %D doit prndre int pour son second argument" #~ msgid "`%D' must take either zero or one argument" #~ msgstr " %D doit prendre seulement zro ou un autre argument" #~ msgid "`%D' must take either one or two arguments" #~ msgstr " %D doit prendre seulement un OU deux arguments" #~ msgid "prefix `%D' should return `%T'" #~ msgstr "prfixe %D devrait retourner %T " #~ msgid "postfix `%D' should return `%T'" #~ msgstr "postfixe %D devrait retourner %T " #~ msgid "`%D' must take `void'" #~ msgstr " %D doit prendre void " #~ msgid "`%D' must take exactly one argument" #~ msgstr " %D doit prendre exactement un argument" #~ msgid "`%D' must take exactly two arguments" #~ msgstr " %D doit prendre exactemenr deux arguments" #~ msgid "user-defined `%D' always evaluates both arguments" #~ msgstr " %D dfini par l'usager value toujours les 2 arguments" #~ msgid "`%D' should return by value" #~ msgstr " %D devrait retourner par valeur" #~ msgid "`%D' cannot have default arguments" #~ msgstr " %D ne peut avoir d'arguments par dfaut" #~ msgid "using typedef-name `%D' after `%s'" #~ msgstr "utilisation d'un nom de typedef %D aprs %s " #~ msgid "using template type parameter `%T' after `%s'" #~ msgstr "utilisation de type de canevas de paramtre %T aprs %s " #~ msgid "`%T' referred to as `%s'" #~ msgstr " %TD rfr comme %s " #~ msgid "`%T' referred to as enum" #~ msgstr " %T rfr comme enum" #~ msgid "template argument required for `%s %T'" #~ msgstr "argument du canevas est requis pour %s %T " #~ msgid "use of enum `%#D' without previous declaration" #~ msgstr "utilisation de enum %#D sans dclaration prcdente" #~ msgid "derived union `%T' invalid" #~ msgstr "union drive %T invalide" #~ msgid "base type `%T' fails to be a struct or class type" #~ msgstr "type de base %T a chou pour devenir un type de classe ou un type construit" #~ msgid "recursive type `%T' undefined" #~ msgstr "type rcursif %T non dfini" #~ msgid "duplicate base type `%T' invalid" #~ msgstr "duplication du type de base %T invalide" #~ msgid "Java class '%T' cannot have multiple bases" #~ msgstr "classe Java %T ne peut avoir de bases multiples" #~ msgid "Java class '%T' cannot have virtual bases" #~ msgstr "classe Java %T ne peut avoir de bases virtuelles" #~ msgid "multiple definition of `%#T'" #~ msgstr "dfinition multiple de %#T " #~ msgid "%Jprevious definition here" #~ msgstr "%Jdfinition prcdente ici" #~ msgid "no integral type can represent all of the enumerator values for `%T'" #~ msgstr "aucun type entier peut reprsenter toutes les valeurs de l'numrateur pour %T " #~ msgid "enumerator value for `%D' not integer constant" #~ msgstr "valeur de l'numrateur pour %D n'est pas une constante entire" #~ msgid "overflow in enumeration values at `%D'" #~ msgstr "dbordement dans les valeurs de l'numration %D " #~ msgid "return type `%#T' is incomplete" #~ msgstr "type retourn %#T est incomplet" #~ msgid "return type for `main' changed to `int'" #~ msgstr "type retourn pour main est chang pour int " #~ msgid "`%D' implicitly declared before its definition" #~ msgstr " %D implicitement dclar avant sa dfinition" #~ msgid "`operator=' should return a reference to `*this'" #~ msgstr " operator= devrait retourner une rfrence *ceci " #~ msgid "parameter `%D' declared void" #~ msgstr "paramtre %D dclar void " #~ msgid "invalid member function declaration" #~ msgstr "dclaration de membre de fonction invalide" #~ msgid "`%D' is already defined in class `%T'" #~ msgstr " %D est dj dfini dans la classe %T " #~ msgid "static member function `%#D' declared with type qualifiers" #~ msgstr "membre de fonction statique %#D dclar avec des qualificateurs de tyep" #~ msgid "duplicate type qualifiers in %s declaration" #~ msgstr "qualificateurs de types dupliqus dans dclaration %s" #~ msgid "name missing for member function" #~ msgstr "nom manquant pour le membre d'une fonction" #~ msgid "ambiguous conversion for array subscript" #~ msgstr "comversion ambigue pour un sous-tableau" #~ msgid "invalid types `%T[%T]' for array subscript" #~ msgstr "types invalides %T[%T] pour un sous-script de tableau" #~ msgid "deleting array `%#D'" #~ msgstr "destruction du tableau %#D " #~ msgid "type `%#T' argument given to `delete', expected pointer" #~ msgstr "type %#T de l'argument donn pour delete , attendait un pointeur" #~ msgid "cannot delete a function. Only pointer-to-objects are valid arguments to `delete'" #~ msgstr "ne peut dtruire une fonction. Seuls les pointeurs-d'objets sont des arguments valable pour destruction" #~ msgid "deleting `%T' is undefined" #~ msgstr "destruction de %T est indfinie" #~ msgid "invalid declaration of member template `%#D' in local class" #~ msgstr "dclaration invalide du canevas de membre %#D dans la classe locale" #~ msgid "invalid use of `virtual' in template declaration of `%#D'" #~ msgstr "utilisation invalide de virtual dans la dclaration d'un canevas de %#D " #~ msgid "template declaration of `%#D'" #~ msgstr "dclaration du canevas de %#D " #~ msgid "Java method '%D' has non-Java return type `%T'" #~ msgstr "mthode Java %D a un type non Java retourn %T " #~ msgid "Java method '%D' has non-Java parameter type `%T'" #~ msgstr "mthode Java %D a un paramtre non Java de type %T " #~ msgid "prototype for `%#D' does not match any in class `%T'" #~ msgstr "prototype pour %#D ne concorde avec aucun dans la classe %T " #~ msgid "local class `%#T' shall not have static data member `%#D'" #~ msgstr "la classe locale %#T ne doit pas tre un membre de donnes statiques de %#D " #~ msgid "initializer invalid for static member with constructor" #~ msgstr "initialisation invalide pour un membre statique avec constructeur" #~ msgid "(an out of class initialization is required)" #~ msgstr "(une initialisation en dehors de la classe est requise)" #~ msgid "member `%D' conflicts with virtual function table field name" #~ msgstr "membre %D en conflit avec un nom de champ de table d'une fonction virtuelle" #~ msgid "`%D' is already defined in `%T'" #~ msgstr " %D est dj dfini dans %T " #~ msgid "field initializer is not constant" #~ msgstr "l'initialisation du champ n'est pas une constante" #~ msgid "`asm' specifiers are not permitted on non-static data members" #~ msgstr "spcificateurs asm ne sont pas permis pour des donnes de membres non statiques" #~ msgid "cannot declare `%D' to be a bit-field type" #~ msgstr "ne peut dclarer %D comme tant un type de champ de bits" #~ msgid "cannot declare bit-field `%D' with function type" #~ msgstr "ne peut dclarer un champ de bits %D avec un type de fonction" #~ msgid "`%D' is already defined in the class %T" #~ msgstr " %D est dj dfini dans la classe %T" #~ msgid "static member `%D' cannot be a bit-field" #~ msgstr "membre statique %D ne peut tre un champ de bits" #~ msgid "initializer specified for non-member function `%D'" #~ msgstr "initialisation spcifie pour une fonction %D n'tant pas membre" #~ msgid "invalid initializer for virtual method `%D'" #~ msgstr "initialisation invalide pour la mthode virtuelle %D " #~ msgid "anonymous struct not inside named type" #~ msgstr "struct anonyme n'est pas l'intrieur du type nomm" #~ msgid "namespace-scope anonymous aggregates must be static" #~ msgstr "aggrgats anonymes de champs d'espace nom doit tre statique" #~ msgid "anonymous union with no members" #~ msgstr "aggrgat anonyme sans aucun membre" #~ msgid "`operator new' must return type `%T'" #~ msgstr " operator new doit retourner un type %T " #~ msgid "`operator new' takes type `size_t' (`%T') as first parameter" #~ msgstr " operator new prend le type size_t ( %T ) comme premier paramtre" #~ msgid "`operator delete' must return type `%T'" #~ msgstr " operator delete doit retourner le type %T " #~ msgid "`operator delete' takes type `%T' as first parameter" #~ msgstr " operator delete prend le type %T comme premier paramtre" #~ msgid "inline function `%D' used but never defined" #~ msgstr "fonction enligne %D utilis mais n'a jamais t dfini" #~ msgid "default argument missing for parameter %P of `%+#D'" #~ msgstr "argument par dfaut manquant pour le paramtre %P de %+#D " #~ msgid "unexpected letter `%c' in locate_error\n" #~ msgstr "lettre inattendue %c dans locate_error\n" #~ msgid "type `%T' is disallowed in Java `throw' or `catch'" #~ msgstr "type %T n'est pas permis en Java throw ou catch " #~ msgid "call to Java `catch' or `throw' with `jthrowable' undefined" #~ msgstr "appel en Java de catch ou throw avec jthrowable undfini" #~ msgid "type `%T' is not derived from `java::lang::Throwable'" #~ msgstr "type %T n'est pas driv de java::lang::Throwable " #~ msgid "mixing C++ and Java catches in a single translation unit" #~ msgstr "mlange des interceptions C++ et Java dans une unit simple de traduction " #~ msgid "throwing NULL, which has integral, not pointer type" #~ msgstr "retounrnant NULL (par throw), lequel est entier, pas de type pointeur" #~ msgid "`%D' should never be overloaded" #~ msgstr " %D ne devrait jamais tre surcharg" #~ msgid " in thrown expression" #~ msgstr " dans l'expression projete" #~ msgid "expression '%E' of abstract class type '%T' cannot be used in throw-expression" #~ msgstr "expression %E de la classe abstraite de type %T ne peut tre utilis dans une expression throw" #~ msgid "exception of type `%T' will be caught" #~ msgstr "exception du type %T sera intercepte" #~ msgid " by earlier handler for `%T'" #~ msgstr " par un handler antrieur pour %T " #~ msgid "`...' handler must be the last handler for its try block" #~ msgstr " ... handler doit tre le dernier handler de son bloc d'essai" #~ msgid "`%D' is already a friend of class `%T'" #~ msgstr " %D est dj un ami de la classe %T " #~ msgid "invalid type `%T' declared `friend'" #~ msgstr "type invalide %T dclar friend " #~ msgid "partial specialization `%T' declared `friend'" #~ msgstr "spcialisation partielle %T dclare friend " #~ msgid "class `%T' is implicitly friends with itself" #~ msgstr "classe %T est implicitement ami avec elle-mme" #~ msgid "typename type `%#T' declared `friend'" #~ msgstr "type typename %#T dclar friend " #~ msgid "template parameter type `%T' declared `friend'" #~ msgstr "type paramtre du canevas %T dclar friend " #~ msgid "`%#T' is not a template" #~ msgstr " %#T n'est pas un canevas" #~ msgid "`%D' is already a friend of `%T'" #~ msgstr " %D est dj un ami de %T " #~ msgid "`%T' is already a friend of `%T'" #~ msgstr " %T est dj un ami de %T " #~ msgid "member `%D' declared as friend before type `%T' defined" #~ msgstr "membre %D dclar comme ami avant la dfinition du type %T " #~ msgid "friend declaration `%#D' declares a non-template function" #~ msgstr "dclaration amie %#D dclare une fonction non canevas" #~ msgid "(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning" #~ msgstr "(si ce n'est pas ce que vous vouliez faire, soyez sr que le canevas de la fonction a dj t dclar et ajouter <> aprs le nom de la fonction ici) -Wno-non-template-friend dsactive le prsent avertissement" #~ msgid "argument to `%s' missing\n" #~ msgstr "argument pour %s est manquant\n" #~ msgid "`%D' should be initialized in the member initialization list" #~ msgstr " %D devrait tre initialis dans la liste d'initialisation du membre" #~ msgid "default-initialization of `%#D', which has reference type" #~ msgstr "initialisation par dfaut de %#D , lequel a un type rfrenc" #~ msgid "uninitialized reference member `%D'" #~ msgstr "rfrence de membre non initialis %D " #~ msgid "uninitialized member `%D' with `const' type `%T'" #~ msgstr "membre non initialis %D avec const type %T " #~ msgid "`%D' will be initialized after" #~ msgstr " %D sera initialis aprs" #~ msgid "base `%T' will be initialized after" #~ msgstr "base %T sera initialis aprs" #~ msgid " `%#D'" #~ msgstr " %D " #~ msgid " base `%T'" #~ msgstr " base %T " #~ msgid " when initialized here" #~ msgstr " lorsqu'initialis ici" #~ msgid "multiple initializations given for `%D'" #~ msgstr "multiples initialisations donnes pour %D " #~ msgid "multiple initializations given for base `%T'" #~ msgstr "multiples initialisations donnes pour base %T " #~ msgid "initializations for multiple members of `%T'" #~ msgstr "initialisation de multiples membres de %T " #~ msgid "base class `%#T' should be explicitly initialized in the copy constructor" #~ msgstr "classe de base %#T devrait tre explicitement initialis dans la copie du constructeur" #~ msgid "class `%T' does not have any field named `%D'" #~ msgstr "classe %T n'a pas aucun champ nomm %D " #~ msgid "`%#D' is a static data member; it can only be initialized at its definition" #~ msgstr " %#D est un membre statique de donnes; il peut seulement tre initialise lors de sa dfinition" #~ msgid "`%#D' is not a non-static data member of `%T'" #~ msgstr " %#D n'est pas un membre statique de donnes de %T " #~ msgid "unnamed initializer for `%T', which has no base classes" #~ msgstr "initialiseur sans nom pour %T , lequel n'a pas de classe de base" #~ msgid "unnamed initializer for `%T', which uses multiple inheritance" #~ msgstr "initialiseur sans nom pour %T , lequel utilise de multiples hritages" #~ msgid "'%D' is both a direct base and an indirect virtual base" #~ msgstr " %D est la fois une base directe et indirecte virtuelle" #~ msgid "type `%D' is not a direct or virtual base of `%T'" #~ msgstr "type %D n'est pas une base directe ou virtuelle de %T " #~ msgid "type `%D' is not a direct base of `%T'" #~ msgstr "type %D n'est pas une base directe de %T " #~ msgid "bad array initializer" #~ msgstr "mauvaise initialisation de tableau" #~ msgid "`%T' is not an aggregate type" #~ msgstr " %T n'est pas de type aggrgat" #~ msgid "`%T' fails to be an aggregate typedef" #~ msgstr " %T a chou tre un typedef d'aggrgat" #~ msgid "type `%T' is of non-aggregate type" #~ msgstr "type %T est un type qui n'est pas d'aggrgat" #~ msgid "qualified type `%T' does not match destructor name `~%T'" #~ msgstr "type qualif %T ne concorde pas le nom du destructeur ~%T" #~ msgid "incomplete type `%T' does not have member `%D'" #~ msgstr "type incomplet %T n'a pas de membre %D " #~ msgid "`%D' is not a member of type `%T'" #~ msgstr " %D n'est pas un membre de type %T " #~ msgid "invalid pointer to bit-field `%D'" #~ msgstr "pointeur invalide pour un champ de bits %D " #~ msgid "invalid use of non-static member function `%D'" #~ msgstr "utilisation invalide d'un membre non statique de fonction %D " #~ msgid "invalid use of non-static data member `%D'" #~ msgstr "utilisation invalide d'un membre non statique de donnes %D " #~ msgid "new of array type fails to specify size" #~ msgstr "new sur un type tableau a chou dans l'valuation de la taille" #~ msgid "size in array new must have integral type" #~ msgstr "taille d'un nouveau tableau (new) doit avoir un type entier" #~ msgid "zero size array reserves no space" #~ msgstr "tableau de taille zro ne rserve pas d'espace" #~ msgid "new cannot be applied to a reference type" #~ msgstr "new ne peut tre appliqu un type rfrenc" #~ msgid "new cannot be applied to a function type" #~ msgstr "new ne peut tre appliqu un type de fonction" #~ msgid "call to Java constructor, while `jclass' undefined" #~ msgstr "appel d'un constructeur Java, alors que jclass est indfini" #~ msgid "can't find class$" #~ msgstr "ne peut reprer class$" #~ msgid "invalid type `void' for new" #~ msgstr "type void invalide pour new" #~ msgid "uninitialized const in `new' of `%#T'" #~ msgstr "constante non initialise dans new pour %#T " #~ msgid "call to Java constructor with `%s' undefined" #~ msgstr "appel au constructeur Java avec %s indfini" #~ msgid "request for member `%D' is ambiguous" #~ msgstr "la requte pour le membre %D est ambigu" #~ msgid "ISO C++ forbids initialization in array new" #~ msgstr "ISO C++ interdit l'initialisation d'un nouveau tableau" #~ msgid "initializer ends prematurely" #~ msgstr "fin prmature de l'initialisation" #~ msgid "cannot initialize multi-dimensional array with initializer" #~ msgstr "ne peut initialiser un table multi-dimensionnel avec initialiseur" #~ msgid "possible problem detected in invocation of delete operator:" #~ msgstr "problme possible dtect dans l'invocation de l'oprateur delete:" #~ msgid "neither the destructor nor the class-specific " #~ msgstr "ni le destructeur ni la classe spcifique" #~ msgid "operator delete will be called, even if they are " #~ msgstr "l'oprateur de destruction sera appell, mme s'ils sont " #~ msgid "declared when the class is defined." #~ msgstr "dclars lorsque la classe est dfinie." #~ msgid "unknown array size in delete" #~ msgstr "taille du tableau inconnue dans delete" #~ msgid "type to vector delete is neither pointer or array type" #~ msgstr "type du vesteur delete n'est ni un pointeur ou un type tableau" #~ msgid "type name expected before `*'" #~ msgstr "nom de type attendu avec *" #~ msgid "junk at end of #pragma %s" #~ msgstr "rebut la fin de #pragma %s" #~ msgid "invalid #pragma %s" #~ msgstr "#pragma %s invalde" #~ msgid "#pragma vtable no longer supported" #~ msgstr "#pragma vtable n'est plus support" #~ msgid "#pragma implementation for %s appears after file is included" #~ msgstr "implantation de #pragma pour %s apparat aprs l'inclusion du fichier" #~ msgid "junk at end of #pragma GCC java_exceptions" #~ msgstr "rebut la fin de #pragma GCC java_exceptions" #~ msgid "`%D' not defined" #~ msgstr " %D n'est pas dfini" #~ msgid "`%D' was not declared in this scope" #~ msgstr " %D n'a pas t dclar dans cet horizon" #~ msgid "`%D' undeclared (first use this function)" #~ msgstr " %D non dclar (premire utilisation dans cette fonction)" #~ msgid "(Each undeclared identifier is reported only once for each function it appears in.)" #~ msgstr "(Chaque identificateur non dclar est rapport seulement une seule fois pour la fonction dans laquelle il apparat.)" #~ msgid "there are no arguments to `%D' that depend on a template parameter, so a declaration of `%D' must be available" #~ msgstr "il n'y a pas d'argument %D qui dpend d'un paramtre du canevas, aussi une dclaration de %D doit tre disponible" #~ msgid "(if you use `-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)" #~ msgstr "(si vous utilisez -fpermissive , G++ acceptera votre core, mais permettre l'utilisation d'un nom non dclar est obsolte)" #~ msgid "call_expr cannot be mangled due to a defect in the C++ ABI" #~ msgstr "call_expr ne peut tre mutil en raison d'un faute dans l'ABI C++" #~ msgid "omitted middle operand to `?:' operand cannot be mangled" #~ msgstr "oprande du milieu ?: omise, l'oprande ne peut tre mutile" #~ msgid "the mangled name of `%D' will change in a future version of GCC" #~ msgstr "le nom mutil de %D sera modifi dans une version future de GCC" #~ msgid "generic thunk code fails for method `%#D' which uses `...'" #~ msgstr "code thunk gnrique a chou pour la mthode %#D laquelle utilise ... " #~ msgid "non-static const member `%#D', can't use default assignment operator" #~ msgstr "constante non statique du membre %#D , ne peut utiliser l'oprateur d'affectation par dfaut" #~ msgid "non-static reference member `%#D', can't use default assignment operator" #~ msgstr "rfrence non statique du membre %#D , ne peut utiliser l'oprateur d'affectation par dfaut" #~ msgid "`%#D' used prior to declaration" #~ msgstr " %#D utilis prcdemment avant sa dclaration" #~ msgid "redeclaration of `wchar_t' as `%T'" #~ msgstr "redclaration de wchar_t comme %T " #~ msgid "invalid redeclaration of `%D'" #~ msgstr "redclaration invalide de %D " #~ msgid "as `%D'" #~ msgstr "comme %D " #~ msgid "type mismatch with previous external decl of `%#D'" #~ msgstr "non concordance de type avec la dclaration externe prcdente de %D " #~ msgid "previous external decl of `%#D'" #~ msgstr "dclaration externe prcdente de %#D " #~ msgid "`%D' was previously implicitly declared to return `int'" #~ msgstr " %D a t prcdemment implicitement dclar comme retournant un entier" #~ msgid "extern declaration of `%#D' doesn't match" #~ msgstr "dclaration externe de %#D ne concorde pas" #~ msgid "global declaration `%#D'" #~ msgstr "dclaration globale %#D " #~ msgid "declaration of '%#D' shadows a parameter" #~ msgstr "dclaration de %#D masque un paramtre" #~ msgid "declaration of '%D' shadows a member of 'this'" #~ msgstr "dclaration de %D masque un membre de this " #~ msgid "declaration of '%D' shadows a previous local" #~ msgstr "dclaration de %D masque la dclaration d'un local prcdent" #~ msgid "declaration of '%D' shadows a global declaration" #~ msgstr "dclaration de %D masque une dclaration globale" #~ msgid "name lookup of `%D' changed" #~ msgstr "recherche du nom %D a chang" #~ msgid " matches this `%D' under ISO standard rules" #~ msgstr " concorde avec %D selon les rgles standards ISO" #~ msgid " matches this `%D' under old rules" #~ msgstr " concorde avec %D selon les vieilles rgles" #~ msgid "name lookup of `%D' changed for new ISO `for' scoping" #~ msgstr "recherche du nom de %D chang pour la nouvelle tendue ISO pour le for " #~ msgid " cannot use obsolete binding at `%D' because it has a destructor" #~ msgstr " ne peut utiliser une liaison obsolte %D parce qu'il a un destructeur" #~ msgid " using obsolete binding at `%D'" #~ msgstr " utilisation de liaison obsolte %D " #~ msgid "%s %s(%E) %p %d\n" #~ msgstr "%s %s(%E) %p %d\n" #~ msgid "%s %s %p %d\n" #~ msgstr "%s %s %p %d\n" #~ msgid "XXX is_class_level != (current_scope == class_scope)\n" #~ msgstr "XXX is_class_level != (current_scope == class_scope)\n" #~ msgid "`%#D' hides constructor for `%#T'" #~ msgstr " %#D cache un constructeur pour %#T " #~ msgid "`%#D' conflicts with previous using declaration `%#D'" #~ msgstr " %#D en conflit avec une dclaration prcdente %#D " #~ msgid "previous non-function declaration `%#D'" #~ msgstr "dclaration prcdente d'un non fonction %#D " #~ msgid "conflicts with function declaration `%#D'" #~ msgstr "conflits avec la dclaration de fonction de %#D " #~ msgid "a using-declaration cannot specify a template-id. Try `using %D'" #~ msgstr "l'utilisation d'une dclaration ne peut spcifier un template-id. Essayer using %D " #~ msgid "namespace `%D' not allowed in using-declaration" #~ msgstr "espace de noms %D n'est pas permis dans l'utilisation d'une dclaration" #~ msgid "`%T' is not a namespace" #~ msgstr " %T n'est pas un espace de noms" #~ msgid "`%D' not declared" #~ msgstr " %D n'est pas dclar" #~ msgid "`%D' is already declared in this scope" #~ msgstr " %D est dj dclar dans cette porte" #~ msgid "using declaration `%D' introduced ambiguous type `%T'" #~ msgstr "l'utlisation de la dclaration %D introduit un type ambigu %T " #~ msgid "`%#D' redeclared as %C" #~ msgstr " %#D rdclar comme %C" #~ msgid "`%D' has the same name as the class in which it is declared" #~ msgstr " %D a le mme nom que la classe dans laquelle il est dclar" #~ msgid "using-declaration for non-member at class scope" #~ msgstr "l'utilisation de dclaration pour un non membre au niveau de la porte de la classe" #~ msgid "using-declaration cannot name destructor" #~ msgstr "utilisation de dclaration ne peut nommer le destructeur" #~ msgid "declaration of `%D' not in a namespace surrounding `%D'" #~ msgstr "dclaration de %D n'est pas dans l'espace de noms entourant %D " #~ msgid "`%D' should have been declared inside `%D'" #~ msgstr " %D devrait avoir t dclar l'intrieur de %D " #~ msgid "namespace alias `%D' not allowed here, assuming `%D'" #~ msgstr "alias d'espace de noms %D n'est pas permis ici, on assume %D " #~ msgid "unknown namespace `%D'" #~ msgstr "espace de nomes inconnu %D " #~ msgid "namespace `%T' undeclared" #~ msgstr "espace de noms %T n'est pas dclar" #~ msgid "strong using only meaningful at namespace scope" #~ msgstr "forte n'ayant un sens seulement sur l'tendue de l'espace nom" #~ msgid "`%D' attribute directive ignored" #~ msgstr " %D attribut de directive ignor" #~ msgid "use of `%D' is ambiguous" #~ msgstr "utilisation de %D est ambigu" #~ msgid " first declared as `%#D' here" #~ msgstr " d'abord dclar comme %#D ici" #~ msgid " also declared as `%#D' here" #~ msgstr " aussi dclar comme %#D ici" #~ msgid "`%D' denotes an ambiguous type" #~ msgstr " %D dnote un type ambigu" #~ msgid "%J first type here" #~ msgstr "%J premier type ici" #~ msgid "%J other type here" #~ msgstr "%J autre type ici" #~ msgid "invalid use of `%D'" #~ msgstr "utilisation invalide de %D " #~ msgid "`%D::%D' is not a template" #~ msgstr " %D::%D n'est pas un canevas" #~ msgid "`%D' undeclared in namespace `%D'" #~ msgstr " %D non dclar dans l'espace de noms %D " #~ msgid "`%D' is not a function," #~ msgstr " %D n'est pas une fonction" #~ msgid " conflict with `%D'" #~ msgstr " en conflit avec %D " #~ msgid "XXX entering pop_everything ()\n" #~ msgstr "XXX on entre dans pop_everything ()\n" #~ msgid "XXX leaving pop_everything ()\n" #~ msgstr "XXX on quitte pop_everything ()\n" #~ msgid "invalid token" #~ msgstr "jeton invalide" #~ msgid "`%D::%D' has not been declared" #~ msgstr " %D::%D n'a pas t dclar" #~ msgid "`::%D' has not been declared" #~ msgstr " ::%D n'a pas t dclar" #~ msgid "`%D' has not been declared" #~ msgstr " %D n'a pas t dclar" #~ msgid "`%D::%D' %s" #~ msgstr " %D::%D %s" #~ msgid "`::%D' %s" #~ msgstr " ::%D %s" #~ msgid "`%D' %s" #~ msgstr " %D %s" #~ msgid "new types may not be defined in a return type" #~ msgstr "nouveaux types ne peuvent tre dfinis dans un type retourner" #~ msgid "`%T' is not a template" #~ msgstr " %T n'est pas un canevas" #~ msgid "invalid template-id" #~ msgstr "id de canevas invalide" #~ msgid "%s cannot appear in a constant-expression" #~ msgstr "%s ne peut apparatre dans une expression de constante" #~ msgid "`%s' does not name a type" #~ msgstr " %s ne nomme pas un type" #~ msgid "(perhaps `typename %T::%s' was intended)" #~ msgstr "(peut-tre typename %T::%s tait votre intention" #~ msgid "ISO C++ forbids braced-groups within expressions" #~ msgstr "ISO C++ interdit les groupes d'accolades l'intrieur des expressions" #~ msgid "statement-expressions are allowed only inside functions" #~ msgstr "expression de dclaration sont permises seulement l'intrieur de fonctions" #~ msgid "`this' may not be used in this context" #~ msgstr " cela ne peut tre utilis dans ce contexte" #~ msgid "local variable `%D' may not appear in this context" #~ msgstr "variable locale %D ne peut apparatre dans ce contexte" #~ msgid "typedef-name `%D' used as destructor declarator" #~ msgstr "nom du typdef %D utilis comme dclarateur de destructeur" #~ msgid "ISO C++ forbids compound-literals" #~ msgstr "ISO C++ interdit les chanes composes" #~ msgid "array bound forbidden after parenthesized type-id" #~ msgstr "les limites du tableau interdisent ce qui suit aprs le type-id mis entre parenthses" #~ msgid "try removing the parentheses around the type-id" #~ msgstr "essayer d'enlever les parenthses autour du type-id" #~ msgid "expression in new-declarator must have integral or enumeration type" #~ msgstr "expression dans le nouveau dclarateur doit tre un type entier ou d'numration" #~ msgid "use of old-style cast" #~ msgstr "utilisation d'un vieux style de transtypage (cast)" #~ msgid "case label `%E' not within a switch statement" #~ msgstr "tiquette du CASE %E n'est pas l'intrieur de la dclaration du SWITCH" #~ msgid "ISO C++ forbids computed gotos" #~ msgstr "ISO C++ interdit les gotos calculs" #~ msgid "extra `;'" #~ msgstr " ; superflu" #~ msgid "mixing declarations and function-definitions is forbidden" #~ msgstr "mlange de dclarations et de dfinitions de fonction est interdit" #~ msgid "duplicate `friend'" #~ msgstr " friend apparat en double" #~ msgid "class definition may not be declared a friend" #~ msgstr "dfinition de classe ne peut pas tre dclar comme ami" #~ msgid "only constructors take base initializers" #~ msgstr "seuls les constructeurs prennent des initialiseurs de base" #~ msgid "anachronistic old-style base class initializer" #~ msgstr "ancien style anachronique d'initialiseur de classe de base" #~ msgid "keyword `export' not implemented, and will be ignored" #~ msgstr "mot cl export n'est pas implant et sera ignor" #~ msgid "`<::' cannot begin a template-argument list" #~ msgstr " <:: ne peut pas tre au dbut d'une liste d'un canevas d'arguments" #~ msgid "`<:' is an alternate spelling for `['. Insert whitespace between `<' and `::'" #~ msgstr " <: est une pellation alternative pour [ . Insrer des blancs d,espacement entre < et :: " #~ msgid "(if you use `-fpermissive' G++ will accept your code)" #~ msgstr "(si vous utiliser -fpermissive G++ acceptera votre code)" #~ msgid "non-template `%D' used as template" #~ msgstr " %D qui n'est pas un canevas est utilis comme canevas" #~ msgid "(use `%T::template %D' to indicate that it is a template)" #~ msgstr "(utiliser %T::template %D pour indiquer que c'est un canevas)" #~ msgid "using `typename' outside of template" #~ msgstr "utilisation de typename en dehors du canevas" #~ msgid "expected type-name" #~ msgstr "un nom de type attendu" #~ msgid "type attributes are honored only at type definition" #~ msgstr "type d'attributs sont honors seulement lors de la dfinitions de type" #~ msgid "a template-id may not appear in a using-declaration" #~ msgstr "un id de canevas ne peut pas apparatre dans l'utilisation de la dclaration" #~ msgid "an asm-specification is not allowed on a function-definition" #~ msgstr "une spcification asm n'est pas permise dans la dfinition de fonction" #~ msgid "attributes are not allowed on a function-definition" #~ msgstr "attributs ne sont pas permis dans la dfinition de fonction" #~ msgid "attributes after parenthesized initializer ignored" #~ msgstr "attributs aprs l'initialisateur mis entre parenthses sont ignors" #~ msgid "file ends in default argument" #~ msgstr "fin de fichier dans l'argument par dfaut" #~ msgid "deprecated use of default argument for parameter of non-function" #~ msgstr "utilisation de l'argument par dfaut pour un paramtre d'une non fonction" #~ msgid "default arguments are only permitted for function parameters" #~ msgstr "arguments par dfaut sont permis seulement pour les paramtres de fonction" #~ msgid "declaration of `%D' in `%D' which does not enclose `%D'" #~ msgstr "dclaration de %D dans %D lequel n'entoure pas %D " #~ msgid "extra qualification ignored" #~ msgstr "qualification superflue ignore" #~ msgid "an explicit specialization must be preceded by 'template <>'" #~ msgstr "spcialisation explicite doit tre prcd par template <> " #~ msgid "extra semicolon" #~ msgstr " ; superflu" #~ msgid "a class-key must be used when declaring a friend" #~ msgstr "une cl de classe doit tre utilise lors de la dclaration d'un ami" #~ msgid "friend declaration does not name a class or function" #~ msgstr "dclaration amie ne nomme pas une classe ou une fonction" #~ msgid "pure-specifier on function-definition" #~ msgstr "spcificateur pur lors de la dfinition d'une fonction" #~ msgid "keyword `typename' not allowed outside of templates" #~ msgstr "mot cl typename n'est pas permis en dehors du canevas" #~ msgid "keyword `typename' not allowed in this context (the base class is implicitly a type)" #~ msgstr "mot cl typename n'est pas permis dans ce contexte (la classe de base est implicitement un type)" #~ msgid "reference to `%D' is ambiguous" #~ msgstr "rfrence %D est ambigu" #~ msgid "too few template-parameter-lists" #~ msgstr "trop peu de canevas de listes de paramtres" #~ msgid "too many template-parameter-lists" #~ msgstr "trop de canevas de listes de paramtres" #~ msgid "invalid function declaration" #~ msgstr "dclaration de fonction invalide" #~ msgid "named return values are no longer supported" #~ msgstr "valeurs nommes retourner ne sont plus supportes" #~ msgid "`>>' should be `> >' within a nested template argument list" #~ msgstr " >> devrait tre > > l'intrieur du canevas de la liste d'arguments" #~ msgid "spurious `>>', use `>' to terminate a template argument list" #~ msgstr "faux >> , utiliser > pour terminer la liste d'argument du canevas" #~ msgid "missing `>' to terminate the template argument list" #~ msgstr " > manquant pour terminer la liste d'argument du canevas" #~ msgid "`%s' tag used in naming `%#T'" #~ msgstr "tiquette %s utilise dans la dnomination de %#T " #~ msgid "%D redeclared with different access" #~ msgstr " %#D redclar avec un accs diffrent" #~ msgid "`template' (as a disambiguator) is only allowed within templates" #~ msgstr " template (afin de rendre moins ambigu) est seulement permis l'intrieur des canevas" #~ msgid "data member `%D' cannot be a member template" #~ msgstr "membre de donnes %D ne peut tre membre du canevas" #~ msgid "invalid member template declaration `%D'" #~ msgstr "dclaration de membre de canevas invalide %D " #~ msgid "explicit specialization in non-namespace scope `%D'" #~ msgstr "spcialisation explicite dans la porte d'un non espace de noms %D " #~ msgid "enclosing class templates are not explicitly specialized" #~ msgstr "fermetures de canevass de classe ne sont pas explicitement spcialises" #~ msgid "specializing `%#T' in different namespace" #~ msgstr "spcialisation de %#T dans diffrents espaces de noms" #~ msgid " from definition of `%#D'" #~ msgstr " partir de la dfinition de %#D " #~ msgid "specialization of `%T' after instantiation" #~ msgstr "spcialisation de %T aprs instanciation" #~ msgid "specialization `%T' after instantiation `%T'" #~ msgstr "spcialisation de %T aprs instanciation %T " #~ msgid "explicit specialization of non-template `%T'" #~ msgstr "spcialisation explicite du non canevas %T " #~ msgid "specialization of %D after instantiation" #~ msgstr "spcialisation de %D aprs instanciation" #~ msgid "%s %+#D" #~ msgstr "%s %+#D" #~ msgid "`%D' is not a function template" #~ msgstr " %D n'est pas un canevas de fonction" #~ msgid "template-id `%D' for `%+D' does not match any template declaration" #~ msgstr "template-id %D pour %+D ne concorde pas avec aucune dclaration de canevas" #~ msgid "ambiguous template specialization `%D' for `%+D'" #~ msgstr "spcialisation de canevas amibigu %D pour %+D " #~ msgid "template-id `%D' in declaration of primary template" #~ msgstr "template-id %D dans la dclaration de canevas primaire" #~ msgid "template parameter list used in explicit instantiation" #~ msgstr "canevas de liste de paramtres utilis dans une instanciation explicite" #~ msgid "definition provided for explicit instantiation" #~ msgstr "dfinition fournie pour une instanciation explicite" #~ msgid "too many template parameter lists in declaration of `%D'" #~ msgstr "trop de canevass de listes de paramtres dans la dclaration de %D " #~ msgid "too few template parameter lists in declaration of `%D'" #~ msgstr "trop peu de canevass de listes de paramtres dans la dclaration de %D " #~ msgid "explicit specialization not preceded by `template <>'" #~ msgstr "spcialisation explicite n'est pas prcde de template <> " #~ msgid "partial specialization `%D' of function template" #~ msgstr "spcialisation partielle %D du canevas de fonction" #~ msgid "default argument specified in explicit specialization" #~ msgstr "argument par dfaut spcifi dans la spcialisation explicite" #~ msgid "template specialization with C linkage" #~ msgstr "spcialisation de canevas avec dition de liens C" #~ msgid "specialization of implicitly-declared special member function" #~ msgstr "spcialisation d'un membre spcial d'nue fonction dclar implicitement" #~ msgid "no member function `%D' declared in `%T'" #~ msgstr "pas de membre de fonction %D dclar dans %T " #~ msgid "too many template parameter lists in declaration of `%T'" #~ msgstr "trop de canevass de listes de paramtres dans la dclaration de %T " #~ msgid " shadows template parm `%#D'" #~ msgstr " masque le paramtre du canevas %#D " #~ msgid "template parameters not used in partial specialization:" #~ msgstr "paramtres du canevas ne sont pas utiliss dans la spcialisation partielle:" #~ msgid " `%D'" #~ msgstr " %D " #~ msgid "partial specialization `%T' does not specialize any template arguments" #~ msgstr "spcialisation partielle %T ne spcialise pas aucun canevas d'arguments" #~ msgid "template argument `%E' involves template parameter(s)" #~ msgstr "canevas d'argument %E implique des paramtres du canevas" #~ msgid "type `%T' of template argument `%E' depends on template parameter(s)" #~ msgstr "type %T du canevas d'argument %E dpend des paramtres du canevas" #~ msgid "no default argument for `%D'" #~ msgstr "pas d'argument par dfaut pour %D " #~ msgid "template with C linkage" #~ msgstr "canevas avec liaison C" #~ msgid "template class without a name" #~ msgstr "canevas de classe sans nom" #~ msgid "destructor `%D' declared as member template" #~ msgstr "destructeur %D dclar en tant que membre du canevas" #~ msgid "`%D' does not declare a template type" #~ msgstr " %D ne dclare pas un type de canevas" #~ msgid "template definition of non-template `%#D'" #~ msgstr "dfinition de canevas d'un non canevas %#D " #~ msgid "expected %d levels of template parms for `%#D', got %d" #~ msgstr "attendait %d niveaux de canevas de paramtres pour %#D , obtenu %d" #~ msgid "got %d template parameters for `%#D'" #~ msgstr "a obtenu %d paramtres de canevas pour %#D " #~ msgid "got %d template parameters for `%#T'" #~ msgstr "a obtenu %d paramtres de canevas pour %#T " #~ msgid " but %d required" #~ msgstr " mais %d son requis" #~ msgid "`%T' is not a template type" #~ msgstr " %T n'est pas un type canevas" #~ msgid "previous declaration `%D'" #~ msgstr "dclaration prcdente de %D " #~ msgid "used %d template parameter%s instead of %d" #~ msgstr "utilis %d canevass paramtre%s au lieu de %d" #~ msgid "template parameter `%#D'" #~ msgstr "canevas de paramtre %#D " #~ msgid "redeclared here as `%#D'" #~ msgstr "redclar ici comme %#D " #~ msgid "redefinition of default argument for `%#D'" #~ msgstr "redfinition de l'argument par dfaut pour %#D " #~ msgid "%J original definition appeared here" #~ msgstr "%J dfinition originale apparat ici" #~ msgid "`%E' is not a valid template argument" #~ msgstr " %E n'est pas un argument valide pour le canevas" #~ msgid "it must be the address of a function with external linkage" #~ msgstr "il doit tre l'adresse d'une fonction avec lien externe" #~ msgid "it must be the address of an object with external linkage" #~ msgstr "il dot tre l'adresse d'un objet avec lien externe" #~ msgid "it must be a pointer-to-member of the form `&X::Y'" #~ msgstr "il doit tre un pointeur-vers-un-membre de la forme &X::Y" #~ msgid "string literal %E is not a valid template argument because it is the address of an object with static linkage" #~ msgstr "chane %E n'est pas un canevas d'argument valide parce que c'est l'adresse d'un objet avec lien statique" #~ msgid "address of non-extern `%E' cannot be used as template argument" #~ msgstr "adresse du non externe %E ne peut tre utilis comme canevas d'argument" #~ msgid "non-constant `%E' cannot be used as template argument" #~ msgstr "la non const %E ne peut tre utilis comme un canevas d'argument" #~ msgid "type '%T' cannot be used as a value for a non-type template-parameter" #~ msgstr "type %T ne peut tre utilis comme une valeur pour un non type de paramtre de canevas" #~ msgid "invalid use of '%D' as a non-type template-argument" #~ msgstr "utilisation invalide de %D pour un non type de paramtre de canevas" #~ msgid "invalid use of '%E' as a non-type template-argument" #~ msgstr "utilisation invalide de %E pour un non type de paramtre de canevas" #~ msgid "to refer to a type member of a template parameter, use `typename %E'" #~ msgstr "pour rfrencer un type de membre de canevas de paramtres, utiliser typename %E " #~ msgid "type/value mismatch at argument %d in template parameter list for `%D'" #~ msgstr "non concordance de type/valeur pour l'argument %d dans la liste des paramtres du canevas de %D " #~ msgid " expected a constant of type `%T', got `%T'" #~ msgstr " attendait une constante de type %T , a obtenu %T " #~ msgid " expected a class template, got `%E'" #~ msgstr " attendait un canevas de classe, a obtenu %E " #~ msgid " expected a type, got `%E'" #~ msgstr " attendait un type, a obtenu %E " #~ msgid " expected a type, got `%T'" #~ msgstr " attendait un type, a obtenu %T " #~ msgid " expected a class template, got `%T'" #~ msgstr " attendait un canevas de classe, a obtenu %T " #~ msgid " expected a template of type `%D', got `%D'" #~ msgstr " attendait un canevas de type %D , a obtenu %D " #~ msgid "could not convert template argument `%E' to `%T'" #~ msgstr "ne peut convertir l'argument du canevas %E vers %T " #~ msgid "wrong number of template arguments (%d, should be %d)" #~ msgstr "nombre erron d'arguments du canevas (%d devrait tre %d)" #~ msgid "provided for `%D'" #~ msgstr "fournie pour %D " #~ msgid "template argument %d is invalid" #~ msgstr "canevas de l'argument %d est invalide" #~ msgid "non-template used as template" #~ msgstr "non canevas utilis comme canevas" #~ msgid "non-template type `%T' used as a template" #~ msgstr "type non canevas %T utilis comme un canevas" #~ msgid "for template declaration `%D'" #~ msgstr "pour la dclaration du canevas %D " #~ msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'" #~ msgstr "instantiation de la profondeur du canevas excde le maximum de %d (utiliser -ftemplate-depth-NN pour augmenter le maximum) lors de l'instanciation de %D " #~ msgid "ambiguous class template instantiation for `%#T'" #~ msgstr "instanciation ambigu de canevas de classe pour %#T " #~ msgid "%s %+#T" #~ msgstr "%s %+#T" #~ msgid "instantiation of `%D' as type `%T'" #~ msgstr "instanciation de %D comme type %T " #~ msgid "invalid parameter type `%T'" #~ msgstr "paramtre invalide pour le type %T " #~ msgid "in declaration `%D'" #~ msgstr "dans la dclaration de %D " #~ msgid "creating pointer to member function of non-class type `%T'" #~ msgstr "cration d'un pointeur vers le membre d'une fonction d'un type non classe %T " #~ msgid "creating array with size zero" #~ msgstr "cration d'un tableau de taille zro" #~ msgid "creating array with size zero (`%E')" #~ msgstr "cration d'un tableau de taille zro ( %E )" #~ msgid "forming reference to void" #~ msgstr "formation d'une rfrence en void" #~ msgid "forming %s to reference type `%T'" #~ msgstr "formant %s pour rfrencer le type %T " #~ msgid "creating pointer to member of non-class type `%T'" #~ msgstr "cration d'un pointeur vers le membre d'un type non classe %T " #~ msgid "creating pointer to member reference type `%T'" #~ msgstr "cration d'un pointeur vers le membre de rfrence du type %T " #~ msgid "creating array of `%T'" #~ msgstr "cration du tableau %T " #~ msgid "creating array of `%T', which is an abstract class type" #~ msgstr "cration d'un tableau %T , lequel est un type de classe abstraite" #~ msgid "`%T' is not a class, struct, or union type" #~ msgstr " %T n'est pas une classe, struct ou un type d'union" #~ msgid "use of `%s' in template" #~ msgstr "utilisation de %s dans le canevas" #~ msgid "dependent-name `%E' is parsed as a non-type, but instantiation yields a type" #~ msgstr "nom dpendant %E est analys comme un non type, mais son instantiation le rend comme un type" #~ msgid "say `typename %E' if a type is meant" #~ msgstr "utiliser typename %E si un type est dsir" #~ msgid "`%T' uses anonymous type" #~ msgstr " %T utilise un type anonyme" #~ msgid "`%T' uses local type `%T'" #~ msgstr " %T utilise un type local %T " #~ msgid "`%T' is a variably modified type" #~ msgstr " %T est type modifi de manire variable" #~ msgid "integral expression `%E' is not constant" #~ msgstr "expression intgrale %E n'est pas une constante" #~ msgid " trying to instantiate `%D'" #~ msgstr " tentative d'instanciation %D " #~ msgid "incomplete type unification" #~ msgstr "type d'unification incomplte" #~ msgid "use of `%s' in template type unification" #~ msgstr "utilisation de %s dans le canevas du type d'unification" #~ msgid "explicit instantiation of non-template `%#D'" #~ msgstr "instanciation explicite d'un non canevas %#D " #~ msgid "no matching template for `%D' found" #~ msgstr "non concordance de canevas pour %D repr" #~ msgid "explicit instantiation of `%#D'" #~ msgstr "instanciation explicite de %#D " #~ msgid "duplicate explicit instantiation of `%#D'" #~ msgstr "duplication d'instanciation explicite de %#D " #~ msgid "ISO C++ forbids the use of `extern' on explicit instantiations" #~ msgstr "ISO C++ interdit l'utilisation de extern sur instanciations explicites" #~ msgid "storage class `%D' applied to template instantiation" #~ msgstr "classe de stockage %D appliqu l'instanciation du canevas" #~ msgid "explicit instantiation of non-template type `%T'" #~ msgstr "instanciation explicite de type non canevas %T " #~ msgid "explicit instantiation of `%#T' before definition of template" #~ msgstr "instanciation explicite de %#T avant la dfinition de canevas" #~ msgid "ISO C++ forbids the use of `%s' on explicit instantiations" #~ msgstr "ISO C++ interdit l'utilisation de %s sur instanciations explicites" #~ msgid "duplicate explicit instantiation of `%#T'" #~ msgstr "duplication d'instanciation explicite de %#T " #~ msgid "explicit instantiation of `%D' but no definition available" #~ msgstr "instanciation explicite de %D mais pas de dfinition disponible" #~ msgid "`%#T' is not a valid type for a template constant parameter" #~ msgstr " %#T n'a pas un type valide pour un canevas de parametre de constante" #~ msgid "-frepo must be used with -c" #~ msgstr "-frepo doit tre utilis avec -c" #~ msgid "mysterious repository information in %s" #~ msgstr "dpt mystrieux d'informations dans %s" #~ msgid "can't create repository information file `%s'" #~ msgstr "ne peut crer le fichier %s pour dpt d'informations" #~ msgid "cannot use typeid with -fno-rtti" #~ msgstr "ne peut utiliser typeid avec -fno-rtti" #~ msgid "must #include before using typeid" #~ msgstr "doit utiliser #include avant d'utiliser typeid" #~ msgid "cannot create type information for type `%T' because its size is variable" #~ msgstr "ne peut crer une information pour le type %T parce que sa taille est variable" #~ msgid "dynamic_cast of `%#D' to `%#T' can never succeed" #~ msgstr "dynamic_cast de %#D vers %#T ne pourra jamais russir" #~ msgid "cannot dynamic_cast `%E' (of type `%#T') to type `%#T' (%s)" #~ msgstr "ne peut effectuer un dynamic_cast %E (du type %#T ) vers le type %#T (%s)" #~ msgid "`%T' is an ambiguous base of `%T'" #~ msgstr " %T est une base ambigu de %T " #~ msgid "`%T' is an inaccessible base of `%T'" #~ msgstr " %T est une base inaccessible de %T " #~ msgid "invalid covariant return type for `%#D'" #~ msgstr "type retourn covariant invalide pour %#D " #~ msgid " overriding `%#D'" #~ msgstr " crasant %#D " #~ msgid "conflicting return type specified for `%#D'" #~ msgstr "types retourns conflictuels spcifis pour %#D " #~ msgid "looser throw specifier for `%#F'" #~ msgstr "a plac un spcificateur pour %#F " #~ msgid " overriding `%#F'" #~ msgstr " crasant %#F " #~ msgid "`%#D' cannot be declared" #~ msgstr " %#D ne peut tre dclar" #~ msgid " since `%#D' declared in base class" #~ msgstr " alors que %#D est dclar dans la classe de base" #~ msgid "`%#D' needs a final overrider" #~ msgstr " %#D a besoin d'un craseur final" #~ msgid "type of asm operand `%E' could not be determined" #~ msgstr "type d'oprande asm %E ne peut tre dtermin" #~ msgid "invalid use of member `%D' in static member function" #~ msgstr "utilisation invalide du membre %D dans un membre statique de fonction" #~ msgid "from this location" #~ msgstr " partir de cette localisation" #~ msgid "object missing in reference to `%D'" #~ msgstr "objet manquant dans la rfrence %D " #~ msgid "arguments to destructor are not allowed" #~ msgstr "arguments au destructeur ne sont pas permis" #~ msgid "`this' is unavailable for static member functions" #~ msgstr " cela n'est pas disponible pour les membres statiques de fonctions" #~ msgid "invalid use of `this' in non-member function" #~ msgstr "utilisation invalide de ceci dans un non membre de fonction" #~ msgid "invalid use of `this' at top level" #~ msgstr "utilisation invalide de this hors de toute fonction" #~ msgid "invalid qualifying scope in pseudo-destructor name" #~ msgstr "tendue invalide du qualificateur dans un nom de pseudo-destructeur" #~ msgid "`%E' is not of type `%T'" #~ msgstr " %E n'est pas un type %T " #~ msgid "template type parameters must use the keyword `class' or `typename'" #~ msgstr "canevas de type de paramtres doit utiliser le mot cl class ou typename " #~ msgid "invalid use of type `%T' as a default value for a template template-parameter" #~ msgstr "utilisation invalide du type %T comme valeur par dfaut pour un canevas de paramtres de canevas" #~ msgid "invalid use of `%D' as a default value for a template template-parameter" #~ msgstr "utilisation invalide de %D comme valeur par dfaut pour un canevas de paramtres de canevas" #~ msgid "invalid default argument for a template template parameter" #~ msgstr "utilisation invalide d'argumenet pour un canevas de paramtres de canevas" #~ msgid "definition of `%#T' inside template parameter list" #~ msgstr "dfinition de %#T l'intrieur d'un canevas de liste de paramtres" #~ msgid "invalid definition of qualified type `%T'" #~ msgstr "dfinition invalide d'un type qualifi %T " #~ msgid "previous definition of `%#T'" #~ msgstr "dfinition prcdente de %#T " #~ msgid "invalid base-class specification" #~ msgstr "spcification de base de classe invalide" #~ msgid "base class `%T' has cv qualifiers" #~ msgstr "classe de base %T a des qualificateurs cv" #~ msgid "multiple declarators in template declaration" #~ msgstr "dclarateurs multiples dans la dclaration de canevas" #~ msgid "incomplete type `%T' used in nested name specifier" #~ msgstr "type %T incomplet utilis dans un spcificateur de noms imbriqu" #~ msgid "`%D' is not a member of `%T'" #~ msgstr " %D n'est pas un membre de %T " #~ msgid "`%D' is not a member of `%D'" #~ msgstr " %D n'est pas un membre de %D " #~ msgid "template parameter `%D' of type `%T' is not allowed in an integral constant expression because it is not of integral or enumeration type" #~ msgstr "paramtre %D du canevas du type %T ne sont pas permises dans une expression intgrale de constante parce qu'elle n'est pas intgral ou un type numration" #~ msgid "`%D' cannot appear in a constant-expression" #~ msgstr " %D ne peut apparatre dans une expression de constante" #~ msgid "use of namespace `%D' as expression" #~ msgstr "utilisation d'un espace de dnomes %D comme expression" #~ msgid "use of class template `%T' as expression" #~ msgstr "utilisation du canevas de classe %T comme expression" #~ msgid "request for member `%D' is ambiguous in multiple inheritance lattice" #~ msgstr "requte du membre %D est ambiqu dans de mutliples hritage de treillis" #~ msgid "use of %s from containing function" #~ msgstr "utilisation de %s d'un fonction contenante" #~ msgid " `%#D' declared here" #~ msgstr " %#D dclar ici" #~ msgid "type of `%E' is unknown" #~ msgstr "type %E est inconnu" #~ msgid "non-lvalue in %s" #~ msgstr "n'est pas un membre gauche dans %s" #~ msgid "`%V' qualifiers cannot be applied to `%T'" #~ msgstr "qualificateur %V ne peut pas tre appliqu %T " #~ msgid "`%s' attribute can only be applied to Java class definitions" #~ msgstr "attribut %s peut seulement tre appliqu aux dfinitions de classes Java" #~ msgid "`%s' attribute can only be applied to class definitions" #~ msgstr "attribut %s peut seulement tre appliqu aux dfinitions de classes" #~ msgid "`%s' is obsolete; g++ vtables are now COM-compatible by default" #~ msgstr " %s est obsolte; vtables g++ sont maintenant COM-compatibles par dfaut" #~ msgid "requested init_priority is not an integer constant" #~ msgstr "init_priority demand n'est pas une constante entire" #~ msgid "can only use `%s' attribute on file-scope definitions of objects of class type" #~ msgstr "peut seulement utiliser l'attribut %s sur la porte de fichier de dfinitions des objets de type de classe" #~ msgid "requested init_priority is out of range" #~ msgstr "init_priority demand est hors limite" #~ msgid "requested init_priority is reserved for internal use" #~ msgstr "init_priority demand est rserv pour un usage interne" #~ msgid "`%s' attribute is not supported on this platform" #~ msgstr "attribut %s n'est pas support sur cette plate-forme" #~ msgid "lang_* check: failed in %s, at %s:%d" #~ msgstr "vrification lang_* : ched dans %s, %s:%d" #~ msgid "%s between distinct pointer types `%T' and `%T' lacks a cast" #~ msgstr "%s entre des types distincs de pointeurs %T et %T manque de transtypage" #~ msgid "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function" #~ msgstr "ISO C++ interdit %s entre les pointeurs de type void * et les pointeurs de fonctions" #~ msgid "%s between distinct pointer-to-member types `%T' and `%T' lacks a cast" #~ msgstr "%s entre des types distincs de pointeurs vers les membres %T et %T manque de transtypage" #~ msgid "invalid application of `%s' to a member function" #~ msgstr "application invalide de %s une fonction membre" #~ msgid "invalid application of `%s' to a bit-field" #~ msgstr "application invalide de %s sur un champ de bits" #~ msgid "ISO C++ forbids applying `%s' to an expression of function type" #~ msgstr "ISO C++ interdit l'application de %s une expression d'un type de fonction" #~ msgid "invalid use of non-static member function" #~ msgstr "utilisation invalide d'un membre non statique de fonction" #~ msgid "deprecated conversion from string constant to `%T'" #~ msgstr "conversion obsolte de la chane de constante vers %T " #~ msgid "request for member `%D' in `%E', which is of non-class type `%T'" #~ msgstr "requte du membre %D dans %E , lequel n'est pas de type classe %T " #~ msgid "invalid use of nonstatic data member '%E'" #~ msgstr "utilisation invalide d'un membre de donnes non statique %E " #~ msgid "invalid access to non-static data member `%D' of NULL object" #~ msgstr "accs invalide un membre de donnes non statique %D d'un objet null" #~ msgid "(perhaps the `offsetof' macro was used incorrectly)" #~ msgstr "(peut-tre que le macro offsetof a t utilis incorrectement)" #~ msgid "the type being destroyed is `%T', but the destructor refers to `%T'" #~ msgstr "le type devant tre dtruit est %T , mais le destructeur rfre %T " #~ msgid "`%D::%D' is not a member of `%T'" #~ msgstr " %D::%D n'est pas un membre de %T " #~ msgid "`%T' is not a base of `%T'" #~ msgstr " %D n'est pas une base de %T " #~ msgid "'%D' has no member named '%E'" #~ msgstr " %D n'a pas de membre nomm %E " #~ msgid "`%D' is not a member template function" #~ msgstr " %D n'est pas une membre du canevas de fonction" #~ msgid "`%T' is not a pointer-to-object type" #~ msgstr " %T n'est pas un type pointeur-vers-objet" #~ msgid "invalid use of `%s' on pointer to member" #~ msgstr "utilisation invalide de %s sur un pointeur vers un membre" #~ msgid "invalid type argument" #~ msgstr "type d'argument invalide" #~ msgid "ISO C++ forbids subscripting non-lvalue array" #~ msgstr "ISO C++ interdit le souscriptage de non lvalue de tableau" #~ msgid "subscripting array declared `register'" #~ msgstr "souscriptage de tableau dclar register " #~ msgid "object missing in use of `%E'" #~ msgstr "objet manquant dans l'usage de %E " #~ msgid "ISO C++ forbids calling `::main' from within program" #~ msgstr "ISO C++ interdit l'appel de ::main depuis l'intrieur du programme" #~ msgid "must use .* or ->* to call pointer-to-member function in `%E (...)'" #~ msgstr "doit utiliser .* ou ->* pour l'appel de la fonction pointer-to-member dans %E (...) " #~ msgid "`%E' cannot be used as a function" #~ msgstr " %E ne peut tre utilis comme une fonction" #~ msgid "too many arguments to %s `%+#D'" #~ msgstr "trop d'arguments pour %s %+#D " #~ msgid "at this point in file" #~ msgstr " ce point dans le fichier" #~ msgid "parameter %P of `%D' has incomplete type `%T'" #~ msgstr "paramtre %P de %D a un type incomplet %T " #~ msgid "parameter %P has incomplete type `%T'" #~ msgstr "paramtre %P a un type incomplet %T " #~ msgid "too few arguments to %s `%+#D'" #~ msgstr "pas assez d'argument pour %s %+#D " #~ msgid "assuming cast to type `%T' from overloaded function" #~ msgstr "transtypage vers le type %T est assum partir de la fonction surcharge" #~ msgid "division by zero in `%E / 0'" #~ msgstr "division par zro dans %E / 0 " #~ msgid "division by zero in `%E / 0.'" #~ msgstr "division par zro dans %E / 0. " #~ msgid "division by zero in `%E %% 0'" #~ msgstr "division par zro dans %E %% 0 " #~ msgid "division by zero in `%E %% 0.'" #~ msgstr "division par zro dans %E %% 0. " #~ msgid "%s rotate count is negative" #~ msgstr "compteur de rotation %s est ngatif" #~ msgid "%s rotate count >= width of type" #~ msgstr "compteur de rotation %s >= largeur du type" #~ msgid "ISO C++ forbids comparison between pointer and integer" #~ msgstr "ISO C++ interdit la comparaison entre un pointeur et un entier" #~ msgid "comparison between types `%#T' and `%#T'" #~ msgstr "comparaison entre les types %#T et %#T " #~ msgid "comparison between signed and unsigned integer expressions" #~ msgstr "comparaison entre des expressions entires signe et non signe" #~ msgid "invalid operands of types `%T' and `%T' to binary `%O'" #~ msgstr "oprandes invalides pour les types %T et %T en binaire %O " #~ msgid "NULL used in arithmetic" #~ msgstr "NULL utilis en arithmtique" #~ msgid "ISO C++ forbids using pointer of type `void *' in subtraction" #~ msgstr "ISO C++ interdit l'utilisation d'un pointeur de type void * dans une soustraction" #~ msgid "ISO C++ forbids using pointer to a function in subtraction" #~ msgstr "ISO C++ interdit l'utilisation d'un pointeur survers une fonction dans une soustraction" #~ msgid "ISO C++ forbids using pointer to a method in subtraction" #~ msgstr "ISO C++ interdit l'utilisation d'un pointeur survers une mthode dans une soustraction" #~ msgid "invalid use of a pointer to an incomplete type in pointer arithmetic" #~ msgstr "utilisation invalide d'un pointeur vers un type incomplet dans un pointeur arithmtique" #~ msgid "invalid use of '%E' to form a pointer-to-member-function. Use a qualified-id." #~ msgstr "utilisation invalide de %E pour former pointer-to-member-function. Utiliser un identifateur qualifi" #~ msgid "parenthesis around '%E' cannot be used to form a pointer-to-member-function" #~ msgstr "parenthses autour de %E ne peuvent tre utilises pour former pointer-to-member-function" #~ msgid "taking address of temporary" #~ msgstr "prise de l'adresse du temporaire" # FIXME: I18N #~ msgid "ISO C++ forbids %sing an enum" #~ msgstr "ISO C++ interdit de %ser un enum" #~ msgid "cannot %s a pointer to incomplete type `%T'" #~ msgstr "ne peut utiliser %s comme pointeur sur un type incomplet %T " #~ msgid "ISO C++ forbids %sing a pointer of type `%T'" #~ msgstr "ISO C++ interdit %s utilisation d'un pointeur de type %T " #~ msgid "cast to non-reference type used as lvalue" #~ msgstr "transtypage d'un type non rfrenc utilis comme membre gauche" #~ msgid "invalid use of `--' on bool variable `%D'" #~ msgstr "utilisation invalide de -- sur une variable boolenne %D " #~ msgid "ISO C++ forbids taking address of function `::main'" #~ msgstr "ISO C++ interdit de prendre l'adresse d'une fonction ::main" #~ msgid "ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say `&%T::%D'" #~ msgstr "ISO C++ interdit de prendre l'adress d'un membre de fonction non statique non qualifi ou entre parenthses pour former un pointeur d'un membre de fonction. Utilisers &%T::%D" #~ msgid "ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say `&%T::%D'" #~ msgstr "ISO C++ interdit de prendre l'adresse d'une borne d'un membre de fontion pour former un membre la fonction. Disons &%T::%D" #~ msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression" #~ msgstr "ISO C++ interdit de prendre l'adresse du transtypage vers une expression n'etant pas membre gauche" #~ msgid "unary `&'" #~ msgstr "unaire & " #~ msgid "attempt to take address of bit-field structure member `%D'" #~ msgstr "tentative de prise d'adresse du membre %D d'une structure de champ de bits" #~ msgid "taking address of destructor" #~ msgstr "prise de l'adresse du destructeur" #~ msgid "taking address of bound pointer-to-member expression" #~ msgstr "prise de l'adresse de la borne de l'expression d'un pointeur-vers-un membre" #~ msgid "cannot create pointer to reference member `%D'" #~ msgstr "ne peut dclarer un pointeur vers le membre de rfrence %D " #~ msgid "cannot take the address of `this', which is an rvalue expression" #~ msgstr "ne peut prendre l'adresse de ceci , laquelle est une expression rvalue" #~ msgid "address requested for `%D', which is declared `register'" #~ msgstr "adresse requise pour %D, lequel est dclar register " #~ msgid "%s expression list treated as compound expression" #~ msgstr "%s liste d'expressions traite comme une expression compose" #~ msgid "%s from type `%T' to type `%T' casts away constness" #~ msgstr "%S partir du %T vers le type %T provoque un transtypage sans constante" #~ msgid "invalid static_cast from type `%T' to type `%T'" #~ msgstr "static_cast invalide du type %T au type %T " #~ msgid "invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'" #~ msgstr "reinterpret_cast invalide d'une expression rvalue de type %T vers le type %T " #~ msgid "reinterpret_cast from `%T' to `%T' loses precision" #~ msgstr "reinterpret_cast de %T vers %T gnre une perte de prcision" #~ msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object" #~ msgstr "ISO C++ interdit le transtypage entre un pointeur de fonction et un pointeur d'objet" #~ msgid "invalid reinterpret_cast from type `%T' to type `%T'" #~ msgstr "reinterpret_cast invalide partir du type %T vers le type %T " #~ msgid "invalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member type" #~ msgstr "utilisation invalide de const_cast avec le type %T , lequel n'est pas un pointeur, une rfrence, ni un type pointeur-vers-donnes-membre" #~ msgid "invalid use of const_cast with type `%T', which is a pointer or reference to a function type" #~ msgstr "utilisation invalide de const_cast avec le type %T , lequel est un pointeur ou un rfrence un type de fonction" #~ msgid "invalid const_cast of an rvalue of type `%T' to type `%T'" #~ msgstr "const_cast invalide de la rvalue du type %T vers le type %T " #~ msgid "invalid const_cast from type `%T' to type `%T'" #~ msgstr "const_cast invalide partir du type %T vers le type %T " #~ msgid "ISO C++ forbids casting to an array type `%T'" #~ msgstr "ISO C++ interdit le transtypage vers un type tableau %T " #~ msgid "invalid cast to function type `%T'" #~ msgstr "transtypage invalide pour un type de fonction %T " #~ msgid "cast from `%T' to `%T' discards qualifiers from pointer target type" #~ msgstr "transtypage de %T vers %T carte les qualificateurs du type cible du pointeur" #~ msgid "cast from `%T' to `%T' increases required alignment of target type" #~ msgstr "transtypage de %T vers %T augmente l'alignement requis pour le type cibl" #~ msgid " in evaluation of `%Q(%#T, %#T)'" #~ msgstr " lors de l'valuation de %Q(%#T, %#T) " #~ msgid "ISO C++ forbids cast to non-reference type used as lvalue" #~ msgstr "ISO C++ interdit le transtypage d'un type non rfrenc utilis comme membre gauche" #~ msgid "incompatible types in assignment of `%T' to `%T'" #~ msgstr "type incompatible dans l'affectation de %T vers %T " #~ msgid "ISO C++ forbids assignment of arrays" #~ msgstr "ISO C++ interdit l'affectation de tableaux" #~ msgid " in pointer to member function conversion" #~ msgstr " dans la conversion d'un pointeur vers un membre de fonction" #~ msgid " in pointer to member conversion" #~ msgstr " dans la conversion d'un pointeur vers un membre" #~ msgid "pointer to member cast via virtual base `%T'" #~ msgstr "pointeur vers un membre transtyp via la base virtuelle %T " #~ msgid "pointer to member conversion via virtual base `%T'" #~ msgstr "conversion de pointeur membre l'aide de la base virtuelle %T " #~ msgid "invalid conversion to type `%T' from type `%T'" #~ msgstr "conversion invalide vers un type %T partir du type %T " #~ msgid "passing NULL used for non-pointer %s %P of `%D'" #~ msgstr "passage d'un NULL utilis pour un non pointeur %s %P de %D " #~ msgid "%s to non-pointer type `%T' from NULL" #~ msgstr "%s vers un type non pointeur %T partir d'un NULL" #~ msgid "passing `%T' for %s %P of `%D'" #~ msgstr "passage %T pour %s %P de %D " #~ msgid "%s to `%T' from `%T'" #~ msgstr "%s vers %T partir de %T " #~ msgid "passing negative value `%E' for %s %P of `%D'" #~ msgstr "passage de valeur ngative %E pour %s %P de %D " #~ msgid "%s of negative value `%E' to `%T'" #~ msgstr "%s de valeur ngative %E vers %T " #~ msgid "cannot convert `%T' to `%T' for argument `%P' to `%D'" #~ msgstr "ne peut convertir %T %T pour l'argument %P vers %D " #~ msgid "cannot convert `%T' to `%T' in %s" #~ msgstr "ne peut convertir %T vers %T dans %s" #~ msgid "in passing argument %P of `%+D'" #~ msgstr "dans le passage de l'argument %P de %+D " #~ msgid "returning reference to temporary" #~ msgstr "retourn la rfrence vers le temporaire" #~ msgid "reference to non-lvalue returned" #~ msgstr "une rfrence vers quelque chose n'tant pas un membre gauche a t retourn" #~ msgid "reference to local variable `%D' returned" #~ msgstr "rfrence vers une variable locale %D retourn" #~ msgid "address of local variable `%D' returned" #~ msgstr "adresse d'une variable locale %D retourne" #~ msgid "returning a value from a destructor" #~ msgstr "retourn une valeur du destructeur" #~ msgid "cannot return from a handler of a function-try-block of a constructor" #~ msgstr "ne peut retourner d'un handler d'une fonction try-block d'un constructeur" #~ msgid "returning a value from a constructor" #~ msgstr "retourn une valeur d'un constructeur" #~ msgid "return-statement with no value, in function returning '%T'" #~ msgstr "dclaration retourner sans valeur dans une fonction retournant %T " #~ msgid "return-statement with a value, in function returning 'void'" #~ msgstr "dclaration a retourner avec une valeur dans une fonction retournant un void " #~ msgid "`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)" #~ msgstr " operator new ne doit pas retourner NULL moins qu'il ne soit dclar throw() (ou -fcheck-new est utilise)" #~ msgid "type `%T' is not a base type for type `%T'" #~ msgstr "type %T n'est pas un type de base pour le type %T " #~ msgid "cannot declare variable `%D' to be of type `%T'" #~ msgstr "ne peut dclarer la variable %D comme tant de type %T " #~ msgid "cannot declare parameter `%D' to be of type `%T'" #~ msgstr "ne peut dclarer la paramtre %D comme tant de type %T " #~ msgid "cannot declare field `%D' to be of type `%T'" #~ msgstr "ne peut dclarer la champ %D comme tant de type %T " #~ msgid "invalid return type for member function `%#D'" #~ msgstr "type retourn invalide pour le membre de la fonction %#D " #~ msgid "invalid return type for function `%#D'" #~ msgstr "type retourn invalide pour la fonction %#D " #~ msgid "cannot allocate an object of type `%T'" #~ msgstr "ne peut allouer un objet de type %T " #~ msgid " because the following virtual functions are abstract:" #~ msgstr " parce que les fonctions viruelles suivantes sont abstraites:" #~ msgid "\t%#D" #~ msgstr "\t%#D" #~ msgid " since type `%T' has abstract virtual functions" #~ msgstr " depuis que le type %T a des fonctions virtuelles abstraites" #~ msgid "constructor syntax used, but no constructor declared for type `%T'" #~ msgstr "syntaxe de constructeur utilis mais aucun constructeur dclar pour le type %T " #~ msgid "cannot initialize arrays using this syntax" #~ msgstr "ne peut initialiser les tableaux en utilisant la syntaxe" #~ msgid "initializing array with parameter list" #~ msgstr "initialise le tableau avec la liste des paramtres" #~ msgid "initializer for scalar variable requires one element" #~ msgstr "l'initialisation de variable scalaire requiert un lment" #~ msgid "braces around scalar initializer for `%T'" #~ msgstr "accolades autour de l'initialiseur scalaire pour %T " #~ msgid "ignoring extra initializers for `%T'" #~ msgstr "initialiseurs superflus pour %T ignors" #~ msgid "variable-sized object of type `%T' may not be initialized" #~ msgstr "un objet de taille variable de type %T peut ne pas tre initialis" #~ msgid "subobject of type `%T' must be initialized by constructor, not by `%E'" #~ msgstr "sous-objet de type %T doit tre initialis par un constructeur, non pas par %E " #~ msgid "aggregate has a partly bracketed initializer" #~ msgstr "aggrgat a un initialiseur partiellement entour d'accolades" #~ msgid "non-trivial labeled initializers" #~ msgstr "initialiseur tiquet de manire non trivial" #~ msgid "non-empty initializer for array of empty elements" #~ msgstr "initialiseurs non vides pour un tableau d'lments vides" #~ msgid "initializer list for object of class with virtual base classes" #~ msgstr "liste d'initialiseurs pour les objets de classe avec classes de base virtuelles" #~ msgid "initializer list for object of class with base classes" #~ msgstr "liste d'initialiseurs pour les objets de classe avec classes de base" #~ msgid "initializer list for object using virtual functions" #~ msgstr "liste d'initialiseurs pour objet utilisant des fonctions virtuelles" #~ msgid "missing initializer for member `%D'" #~ msgstr "initialiseur manquant pour le membre %D " #~ msgid "uninitialized const member `%D'" #~ msgstr "membre de constante non initialis pour %D " #~ msgid "member `%D' with uninitialized const fields" #~ msgstr "membre %D avec des champs de constantes non initialise" #~ msgid "member `%D' is uninitialized reference" #~ msgstr "membre %D est une rfrence non initialise" #~ msgid "index value instead of field name in union initializer" #~ msgstr "valeur index au lieu du nom de champ dans l'initialiseur d'union" #~ msgid "no field `%D' in union being initialized" #~ msgstr "pas de champ %D dans l'aggrgat n'a t initialis" #~ msgid "union `%T' with no named members cannot be initialized" #~ msgstr "aggrgat %T sans mambre nomm ne peut tre initialis" #~ msgid "excess elements in aggregate initializer" #~ msgstr "lments en excs dans l'initialiseur d'aggrgat" #~ msgid "circular pointer delegation detected" #~ msgstr "dlgation de pointeur circulaire dtect" #~ msgid "base operand of `->' has non-pointer type `%T'" #~ msgstr "l'oprande de base de -> a un type non pointeur %T " #~ msgid "result of `operator->()' yields non-pointer result" #~ msgstr "rsultat de operator->() laisse comme rsultat un non pointeur" #~ msgid "base operand of `->' is not a pointer" #~ msgstr "l'oprande de base de -> n'est pas un pointeur" #~ msgid "`%E' cannot be used as a member pointer, since it is of type `%T'" #~ msgstr " %E ne peut tre utilis comme pointeur de membre, alors qu'il est de type %T " #~ msgid "cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'" #~ msgstr "ne peut appliquer un pointeur de membre %E %E , lequel n'est pas un type d'aggrgat %T " #~ msgid "member type `%T::' incompatible with object type `%T'" #~ msgstr "type du membre %T:: incompatible avec le type d'objet %T " #~ msgid "call to function `%D' which throws incomplete type `%#T'" #~ msgstr "l'appel la fonction %D laquelle carte le type incomplet %T " #~ msgid "call to function which throws incomplete type `%#T'" #~ msgstr "l'appel la fonction laquelle carte le type incomplet %T " #~ msgid "%s is deprecated, please see the documentation for details" #~ msgstr "%s est obsolte, SVP voir la documentation pour les dtails" #~ msgid "note:" #~ msgstr "note :" #~ msgid "warning:" #~ msgstr "avertissement :" #~ msgid "fatal:" #~ msgstr "fatal :" #~ msgid "(continued):" #~ msgstr "(suite) :" #~ msgid "[REPORT BUG!!] %" #~ msgstr "[RAPPORTER L'ANOMALIE!!] %" #~ msgid "[REPORT BUG!!]" #~ msgstr "[RAPPORTER L'ANOMALIE!!]" #~ msgid "ASSIGN'ed label cannot fit into `%A' at %0 -- using wider sibling" #~ msgstr "l'tiquette affecte ne peut s'insrer dans %A %0 - utilisation d'un voisinage plus grand" #~ msgid "no INTEGER type can hold a pointer on this configuration" #~ msgstr "AUCUN type ENTIER ne peut tenir un pointeur sur cette configuration" #~ msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide," #~ msgstr "configuration : REAL, INTEGER, et LOGICAL ont %d bits," #~ msgid "and pointers are %d bits wide, but g77 doesn't yet work" #~ msgstr "et les pointeurs ont %d bits, mais g77 ne fonctionne pas encore" #~ msgid "properly unless they all are 32 bits wide" #~ msgstr "correctement moins qu'ils aient tous 32 bits de largeur" #~ msgid "Please keep this in mind before you report bugs." #~ msgstr "SVP garder cela en tte avant de rapporter les anomalies." #~ msgid "configuration: char * holds %d bits, but ftnlen only %d" #~ msgstr "configuration: char * contient %d bits, mais ftnlen seulement %d" #~ msgid "" #~ "configuration: char * holds %d bits, but INTEGER only %d --\n" #~ " ASSIGN statement might fail" #~ msgstr "" #~ "configuration: char * contient %d bits, mais INTEGER seulement %d --\n" #~ " dclaration ASSIGN pourrait chouer" #~ msgid "In statement function" #~ msgstr "Dans la dclaration de fonction" #~ msgid "Outside of any program unit:\n" #~ msgstr "En dehors de toute unit de programme:\n" #~ msgid "%A from %B at %0%C" #~ msgstr "%A partir de %B %0%C" #~ msgid "At %0, INCLUDE file %A exists, but is not readable" #~ msgstr " %0, fichier INCLUDE %A existe mais n'est pas lisible" #~ msgid "At %0, INCLUDE nesting too deep" #~ msgstr " %0, imbrication du INCLUDE est trop profonde" #~ msgid "Two arithmetic operators in a row at %0 and %1 -- use parentheses" #~ msgstr "Deux oprateurs arithmtiques dans la range %0 et %1 -- utiliser des parenthses" #~ msgid "Operator at %0 has lower precedence than that at %1 -- use parentheses" #~ msgstr "L'oprateur %0 a une prcdence plus basse que celui %1 -- utiliser des parenthses" #~ msgid "Use .EQV./.NEQV. instead of .EQ./.NE. at %0 for LOGICAL operands at %1 and %2" #~ msgstr "Utiliser .EQV./.NEQV. au lieu de .EQ./.NE. %0 pour les oprandes LOGICAL %1 et %2" #~ msgid "Unsupported operand for ** at %1 -- converting to default INTEGER" #~ msgstr "Oprande non supporte pour ** %1 -- conversion INTEGER par dfaut" #~ msgid "overflowed output arg list for `%s'" #~ msgstr "dbordement de la liste d'arguments de sortie pour %s " #~ msgid "" #~ "GNU Fortran comes with NO WARRANTY, to the extent permitted by law.\n" #~ "You may redistribute copies of GNU Fortran\n" #~ "under the terms of the GNU General Public License.\n" #~ "For more information about these matters, see the file named COPYING\n" #~ "or type the command `info -f g77 Copying'.\n" #~ msgstr "" #~ "GNU Fortran est fourni sans aucune garantie, selon les limites permises par la loi.\n" #~ "Vous pouvez redistribuer des copies de GNU Fortran\n" #~ "selon les termes de la GNU General Public License.\n" #~ "Pour plus d'informations ce sujet, consulter le fichier portant le nom COPYING\n" #~ "ou taper la commande `info -f g77 Copying'.\n" #~ msgid "--driver no longer supported" #~ msgstr "--driver n'est plus support" #~ msgid "argument to `%s' missing" #~ msgstr "argument pour %s est manquant" #~ msgid "no input files; unwilling to write output files" #~ msgstr "aucun fichier d'entre; pas d'accord pour crire dans les fichiers de sortie" #~ msgid "Implicit declaration of `%A' at %0" #~ msgstr "dclaration implicite de %A %0" #~ msgid "Non-ISO-C-standard escape sequence `\\%A' at %0" #~ msgstr "squence d'chappement non conforme au standard ISO C \\%A %0" #~ msgid "Unknown escape sequence `\\%A' at %0" #~ msgstr "squence d'chappement inconnue \\%A %0" #~ msgid "Unterminated escape sequence `\\' at %0" #~ msgstr "squence d'chappement non termine \\ at %0" #~ msgid "Unknown escape sequence `\\' followed by char code 0x%A at %0" #~ msgstr "squence d'chappement inconnue \\ suivi par le code de caractres 0x%A at %0" #~ msgid "\\x used at %0 with no following hex digits" #~ msgstr "\\x utilis %0 sans tre suivi des chiffres hexdcimaux" #~ msgid "Hex escape at %0 out of range" #~ msgstr "chappement hexadcimal %0 hors limite" #~ msgid "Escape sequence at %0 out of range for character" #~ msgstr "squence d'chappement %0 hors limite pour le type caractre" #~ msgid "hex escape out of range" #~ msgstr "chappement hexadcimal hors limite" #~ msgid "non-ANSI-standard escape sequence, `\\%c'" #~ msgstr "squence d'chappement n'est pas ANSI standard: \\%c'" #~ msgid "non-ISO escape sequence `\\%c'" #~ msgstr "squence d'chappement non ISO \\%c'" #~ msgid "unknown escape sequence `\\%c'" #~ msgstr "squence d'chappement inconnue: \\%c'" #~ msgid "unknown escape sequence: `\\' followed by char code 0x%x" #~ msgstr "squence d'chappement inconnue: \\ suivi par le code de caractres 0x%x" #~ msgid "badly formed directive -- no closing quote" #~ msgstr "directive mal compose -- pas de guillement ou d'apostrophe de fermeture" #~ msgid "#-lines for entering and leaving files don't match" #~ msgstr "#-lines pour entrer et quitter les fichiers ne concordent pas" #~ msgid "bad directive -- missing close-quote" #~ msgstr "directive errone -- manque un apostrophe ou un guillemet de fermeture" #~ msgid "invalid #ident" #~ msgstr "#ident invalide" #~ msgid "undefined or invalid # directive" #~ msgstr "directive # non dfinie ou invalide" #~ msgid "invalid #line" #~ msgstr "#line invalide" #~ msgid "use `#line ...' instead of `# ...' in first line" #~ msgstr "utiliser #line ... au lieu de # ... dans la premire ligne" #~ msgid "invalid #-line" #~ msgstr "#-line invalide" #~ msgid "Null character at %0 -- line ignored" #~ msgstr "caractre null %0 -- ligne ignore" #~ msgid "INCLUDE at %0 not the only statement on the source line" #~ msgstr "INCLUDE %0 n'est pas la seule dclaration sur la ligne source" #~ msgid "ASSIGNed FORMAT specifier is too small" #~ msgstr "spcificateur dans ASSIGN FORMAT est trop petit" #~ msgid "SELECT CASE on CHARACTER type (at %0) not supported -- sorry" #~ msgstr "SLECTION du CASE sur un type CHARACTER ( %0) n'est pas support -- dsol" #~ msgid "SELECT (at %0) has duplicate cases -- check integer overflow of CASE(s)" #~ msgstr "SELECT ( %0) possde des cases doubles -- vrifier le dbordement d'entier des CASES" #~ msgid "ASSIGN to variable that is too small" #~ msgstr "ASSIGN la variable est trop petit" #~ msgid "ASSIGNed GOTO target variable is too small" #~ msgstr "variable cible par ASSIGN GOTO est trop petite" #~ msgid "Local adjustable symbol `%A' at %0" #~ msgstr "Symbole local ajustable %A %0" #~ msgid "data initializer on host with different endianness" #~ msgstr "initialiseur de donnes sur l'hte a un alignement des octets diffrent (endian)" #~ msgid "-fvxt-not-f90 no longer supported -- try -fvxt" #~ msgstr "-fvxt-not-f90 n'est plus support -- essayer -fvxt" #~ msgid "-ff90-not-vxt no longer supported -- try -fno-vxt -ff90" #~ msgstr "-ff90-not-vxt n'est plus support -- essayer -fno-vxt -ff90" #~ msgid "-fdebug-kludge is disabled, use normal debugging flags" #~ msgstr "-fdebug-kludge est dsactiv, utiliser le fanion normal de mise au point" #~ msgid "Missing first operand for binary operator at %0" #~ msgstr "premire oprande manquante pour l'oprateur biunaire %0" #~ msgid "Zero-length character constant at %0" #~ msgstr "constante caractre de longueur zro %0" #~ msgid "Invalid token at %0 in expression or subexpression at %1" #~ msgstr "lment lexical invalide %0 dans l'expression ou la sous-expression %1" #~ msgid "Missing operand for operator at %1 at end of expression at %0" #~ msgstr "Oprande manquante pour l'oprateur %1 la fin de l'expresssion %0" #~ msgid "Label %A already defined at %1 when redefined at %0" #~ msgstr "tiquette %A dj dfinie %1 et redfinie %0" #~ msgid "Unrecognized character at %0 [info -f g77 M LEX]" #~ msgstr "Caractre non reconnue %0 [info -f g77 M LEX]" #~ msgid "Label definition %A at %0 on empty statement (as of %1)" #~ msgstr "Dfinition d'tiquette %A %0 dans une dclaration vide (comme %1)" #~ msgid "Invalid first character at %0 [info -f g77 M LEX]" #~ msgstr "Premier caractre invalide %0 [info -f g77 M LEX]" #~ msgid "Line too long as of %0 [info -f g77 M LEX]" #~ msgstr "Ligne trop longue tel que %0 [info -f g77 M LEX]" #~ msgid "Non-numeric character at %0 in label field [info -f g77 M LEX]" #~ msgstr "Caractre non-numrique %0 dans le champ d'tiquette [info -f g77 M LEX]" #~ msgid "Label number at %0 not in range 1-99999" #~ msgstr "Numro d'tiquette %0 n'est pas entre les bornes 1-99999" #~ msgid "At %0, '!' and '/*' are not valid comment delimiters" #~ msgstr " %0, ! et /* ne sont pas des dlimiteurs de commentaire valides" #~ msgid "Continuation indicator at %0 must appear in column 6 [info -f g77 M LEX]" #~ msgstr "Indicateur de continuation %0 doit apparatre en colonne 6 [info -f g77 M LEX]" #~ msgid "Label at %0 invalid with continuation line indicator at %1 [info -f g77 M LEX]" #~ msgstr "tiquette invalide %0 avec l'indicateur de continuation de ligne %1 [info -f g77 M LEX]" #~ msgid "Character constant at %0 has no closing apostrophe at %1" #~ msgstr "constante caractre %0 n'a pas d'apostrophe de fermeture %1" #~ msgid "Hollerith constant at %0 specified %A more characters than are present as of %1" #~ msgstr "Constante Hollerith %0 spcifie %A a plus de caractres que ceux prsents dans %1" #~ msgid "Missing close parenthese at %0 needed to match open parenthese at %1" #~ msgstr "Paranethse fermante amnquante %0 ncessaire pour pairer la parenthse ouverte %1" #~ msgid "Integer at %0 too large" #~ msgstr "entier %0 est trop grand" #~ msgid "Period at %0 not followed by digits for floating-point number or by `NOT.', `TRUE.', or `FALSE.'" #~ msgstr "Priode %0 n'est pas suivie de chiffres en nombre flottant ou de NOT., TRUE., ou FALSE. " #~ msgid "Missing close-period between `.%A' at %0 and %1" #~ msgstr "Fermeture de priode manquante entre .%A %0 et %1" #~ msgid "Invalid exponent at %0 for real constant at %1; nondigit `%A' in exponent field" #~ msgstr "Exposant invalide %0 pour la constante relle %1; %A n'est pas un chiffre dans le champ de l'exposant" #~ msgid "Missing value at %1 for real-number exponent at %0" #~ msgstr "Valeur manquante %1 pour l'exposant d'un nombre real %0" #~ msgid "Expected binary operator between expressions at %0 and at %1" #~ msgstr "Oprateur binaire attendu entre les expressions %0 et %1" #~ msgid "Semicolon at %0 is an invalid token" #~ msgstr "Point-virgule ( ; ) en %0 est un lment lexical invalide" #~ msgid "Extraneous comma in FORMAT statement at %0" #~ msgstr "Virgule superflue dans la dclaration de FORMAT %0" #~ msgid "Missing comma in FORMAT statement at %0" #~ msgstr "Virgule manquante dans la dclaration de FORMAT %0" #~ msgid "Spurious sign in FORMAT statement at %0" #~ msgstr "faux signe dans la dclaration de FORMAT %0" #~ msgid "Spurious number in FORMAT statement at %0" #~ msgstr "faux nombre dans la dclaration de FORMAT %0" #~ msgid "Spurious text trailing number in FORMAT statement at %0" #~ msgstr "faux texte terminant le nombre dans la dclaration de FORMAT %0" #~ msgid "Unrecognized FORMAT specifier at %0" #~ msgstr "spcificateur de FORMAT non reconnu %0" #~ msgid "Missing close-parenthese(s) in FORMAT statement at %0" #~ msgstr "Parenthse(s) fermante(s) manquante(s) dans la dclaration de FORMAT %0" #~ msgid "Missing number following period in FORMAT statement at %0" #~ msgstr "Nombre manquant suivant la priode dans la dclaration de FORMAT %0" #~ msgid "Missing number following `E' in FORMAT statement at %0" #~ msgstr "Nombre manquant suivant E dans la dclaration de FORMAT %0" #~ msgid "Spurious trailing comma preceding terminator at %0" #~ msgstr "fausse virgule qui trane dans la prcdente terminaison %0" #~ msgid "At %0, specify OPERATOR instead of ASSIGNMENT for INTERFACE statement not specifying the assignment operator (=)" #~ msgstr " %0, spcifier l'OPRATEUR au lieu de l'AFFECTATION pour le dclaration d'INTERFACE ne spcifiant pas d'oprateur d'affectation (=)" #~ msgid "At %0, specify ASSIGNMENT instead of OPERATOR for INTERFACE statement specifying the assignment operator (=)" #~ msgstr " %0, spcifier une AFFECTATION au lieu d'un OPRATEUR dans la dclaration d'INTERFACE spcifiant un oprateur d'affectation (=)" #~ msgid "Cannot specify =initialization-expr at %0 unless `::' appears before list of objects" #~ msgstr "Ne peut spcifier une expression d'initialisation = %0 moins que :: n'apparaissae avant la liste d'objets" #~ msgid "Reference to label at %1 inconsistent with its definition at %0" #~ msgstr "La rfrence l'tiquette %1 est inconsistente avec sa dfinition %0" #~ msgid "Reference to label at %1 inconsistent with earlier reference at %0" #~ msgstr "La rfrence l'tiquette %1 est inconsistente avec sa prcdente rfrence %0" #~ msgid "DO-statement reference to label at %1 follows its definition at %0" #~ msgstr "Dclaration DO utilisant une rfrence l'tiquette %1 suis sa dfinition %0" #~ msgid "Reference to label at %1 is outside block containing definition at %0" #~ msgstr "Rfrence l'tiquette %1 est en dehors du bloc contenant la dfinition %0" #~ msgid "DO-statement references to label at %0 and %2 separated by unterminated block starting at %1" #~ msgstr "Dclaration DO utilisant des rfrences l'tiquette %0 et %2 spars par un bloc non complet dbutant %1" #~ msgid "DO-statement reference to label at %0 and label definition at %2 separated by unterminated block starting at %1" #~ msgstr "Dclaration DO utilisant une rfrence l'tiquette %0 et la dfinition d'tiquette %2 spars par un bloc non complet dbutant %1" #~ msgid "Label definition at %0 invalid on this kind of statement" #~ msgstr "dfinition d'tiquette %0 invalide pour ce genre de dclaration" #~ msgid "Statement at %0 invalid in this context" #~ msgstr "dclaration %0 invalide dans ce contexte" #~ msgid "Statement at %0 invalid in context established by statement at %1" #~ msgstr "dclaration %0 invalide dans le contexte tabli par la dclaration %1" #~ msgid "Statement at %0 must specify construct name specified at %1" #~ msgstr "Dclaration %0 doit spcifier un nom de construit spcifi %1" #~ msgid "Construct name at %0 superfluous, no construct name specified at %1" #~ msgstr "Nom de construit %0 superflue, aucun nom de construit spcifi %1" #~ msgid "Construct name at %0 not the same as construct name at %1" #~ msgstr "Nom de construit %0 n'est pas le mme que celui %1" #~ msgid "Construct name at %0 does not match construct name for any containing DO constructs" #~ msgstr "Nom de construit %0 ne concorde pas avec un nom de construit contenant des construits DO" #~ msgid "Label definition missing at %0 for DO construct specifying label at %1" #~ msgstr "Dfinition d'tiquette manquante %0 pour le construit DO spcifiant l'tiquette %1" #~ msgid "Statement at %0 follows ELSE block for IF construct at %1" #~ msgstr "Dclaration %0 suivant un bloc ELSE pour le construit IF %1" #~ msgid "No label definition for FORMAT statement at %0" #~ msgstr "pas de dfinition d'tiquette pour la dclaration de FORMAT %0" #~ msgid "Second occurrence of ELSE WHERE at %0 within WHERE at %1" #~ msgstr "Seconde occurente de ELSE WHERE %0 l'intrieur du WHERE %1" #~ msgid "END statement at %0 missing `%A' keyword required for internal or module procedure(s) bounded by %1" #~ msgstr "dclaration END %0 manquante mot cl %A requis pour une procdure interne ou un module li %1" #~ msgid "MODULE PROCEDURE statement at %0 disallowed because INTERFACE at %1 specifies no generic name, operator, or assignment" #~ msgstr "dclaration de MODULE PROCEDURE %0 non permise parce que l'INTERFACE %1 ne spcifie pas de nom gnrique, d'oprateur ou d'affectation" #~ msgid "BLOCK DATA name at %0 superfluous, no name specified at %1" #~ msgstr "nom du BLOCK DATA %0 superflue, aucun nom spcifi %1" #~ msgid "Program name at %0 superfluous, no PROGRAM statement specified at %1" #~ msgstr "nom de programme %0 superflue, aucune dclaration PROGRAM spcifi %1" #~ msgid "Program unit name at %0 not the same as name at %1" #~ msgstr "nom de l'unit programme %0 n'est pas le mme que le nom %1" #~ msgid "Type name at %0 not the same as name at %1" #~ msgstr "Nom de type %0 n'est pas le mme que le nom %1" #~ msgid "End of source file before end of block started at %0" #~ msgstr "Fin du fichier source avant la fin du bloc dbutant %0" #~ msgid "Undefined label, first referenced at %0" #~ msgstr "tiquette non dfinie, premire rfrence %0" #~ msgid "SAVE statement or attribute at %1 cannot be specified along with SAVE statement or attribute at %0" #~ msgstr "dclaration SAVE ou attribut %1 ne peut tre spcifie en mme temps avec la dclaration SAVE ou l'attribut %0" #~ msgid "PUBLIC or PRIVATE statement at %1 cannot be specified along with PUBLIC or PRIVATE statement at %0" #~ msgstr "dclaration PUBLIC ou PRIVATE %1 ne peut tre spcifi en mme temps avec la dclaration PUBLIC ou PRIVATE %0" #~ msgid "RETURN statement at %0 invalid within a main program unit" #~ msgstr "dclaration RETURN %0 invalide l'intrieur de l'unit du programme principal" #~ msgid "Alternate return specifier at %0 invalid within a main program unit" #~ msgstr "spcificateur alternatif de retour %0 invalide l'intrieur de l'unit du programme principal" #~ msgid "Alternate return specifier at %0 invalid within a function" #~ msgstr "spcificateur alternatif de retour %0 invalide l'intrieur de la fonction" #~ msgid "Access specifier or PRIVATE statement at %0 invalid for derived-type definition within other than the specification part of a module" #~ msgstr "spcificateur d'accs ou dclaration PRIVATE %0 invalide pour une dfinition de type driv l'intrieur d'autre chose que la portion de spcification d'un module" #~ msgid "Access specifier at %0 must immediately follow derived-type statement at %1 with no intervening statements" #~ msgstr "Spcificateur d'accs %0 doit suivre immdaitement la dclaration de type driv %1 sans intervention de dclarations" #~ msgid "No components specified as of %0 for derived-type definition beginning at %1" #~ msgstr "Aucun composant spcifi tel que %0 pour une dfinition de type driv dbutant %1" #~ msgid "No components specified as of %0 for structure definition beginning at %1" #~ msgstr "Aucun composant spcifi tel que %0 pour la dfinition de structure dbutant %1" #~ msgid "Missing structure name for outer structure definition at %0" #~ msgstr "Nom de structure manquant pour la dfinition de structure externe %0" #~ msgid "Field names at %0 for outer structure definition -- specify them in a subsequent RECORD statement instead" #~ msgstr "Noms de champs %0 pour la dfinition externe de structure -- les spcifier dans une dclaration subsquente de dclaration RECORD la place" #~ msgid "Missing field name(s) for structure definition at %0 within structure definition at %1" #~ msgstr "noms de champs manquant pour la dfinition de strcutreu %0 l'intrieur de la dfinition de structure %1" #~ msgid "No components specified as of %0 for map beginning at %1" #~ msgstr "Aucun composant spcifi tel que %0 pour la map dbutant %1" #~ msgid "Zero or one maps specified as of %0 for union beginning at %1 -- at least two are required" #~ msgstr "Aucune ou une map spcifi tel que %0 pour l'union dbutant %1 -- au moins deux sont requises" #~ msgid "Missing %A specifier in statement at %0" #~ msgstr "spcificateur %A manquant dans la dclaration %0" #~ msgid "Items in I/O list starting at %0 invalid for namelist-directed I/O" #~ msgstr "Items dans la liste E/S dbutant %0 invalide pour un liste nomm d'E/S diriges" #~ msgid "Conflicting I/O control specifications at %0 and %1" #~ msgstr "spcifications conflictuelles de contrle d'E/S %0 et %1" #~ msgid "No UNIT= specifier in I/O control list at %0" #~ msgstr "aucun spcificateur UNIT=1 dans la liste de contrle d'E/S %0" #~ msgid "Specification at %0 requires ADVANCE=`NO' specification in same I/O control list" #~ msgstr "spcification %0 requiert la spcification ADVANCE= NO dans la mme liste de contrel d'E/S" #~ msgid "Specification at %0 requires explicit FMT= specification in same I/O control list" #~ msgstr "spcification %0 requiert la spcification explicite FMT= dans la mme liste de contrel d'E/S" #~ msgid "Second occurrence of CASE DEFAULT at %0 within SELECT CASE at %1" #~ msgstr "Seconde occurence du CASE DEFAULT %0 l'intreur de SELECT CASE %1" #~ msgid "Duplicate or overlapping case values/ranges at %0 and %1" #~ msgstr "duplication ou chevauchement des valeurs/plages de case %0 et %1" #~ msgid "Type and/or kind-type parameter disagreement between CASE value or value within range at %0 and SELECT CASE at %1" #~ msgstr "Dsaccord du paramtre du Type et/ou type de sorte entre la valeur du CASE ou la valeur l'intrieur de l'tendue %0 et le SELECT CASE %1" #~ msgid "Range specification at %0 invalid for CASE statement within logical-type SELECT CASE statement" #~ msgstr "spcification d'tendue %0 invalide pour la dclaration du CASE l'intrieur de la dclaration du type logique du SELECT CASE" #~ msgid "Fortran 90 feature at %0 unsupported" #~ msgstr "option FORTRAN 90 %0 non supporte" #~ msgid "Invalid declaration of or reference to symbol `%A' at %0 [initially seen at %1]" #~ msgstr "dclaration invalide ou rfrence au symboe %A %0 [initialement vu %1]" #~ msgid "Null element at %0 for array reference at %1" #~ msgstr "lment nul %0 pour la rfrence au tableau %1" #~ msgid "Too few elements (%A missing) as of %0 for array reference at %1" #~ msgstr "Trop peu d'lments (%A manquant) tel que %0 pour la rfrence au tableau %1" #~ msgid "Too many elements as of %0 for array reference at %1" #~ msgstr "Trop peu d'lments tel que %0 pour la rfrence au tableau %1" #~ msgid "Missing colon as of %0 in substring reference for %1" #~ msgstr ": manquant dans %0 dans la sous-chane de rfrence pour %1" #~ msgid "Invalid use at %0 of substring operator on %1" #~ msgstr "utilisation invalide %0 de l'oprateur de sous-chane sur %1" #~ msgid "Substring begin/end point at %0 out of defined range" #~ msgstr "point begin/end de la sous-chane %0 en dehors de la plage dfinie" #~ msgid "Array element value at %0 out of defined range" #~ msgstr "Valeur de l'lment du tableau %0 en dehors de la plage dfinie" #~ msgid "Expression at %0 has incorrect data type or rank for its context" #~ msgstr "expression %0 a un type de donnes ou un rang incorrect pour son contexte" #~ msgid "Division by 0 (zero) at %0 (IEEE not yet supported)" #~ msgstr "division par 0 (zro) %0 (IEEE pas encore support)" #~ msgid "%A step count known to be 0 (zero) at %0" #~ msgstr "valeur du pas %A connu pour tre 0 (zro) %0" #~ msgid "%A end value plus step count known to overflow at %0" #~ msgstr "valeur finale %A plus la valeur du pas connus pour dborder %0" #~ msgid "%A begin, end, and step-count values known to result in implementation-dependent behavior due to overflow(s) in intermediate calculations at %0" #~ msgstr "valeur de dpart, fin et du pas %A connu pour rsulter dans un comportement dpendant de l'implantation en raison d'un dbordement dans les calculs intermdiaires %0" #~ msgid "%A begin, end, and step-count values known to result in no iterations at %0" #~ msgstr "valeur de dpart, fin et du pas %A connus pour ne faire aucune itration %0" #~ msgid "Type disagreement between expressions at %0 and %1" #~ msgstr "dsaccord de type entre les expressions %0 et %1" #~ msgid "No specification for implied-DO iterator `%A' at %0" #~ msgstr "aucune spcification pour l'itration DO-implicite %A %0" #~ msgid "Gratuitous parentheses surround implied-DO construct at %0" #~ msgstr "parenthses gratuites entourant le construit DO implicite %0" #~ msgid "Zero-size specification invalid at %0" #~ msgstr "spcification de taille zro invalide %0" #~ msgid "Zero-size array at %0" #~ msgstr "tableau de taille zro %0" #~ msgid "Target machine does not support complex entity of kind specified at %0" #~ msgstr "machine cible ne supporte par l'entit complexe de la sorte spcifi %0" #~ msgid "Target machine does not support DOUBLE COMPLEX, specified at %0" #~ msgstr "machine cible ne supporte pas DOUBLE COMPLEX spcifi %0" #~ msgid "Attempt to raise constant zero to a power at %0" #~ msgstr "Tentative d'augmentation d'une constante de valeur zro la puissance %0" #~ msgid "Reference to generic intrinsic `%A' at %0 could be to form %B or %C" #~ msgstr "rfrence un intrinsque gnrique %A %0 pourrait tre de la forme %B ou %C" #~ msgid "Ambiguous use of intrinsic `%A' at %0 [info -f g77 M CMPAMBIG]" #~ msgstr "utilisation ambiqu de l'intrinsque %A %0 [info -f g77 M CMPAMBIG]" #~ msgid "Intrinsic `%A' referenced %Bly at %0, %Cly at %1 [info -f g77 M EXPIMP]" #~ msgstr "intrinsque %A rfrenc %Bly %0, %Cly %1 [info -f g77 M EXPIMP]" #~ msgid "Same name `%A' used for %B at %0 and %C at %1 [info -f g77 M INTGLOB]" #~ msgstr "Mme nom %A utilis pour %B %0 et %C %1 [info -f g77 M INTGLOB]" #~ msgid "Explicit type declaration for intrinsic `%A' disagrees with invocation at %0" #~ msgstr "dclaration de type explicite pour l'intrinsque %A en dsaccord avec l'invocation %0" #~ msgid "Unable to open INCLUDE file `%A' at %0" #~ msgstr "incapable d'ouvrir le fichier INCLUDE %A %0" #~ msgid "Null argument at %0 for statement function reference at %1" #~ msgstr "argument nul %0 pour la dclaration de la rfrence de fonction %1" #~ msgid "Null argument at %0 for procedure invocation at %1" #~ msgstr "arguement nul %0 pour l'invocation de la procdure %1" #~ msgid "%A too few arguments (starting with dummy argument `%B') as of %0 for statement function reference at %1" #~ msgstr "trop peu d'arguments %A (dbutant avec l'argument factice %B ) tel que %0 pour la dclaration de la rfrence de fonction %1" #~ msgid "%A too many arguments as of %0 for statement function reference at %1" #~ msgstr "trop peu d'arguments %A tel que %0 pour la dclaration de la rfrence de fonction %1" #~ msgid "Array supplied at %1 for dummy argument `%A' in statement function reference at %0" #~ msgstr "tableau fourni %1 pour l'argument factice %A dans la dclaration de rfrence de fonction %0" #~ msgid "Unsupported FORMAT specifier at %0" #~ msgstr "spcificateur de FORMAT non support %0" #~ msgid "Variable-expression FORMAT specifier at %0 -- unsupported" #~ msgstr "expression variable dans le spcificateur de FORMAT %0 -- non supporte" #~ msgid "Unsupported VXT statement at %0" #~ msgstr "dclaration VXT non support %0" #~ msgid "Attempt to specify second initial value for `%A' at %0" #~ msgstr "Tentative de spcifier une seconde valeur initial pour %A %0" #~ msgid "Too few initial values in list of initializers for `%A' at %0" #~ msgstr "Trop peu de valeurs initiales dans la liste des initialisations pour %A %0" #~ msgid "Too many initial values in list of initializers starting at %0" #~ msgstr "Trop de valeurs initiales dans la liste des initialisations dbutant %0" #~ msgid "Array or substring specification for `%A' out of range in statement at %0" #~ msgstr "Tableau ou sous-chane de spcification pour %A hors limite dans la dclaration %0" #~ msgid "Array subscript #%B out of range for initialization of `%A' in statement at %0" #~ msgstr "souscript de tableau #%B hors limite pour l'initialisation de %A dans la dclaration %0" #~ msgid "Implied do-loop step count of 0 (zero) for iteration variable `%A' in statement at %0" #~ msgstr "le pas implicite de la boucle DO a un compte de 0 (zro) pour la variable itrative %A dans la dclaration %0 " #~ msgid "Implied do-loop iteration count of 0 (zero) for iteration variable `%A' in statement at %0" #~ msgstr "le compte implicite de la boucle DO est 0 (zro) pour la variable itrative %A dans la dclaration %0 " #~ msgid "Not an integer constant expression in implied do-loop in statement at %0" #~ msgstr "N'est pas un entier dans l'expression de la constante dans la dclaration implicite de la boucle DO %0" #~ msgid "Attempt to specify second initial value for element of `%A' at %0" #~ msgstr "Tentative de spcifier une seconde valeur initiale pour l'lment %A %0" #~ msgid "Attempt to EQUIVALENCE common areas `%A' and `%B' at %0" #~ msgstr "Tentative de dfinit une zone commmue par EQUIVALENCE %A et %B %0" #~ msgid "Can't place `%A' as directed by EQUIVALENCE due to alignment restrictions" #~ msgstr "ne peut insrer %A tel que demand par EQUIVALENCE en raison des restrictions d'alignement" #~ msgid "Mismatched EQUIVALENCE requirements for placement of `%A' at both %C and %D bytes offset from `%B'" #~ msgstr "Dsaccord des conditions requises par EQUIVALENCE pour l'emplacement de %A aux deux dcalages d'octets %C et %D partir de %B" #~ msgid "Array or substring specification for `%A' out of range in EQUIVALENCE statement" #~ msgstr "spcification de tableau ou de sous-chane pour %A est hors limite dans la dclaration EQUIVALENCE" #~ msgid "Substring of non-CHARACTER entity `%A' in EQUIVALENCE statement" #~ msgstr "Sous-chane de non caractres %A dans la dclaration EQUIVALENCE" #~ msgid "Array reference to scalar variable `%A' in EQUIVALENCE statement" #~ msgstr "rfrence de tableau vers une variable scalaire %A dans une dclaraion EQUIVALENCE" #~ msgid "Array subscript #%B out of range for EQUIVALENCE of `%A'" #~ msgstr "souscript de tableau #%B hors limite pour la dclaration EQUIVALENCE de %A " #~ msgid "Attempt to extend COMMON area beyond its starting point via EQUIVALENCE of `%A'" #~ msgstr "Tentative d'tendre la zone COMMON au del de son point de dpart via EQUIVALENCE de %A " #~ msgid "Too few elements in reference to array `%A' in EQUIVALENCE statement" #~ msgstr "Trop peu d'lmens dans la rfrence au tableau %A dans la dclaration d'EQUIVALENCE" #~ msgid "Too many elements in reference to array `%A' in EQUIVALENCE statement" #~ msgstr "Trop d'lmens dans la rfrence au tableau %A dans la dclaration d'EQUIVALENCE" #~ msgid "Mixed CHARACTER and non-CHARACTER types via COMMON/EQUIVALENCE -- for example, `%A' and `%B'" #~ msgstr "Mlange de type caractre et de non caractre via le COMMON/EQUIVALENCE -- par exemple %A et %B " #~ msgid "Return value `%A' for FUNCTION at %0 not referenced in subprogram" #~ msgstr "valeur retourne %A pour FUNCTION %0 n'est pas rfrenc dans le sous-programme" #~ msgid "Common block `%A' is SAVEd, explicitly or implicitly, at %0 but not SAVEd at %1" #~ msgstr "bloc commun %A est sauvegard, explicitement ou implicitement, %0 mais non pas %1" #~ msgid "Common block `%A' is %B %D in length at %0 but %C %E at %1" #~ msgstr "bloc commun %A est %B %D en longueur %0 mais %C %E %1" #~ msgid "Blank common initialized at %0" #~ msgstr "commun vide initialis %0" #~ msgid "Intrinsic `%A' is passed as actual argument at %0 but not explicitly declared INTRINSIC" #~ msgstr "intrinsque %A est pass comme argument actuel %0 mais non pas explicitment dclar INTRINSIC" #~ msgid "External procedure `%A' is passed as actual argument at %0 but not explicitly declared EXTERNAL" #~ msgstr "procdure externe %A est pass comme argument actuel %0 mais non pas dclar explicitement dclar EXTERNAL" #~ msgid "Character `%A' (for example) is upper-case in symbol name at %0" #~ msgstr "caractre %A (par exemple) est en majuscule dans le nom de symbole %0" #~ msgid "Character `%A' (for example) is lower-case in symbol name at %0" #~ msgstr "caractre %A (par exemple) est en minuscule dans le nom de symbole %0" #~ msgid "Character `%A' not followed at some point by lower-case character in symbol name at %0" #~ msgstr "caractre %A n'est pas suivi par un caractre en minuscule dans le nom de symbole %0" #~ msgid "Initial character `%A' is lower-case in symbol name at %0" #~ msgstr "caractre initial %A est en minuscule dans le nom de symbole %0" #~ msgid "NAMELIST not adequately supported by run-time library for source files with case preserved" #~ msgstr "nom de liste n'est pas adquatement support par la bibliothque d'excution pour les fichiers source avec une casse prserve" #~ msgid "Nested %% construct (%%VAL, %%REF, or %%DESCR) at %0" #~ msgstr "construit %% imbriqu (%%VAL, %%REF ou %%DESCR) %0" #~ msgid "Statement at %0 invalid in BLOCK DATA program unit at %1" #~ msgstr "Dclaration %0 invalide dans le bloc de donne de l'unit programme %1" #~ msgid "Truncating characters on right side of character constant at %0" #~ msgstr "troncation de caractres du ct droit de la constante caractres %0" #~ msgid "Truncating characters on right side of hollerith constant at %0" #~ msgstr "troncation de caractres du ct droit de la constante Hollerith %0" #~ msgid "Truncating non-zero data on left side of numeric constant at %0" #~ msgstr "troncation de donnes non zro du ct gauche de la constante numrique %0" #~ msgid "Truncating non-zero data on left side of typeless constant at %0" #~ msgstr "troncation de donnes non zro du ct gauche de la constante sans type %0" #~ msgid "Typeless constant at %0 too large" #~ msgstr "constante sans type %0 trop grande" #~ msgid "First-column ampersand continuation at %0" #~ msgstr "& en premire colonne de continuation %0" #~ msgid "Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]" #~ msgstr "nom global %A dfini %0 est dj dfini %1 [info -f g77 M GLOBALS]" #~ msgid "Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]" #~ msgstr "nom global %A est %B %0 mais est %C %1 [info -f g77 M GLOBALS]" #~ msgid "Global name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]" #~ msgstr "nom global %A %0 a un type diffrent %1 [info -f g77 M GLOBALS]" #~ msgid "Too %B arguments passed to `%A' at %0 versus definition at %1 [info -f g77 M GLOBALS]" #~ msgstr "trop %B d'arguments pass %A %0 par rapport la dfinition %1 [info -f g77 M GLOBALS]" #~ msgid "Too %B arguments for `%A' at %0 versus invocation at %1 [info -f g77 M GLOBALS]" #~ msgstr "trop %B d'arguments pour %A %0 par rapport l'invocation %1 [info -f g77 M GLOBALS]" #~ msgid "Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]" #~ msgstr "Argument #%B de %A est %C %0 mais est %D %1 [info -f g77 M GLOBALS]" #~ msgid "Array `%A' at %0 is too large to handle" #~ msgstr "tableau %A %0 est trop grand pour tre trait" #~ msgid "Statement function `%A' defined at %0 is not used" #~ msgstr "dclaration de fonction %A dfinie %0 n'est pas utilise" #~ msgid "Intrinsic `%A', invoked at %0, known to be non-Y2K-compliant [info -f g77 M Y2KBAD]" #~ msgstr "Intrinsque %A invoqu %0 est connu pour ne pas tre conforme l'An 2000 [info -f g77 M Y2KBAD]" #~ msgid "Internal compiler error -- cannot perform operation" #~ msgstr "erreur interne du compilateur -- ne peut excuter l'opration" #~ msgid "In unknown kind" #~ msgstr "dans une sorte inconnue" #~ msgid "In entity" #~ msgstr "Dans l'entit" #~ msgid "In function" #~ msgstr "Dans la fonction" #~ msgid "In subroutine" #~ msgstr "Dans la sous-routine" #~ msgid "In program" #~ msgstr "Dans le programme" #~ msgid "In block-data unit" #~ msgstr "Dans l'unit du bloc de donnes" #~ msgid "In common block" #~ msgstr "Dans le bloc commun" #~ msgid "In construct" #~ msgstr "Dans le construit" #~ msgid "In namelist" #~ msgstr "Dans la liste de noms" #~ msgid "In anything" #~ msgstr "Dans n'importe quoi" #~ msgid "internal error in check-init: tree code not implemented: %s" #~ msgstr "erreur interne dans check-init: arbre de code n'est pas implant: %s" #~ msgid "%Jfinal field '%D' may not have been initialized" #~ msgstr "%Jchamp final %D peut ne pas avoir t initialis" #~ msgid "internal error - too many interface type" #~ msgstr "erreur interne - trop de type d'interface" #~ msgid "bad method signature" #~ msgstr "mthode de signature errone" #~ msgid "misplaced ConstantValue attribute (not in any field)" #~ msgstr "attribut ConstantValue mal positionn (n'est dans aucun champ)" #~ msgid "duplicate ConstantValue attribute for field '%s'" #~ msgstr "duplication de l'attribut ConstanValue pour le champ %s " #~ msgid "ConstantValue attribute of field '%s' has wrong type" #~ msgstr "attribut ConstanValue du champ %s a un type erron" #~ msgid "field '%s' not found in class" #~ msgstr "champ %s n'a pas t repr dans la classe" #~ msgid "%Jabstract method in non-abstract class" #~ msgstr "%Jmthode abstraite dans une classe non abstraite" #~ msgid "%Jnon-static method '%D' overrides static method" #~ msgstr "%Jmthode non statique %D crase la mthode statique" #~ msgid "%J'%D' used prior to declaration" #~ msgstr "%J %D utilis prcdemment avant sa dclaration" #~ msgid "declaration of `%s' shadows a parameter" #~ msgstr "la dclaration de %s masque un paramtre" #~ msgid "declaration of `%s' shadows a symbol from the parameter list" #~ msgstr "la dclaration de %s masque un symbole de la liste des paramtres" #~ msgid "%Jlabel '%D' used but not defined" #~ msgstr "%Jtiquette %D utilise mais non dfinie" #~ msgid "%Jlabel '%D' defined but not used" #~ msgstr "%Jtiquette %D dfinie mais non utilise" #~ msgid "%JIn %D: overlapped variable and exception ranges at %d" #~ msgstr "%JDans %D: chevauchement de variable et plage d'exception %d" #~ msgid "bad type in parameter debug info" #~ msgstr "type erron dans les paramtres d'informations de mise au point" #~ msgid "%Jbad PC range for debug info for local '%D'" #~ msgstr "%Jplage PC erron pour les infos de dbug pour la var. locale %D " #~ msgid "stack underflow - dup* operation" #~ msgstr "sous dbordement de la pile - opration dup*" #~ msgid "reference `%s' is ambiguous: appears in interface `%s' and interface `%s'" #~ msgstr "rfrence %s est ambigue: apparat dans l'interface %s et l'interface %s " #~ msgid "field `%s' not found" #~ msgstr "champ %s n'a pas t trouv" #~ msgid "ret instruction not implemented" #~ msgstr "instruction ret n'est pas implante" #~ msgid "method '%s' not found in class" #~ msgstr "mthode %s n'a pas t repr dans la classe" #~ msgid "failed to find class '%s'" #~ msgstr "chec de reprage de la classe %s " #~ msgid "class '%s' has no method named '%s' matching signature '%s'" #~ msgstr "classe %s n'a pas de mthode nomme %s concordant avec la signature %s " #~ msgid "invokestatic on non static method" #~ msgstr "invocation statique sur un mthode non statique" #~ msgid "invokestatic on abstract method" #~ msgstr "invocation statique sur un mthode abstraite" #~ msgid "invoke[non-static] on static method" #~ msgstr "invocation non statique sur un mthode statique" #~ msgid "missing field '%s' in '%s'" #~ msgstr "champ %s manquant dans %s " #~ msgid "mismatching signature for field '%s' in '%s'" #~ msgstr "aignature ne concorde pas pour le champ %s dans %s " #~ msgid "%Jassignment to final field '%D' not in field's class" #~ msgstr "%Jaffectation au champ final %D n'est pas le champ de la classe" #~ msgid "%Jassignment to final static field `%D' not in class initializer" #~ msgstr "%Jaffectation au champ statique final %D n'est pas dans l'initialiseur de la classe" #~ msgid "%Jassignment to final field '%D' not in constructor" #~ msgstr "%Jaffectation au champ final %D n'est pas dans le constructeur" #~ msgid "can't expand %s" #~ msgstr "ne peut faire l'expansion de %s" #~ msgid "invalid PC in line number table" #~ msgstr "PC invalide dans la numro de ligne de la table" #~ msgid "unreachable bytecode from %d to before %d" #~ msgstr "bytcode n'est pas atteignable partir de %d jusqu' %d" #~ msgid "unreachable bytecode from %d to the end of the method" #~ msgstr "bytcode n'est pas atteignable partir de %d jusqu' la fin de la mthode." #~ msgid "unrecogized wide sub-instruction" #~ msgstr "sous-instruction trs large non reconnue" #~ msgid "source file for class `%s' is newer than its matching class file. Source file `%s' used instead" #~ msgstr "fichier source de la classe %s est plus rcent que son fichier de classe concordant. Fichier source %s utilis la place." #~ msgid "bad string constant" #~ msgstr "constante chane errone" #~ msgid "bad value constant type %d, index %d" #~ msgstr "valeur %d de type de constante errone, index %d" #~ msgid "can't reopen %s: %m" #~ msgstr "ne peut r-ouvrir %s: %m" #~ msgid "can't close %s: %m" #~ msgstr "ne peut fermer %s: %m" #~ msgid "cannot find file for class %s" #~ msgstr "ne peut reprer le fichier pour la classe %s." #~ msgid "not a valid Java .class file" #~ msgstr "n'est pas un fichier Java .class valide" #~ msgid "error while parsing constant pool" #~ msgstr "error lors de l'analyse syntaxique du lots de constantes" #~ msgid "error in constant pool entry #%d\n" #~ msgstr "erreur dans l'entre #%d du lot de constantes\n" #~ msgid "reading class %s for the second time from %s" #~ msgstr "lecture de la classe %s pour la seconde fois depuis %s" #~ msgid "error while parsing fields" #~ msgstr "erreur lors de l'analyse syntaxique des champs" #~ msgid "error while parsing methods" #~ msgstr "erreur lors de l'analyse syntaxique des mthodes" #~ msgid "error while parsing final attributes" #~ msgstr "erreur lors de l'analyse syntaxique des attributs" #~ msgid "the `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute. This generally means that your classpath is incorrectly set. Use `info gcj \"Input Options\"' to see the info page describing how to set the classpath" #~ msgstr " java.lang.Object qui a t repr dans %s n'avait pas l'attribut spcial de longueur zro gnu.gcj.gcj-compiled. Cela gnralement signifie que le chemin d'accs aux classes est incorrectement initialis. Utiliser info gcj \"Input Options\" pour accder aux informations dcrivant comment initialiser le chemin d'accs des classes." #~ msgid "missing Code attribute" #~ msgstr "attribut Code manquant" #~ msgid "%Hsource file seen twice on command line and will be compiled only once" #~ msgstr "%Hfichier source vu deux fois sur la ligne de commande et ne sera compil une seule fois" #~ msgid "no input file specified" #~ msgstr "aucun fichier n'a t spcifi l'entre" #~ msgid "can't close input file %s: %m" #~ msgstr "ne peut fermer le fichier d'entre %s: %m" #~ msgid "bad zip/jar file %s" #~ msgstr "fichier zip/jar erron %s" #~ msgid "error while reading %s from zip file" #~ msgstr "erreur lors de la lecture de %s partir du fichier zip" #~ msgid "internal error in generate_bytecode_insn - tree code not implemented: %s" #~ msgstr "erreur interne dans generate_bytecode_insn - arbre de code n'est pas implant: %s" #~ msgid "field initializer type mismatch" #~ msgstr "type de initialiseur du champ ne concorde pas" #~ msgid "can't create directory %s: %m" #~ msgstr "ne peut crer le rpertoire %s: %m" #~ msgid "can't create %s: %m" #~ msgstr "ne peut crer %s: %m" #~ msgid "only one of `--print-main', `--list-class', and `--complexity' allowed" #~ msgstr "seule une des options --print-main, --list-class et --complexity est permise" #~ msgid "can't open output file `%s'" #~ msgstr "ne peut ouvrir le fichier de sortie %s " #~ msgid "file not found `%s'" #~ msgstr "fichier non repr %s " #~ msgid "can't specify `-D' without `--main'\n" #~ msgstr "ne peut spcifier -D sans --main\n" #~ msgid "`%s' is not a valid class name" #~ msgstr " %s n'est pas un nom de classe valide" #~ msgid "--resource requires -o" #~ msgstr "--resource requiert -o" #~ msgid "warning: already-compiled .class files ignored with -C" #~ msgstr "AVERTISSEMENT: fichiers .class dj compils ignors avec -C" #~ msgid "cannot specify both -C and -o" #~ msgstr "ne peut spcfier la fois -C et -o" #~ msgid "cannot create temporary file" #~ msgstr "ne peut crer un fichier temporaire" #~ msgid "using both @FILE with multiple files not implemented" #~ msgstr "utilis ensemble @FICHIER avec de multiples fichiers bMest pas implant" #~ msgid "cannot specify `main' class when not linking" #~ msgstr "ne peut spcifier la classe main lorsqu'il n'y a pas d'dition de liens" #~ msgid "can't do dependency tracking with input from stdin" #~ msgstr "ne peut faire le tracking de dpendance avec l'entre partir de stdin" #~ msgid "couldn't determine target name for dependency tracking" #~ msgstr "ne peut dterminer le nom de la cible pour le tracking de dpendance" #~ msgid "" #~ "unknown encoding: `%s'\n" #~ "This might mean that your locale's encoding is not supported\n" #~ "by your system's iconv(3) implementation. If you aren't trying\n" #~ "to use a particular encoding for your input file, try the\n" #~ "`--encoding=UTF-8' option" #~ msgstr "" #~ "encodage inconnu: %s \n" #~ "Cela signifie que votre encodage local n'est pas support\n" #~ "par l'implantation iconv(3) sur votre systme. Si vous n'essayez pas\n" #~ "d'utiliser un encodage particulier pour votre fichier d'entre, essayer\n" #~ "l'option --encoding=UTF-8." #~ msgid "can't mangle %s" #~ msgstr "ne peut mutiler %s" #~ msgid "internal error - invalid Utf8 name" #~ msgstr "erreur interne - nom Utf8 invalide" #~ msgid "Missing term" #~ msgstr "Terme manquant" #~ msgid "';' expected" #~ msgstr "; attendu" #~ msgid "Missing name" #~ msgstr "Nom manquant" #~ msgid "'*' expected" #~ msgstr " * attendu" #~ msgid "Class or interface declaration expected" #~ msgstr "Dclaration de classe ou d'interface attendue" #~ msgid "Missing class name" #~ msgstr "Nom de classe manquant" #~ msgid "'{' expected" #~ msgstr "{ attendu" #~ msgid "Missing super class name" #~ msgstr "Nom de super classe manquant" #~ msgid "Missing interface name" #~ msgstr "Nom d'interface manquant" #~ msgid "Missing variable initializer" #~ msgstr "Initialiseur de variable manquant" #~ msgid "Invalid declaration" #~ msgstr "Dclaration invalide" #~ msgid "']' expected" #~ msgstr "] attendu" #~ msgid "Unbalanced ']'" #~ msgstr "] non pair" #~ msgid "Invalid method declaration, method name required" #~ msgstr "Dclaration de mthode invalide, nom de mthode requis" #~ msgid "Identifier expected" #~ msgstr "Identificateur attendu" #~ msgid "Invalid method declaration, return type required" #~ msgstr "Dclaration de mthode invalide, type retourn requis" #~ msgid "')' expected" #~ msgstr ") attendu" #~ msgid "Missing formal parameter term" #~ msgstr "Paramtre term formel manquant" #~ msgid "Missing identifier" #~ msgstr "Identificateur manquant" #~ msgid "Missing class type term" #~ msgstr "Type term de classe manquant" #~ msgid "Invalid interface type" #~ msgstr "Type d'interface invalide" #~ msgid "':' expected" #~ msgstr ": attendu" #~ msgid "Invalid expression statement" #~ msgstr "Dclaration d'expression invalide" #~ msgid "'(' expected" #~ msgstr "( attendu" #~ msgid "Missing term or ')'" #~ msgstr "Terme manquant ou )" #~ msgid "Missing or invalid constant expression" #~ msgstr "Expresion de constante manquante ou invalide" #~ msgid "Missing term and ')' expected" #~ msgstr "Terme manquant et ) attendus" #~ msgid "Invalid control expression" #~ msgstr "Expression de contrle invalide" #~ msgid "Invalid update expression" #~ msgstr "Expression de mise jour invalide" #~ msgid "Invalid init statement" #~ msgstr "Dclaration init invalide" #~ msgid "Missing term or ')' expected" #~ msgstr "Terme manquant ou ) attendu" #~ msgid "'class' or 'this' expected" #~ msgstr " class ou ceci attendu" #~ msgid "'class' expected" #~ msgstr " class attendu" #~ msgid "')' or term expected" #~ msgstr ") or terme attendu" #~ msgid "'[' expected" #~ msgstr "[ attendu" #~ msgid "Field expected" #~ msgstr "Champ attendu" #~ msgid "Missing term and ']' expected" #~ msgstr "Terme manquant et ] attendu" #~ msgid "']' expected, invalid type expression" #~ msgstr "] attendu, type d'expression invalide" #~ msgid "Invalid type expression" #~ msgstr "Type d'expression invalide" #~ msgid "Invalid reference type" #~ msgstr "Type de rfrence invalide" #~ msgid "Constructor invocation must be first thing in a constructor" #~ msgstr "L'invaocation d'un constructeur doit tre la premire chose dans un constructeur" #~ msgid "Only constructors can invoke constructors" #~ msgstr "Seuls les constructeurs peuvent invoquer des constructeurs" #~ msgid ": `%s' JDK1.1(TM) feature" #~ msgstr ": %s option JDK1.1(TM)" #~ msgid "" #~ "%s.\n" #~ "%s" #~ msgstr "" #~ "%s.\n" #~ "%s" #~ msgid "malformed .zip archive in CLASSPATH: %s" #~ msgstr "archive .zip mal compose dans CLASSPATH: %s" #~ msgid "Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archives" #~ msgstr "ne peut reprer le package par dfaut %s . Vrifier la variable d'environnement CLASSPATH et l'accs aux archives." #~ msgid "missing static field `%s'" #~ msgstr "champ statique manquant %s " #~ msgid "not a static field `%s'" #~ msgstr "n'est pas un champ statique %s " #~ msgid "No case for %s" #~ msgstr "Oas de case pour %s" #~ msgid "unregistered operator %s" #~ msgstr "oprator %s non enregistr" #~ msgid "junk at end of signature string" #~ msgstr "rebut la fin de la chane de signature" #~ msgid "bad pc in exception_table" #~ msgstr "PC erron dans exception_table" #~ msgid "unknown opcode %d@pc=%d during verification" #~ msgstr "code-op inconnu %d@pc=%d durant la vrification" #~ msgid "verification error at PC=%d" #~ msgstr "erreur de vrification au PC=%d" #~ msgid "object does not conform to the `%s' protocol" #~ msgstr "objet n'est pas conforme au protocole %s " #~ msgid "class `%s' does not implement the `%s' protocol" #~ msgstr "classe %s n'implante pas le protocole %s " #~ msgid "statically allocated instance of Objective-C class `%s'" #~ msgstr "instance alloue de manire statique de la classe Objective-C %s " #~ msgid "unexpected type for `id' (%s)" #~ msgstr "type inattendu pour id (%s)" #~ msgid "undefined type `id', please import " #~ msgstr "type id indfini, SVP importer " #~ msgid "protocol `%s' has circular dependency" #~ msgstr "le protocole %s a une dpendance circulaire" #~ msgid "cannot find protocol declaration for `%s'" #~ msgstr "ne peut reprer la dclaration de protocole pour %s " #~ msgid "cannot find interface declaration for `%s'" #~ msgstr "ne peut reprer la dclaration d'interface pour %s " #~ msgid "interface `%s' does not have valid constant string layout" #~ msgstr "interface %s n'a pas une organisation valide de chanes de constantes" #~ msgid "cannot find reference tag for class `%s'" #~ msgstr "ne peut reprer la rfrence pour l'tiquette de classe %s." #~ msgid "creating selector for non existant method %s" #~ msgstr "cration du slection pour une mthode inexistente %s" #~ msgid "`%s' is not an Objective-C class name or alias" #~ msgstr " %s n'est pas une classe Objective-C ou un alias" #~ msgid "Objective-C declarations may only appear in global scope" #~ msgstr "dclarations Objective-C peut seulement apparatre dans l'tendue globale" #~ msgid "cannot find class `%s'" #~ msgstr "ne peut reprer la classe %s " #~ msgid "class `%s' already exists" #~ msgstr "classe %s existe dj" #~ msgid "`%s' redeclared as different kind of symbol" #~ msgstr " %s redclar comme une autre sorte de symbole" #~ msgid "cannot find interface declaration for `%s', superclass of `%s'" #~ msgstr "ne peut reprer une dclaration d'interface pour %s , super classe de %s " #~ msgid "circular inheritance in interface declaration for `%s'" #~ msgstr "hritage circulaire dans la dclaration de l'interface pour %s " #~ msgid "Use `-fobjc-exceptions' to enable Objective-C exception syntax" #~ msgstr "Utiliser -fobjc-exceptions pour autoriser la syntaxe d'exception d'Objective-C" #~ msgid "`@throw;' (rethrow) used outside of a `@catch' block" #~ msgstr " @throw; (rethrow) utilis en dehors d'un bloc @catch " #~ msgid "`@catch' parameter is not a known Objective-C class type" #~ msgstr "paramtre @catch n'est pas connu comme un type de classe Objective-C" #~ msgid "Exception already handled by preceding `@catch(id)'" #~ msgstr "Exception est dj trait par le prcdent @catch(id) " #~ msgid "Exception of type `%s *' already handled by `@catch (%s *)'" #~ msgstr "exception du type %s * est dj traite par @catch (%s *) " #~ msgid "`@try' without `@catch' or `@finally'" #~ msgstr " @try sans @catch ou @finally " #~ msgid "%Jtype '%D' does not have a known size" #~ msgstr "%Jtype %D n'a pas de taille connue" #~ msgid "%J%s `%s'" #~ msgstr "%J%s %s " #~ msgid "inconsistent instance variable specification" #~ msgstr "spcification inconsistente avec l'instance de la vairable" #~ msgid "can not use an object as parameter to a method\n" #~ msgstr "ne peut utiliser un objet comme paramtre une mthode\n" #~ msgid "multiple %s named `%c%s' found" #~ msgstr "multiples %s nomms %c%s reprs" #~ msgid "no super class declared in @interface for `%s'" #~ msgstr "pas de super classe dclare dans @nterface pour %s " #~ msgid "invalid receiver type `%s'" #~ msgstr "type du receveur invalide %s " #~ msgid "`%s' may not respond to `%c%s'" #~ msgstr " %s peut ne pas rpondre %c%s " #~ msgid "`%c%s' not implemented by protocol(s)" #~ msgstr " %c%s n'est pas implante dans le protocole" #~ msgid "(Messages without a matching method signature" #~ msgstr "(Messages sans une mthode concordante de signature" #~ msgid "will be assumed to return `id' and accept" #~ msgstr "sera assum pour retourner id et accepter" #~ msgid "`...' as arguments.)" #~ msgstr " ... comme argument.)" #~ msgid "undeclared selector `%s'" #~ msgstr "slecteur %s non dclar" #~ msgid "instance variable `%s' accessed in class method" #~ msgstr "instance %s de la variable accd par la mthode de classe" #~ msgid "duplicate declaration of method `%c%s'" #~ msgstr "duplication de dclaration de la mthode %c%s " #~ msgid "duplicate interface declaration for category `%s(%s)'" #~ msgstr "duplication de dclaration d'interface pour la catgorie %s(%s) " #~ msgid "illegal reference type specified for instance variable `%s'" #~ msgstr "type derfrence spcifi illgal pour l'instance de variable %s " #~ msgid "instance variable `%s' has unknown size" #~ msgstr "instance de la variable %s a une taille inconnue" #~ msgid "type `%s' has virtual member functions" #~ msgstr "type %s a des membres de fonction virtuelle" #~ msgid "illegal aggregate type `%s' specified for instance variable `%s'" #~ msgstr "type d'aggrgat illgal %s spcifi pour l'instance de la variable %s " #~ msgid "type `%s' has a user-defined constructor" #~ msgstr "type %s a un constructeur dfini par l'usager" #~ msgid "type `%s' has a user-defined destructor" #~ msgstr "type %s a un destructeur dfini par l'usager" #~ msgid "C++ constructors and destructors will not be invoked for Objective-C fields" #~ msgstr "constructeurs et destructeurs C++ ne seront pas invoqus pour les champs en Objective-C" #~ msgid "instance variable `%s' is declared private" #~ msgstr "instance de la variable %s est dclar prive" #~ msgid "instance variable `%s' is %s; this will be a hard error in the future" #~ msgstr "instance de la variable %s est %s; cela dclenchera une erreur dure dans le futur" #~ msgid "instance variable `%s' is declared %s" #~ msgstr "instance de la variable %s est dclar %s" #~ msgid "static access to object of type `id'" #~ msgstr "accs statique un objket de type id " #~ msgid "incomplete implementation of class `%s'" #~ msgstr "implantation incomplte de la classe %s " #~ msgid "incomplete implementation of category `%s'" #~ msgstr "implantation incomplte de la catgorie %s " #~ msgid "method definition for `%c%s' not found" #~ msgstr "dfinition de la mthode pour %c%s n'a pas t repre" #~ msgid "%s `%s' does not fully implement the `%s' protocol" #~ msgstr "%s %s n'implante pas compltement le protocole %s " #~ msgid "`@end' missing in implementation context" #~ msgstr "@end manquant dans l'implantation du contexte" #~ msgid "reimplementation of class `%s'" #~ msgstr "r-implantation de la classe %s " #~ msgid "conflicting super class name `%s'" #~ msgstr "nom de super classe %s est conflictuel" #~ msgid "previous declaration of `%s'" #~ msgstr "dclaration prcdente de %s " #~ msgid "duplicate interface declaration for class `%s'" #~ msgstr "double dclaration d'interface pour la classe %s " #~ msgid "duplicate declaration for protocol `%s'" #~ msgstr "double dclaration pour le protocole %s " #~ msgid "%J%s `%c%s'" #~ msgstr "%J%s %c%s " #~ msgid "no super class declared in interface for `%s'" #~ msgstr "pas de super classe dclare dans l'interface pour %s " #~ msgid "[super ...] must appear in a method context" #~ msgstr "[super ...] doit apparatre dans une mthode du contexte" #~ msgid "`@end' must appear in an implementation context" #~ msgstr "@end doit appratre dans un contaxte d'implantation" #~ msgid "method definition not in class context" #~ msgstr "mthode de dfinition n'est pas dans un contexte de classe" #~ msgid "Display this information" #~ msgstr "afficher l'aide-mmoire" #~ msgid "--param =\tSet paramter to value. See below for a complete list of parameters" #~ msgstr "--param =\tinitialiser le avec la valeur. Voir ci-bas pour la liste complte des paramtres" #~ msgid "-A=\tAssert the to . Putting '-' before disables the to " #~ msgstr "-A=\tassocier la la . Placer - devant la dsactive la la " #~ msgid "Do not discard comments" #~ msgstr "Ne pas liminer les commentaires" #~ msgid "Do not discard comments in macro expansions" #~ msgstr "Ne pas liminer les commentaires dans les expansions macro" #~ msgid "-D[=]\tDefine a with as its value. If just is given, is taken to be 1" #~ msgstr "-D[=]\tdfinir le avec la . Si seul le est fourni, vaut 1 par dfaut" #~ msgid "-G\tPut global and static data smaller than bytes into a special section (on some targets)" #~ msgstr "" #~ " -G placer les donnes globales et statiques plus\n" #~ " petites que d'octets dans une section\n" #~ " spciale (sur certaines cibles)" #~ msgid "Print the name of header files as they are used" #~ msgstr "Afficher les noms des en-ttes de fichiers tel qu'ils sont utiliss" #~ msgid "-I \tAdd to the end of the main include path. -I- gives more include path control; see info documentation" #~ msgstr "-I \tajouter la fin du chemin principal d'inclusion. -I- donne plus de contrle sur le chemin d'inclusion; voir la documentation info" #~ msgid "Generate make dependencies" #~ msgstr "Gnrer les dpendances pour make" #~ msgid "Generate make dependencies and compile" #~ msgstr "Gnrer les dpendances pour make et compiler" #~ msgid "-MF \tWrite dependency output to the given file" #~ msgstr "-MF \tcrire les dpendances en sortie dans le fichier fourni" #~ msgid "Treat missing header files as generated files" #~ msgstr "Traiter les en-ttes manquantes de fichiers comme des fichiers gnrs" #~ msgid "Like -M but ignore system header files" #~ msgstr "Identique -M mais ignore les en-ttes de fichiers systme" #~ msgid "Like -MD but ignore system header files" #~ msgstr "Identique -MD mais ignore les en-ttes de fichiers systme" #~ msgid "Generate phony targets for all headers" #~ msgstr "Gnrer les cibles bidons pour toutes les en-ttes" #~ msgid "-MQ \tAdd a MAKE-quoted target" #~ msgstr "-MQ \tajouter MAKE-quoted cible" #~ msgid "-MT \tAdd an unquoted target" #~ msgstr "-MT \tajouter une cible sans quote" #~ msgid "-O\tSet optimization level to " #~ msgstr "-O\tutiliser le niveau d'optimisation " #~ msgid "Optimize for space rather than speed" #~ msgstr "Optimiser l'utilisation de l'espace plutt que la vitesse" #~ msgid "Do not generate #line directives" #~ msgstr "Ne pas gnrer de directives #line" #~ msgid "-U\tUndefine " #~ msgstr "-U\tabandonner la dfinition " #~ msgid "This switch is deprecated; use -Wextra instead" #~ msgstr "Cette option est obsolte; utiliser -Wextra la place" #~ msgid "Warn about returning structures, unions or arrays" #~ msgstr "Avertir propos de structures retourns, unions ou tableaux" #~ msgid "Enable most warning messages" #~ msgstr "Autoriser la plupart des messages d'avertissement" #~ msgid "Warn about casting functions to incompatible types" #~ msgstr "Avertir propos des fonctions de transtypage avec des types incompatibles" #~ msgid "Warn about pointer casts which increase alignment" #~ msgstr "Avertir propos des pointeurs convertis lesquels augment l'alignement" #~ msgid "Warn about casts which discard qualifiers" #~ msgstr "Avertir propos des transtypage qui cartent les qualificateurs" #~ msgid "Warn about subscripts whose type is \"char\"" #~ msgstr "Avertir propos des souscripts dont le type est \"char\"" #~ msgid "Warn about possibly nested block comments, and C++ comments spanning more than one physical line" #~ msgstr "Avertir propos des blocs de commentaires imbriqus et les commentaires C++ qui s'tendent sur plus d'une ligne physique" #~ msgid "Synonym for -Wcomment" #~ msgstr "Synonyme pour -Wcommentaire" #~ msgid "Warn about possibly confusing type conversions" #~ msgstr "Avertir propos des conversion confuses de types" #~ msgid "Warn when all constructors and destructors are private" #~ msgstr "Avertir lorsque tous les constructeurs et destructeurs sont privs" #~ msgid "Warn when a declaration is found after a statement" #~ msgstr "Avertir lorsqu'une dclaration est spcifie aprs une dclaration" #~ msgid "Warn about deprecated compiler features" #~ msgstr "Avertir propose de la dprciation des options du compilateur" #~ msgid "Warn about uses of __attribute__((deprecated)) declarations" #~ msgstr "Avertir propos de l'utilisation des dclarations __attribute__ ((deprecated)) " #~ msgid "Warn when an optimization pass is disabled" #~ msgstr "Avertir lorsque la passe d'optimisation est dsactive" #~ msgid "Warn about compile-time integer division by zero" #~ msgstr "Avertir au sujet de la division entire par zro au moment de la compilation" #~ msgid "Warn about violations of Effective C++ style rules" #~ msgstr "Avertir propos des violations des rgles de style de Effective C++" #~ msgid "Warn about stray tokens after #elif and #endif" #~ msgstr "Avertir propos des jetons perdus aprs #elif et #endif" #~ msgid "Treat all warnings as errors" #~ msgstr "Traiter tous les avertissements commes des erreurs" #~ msgid "Make implicit function declarations an error" #~ msgstr "Faire une erreur lors de dclaration de fonctions implicites" #~ msgid "Print extra (possibly unwanted) warnings" #~ msgstr "Afficher des avertissements superflus (possiblement non dsirs)" #~ msgid "Warn if testing floating point numbers for equality" #~ msgstr "Avertir propos des tests d'galit sur des nombres flottants" #~ msgid "Warn about printf/scanf/strftime/strfmon format string anomalies" #~ msgstr "Avertir propos des anomalies de format de chanes pour printf/scanf/strftime/strfmon" #~ msgid "Warn if passing too many arguments to a function for its format string" #~ msgstr "Avertir lorsqu'il y a trop de passage d'arguments une fonction pour le format de ses chanes" #~ msgid "Warn about format strings that are not literals" #~ msgstr "Avertir propos des chanes de format qui n'ont pas de litrals" #~ msgid "Warn about possible security problems with format functions" #~ msgstr "Avertir propos des problmes possibles de scurit avec les formats de fonction" #~ msgid "Warn about strftime formats yielding 2-digit years" #~ msgstr "Avertir propos des formats strftime ne laissant que 2 chiffres pour l'anne" #~ msgid "Warn about implicit function declarations" #~ msgstr "Avertir propos des dclarations de fonctions implicites" #~ msgid "Warn when a declaration does not specify a type" #~ msgstr "Avertir lorsqu'une dclaration ne spcifie pas le type" #~ msgid "Deprecated. This switch has no effect." #~ msgstr "Obsolte. Cette option n'a aucun effet." #~ msgid "Warn about variables which are initialized to themselves." #~ msgstr "Avertir au sujet des variables qui sont initialiss par elles-mme" #~ msgid "Warn when an inlined function cannot be inlined" #~ msgstr "Avertir lorsque des fonctions en ligne ne peuvent tre enligne" #~ msgid "Warn about invalid uses of the \"offsetof\" macro" #~ msgstr "Avertir propos de l'utilisation invalide de macro \"offsetof\"" #~ msgid "Warn about PCH files that are found but not used" #~ msgstr "Avertir propos des fichier PCH qui sont reprs mais non utiliss" #~ msgid "-Wlarger-than-\tWarn if an object is larger than bytes" #~ msgstr "-Wlarger-than-\tavertir si un objet est plus grand que d'octets" #~ msgid "Do not warn about using \"long long\" when -pedantic" #~ msgstr "Ne pas avertir propos de l'utilisation de \"long long\" avec -pedantic" #~ msgid "Warn about suspicious declarations of \"main\"" #~ msgstr "Avertir propos des dclarations douteuses de \"main\"" #~ msgid "Warn about possibly missing braces around initializers" #~ msgstr "Avertir propos des possibles accolades manquantes autour des initialisations" #~ msgid "Warn about global functions without previous declarations" #~ msgstr "Avertir propos des fonctions globales sans dclaration prcdente" #~ msgid "Warn about functions which might be candidates for format attributes" #~ msgstr "Avertir propos des fonctions qui pourraient tre candidates pour les attributs de format" #~ msgid "Warn about functions which might be candidates for __attribute__((noreturn))" #~ msgstr "Avertir propos des fonctions qui seraient candidates pour __attribute__((noreturn))" #~ msgid "Warn about global functions without prototypes" #~ msgstr "Avertir propos des fonctions globales sans prototype" #~ msgid "Warn about use of multi-character character constants" #~ msgstr "Avertir propos de l'utilisation des chanes de multi-caractres" #~ msgid "Warn about \"extern\" declarations not at file scope" #~ msgstr "Avertir propos des dclarations \"extern\" qui n'est pas dans l'tendue du fichier" #~ msgid "Warn when non-templatized friend functions are declared within a template" #~ msgstr "Avertir lorsque des fonctions amis sans canevas sont dclars l'intrieur d'un canevas" #~ msgid "Warn about non-virtual destructors" #~ msgstr "Avertir propos des destructeurs non virtuels" #~ msgid "Warn if a C-style cast is used in a program" #~ msgstr "Avertir si le style de transtypage C est utilis dans un programme" #~ msgid "Warn if an old-style parameter definition is used" #~ msgstr "Avertir lorsqu'un paramtre de style ancien de dfinition est utilis" #~ msgid "Warn about overloaded virtual function names" #~ msgstr "Avertir propos de la surcharge des noms de fonctions virtuelles" #~ msgid "Warn when the packed attribute has no effect on struct layout" #~ msgstr "Avertir lorsque les attributs paquets n'ont pas d'effet sur l'organisation d'un struct" #~ msgid "Warn when padding is required to align structure members" #~ msgstr "Avertir lorsque le remplissage est requis pour aligner les membres de structure" #~ msgid "Warn about possibly missing parentheses" #~ msgstr "Avertir propos du manque possible de parenthses" #~ msgid "Warn when converting the type of pointers to member functions" #~ msgstr "Avertir lors de la conversion des types de pointeurs en membres de fonctions" #~ msgid "Warn about function pointer arithmetic" #~ msgstr "Avertir propos d'arithmtique portant sur un pointeur de fonction" #~ msgid "Warn if inherited methods are unimplemented" #~ msgstr "Avertir si les mthodes hrites ne sont pas implantes" #~ msgid "Warn about multiple declarations of the same object" #~ msgstr "Avertir propos des dclarations multiples portant sur le mme objet" #~ msgid "Warn when the compiler reorders code" #~ msgstr "Avertir lorsque le compilateur rordonne le code" #~ msgid "Warn whenever a function's return type defaults to \"int\" (C), or about inconsistent return types (C++)" #~ msgstr "Avertir lorsque le type de fonction retourner par dfaut est \"int\" (C) ou propos d'un type inconsisten retourner (C++)" #~ msgid "Warn if a selector has multiple methods" #~ msgstr "Avertir si le slecteur a de multiples mthodes" #~ msgid "Warn about possible violations of sequence point rules" #~ msgstr "Avertir propos des violations possibles des rgles de squence de points" #~ msgid "Warn when one local variable shadows another" #~ msgstr "Avertir lorsqu'une variable locale masque une autre" #~ msgid "Warn about signed-unsigned comparisons" #~ msgstr "Avertir propos des comparaisons signs ou non signs" #~ msgid "Warn when overload promotes from unsigned to signed" #~ msgstr "Avertir lorsque la surcharge fait la promotion d'un non sign en sign" #~ msgid "Warn about code which might break strict aliasing rules" #~ msgstr "Avertir propos du code qui pourrait briser les rgles strictes d'alias" #~ msgid "Warn about unprototyped function declarations" #~ msgstr "Avertir propos des dclarations de fonctions sans prototype" #~ msgid "Warn about enumerated switches, with no default, missing a case" #~ msgstr "Avertir propos d'un switch numr, sans dfaut ou un case est manquant" #~ msgid "Warn about enumerated switches missing a \"default:\" statement" #~ msgstr "Avertir propos d'un switch numr n'ayant pas de dclaration \"default:\"" #~ msgid "Warn about all enumerated switches missing a specific case" #~ msgstr "Avertir propos de tous les switch numrs o un case spcific manque" #~ msgid "Warn when synthesis behavior differs from Cfront" #~ msgstr "Avertir lorsque le comportement de synthre diffre de Cfront" #~ msgid "Do not suppress warnings from system headers" #~ msgstr "Ne pas supprimer les avertissements pour les en-ttes systme" #~ msgid "Warn about features not present in traditional C" #~ msgstr "Avertir propos d'une option absente en C traditionnel" #~ msgid "Warn if trigraphs are encountered that might affect the meaning of the program" #~ msgstr "Avertir si des trigraphes sont rencontrs et qui pourraient affecter le sens du programme" #~ msgid "Warn if an undefined macro is used in an #if directive" #~ msgstr "Avertir si un macro indfini est utilis dans un directive #if" #~ msgid "Warn about uninitialized automatic variables" #~ msgstr "Avertir propos des variables automatiques non initialises" #~ msgid "Warn about unrecognized pragmas" #~ msgstr "Avertir propos des pragmas non reconnus" #~ msgid "Warn about code that will never be executed" #~ msgstr "Avertir propos du code qui ne sera jamais excut" #~ msgid "Enable all -Wunused- warnings" #~ msgstr "Autoriser tous les -Wunused- warnings" #~ msgid "Warn when a function is unused" #~ msgstr "Avertir lorsqu'une fonction est inutilise" #~ msgid "Warn when a label is unused" #~ msgstr "Avertir lorsqu'une tiquette est inutilise" #~ msgid "Warn about macros defined in the main file that are not used" #~ msgstr "Avertir propos de macros dfinis dans le fichier principal qui ne sont pas utiliss" #~ msgid "Warn when a function parameter is unused" #~ msgstr "Avertir lorsqu'un paramtre de fonction est inutilis" #~ msgid "Warn when an expression value is unused" #~ msgstr "Avertir lorsque la valeur d'une expression n'est pas utilise" #~ msgid "Warn when a variable is unused" #~ msgstr "Avertir lorsque 'une variable est inutilise" #~ msgid "Give strings the type \"array of char\"" #~ msgstr "Fournir des chanes de type \"array of char\"" #~ msgid "A synonym for -std=c89. In a future version of GCC it will become synonymous with -std=c99 instead" #~ msgstr "Un synonyme pour -std=c89. Dans une version future de GCC cela deviendra synonyme de -std=c99 la place" #~ msgid "-aux-info \tEmit declaration information into " #~ msgstr "-aux-info \tproduire une dclaration d'information dans le " #~ msgid "-d\tEnable dumps from specific passes of the compiler" #~ msgstr "-d\tautoriser les vidanges pour des passes spcifiques du compilateur" #~ msgid "-dumpbase \tSet the file basename to be used for dumps" #~ msgstr "-dumpbase \tfixer le nom de base du fichier utiliser pour les vidanges" #~ msgid "Enforce class member access control semantics" #~ msgstr "Forcer la smantique du contrle d'accs un membre de classe" #~ msgid "Align the start of functions" #~ msgstr "Aligner le dbut des fonctions" #~ msgid "Align labels which are only reached by jumping" #~ msgstr "Aligner les tiquettes qui sont seulement atteintes par sauts" #~ msgid "Align all labels" #~ msgstr "Aligner toutes les tiquettes" #~ msgid "Align the start of loops" #~ msgstr "Aligner le dbut des boucles" #~ msgid "Change when template instances are emitted" #~ msgstr "Changer lorsque les instances du canevas sont produites" #~ msgid "Specify that arguments may alias each other and globals" #~ msgstr "Spcifier que les arguments peuvent avoir des alias l'un vers l'autre et globaux" #~ msgid "Assume arguments may alias globals but not each other" #~ msgstr "Prsumer que les arguments peuvent avoir des alias globaux mais pas l'un vers l'autre" #~ msgid "Assume arguments alias neither each other nor globals" #~ msgstr "Assumer que les alias d'arguments n'en ont pas l'un vers l'autre ou globaux" #~ msgid "Recognize the \"asm\" keyword" #~ msgstr "Reconnatre le mot cl asm " #~ msgid "Generate unwind tables that are exact at each instruction boundary" #~ msgstr "Gnrer des tables tendues qui soient exactes pour chaque borne d'instruction" #~ msgid "Generate code to check bounds before indexing arrays" #~ msgstr "Gnrer du code pour vrifier les bornes avant d'indexer les tableaux" #~ msgid "Replace add, compare, branch with branch on count register" #~ msgstr "Remplacer add,compare,branch avec des branchements utilisant un compteur registre" #~ msgid "Use profiling information for branch probabilities" #~ msgstr "Utiliser les informations de profilage pour les probabilits de branchements" #~ msgid "Perform branch target load optimization before prologue / epilogue threading" #~ msgstr "Effectuer l'optimisation du chargement du branchement cible avant le thread prologue / epilogue" #~ msgid "Perform branch target load optimization after prologue / epilogue threading" #~ msgstr "Effectuer l'optimisation du chargement du branchement cible aprs le thread prologue / epilogue" #~ msgid "Recognize built-in functions" #~ msgstr "Reconnatre aucun construit dans les fonctions" #~ msgid "-fcall-saved-\tMark as being preserved across functions" #~ msgstr "-fcall-saved-\tmarquer le comme tant prserv travers les fonctions" #~ msgid "-fcall-used-\tMark as being corrupted by function calls" #~ msgstr "-fcall-used-\tmarquer le comme tant corrompu par les appels de fonctions" #~ msgid "Save registers around function calls" #~ msgstr "Sauvegarder les registres autour des appels de fonction" #~ msgid "Check the return value of new" #~ msgstr "Vrifier la valeur retourne de new" #~ msgid "Do not put uninitialized globals in the common section" #~ msgstr "Ne pas placer de globaux non initialiss dans la section commune" #~ msgid "Allow the arguments of the '?' operator to have different types" #~ msgstr "Permettre les arguments de l'oprateur ? d'avoir diffrents types" #~ msgid "Reduce the size of object files" #~ msgstr "Rduire la taille des fichiers objets" #~ msgid "Make string literals \"const char[]\" not \"char[]\"" #~ msgstr "Rendre les chanes de mots \"const char[]\" et non pas \"char[]\"" #~ msgid "-fconst-string-class=\tUse class for constant strings" #~ msgstr "-fconst-string-class=\tutiliser la classe pour la chanes de constantes" #~ msgid "Perform a register copy-propagation optimization pass" #~ msgstr "Effectuer la passe d'optimisation de la propagation-de-copie par registre" #~ msgid "Perform cross-jumping optimization" #~ msgstr "Excuter des optimisations de sauts croiss" #~ msgid "When running CSE, follow jumps to their targets" #~ msgstr "Lorsque CSE s'excute, suivre les sauts vers leurs cibles" #~ msgid "When running CSE, follow conditional jumps" #~ msgstr "Lorsque CSE s'excute, suivre les sauts considitionnels vers leurs cibles" #~ msgid "Place data items into their own section" #~ msgstr "placer les items des donnes dans leur propre section" #~ msgid "Inline member functions by default" #~ msgstr "Rendre enligne un membre de fonction par dfaut" #~ msgid "Defer popping functions args from stack until later" #~ msgstr "Dfrer le dpilage des arguments de fonction de la pile plus tard" #~ msgid "Attempt to fill delay slots of branch instructions" #~ msgstr "Tented de remplir de dlais les fentes des instructions de branchement" #~ msgid "Delete useless null pointer checks" #~ msgstr "Dtruire les vrifications de pointeurs nul inutiles" #~ msgid "-fdiagnostics-show-location=[once|every-line]\tHow often to emit source location at the beginning of line-wrapped diagnostics" #~ msgstr "-fdiagnostics-show-location=[once|every-line]\tindiquer combien de fois les informations de localisation des sources doivent tre produites au dbut d'un diagnostique lorsque les lignes doivent s'enrouler" #~ msgid "Permit '$' as an identifier character" #~ msgstr "Autoriser '$' comme identificateur de caractre" #~ msgid "-fdump-\tDump various compiler internals to a file" #~ msgstr "-fdump-\tvidander les divers internes du compilateur dans un fichier" #~ msgid "Suppress output of instruction numbers and line number notes in debugging dumps" #~ msgstr "Supprimer dans la sortie les numros d'instructions et de notes de lignes dans les vidanges de mises au point" #~ msgid "Perform DWARF2 duplicate elimination" #~ msgstr "Excuter une limination DAWRF2 des doublons" #~ msgid "Perform unused type elimination in debug info" #~ msgstr "Effectuer l'limination des types non utiliss dans l'information de mise au point" #~ msgid "Generate code to check exception specifications" #~ msgstr "Gnrer le code pour vrifier les exceptions de spcifications" #~ msgid "Enable exception handling" #~ msgstr "Autoriser le traitement des exceptions" #~ msgid "-fexec-charset=\tConvert all strings and character constants to character set " #~ msgstr "-fexec-charset=\tconvertir toutes les chanes et les constantes de caractres en jeu de caractres " #~ msgid "Perform a number of minor, expensive optimizations" #~ msgstr "Effectuer un nombre mineur d'optimisations coteuses" #~ msgid "Assume no NaNs or infinities are generated" #~ msgstr "Assumer qu'aucun NaNs ou infinits ne soit gnr" #~ msgid "-ffixed-\tMark as being unavailable to the compiler" #~ msgstr "-ffixed-\tmarquer le comme n'tant plus disponible pour le compilateur" #~ msgid "Do not store floats in registers" #~ msgstr "Ne pas stocker les flottants dans les registres" #~ msgid "Scope of for-init-statement variables is local to the loop" #~ msgstr "tendue des variables for-init-statement est local la boucle" #~ msgid "Copy memory address constants into registers before use" #~ msgstr "Copier les constantes d'adresses mmoire dans les registres avant de les utiliser" #~ msgid "Copy memory operands into registers before use" #~ msgstr "Copier les oprandes mmoire dans les registres avant de les utiliser" #~ msgid "Do not assume that standard C libraries and \"main\" exist" #~ msgstr "Ne pas assumer que les bibliothques standards C et \"main\" existent" #~ msgid "Allow function addresses to be held in registers" #~ msgstr "Autoriser le maintien des adresses de fonction dans les registres" #~ msgid "Place each function into its own section" #~ msgstr "placer chaque fonction dans sa propre section" #~ msgid "Perform global common subexpression elimination" #~ msgstr "Excuter l'limination de sous-expression commune globale" #~ msgid "Perform redundant load after store elimination in global common subexpression elimination" #~ msgstr "Excuter un stockage redondant aprs l'limination de sous-expression commune globale" #~ msgid "Perform enhanced load motion during global common subexpression elimination" #~ msgstr "Excuter un chargement amlior lors de l'limination de sous-expression commune globale" #~ msgid "Perform store motion after global common subexpression elimination" #~ msgstr "Excuter un stockage aprs l'limination de sous-expression commune globale" #~ msgid "Recognize GNU-defined keywords" #~ msgstr "Reconnatre les mots cls dfinis GNU" #~ msgid "Generate code for GNU runtime environment" #~ msgstr "Gnrer du code pour l'environnement GNU d'excution" #~ msgid "Enable guessing of branch probabilities" #~ msgstr "Autoriser l'estimation des probabilits de branchement" #~ msgid "Assume normal C execution environment" #~ msgstr "Prsumer que l'environnement d'excution C est normal" #~ msgid "Enable support for huge objects" #~ msgstr "Autoriser le support des grands objets" #~ msgid "Process #ident directives" #~ msgstr "Traiter les directive #ident" #~ msgid "Perform conversion of conditional jumps to branchless equivalents" #~ msgstr "Excuter la conversion des sauts conditionels des quivalents sans branchements" #~ msgid "Perform conversion of conditional jumps to conditional execution" #~ msgstr "Excuter la conversion des sauts conditionnels une excution conditionnel" #~ msgid "Export functions even if they can be inlined" #~ msgstr "Exporter les fonctions mme si elles peuvent tre enligne" #~ msgid "Emit implicit instantiations of inline templates" #~ msgstr "Produire les instanciations explicites de canevas enligne" #~ msgid "Emit implicit instantiations of templates" #~ msgstr "Produire les instanciations explicites de canevas" #~ msgid "Do not generate .size directives" #~ msgstr "Ne pas gnrer de directives .size" #~ msgid "Pay attention to the \"inline\" keyword" #~ msgstr "Porter attention au mot cl \"inline\"" #~ msgid "Integrate simple functions into their callers" #~ msgstr "Intgrer les fonctions simples l'intrieur des appelants" #~ msgid "-finline-limit=\tLimit the size of inlined functions to " #~ msgstr "-finline-limit=\tlimiter la taille des fonction enligne " #~ msgid "-finput-charset= Specify the default character set for source files." #~ msgstr "-finput-charset= spcifier le jeu de caractres par dfaut pour les fichiers source" #~ msgid "Instrument function entry and exit with profiling calls" #~ msgstr "Traiter les entres et les sorties des fonctions avec appels de profilage" #~ msgid "Generate code for functions even if they are fully inlined" #~ msgstr "Gnrer le code pour les fonctions mme si elles sont compltement enligne" #~ msgid "Emit static const variables even if they are not used" #~ msgstr "Produire des variables constantes statiques mme si elles ne sont pas utilises" #~ msgid "Give external symbols a leading underscore" #~ msgstr "Afficher les symboles externes prfixs d'un caractre de soulignement" #~ msgid "Perform loop optimizations" #~ msgstr "Excuter l'optimisation des boucles" #~ msgid "Set errno after built-in math functions" #~ msgstr "Initialiser errno aprs les fonctions internes mathmatiques" #~ msgid "Report on permanent memory allocation" #~ msgstr "Rapporter l'allocation de mmoire permanente" #~ msgid "Attempt to merge identical constants and constant variables" #~ msgstr "Tentative de fusion de constantes identique et des variables constantes" #~ msgid "Attempt to merge identical constants across compilation units" #~ msgstr "Tentative de fusion de constantes identiques travers des units de compilation" #~ msgid "-fmessage-length=\tLimit diagnostics to characters per line. 0 suppresses line-wrapping" #~ msgstr "-fmessage-length=\tlimiter la longueur des diagnotiques de caractres par ligne. 0 supprime l'enroulement de ligne" #~ msgid "Force all loop invariant computations out of loops" #~ msgstr "Forcer pour toutes les boucles des calculs invariants en dehors des boucles" #~ msgid "Don't warn about uses of Microsoft extensions" #~ msgstr "Ne donner d'avertissement au sujet de l'utilisation des extensions de Microsoft" #~ msgid "Use graph-coloring register allocation" #~ msgstr "Utiliser l'allocation des registres par coloriage de graphe" #~ msgid "Generate code for NeXT (Apple Mac OS X) runtime environment" #~ msgstr "Gnrer le code pour l'environnement d'excution du NeXT (Apple Mac OS X)" #~ msgid "Assume that receivers of Objective-C messages may be nil" #~ msgstr "Assumer que les receveur de messages Objective-C peut tre NIL" #~ msgid "Support synchronous non-call exceptions" #~ msgstr "Supporter les exceptions synchrones des non appels" #~ msgid "Enable Objective-C exception and synchronization syntax" #~ msgstr "Autoriser l'exception Objective-C et la synchronisation de syntaxe" #~ msgid "Perform loop unrolling for all loops" #~ msgstr "Excuter la boucle par dsenroulement de toutes les boucles" #~ msgid "Perform loop unrolling when iteration count is known" #~ msgstr "Excuter un d-roulement des boucles lorsque le compteur d'itration est connu" #~ msgid "When possible do not generate stack frames" #~ msgstr "Lorsque c'est possible ne pas gnrer des trames de pile" #~ msgid "Recognize C++ kewords like \"compl\" and \"xor\"" #~ msgstr "Reconnatre les mots cls C++ comme \"compl\" et \"xor\"" #~ msgid "Do the full register move optimization pass" #~ msgstr "Effectuer la passe d'optimisation complte des dplacements par les registres" #~ msgid "Optimize sibling and tail recursive calls" #~ msgstr "Optimiser sur mesure les appels enfants et rcursif" #~ msgid "Enable optional diagnostics" #~ msgstr "Autoriser les diagnostiques optionnels" #~ msgid "Pack structure members together without holes" #~ msgstr "Empaqueter les membres des structures ensembles sans trous" #~ msgid "Return small aggregates in memory, not registers" #~ msgstr "Retourner les petits aggrgats en mmoire, pas dans les registres" #~ msgid "Perform loop peeling" #~ msgstr "Excuter des rductions de boucles" #~ msgid "Enable machine specific peephole optimizations" #~ msgstr "Autoriser les optimisations des trous spcifiques une machine" #~ msgid "Enable an RTL peephole pass before sched2" #~ msgstr "Autoriser l'excution de la passe RTL avant sched2" #~ msgid "Downgrade conformance errors to warnings" #~ msgstr "Dgrader les erreurs de conformit en des avertissements" #~ msgid "Generate position-independent code if possible" #~ msgstr "Gnrer du code indpendant de la position si possible" #~ msgid "Generate position-independent code for executables if possible" #~ msgstr "Gnrer du code indpendant de la position pour les excutables si possible" #~ msgid "Generate prefetch instructions, if available, for arrays in loops" #~ msgstr "Gnrer des instructions prrecherches, si disponible, pour les tableaux dans les boucles" #~ msgid "Treat the input file as already preprocessed" #~ msgstr "Traiter le fichier d'entre comme ayant dj t pr-trait" #~ msgid "Enable basic program profiling code" #~ msgstr "Autoriser le code de profilage de base du programme" #~ msgid "Insert arc-based program profiling code" #~ msgstr "Insrer le code de profilage du programme de arc-based" #~ msgid "Enable common options for generating profile info for profile feedback directed optimizations" #~ msgstr "Autoriser les options communes pour la gnration d'information de profile pour le feedback d'optimisation direct de profile" #~ msgid "Enable common options for performing profile feedback directed optimizations" #~ msgstr "Autoriser les options communes pour effectuer le feedback d'optimisation direct de profile" #~ msgid "Insert code to profile values of expressions" #~ msgstr "Insrer le code pour profile les expressions de valeurs" #~ msgid "-frandom-seed=\tMake compile reproducible using " #~ msgstr "-frandom-seed=\tfaire une compilation reproduisible en utilisant " #~ msgid "Strength reduce all loop general induction variables" #~ msgstr "Renforcer la rduction de toutes les boucles par induction des variables" #~ msgid "Return small aggregates in registers" #~ msgstr "Retourner les petits aggrgats dans les registres" #~ msgid "Enables a register move optimization" #~ msgstr "Autoriser l'optimisation des dplacements par registre" #~ msgid "Perform a register renaming optimization pass" #~ msgstr "Effectuer une changement de nom de registres aprs une passe d'optimisation" #~ msgid "Reorder basic blocks to improve code placement" #~ msgstr "R-ordonner les blocs de base pour amliorer l'emplacement de code" #~ msgid "Reorder functions to improve code placement" #~ msgstr "R-ordonner les fonctions pour amliorer l'emplacement de code" #~ msgid "Used in Fix-and-Continue mode to indicate that object files may be swapped in at runtime" #~ msgstr "Utiliser le mode Fix-and-=Continue pour indique que des fichiers objets peuvent interchangs lors de l'excution" #~ msgid "Enable automatic template instantiation" #~ msgstr "Autoriser l'instanciation automatique de canevas" #~ msgid "Add a common subexpression elimination pass after loop optimizations" #~ msgstr "Ajouter une passe d'limination d'une sous-expression commune aprs les optimisations de boucle" #~ msgid "Run the loop optimizer twice" #~ msgstr "Excuter l'optimiseur de boucle deux fois" #~ msgid "Disable optimizations that assume default FP rounding behavior" #~ msgstr "Interdire les optimisation qui assument un comportement d'arrondissement FP par dfaut" #~ msgid "Generate run time type descriptor information" #~ msgstr "Gnrer l'information pour un type de descripteur lors de l'excution" #~ msgid "Enable scheduling across basic blocks" #~ msgstr "Autoriser l'ordonnancement travers les blocs de base" #~ msgid "Allow speculative motion of non-loads" #~ msgstr "Autoriser le mouvement spculatif de non chargements" #~ msgid "Allow speculative motion of some loads" #~ msgstr "Autoriser le mouvement spculatif de quelques chargements" #~ msgid "Allow speculative motion of more loads" #~ msgstr "Autoriser le mouvement spculatif de plusieurs chargements" #~ msgid "Allow premature scheduling of queued insns" #~ msgstr "Autoriser l'ordonnancement prmatur de queues insns" #~ msgid "Set dependence distance checking in premature scheduling of queued insns" #~ msgstr "Fixer la distance de vrification de dpendance dans l'ordonnancement prmatur d'insns en queue" #~ msgid "-fsched-stalled-insns-dep= Set dependence distance checking in premature scheduling of queued insns" #~ msgstr "-fsched-stalled-insns-dep= fixer la distance de vrification de dpendance dans l'ordonnancement d'insnsn en queue" #~ msgid "-fsched-stalled-insns= Set number of queued insns that can be prematurely scheduled" #~ msgstr "-fsched-stalled-insns= fixer le nombre d'insns en queu qui peuvent tre prmaturment ordonnancs" #~ msgid "-fsched-verbose=\tSet the verbosity level of the scheduler" #~ msgstr "-fsched-verbose=\tnitialiser le niveau de verbosit de l'ordonnanceur" #~ msgid "If scheduling post reload, do superblock scheduling" #~ msgstr "Si l'ordonnancement fait une post recharge, faire un ordonnancement de super bloc" #~ msgid "If scheduling post reload, do trace scheduling" #~ msgstr "Si l'ordonnancement fait une post recharge, laisse une trace de l'ordonnancement" #~ msgid "Reschedule instructions before register allocation" #~ msgstr "Rordonnancer les instructions avant l'allocation de registres" #~ msgid "Reschedule instructions after register allocation" #~ msgstr "Rordonnancer les instructions aprs l'allocation de registres" #~ msgid "Mark data as shared rather than private" #~ msgstr "Marquer les donnes comme partages au lieu de prives" #~ msgid "Use the same size for double as for float" #~ msgstr "Utiliser la mme taille pour un double que pour un flottant" #~ msgid "Use the narrowest integer type possible for enumeration types" #~ msgstr "Utiliser le type d'entier le moins large possible pour les types d'numration" #~ msgid "Force the underlying type for \"wchar_t\" to be \"unsigned short\"" #~ msgstr "craser le type sous-jacent de \"wchar_t\" vers \"unsigned short\"" #~ msgid "Disable optimizations observable by IEEE signaling NaNs" #~ msgstr "Dsactiver les optimisations observable par le signalement NaNs IEEE" #~ msgid "When \"signed\" or \"unsigned\" is not given make the bitfield signed" #~ msgstr "Lorsque \"signed\" ou \"unsigned\" n,est pas fourni rendre le champ de bits sign" #~ msgid "Make \"char\" signed by default" #~ msgstr "Rendre les char signs par dfaut" #~ msgid "Convert floating point constants to single precision constants" #~ msgstr "Convertir les constantes en virgules flottantes en constantes de simple prcision" #~ msgid "Insert stack checking code into the program" #~ msgstr "Insrer du code de vrificaion de la pile dans le programme" #~ msgid "-fstack-limit-register=\tTrap if the stack goes past " #~ msgstr "-fstack-limit-register=\tfaire un droutement si la pile va au del du " #~ msgid "-fstack-limit-symbol=\tTrap if the stack goes past symbol " #~ msgstr "-fstack-limit-symbol=\tfaire un droutement si la pile va au del du symbole " #~ msgid "Display statistics accumulated during compilation" #~ msgstr "Afficher les statistiques accumuls durant la compilation" #~ msgid "Perform strength reduction optimizations" #~ msgstr "Excuter un rduction en force des optimisations" #~ msgid "Assume strict aliasing rules apply" #~ msgstr "Prsumer que des rgles stricts d'alias s'appliquent" #~ msgid "Check for syntax errors, then stop" #~ msgstr "Vrifier les erreurs de syntaxes et puis stopper" #~ msgid "-ftabstop=\tDistance between tab stops for column reporting" #~ msgstr "-ftabstop=\tfixer la distance de la tabulation des colonnes dans les rapports" #~ msgid "-ftemplate-depth-\tSpecify maximum template instantiation depth" #~ msgstr "-ftemplate-depth-\tspcifier la profondeur maximale d'instanciation de canevas" #~ msgid "Create data files needed by \"gcov\"" #~ msgstr "Crer les fichiers de donnes ncessaires \"gcov\"" #~ msgid "Perform jump threading optimizations" #~ msgstr "Excuter des optimisations de sauts de thread" #~ msgid "Report the time taken by each compiler pass" #~ msgstr "Rapporter le temps pris par chaque passe de compilation" #~ msgid "-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]\tSet the default thread-local storage code generation model" #~ msgstr "-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]\tinitialiser le modle de gnration de code par dfaut de thread local" #~ msgid "Perform superblock formation via tail duplication" #~ msgstr "Excuter la formation du super bloc via la duplication de la queue" #~ msgid "Assume floating-point operations can trap" #~ msgstr "On assume que les oprations en virgule flottante peuvent tre attrappes" #~ msgid "Trap for signed overflow in addition, subtraction and multiplication" #~ msgstr "Attrapper les dbordements de signe dans l'addition, la soustraction et la multiplication" #~ msgid "Compile whole compilation unit at a time" #~ msgstr "Compiler compltement la fois une unit de compilation" #~ msgid "Allow math optimizations that may violate IEEE or ISO standards" #~ msgstr "Permettre les optimisations mathmatiques qui peuvent violer les standards IEEE ou ISO" #~ msgid "When \"signed\" or \"unsigned\" is not given make the bitfield unsigned" #~ msgstr "Lorsque \"signed\" ou \"unsigned\" n'est pas fourni rendre le champ de bits non sign" #~ msgid "Make \"char\" unsigned by default" #~ msgstr "Rendre les \"char\" non signs par dfaut" #~ msgid "Perform loop unswitching" #~ msgstr "Excuter des boucles sans branchement" #~ msgid "Just generate unwind tables for exception handling" #~ msgstr "Gnrer simplement des tables tendues pour le traitement des exceptions" #~ msgid "Use __cxa_atexit to register destructors" #~ msgstr "Utiliser __cxa_atexit pour enregistrer les destructeurs." #~ msgid "Add extra commentary to assembler output" #~ msgstr "Ajouter des commentaires additionnels la sortie de l'assembleur" #~ msgid "Use expression value profiles in optimizations" #~ msgstr "Utiliser le profile de la valeur d'expression dans l'optimisation" #~ msgid "Discard unused virtual functions" #~ msgstr "carter les fonctions virtuelles non utilises" #~ msgid "Implement vtables using thunks" #~ msgstr "Implanter les vtables en utilisant des thunks" #~ msgid "Emit common-like symbols as weak symbols" #~ msgstr "Produire les symboles communs comme des symboles faibles" #~ msgid "Construct webs and split unrelated uses of single variable" #~ msgstr "Construire une toile et sparer les utilisations de variables simples" #~ msgid "-fwide-exec-charset=\tConvert all wide strings and character constants to character set " #~ msgstr "-fwide-exec-charset=\tconvertir toutes les chanes et les constantes larges de caractres en jeux de caractres " #~ msgid "Generate a #line directive pointing at the current working directory" #~ msgstr "Gnrer une directive #line pointant sur le rpertoire courant de travail" #~ msgid "Assume signed arithmetic overflow wraps around" #~ msgstr "Assumer un dbordement arithmtique sign enroul" #~ msgid "Store strings in writable data section" #~ msgstr "Stocker les chanes dans les sections d'criture des donnes" #~ msgid "Emit cross referencing information" #~ msgstr "Produire l'information des rfrences croises" #~ msgid "Put zero initialized data in the bss section" #~ msgstr "Placer des donnes initialises de zros dans la section bss" #~ msgid "Generate lazy class lookup (via objc_getClass()) for use in Zero-Link mode" #~ msgstr "Gnrer un recherche molle de class (via objc_getClass()) pour l'utilisation en mode Zero-Link" #~ msgid "Generate debug information in default format" #~ msgstr "Gnrer les informations de mise au point dans le format par dfaut" #~ msgid "Generate debug information in COFF format" #~ msgstr "Gnrer les informations de mise au point dans le format COFF" #~ msgid "Generate debug information in DWARF v2 format" #~ msgstr "Gnrer les informations de mise au point dans le format DWARF v2" #~ msgid "Dump declarations to a .decl file" #~ msgstr "Vidanger les dclarations dans un fichier .decl" #~ msgid "Generate debug information in default extended format" #~ msgstr "Gnrer les informations de mise au point dans le format tendu par dfaut" #~ msgid "Generate debug information in STABS format" #~ msgstr "Gnrer les informations de mise au point dans le format STABS" #~ msgid "Generate debug information in extended STABS format" #~ msgstr "Gnrer les informations de mise au point dans le format tendu STABS" #~ msgid "Generate debug information in VMS format" #~ msgstr "Gnrer les informations de mise au point dans le format VMS" #~ msgid "Generate debug information in XCOFF format" #~ msgstr "Gnrer les information de mise au point dans le format XCOFF" #~ msgid "Generate debug information in extended XCOFF format" #~ msgstr "Gnrer les informations de mise au point dans le format tendu XCOFF" #~ msgid "-idirafter \tAdd to the end of the system include path" #~ msgstr "-idirafter \tajouter la fin du chemin systme d'inclusion" #~ msgid "-imacros \tAccept definition of macros in " #~ msgstr "-imacros \taccepter la dfinition de macros dans le " #~ msgid "-include \tInclude the contents of before other files" #~ msgstr "-include \tinclure le contenu du avant les autres fichiers" #~ msgid "-iprefix \tSpecify as a prefix for next two options" #~ msgstr "-iprefix \tslectionner le comme prfixer aux deux prochaines options" #~ msgid "-isysroot \tSet to be the system root directory" #~ msgstr "-isysroot \tslectionner le comme rpertoire racine du systme" #~ msgid "-isystem \tAdd to the start of the system include path" #~ msgstr "-isystem \tajouter le au dbut du chemin d'inclusion principal" #~ msgid "-iwithprefix \tAdd to the end of the system include path" #~ msgstr "-iwithprefix \tajouter le la fin du chemin d'inclusion principal" #~ msgid "-iwithprefixbefore \tAdd to the end of the main include path" #~ msgstr "-iwithprefixbefore \tajouter le la fin du chemin d'inclusion principal" #~ msgid "Do not search standard system include directories (those specified with -isystem will still be used)" #~ msgstr "Ne pas rechercher les rpertoires standard systme d'inclusion (ceux spcifis avec -isystem seront encore utiliss)" #~ msgid "Do not search standard system include directories for C++" #~ msgstr "Ne pas rechercher les rpertoires standard systme d'inclusion pour C++" #~ msgid "-o \tPlace output into " #~ msgstr "-o \tproduire la sortie dans le " #~ msgid "Enable function profiling" #~ msgstr "Autoriser le profilage de fonction" #~ msgid "Issue warnings needed for strict compliance to the standard" #~ msgstr "mettre les avertissements ncessaires pour tre conforme au standard" #~ msgid "Like -pedantic but issue them as errors" #~ msgstr "Identique -pedantic mais les marque comme des erreurs" #~ msgid "Generate C header of platform-specific features" #~ msgstr "Gnrer les en-ttes C pour les options spcifiques la plate-forme" #~ msgid "Do not display functions compiled or elapsed time" #~ msgstr "Ne pas afficher les fonctions compiles ou le temps coul" #~ msgid "Remap file names when including files" #~ msgstr "Rampper les noms lors de l'inclusion des fichiers" #~ msgid "Conform to the ISO 1998 C++ standard" #~ msgstr "Conforme au standard ISO C++ de 1998" #~ msgid "Conform to the ISO 1990 C standard" #~ msgstr "Conforme au standard ISO C de 1990" #~ msgid "Conform to the ISO 1999 C standard" #~ msgstr "Conforme au standard ISO C de 1999" #~ msgid "Deprecated in favor of -std=c99" #~ msgstr "Obsolte la faveur de l'option -std=c99" #~ msgid "Conform to the ISO 1998 C++ standard with GNU extensions" #~ msgstr "Conforme au standard ISO C++ de 1998 avec les extensions de GNU" #~ msgid "Conform to the ISO 1990 C standard with GNU extensions" #~ msgstr "Conforme au standard ISO C de 1990 avec les extensions de GNU" #~ msgid "Conform to the ISO 1999 C standard with GNU extensions" #~ msgstr "Conforme au standard ISO C de 1999 avec les extensions de GNU" #~ msgid "Deprecated in favor of -std=gnu99" #~ msgstr "Obsolte la faveur de l'option -std=gnu99" #~ msgid "Deprecated in favor of -std=c89" #~ msgstr "Obsolte la faveur de l'option -std=c89" #~ msgid "Conform to the ISO 1990 C standard as amended in 1994" #~ msgstr "Conforme au standard ISO C de 1990 tel amend en 1994" #~ msgid "Enable traditional preprocessing" #~ msgstr "Autoriser le traitement traditionnel" #~ msgid "-trigraphs\tSupport ISO C trigraphs" #~ msgstr "-trigraphs\tSupporter les tri-graphes ISO C" #~ msgid "Do not predefine system-specific and GCC-specific macros" #~ msgstr "Ne pas prdfinir les macros spcifiques au systme ou GCC" #~ msgid "Enable verbose output" #~ msgstr "Autoriser le mode bavard sur la sortie" #~ msgid "Display the compiler's version" #~ msgstr "Afficher la version du compilateur" #~ msgid "Suppress warnings" #~ msgstr "Supprimer les avertissements" #~ msgid "`-p' not supported; use `-pg' and gprof(1)" #~ msgstr " -p n'est pas support; utiliser -pg et gprof(1)" #~ msgid "GCC does not support -C without using -E" #~ msgstr "GCC ne supporte pas -C sans utiliser -E" #~ msgid "GCC does not support -CC without using -E" #~ msgstr "GCC ne supporte pas -CC sans utiliser -E" #~ msgid "may not use both -m32 and -m64" #~ msgstr "ne peut utiliser ensemble -m32 et -m64" #~ msgid "shared and mdll are not compatible" #~ msgstr "shared et mdll ne sont pas compatibles" #~ msgid "-current_version only allowed with -dynamiclib" #~ msgstr "-current_version permis seulement avec -dynamiclib" #~ msgid "-install_name only allowed with -dynamiclib" #~ msgstr "-install_name permis seulement avec with -dynamiclib" #~ msgid "-bundle not allowed with -dynamiclib" #~ msgstr "-bundle n'est pas permis avec -dynamiclib" #~ msgid "-bundle_loader not allowed with -dynamiclib" #~ msgstr "-bundle_loader n'est pas permis avec -dynamiclib" #~ msgid "-client_name not allowed with -dynamiclib" #~ msgstr "-client_name n'est pas permis avec -dynamiclib" #~ msgid "-force_cpusubtype_ALL not allowed with -dynamiclib" #~ msgstr "-force_cpusubtype_ALL n'est pas permis avec -dynamiclib" #~ msgid "-force_flat_namespace not allowed with -dynamiclib" #~ msgstr "-force_flat_namespace n'est pas permis avec -dynamiclib" #~ msgid "-keep_private_externs not allowed with -dynamiclib" #~ msgstr "-keep_private_externs n'est pas permis avec -dynamiclib" #~ msgid "-private_bundle not allowed with -dynamiclib" #~ msgstr "-private_bundle n'est pas permis avec -dynamiclib" #~ msgid "The -shared option is not currently supported for VAX ELF." #~ msgstr "L'option -shared n'est pas couramment supporte pour VAS ELF." #~ msgid "profiling not supported with -mg\n" #~ msgstr "profilage n'est pas support avec -mg\n" #~ msgid "may not use both -EB and -EL" #~ msgstr "ne peut utiliser ensemble -EB et -EL" #~ msgid "-pipe is not supported" #~ msgstr "-pipe n'est pas support" #~ msgid "-pg and -fomit-frame-pointer are incompatible" #~ msgstr "-pg et -fomit-frame-pointer sont incompatibles" #~ msgid "-fjni and -femit-class-files are incompatible" #~ msgstr "-fjni et -femit-class-files sont incompatibles" #~ msgid "-fjni and -femit-class-file are incompatible" #~ msgstr "-fjni et -femit-class-file sont incompatibles" #~ msgid "-femit-class-file should used along with -fsyntax-only" #~ msgstr "-femit-class-file dervait tre utilis avec -fsyntax-only" #~ msgid "-pg or -p and -fomit-frame-pointer are incompatible" #~ msgstr "-pg et -p et -fomit-frame-pointer sont incompatibles" #~ msgid "does not support multilib" #~ msgstr "ne supporte pas multilib" #~ msgid "-pg not supported on this platform" #~ msgstr "-pg n'est pas support sur cette plate-forme" #~ msgid "-p and -pp specified - pick one" #~ msgstr "-p et -pp spcifi - n'en prendre qu'un seul" #~ msgid "-G and -static are mutually exclusive" #~ msgstr "-G et -static sont mutuellement exclusives" #~ msgid "-mapcs-26 and -mapcs-32 may not be used together" #~ msgstr "-mapcs-26 et -mapcs-32 ne peuvent tre utiliss ensembles" #~ msgid "-msoft-float and -mhard_float may not be used together" #~ msgstr "-msoft-float et -mhard_float ne peuvent tre utilises ensembles" #~ msgid "-mbig-endian and -mlittle-endian may not be used together" #~ msgstr "-mbig-endian et -mlittle-endian ne peuvent tre utiliss ensemble" #~ msgid "the m210 does not have little endian support" #~ msgstr "Le m210 ne supporte pas le code pour systme octets de poids faible" #~ msgid "one of -c, -S, -gnatc, -gnatz, or -gnats is required for Ada" #~ msgstr "une parmi -c, -S, -gnatc, -gnatz ou -gnats est requise pour Ada" #~ msgid "-mhard-float not supported" #~ msgstr "-mhard-float n'est pas support" #~ msgid "-msingle-float and -msoft-float can not both be specified" #~ msgstr "-msingle-float et -msoft-float ne peuvent tre spcifis ensembles" #~ msgid " conflicting code gen style switches are used" #~ msgstr " code de gnration de style de switches utilises est en conflit" #~ msgid "GCC does not support -C or -CC without -E" #~ msgstr "GCC ne supporte pas -C ou -CC sans utiliser -E" #~ msgid "-E required when input is from standard input" #~ msgstr "-E est requis lorsque l'entre est faite partir de l'entre standard" #~ msgid "mno-cygwin and mno-win32 are not compatible" #~ msgstr "mno-cygwin et mno-win32 ne sont pas compatibles" #~ msgid "pointer to a member used in arithmetic" #~ msgstr "usage en arithmtique d'un pointeur vers un membre" #~ msgid "declaration of \"%s\" shadows a parameter" #~ msgstr "la dclaration de %s masque un paramtre" #~ msgid "Copyright (C) 2003 Free Software Foundation, Inc.\n" #~ msgstr "Copyright 2003 Free Software Foundation, Inc.\n" #~ msgid "Use the 26-bit version of the APCS" #~ msgstr "Utiliser la version 26 bits de APCS" #~ msgid "duplicate enum value `%D'" #~ msgstr "valeur d'numrateur %D en double" #~ msgid "duplicate field `%D' (as enum and non-enum)" #~ msgstr "champ %D en double (comme enum et non enum)" #~ msgid "duplicate nested type `%D'" #~ msgstr "type %D imbriqu en double" #~ msgid "duplicate field `%D' (as type and non-type)" #~ msgstr "duplicattion du champ %D (comme type et non type)" #~ msgid "duplicate member `%D'" #~ msgstr "membre %D est double" #~ msgid "ISO C++ forbids member `%D' with same name as enclosing class" #~ msgstr "ISO C++ interdit le membre %D avec le mme non de la classe de fermeture" #~ msgid "field `%D' declared static in union" #~ msgstr "champ %D dclar statique dans l'union" #~ msgid "ISO C++ forbids static data member `%D' with same name as enclosing class" #~ msgstr "ISO C++ interdit les donnes de membres statiques %D avec le mme nom comme classe de fermeture" #~ msgid "anachronistic use of array size in vector delete" #~ msgstr "utilisation anachronique de la taille d'un tableau dans un vecteur delete" #~ msgid "ISO C++ forbids aggregate initializer to new" #~ msgstr "ISO C++ interdit l'aggrgation d'initialiseur new" #~ msgid "neither the destructor nor the class-specific operator delete will be called, even if they are declared when the class is defined." #~ msgstr "ni le destructeur ni l'oprateur delete spcifique la classe ne sera appell, mme s'ils sont dclars lorsque la classe est dfinie" #~ msgid "Warn if deprecated class, method, or field is used" #~ msgstr "Avertir si une classe, une mthode ou un champ obsolte est utilis" #~ msgid "Warn if deprecated empty statements are found" #~ msgstr "Avertir si des dclarations vides obsoltes sont trouves" #~ msgid "Enable warnings about inter-procedural problems" #~ msgstr "Autoriser les avertissements propos des problmes inter-procdural" #~ msgid "Warn if .class files are out of date" #~ msgstr "Avertir si des fichier .class sont primes" #~ msgid "Warn if modifiers are specified when not necessary" #~ msgstr "Avertir si des modificateurs sont spcifis sans que cela ne soit ncessaires" #~ msgid "Warn about constructs with surprising meanings" #~ msgstr "Avertir propos des construits ayant des sens surprenants" #~ msgid "--CLASSPATH\tDeprecated; use --classpath instead" #~ msgstr "--CLASSPATH\tobsolte; utiliser --classpath la place" #~ msgid "Do not treat local variables and COMMON blocks as if they were named in SAVE statements" #~ msgstr "Traiter les variables locales et les blocs COMMON comme s'ils taient nomms dans une dclaration SAVE" #~ msgid "Backslashes in character and hollerith constants are special (not C-style)" #~ msgstr "Barres obliques inverses dans les constantes de caractres ou d'hollerith ne sont pas particulires (pas de style C)" #~ msgid "Delete libU77 intrinsics with bad interfaces" #~ msgstr "Dtruire les intrinsques libU77 ayant des interfaces errones" #~ msgid "Disable libU77 intrinsics with bad interfaces" #~ msgstr "Dsactiver les intrinsques libU77 ayant des interfaces errones" #~ msgid "Enable libU77 intrinsics with bad interfaces" #~ msgstr "Autoriser les intrinsques libU77 ayant des interfaces errones" #~ msgid "Hide libU77 intrinsics with bad interfaces" #~ msgstr "Cacher les intrinsques libU77 ayant des interfaces errones" #~ msgid "--bootclasspath=\tReplace system path" #~ msgstr "--bootclasspath=\tremplacer le systme" #~ msgid "Program written in strict mixed-case" #~ msgstr "Programme crit dans une stricte casse mlange" #~ msgid "Compile as if program written in lowercase" #~ msgstr "Compiler comme si le programme tait crit en minuscules" #~ msgid "Preserve case used in program" #~ msgstr "Prserver la casse utilise dans un programme" #~ msgid "Program written in lowercase" #~ msgstr "Programmes crit en minuscules" #~ msgid "Program written in uppercase" #~ msgstr "Programme crit en majuscules" #~ msgid "Compile as if program written in uppercase" #~ msgstr "Compiler comme si le programme tait crit en majuscules" #~ msgid "--classpath=\tSet class path" #~ msgstr "--classpath=\tfixer le chemin des classes" #~ msgid "Emit special debugging information for COMMON and EQUIVALENCE (disabled)" #~ msgstr "Produire des information spciales de mise au point pour COMMON et EQUIVALENCE (dsactiv)" #~ msgid "Allow '$' in symbol names" #~ msgstr "Permettre '$' dans les noms de symboles" #~ msgid "Have front end emulate COMPLEX arithmetic to avoid bugs" #~ msgstr "Avoir un frontal d'mulation pour l'arithmtique COMPLEXE pour viter les bugs" #~ msgid "--encoding=\tChoose input encoding (defaults from your locale)" #~ msgstr "--encoding=\tchoisir l'encodade d'entre (par dfaut provient de la locale)" #~ msgid "f2c-compatible code can be generated" #~ msgstr "code f2c compatible peut tre gnr" #~ msgid "Delete non-FORTRAN-77 intrinsics f2c supports" #~ msgstr "Dtruire les supports f2c intrinsques non Fortran 77" #~ msgid "Disable non-FORTRAN-77 intrinsics f2c supports" #~ msgstr "Dsactiver les supports f2c intrinsques non Fortran 77" #~ msgid "Enable non-FORTRAN-77 intrinsics f2c supports" #~ msgstr "Autoriser les supports f2c intrinsques non Fortran 77" #~ msgid "Hide non-FORTRAN-77 intrinsics f2c supports" #~ msgstr "Cacher les supports f2c intrinsques non Fortran 77" #~ msgid "Unsupported; generate libf2c-calling code" #~ msgstr "Non support; gnrer le code d'appel libf2c" #~ msgid "Program is written in typical FORTRAN 66 dialect" #~ msgstr "Programme est crit dans un dialecte typique FORTRAN 66" #~ msgid "Program is written in typical Unix-f77 dialect" #~ msgstr "Programme est crit dans un dialecte typique Unix f77" #~ msgid "Program is written in Fortran-90-ish dialect" #~ msgstr "Programme est crit dans un dialecte Fortran 90" #~ msgid "Delete non-FORTRAN-77 intrinsics F90 supports" #~ msgstr "Dtruire les supports F90 intrinsques non Fortran 77" #~ msgid "Disable non-FORTRAN-77 intrinsics F90 supports" #~ msgstr "Dsactiver les supports F90 intrinsques non Fortran 77" #~ msgid "Enable non-FORTRAN-77 intrinsics F90 supports" #~ msgstr "Autoriser les supports F90 intrinsques non Fortran 77" #~ msgid "Hide non-FORTRAN-77 intrinsics F90 supports" #~ msgstr "Cacher les supports F90 intrinsques non Fortran 77" #~ msgid "ffixed-line-length-\tSet the maximum line length to " #~ msgstr "ffixed-line-limit-\tfixer la longueur maximale de la ligne " #~ msgid "Unsupported; affects code generation of arrays" #~ msgstr "Non support; affecte la gnration de code des tableaux" #~ msgid "Always check for non gcj generated classes archives" #~ msgstr "Toujours vrifier dans les archives de classes non gnres gcj" #~ msgid "Generate code to check subscript and substring bounds" #~ msgstr "Gnrer du code pour vrifier les bornes des souscripts et des sous-chanes" #~ msgid "Program is written in Fortran-90-ish free form" #~ msgstr "Programme est crit dans un style libre Fortran 90" #~ msgid "Enable fatal diagnostics about inter-procedural problems" #~ msgstr "Autoriser les diagnostiques fatals propos des problmes entre procdures" #~ msgid "Delete non-FORTRAN-77 intrinsics g77 supports" #~ msgstr "Dtruire les supports g77 intrinsques non Fortran 77" #~ msgid "Disable non-FORTRAN 77 intrinsics F90 supports" #~ msgstr "Dsactiver les supports g77 intrinsques non Fortran 77" #~ msgid "Enable non-FORTRAN 77 intrinsics F90 supports" #~ msgstr "Autoriser les supports F90 intrinsques non Fortran 77" #~ msgid "Hide non-FORTRAN 77 intrinsics F90 supports" #~ msgstr "Cacher les supports g77 intrinsques non Fortran 77" #~ msgid "Use offset tables for virtual method calls" #~ msgstr "Utiliser des tables de dcalage pour les appels de mthodes virtuelles" #~ msgid "Initialize local vars and arrays to zero" #~ msgstr "Initialiser les vars locales et les tableaux zro" #~ msgid "Intrinsics letters in arbitrary cases" #~ msgstr "Lettres d'instrinsques en casse arbitraire" #~ msgid "Intrinsics spelled as e.g. SqRt" #~ msgstr "Intrinsques pelles tel que SqRt" #~ msgid "Intrinsics in lowercase" #~ msgstr "Intrinsques en minuscules" #~ msgid "Intrinsics in uppercase" #~ msgstr "Intrinsques en majuscules" #~ msgid "Assume native functions are implemented using JNI" #~ msgstr "Prsumer que les fonctions natives sont implantes et qu'elles utilisent JNI" #~ msgid "Language keyword letters in arbitrary cases" #~ msgstr "Lettres des mots cls du langage dans des casses arbitraires" #~ msgid "Language keywords spelled as e.g. IOStat" #~ msgstr "Mots cls du langage pells tel que IOStat" #~ msgid "Language keywords in lowercase" #~ msgstr "Mots cls du langage en minuscules" #~ msgid "Language keywords in uppercase" #~ msgstr "Mots cls du langage en majuscules" #~ msgid "Delete MIL-STD 1753 intrinsics" #~ msgstr "Dtruire les intrinsques MIL-STD 1753" #~ msgid "Disable MIL-STD 1753 intrinsics" #~ msgstr "Dsactiver les intrinsques MIL-STD 1753" #~ msgid "Enable MIL-STD 1753 intrinsics" #~ msgstr "Autoriser intrinsques MIL-STD 1753" #~ msgid "Hide MIL-STD 1753 intrinsics" #~ msgstr "Cacher les intrinsques MIL-STD 1753" #~ msgid "Take at least one trip through each iterative DO loop" #~ msgstr "Excuter une dernire fois la visite traves chaque boucle itrative DO" #~ msgid "Enable optimization of static class initialization code" #~ msgstr "Autorisser l'optimisation du code d'initialisation de classe statique" #~ msgid "Warn about use of (only a few for now) Fortran extensions" #~ msgstr "Avertir propos de l'utilisation (trs peu pour l'instant) des extensions Fortran" #~ msgid "Allow appending a second underscore to externals" #~ msgstr "Permettre l'ajout d'un second caractre de soulignement aux externes" #~ msgid "Do not print names of program units as they are compiled" #~ msgstr "Afficher les noms des units de programme tels que compiles" #~ msgid "Internally convert most source to lowercase" #~ msgstr "Convertir de manire interne la majorit des sources en majuscules" #~ msgid "Internally preserve source case" #~ msgstr "Prserver l'interne la casse des sources" #~ msgid "Internally convert most source to uppercase" #~ msgstr "Convertir l'interne la majorit des sources en majuscules" #~ msgid "Enable assignability checks for stores into object arrays" #~ msgstr "Autoriser la vrificaitions des affectations dans le stockage des tableaux d'objets" #~ msgid "Symbol names spelled in mixed case" #~ msgstr "Noms des symboles pells dans des casses mlanges" #~ msgid "Symbol names in lowercase" #~ msgstr "Noms de symboles en minuscules" #~ msgid "Symbol names in uppercase" #~ msgstr "Noms des symboles en majuscules" #~ msgid "Make prefix-radix non-decimal constants be typeless" #~ msgstr "Rendre les prfixes des bases des constantes non dcimales sans type" #~ msgid "Allow all ugly features" #~ msgstr "Permettre toutes les options laides" #~ msgid "Hollerith and typeless can be passed as arguments" #~ msgstr "Les Hollerith et sans type peuvent tre passs comme arguments" #~ msgid "Allow ordinary copying of ASSIGN'ed vars" #~ msgstr "Permettre le copie ordinaire des variable affectes" #~ msgid "Dummy array dimensioned to (1) is assumed-size" #~ msgstr "Tableau factice dont la taille des dimensions (1) est assume" #~ msgid "Trailing comma in procedure call denotes null argument" #~ msgstr "Virgule de fin dans l'appel de la procdure dnote un argument nul" #~ msgid "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z" #~ msgstr "Permettre REAL(Z) et AIMAG(Z) pour les DOUBLE COMPLEX Z" #~ msgid "Initialization via DATA and PARAMETER is not type-compatible" #~ msgstr "Initialisation via DATA et PARAMETER n'est pas un type compatible" #~ msgid "Allow INTEGER and LOGICAL interchangeability" #~ msgstr "Permettre l'interchangeabilit de INTEGER et LOGICAL" #~ msgid "Append underscores to externals" #~ msgstr "Ajouter des caractres de soulignement aux externes" #~ msgid "Delete libU77 intrinsics" #~ msgstr "Dtruire les intrinsques libU77" #~ msgid "Disable libU77 intrinsics" #~ msgstr "Dsactiver les intrinsques libU77" #~ msgid "Enable libU77 intrinsics" #~ msgstr "Autoriser les intrinsques libU77" #~ msgid "Hide libU77 intrinsics" #~ msgstr "Cacher les intrinsques libU77" #~ msgid "Print g77-specific version information and run internal tests" #~ msgstr "Afficher les informations de version spcifiques du compilateur g77, excuter les tests internes" #~ msgid "Program is written in VXT (Digital-like) FORTRAN" #~ msgstr "Programme est crit en Fortran VXT (forme de Digital)" #~ msgid "Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports" #~ msgstr "Dtruire les supports VXT Fortran intrinsques non Fortran-77" #~ msgid "Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports" #~ msgstr "Dsactiver les supports VXT Fortran intrinsques non Fortran-77" #~ msgid "Enable non-FORTRAN-77 intrinsics VXT FORTRAN supports" #~ msgstr "Dsactiver les supports VXT Fortran intrinsques non Fortran-77" #~ msgid "Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports" #~ msgstr "Cacher les supports VXT Fortran des intrinsques non Fortran-77" #~ msgid "Print internal debugging-related information" #~ msgstr "Afficher les informations internes relies la mise au point" #~ msgid "Treat initial values of 0 like non-zero values" #~ msgstr "Traiter les valeurs initiales de 0 comme des valeurs non zros" #~ msgid "-gnat\tSpecify options to GNAT" #~ msgstr "-gnat\tSpcifier les options pour GNAT" #~ msgid "concatenation of string literals with __FUNCTION__ is deprecated" #~ msgstr "la concatnation de chanes de litraux avec __FUNCTION__ est obsolte" #~ msgid "ISO C++ forbids range expressions in switch statements" #~ msgstr "ISO C++ interdit les intervalles dans les dclarations de switch " #~ msgid "ISO C++ forbids taking the address of a label" #~ msgstr "ISO C++ interdit de prendre l'adresse d'une tiquette" #~ msgid "ISO C forbids taking the address of a label" #~ msgstr "ISO C interdit de prendre l'adresse d'une tiquette" #~ msgid "declaration of `%s' shadows %s" #~ msgstr "la dclaration de %s masque %s" #~ msgid "`struct %s' incomplete in scope ending here" #~ msgstr " struct %s incomplte dans le champ terminant ici" #~ msgid "`union %s' incomplete in scope ending here" #~ msgstr " union %s incomplte dans le champ terminant ici" #~ msgid "`enum %s' incomplete in scope ending here" #~ msgstr " enum %s incomplte dans le champ terminant ici" #~ msgid "label `%s' defined but not used" #~ msgstr "tiquette %s dfinie mais pas utilise" #~ msgid "shadowing library function `%s'" #~ msgstr "masquage de la fonction %s de la bibliothque" #~ msgid "library function `%s' declared as non-function" #~ msgstr "fonction %s de la bibliothque dclare comme n'tant pas une fonction" #~ msgid "conflicting types for `%s'" #~ msgstr "types conflictuels pour %s " #~ msgid "redeclaration of `%s'" #~ msgstr "redclaration de %s " #~ msgid "prototype for `%s' follows" #~ msgstr "le prototype de %s suit" #~ msgid "non-prototype definition here" #~ msgstr "dfinition d'un non prototype ici" #~ msgid "prototype for `%s' follows and number of arguments doesn't match" #~ msgstr "le prototype de %s suit mais le nombre d'arguments ne concorde pas" #~ msgid "prototype for `%s' follows and argument %d doesn't match" #~ msgstr "le prototype de %s suit mais le nombre d'arguments %d ne concorde pas" #~ msgid "type qualifiers for `%s' conflict with previous decl" #~ msgstr "le qualificateur du type de %s est en conflit avec une dclaration prcdente" #~ msgid "redundant redeclaration of `%s' in same scope" #~ msgstr "redclaration redondante de %s dans le mme champ" #~ msgid "a parameter" #~ msgstr "un paramtre" #~ msgid "a previous local" #~ msgstr "une locale prcdente" #~ msgid "a global declaration" #~ msgstr "une dclaration globale" #~ msgid "`%s' used prior to declaration" #~ msgstr " %s utilis avant sa dclaration" #~ msgid "`%s' was declared implicitly `extern' and later `static'" #~ msgstr " %s a t dclar implicitement extern et plus loin static " #~ msgid "previous external decl of `%s'" #~ msgstr "dclaration externe prcdente de %s " #~ msgid "type mismatch with previous implicit declaration" #~ msgstr "non concordance de type avec la dclaration implicite prcdente" #~ msgid "`%s' was previously implicitly declared to return `int'" #~ msgstr " %s a t prcdemment dclar implicitement comme retournant un int " #~ msgid "`%s' was declared `extern' and later `static'" #~ msgstr " %s a t dclar extern et plus loin static " #~ msgid "`%s' locally external but globally static" #~ msgstr " %s localement externe mais globalement statique" #~ msgid "function `%s' was previously declared within a block" #~ msgstr "la fonction %s a t prcdemment dclare l'intrieur d'un bloc" #~ msgid "declaration of `%s' has `extern' and is initialized" #~ msgstr " %s initialis et dclar extern " #~ msgid "initializer fails to determine size of `%s'" #~ msgstr "l'initialisation n'a pas pu dterminer la taille de %s " #~ msgid "array size missing in `%s'" #~ msgstr "taille du tableau manquante dans %s " #~ msgid "storage size of `%s' isn't known" #~ msgstr "taille de stockage de %s inconnue" #~ msgid "storage size of `%s' isn't constant" #~ msgstr "la taille de stockage de %s n'est pas une constante" #~ msgid "ISO C forbids parameter `%s' shadowing typedef" #~ msgstr "ISO C interdit que le paramtre %s masque un typedef" #~ msgid "parameter `%s' points to incomplete type" #~ msgstr "le paramtre %s pointe vers un type incomplet" #~ msgid "parameter points to incomplete type" #~ msgstr "le paramtre pointe vers un type incomplet" #~ msgid "`void' in parameter list must be the entire list" #~ msgstr "si void est dans une liste de paramtres, toute la liste doit l'tre" #~ msgid "`union %s' declared inside parameter list" #~ msgstr " union %s dclare l'intrieur de la liste de paramtres" #~ msgid "`enum %s' declared inside parameter list" #~ msgstr " enum %s dclare l'intrieur de la liste de paramtres" #~ msgid "anonymous union declared inside parameter list" #~ msgstr "union anonyme dclare l'intrieur de la liste des paramtres" #~ msgid "anonymous enum declared inside parameter list" #~ msgstr "numration anonyme dclare l'intrieur de la liste des paramtres" #~ msgid "bit-field `%s' type invalid in ISO C" #~ msgstr "le champ de bits %s a un type invalide en C ISO" #~ msgid "duplicate member `%s'" #~ msgstr "membre %s apparat en double" #~ msgid "parm types given both in parmlist and separately" #~ msgstr "types des paramtres la fois donns dans la liste et sparment" #~ msgid "parameter `%s' declared void" #~ msgstr "paramtre %s dclar void " #~ msgid "universal-character-name '\\u%04x' not valid in identifier" #~ msgstr "nom-de-caractre-universel \\U%04x invalide dans l'identificcateur" #~ msgid "ignoring invalid multibyte character" #~ msgstr "caractre multioctet invalide ignor" #~ msgid "options array incorrectly sorted: %s is before %s" #~ msgstr "tableau des options mal tri : %s est avant %s" #~ msgid "-Wno-strict-prototypes is not supported in C++" #~ msgstr "-Wno-strict-prototypes n'est pas permis en C++" #~ msgid "" #~ "Switches:\n" #~ " -include Include the contents of before other files\n" #~ " -imacros Accept definition of macros in \n" #~ " -iprefix Specify as a prefix for next two options\n" #~ " -iwithprefix Add to the end of the system include path\n" #~ " -iwithprefixbefore Add to the end of the main include path\n" #~ " -isystem Add to the start of the system include path\n" #~ msgstr "" #~ "Options:\n" #~ " -include Inclure le contenu du avant d'autres fichiers\n" #~ " -imacros Accepter la dfinition de macros dans le \n" #~ " -iprefix Spcifier le comme un prfixe aux prochaines deux options\n" #~ " -iwithprefix Ajouter le ertoire la fin du chemin d'inclusion systme\n" #~ " -iwithprefixbefore Ajouter le ertoire la fin du chemin d'inclusion principal\n" #~ " -isystem Ajouter le ertoire au dbut du chemin d'inclusion systme\n" #~ msgid "" #~ " -idirafter Add to the end of the system include path\n" #~ " -I Add to the end of the main include path\n" #~ " -I- Fine-grained include path control; see info docs\n" #~ " -nostdinc Do not search system include directories\n" #~ " (dirs specified with -isystem will still be used)\n" #~ " -nostdinc++ Do not search system include directories for C++\n" #~ " -o Put output into \n" #~ msgstr "" #~ " -idirafter Ajouter le ertoire la fin du chemin d'inclusion systme\n" #~ " -I Ajouter le ertoire la fin du chemin d'inclusion principal\n" #~ " -I- Raffiner le contrle du chemin d'inclusion; consulter la doc\n" #~ " -nostdinc Ne pas rechercher dans les rpertoires d'inclusion systme\n" #~ " (les rp spcifis avec -isystem seront encore utiliss)\n" #~ " -nostdinc++ Ne pas rechercher dans les rpertoires d'inclusion systme pour C++\n" #~ " -o Produire la sortie dans le \n" #~ msgid "" #~ " -trigraphs Support ISO C trigraphs\n" #~ " -std= Specify the conformance standard; one of:\n" #~ " gnu89, gnu99, c89, c99, iso9899:1990,\n" #~ " iso9899:199409, iso9899:1999, c++98\n" #~ " -w Inhibit warning messages\n" #~ " -W[no-]trigraphs Warn if trigraphs are encountered\n" #~ " -W[no-]comment{s} Warn if one comment starts inside another\n" #~ msgstr "" #~ " -trigraphs Permettre les trigraphes C ISO\n" #~ " -std= Spcifier le de conformit utiliser; soit:\n" #~ " gnu89, gnu99, c89, c99, iso9899:1990,\n" #~ " iso9899:199409, iso9899:1999, c++98\n" #~ " -w Inhiber les messages d'avertissement\n" #~ " -W[no-]trigraphs Avertir [ou non] si des trigraphes sont rencontrs\n" #~ " -W[no-]comment{s} Avertir [ou non] si un commentaire dbute l'intrieur \n" #~ " d'un autre\n" #~ msgid "" #~ " -W[no-]traditional Warn about features not present in traditional C\n" #~ " -W[no-]undef Warn if an undefined macro is used by #if\n" #~ " -W[no-]import Warn about the use of the #import directive\n" #~ msgstr "" #~ " -W[no-]traditional Avertir [ou non] propos des fonctionnalits absentes\n" #~ " en C traditionnel\n" #~ " -W[no-]undef Avertir [ou non] propos des macros utilises dans des\n" #~ " #if sans tre dfinies\n" #~ " -W[no-]import Avertir [ou non] de l'utilisation de la directive #import\n" #~ msgid "" #~ " -W[no-]error Treat all warnings as errors\n" #~ " -W[no-]system-headers Do not suppress warnings from system headers\n" #~ " -W[no-]all Enable most preprocessor warnings\n" #~ msgstr "" #~ " -W[no-]error Changer [ou non] les avertissements en erreurs\n" #~ " -W[no-]system-headers Supprimer [ou non] les avertissements propos des \n" #~ " en-ttes systme\n" #~ " -W[no-]all Gnrer [ou non] la plupart des avertissements du\n" #~ " prprocesseur\n" #~ msgid "" #~ " -M Generate make dependencies\n" #~ " -MM As -M, but ignore system header files\n" #~ " -MD Generate make dependencies and compile\n" #~ " -MMD As -MD, but ignore system header files\n" #~ " -MF Write dependency output to the given file\n" #~ " -MG Treat missing header file as generated files\n" #~ msgstr "" #~ " -M Gnrer les dpendances pour make\n" #~ " -MM Comme -M, en ignorant les fichiers d'en-ttes systme\n" #~ " -MD Gnrer les dpendances pour make et compiler\n" #~ " -MMD Comme -MD, en ignorant les fichiers d'en-ttes systme\n" #~ " -MF crire les dpendances dans le \n" #~ " -MG Traiter les en-ttes manquants comme des fichiers gnrs\n" #~ msgid "" #~ " -MP\t\t\t Generate phony targets for all headers\n" #~ " -MQ Add a MAKE-quoted target\n" #~ " -MT Add an unquoted target\n" #~ msgstr "" #~ " -MP\t\t\t Gnrer des cibles factices pour tous les en-ttes\n" #~ " -MQ Ajouter une cible protge pour MAKE\n" #~ " -MT Ajouter une cible non protge\n" #~ msgid "" #~ " -D Define a with string '1' as its value\n" #~ " -D= Define a with as its value\n" #~ " -A= Assert the to \n" #~ " -A-= Disable the to \n" #~ " -U Undefine \n" #~ " -v Display the version number\n" #~ msgstr "" #~ " -D Dfinir une avec la chane 1 pour valeur\n" #~ " -D= Dfinir une de \n" #~ " -A=() Crer une assertion =\n" #~ " -A-=() Dissocier la la \n" #~ " -U Oublier la dfinition de la \n" #~ " -v Afficher le numro de version\n" #~ msgid "" #~ " -H Print the name of header files as they are used\n" #~ " -C Do not discard comments\n" #~ " -dM Display a list of macro definitions active at end\n" #~ " -dD Preserve macro definitions in output\n" #~ " -dN As -dD except that only the names are preserved\n" #~ " -dI Include #include directives in the output\n" #~ msgstr "" #~ " -H Afficher le nom des fichiers en-tte tel qu'utiliss\n" #~ " -C Ne pas mettre de ct les commantaires\n" #~ " -dM Afficher la liste des dfinitions de macro actives la fin\n" #~ " -dD Prserver les dfinitions de macros dans la sortie\n" #~ " -dN Comme -dD, mais seuls les noms sont prservs\n" #~ " -dI Inclure la directive #include dans la sortie\n" #~ msgid "" #~ " -f[no-]preprocessed Treat the input file as already preprocessed\n" #~ " -ftabstop= Distance between tab stops for column reporting\n" #~ " -P Do not generate #line directives\n" #~ " -remap Remap file names when including files\n" #~ " --help Display this information\n" #~ msgstr "" #~ " -f[no-]preprocessed Considrer [ou non] que le fichier d'entre est \n" #~ " dj pr-trait\n" #~ " -ftabstop= Largeur des tabulations pour indiquer la colonne\n" #~ " -P Ne pas gnrer des directives #line\n" #~ " -remap Refaire la table des noms de fichiers lors de\n" #~ " l'inclusion de fichiers\n" #~ " --help Afficher cet l'aide-mmoire\n" # FIXME #~ msgid "ISO C forbids the address of a cast expression" #~ msgstr "ISO C interdit l'adresse d'une expression transtype" #~ msgid "initializer for static variable is not constant" #~ msgstr "l'initialisation d'une variable statique n'est pas une constante" #~ msgid "initializer for static variable uses complicated arithmetic" #~ msgstr "l'initialisation d'une variable statique utilise une artihmtique complique" # FIXME #~ msgid "aggregate initializer is not constant" #~ msgstr "l'initialisation d'aggrgat n'est pas une constante" # FIXME #~ msgid "aggregate initializer uses complicated arithmetic" #~ msgstr "l'initialisation d'un aggrgat utilise une arithmtique complique" # FIXME #~ msgid "variable offset is passed partially in stack and in reg" #~ msgstr "le dcalage de variable est pass partiellement dans la pile et dans le registre" #~ msgid "variable size is passed partially in stack and in reg" #~ msgstr "la taille de la variable est passe partiellement dans la pile et le registre" # I18N #~ msgid "open %s" #~ msgstr "open %s" #~ msgid "incompatibilities between object file & expected values" #~ msgstr "incompatibilits entre le fichier objet et les valeurs attendues" #~ msgid "" #~ "\n" #~ "Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n" #~ msgstr "" #~ "\n" #~ "Traitement de la table des symboles #%d, dcalage = 0x%.8lx, sorte = %s\n" # FIXME #~ msgid "string section missing" #~ msgstr "chane de section manquante" #~ msgid "section pointer missing" #~ msgstr "pointeur de section manquant" #~ msgid "no symbol table found" #~ msgstr "aucune table des symboles trouve" #~ msgid "" #~ "\n" #~ "Updating header and load commands.\n" #~ "\n" #~ msgstr "" #~ "\n" #~ "Mise jour des en-ttes et des commandes de chargement.\n" #~ "\n" # FIXME #~ msgid "load command map, %d cmds, new size %ld.\n" #~ msgstr "Chargement de la carte des commandes, %d commandes, nouvelle taille %ld.\n" #~ msgid "" #~ "writing load commands.\n" #~ "\n" #~ msgstr "" #~ "criture des commandes de chargement.\n" #~ "\n" # I18N #~ msgid "close %s" #~ msgstr "close %s" #~ msgid "could not convert 0x%l.8x into a region" #~ msgstr "ne peut convertir 0x%l.8x en rgion" #~ msgid "%s function, region %d, offset = %ld (0x%.8lx)\n" #~ msgstr "fonction %s, rgion %d, dcalage = %ld (0x%.8lx)\n" #~ msgid "bad magic number" #~ msgstr "nombre magique erron" #~ msgid "bad header version" #~ msgstr "version d'en-tte errone" # FIXME: ou version d'en-tte brut errone #~ msgid "bad raw header version" #~ msgstr "version brute d'en-tte errone" # FIXME: ou tampon d'en-tte brut trop petit #~ msgid "raw header buffer too small" #~ msgstr "tampon brut d'en-tte trop petit" #~ msgid "old raw header file" #~ msgstr "ancien fichier d'en-tte brute" #~ msgid "unsupported version" #~ msgstr "version non reconnue" #~ msgid "unknown {de,en}code_mach_o_hdr return value %d" #~ msgstr "mauvaise valeur de retour (%d) de {de,en}code_mach_o_hdr" # I18N #~ msgid "fstat %s" #~ msgstr "fstat %s" # I18N #~ msgid "lseek %s 0" #~ msgstr "lseek %s 0" # I18N #~ msgid "read %s" #~ msgstr "read %s" #~ msgid "read %ld bytes, expected %ld, from %s" #~ msgstr "lu %ld octets, attendu %ld, de %s" # I18N #~ msgid "msync %s" #~ msgstr "msync %s" # I18N #~ msgid "munmap %s" #~ msgstr "munmap %s" # I18N #~ msgid "write %s" #~ msgstr "write %s" #~ msgid "wrote %ld bytes, expected %ld, to %s" #~ msgstr "crit %ld octets, attendu %ld, vers %s" #~ msgid "ISO C++ does not permit \"%s\" in #if" #~ msgstr "ISO C++ n'autorise pas %s dans #if" #~ msgid "invalid character '%c' in #if" #~ msgstr "caractre %c invalide dans #if" #~ msgid "invalid character '\\%03o' in #if" #~ msgstr "caractre \\%03o invalide dans #if" #~ msgid "absolute file name in remap_filename" #~ msgstr "nom de fichier absolu dans remap_filename" #~ msgid "%s: Not a directory" #~ msgstr "%s : ce n'est pas un rpertoire" #~ msgid "directory name missing after %s" #~ msgstr "nom de rpertoire manquant aprs %s" #~ msgid "file name missing after %s" #~ msgstr "nom de fichier manquant aprs %s" #~ msgid "path name missing after %s" #~ msgstr "nom de chemin manquant aprs %s" #~ msgid "unknown string token %s\n" #~ msgstr "lment lexical %s inconnu\n" #~ msgid "non-hex digit '%c' in universal-character-name" #~ msgstr "chiffre %c non hexadcimal dans le nom-de-caractre-universel" #~ msgid "universal-character-name on EBCDIC target" #~ msgstr "nom-de-caractre-universel pour une cible EBCDIC" #~ msgid "universal-character-name out of range" #~ msgstr "nom-de-caractre-universel est hors limite" #~ msgid "escape sequence out of range for its type" #~ msgstr "squence d'chappement hors limite pour son type" #~ msgid "#import is obsolete, use an #ifndef wrapper in the header file" #~ msgstr "#import est obsolte, enveloppez le avec #ifndef dans le fichier d'en-tte" # FIXME #~ msgid "#pragma once is obsolete" #~ msgstr "utiliser #pragma once est obsolte" #~ msgid "((anonymous))" #~ msgstr "((anonyme))" #~ msgid "%s: warnings being treated as errors\n" #~ msgstr "%s : les avertissements sont traits commes des erreurs\n" #~ msgid "At top level:" #~ msgstr "Hors de toute fonction :" #~ msgid "In member function `%s':" #~ msgstr "Dans la fonction membre %s :" #~ msgid "In function `%s':" #~ msgstr "Dans la fonction %s :" #~ msgid "" #~ "Please submit a full bug report,\n" #~ "with preprocessed source if appropriate.\n" #~ "See %s for instructions.\n" #~ msgstr "" #~ "Veuillez soumettre un rapport complet d'anomalies,\n" #~ "avec le source pr-trait si ncessaire.\n" #~ "Consultez %s pour plus de dtail.\n" # FRONT #~ msgid "In file included from %s:%d" #~ msgstr "Dans le fichier inclus depuis %s:%d" # I18N: This line should be indented with the previous entry #~ msgid "" #~ ",\n" #~ " from %s:%d" #~ msgstr "" #~ ",\n" #~ " depuis %s:%d" #~ msgid "internal regno botch: `%s' has regno = %d\n" #~ msgstr "regno interne mal fait : %s a regno = %d\n" #~ msgid "support for the DWARF1 debugging format is deprecated" #~ msgstr "le support du format de dbogage DWARF1 est obsolte" #~ msgid "can't get current directory" #~ msgstr "ne peut reprer le rpertoire courant" # FRONT #~ msgid "unsupported wide integer operation" #~ msgstr "opration sur de large entier non supporte" #~ msgid "Copyright (C) 2002 Free Software Foundation, Inc.\n" #~ msgstr "Copyright 2002 Free Software Foundation, Inc.\n" #~ msgid "mismatched braces in specs" #~ msgstr "accolades non concordantes dans les specs" #~ msgid "Could not open basic block file %s.\n" #~ msgstr "Ne pourrait pas ouvrir le fichier de blocs de base %s.\n" #~ msgid "Could not open program flow graph file %s.\n" #~ msgstr "Ne pourrait pas ouvrir le fichier de flux du programm %s.\n" #~ msgid "Could not open data file %s.\n" #~ msgstr "Ne pourrait pas ouvrir le fichier de donnes %s.\n" #~ msgid "Assuming that all execution counts are zero.\n" #~ msgstr "Suppose que tous les compteurs d'excution sont zro.\n" #~ msgid "No executable code associated with file %s.\n" #~ msgstr "Aucun code excutable associ avec le fichier %s.\n" #~ msgid "didn't use all bb entries of graph, function %s\n" #~ msgstr "N'a pas utiliser toutes les entres bb du graphe, fonction %s\n" #~ msgid "block_num = %ld, num_blocks = %d\n" #~ msgstr "block_num = %ld, num_blocks = %d\n" #~ msgid "ERROR: unexpected line number %ld\n" #~ msgstr "ERREUR : ligne numro %ld inattendue\n" #~ msgid "ERROR: too many basic blocks in function %s\n" #~ msgstr "ERREUR : trop de blocs de base dans la fonction %s\n" #~ msgid "ERROR: out of range line number in function %s\n" #~ msgstr "ERROR: numro de ligne hors limite dans la fonction %s\n" #~ msgid "Could not open source file %s.\n" #~ msgstr "N'a pu ouvrir le fichier source %s.\n" #~ msgid "Unexpected EOF while reading source file %s.\n" #~ msgstr "EOF inattendue lors de la lecture du fichier source %s.\n" #~ msgid "Creating %s.\n" #~ msgstr "Cration de %s.\n" #~ msgid "invalid string `%s' in define_cpu_unit" #~ msgstr "chane invalide %s dans define_cpu_unit" #~ msgid "invalid string `%s' in define_bypass" #~ msgstr "chane invalide %s dans define_bypass" #~ msgid "invalid first string `%s' in exclusion_set" #~ msgstr "premire chane invalide %s dans exclusion_set" #~ msgid "invalid second string `%s' in exclusion_set" #~ msgstr "seconde chane invalide %s dans exclusion_set" #~ msgid "invalid second string `%s' in presence_set" #~ msgstr "seconde chane invalide %s dans presence_set" #~ msgid "invalid option `%s' in automata_option" #~ msgstr "option invalide %s dans automata_option" #~ msgid "invalid `%s' in reservation `%s'" #~ msgstr " %s invalide dans la rservation %s " #~ msgid "unit `%s' in exclusion is not declared" #~ msgstr "unit %s dans l'exclusion n'est pas dclar" #~ msgid "unit `%s' excludes itself" #~ msgstr "unit %s s'exclue elle-mme" #~ msgid "repeated declaration of automaton `%s'" #~ msgstr "dclaration rpt de l'automate %s " #~ msgid "`%s' is already used as insn reservation name" #~ msgstr " %s est dj utilis dans le nom de rservation insn" #~ msgid "automaton `%s' is not declared" #~ msgstr "automate %s n'est pas dclar" #~ msgid "`%s' is declared as cpu unit" #~ msgstr " %s dclar comme unit cpu" #~ msgid "`%s' is declared as cpu reservation" #~ msgstr " %s est dclar comme rservation cpu" #~ msgid "repeated declaration of unit `%s'" #~ msgstr "dclaration rpt d'unit %s " #~ msgid "repeated declaration of reservation `%s'" #~ msgstr "dclaration rpt de rservation %s " #~ msgid "there is no insn reservation `%s'" #~ msgstr "il n'y a pas de rservation insn %s " #~ msgid "the same bypass `%s - %s' is already defined" #~ msgstr "le mme bypass %s - %s est dj dfini" #~ msgid "bypass `%s - %s' is already defined" #~ msgstr "bypass %s - %s est dj dfini" #~ msgid "undeclared unit or reservation `%s'" #~ msgstr "unit ou rservation %s non dclar" #~ msgid "unit `%s' is not used" #~ msgstr "unit %s n'est utilis" #~ msgid "reservation `%s' is not used" #~ msgstr "rservation %s n'est utilis" #~ msgid "cycle in definition of reservation `%s'" #~ msgstr "cycle de dfinition de rservation %s " #~ msgid "-split has no argument." #~ msgstr "-split n'a pas d'argument." #~ msgid "option `-split' has not been implemented yet\n" #~ msgstr "l'option -split n'a pas t implant encore\n" #~ msgid "Errors in DFA description" #~ msgstr "ERREURS dans la description DFA" #~ msgid "Error in writing DFA description file %s" #~ msgstr "Erreur dans l'criture du fichier de description DFA %s" #~ msgid "No input file name." #~ msgstr "Pas de nom de fichier." #~ msgid ".da file corrupted" #~ msgstr "fichier .da corrompu" #~ msgid "Generate STABS format debug info" #~ msgstr "Gnrer des infos de mise au point de format STABS" #~ msgid "Generate extended STABS format debug info" #~ msgstr "Gnrer des infos de mise au point de format STABS tendu" #~ msgid "Generate DWARF-1 format debug info" #~ msgstr "Gnrer les informations de mise au point du format DWARF-1" #~ msgid "Generate extended DWARF-1 format debug info" #~ msgstr "Gnrer les extensions des informations de mise au point du format DWARF-1" #~ msgid "Generate DWARF-2 debug info" #~ msgstr "Gnrer les informations de mise au point DWARF-2" #~ msgid "Generate XCOFF format debug info" #~ msgstr "Gnrer les informations de mise au point du format XCOFF" #~ msgid "Generate extended XCOFF format debug info" #~ msgstr "Gnrer les extensions de mise au point du format XCOFF" #~ msgid "Generate COFF format debug info" #~ msgstr "Gnrer les informations de mise au point du format COFF" #~ msgid "Generate VMS format debug info" #~ msgstr "Gnrer des infos de mise au point de format VMS" #~ msgid "Consider all mem refs through pointers as volatile" #~ msgstr "Considrer toutes les rfrence en mmoire comme faite par des pointeurs volatiles" #~ msgid "Consider all mem refs to global data to be volatile" #~ msgstr "Considrer toutes les rfrences mmoire des donnes globales comme volatiles" #~ msgid "Consider all mem refs to static data to be volatile" #~ msgstr "Considrer toutes les rfrences mmoire des donnes statiques comme volatiles" #~ msgid "Output GNU ld formatted global initializers" #~ msgstr "Produire des initialisations de globlales au format GNU ld" #~ msgid "Enable SSA optimizations" #~ msgstr "Autoriser les optimisations SSA" #~ msgid "Enable SSA conditional constant propagation" #~ msgstr "Autoriser la propagation SSA de constante conditionnelle" #~ msgid "Enable aggressive SSA dead code elimination" #~ msgstr "Autoriser l'limination agressive SSA du code mort" #~ msgid "Compile just for ISO C90" #~ msgstr "Compiler seulement pour ISO C90" #~ msgid "Determine language standard" #~ msgstr "Dterminer le standard du langage" #~ msgid "Make bit-fields by unsigned by default" #~ msgstr "Rendre les champs de bits non signs par dfaut" #~ msgid "Allow different types as args of ? operator" #~ msgstr "Permettre des types diffrents pour les arguments de l'oprateur ?" #~ msgid "Allow the use of $ inside identifiers" #~ msgstr "Permettre l'utilisation de $ l'intrieur d'identificateurs" #~ msgid "Use the smallest fitting integer to hold enums" #~ msgstr "Utiliser le plus petit entier pour contenir l'numration (enums)" #~ msgid "Warn if nested comments are detected" #~ msgstr "Avertir si des commentaires imbriqus sont dtects" #~ msgid "Don't warn about too many arguments to format functions" #~ msgstr "Ne pas avertir propos d'un surplus d'arguments pour des fonctions de format" #~ msgid "Warn about non-string-literal format strings" #~ msgstr "Avertir propos des chanes de format qui ne sont pas des chanes" #~ msgid "Warn about constructs whose meanings change in ISO C" #~ msgstr "Avertir propos de construits dont le sens change en C ISO" #~ msgid "Warn when trigraphs are encountered" #~ msgstr "Avertir lorsque des trigraphes sont rencontrs" #~ msgid "Mark strings as 'const char *'" #~ msgstr "Marque les chanes comme tant 'const char *'" #~ msgid " -pedantic-errors Like -pedantic except that errors are produced\n" #~ msgstr " -pedantic-errors identique -pedantic sauf que les erreurs sont produites\n" #~ msgid " -w Suppress warnings\n" #~ msgstr " -w supprimer les avertissements\n" #~ msgid " -W Enable extra warnings\n" #~ msgstr " -W autoriser les avertissements additionnels\n" #~ msgid " -Wunused Enable unused warnings\n" #~ msgstr " -Wunused autoriser les avertissements pour signaler les non utiliss\n" #~ msgid " -p Enable function profiling\n" #~ msgstr " -p autoriser le profilage des fonctions\n" #~ msgid "" #~ "\n" #~ "Language specific options:\n" #~ msgstr "" #~ "\n" #~ "Options spcifiques au langage:\n" #~ msgid " %-23.23s [undocumented]\n" #~ msgstr " %-23.23s [non document]\n" #~ msgid "" #~ "\n" #~ "There are undocumented %s specific options as well.\n" #~ msgstr "" #~ "\n" #~ "Il y a des options spcifiques %s qui ne sont pas documents aussi.\n" #~ msgid "" #~ "\n" #~ " Options for %s:\n" #~ msgstr "" #~ "\n" #~ " Options pour %s:\n" #~ msgid "unrecognized option `%s'" #~ msgstr "option %s non reconnue" #~ msgid "-Wid-clash-LEN is no longer supported" #~ msgstr "-Wid-clash-LEN n'est plus supporte" #~ msgid "use -gdwarf -g%d for DWARF v1, level %d" #~ msgstr "utiliser -gdwarf -g%d pour DWARF v1, niveau %d" #~ msgid "use -gdwarf-2 for DWARF v2" #~ msgstr "utiliser -gdwarf-2 pour DWARF v2" #~ msgid "ignoring option `%s' due to invalid debug level specification" #~ msgstr "option %s ignore en raison de la spcification du niveau de mise au poitn invalide" #~ msgid "`%s': unknown or unsupported -g option" #~ msgstr " %s : inconnu ou non support option -g" #~ msgid "`%s' ignored, conflicts with `-g%s'" #~ msgstr " %s ignor, en conflit avec -g%s" #~ msgid "-param option missing argument" #~ msgstr "argument manquant pour l'option -param" #~ msgid "invalid --param option: %s" #~ msgstr "option invalide --param: %s" #~ msgid "(it is valid for %s but not the selected language)" #~ msgstr "(c'est valide pour %s mais pas pour le langage sclectionn)" #~ msgid "#`%s' not supported by %s#" #~ msgstr " %s n'est pas support par %s#" #~ msgid "The maximuem number of instructions by repeated inlining before gcc starts to throttle inlining" #~ msgstr "Le nombre maximum d'instructions par type inline rpt avant l'excution de gcc au throttle enligne" #~ msgid "The number of instructions in a single functions still eligible to inlining after a lot recursive inlining" #~ msgstr "Le nombre d'instructions dans une fonction simple encore ligible au type enligne aprs plusieurs inline rcursifs" #~ msgid "Use Mingw32 interface" #~ msgstr "Utiliser l'interface Mingw32" #~ msgid "Use Cygwin interface" #~ msgstr "Utiliser l'interface Cygwin" #~ msgid "Use bare Windows interface" #~ msgstr "Utiliser l'interface brute Windows" #~ msgid "Only initialized variables can be placed into program memory area." #~ msgstr "seules les variables initialises peuvent tre places dans la zone mmoire du programme" #~ msgid "const objects cannot go in .sdata/.sbss" #~ msgstr "constantes objets ne peuvent aller dans .sdata/.sbss" #~ msgid "Generate code for a Sun FPA" #~ msgstr "Gnrer le code pour un Sun FPA" #~ msgid "Do not generate code for a Sun FPA" #~ msgstr "Ne pas gnrer le code pour un Sun FPA" #~ msgid "Generate code for a Sun Sky board" #~ msgstr "Gnrer le code pour un Sun Sky board" #~ msgid "Do not use Sky linkage convention" #~ msgstr "Ne pas utiliser la convention d'dition de lien Sky" #~ msgid "Generate code for a 68881" #~ msgstr "Gnrer du code pour un 68881" #~ msgid "internal gcc monitor: short-branch(%x)" #~ msgstr "moniteur interne gcc: branchement court(%x)" #~ msgid "internal gcc error: Can't express symbolic location" #~ msgstr "erreur interne gcc: ne peut exprimer la localisation symbolique" #~ msgid "argument #%d is a structure" #~ msgstr "argument #%d est une structure" #~ msgid "%%R not followed by %%B/C/D/E" #~ msgstr "%%R n'est pas suivi de %%B/C/D/E" #~ msgid "invalid %%Q value" #~ msgstr "valeur %%Q invalide" #~ msgid "invalid %%o value" #~ msgstr "valeur %%o invalide" #~ msgid "invalid %%s/S value" #~ msgstr "valeur %%s/S invalide" #~ msgid "invalid %%B value" #~ msgstr "valeur %%B invalide" #~ msgid "`%%d' operand isn't a register" #~ msgstr "l'oprande %%d n'est pas un registre" #~ msgid "operand is r0" #~ msgstr "oprande est R0" #~ msgid "operand is const_double" #~ msgstr "oprande est de type const_double" #~ msgid "-mtrap-large-shift and -mhandle-large-shift are incompatible" #~ msgstr "-mtrap-large-shift et -mhandle-large-shift sont incompatibles" #~ msgid "invalid option `-mshort-data-%s'" #~ msgstr "option invalide -mshort-data-%s'" #~ msgid "-mshort-data-%s is too large " #~ msgstr "-mshort-data-%s est trop grande " #~ msgid "-mshort-data-%s and PIC are incompatible" #~ msgstr "-mshort-data-%s et PIC sont incompatibles" #~ msgid "bad value (%s) for -mips switch" #~ msgstr "valeur errone (%s) pour l'option -mips" #~ msgid "invalid option `entry%s'" #~ msgstr "option invalide entry%s'" #~ msgid "-mentry is only meaningful with -mips-16" #~ msgstr "-mentry n'a de sens qu'avec -mips-16" #~ msgid "MIPS ECOFF format does not allow changing filenames within functions with #line" #~ msgstr "format MIPS ECOFF ne permet pas de changer le nom des fichiers l'intrieur des fonction avec #line" #~ msgid "fp_offset (%ld) or end_offset (%ld) is less than zero" #~ msgstr "fp_offset (%ld) ou end_offset (%ld) est plus petit que zro" #~ msgid "Trap on integer divide overflow" #~ msgstr "Intercepter les dbordements lors de divisions avec des entiers" #~ msgid "Don't trap on integer divide overflow" #~ msgstr "Ne pas intercepter les dbordement lors de divisions avec des entiers" #~ msgid "Use mips16 entry/exit psuedo ops" #~ msgstr "Utiliser les pseudo-op mips16 d'entre/sortie" #~ msgid "Don't use MIPS16 instructions" #~ msgstr "Ne pas utiliser les instructions MIPS16" #~ msgid "invalid %%z value" #~ msgstr "valeur %%z invalide" #~ msgid "invalid %%Z value" #~ msgstr "valeur %%Z invalide" #~ msgid "invalid %%j value" #~ msgstr "valeur %%j invalide" #~ msgid "can't have varargs with -mfp-arg-in-fp-regs" #~ msgstr "ne peut avoir varargs avec -mfp-arg-in-fp-regs" #~ msgid "unknown -mvrsave= option specified: '%s'" #~ msgstr "option -mvrsave inconnue spcifis: %s " #~ msgid "64 bit mode" #~ msgstr "mode 64 bits" #~ msgid "31 bit mode" #~ msgstr "mode 31 bits" #~ msgid "Use the Xtensa code density option" #~ msgstr "Utiliser l'option de densit du code Xtensa" #~ msgid "Do not use the Xtensa code density option" #~ msgstr "Ne pas utiliser l'option de densit du code Xtensa" #~ msgid "Use the Xtensa MAC16 option" #~ msgstr "Utiliser l'option Xtensa MAC16" #~ msgid "Do not use the Xtensa MAC16 option" #~ msgstr "Ne pas utiliser l'option Xtensa MAC16" #~ msgid "Use the Xtensa MUL16 option" #~ msgstr "Utiliser l'option Xtensa MUL16" #~ msgid "Do not use the Xtensa MUL16 option" #~ msgstr "Ne pas utiliser l'option Xtensa MUL16" #~ msgid "Use the Xtensa MUL32 option" #~ msgstr "Utiliser l'option Xtensa MUL16" #~ msgid "Do not use the Xtensa MUL32 option" #~ msgstr "Ne pas utiliser l'option Xtensa MUL32" #~ msgid "Use the Xtensa NSA option" #~ msgstr "Utiliser l'option Xtensa NSA" #~ msgid "Do not use the Xtensa NSA option" #~ msgstr "Ne pas utiliser l'option Xtensa NSA" #~ msgid "Use the Xtensa MIN/MAX option" #~ msgstr "Utiliser l'option Xtensa MIN/MAX" #~ msgid "Do not use the Xtensa MIN/MAX option" #~ msgstr "Ne pas utiliser l'option Xtensa MIN/MAX" #~ msgid "Use the Xtensa SEXT option" #~ msgstr "Utiliser l'option Xtensa SEXT" #~ msgid "Do not use the Xtensa SEXT option" #~ msgstr "Ne pas utiliser l'option Xtensa SEXT" #~ msgid "Use the Xtensa boolean register option" #~ msgstr "Utiliser l'option des registres boolens Xtensa" #~ msgid "Do not use the Xtensa boolean register option" #~ msgstr "Ne pas utiliser l'option des registres boolens Xtensa" #~ msgid "Use the Xtensa floating-point unit" #~ msgstr "Utiliser l'unit matrielle pour virgule flottante Xtensa" #~ msgid "Do not use the Xtensa floating-point unit" #~ msgstr "Ne pas utiliser l'unit matrielle pour virgule flottante Xtensa" #~ msgid "Serialize volatile memory references with MEMW instructions" #~ msgstr "Srialiser les rfrences la mmoire volatile avec des instructions MEMW" #~ msgid "Do not serialize volatile memory references with MEMW instructions" #~ msgstr "Ne pas srialiser les rfrences la mmoire volatile avec des instructions MEMW" #~ msgid "type of `%E' does not match destructor type `%T' (type was `%T')" #~ msgstr "type de %E ne concorde pas avec le type du destructeur %T (type tait %T )" #~ msgid "`%D' is a namespace" #~ msgstr " %D est un nom d'espace" #~ msgid "base object `%E' of scoped method call is of non-aggregate type `%T'" #~ msgstr "objet de base %E de la porte d'appel de la mthode n'est pas de type aggrgat %T " #~ msgid "destructors take no parameters" #~ msgstr "destructeurs ne prend aucun paramtre" #~ msgid "destructor name `~%T' does not match type `%T' of expression" #~ msgstr "nom du destructeur ~%T ne concorde pas avec le type %T de l'expression" #~ msgid "%s %+#D%s" #~ msgstr "%s %+#D%s" #~ msgid "%s for `%T ? %T : %T' operator" #~ msgstr "%s pour %T ? %T : %T comme oprateur" #~ msgid "%s for `%T [%T]' operator" #~ msgstr "%s pour l'oprateur %T [%T]" #~ msgid "%s for `%T %s %T' operator" #~ msgstr "%s pour l'oprateur %T %s [%T]" #~ msgid "%s for `%s %T' operator" #~ msgstr "%s pour l'oprateur %s [%T]" #~ msgid "`%D' must be declared before use" #~ msgstr " %D doit tre dclar avant son usage" #~ msgid " initializing argument %P of `%D' from result of `%D'" #~ msgstr " initialisation de l'argument %P de %D partir du rsultat %D " #~ msgid " initializing temporary from result of `%D'" #~ msgstr " initialisation temporaire partir du rsultat %D " #~ msgid "cannot receive objects of non-POD type `%#T' through `...'" #~ msgstr "ne peut recevoir d'objets de type non POD %#T through ... " #~ msgid "field `%D' invalidly declared offset type" #~ msgstr "champ %D incorrectement valid comme type de dcalage" #~ msgid "lookup of `%D' finds `%#D'" #~ msgstr "recherche de %D a repr %#D " #~ msgid " instead of `%D' from dependent base class" #~ msgstr " au lieu de %D partir d'un classe de base dpendante" #~ msgid "lookup of `%D' in the scope of `%#T' (`%#D') does not match lookup in the current scope (`%#D')" #~ msgstr "recherche de %D dans la porte de %#T ( %#D ) ne concorde pas avec la recherche dans la porte courante ( %#D )" #~ msgid "invalid declarator" #~ msgstr "dclarateur invalide" #~ msgid "`%T' is implicitly a typename" #~ msgstr " %T est implicitement un typename" #~ msgid "parameter `%D' invalidly declared offset type" #~ msgstr "paramtre %D incorrectement valid comme type de dcalage" #~ msgid "`%s %T' declares a new type at namespace scope" #~ msgstr " %s %T dclare un nouveau type dans l'tendue de l'espace de noms" #~ msgid " names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T'" #~ msgstr " noms des classes de base dpendantes ne sont pas visibles la recherche de nom non qualifi - pour rfrer type par hritage, disons %s %T::%T" #~ msgid "base class `%T' has incomplete type" #~ msgstr "classe de base %T a un type incomplet" #~ msgid "semicolon missing after declaration of `%#T'" #~ msgstr "point-virgule manquant aprs la dclaration %#T" #~ msgid "template `%#D' instantiated in file without #pragma interface" #~ msgstr "canevas %#D instanci dans le fichier sans interface #pragma" #~ msgid "template `%#D' defined in file without #pragma interface" #~ msgstr "canevas %#D dfini dans le fichier sans interface #pragma" #~ msgid "parser may be lost: is there a '{' missing somewhere?" #~ msgstr "analyseur syntaxique est perdu: y-a-t-il un { manquant quelque part?" #~ msgid "invalid data member initialization" #~ msgstr "initialisation de donnes membres invalide" #~ msgid "(use `=' to initialize static data members)" #~ msgstr "(utiliser = pour initialiser les donnes de membres)" #~ msgid "too many initialization functions required" #~ msgstr "trop d'initialisations de fonctions requises" #~ msgid "`%D' is not a namespace" #~ msgstr " %D n'est pas un espace de noms" #~ msgid "a using-declaration cannot specify a template-id. Try `using %T::%D'" #~ msgstr "l'utilisation de dclaration ne peut spcifier template-id. Essayer using %T::%D'" #~ msgid "`%T' does not have a class or union named `%D'" #~ msgstr " %T n'a pas de classe ou d'union nomm %D " #~ msgid "`%T' is not a class or union type" #~ msgstr " %T n'est pas une classe ou un type d'union" #~ msgid "`%s' not supported by %s" #~ msgstr " %s n'est pas support par %s" #~ msgid "(static %s for %s)" #~ msgstr "(static %s pour %s)" #~ msgid "%s: In instantiation of `%s':\n" #~ msgstr "%s: dans l'instanciation de %s :\n" #~ msgid "%s:%d: instantiated from `%s'\n" #~ msgstr "%s:%d: instanci partir de %s \n" #~ msgid "%s:%d: instantiated from here\n" #~ msgstr "%s:%d: instanci partir d'ici\n" #~ msgid "previous friend declaration of `%D'" #~ msgstr "dclaration amie prcdente de %D " #~ msgid "cannot call destructor `%T::~%T' without object" #~ msgstr "ne peut appeler le destructeur %T::~%T sans objet" #~ msgid "invalid use of member `%D'" #~ msgstr "utilisation invalide du membre %D " #~ msgid "no method `%T::%D'" #~ msgstr "pas de mthode %T::%D" #~ msgid "object missing in use of pointer-to-member construct" #~ msgstr "objet manquant dans l'utilisation du construit pointeur--membre" #~ msgid "member `%D' is non-static but referenced as a static member" #~ msgstr "membre %D est non statique mais rfrenc comme membre statique" #~ msgid "object missing in `%E'" #~ msgstr "objet manquant dans %E " #~ msgid "initializer list being treated as compound expression" #~ msgstr "liste d'initaliseurs a t trait comme une expression compose" #~ msgid "cannot declare references to references" #~ msgstr "ne peut dcalrer des rfrences vers des rfrences" #~ msgid "cannot declare pointers to references" #~ msgstr "ne peut dclarer des pointeurs vers des rfrences" #~ msgid "type name expected before `&'" #~ msgstr "nom de type attendu avant &" #~ msgid "semicolon missing after %s declaration" #~ msgstr "; manquant aprs la dclaration de %s" #~ msgid "semicolon missing after declaration of `%T'" #~ msgstr "; manquant aprs la dclaration %T " #~ msgid "`::%D' undeclared (first use here)" #~ msgstr "::%D non dclar (premire utilisation ici)" #~ msgid "real-valued template parameters when cross-compiling" #~ msgstr "canevas de paramtre en valeur relle lors de la compilation croise" #~ msgid "use of linkage spec `%D' is different from previous spec `%D'" #~ msgstr "utilisation de spc de liaisons %D est diffrente de la spec prcdente %D " #~ msgid "no base or member initializers given following ':'" #~ msgstr "pas d'initialiseur de base ou membre donn aprs :" #~ msgid "use of template qualifier outside template" #~ msgstr "utilisation d'un qualificateur de canevas en dehors d'un canevas" #~ msgid "ISO C++ forbids an empty condition for `%s'" #~ msgstr "ISO C++ interdit une condition vide pour %s " #~ msgid "definition of class `%T' in condition" #~ msgstr "dfinition de la classe %T dans la condition" #~ msgid "definition of enum `%T' in condition" #~ msgstr "dfinition de l'aggrgat %T dans la condition" #~ msgid "definition of array `%#D' in condition" #~ msgstr "dfinition du tableau %#D dans la condition" #~ msgid "old style placement syntax, use () instead" #~ msgstr "ancien style de syntaxe de positionnement, utiliser () la place" #~ msgid "`%T' is not a valid expression" #~ msgstr " %T n'est pas une expression valide" #~ msgid "initialization of new expression with `='" #~ msgstr "initialisation de la nouvelle expression avec = " #~ msgid "sigof type specifier" #~ msgstr "spcificateur du type sigof" #~ msgid "`sigof' applied to non-aggregate expression" #~ msgstr " sigof appliqu une expression de non aggrgats" #~ msgid "`sigof' applied to non-aggregate type" #~ msgstr " sigof appliqu un type non aggrgat" #~ msgid "storage class specifier `%s' not allowed after struct or class" #~ msgstr "spcificateur de classe de stockages %s n'est pas permis aprs struct ou class" #~ msgid "type specifier `%s' not allowed after struct or class" #~ msgstr "spcificateur de type %s n'est pas permis aprs struct ou class" #~ msgid "type qualifier `%s' not allowed after struct or class" #~ msgstr "qualificateur de type %s n'est pas permis aprs struct ou class" #~ msgid "no body nor ';' separates two class, struct or union declarations" #~ msgstr "pas de corps ni de ; sparant les deux dclarations de classes, struct ou union" #~ msgid "no bases given following `:'" #~ msgstr "pas de base donne aprs :" #~ msgid "multiple access specifiers" #~ msgstr "spcificateurs d'accs multiples" #~ msgid "multiple `virtual' specifiers" #~ msgstr "spcificateurs virtual multiples" #~ msgid "missing ';' before right brace" #~ msgstr "; manquant avant l'accolade de droite" #~ msgid "ISO C++ forbids array dimensions with parenthesized type in new" #~ msgstr "ISO C++ interdit l'utilisation de parenthses autour du type pour les dimensions de tableaux avec new" #~ msgid "`%T' is not a class or namespace" #~ msgstr " %T n'est pas une classe ou un espace de noms" #~ msgid "ISO C++ forbids label declarations" #~ msgstr "ISO C++ interdit la dclaration d'tiquette" #~ msgid "label must be followed by statement" #~ msgstr "l'tiquette doit tre suivie d'une dclaration" #~ msgid "must have at least one catch per try block" #~ msgstr "doit avoir au moins un intercepteur par bloc d'essais" #~ msgid "ISO C++ forbids compound statements inside for initializations" #~ msgstr "ISO C++ interdit les dclarations composes l'intrieur des initialisations" #~ msgid "possibly missing ')'" #~ msgstr ") possiblement manquante" #~ msgid "type specifier omitted for parameter" #~ msgstr "spcificateur de type omis pour le paramtre" #~ msgid "`%E' is not a type, use `typename %E' to make it one" #~ msgstr " %E n'est pas un type, utiliser typename %E pour en faire un" #~ msgid "no type `%D' in `%T'" #~ msgstr "pas de type %D dans %T " #~ msgid "type specifier omitted for parameter `%E'" #~ msgstr "spcificateur de type omis pour le paramtre %E " #~ msgid "type `%T' composed from a local class is not a valid template-argument" #~ msgstr "type %T compos partir d'une classe locale n'est pas un canevas d'argument valide" #~ msgid "adjusting pointers for covariant returns" #~ msgstr "ajuster les pointeurs pour des retours co-variants" #~ msgid " overriding `%#D' (must be pointer or reference to class)" #~ msgstr " crasant %#D (doit tre un pointeur ou une rfrence vers un classe)" #~ msgid " overriding `%#D' (must use pointer or reference)" #~ msgstr " crasant %#D (doit utiliser un pointeur ou un rfrence)" #~ msgid "return identifier `%D' already in place" #~ msgstr "identificateur retourn %D est dj en place" #~ msgid "can't redefine default return value for constructors" #~ msgstr "ne peut redfinir la valeur retourne par dfaut pour les constructeurs" #~ msgid "calling type `%T' like a method" #~ msgstr "appel du type %T comme une mthode" #~ msgid "destructor specifier `%T::~%T()' must have matching names" #~ msgstr "spcificateur du destructeur %T::~%T() doit avoir des noms concordants" #~ msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy" #~ msgstr "nom d'identificateur %s entre en conflit avec la stratgie interne de dnomination de GNU C++" #~ msgid "parse error at end of saved function text" #~ msgstr "erreur d'analyse syntaxique la fin de la sauvegarde de la fonction texte" #~ msgid "%Hend of file read inside definition" #~ msgstr "%H fin de fichier lors de la lecture l'intrieur d'une dfinition" #~ msgid "parse error in method specification" #~ msgstr "erreur d'analyse syntaxique dans la spcification de fonction" #~ msgid "function body for constructor missing" #~ msgstr "corps de fonction pour le constructeur est manquante" #~ msgid "circular dependency in default args of `%#D'" #~ msgstr "dpendance circulaire dans les arguments par dfaut de %#D " #~ msgid "invalid type `%T' for default argument to `%T'" #~ msgstr "type invalide %T pour l'argument par dfaut %T " #~ msgid "%s before `%c'" #~ msgstr "%s avant %c " #~ msgid "%s before `\\%o'" #~ msgstr "%s avant \\%o" #~ msgid "%s before `%s' token" #~ msgstr "%s avant l'lment lexical %s " #~ msgid "ISO C++ prohibits conversion from `%#T' to `(...)'" #~ msgstr "ISO C++ interdit la conversion de %#T en (...) " #~ msgid "invalid application of `%s' to non-static member" #~ msgstr "utilisation invalide de %s sur un membre non statique" #~ msgid "sizeof applied to a bit-field" #~ msgstr "sizeof appliqu sur un champ de bits" #~ msgid "destructor specifier `%T::~%T' must have matching names" #~ msgstr "spcificateur du destructeur %T::~%T doit des noms concordants" #~ msgid "parameter type of called function is incomplete" #~ msgstr "type de paramtre de la fonction appele est incomplet" #~ msgid "ISO C++ forbids using pointer to a member in subtraction" #~ msgstr "ISO C++ interdit l'utilisation d'un pointeur vers un membre dans une soustraction" #~ msgid "reinterpret_cast from `%T' to `%T' casts away const (or volatile)" #~ msgstr "reinterpret_cast de %T vers %T fait un transtypage cartant la constante (ou volatile)" #~ msgid "return-statement with no value, in function declared with a non-void return type" #~ msgstr "dclaration d'un retour sans valeur, dans la fonction dclare avec un type retourn non void" #~ msgid "return-statement with a value, in function declared with a void return type" #~ msgstr "dclaration d'un retour sans valeur, dans la fonction dclare avec un type retourn void" #~ msgid "comma expression used to initialize return value" #~ msgstr "expression virgule utilse pour initialiser la valeur de retour" #~ msgid "ISO C++ forbids non-constant aggregate initializer expressions" #~ msgstr "ISO C++ interdit les expressions d'initialiseur d'aggrgat de non constante" #~ msgid "`%T' fails to be a typedef or built-in type" #~ msgstr " %T a chou devenir un typedef ou un type construit interne" #~ msgid "ISO C++ forbids defining types within %s" #~ msgstr "ISO C++ interdit la dfinition de types l'intrieur de %s" #~ msgid "Only emit explicit template instatiations" #~ msgstr "Produire seulement des instanciations explicites du canevas" #~ msgid "Recognize and/bitand/bitor/compl/not/or/xor" #~ msgstr "Reconnatre and/bitand/bitor/compl/not/or/xor" #~ msgid "Warn about inconsistent return types" #~ msgstr "Avertir propos des types retourns inconsistants" #~ msgid "Warn when a function is declared extern, then inline" #~ msgstr "Avertir lorsqu'un fonction est dclare extern, puis inline" #~ msgid "directory name must immediately follow -I" #~ msgstr "nom du rpertoire doit suivre immdiatement -I" #~ msgid "ignoring pragma: %s" #~ msgstr "pragma: %s ignor" #~ msgid "Program does not use Unix-f77 dialectal features" #~ msgstr "Programme n'utilise pas les options du dialecte Unix f77" #~ msgid "Disable the appending of underscores to externals" #~ msgstr "Dsactiver l'ajout de caractres de soulignement aux externes" #~ msgid "Fortran-specific form of -fbounds-check" #~ msgstr "Forme spcifique Fortran de -fbounds-check" #~ msgid "Add a directory for INCLUDE searching" #~ msgstr "Ajouter un rpertoire pour la recherche par INCLUDE" #~ msgid "Set the maximum line length" #~ msgstr "Initialiser la longueur maximale des lignes" #~ msgid "Disable automatic array bounds checking" #~ msgstr "Vrification automatique dsactive des bornes de tableaux" #~ msgid "Set class path" #~ msgstr "Initialiser le chemin des classes" #~ msgid "Choose class whose main method should be used" #~ msgstr "Choisir la classe dont la mthode principale devrait tre utilise" #~ msgid "Add directory to class path" #~ msgstr "Ajouter un rpertoire au chemin des classes" #~ msgid "Directory where class files should be written" #~ msgstr "Rpertoire o les fichiers de classe devraient tre crits" #~ msgid "`%s' cannot be statically allocated" #~ msgstr " %s ne peut tre statiquement allou" #~ msgid "multiple declarations for method `%s'" #~ msgstr "multiples dclarations pour la mthode %s " #~ msgid "cannot find class (factory) method" #~ msgstr "ne peut reprer de mthode de classe (manufactur)" #~ msgid "return type for `%s' defaults to id" #~ msgstr "type retourn pour %s par dfaut est id" #~ msgid "return type defaults to id" #~ msgstr "type retourn par dfaut est id" #~ msgid "cannot find method" #~ msgstr "ne peut reprer la mthode" #~ msgid "duplicate definition of class method `%s'" #~ msgstr "duplication de dfinition de la mthode de la classe %s " #~ msgid "duplicate definition of instance method `%s'" #~ msgstr "duplication de dfinition de la mthode d'instanciation %s " #~ msgid "duplicate declaration of instance method `%s'" #~ msgstr "duplication de dclaration de la mthode d'instanciation %s " #~ msgid "potential selector conflict for method `%s'" #~ msgstr "conflit potentiel sur le slecteur pour la mthode %s " #~ msgid "Specify the name of the class for constant strings" #~ msgstr "Spcifier le nom de la classe pour les constantes chanes" #~ msgid "compilation of header file requested" #~ msgstr "fichier d'en-tte requis pour la compilation" #~ msgid "choose either big or little endian, not both" #~ msgstr "choisir un systme octets de poids fort ou faible mais pas les deux" #~ msgid "choose either m340 or m210 not both" #~ msgstr "choisir m340 ou m210 mais pas les deux" #~ msgid "-c or -S required for Ada" #~ msgstr "-c ou -S requis pour Ada" #~ msgid "-static not valid with -mcoff" #~ msgstr "-static n'est pas valide avec -mcoff" #~ msgid "-shared not valid with -mcoff" #~ msgstr "-shared n'est pas valide avec -mcoff" #~ msgid "-symbolic not valid with -mcoff" #~ msgstr "-symbolic n'est pas valide avec -mcoff" #~ msgid "-fpic is not valid with -mcoff" #~ msgstr "-fpic n'est pas valide avec -mcoff" #~ msgid "-fPIC is not valid with -mcoff" #~ msgstr "-fPic n'est pas valide avec -mcoff" #~ msgid "-fpic not valid with -mcoff" #~ msgstr "-fpic n'est pas valide avec -mcoff" #~ msgid "-fPIC not valid with -mcoff" #~ msgstr "-fPIC n'est pas valide avec -mcoff" #~ msgid "unnamed fields of type other than struct or union are not allowed" #~ msgstr "champs sans nom de type autre que struct ou union ne sont pas permis" #~ msgid "numeric constant with no digits" #~ msgstr "constante numrique sans chiffre" #~ msgid "numeric constant contains digits beyond the radix" #~ msgstr "constante numrique contient des chiffres en dehors la base numrique" #~ msgid "floating constant may not be in radix 16" #~ msgstr "constante flottante peut ne pas tre en base 16" #~ msgid "more than one 'f' suffix on floating constant" #~ msgstr "plus d'un f en suffixe sur une constante flottante" #~ msgid "more than one 'l' suffix on floating constant" #~ msgstr "plus d'un l en suffixe sur une constante flottante" #~ msgid "traditional C rejects the 'l' suffix" #~ msgstr "C traditionnel rejette le suffixe l " #~ msgid "more than one 'i' or 'j' suffix on floating constant" #~ msgstr "plus d'un i ou j en suffixe sur une constante flottante" #~ msgid "floating constant out of range" #~ msgstr "constante flottante est hors gamme" #~ msgid "floating point number exceeds range of 'double'" #~ msgstr "nombre en virgule flottante excde les limites de double " #~ msgid "two 'u' suffixes on integer constant" #~ msgstr "deux u en suffixe sur une constante entire" #~ msgid "traditional C rejects the 'u' suffix" #~ msgstr "C traditionnel rejette le suffixe u " #~ msgid "three 'l' suffixes on integer constant" #~ msgstr "trois l en suffixe sur une constante entire" #~ msgid "'lul' is not a valid integer suffix" #~ msgstr "'lul n'est pas un suffixe valide pour un entier" #~ msgid "'Ll' and 'lL' are not valid integer suffixes" #~ msgstr " Ll et 1L ne sont pas des suffixes valides pour un entier" #~ msgid "more than one 'i' or 'j' suffix on integer constant" #~ msgstr "plus d'un i ou j en suffixe sur une constante entire" #~ msgid "invalid suffix on integer constant" #~ msgstr "suffixe invalide pour une constante entire" #~ msgid "integer constant is too large for this configuration of the compiler - truncated to %d bits" #~ msgstr "constante entire trop grande pour la configuration du compilateur - tronqu %d bits" #~ msgid "width of integer constant changes with -traditional" #~ msgstr "largeur de la constante entire change avec -traditional" #~ msgid "width of integer constant may change on other systems with -traditional" #~ msgstr "largeur de la constante entire peut changer sur d'autres systme avec -traditional" #~ msgid "integer constant larger than the maximum value of %s" #~ msgstr "constante entire plus grande que la valeur maximale de %s" #~ msgid "an unsigned long long int" #~ msgstr "un entier long long non sign" #~ msgid "a long long int" #~ msgstr "un entier long long" #~ msgid "an unsigned long int" #~ msgstr "un entier long non sign" #~ msgid "decimal constant is so large that it is unsigned" #~ msgstr "constante dcimale est tellement grande qu'elle est non signe" #~ msgid "complex integer constant is too wide for 'complex int'" #~ msgstr "constante complexe entire est trop grande pour le type 'complex int'" #~ msgid "integer constant is larger than the maximum value for its type" #~ msgstr "constante entire est plus grande que la valeur maximale pour ce type" #~ msgid "missing white space after number '%.*s'" #~ msgstr "espace blanc manquant aprs le nombre '%.*s'" #~ msgid "storage class specifier in array declarator" #~ msgstr "spcificateur de classe de stockage dans le dclarateur de tableau" #~ msgid "sizeof applied to a function type" #~ msgstr "sizeof appliqu sur un type de fonction" #~ msgid "sizeof applied to a void type" #~ msgstr "sizeof appliqu sur un type void" #~ msgid "execvp %s" #~ msgstr "execvp %s" #~ msgid "floating point numbers are not valid in #if" #~ msgstr "nombres flottants ne sont pas valides dans un #if" #~ msgid "traditional C rejects the `U' suffix" #~ msgstr "C traditionel rejette le suffixe U " #~ msgid "too many 'l' suffixes in integer constant" #~ msgstr "trop de l en suffixe dans les constantes entires" #~ msgid "integer constant contains digits beyond the radix" #~ msgstr "constante entire contient des chiffres en dehors la base numrique" #~ msgid "integer constant out of range" #~ msgstr "constante entire est hors gamme" #~ msgid "string constants are not valid in #if" #~ msgstr "constantes de chane ne sont pas valides dasn un #if" #~ msgid "missing binary operator" #~ msgstr "oprateur binaire manquant" #~ msgid "changing search order for system directory \"%s\"" #~ msgstr "modification de l'ordonnancement de recherche du rpertoire systme %s " #~ msgid " as it is the same as non-system directory \"%s\"" #~ msgstr " comme c'est le mme qu'un rpertoire non systme %s " #~ msgid "I/O error on output" #~ msgstr "Erreur E/S sur la sortie" #~ msgid "argument missing after %s" #~ msgstr "argument manquant aprs %s" #~ msgid "number missing after %s" #~ msgstr "nombre manquant aprs %s" #~ msgid "target missing after %s" #~ msgstr "cible manquante aprs %s" #~ msgid "GNU CPP version %s (cpplib)" #~ msgstr "GNU CPP version %s (cpplib)" #~ msgid "" #~ " -lang-c++ Assume that the input sources are in C++\n" #~ " -lang-objc Assume that the input sources are in ObjectiveC\n" #~ " -lang-objc++ Assume that the input sources are in ObjectiveC++\n" #~ " -lang-asm Assume that the input sources are in assembler\n" #~ msgstr "" #~ " -lang-c++ Prsumer que les sources sont en C++\n" #~ " -lang-objc Prsumer que les sources sont en ObjectiveC\n" #~ " -lang-objc++ Prsumer que les sources sont en ObjectiveC++\n" #~ " -lang-asm Prsumer que les sources sont en assembleur\n" #~ msgid "possible start of unterminated string literal" #~ msgstr "dbut possible d'une chane de mot non termine" #~ msgid "multi-line string literals are deprecated" #~ msgstr "chane de mots multi-lignes sont obsoltes" #~ msgid "directives may not be used inside a macro argument" #~ msgstr "directives ne peuvent tre utilises l'intrieur d'un argument macro" #~ msgid "invalid option %s" #~ msgstr "option invalide %s" #~ msgid "%s:%d: warning: " #~ msgstr "%s:%d: AVERTISSEMENT: " #~ msgid "argument to `-b' is missing" #~ msgstr "argument de -b est manquant" #~ msgid "argument to `-V' is missing" #~ msgstr "argument de -V est manquant" #~ msgid "invalid version number format" #~ msgstr "format de numro de verson invalide" #~ msgid ".da file contents exhausted too early\n" #~ msgstr "Le contenu du fichier .da a t puis trop rapidement\n" #~ msgid ".da file contents not exhausted\n" #~ msgstr "Le contenu du fichier .da n'a pas t puis\n" #~ msgid "%6.2f%% of %d source lines executed in function %s\n" #~ msgstr "%6.2f%% des lignes sources %d excutes dans la fonction %s\n" #~ msgid "%6.2f%% of %d branches executed in function %s\n" #~ msgstr "%6.2f%% de branchements %d excuts dans la fonction %s\n" #~ msgid "%6.2f%% of %d branches taken at least once in function %s\n" #~ msgstr "%6.2f%% de branchements %d pris au mons une fois dans la fonction %s\n" #~ msgid "No branches in function %s\n" #~ msgstr "Pas de branchement dans la fonction %s\n" #~ msgid "%6.2f%% of %d calls executed in function %s\n" #~ msgstr "%6.2f%% d'appels %d excuts dans la fonction %s\n" #~ msgid "No calls in function %s\n" #~ msgstr "Pas d'appel dans la fonction %s\n" #~ msgid "call %d returns = %s%%\n" #~ msgstr "appel %d a retourn = %s%%\n" #~ msgid "branch %d taken = %s%%\n" #~ msgstr "branchement %d a pris = %s%%\n" #~ msgid ".da file contents exhausted too early" #~ msgstr "Le contenu du fichier .da a t puis trop rapidement" #~ msgid "conversion from NaN to int" #~ msgstr "conversion de NaN en int" #~ msgid "floating point overflow" #~ msgstr "dbordement de virgule flottante" #~ msgid "overflow on truncation to integer" #~ msgstr "dbordement de troncation d'un entier" #~ msgid "overflow on truncation to unsigned integer" #~ msgstr "dbordement lors de la troncation d'un entier non sign" #~ msgid "%s: argument domain error" #~ msgstr "%s: erreur d'argument de domaine" #~ msgid "%s: function singularity" #~ msgstr "%s: singularit de fonction" #~ msgid "%s: underflow range error" #~ msgstr "%s: erreur de sous dbordement de bornes" #~ msgid "%s: total loss of precision" #~ msgstr "%s: perte totale de prcision" #~ msgid "%s: partial loss of precision" #~ msgstr "%s: perte partielle de prcision" #~ msgid "%s: NaN - producing operation" #~ msgstr "%s: NaN - opration produite" #~ msgid "Pretend that host and target use the same FP format" #~ msgstr "Prtendre que l'hte et la cible utilise le format FP" #~ msgid "Compile pointers as triples: value, base & end" #~ msgstr "Compiler les pointeurs comme des triplets: valeur, base et fin" #~ msgid "Do not promote floats to double if using -traditional" #~ msgstr "Ne pas promouvoir les flottants des doubles avec -traditional" #~ msgid "Attempt to support traditional K&R style C" #~ msgstr "Tenter de supporter le style de langage C traditionnel K&R" #~ msgid "internal error: %s" #~ msgstr "erreur interne: %s" #~ msgid "crossjump disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" #~ msgstr "saut crois dsactiv: %d > 1000 blocs de base et %d >= 20 blocs edges/basic" #~ msgid " -a Enable block profiling \n" #~ msgstr " -a autoriser le profilage des blocs \n" #~ msgid " -ax Enable jump profiling \n" #~ msgstr " -ax autoriser le profilage des sauts \n" #~ msgid "profiling does not work without a frame pointer" #~ msgstr "profilage ne fonctionne pas sans un pointeur de trames" #~ msgid "floating point numbers not allowed in #if expressions" #~ msgstr "nombres flottants ne sont pas permis dans les expressions #if" #~ msgid "invalid number in #if expression" #~ msgstr "nombre invalide dans l'expression #if" #~ msgid "invalid character constant in #if" #~ msgstr "constante de caractres invalide dans le #if" #~ msgid "double quoted strings not allowed in #if expressions" #~ msgstr "chanes entre quillemets ne sont pas alloues dans les expression #if" #~ msgid "octal character constant does not fit in a byte" #~ msgstr "constante de caractres en octal ne peut tre insre dans un octet" #~ msgid "empty #if expression" #~ msgstr "expression #if vide" #~ msgid "Junk after end of expression." #~ msgstr "Rebut la fin de l'expression." #~ msgid "macro or #include recursion too deep" #~ msgstr "macro ou rcursion de #include trop profonde" #~ msgid "usage: %s [switches] input output" #~ msgstr "usage: %s [options] entre sortie" #~ msgid "-traditional is not supported in C++" #~ msgstr "-traditional n'est pas support en C++" #~ msgid "-traditional and -ansi are mutually exclusive" #~ msgstr "-traditional et -ansi sont mutuellement exclusives" #~ msgid "filename missing after -i option" #~ msgstr "nom de fichier manquant aprs l'option -i" #~ msgid "filename missing after -o option" #~ msgstr "nom de fichier manquant aprs l'option -o" #~ msgid "target missing after %s option" #~ msgstr "cible manquante aprs l'option %s" #~ msgid "filename missing after %s option" #~ msgstr "nom de fichier manquant aprs l'option %s" #~ msgid "macro name missing after -%c option" #~ msgstr "nom de macro manquant aprs l'option -%c" #~ msgid "-trigraphs and -traditional are mutually exclusive" #~ msgstr "-trigraphs et -traditional sont mutuellement exclusives" #~ msgid "directory name missing after -I option" #~ msgstr "nom de rpertoire manquant aprs l'option -I" #~ msgid "`/*' within comment" #~ msgstr " /* l'intrieur d'un commentaire" #~ msgid "unterminated #%s conditional" #~ msgstr "#%s conditionel non termin" #~ msgid "not in any file?!" #~ msgstr "n'est pas dans aucun fichier?!" #~ msgid "`defined' must be followed by ident or (ident)" #~ msgstr " defined doit tre suivi par ident ou (ident)" #~ msgid "cccp error: invalid special hash type" #~ msgstr "erreur cccp: type de hachage spcial invalide" #~ msgid "#include expects \"fname\" or " #~ msgstr "#include espre fname ou " #~ msgid "no include path in which to find %.*s" #~ msgstr "pas de chemin d'inclusion dans lequel trouver %.*s" #~ msgid "invalid macro name" #~ msgstr "nom de macro invalide" #~ msgid "invalid macro name `%s'" #~ msgstr "nom de macro invalide %s " #~ msgid "parameter name starts with a digit in #define" #~ msgstr "nom de paramtre dbute avec un chiffre dans #define" #~ msgid "badly punctuated parameter list in #define" #~ msgstr "liste de paramtres incorrectement ponctus dans #define" #~ msgid "unterminated parameter list in #define" #~ msgstr "liste de paramtres non termine dans #define" #~ msgid "\"%.*s\" redefined" #~ msgstr "\"%.*s\" redfini" #~ msgid "# operator should be followed by a macro argument name" #~ msgstr "# oprator derait tre suivi par le nom d'un argument macro" #~ msgid "invalid format #line command" #~ msgstr "format invalide dans la commande #line" #~ msgid "undefining `defined'" #~ msgstr "indfinition defined " #~ msgid "undefining `%s'" #~ msgstr "indfinition %s " #~ msgid "extra text at end of directive" #~ msgstr "texte superflu la fin de la directive" #~ msgid "#error%.*s" #~ msgstr "#error%.*s" #~ msgid "#warning%.*s" #~ msgstr "#warning%.*s" #~ msgid "#elif not within a conditional" #~ msgstr "#elif n'est pas l'intrieur d'un conditionel" #~ msgid "#%s not within a conditional" #~ msgstr "#%s n'est pas l'intrieur d'un conditionel" #~ msgid "#else or #elif after #else" #~ msgstr "#else ou #elif aprs #else" #~ msgid "#else not within a conditional" #~ msgstr "#else n'est pas l'intrieur d'un conditionel" #~ msgid "unbalanced #endif" #~ msgstr "#endif non pair" #~ msgid "unterminated string or character constant" #~ msgstr "chane non termine ou constante caractre" #~ msgid "arguments given to macro `%s'" #~ msgstr "argument donne la macro %s " #~ msgid "no args to macro `%s'" #~ msgstr "aucun argument pour la macro %s " #~ msgid "only 1 arg to macro `%s'" #~ msgstr "seulement 1 argument pour la macro %s " #~ msgid "only %d args to macro `%s'" #~ msgstr "seulement %d arguments pour la macro %s " #~ msgid "too many (%d) args to macro `%s'" #~ msgstr "trop d'arguments (%d) pour la macro %s " #~ msgid "" #~ "internal error in %s, at tradcpp.c:%d\n" #~ "Please submit a full bug report.\n" #~ "See %s for instructions." #~ msgstr "" #~ "Erreur interne dans %s, tradcpp.c:%d\n" #~ "SVP soumettre un rapport complet des anomalies rencontres.\n" #~ "Consulter %s pour les instructions." #~ msgid "optimization turned on" #~ msgstr "optimisation active" #~ msgid "optimization turned off" #~ msgstr "optimisation dsactive" #~ msgid "optimization level restored" #~ msgstr "niveau d'optimisation restaur" #~ msgid "Use VAX-C alignment" #~ msgstr "Utiliser l'alignement VAX-C" #~ msgid "Generate code assuming DW bit is set" #~ msgstr "Gnrer le code en assumant que le bit DW est initialis" #~ msgid "Generate code assuming DW bit is not set" #~ msgstr "Gnrer le code en assumant que le bit DW n'est pas initialis" #~ msgid "Generate code using byte writes" #~ msgstr "Gnrer le code en utilisant des critures par octets" #~ msgid "Do not generate byte writes" #~ msgstr "Ne pas gnrer des critures par octets" #~ msgid "Use small memory model" #~ msgstr "Utiliser le modle de petite mmoire" #~ msgid "Use normal memory model" #~ msgstr "Utiliser le modle normal de mmoire" #~ msgid "Use large memory model" #~ msgstr "Utiliser le modle de grande mmoire" #~ msgid "Generate 29050 code" #~ msgstr "Gnrer le code 29050" #~ msgid "Generate 29000 code" #~ msgstr "Gnrer le code 29000" #~ msgid "Use kernel global registers" #~ msgstr "Utiliser les registres globaux du kernel" #~ msgid "Use user global registers" #~ msgstr "Utiliser les registres globaux" #~ msgid "Emit stack checking code" #~ msgstr "Produire le code de vrification de la pile" #~ msgid "Do not emit stack checking code" #~ msgstr "Ne pas produire le code de vrification de la pile" #~ msgid "Work around storem hardware bug" #~ msgstr "Contourner le bug matriel de stockage" #~ msgid "Do not work around storem hardware bug" #~ msgstr "Ne pas contourner le bug matriel de stockage" #~ msgid "Store locals in argument registers" #~ msgstr "Stocker les var. locales dans redistres d'arguments" #~ msgid "Do not store locals in arg registers" #~ msgstr "Ne pas stocker les var. locales dans redistres d'arguments" #~ msgid "Do symbol renaming for BSD" #~ msgstr "Ne pas renommer les symboles pour BSD" #~ msgid "Do symbol renaming for X/OPEN" #~ msgstr "Ne pas renommer les symboles pour X/OPEN" #~ msgid "Don't do symbol renaming" #~ msgstr "Ne pas renommer les symboles" #~ msgid "Generate code for the C400" #~ msgstr "Gnrer le code pour le C400" #~ msgid "Generate code for the C300" #~ msgstr "Gnrer le code pour le C300" #~ msgid "Generate code for c1" #~ msgstr "Gnrer le code pour le c1" #~ msgid "Generate code for c2" #~ msgstr "Gnrer le code pour le c2" #~ msgid "Generate code for c32" #~ msgstr "Gnrer le code pour le c3" #~ msgid "Generate code for c34" #~ msgstr "Gnrer le code pour le c34" #~ msgid "Use standard calling sequence, with arg count word" #~ msgstr "Utiliser la squence standard d'appel, avec arg et mot compteur" #~ msgid "Place arg count in a nop instruction (faster than push)" #~ msgstr "Placer le compteur d'arg dans une instruction NOP (plus rapide que push)" #~ msgid "Don't push arg count, depend on symbol table" #~ msgstr "Ne pas empiler le compteur d'arg, dpend de la table de symboles" #~ msgid "Use data cache for volatile mem refs (default)" #~ msgstr "Utiliser la cache de donnes pour les rf. mmoire volatiles (par dfaut)" #~ msgid "Don't use data cache for volatile mem refs" #~ msgstr "Ne pas utiliser la cache de donnes pour les rf. mmoire volatiles" #~ msgid "Bypass data cache for volatile mem refs" #~ msgstr "viter la cache de donnes pour les rf. mmoire volatiles" #~ msgid "Use 64-bit longs" #~ msgstr "Utiliser des longs de 64 bits" #~ msgid "Use cc- and libc-compatible 32-bit longs" #~ msgstr "Utiliser cc- et libc-compatible longs de 32 bits" #~ msgid "inline float constants not supported on this host" #~ msgstr "enlignage des constantes flottantes n'est pas support sur cet hte" #~ msgid "Generate code the unix assembler can handle" #~ msgstr "Gnrer du code que l'assembleur UNIX peut traiter" #~ msgid "Retain standard MXDB information" #~ msgstr "Retenir l'information standard MXDB" #~ msgid "Retain legend information" #~ msgstr "Retenir les informations de lgende" #~ msgid "Generate external legend information" #~ msgstr "Gnrer les informations externes de lgende" #~ msgid "Emit identifying info in .s file" #~ msgstr "Produire les infos d'identification dans le fichier .s" #~ msgid "Warn when a function arg is a structure" #~ msgstr "Avertir lorsque l'arg d'une fonction est une structure" #~ msgid "argument is a structure" #~ msgstr "argument est une structure" #~ msgid "half-pic init called on systems that don't support it" #~ msgstr "init demi PIC appel sur un systme qui ne le supporte pas" #~ msgid "Profiling uses mcount" #~ msgstr "Profilage utilise mcount" #~ msgid "Emit half-PIC code" #~ msgstr "Produire du code moiti PIC" #~ msgid "Emit ELF object code" #~ msgstr "Produire du code objet ELF" #~ msgid "Emit ROSE object code" #~ msgstr "Produire du code objet ROSE" #~ msgid "Symbols have a leading underscore" #~ msgstr "Les symboles sont prcdes d'un caractre de soulignement " #~ msgid "Align to >word boundaries" #~ msgstr "Aligner sur >frontires de mots" #~ msgid "Use mcount for profiling" #~ msgstr "Utiliser mcount pour le profilage" #~ msgid "Use mcount_ptr for profiling" #~ msgstr "Utiliser mcount_ptr pour le profilage" #~ msgid "the -mlong-double-64 option does not work yet" #~ msgstr "l'option -mlong-double-64 n'est pas fonctionnelle encore" #~ msgid "The -march option is incompatible to -mipsN and therefore ignored." #~ msgstr "L'option -march est incompatible avec -mipsN et est alors ignore." #~ msgid "-mips%d not supported" #~ msgstr "-mips%d n'est pas support" #~ msgid "-mabi=%s does not support -mips%d" #~ msgstr "-mabi=%s ne supporte pas -mips%d" #~ msgid "this target does not support the -mabi switch" #~ msgstr "cette cible ne supporte pas l'option -mabi" #~ msgid "-mips%d does not support 64 bit fp registers" #~ msgstr "-mips%d ne supporte pas les registres FP de 64 bits" #~ msgid "-mips%d does not support 64 bit gp registers" #~ msgstr "-mips%d ne supporte pas les registres GP de 64 bits" #~ msgid "Use OSF PIC" #~ msgstr "Utiliser le code PIC OSF" #~ msgid "Don't use OSF PIC" #~ msgstr "Ne pas utiliser le code PIC OSF" #~ msgid "Optimize for 3900" #~ msgstr "Optimiser pour le 3900" #~ msgid "Optimize for 4650" #~ msgstr "Optimiser pour le 4650" #~ msgid "stack frame too big" #~ msgstr "trame de pile trop grande" #~ msgid "neither varargs or stdarg in mmix_setup_incoming_varargs" #~ msgstr "ni varargs ou stdarg dans mmix_setup_incoming_varargs" #~ msgid "oops, not debugged; fixing up value:" #~ msgstr "oops, pas mis au point; correction de la valeur:" #~ msgid "Generate little endian data" #~ msgstr "Gnrer des donnes pour systmes octets de poids faible" #~ msgid "Generate big endian data" #~ msgstr "Gnrer des donnes pour systmes octets de poids fort" #~ msgid "Turn on maintainer testing code" #~ msgstr "Mettre en marche le code d'entretien de mise au point" #~ msgid "Enable Transmeta picoJava extensions" #~ msgstr "Autoriser les extensions Transmeta picoJava" #~ msgid "Disable Transmeta picoJava extensions" #~ msgstr "Interdire les extensions Transmeta picoJava" #~ msgid "Disable reorganization pass" #~ msgstr "Dsactiver la passe de rorganisation" #~ msgid "-f%s ignored (all code is position independent)" #~ msgstr "-f%s ignor (tout le code est indpendant de la position)" #~ msgid "-ffunction-sections disabled on AIX when debugging" #~ msgstr "-ffunction-sections dsactiv sur AIX lors de la mise au point" #~ msgid "-fdata-sections not supported on AIX" #~ msgstr "-fdata-sections n'est pas support sur AIX" #~ msgid "%%S computed all 1's mask" #~ msgstr "%%S calcul avec un masque que uns" #~ msgid "%%S computed all 0's mask" #~ msgstr "%%S calcul avec un masque de zros" #~ msgid "no viable candidates" #~ msgstr "pas de candidats viables" #~ msgid "`%D' has already been declared in `%T'" #~ msgstr " %D a dj t dclar dans %T " #~ msgid "`%D' as declarator" #~ msgstr " %D comme dclarateur" #~ msgid "cannot declare %s to references" #~ msgstr "ne peut dclarer %s comme rfrences" #~ msgid "invalid type: `void &'" #~ msgstr "type invalide: void & " #~ msgid "typedef declaration includes an initializer" #~ msgstr "dclaration typedef inclut un initialiseur" #~ msgid "-fname-mangling-version is no longer supported" #~ msgstr "-fname-mangling-version n'est plus supporte" #~ msgid " %#D" #~ msgstr " %#D" #~ msgid "member initializers for `%#D'" #~ msgstr "initialiseur du membre pour %#D " #~ msgid " will be re-ordered to match declaration order" #~ msgstr " sera r-odonn pour concorder avec l'ordre dclar" #~ msgid "multiple initializations given for member `%D'" #~ msgstr "initialisations multiples donnes pour le membre %D " #~ msgid " will be re-ordered to match inheritance order" #~ msgstr " sera r-ordonn pour concorder avec l'ordre d'hritage" #~ msgid "implementation-reserved name `%D' used" #~ msgstr "nom d'implantation rserv %D est utilis" #~ msgid "explicit instantiation of `%#D' after" #~ msgstr "instanciation explicite de %#D aprs" #~ msgid "explicit specialization here" #~ msgstr "spcialisation explicite ici" #~ msgid "explicit instantiation of `%#T' after" #~ msgstr "instanciation explicite de %#T aprs" #~ msgid "base initializer for `%T'" #~ msgstr "initialiseur de base %T " #~ msgid " will be re-ordered to precede member initializations" #~ msgstr " sera r-ordonn pour prcder les initialisations de membre" #~ msgid "ignoring `%V' qualifiers on `%T'" #~ msgstr "qualificateurs %V ignors pour %T " #~ msgid "`sizeof' applied to non-static member" #~ msgstr " sizeof appliqu un membre non statique" #~ msgid "`sizeof' applied to incomplete type `%T'" #~ msgstr " sizeof appliqu sur un type incomplet %T " #~ msgid "request for member `%T::%D' in expression of non-aggregate type `%T'" #~ msgstr "requte du membre %T::%D dans l'expression du type non aggrgat %T " #~ msgid "invalid use of type decl `%#D' as expression" #~ msgstr "utilisation invalide du type decl %#D comme expression" #~ msgid "invalid use of template `%#D' as expression" #~ msgstr "utilisation invalide du canevas %#D comme expression" #~ msgid "invalid offsetof from non-POD type `%#T'; use pointer to member instead" #~ msgstr "offsetof invalide du type non POD %#T ; utiliser un pointeur vers un membre la place" #~ msgid "pointer to member function called, but not in class scope" #~ msgstr "appel d'un pointeur vers un membre de fonction, mais n'est pas dans le champ de la classe" #~ msgid "object missing in call to method `%D'" #~ msgstr "objet manquant dans l'appel de la mthode %D " #~ msgid "function `%D' declared overloaded, but no definitions appear with which to resolve it?!?" #~ msgstr "fontion %D dclare surcharge, mais aucune dfinition n'apparat pour la rsoudre?!?" #~ msgid "invalid call to member function needing `this' in static member function scope" #~ msgstr "appel invalide vers un membre de fonction ayant besoin de ceci dans le champ du membre statique de la fonction" #~ msgid "invalid use of undefined type `%#T'" #~ msgstr "utilisation invalide d'un type indfini %#T " #~ msgid "invalid use of `%T'" #~ msgstr "utilisation invalide de %T " #~ msgid "invalid use of member (did you forget the `&' ?)" #~ msgstr "utilisation invalide de membre (avez-vous oubli le & ?)" #~ msgid "address of overloaded function with no contextual type information" #~ msgstr "adresse de la fonction surcharge sans information contextuelle de type" #~ msgid "overloaded function with no contextual type information" #~ msgstr "fonction surcharge sans information contextuelle de type" #~ msgid "insufficient contextual information to determine type" #~ msgstr "information contextuelle insuffisante pour dterminer le type" #~ msgid "initializer list construction invalid for derived class object `%D'" #~ msgstr "initialiseur de construction de liste invalide pour l'objet de classe drive %D " #~ msgid "initializer list construction invalid for polymorphic class object `%D'" #~ msgstr "initialiseur de construction de liste invalide pour l'objet de classe polymorphique %D " #~ msgid "initializer list construction invalid for `%D'" #~ msgstr "construction de la liste d'initialiseurs invalide pour %D " #~ msgid "due to the presence of a constructor" #~ msgstr "en raison de la prsence d'un constructeur" #~ msgid "due to non-public access of member `%D'" #~ msgstr "en raison d'un accs non public du membre %D " #~ msgid "The meaning of `\\x' (at %0) varies with -traditional" #~ msgstr "La signification de \\x ( %0) varie avec l'option -traditional" #~ msgid "The meaning of `\\a' (at %0) varies with -traditional" #~ msgstr "La signification de \\a( %0) varie avec -traditional" #~ msgid "the meaning of `\\x' varies with -traditional" #~ msgstr "la signification de \\x varie avec l'option -traditional" #~ msgid "the meaning of `\\a' varies with -traditional" #~ msgstr "le sens de \\a varie avec -traditional" #~ msgid "parse error; also virtual memory exceeded" #~ msgstr "erreur d,analyse syntaxique; aussi la mmoire virtuelle est puise" #~ msgid "Can't specify array dimension in a declaration" #~ msgstr "Ne peut spcifier la dimension du tableau dans la dclaration" #~ msgid "internal error - use of undefined type" #~ msgstr "erreur interne - utilisation d'un type non dfini" #~ msgid "no class name specified as argument to -fconstant-string-class" #~ msgstr "pas de nom de classe spcifier dans l'argument -fconstant-string-class" #~ msgid "-p profiling is no longer supported. Use -pg instead" #~ msgstr "-p profilage n'est plus support. Utiliser -pg la place." #~ msgid "incompatible interworking options" #~ msgstr "options d'inter-rseautage incompatibles" #~ msgid "options -mabi=mmixware and -mabi=gnu are mutually exclusive" #~ msgstr "options -mabi=mmixware et -mabi=gnu sont mutuellement exclusives" #~ msgid "-p option not supported: use -pg instead" #~ msgstr "l'option -p n'est pas supporte: utitilse -pg la place" #~ msgid "-mbsd and -pedantic incompatible" #~ msgstr "-mbsd et -pedantic incompatibles" #~ msgid "-mbsd and -mxopen incompatible" #~ msgstr "-mbsd et -mxopen incompatibles" #~ msgid "-mxopen and -pedantic incompatible" #~ msgstr "-mxopen et -pedantic incompatibles" #~ msgid "may not use both -mfp64 and -msingle-float" #~ msgstr "ne peut utiliser ensemble -mfp64 et -msingle-float" #~ msgid "may not use both -mfp64 and -m4650" #~ msgstr "ne peut utiliser ensemble -mfp64 et -m4650" #~ msgid "may not use both -mgp32 and -mfp64" #~ msgstr "ne peut utiliser ensemble -mfp32 et -mfp64" #~ msgid "declaration of `%#T'" #~ msgstr "dclaration de %#T " #~ msgid "a -ifile option requires a -map option" #~ msgstr "l'option -ifile requiert l'option -map" #~ msgid "__builtin_trap not supported by this target" #~ msgstr "__builtin_trap n'est pas support par la cible" #~ msgid "`%s' previously defined here" #~ msgstr " %s prcdemment dfini ici" #~ msgid "`%s' previously declared here" #~ msgstr " %s prcdemment dclar ici" #~ msgid "increment" #~ msgstr "incrment" #~ msgid "decrement" #~ msgstr "dcrment" #~ msgid "Usage: %s [switches] input output\n" #~ msgstr "Usage: %s [options] entre sortie\n" #~ msgid "output_operand: %s" #~ msgstr "output_operand: %s" #~ msgid "invalid %H value" #~ msgstr "valeur %H invalide" #~ msgid "invalid %h value" #~ msgstr "valeur %h invalide" #~ msgid "invalid %Q value" #~ msgstr "valeur %Q invalide" #~ msgid "invalid %q value" #~ msgstr "valeur %q invalide" #~ msgid "invalid %p value" #~ msgstr "valeur %p invalide" #~ msgid "invalid %B value" #~ msgstr "valeur %B invalide" #~ msgid "invalid %C value" #~ msgstr "valeur %C invalide" #~ msgid "invalid %E value" #~ msgstr "valeur %E invalide" #~ msgid "invalid %r value" #~ msgstr "valeur %r invalide" #~ msgid "-march=%s does not support -mips%d" #~ msgstr "-march=%s ne supporte pas -mips%d" #~ msgid "no code label found" #~ msgstr "pas d'tiquette de code trouve" #~ msgid "profiling does not support code models other than medlow" #~ msgstr "profilage ne supporte pas le code pour les modles autre que medlow" #~ msgid "%s and profiling conflict: disabling %s" #~ msgstr "%s avec des conflit de profilage: dsactivation de %s" #~ msgid "Use function_epilogue()" #~ msgstr "Utiliser fonction_epilogue()" #~ msgid "Do not use function_epilogue()" #~ msgstr "Ne pas utiliser fonction_epilogue()" #~ msgid "%d errors, %d sorries, do granting" #~ msgstr "%d erreurs, %d plaintes, donner la permission" #~ msgid "GNU compiler does not support statically allocated objects" #~ msgstr "compilateur GNU ne supporte pas les objets allous de manire statique" #~ msgid "causing unhandled exception `%s' (this is flaged only once)" #~ msgstr "causant l'exception non trait %s (ceci est relev seulement une fois)" #~ msgid "range failure (not inside function)" #~ msgstr "chec sur l'tendue (n'est pas l'intrieur de la fonction)" #~ msgid "possible range failure (not inside function)" #~ msgstr "chec possible de l'tendue (pas l'intrique de la fonction)" #~ msgid "expression will always cause RANGEFAIL" #~ msgstr "l'expression causera toujours RENGEFAIL" #~ msgid "right hand side of assignment is a mode" #~ msgstr "ct droit de l'affectation est un mode" #~ msgid "bad string length in %s" #~ msgstr "chane de longueur errone dans %s" #~ msgid "mode mismatch in %s expression" #~ msgstr "non concordance de mode dans l'expression %s" #~ msgid "%s expression must be referable" #~ msgstr "expression %s doit tre rfrable" #~ msgid "%s not allowed outside a PROC" #~ msgstr "%s n'est pas permis en dehors d'une procdure" #~ msgid "%s action in PROC with no declared RESULTS" #~ msgstr "action %s dans la procdure sans RSULTATS dclars" #~ msgid "RETURN not allowed outside PROC" #~ msgstr "RETURN n'est pas permis en dehors d'une procdure" #~ msgid "RETURN with a value, in PROC returning void" #~ msgstr "RETURN avec valeur dans une procdure retournant void" #~ msgid "RETURN with no value and no RESULT action in procedure" #~ msgstr "RETURN sans valeur et sans RSULTAT d'action dans la procdure" #~ msgid "no label named `%s'" #~ msgstr "pas d'tiquette nomme %s " #~ msgid "cannot GOTO label `%s' outside current function" #~ msgstr "ne peut aller L'tiquette %s en dehors de la fonction courante" #~ msgid "no EXITable label named `%s'" #~ msgstr "pas d'tiquette de sortie portant le nom %s " #~ msgid "cannot EXIT label `%s' outside current function" #~ msgstr "ne sortir l'aide de l'tiquette %s en dehors de la fonction courante" #~ msgid "ELSE label not within a CASE statement" #~ msgstr "tiquette du ELSE n'est pas n'est pas l'intrieur de la dclaration du CASE" #~ msgid "multiple default labels found in a CASE statement" #~ msgstr "tiquettes multiples de dfaut dans la dclaration d'un case" #~ msgid "this is the first ELSE label" #~ msgstr "ceci est la premire tiquette ELSE" #~ msgid "label found outside of CASE statement" #~ msgstr "tiquette trouve en dehors de la dclaration du CASE" #~ msgid "duplicate CASE value" #~ msgstr "valeur de CASE double" #~ msgid "this is the first entry for that value" #~ msgstr "c'est la premire entre pour cette valeur" #~ msgid "CASE value out of range" #~ msgstr "valeur du CASE hors gamme" #~ msgid "empty range" #~ msgstr "bornes vides" #~ msgid "label within scope of cleanup or variable array" #~ msgstr "tiquette l'intrieur de la porte du nettoyage ou du tableau de variables" #~ msgid "mode in label is not discrete" #~ msgstr "mode dans l'tiquette n'est pas discret" #~ msgid "label not within a CASE statement" #~ msgstr "tiquette n'est pas l'intrieur de la dclaration du CASE" #~ msgid "lower bound of range must be a discrete literal expression" #~ msgstr "borne infrieure de l'tendue doit tre une expression litrale discrte" #~ msgid "upper bound of range must be a discrete literal expression" #~ msgstr "borne suprieure de l'tendue doit tre une expression litrale discrte" #~ msgid "CASE label is not valid" #~ msgstr "tiquette du CASE n'est pas valide" #~ msgid "number of CASE selectors does not match the number of CASE label lists" #~ msgstr "nombre de slecteurs de CASE ne concorde pas avec la liste des tiquettes du CASE" #~ msgid "incomplete CASE - %s not handled" #~ msgstr "CASE incomplet - %s n'est pas trait" #~ msgid "CASE selector with variable range" #~ msgstr "slecteur du CASE avec un tendue variable" #~ msgid "too many cases to do CASE completeness testing" #~ msgstr "trop de cas pour la compltion de tests du CASE" #~ msgid "type of tuple cannot be implicit in multiple assignent" #~ msgstr "type de tuple ne peut tre implicite dans de multiples affectations" #~ msgid "conditional expression cannot be used in multiple assignent" #~ msgstr "expression conditionnelle ne peut tre utilis dans de multiples affectations" #~ msgid "internal error - unknown type in multiple assignment" #~ msgstr "erreur interne - type inconnu dans une affectation multiple" #~ msgid "no operator allowed in multiple assignment," #~ msgstr "pas d'oprateur permis dans de multiples affectations" #~ msgid "location modes in multiple assignment are not equivalent" #~ msgstr "modes de localisation dans de multiples affectations ne sont pas quivalents" #~ msgid "you may not assign a value to a BUFFER or EVENT location" #~ msgstr "vous pouvez affecter une valeur la localisation d'un TAMPON ou d'un VNEMENT " #~ msgid "can't assign value to READonly location" #~ msgstr "ne peut affecter une valeur une localisation en mode LECTURE seulement" #~ msgid "cannot assign to location with non-value property" #~ msgstr "ne peut affecter une localisation avec une proprit sans valeur" #~ msgid "lefthand side of assignment is not a location" #~ msgstr "ct gauche de l'affectation n'est pas un localisation" #~ msgid "bitstring slice" #~ msgstr "tranche d'une chane de bits" #~ msgid "LENGTH on left-hand-side is non-portable" #~ msgstr "LONGUEUR sur le ct droit n'est pas portable" #~ msgid "can only set LENGTH of array location" #~ msgstr "peut seulement fixer la LONGUEUR de la localisation d'un tableau" #~ msgid "internal error: trying to make loc-identity with non-location" #~ msgstr "erreur interne: tentative de crer une identit de localisation avec une non localisation" #~ msgid "cannot convert to a boolean mode" #~ msgstr "ne peut convertir en un mode boolen" #~ msgid "cannot convert to a char mode" #~ msgstr "ne peut convertir en mode caractre" #~ msgid "powerset tuple element out of range" #~ msgstr "lment du tuple du powerset est hors gamme" #~ msgid "incompatible member of powerset tuple (at position #%d)" #~ msgstr "membre incompatible du tuple du powerset ( la position #%d)" #~ msgid "non-constant value for tag field `%s'" #~ msgstr "valeur non constante pour l'tiquette de champ %s " #~ msgid "field `%s' in wrong variant" #~ msgstr "champ %s dans un variant erron" #~ msgid "missing variant fields (at least `%s')" #~ msgstr "champs variants manquants (au moins %s )" #~ msgid "bad initializer for field `%s'" #~ msgstr "initialiseur erron pour le champ %s " #~ msgid "no initializer value for variant field `%s'" #~ msgstr "pas de valeur d'initialiseur pour le champ %s " #~ msgid "no selected variant" #~ msgstr "pas de variant slectionn" #~ msgid "mixture of labelled and unlabelled tuple elements" #~ msgstr "mlange de tuple d'lments tiquetts et non tiquetts" #~ msgid "probably not a structure tuple" #~ msgstr "probablement pas une structure de tuple" #~ msgid "excess initializer for field `%s'" #~ msgstr "dbordement de l'initialiseur pour le champ %s " #~ msgid "excess unnamed initializers" #~ msgstr "dbordement d'initialiseurs sans nom" #~ msgid "non-constant start index for tuple" #~ msgstr "index de dpart du tuple n'est pas une constante" #~ msgid "invalid array tuple label" #~ msgstr "tiquette invalide d'un tuple de tableau" #~ msgid "non-constant array tuple index range" #~ msgstr "tendue de l'index du tableau de tuples n'est pas une constante" #~ msgid "incompatible array tuple element %s" #~ msgstr "lment incompatible du tableau de tuples %s" #~ msgid "multiple (*) or (ELSE) array tuple labels" #~ msgstr "multiples tiquettes de tuples de tableaux (*) ou (ELSE)" #~ msgid "empty range in array tuple" #~ msgstr "tendue vide dans le tableau de tuples" #~ msgid "array tuple has duplicate index %s" #~ msgstr "tableau de tuples a un double index %s" #~ msgid "array tuple index out of range" #~ msgstr "index du tableau de tuples est hors gamme" #~ msgid "too many array tuple values" #~ msgstr "trop de valeurs de tuples de tableaux" #~ msgid "dynamic array tuple without (*) or (ELSE)" #~ msgstr "tuple de tableau dynamique sans (*) ou (ELSE)" #~ msgid "missing array tuple element %s" #~ msgstr "lment de tuple de tableau manquant %s" #~ msgid "missing array tuple elements %s : %s" #~ msgstr "lments de tuple de tableau manquant %s : %s" #~ msgid "initializer is not an array or string mode" #~ msgstr "initialiseur n'est pas en mode tableau ou chane" #~ msgid "destination is too small" #~ msgstr "destination trop petite" #~ msgid "internal error: unknown type of expression" #~ msgstr "erreur interne: type d'expression inconnue" #~ msgid "`%s' must not be declared readonly" #~ msgstr " %s ne doit pas tre dclar en lecture seulement" #~ msgid "declaration of readonly variable without initialization" #~ msgstr "dclaration d'une variable en lecture seuelement sans initialisation" #~ msgid "no initialization allowed for `%s'" #~ msgstr "pas d'initialisation permise pour %s " #~ msgid "value for loc-identity `%s' is not a location" #~ msgstr "valeur pour l'identit de localisation %s n'est pas une localisation" #~ msgid "location for `%s' not read-compatible" #~ msgstr "localisation pour %s n'est pas compatible en lecture" #~ msgid "nonconstant initializer for `%s'" #~ msgstr "initialiseur n,est pas un constante pour %s " #~ msgid "do_decl: internal error: don't know what to initialize" #~ msgstr "do_decl: erreur interne: ne sait pas quoi initialiser" #~ msgid "RECURSIVE PROCs" #~ msgstr "PROCDURES RCURSIVES" #~ msgid "`%s' must not be READonly" #~ msgstr " %s ne doit pas tre en lecture seulement" #~ msgid "POS may not be specified for a list of field declarations" #~ msgstr "POS ne peut pas tre spcifis pour une liste de dclarations de champs" #~ msgid "(ELSE) case label as well as ELSE variant" #~ msgstr "tiquette du cas (ELSE) aussi bien que le ELSE variant" #~ msgid "inconsistent modes between labels and tag field" #~ msgstr "modes inconsistents entre les tiquettes et le champ tiquette" #~ msgid "too few tag labels" #~ msgstr "pas assez d'tiquettes" #~ msgid "too many tag labels" #~ msgstr "trop d'tiquettes" #~ msgid "case label lower limit is not a discrete constant expression" #~ msgstr "limite infrieure de l'tiquette du CASE n'est pas une expression d'une constante discrte" #~ msgid "case label upper limit is not a discrete constant expression" #~ msgstr "limite suprieure de l'tiquette du CASE n'est pas une expression d'une constante discrte" #~ msgid "case label must be a discrete constant expression" #~ msgstr "l'tiquette du CASE doit tre une expression de constante discrte" #~ msgid "variant label declared here..." #~ msgstr "tiquette variante dclare ici..." #~ msgid "...is duplicated here" #~ msgstr "...est dupliqu ici" #~ msgid "no field (yet) for tag %s" #~ msgstr "pas de champ (encore) pour l'tiquette %s" #~ msgid "non-value mode may only returned by LOC" #~ msgstr "mode non-valeur peut seulement tre retourn par LOC" #~ msgid "`%s' may only be passed by LOC" #~ msgstr " %s peut seulement tre pass par LOC" #~ msgid "nothing named `%s' to grant" #~ msgstr "rien de nomm %s autoriser" #~ msgid "duplicate grant for `%s'" #~ msgstr "duplication autorise pour %s " #~ msgid "duplicate definition `%s'" #~ msgstr "double dfinition de %s " #~ msgid "previous definition of `%s'" #~ msgstr "dfinition prcdente de %s " #~ msgid "ambiguous choice for seize `%s' -" #~ msgstr "choix ambigu pour valuer %s -" #~ msgid " - can seize this `%s' -" #~ msgstr " - peut valuer ceci %s -" #~ msgid " - or this granted decl `%s'" #~ msgstr " - ou cette decl %s autoris" #~ msgid "enumerator value for `%s' is less than 0" #~ msgstr "valeur de l'numrateur pour %s est plus petit que 0" #~ msgid "enumerators `%s' and `%s' have equal values" #~ msgstr "numrateurs %s et %s ont les mmes valeurs" #~ msgid "undefined value in SET mode is obsolete and deprecated" #~ msgstr "valeur non dfinie dans le mode SET est obsolte" #~ msgid "BASE variable never declared" #~ msgstr "variable de BASE jamais dclare" #~ msgid "cannot BASE a variable on a PROC/PROCESS name" #~ msgstr "ne peut tablir une variable sur le nom du PROC/PROCESSUS" #~ msgid "INTERNAL ERROR: handle_one_level is broken" #~ msgstr "ERREUR INTERNE: handle_one_level est bris" #~ msgid "tuple without specified mode not allowed in %s" #~ msgstr "tuple sans mode spcifi n'est pas permis dans %s" #~ msgid "conditional expression not allowed in %s" #~ msgstr "expression conditionnelle n'est pas permise dans %s " #~ msgid "internal error: unknown expression mode in %s" #~ msgstr "erreur interne: mode d'expression inconnnu dans %s" #~ msgid "CASE selector is not a discrete expression" #~ msgstr "slecteur du CASE n'est pas une expression discrte" #~ msgid "The number of CASE selectors does not match the number of CASE label lists" #~ msgstr "Le nombre de slecteurs de CASE ne concordent pas avec le nombre de listes d'tiquettes du CASE" #~ msgid "powerset is not addressable" #~ msgstr "powerset n'est pas adressable" #~ msgid "array is not addressable" #~ msgstr "tableau n'est pas adressable" #~ msgid "too few arguments in call to `%s'" #~ msgstr "pas assez d'argument pour l'appel de %s " #~ msgid "too many arguments in call to `%s'" #~ msgstr "trop d'arguments pour l'appel de %s " #~ msgid "cannot dereference, not a pointer" #~ msgstr "ne peut drfrencer, n'est pas un pointeur" #~ msgid "missing '.' operator or undefined mode name `%s'" #~ msgstr "oprateur . manquant ou nom de mode %s indfini" #~ msgid "you have forgotten the '.' operator which must" #~ msgstr "vous avez oubli l'oprateur . lequel doit tre" #~ msgid " precede a STRUCT field reference, or `%s' is an undefined mode" #~ msgstr " prcde une rfrence sur champ STRUCT ou %s est un mode indfini" #~ msgid "invalid type argument of `->'" #~ msgstr "type d'argument invalide de ->" #~ msgid "operand of '.' is not a STRUCT" #~ msgstr "l'oprande de '. nest pas un STRUCT" #~ msgid "no field named `%s'" #~ msgstr "pas de champ nomm %s " #~ msgid "ABS argument must be discrete or real mode" #~ msgstr "argument ABS doit tre en mode discret ou rel" #~ msgid "argument %d to ABSTIME must be of integer type" #~ msgstr "argument %d ABSTIME doit tre un type entier" #~ msgid "parameter 1 must be referable" #~ msgstr "paramtre 1 doit pouvoir tre rfrenc" #~ msgid "parameter 2 must be a positive integer" #~ msgstr "paramtre 2 doit tre un entier positif" #~ msgid "CARD argument must be powerset mode" #~ msgstr "argument CARD doit tre un mode powerset" #~ msgid "expression for DESCR-built-in must be referable" #~ msgstr "expression pour DESCR-built-in doit pouvoir tre rfrenc" #~ msgid "argument to `%s' must be of integer type" #~ msgstr "argument de %s doit tre de type entier" #~ msgid "argument 1 to `%s' must be of floating point mode" #~ msgstr "argument 1 de %s doit tre en mode virgule flottante" #~ msgid "first argument to `%s' must be a mode" #~ msgstr "premier argument de %s doit tre un mode" #~ msgid "READonly modes for %s must have a value" #~ msgstr "mode LECTRURE seulement pour %s doit avoir une valeur" #~ msgid "argument to TERMINATE must be a reference primitive value" #~ msgstr "argument TERMINATE doit tre une rfrence une valeur primitive" #~ msgid "argument 1 to INTTIME must be of mode TIME" #~ msgstr "argument 1 de INTTIME doit tre de mode TIME" #~ msgid "LENGTH argument must be string, buffer, event mode, text location or mode" #~ msgstr "LONGUEUR de l'argument doit tre une chane, un tampon, un mode d'vnement, la localisation d'un texte ou un mode" #~ msgid "UPPER argument must have a mode, or be a mode" #~ msgstr "argument du HAUT doit avoir un mode ou tre un mode" #~ msgid "LOWER argument must have a mode, or be a mode" #~ msgstr "argument du BAS doit avoir un mode ou tre un mode" #~ msgid "UPPER argument must be string, array, mode or integer" #~ msgstr "argument du HAUT doit tre une chane, un tableau, un mode ou un entier" #~ msgid "LOWER argument must be string, array, mode or integer" #~ msgstr "argument du BAS doit tre une chane, un tableau, un mode ou un entier" #~ msgid "%s argument must be POWERSET mode" #~ msgstr "argument %s doit tre un mode POWERSET" #~ msgid "%s called for empty POWERSET" #~ msgstr "%s appel pour un POWERSET vide" #~ msgid "argument to NUM is not discrete" #~ msgstr "argument NUM n'est pas discret" #~ msgid "no integer mode which matches expression's mode" #~ msgstr "pas de mode entier concordant au mode de l'expresion" #~ msgid "NUM's parameter is below its mode range" #~ msgstr "paramtre NUMRIQUE est en dessous de l'tendue de son mode" #~ msgid "NUM's parameter is above its mode range" #~ msgstr "paramtre NUMRIQUE est au dessus de l'tendue de son mode" #~ msgid "cannot take SUCC or PRED of a numbered SET" #~ msgstr "ne peut prendre le SUIVANT ou le PRCDENT d'un ensemble numr" #~ msgid "SUCC or PRED must not be done on a PTR" #~ msgstr "SUIVANT ou PRCDENT ne peuvent tre pris sur un PTR" #~ msgid "SUCC or PRED for a reference type is not standard" #~ msgstr "SUIVANT ou PRCDENT pour un type rfrenc n'est pas standard" #~ msgid "SUCC or PRED argument must be a discrete mode" #~ msgstr "SUIVANT ou PRCDENT comme argument doit tre en mode discret" #~ msgid "taking the %s of a value already at its %s value" #~ msgstr "prendre le %s d'une valeur dj sa %s valeur" #~ msgid "size applied to a function mode" #~ msgstr "taille applique au mode de la fonction" #~ msgid "sizeof applied to a void mode" #~ msgstr "sizeof appliqu sur un mode void" #~ msgid "sizeof applied to an incomplete mode" #~ msgstr "sizeof appliqu sur un mode incomplet" #~ msgid "cannot call a PROCESS, you START a PROCESS" #~ msgstr "ne peut lancer un PROCESSUS, vous devez lancer le PROCESSUS" #~ msgid "%s parameter %d must be a location" #~ msgstr "%s paramtre %d doit tre une localisation" #~ msgid "%s parameter %d is READ-only" #~ msgstr "%s paramtre %d est en mode LECTURE seulement" #~ msgid "LOC actual parameter %d is a non-referable location" #~ msgstr "LOCALISATION du paramtre actuel %d est dans une localisation non rfrenable" #~ msgid "mode mismatch in parameter %d" #~ msgstr "non concordance du mode dans le paramtre %d" #~ msgid "too many arguments to procedure `%s'" #~ msgstr "trop d'arguments pour la procdure %s " #~ msgid "too many arguments to procedure" #~ msgstr "trop d'arguments pour la procdure" #~ msgid "too few arguments to procedure `%s'" #~ msgstr "pas assez d'argument pour la procdure %s " #~ msgid "too few arguments to procedure" #~ msgstr "trop peu d'arguments pour la procdure" #~ msgid "syntax error (integer used as function)" #~ msgstr "erreur de syntaxe (entier utilis comme un fonction)" #~ msgid "syntax error - missing operator, comma, or '('?" #~ msgstr "erreur de syntaxe - oprateur manquant virgule ou (?" #~ msgid "unimplemented built-in function `%s'" #~ msgstr "fonction interne non implante %s " #~ msgid "internal error - bad built-in function `%s'" #~ msgstr "erreur interne - mauvaise fonction interne %s " #~ msgid "empty expression in string index" #~ msgstr "expression vide dans la chane d'index" #~ msgid "only one expression allowed in string index" #~ msgstr "seul un expression est permise dans une chane d'index" #~ msgid "invalid: primval ( untyped_exprlist )" #~ msgstr "invalide: primval ( untyped_exprlist )" #~ msgid "operand is variable-size bitstring/power-set" #~ msgstr "oprande est de taille variable bitstring/power-set" #~ msgid "tree code `%s' unhandled in build_compare_set_expr" #~ msgstr "code de l'arbre %s n'est pas traite dans build_compare_set_expr" #~ msgid "incompatible modes in concat expression" #~ msgstr "modes incompatibles dans l'expression de concatnation" #~ msgid "invalid operation on array of chars" #~ msgstr "opration invalide pour des tableaux de caractres" #~ msgid "comparison of variant structures is unsafe" #~ msgstr "comparaison de structures variantes n'est pas sre" #~ msgid "compare with variant records" #~ msgstr "comparaison avec des enregistrements vairants" #~ msgid "incompatible operands to %s" #~ msgstr "type d'oprandes incompatibles pour %s" #~ msgid "relational operator not allowed for this mode" #~ msgstr "oprateur relationnel n'est pas permis pour ce mode" #~ msgid "cannot use %s operator on PROC mode variable" #~ msgstr "ne peut utiliser l'oprateur %s pour une variable en mode PROCDURE" #~ msgid "invalid left operand of %s" #~ msgstr "oprande de gauche invalide pour %s" #~ msgid "invalid right operand of %s" #~ msgstr "oprande de droite invalide pour %s" #~ msgid "repetition expression must be constant" #~ msgstr "rptitions d'expressions doit tre une constante" #~ msgid "left argument to MOD/REM operator must be integral" #~ msgstr "argument de gauche de l'oprateur MOD/REM doit tre entier" #~ msgid "right argument to MOD/REM operator must be integral" #~ msgstr "argument de droite de l'oprateur MOD/REM doit tre entier" #~ msgid "right operand of IN is not a powerset" #~ msgstr "l'oprande de droite de IN n'est pas un POWERSET" #~ msgid "left operand of IN incompatible with right operand" #~ msgstr "oprande de gauche de IN incompatible avec l'oprande de droite" #~ msgid "-> operator not allow in constant expression" #~ msgstr "oprateur -> n'est pas permis dans l'expression d'une constante" #~ msgid "taking the address of a function is non-standard" #~ msgstr "prendre l'adresse d'une fonction n'est pas standard" #~ msgid "ADDR requires a LOCATION argument" #~ msgstr "ADDR requiert un argument de LOCALISATION" #~ msgid "-> expression is not addressable" #~ msgstr "expression -> n'est pas adressable" #~ msgid "ADDR parameter must be a LOCATION" #~ msgstr "paramtre ADDR doit tre une LOCALISATION" #~ msgid "possible internal error in build_chill_arrow_expr" #~ msgstr "erreur interne possible dans build_chill_arrow_expr" #~ msgid "%s is not addressable" #~ msgstr "%s n'est pas adressable" #~ msgid "repetition count is not an integer constant" #~ msgstr "compteur de rptition n'est pas une constante entire" #~ msgid "repetition count < 0" #~ msgstr "compteur de rptition > que 0" #~ msgid "repetition value not constant" #~ msgstr "valeur de rptition n'est pas une constante" #~ msgid "bitstring repetition of non-constant boolean" #~ msgstr "rptition de chane de bits d'un boolen non constant" #~ msgid "string repetition operand is non-constant bitstring" #~ msgstr "oprande de rptition de chanes n'est pas une contante de chane de bits" #~ msgid "non-char, non-bit string repetition" #~ msgstr "rptition de chane n'est pas de caractres ni de bits" #~ msgid "right operand of %s is not array of boolean" #~ msgstr "oprande de droite de %s n'est pas un tableau de boolens" #~ msgid "%s operator applied to boolean variable" #~ msgstr "oprateur %s appliqu une variable boolenne" #~ msgid "non-boolean mode in conditional expression" #~ msgstr "mode non boolen dans l'expression conditionnelle" #~ msgid "decode_constant: invalid component_ref" #~ msgstr "decode_constant: component_ref invalide" #~ msgid "decode_constant: mode and value mismatch" #~ msgstr "decode_constant: mode et valeur ne concordent pas" #~ msgid "decode_constant: cannot decode this mode" #~ msgstr "decode_constant: ne peut dcoder ce mode" #~ msgid "decode_constant_selective: mode and value mismatch" #~ msgstr "decode_constant_selective: mode et value ne concorde pas" #~ msgid "decode_constant_selective: cannot decode this mode" #~ msgstr "decode_constant_selective: ne peut dcoder ce mode" #~ msgid "FORBID is not yet implemented" #~ msgstr "FORBID n'est pas encore implante" #~ msgid "function \"really_grant_this\" called for `%s'" #~ msgstr "fonction really_grant_this appele pour %s " #~ msgid "non-integral text length" #~ msgstr "longueur de texte non entier" #~ msgid "non-constant text length" #~ msgstr "longueur de texte non constante" #~ msgid "text length must be greater than 0" #~ msgstr "la longueur de texte doit tre plus grande que 0" #~ msgid "argument %d of %s must be of mode ASSOCIATION" #~ msgstr "argument %d de %s doit tre de mode ASSOCIATION" #~ msgid "argument %d of %s must be a location" #~ msgstr "argument %d de %s doit tre une localisation" #~ msgid "argument 2 of ASSOCIATE must not be an empty string" #~ msgstr "argument 2 de ASSOCIATE ne doit pas tre une chane vide" #~ msgid "argument 2 to ASSOCIATE must be a string" #~ msgstr "argument 2 de ASSOCIATE doit tre une chane" #~ msgid "argument 3 to ASSOCIATE must be a string" #~ msgstr "argument 3 de ASSOCIATE doit tre une chane" #~ msgid "too many arguments in call to MODIFY" #~ msgstr "trop d'arguments dans l'appel de MODIFY" #~ msgid "argument 2 of MODIFY must not be an empty string" #~ msgstr "argument 2 de MODIFY ne doit pas tre une chane vide" #~ msgid "argument 2 to MODIFY must be a string" #~ msgstr "argument 2 de MODIFY doit tre une chane" #~ msgid "argument 3 to MODIFY must be a string" #~ msgstr "argument 3 de MODIFY doit tre une chane" #~ msgid "argument %d of %s must be an ACCESS or TEXT mode" #~ msgstr "argument %d de %s doit tre de mode ACCESS ou TEXT" #~ msgid "argument 4 of CONNECT must be of mode WHERE" #~ msgstr "argument 4 de CONNECT doit tre de mode WHERE" #~ msgid "index expression for ACCESS without index" #~ msgstr "expression d'index pour ACCESS sans index" #~ msgid "incompatible index mode" #~ msgstr "mode incompatible d'index" #~ msgid "argument 3 to CONNECT must be of mode USAGE" #~ msgstr "argument 3 de CONNECT doit tre de mode USAGE" #~ msgid "argument %d of %s must be of mode ACCESS" #~ msgstr "argument %d de %s doit tre de mode ACCESS" #~ msgid "too few arguments in call to `readrecord'" #~ msgstr "pas assez d'arguments dans l'appel de readrecord()" #~ msgid "store location must not be READonly" #~ msgstr "localisation de stockage ne doit pas tre en LECTURE seulement" #~ msgid "too few arguments in call to `writerecord'" #~ msgstr "pas assez d'arguments pour l'appel de writerecord()" #~ msgid "transfer to ACCESS without record mode" #~ msgstr "transfer vers ACCESS sans mode d'enregistrement" #~ msgid "argument %d of %s must be of mode TEXT" #~ msgstr "argument %d de %s doit tre de mode TEXT" #~ msgid "TEXT doesn't have a location" #~ msgstr "TEXT n'a pas de localisation" #~ msgid "incompatible index mode for SETETEXTACCESS" #~ msgstr "mode d'index incompatible pour SETETEXTACCESS" #~ msgid "incompatible record mode for SETTEXTACCESS" #~ msgstr "mode d'enregistrement incompatible pour SETTEXTACCESS" #~ msgid "parameter 2 must be a location" #~ msgstr "paramtre 2 doit tre une localisation" #~ msgid "incompatible modes in parameter 2" #~ msgstr "modes incompatible dans le paramtre 2" #~ msgid "conditional expression not allowed in this context" #~ msgstr "expression conditionnelle n'est pas permise dans ce contexte" #~ msgid "untyped expression as argument %d" #~ msgstr "expression sans type comme argument %d" #~ msgid "cannot process %d bits integer for READTEXT argument %d" #~ msgstr "ne peut traiter %d bits entiers pour l'argument de READTEXT %d" #~ msgid "cannot process %d bits integer WRITETEXT argument %d" #~ msgstr "ne peut traiter %d bits entiers pour l'argument de WRITETEXT %d" #~ msgid "argument %d is READonly" #~ msgstr "argument %d est en LECTURE seulement" #~ msgid "argument %d must be referable" #~ msgstr "argument %d doit pouvoir tre rfrenc" #~ msgid "cannot process argument %d of WRITETEXT, unknown size" #~ msgstr "ne peut traiter l'argument %d de WRITETEXT, taille inconnue" #~ msgid "cannot process mode of argument %d for %sTEXT" #~ msgstr "ne peut traiter le mode de l'argument %d pour %s de type TEXTE" #~ msgid "too few arguments for this format string" #~ msgstr "trop peu d'arguments pour ce format de chane" #~ msgid "type of argument %d invalid for conversion code at offset %d" #~ msgstr "type d'argument %d invalide pour la conversion du code au dcalage %d" #~ msgid "unmatched open paren" #~ msgstr "parenthse ouverte non paire" #~ msgid "bad format specification character (offset %d)" #~ msgstr "caractre de format de spcification erron (dcalage %d)" #~ msgid "repetition factor overflow (offset %d)" #~ msgstr "dbordement du facteur de rptition (dcalage %d)" #~ msgid "duplicate qualifier (offset %d)" #~ msgstr "duplication du qualificateur (dcalage %d)" #~ msgid "clause width overflow (offset %d)" #~ msgstr "dbordement de la largeur de la clause (dcalage %d)" #~ msgid "no fraction (offset %d)" #~ msgstr "pas de fraction (dcalage %d)" #~ msgid "no fraction width (offset %d)" #~ msgstr "pas de largeur de fraction (dcalage %d)" #~ msgid "fraction width overflow (offset %d)" #~ msgstr "dbordement de largeur de fraction (dcalage %d)" #~ msgid "no exponent (offset %d)" #~ msgstr "pas d'exposant (dcalage %d)" #~ msgid "no exponent width (offset %d)" #~ msgstr "pas de largeur d'exposant (dcalage %d)" #~ msgid "exponent width overflow (offset %d)" #~ msgstr "dbordement de largeur d'exposant (dcalage %d)" #~ msgid "internal error in check_format_string" #~ msgstr "erreur interne dans check_format_string" #~ msgid "no padding character (offset %d)" #~ msgstr "pas de caractre de remplissage (dcalage %d)" #~ msgid "missing index expression" #~ msgstr "expresion d'index manquante" #~ msgid "too few arguments in call to `writetext'" #~ msgstr "pas assez d'arguments pour l'appel de writext()" #~ msgid "argument 1 for WRITETEXT must be a TEXT or CHARS(n) VARYING location" #~ msgstr "argument 1 de WRITETEXT doit tre TEXT ou CHARS(n) VARYING location" #~ msgid "`format string' for WRITETEXT must be a CHARACTER string" #~ msgstr "format string pour WRITETEXT doit tre une chane de caractres" #~ msgid "too few arguments in call to `readtext'" #~ msgstr "trop peu d'arguments dans l'appel de readtext()" #~ msgid "argument 1 for READTEXT must be a TEXT location or CHARS(n) [ VARYING ] expression" #~ msgstr "argument 1 de READTEXT doit tre de localisation TEXT ou CHARS(n) [ VARYING ] expression" #~ msgid "`format string' for READTEXT must be a CHARACTER string" #~ msgstr "format string de READTEXT doit tre une chane de caractres" #~ msgid "non-constant expression" #~ msgstr "expression n'est pas une constante" #~ msgid "ignoring case upon input and" #~ msgstr "ignorer la casse durant l'entre et" #~ msgid "making special words uppercase wouldn't work" #~ msgstr "rendre les mots spciaux en majuscule ne fonctionnerait pas" #~ msgid "making special words uppercase and" #~ msgstr "rendant les mots spciaux en majuscule et" #~ msgid " ignoring case upon input wouldn't work" #~ msgstr " ignorer la casse durant ne fonctionnerait pas" #~ msgid "invalid C'xx' " #~ msgstr "Cxx invalide" #~ msgid "malformed exponent part of floating-point literal" #~ msgstr "partie de l'exposant mal compose du litral en virgule flottante" #~ msgid "real number exceeds range of REAL" #~ msgstr "nombre rel excde les limites de REAL" #~ msgid "end-of-file in '<>' directive" #~ msgstr "fin de fichier dans la directive <>" #~ msgid "unrecognized compiler directive" #~ msgstr "directive du compilateur non reconnue" #~ msgid "unrecognized compiler directive `%s'" #~ msgstr "directive du compilateur %s non reconnue" #~ msgid "unterminated control sequence" #~ msgstr "squence de contrle non termine" #~ msgid "invalid integer literal in control sequence" #~ msgstr "chane d'entiers invalide dans la squence de contrle" #~ msgid "control sequence overflow" #~ msgstr "dbordement de la chane de contrle" #~ msgid "invalid base in read control sequence" #~ msgstr "base invalide dans la squence de contrle de lecture" #~ msgid "unterminated string literal" #~ msgstr "chane litrale non termine" #~ msgid "invalid number format `%s'" #~ msgstr "format de numro %s invalide" #~ msgid "integer literal too big" #~ msgstr "litral d'entier trop grand" #~ msgid "can't find %s" #~ msgstr "ne peut reprer %s" #~ msgid "USE_SEIZE_FILE directive must be followed by string" #~ msgstr "directive USE_SEIZE_FILE doit tre suivie d'une chane" #~ msgid "missing `=' in compiler directive" #~ msgstr "= manquant dans la directtive au compilateur" #~ msgid "invalid value follows `=' in compiler directive" #~ msgstr "valeur invalide suivant = dans la directive au compilateur" #~ msgid "invalid `%c' character in name" #~ msgstr "caractre %c invalide dans le nom" #~ msgid "`%s' not integer constant synonym " #~ msgstr " %s n'est pas un synonyme de constante entire" #~ msgid "value out of range in compiler directive" #~ msgstr "valeur hors gamme dans la directive au compilateur" #~ msgid "no modules seen" #~ msgstr "aucun module vu" #~ msgid "modeless tuple not allowed in this context" #~ msgstr "tuple sans modle n'est pas permis dans ce contexte" #~ msgid "IN expression does not have a mode" #~ msgstr "expression IN n'a pas de mode" #~ msgid "location enumeration for BOOLS" #~ msgstr "localisation d'numration pour BOOLENS" #~ msgid "location enumeration for bit-packed arrays" #~ msgstr "localisation d'numration tableaux de bits paquets" #~ msgid "loop's IN expression is not a composite object" #~ msgstr "boucle dans l'expression IN n'est pas un objet composite" #~ msgid "start expr must have discrete mode" #~ msgstr "dbut de l'expression doit avoir un mode discret" #~ msgid "DO FOR start expression is a numbered SET" #~ msgstr "expression de dpart de DO FOR est un SET numr" #~ msgid "TO expression is a numbered SET" #~ msgstr "expression TO est un SET numr" #~ msgid "TO expr must have discrete mode" #~ msgstr "expression TO doit avoir un mode discret" #~ msgid "start expr and TO expr must be compatible" #~ msgstr "dbut de l'expression et l'expression TO doivent tre compatibles" #~ msgid "BY expr must have discrete mode" #~ msgstr "expression BY doit avoir un mode discret" #~ msgid "start expr and BY expr must be compatible" #~ msgstr "dbut de l'expression et l'expression BY doivent tre compatibles" #~ msgid "loop identifier undeclared" #~ msgstr "identificateur de boucle non dclar" #~ msgid "loop variable incompatible with start expression" #~ msgstr "variable de boucle incompatible avec le dbut de l'expression" #~ msgid "body of DO FOR will never execute" #~ msgstr "corps de DO FOR ne sera jamais excut" #~ msgid "BY expression is negative or zero" #~ msgstr "expression BY est ngative ou zro" #~ msgid "can't iterate through array of BOOL" #~ msgstr "ne peut faire d'itration travers le tableau de BOOLENS" #~ msgid "Can't iterate through array of BOOL" #~ msgstr "ne peut faire d'itration travers le tableau de BOOLENS" #~ msgid "there was no start label to match the end label '%s'" #~ msgstr "il n'y a pas d'tiquette de dpart concordant avec l'tiquette de fin %s " #~ msgid "start label '%s' does not match end label '%s'" #~ msgstr "tiquette de dpart %s ne concorde pas avec l'tiquette de fin %s " #~ msgid "no RETURN or RESULT in procedure" #~ msgstr "pas de RETURN ou RESULT dans la procdure" #~ msgid "PREFIXED clause with no prelix in unlabeled module" #~ msgstr "cluase PREFIX sans no prelix dans un module sans tiquette" #~ msgid "'%s!' is not followed by an identifier" #~ msgstr " %s n'est pas suivi d'un identificateur" #~ msgid "expected a name string here" #~ msgstr "un nom de chane est attendu ici" #~ msgid "`%s' undeclared" #~ msgstr " %s non dclar" #~ msgid "action not allowed in SPEC MODULE" #~ msgstr "action n,est pas permise dans le MODULE SPEC" #~ msgid "missing defining occurrence" #~ msgstr "dfinition d'occurence manquante" #~ msgid "bad defining occurrence following ','" #~ msgstr "dfinition d'occurence errone suivant ," #~ msgid "missing '(' in exception list" #~ msgstr ") manquante dans la liste d'exceptions" #~ msgid "ON exception names must be unique" #~ msgstr "noms d'exception ON doivent tre uniques" #~ msgid "syntax error in exception list" #~ msgstr "erreur de syntaxe dans la liste d'exception" #~ msgid "empty ON-condition" #~ msgstr "condition ON vide" #~ msgid "INIT not allowed at loc-identity declaration" #~ msgstr "INIT n'est pas permis dans la dclaration d'identit de localisation" #~ msgid "'=' used where ':=' is required" #~ msgstr "= utilis o := est requis" #~ msgid "loc-identity declaration without initialization" #~ msgstr "dclaration de loc n'a pas d'initialisation" #~ msgid "bad syntax following FORBID" #~ msgstr "syntaxe errone suivant FORBID" #~ msgid "expected a postfix name here" #~ msgstr "nom postfixe attendu ici" #~ msgid "expected another rename clause" #~ msgstr "attendait une autre clause de changement de nom" #~ msgid "NONREF specific without LOC in result attribute" #~ msgstr "NONREF spcifique sans LOCALISATION dans l'attribut rsultant" #~ msgid "DYNAMIC specific without LOC in result attribute" #~ msgstr "DYNAMIC spcifique sans LOCALISATION dans l'attribut rsultant" #~ msgid "exception names must be unique" #~ msgstr "noms d'exceptions doivent tre uniques" #~ msgid "must specify a PROCESS name" #~ msgstr "doit spcifier un nom de processus" #~ msgid "SIGNAL must be in global reach" #~ msgstr "SIGNAL doit tre dans l'tendue globale" #~ msgid "syntax error while parsing signal definition statement" #~ msgstr "erreur de syntaxe lors de l'analyse syntaxique de la dclaration de la dfinition" #~ msgid "case range list" #~ msgstr "liste d'tendue du CASE" #~ msgid "misplaced colon in case label" #~ msgstr ": mal placs dans l'tiquette du CASE" #~ msgid "unrecognized case label list after ','" #~ msgstr "tiquette non reconnue du CASE aprs ," #~ msgid "readonly location modified by 'asm'" #~ msgstr "localisation en lecture seulement modifie par asm" #~ msgid "expected 'TO' in step enumeration" #~ msgstr "attendait TO dans l'numration du PAS" #~ msgid "expected 'IN' in FOR control here" #~ msgstr "attendait IN dans le contrle du FOR ici" #~ msgid "missing DELAY CASE alternative" #~ msgstr "alternative de dlais du CASE manquante" #~ msgid "non-referable location in DO WITH" #~ msgstr "localisation non rfrenable dans le DO WITH" #~ msgid "WITH element must be of STRUCT mode" #~ msgstr "lment WITH doit tre de mode STRUCT" #~ msgid "missing ')' in signal/buffer receive alternative" #~ msgstr ") manquant dans la rception alternative de signal/tampon" #~ msgid "misplaced 'IN' in signal/buffer receive alternative" #~ msgstr "IN mal plac dans la rception alternative de signal/tampon" #~ msgid "missing RECEIVE alternative" #~ msgstr "RECEIVE alternative manquant" #~ msgid "PROCESS copy number must be integer" #~ msgstr "processus de copie de nombres doit tre entier" #~ msgid "missing parenthesis for procedure call" #~ msgstr "parenthse manquante dans l'appel de procdure" #~ msgid "syntax error in action" #~ msgstr "erreur de syntaxe dans l,action" #~ msgid "no handler is permitted on this action" #~ msgstr "pas de handler permis pour cette action" #~ msgid "definition follows action" #~ msgstr "dfinition suit l'action" #~ msgid "bad tuple field name list" #~ msgstr "nom erron de liste de champ de tuple" #~ msgid "invalid syntax for label in tuple" #~ msgstr "syntaxe invalide pour l'tiquette dans le tuple" #~ msgid "bad syntax in tuple" #~ msgstr "syntaxe errone dans le tuple" #~ msgid "non-mode name before tuple" #~ msgstr "nom sans mode avant le tuple" #~ msgid "invalid expression/location syntax" #~ msgstr "expression/localisation syntaxe invalide" #~ msgid "RECEIVE expression" #~ msgstr "expression RECEIVE" #~ msgid "there should not be a ';' here" #~ msgstr "il ne devrait pas y avoir un ; ici" #~ msgid "missing ELSE/ELSIF in IF expression" #~ msgstr "ELSE/ELSIF manquant dans l'expresion IF" #~ msgid "conditional expression not allowed inside parentheses" #~ msgstr "expression conditionnelle non permise l'intrieur des parenthses" #~ msgid "mode-less tuple not allowed inside parentheses" #~ msgstr "tuple sans modle n'est pas permis l'intrieur des parenthses" #~ msgid "mixed numbered and unnumbered set elements is not standard" #~ msgstr "lments de l'ensemble numrots et non numrots mlangs n'est pas standard" #~ msgid "SET mode must define at least one named value" #~ msgstr "mode SET doit dfinir au moins une valeur nomme" #~ msgid "POS not allowed for ARRAY" #~ msgstr "POSITION n'est pas permise pour un TABLEAU" #~ msgid "bad field name following ','" #~ msgstr "nom de champ erron aprs ," #~ msgid "expected ':' in structure variant alternative" #~ msgstr ": attendu dans la structure variante alternative" #~ msgid "missing field" #~ msgstr "champ manquant" #~ msgid "VARYING bit-strings not implemented" #~ msgstr "chane variante de bits n'est pas implante" #~ msgid "BUFFER modes may not be readonly" #~ msgstr "modes des TAMPOONS ne peuvent pas tre en LECTURE seulement" #~ msgid "EVENT modes may not be readonly" #~ msgstr "modes d'VVEMENTS ne peuvent pas tre en LECTURE seulement" #~ msgid "SIGNAL is not a valid mode" #~ msgstr "SIGNAL n'est pas un mode valide" #~ msgid "syntax error - missing mode" #~ msgstr "erreur de syntaxe - mode manquant" #~ msgid "syntax error - expected a module or end of file" #~ msgstr "erreur de syntaxe - module attendu ou fin de fichier" #~ msgid " `%s', which depends on ..." #~ msgstr " %s , laquel dpend de ..." #~ msgid "cycle: `%s' depends on ..." #~ msgstr "cycle: %s dpend de ..." #~ msgid " `%s'" #~ msgstr " %s " #~ msgid "SYN of this mode not allowed" #~ msgstr "SYN de de mode n'est pas permis" #~ msgid "mode of SYN incompatible with value" #~ msgstr "mode de SYN incompatible avec la valeur" #~ msgid "SYN value outside range of its mode" #~ msgstr "valeur de SYN en dehors de l'tendue de son mode" #~ msgid "INIT string too large for mode" #~ msgstr "chane d'INIT trop grande pour ce mode" #~ msgid "mode with non-value property in signal definition" #~ msgstr "mode sans proprit de non valeur dans la dfinition de signal" #~ msgid "RETURNS spec with invalid mode" #~ msgstr "spcification de RETOUR avec un mode invalide" #~ msgid "operand to REF is not a mode" #~ msgstr "l'oprande de REF n'est pas un mode" #~ msgid "field with non-value mode in variant structure not allowed" #~ msgstr "champ avec un mode non valeur dans une structure variante n'est pas permis" #~ msgid "buffer element mode must not have non-value property" #~ msgstr "mode lment du tampon ne doit pas avoir une proprit de non valeur" #~ msgid "recordmode must not have the non-value property" #~ msgstr "mode d'enregistrement ne doit pas avoir une proprit de non valeur" #~ msgid "invalid attribute for argument `%s' (only IN or LOC allowed)" #~ msgstr "attribue invalide pour l'argument %s (seul IN ou LOC est permis)" #~ msgid "PROCESS may only be declared at module level" #~ msgstr "PROCESSUS peut seulement tre dclar au niveau module" #~ msgid "process name %s never declared" #~ msgstr "nom de processus %s n'a jamais t dclar" #~ msgid "you may only START a process, not a proc" #~ msgstr "vous pouvez seulement LANCER un processus, pas une procdure" #~ msgid "SET expression not a location" #~ msgstr "expression de l'ENSEMBLE n'est pas une localisation" #~ msgid "SET location must be INSTANCE mode" #~ msgstr "localisation de l'ENSEMBLE doit tre un mode d'INSTANCE" #~ msgid "too many arguments to process `%s'" #~ msgstr "trop d'arguments traiter pour %s " #~ msgid "too many arguments to process" #~ msgstr "trop d'arguments traiter" #~ msgid "too few arguments to process `%s'" #~ msgstr "pas assez d'arguments pour traiter %s " #~ msgid "too few arguments to process" #~ msgstr "trop peu d'arguments pour le traitement" #~ msgid "COPY_NUMBER argument must be INSTANCE expression" #~ msgstr "argument de COPY_NUMBER doit tre une expression d'INSTANCE" #~ msgid "GEN_CODE argument must be a process or signal name" #~ msgstr "argument GEN_CODE doit tre une processus ou un nom de signal" #~ msgid "GEN_INST parameter 2 must be an integer mode" #~ msgstr "paramtre 2 de GEN_INST doit tre un mode entier" #~ msgid "GEN_INST parameter 1 must be a PROCESS or an integer expression" #~ msgstr "paramtre 1 de GEN_INST doit tre une PROCESSUS ou une expression entire" #~ msgid "%s is not a declared process" #~ msgstr "%s n'est pas processus dclar" #~ msgid "PROC_TYPE argument must be INSTANCE expression" #~ msgstr "argument de PROC_TYPE doit tre une expression d'INSTANCE" #~ msgid "QUEUE_LENGTH argument must be a BUFFER/EVENT location" #~ msgstr "argument de QUEUE_LENGTH doit avoir une localisation de TAMPON/VNEMENT" #~ msgid "SEND requires a SIGNAL; %s is not a SIGNAL name" #~ msgstr "TRANSMISSION requiert un SIGNAL; %s n'est pas un nom de SIGNAL" #~ msgid "too many values for SIGNAL `%s'" #~ msgstr "trop de valeurs pour le SIGNAL %s " #~ msgid "too few values for SIGNAL `%s'" #~ msgstr "pas assez de valeurs pour le SIGNAL %s " #~ msgid "signal sent without priority" #~ msgstr "signal transmis sans priorit" #~ msgid " and no default priority was set." #~ msgstr " et aucune priorit par dfaut n'a t dfinie." #~ msgid " PRIORITY defaulted to 0" #~ msgstr " PRIORIT par dfaut est 0" #~ msgid "SEND without a destination instance" #~ msgstr "TRANSMISSION sans instance de destination" #~ msgid " and no destination process specified" #~ msgstr " et aucune destination de processus spcifie" #~ msgid " for the signal" #~ msgstr " pour le signal" #~ msgid "SEND to ANY copy of process `%s'" #~ msgstr "TRANSMISSION vers N'IMPORTE QUELLE copie de processus %s " #~ msgid "SEND TO must be an INSTANCE mode" #~ msgstr "TRANSMISSION TO doit avoir un mode d'INSTANCE" #~ msgid "SEND WITH must have a mode" #~ msgstr "TRANSMISSION WITH doit avoir un mode" #~ msgid "internal error: RECEIVE CASE stack invalid" #~ msgstr "erreur interne: pile du RECEIVE CASE invalide" #~ msgid "SET requires INSTANCE location" #~ msgstr "ENSEMBLE requiert une INSTANCE de localisation" #~ msgid "SIGNAL in RECEIVE CASE alternative follows" #~ msgstr "SIGNAL dans un CASE de RCEPTION alternative suit" #~ msgid " a BUFFER name on line %d" #~ msgstr " un nom de TAMPON sur la ligne %d" #~ msgid "SIGNAL `%s' has no data fields" #~ msgstr "SIGNAL %s n'a pas de champs de donnes" #~ msgid "SIGNAL `%s' requires data fields" #~ msgstr "SIGNAL %s requiert des champs de donnes" #~ msgid "too few data fields provided for `%s'" #~ msgstr "trop peu de champs de donnes fournies pour %s " #~ msgid "too many data fields provided for `%s'" #~ msgstr "trop de champs de donnes fournis pour %s " #~ msgid "BUFFER in RECEIVE CASE alternative follows" #~ msgstr "TAMPON du CASE de RCEPTION alternative suit" #~ msgid " a SIGNAL name on line %d" #~ msgstr " un nom de SIGNAL sur la ligne %d" #~ msgid "BUFFER in RECEIVE CASE alternative must be a location" #~ msgstr "TAMPON dans un CASE de RCEPTION alternative doit tre une localisation " #~ msgid "buffer receive alternative requires only 1 defining occurrence" #~ msgstr "tampon de rception alternatif requiert une seule dfinition d'occurence" #~ msgid "incompatible modes in receive buffer alternative" #~ msgstr "modes incompatibles dans le tampon alternatif de rception" #~ msgid "defining occurrence in receive buffer alternative must be a location" #~ msgstr "dfinition d'occurence dans un tampon de rception alternatif doit tre une localisation" #~ msgid "buffer receive alternative without `IN location'" #~ msgstr "tampon de rception alternative sans IN location" #~ msgid "RECEIVE CASE alternative must specify a SIGNAL name or BUFFER location" #~ msgstr "alternative de RCEPTION DE CASE doit spcifier un nom de SIGNAL ou la localisation d'un TAMPON" #~ msgid "RECEIVE CASE without alternatives" #~ msgstr "RCEPTION DE CASE sans alternative" #~ msgid "CONTINUE requires an event location" #~ msgstr "CONTINUE requiert une localisation d'vnement" #~ msgid "PRIORITY must be of integer type" #~ msgstr "PRIORIT doit avoir un type entier" #~ msgid "delay alternative must be an EVENT location" #~ msgstr "dlai alternatif doit avoir une localisation d'VNEMENT" #~ msgid "DELAY CASE without alternatives" #~ msgstr "DLAI du CASE sans alternative" #~ msgid "DELAY action requires an event location" #~ msgstr "DLAI d'action requiert une localisation d'vnement" #~ msgid "PRIORITY in DELAY action must be of integer type" #~ msgstr "PRIORIT dans le DLAI d'action doit avoir un type entier" #~ msgid "DELAY action without priority." #~ msgstr "DLAI d'action sans priorit" #~ msgid "send buffer action requires a BUFFER location" #~ msgstr "le tampon d'expdition de l'action requiert une localisation de TAMPON" #~ msgid "there must be only 1 value for send buffer action" #~ msgstr "il ne doit y avoir qu'une valeur pour le tampon de transmission d'action" #~ msgid "convert failed for send buffer action" #~ msgstr "chec de voncversion pour le tampon de transmission d'action" #~ msgid "incompatible modes in send buffer action" #~ msgstr "modes incompatibles dans le tampon de transmission d'action" #~ msgid "buffer sent without priority" #~ msgstr "tampon de transmission sans priorit" #~ msgid "WITH not allowed for send buffer action" #~ msgstr "WITH n'est pas permis pour le tampon de transmission d'action" #~ msgid "TO not allowed for send buffer action" #~ msgstr "TO n'est pas permis pour le tampon de transmission d'action" #~ msgid "SEND requires a BUFFER; `%s' is not a BUFFER name" #~ msgstr "SEND requiert un TAMPON; %s n'est pas un nom de TAMPON" #~ msgid "non-integral max queue size for EVENT/BUFFER mode" #~ msgstr "taille maximale de queue n'est pas un entier pour un mode VNEMENT/TAMPON" #~ msgid "non-constant max queue size for EVENT/BUFFER mode" #~ msgstr "taille maximale de queue n'est pas une constante pour un mode VNEMENT/TAMPON" #~ msgid "max queue_size for EVENT/BUFFER is not positive" #~ msgstr "taille maximale de queue pour un VNEMENT/TAMPON n'est pas positive" #~ msgid "absolute time value must be of mode TIME" #~ msgstr "valeur absolue de temps doit tre du mode TEMPS" #~ msgid "duration primitive value must be of mode DURATION" #~ msgstr "valeur de la dure de la primitive doit tre un mode de DURE" #~ msgid "string length > UPPER (UINT)" #~ msgstr "longueur de la chane > UPPER (UINT)" #~ msgid "can only build a powerset from a discrete mode" #~ msgstr "peut seulement construire un powerset partir d'un mode discret" #~ msgid "non-constant bitstring size invalid" #~ msgstr "taille du champ de bits n'est pas une constante valide" #~ msgid "non-constant powerset size invalid" #~ msgstr "taille de la non constante du powerset est invalide" #~ msgid "array or string index is a mode (instead of a value)" #~ msgstr "tableau ou chane d'index est une mode (au lieu d'une valeur)" #~ msgid "index is not an integer expression" #~ msgstr "index n'est pas une expression entire" #~ msgid "index is not discrete" #~ msgstr "index n'est pas discret" #~ msgid "possible internal error - slice argument is neither referable nor constant" #~ msgstr "erreur interne possible - l'argument de dcoupage n'est ni rfrenable ni une constante" #~ msgid "bit array slice with non-constant length" #~ msgstr "dcoupage de tableau de bits avec une longueur non constante" #~ msgid "bitstring slice with non-constant length" #~ msgstr "dcoupage de chane de bits avec une longueur non constante" #~ msgid "slice operation on non-array, non-bitstring value not supported" #~ msgstr "opration de dcoupage sur un non tableau ou sur une valeur non chane de bits n'est pas supporte" #~ msgid "can only take slice of array or string" #~ msgstr "peut seulement faire le dcoupage d'un tableau ou d'une chane" #~ msgid "slice length out-of-range" #~ msgstr "tranche de la longueur est hors gamme" #~ msgid "too many index expressions" #~ msgstr "trop d'expressions d'index" #~ msgid "array index is not discrete" #~ msgstr "index de tableau n'est pas discret" #~ msgid "invalid compound index for bitstring mode" #~ msgstr "index compos invalide pour un mode chane de bits" #~ msgid "conversions from variable_size value" #~ msgstr "conversions partir de la valeur variable_size" #~ msgid "conversions to variable_size mode" #~ msgstr "conversion vers un mode variable_size" #~ msgid "cannot convert to float" #~ msgstr "ne peut convertir en un type flottant" #~ msgid "cannot convert float to this mode" #~ msgstr "ne peut convertir un flottant vers ce mode" #~ msgid "OVERFLOW in expression conversion" #~ msgstr "DBORDEMENT dans la conversion d'expression" #~ msgid "overflow (not inside function)" #~ msgstr "dbordement (pas l'intrieur de la fonction)" #~ msgid "possible overflow (not inside function)" #~ msgstr "dbordement possible (pas l'intrieur de la fonction)" #~ msgid "expression will always cause OVERFLOW" #~ msgstr "expression causera toujours un DBORDEMENT" #~ msgid "not implemented: constant conversion from that kind of expression" #~ msgstr "pas implant: conversion de constante depuis quel sorte d'expression" #~ msgid "not implemented: constant conversion to that kind of mode" #~ msgstr "pas implant: conversion de constante vers quell sorte de mode" #~ msgid "non-standard, non-portable value conversion" #~ msgstr "non standard, conversion de valeur non portable" #~ msgid "location conversion between differently-sized modes" #~ msgstr "conversion de localisation entre des mode de taille diffrentes" #~ msgid "size %d of BIN too big - no such integer mode" #~ msgstr "taille %d de BIN trop grand - pas de tel mode entier" #~ msgid "BIN in pass 2" #~ msgstr "BIN dans la passe 2" #~ msgid "mode of tuple is neither ARRAY, STRUCT, nor POWERSET" #~ msgstr "mode du tuple n'est pas ARRAY, STRUCT, ni POWERSET" #~ msgid "internal error in chill_root_resulting_mode" #~ msgstr "erreur interne dans chill_root_resulting_mode" #~ msgid "string lengths not equal" #~ msgstr "longueurs de chanes ingales" #~ msgid "can't do ARRAY assignment - too large" #~ msgstr "ne peut effectuer une affectation de tableau - trop grand" #~ msgid "rhs of array assignment is not addressable" #~ msgstr "rhs de l'affectation de tableau n'est pas adressable" #~ msgid "non-constant expression for BIN" #~ msgstr "expression n'est pas un constante pour BIN" #~ msgid "expression for BIN must not be negative" #~ msgstr "expression pour BIN ne doit pas tre ngatif" #~ msgid "cannot process BIN (>32)" #~ msgstr "ne peut traiter BIN (>32)" #~ msgid "bounds of range are not compatible" #~ msgstr "bornes de l'tendue ne sont pas compatibles" #~ msgid "negative string length" #~ msgstr "longueur ngative de chane" #~ msgid "range's lower bound and parent mode don't match" #~ msgstr "borne infrieure de l'tendue et le mode parent ne concordent pas" #~ msgid "range's upper bound and parent mode don't match" #~ msgstr "borne suprieure de l'tendue et le mode parent ne concordent pas" #~ msgid "making range from non-mode" #~ msgstr "faisant une tendue partir de non mode" #~ msgid "floating point ranges" #~ msgstr "tendues en virgules flottantes" #~ msgid "range mode has non-constant limits" #~ msgstr "mode d'tendue a des limites non contantes" #~ msgid "range's high bound < mode's low bound" #~ msgstr "borne suprieure de l'tendue < mode de la borne infrieure" #~ msgid "range's high bound > mode's high bound" #~ msgstr "borne suprieure de l'tendue > mode de la borne suprieure" #~ msgid "range mode high bound < range mode low bound" #~ msgstr "borne suprieure de l'tendue < mode de l'tendue la borne infrieure" #~ msgid "range's low bound < mode's low bound" #~ msgstr "borne infrieure de l'tendue < mode de la borne infrieure" #~ msgid "range's low bound > mode's high bound" #~ msgstr "borne infrieure de l'tendue > mode de la borne suprieure" #~ msgid "stepsize in STEP must be an integer constant" #~ msgstr "taille du PAS doit tre une contante entire" #~ msgid "stepsize in STEP must be > 0" #~ msgstr "taille du PAS doit tre > 0" #~ msgid "stepsize in STEP must be the natural width of the array element mode" #~ msgstr "taille du PAS doit tre de largeur naturelle au mode d'lments du tableau" #~ msgid "starting word in POS must be an integer constant" #~ msgstr "dbut du mot dans la POSITION doit tre une constante entire" #~ msgid "starting word in POS must be >= 0" #~ msgstr "dbut du mot dans la POSITION doit tre >= 0" #~ msgid "starting word in POS within STEP must be 0" #~ msgstr "dbut du mot dans la POSITION l'intrieur du PAS doit tre 0" #~ msgid "starting bit in POS must be an integer constant" #~ msgstr "bit de dpart dans la POSITION doit tre une constante entire" #~ msgid "starting bit in POS within STEP must be 0" #~ msgstr "bit de dpart dans la POSITION l'intrieur du PAS doit tre 0" #~ msgid "starting bit in POS must be >= 0" #~ msgstr "bit de dpart dans la POSITION doit tre >= 0" #~ msgid "starting bit in POS must be < the width of a word" #~ msgstr "bit de dpart dans la POSITION doit tre < que la largeur d'un mot" #~ msgid "length in POS must be > 0" #~ msgstr "longueur dans la POSITION doit tre > 0" #~ msgid "end bit in POS must be an integer constant" #~ msgstr "bit final dans la POSITION doit tre une constante entire" #~ msgid "end bit in POS must be >= the start bit" #~ msgstr "bit final dans la POSITION doit tre >= bit de dpart" #~ msgid "end bit in POS must be < the width of a word" #~ msgstr "bit final dans la POSITION doit tre < la largeur de mot" #~ msgid "the length specified on POS within STEP must be the natural length of the array element type" #~ msgstr "la longueur spcifi de positionnement l'intrieur du pas doit tre naturelle la longueur des types des lments du tableau" #~ msgid "step size in STEP must be >= the length in POS" #~ msgstr "la taille du PAS doit tre >= la longueur dans la POSITION" #~ msgid "array index must be a range, not a single integer" #~ msgstr "l'index d'un tableau doit tre une tendue, pas un simple entier" #~ msgid "array index is not a discrete mode" #~ msgstr "index du tableau n'a pas un mode discret" #~ msgid "the length specified on POS must be the natural length of the field type" #~ msgstr "la longueur spcifie de positionnement doit tre de longueur naturel au type du champ" #~ msgid "STRUCT fields must be layed out in monotonically increasing order" #~ msgstr "champs STRUCT doit avoir t disposs en ordre monotonique croissant" #~ msgid "if one field has a POS layout, then all fields must have a POS layout" #~ msgstr "si un champ a une disposition de positionnement, alors tous les champs doivent avoir une disposition de positionnement" #~ msgid "parameterized structures not implemented" #~ msgstr "structure paramtrises ne sont pas implantes" #~ msgid "invalid parameterized type" #~ msgstr "type paramtris invalide" #~ msgid "abstract virtual `%#D' called from constructor" #~ msgstr "abstrait virtuel %#D appel partir d'un constructeur" #~ msgid "abstract virtual `%#D' called from destructor" #~ msgstr "abstrait virtuel %#D appel partir d'un destructeur" #~ msgid "discarding `const' applied to a reference" #~ msgstr "mis de ct const appliqu une rfrence" #~ msgid "discarding `volatile' applied to a reference" #~ msgstr "mis de ct volatile appliqu une rfrence" #~ msgid "parser lost in parsing declaration of `%D'" #~ msgstr "analyseur syntaxique perdu dans l'analyse de la dclaration de %D" #~ msgid "methods cannot be converted to function pointers" #~ msgstr "mthode ne peuvent tre converties en des pointeurs de fonction" #~ msgid "ambiguous request for method pointer `%s'" #~ msgstr "requte ambigue pour la mthode sur pointeur %s " #~ msgid "`%T' cannot be `restrict'-qualified" #~ msgstr "%T ne peut tre restrict-qualified" #~ msgid "`%T' cannot be `const'-, `volatile'-, or `restrict'-qualified" #~ msgstr "%T ne peut tre const-, volatile- ou restrict-qualified" #~ msgid "invalid reference to NULL ptr, use ptr-to-member instead" #~ msgstr "rfrence invalide un pointeur NUL, utiliser pointeur de membre la place" #~ msgid "internal error #%d" #~ msgstr "erreur interne #%d" #~ msgid "can't create cross-reference file `%s'" #~ msgstr "ne peut produire un fichier de rfrences croises %s " #~ msgid "support non-32-bit machines better as of version 0.6" #~ msgstr "le support des machines n'ayant pas 32 bits est meilleur avec la version 0.6" #~ msgid "Extra label definition %A at %0 -- perhaps previous label definition %B at %1 should have CONTINUE statement?" #~ msgstr "Dfinition superflue d'tiquette %A %0 -- peut-tre que la dfinition prcdente d'tiquette %B %1 aurait besoin d'une dclaration CONTINUE?" #~ msgid "Extra label definition %A at %0 following label definition %B at %1" #~ msgstr "Dfinition superflue d'tiquette %A %0 aprs la dfinition de l'tiquette %B %1" #~ msgid "Continuation indicator at %0 invalid on first non-comment line of file or following END or INCLUDE [info -f g77 M LEX]" #~ msgstr "Indicateur de continuation %0 invalide sur la premire ligne de non commentaire du fichier ou suivant END ou INCLUDE [info -f g77 M LEX]" #~ msgid "Continuation indicator at %0 invalid here [info -f g77 M LEX]" #~ msgstr "Indicateur de continuation %0 invalide ici [info -f g77 M LEX]" #~ msgid "Non-negative integer at %0 too large" #~ msgstr "Entier non ngatif %0 trop grand" #~ msgid "Integer at %0 too large (%2 has precedence over %1)" #~ msgstr "Entier %0 trop grand (%2 a prcdence sur %1)" #~ msgid "Period at %0 not followed by valid keyword forming a valid binary operator; `.%A.' is not a valid binary operator" #~ msgstr "Priode %0 n'est pas suivie d'un mot cl valide formant un oprateut binaire valide; .%A, n'est pas un oprateur binaire valide" #~ msgid "`.%A.' at %0 not a binary operator" #~ msgstr ".%A. n'est pas un oprateur binaire valide" #~ msgid "Double-quote at %0 not followed by a string of valid octal digits at %1" #~ msgstr "Double apostrophe %0 pas suivi par une chane valide de chiffres en octal %1" #~ msgid "Invalid octal constant at %0" #~ msgstr "constante octale invalide %0" #~ msgid "Invalid binary digit(s) found in string of digits at %0" #~ msgstr "Chiffre binaire invalide trouv dans la chane de chiffres %0" #~ msgid "Invalid binary constant at %0" #~ msgstr "constante binaire invalide %0" #~ msgid "Invalid hexadecimal digit(s) found in string of digits at %0" #~ msgstr "Chiffre hexadcimal invalide trouv dans la chane de chiffres %0" #~ msgid "Invalid hexadecimal constant at %0" #~ msgstr "constante hexadcimale invalide %0" #~ msgid "Invalid octal digit(s) found in string of digits at %0" #~ msgstr "Chiffre octal invalide trouv dans la chane de chiffres %0" #~ msgid "Invalid radix specifier `%A' at %0 for typeless constant at %1" #~ msgstr "Spcificateur de base invalide %A %0 pour un constante sans type %1" #~ msgid "Invalid typeless constant at %1" #~ msgstr "constante sans type invalide %1" #~ msgid "%A part of complex constant at %0 must be a real or integer constant -- otherwise use CMPLX() or COMPLEX() in place of ()" #~ msgstr "la partie %A de la constante complexe %0 doit tre une constante relle ou entire -- autrement utiliser CMPLX() ou COMPLEX() la place de ()" #~ msgid "%A part of complex constant at %0 not a real or integer constant" #~ msgstr "la partie %A de la constante complexe %0 n'est pas une constante relle ou entire" #~ msgid "Invalid keyword `%%%A' at %0 in this context" #~ msgstr "mot cl invalide %%%A %0 dans ce contexte" #~ msgid "Invalid keyword `%%%A' at %0" #~ msgstr "mot cl invalide %%%A %0" #~ msgid "Null expression between %0 and %1 invalid in this context" #~ msgstr "expression nulle entre %0 et %1 invalide dans ce contexte" #~ msgid "Invalid null expression between %0 and %1" #~ msgstr "expression null invalide entre %0 et %1" #~ msgid "Concatenation operator at %0 must operate on two subexpressions of character type, but neither subexpression at %1 or %2 is of character type" #~ msgstr "oprateur de concatnation %0 doit oprer sur deux sous-expressions de type caractre, mais aucune des sous-expressions %1 ou %2 n'est de type caractre" #~ msgid "Invalid operands at %1 and %2 for concatenation operator at %0" #~ msgstr "Oprandes invalides %1 et %2 pour l'oprateur de concatnation %0" #~ msgid "Concatenation operator at %0 must operate on two subexpressions of character type, but the subexpression at %1 is not of character type" #~ msgstr "Oprateur de concatnation %0 doit oprer sur deux sous-expressions de type caractre, mais la sous-expression %1 n'est pas de type caractre" #~ msgid "Invalid operand at %1 for concatenation operator at %0" #~ msgstr "Oprande invalide %1 pour l'oprateur de concatnation %0" #~ msgid "Concatenation operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning character scalars, or a combination of both -- but the subexpression at %1 is %A" #~ msgstr "Oprateur de concatnation %0 doit oprer sur deux sous-expressions scalaires (non pas de tableau), deux invocations de fonctions retournant des caractres scalaires ou une combinaison des deux -- mais la sous-expression %1 est %A" #~ msgid "Invalid operand (is %A) at %1 for concatenation operator at %0" #~ msgstr "Oprande invalide (est %A) %1 pour l'oprateur de concatnation %0" #~ msgid "Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but neither subexpression at %1 or %2 is of arithmetic type" #~ msgstr "Oprateur arithmtique %0 doit oprer sur deux sous-expressions de type artihmtique, mais aucune des sous-expressions %1 ou %2 n'est pas de type arithmtique" #~ msgid "Invalid operands at %1 and %2 for arithmetic operator at %0" #~ msgstr "Oprande invalide %1 et %2 pour l'oprateur arithmtique %0" #~ msgid "Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but the subexpression at %1 is not of arithmetic type" #~ msgstr "Oprateur arithmtique %0 doit oprer sur deux sous-expressions de type artihmtique, mais la sous-expression %1 n'est pas de type arithmtique" #~ msgid "Invalid operand at %1 for arithmetic operator at %0" #~ msgstr "Oprande invalide %1 pour l'oprateur arithmtique %0" #~ msgid "Arithmetic operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning arithmetic scalars, or a combination of both -- but the subexpression at %1 is %A" #~ msgstr "Oprateur arithmtique %0 doit oprer sur deux sous-expressions scalaires (pas de tableau), l'invocation des deux fonctions retournant un scalaire arithmtique ou une combinaison des deux -- mais la sous-expressions %1 est %A" #~ msgid "Invalid operand (is %A) at %1 for arithmetic operator at %0" #~ msgstr "Oprande invalide (est %A) %1 pour l'oprateur arithmtique %0" #~ msgid "Character constant at %0 has no closing quote at %1 [info -f g77 M LEX]" #~ msgstr "Constante caractre %0 n'a pas de guillemets de fermeture %1 [info -f g77 M LEX]" #~ msgid "Unterminated character constant at %0 [info -f g77 M LEX]" #~ msgstr "constante de caractres non termine %0 [info -f g77 M LEX]" #~ msgid "Missing initial `&' on continuation line at %0 [info -f g77 M LEX]" #~ msgstr "& initial manquant sur la ligne de continuation %0 [info -f g77 M LEX]" #~ msgid "Continuation line at %0 invalid because it consists only of a single `&' as the only nonblank character" #~ msgstr "Ligne de continuation %0 invalide parce qu'elle contient seulement un simple & comme seul caractre non blanc" #~ msgid "Invalid continuation line at %0" #~ msgstr "ligne de continuation invalide %0" #~ msgid "Invalid statement at %0 [info -f g77 M LEX]" #~ msgstr "Dclaration invalide %0 [info -f g77 M LEX]" #~ msgid "Unrecognized statement name at %0 and invalid form for assignment or statement-function definition at %1" #~ msgstr "Dclaration de nom non reconnue %0 et forme invalide pour l'affectation ou la dfinition de dclaration de fonction %1" #~ msgid "Invalid statement at %0" #~ msgstr "Dclaration invalide %0" #~ msgid "Invalid form for %A statement at %0" #~ msgstr "Forme invalide pour la dclaration %A %0" #~ msgid "Invalid %A statement at %0" #~ msgstr "Dclaration %A invalide %0" #~ msgid "Invalid use of hollerith constant in statement at %0 -- enclose the constant in parentheses (for example, change BACKSPACE 2HAB to BACKSPACE (2HAB))" #~ msgstr "Utilisation invalide d'une constante Hollerith la dclaration %0 -- encapsuler la constante entre parenthses (par exemple, changer BACKSPACE 2HAB en BACKSPACE (2HAB) )" #~ msgid "Invalid I specifier in FORMAT statement at %0" #~ msgstr "spcificateur I invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid B specifier in FORMAT statement at %0" #~ msgstr "spcificateur B invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid O specifier in FORMAT statement at %0" #~ msgstr "spcificateur O invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid Z specifier in FORMAT statement at %0" #~ msgstr "spcificateur Z invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid F specifier in FORMAT statement at %0" #~ msgstr "spcificateur F invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid E specifier in FORMAT statement at %0" #~ msgstr "spcificateur E invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid EN specifier in FORMAT statement at %0" #~ msgstr "spcificateur EN invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid G specifier in FORMAT statement at %0" #~ msgstr "spcificateur G invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid L specifier in FORMAT statement at %0" #~ msgstr "spcificateur L invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid A specifier in FORMAT statement at %0" #~ msgstr "spcificateur A invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid D specifier in FORMAT statement at %0" #~ msgstr "spcificateur D invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid Q specifier in FORMAT statement at %0" #~ msgstr "spcificateur Q invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid $ specifier in FORMAT statement at %0" #~ msgstr "spcificateur $ invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid P specifier in FORMAT statement at %0" #~ msgstr "spcificateur P invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid T specifier in FORMAT statement at %0" #~ msgstr "spcificateur T invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid TL specifier in FORMAT statement at %0" #~ msgstr "spcificateur TL invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid TR specifier in FORMAT statement at %0" #~ msgstr "spcificateur TR invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid X specifier in FORMAT statement at %0" #~ msgstr "spcificateur X invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid S specifier in FORMAT statement at %0" #~ msgstr "spcificateur S invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid SP specifier in FORMAT statement at %0" #~ msgstr "spcificateur SP invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid SS specifier in FORMAT statement at %0" #~ msgstr "spcificateur SS invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid BN specifier in FORMAT statement at %0" #~ msgstr "spcificateur BN invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid BZ specifier in FORMAT statement at %0" #~ msgstr "spcificateur BZ invalide dans la dclaration de FORMAT %0" #~ msgid "Invalid : specifier in FORMAT statement at %0" #~ msgstr "Invalide: spcificateur de dclaration de FORMAT %0" #~ msgid "Invalid H specifier in FORMAT statement at %0" #~ msgstr "spcificateur H invalide dans la dclaration de FORMAT %0" #~ msgid "Nonletter in defined operator at %0" #~ msgstr "ne contient pas une non lettre dans l'oprateur dfini %0" #~ msgid "Invalid type-declaration attribute at %0" #~ msgstr "type d'attribut de dclaration invalide %0" #~ msgid "Unrecognized value for character constant at %0 -- expecting %A" #~ msgstr "valeur non reconnue pour la constante caractre %0 -- %A attendu" #~ msgid "Unrecognized value for character constant at %0" #~ msgstr "valeur non reconnnue pour la constante caractre %0" #~ msgid "Range specification at %0 invalid -- at least one expression must be specified, or use CASE DEFAULT" #~ msgstr "spcification d'tendue %0 invalide -- au moins une expression doit tre spcifi ou utiliser CASE DEFAULT" #~ msgid "Range specification at %0 invalid" #~ msgstr "spcification d'tendue %0 invalide" #~ msgid "Useless range at %0" #~ msgstr "tendue inutile %0" #~ msgid "Invalid kind at %0 for type at %1 -- unsupported or not permitted" #~ msgstr "sorte invalide %0 pour le type %1 -- non support ou non permis" #~ msgid "Invalid kind at %0 for type at %1" #~ msgstr "sorte invalide %0 pour le type %1" #~ msgid "Cannot establish implicit type for initial letter `%A' at %0 -- already explicitly established or used to set implicit type of some name, or backwards order of letters in letter range" #~ msgstr "ne peut tablir un type implicite pour la lettre initiale %A %0 -- dj explicitement tablie ou utilis pour initialiser un type implicite pour un nom quelconque ou un ordre arrire de lettres dans une tendue de lettres" #~ msgid "Cannot establish implicit type for initial letter `%A' at %0" #~ msgstr "ne peut tablir un type implicite pour la lettre initiale %A %0" #~ msgid "Label definition %A (at %0) invalid -- must be in columns 1-5" #~ msgstr "dfinition d'tiquette %A ( %0) invalide -- doit tre en colonnes 1-5" #~ msgid "Invalid label definition %A (at %0)" #~ msgstr "dfinition d'tiquette invalide %A ( %0)" #~ msgid "Run-time expression at %0 in FORMAT statement that does not follow the first executable statement in the program unit -- move the statement" #~ msgstr "expression lors de l'excution %0 dans la dclaration de FORMAT qui ne suit pas la premire dclaration excutable dans l'unit programme -- dplacer la dclaration" #~ msgid "FORMAT at %0 with run-time expression must follow first executable statement" #~ msgstr "FORMAT %0 dans l'expression lors de l'excution doit suivre la premire dclaration excutable" #~ msgid "Boolean/logical operator at %0 must operate on two subexpressions of logical type, but neither subexpression at %1 or %2 is of logical type" #~ msgstr "oprateur boolen/logique %0 doit oprer sur deux sous-expressions de type logique mais aucune des sous-expressions %1 ou %2 n'est de type logique" #~ msgid "Invalid operands at %1 and %2 for boolean operator at %0" #~ msgstr "oprandes invalides %1 et %2 pour l'oprateur boolen %0" #~ msgid "Boolean/logical operator at %0 must operate on two subexpressions of logical type, but the subexpression at %1 is not of logical type" #~ msgstr "oprateur boolen/logique %0 doit oprer sur deux sous-expressions de type logique mais la sous-expression %1 n'est pas de type logique" #~ msgid "Invalid operand at %1 for boolean operator at %0" #~ msgstr "oprande invalide %1 pour l'oprateur boolen %0" #~ msgid "Boolean/logical operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning logical scalars, or a combination of both -- but the subexpression at %1 is %A" #~ msgstr "oprateur boolen/logique %0 doit oprer sur deux sous-expressions de type scalaire (pas tableau), deux invocations de fonction retournant des scalaires logique ou une combinaison des deux -- mais la sous-expression %1 est %A" #~ msgid "Invalid operand (is %A) at %1 for boolean operator at %0" #~ msgstr "oprande invalide (est %A) %1 pour l'oprateur boolen %0" #~ msgid ".NOT. operator at %0 must operate on subexpression of logical type, but the subexpression at %1 is not of logical type" #~ msgstr "oprateur .NOT. %0 doit oprer sur une sous-expression de type logique mais la sous-expression %1 n'est pas de type logique" #~ msgid "Invalid operand at %1 for .NOT. operator at %0" #~ msgstr "oprande invalide %1 pour l'oprateur .NOT. %0" #~ msgid ".NOT. operator at %0 must operate on scalar subexpressions -- but the subexpression at %1 is %A" #~ msgstr "oprateur .NOT. %0 doit oprer sur une sous-expression scalaire mais la sous-expression %1 est %A" #~ msgid "Invalid operand (is %A) at %1 for .NOT. operator at %0" #~ msgstr "oprande invalide (est %A) %1 pour l'oprateur .NOT. %0" #~ msgid "Equality operator at %0 must operate on two subexpressions of arithmetic or character type, but neither subexpression at %1 or %2 is of arithmetic or character type" #~ msgstr "oprateur d'galit %0 doit oprer sur deux sous-expressions de type artihmtique ou caractre mais aucune des sous-expressions %1 ou %2 n'est de type arithmtique ou caractre" #~ msgid "Invalid operands at %1 and %2 for equality operator at %0" #~ msgstr "oprandes invalides %1 et %2 pour l'oprateur d'galit %0" #~ msgid "Equality operator at %0 must operate on two subexpressions of arithmetic or character type, but the subexpression at %1 is not of arithmetic or character type" #~ msgstr "oprateur d'galit %0 doit oprer sur deux sous-expressions de type artihmtique ou caractre mais la sous-expression %1 n'est pas de type arithmtique ou caractre" #~ msgid "Invalid operand at %1 for equality operator at %0" #~ msgstr "oprande invalide %1 pour l'oprateur d'galit %0" #~ msgid "Equality operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning arithmetic or character scalars, or a combination of both -- but the subexpression at %1 is %A" #~ msgstr "oprateur d'galit %0 doit oprer sur deux sous-expressions de type scalaire (non pas de tableau), deux invocations de fonction retournant un type arithmtique ou scalaires caractre ou une combinaison des deux mais la sous-expression %1 est %A" #~ msgid "Invalid operand (is %A) at %1 for equality operator at %0" #~ msgstr "oprande invalide (est %A) %1 pour l'oprateur d'galit %0" #~ msgid "Relational operator at %0 must operate on two subexpressions of integer, real, or character type, but neither subexpression at %1 or %2 is of integer, real, or character type" #~ msgstr "oprateur relationnal %0 doit oprer sur deux sous-expressions de type entier, rel ou caractre, mais aucune des sous-expression %1 ou %2 n'est de type entier, rel ou caractre" #~ msgid "Invalid operands at %1 and %2 for relational operator at %0" #~ msgstr "oprandes invalides %1 et %2 pour l'oprateur relationnel %0" #~ msgid "Relational operator at %0 must operate on two subexpressions of integer, real, or character type, but the subexpression at %1 is not of integer, real, or character type" #~ msgstr "oprateur relationnal %0 doit oprer sur deux sous-expressions de type entier, rel ou caractre, mais la sous-expression %1 n'est pas de type entier, rel ou caractre" #~ msgid "Invalid operand at %1 for relational operator at %0" #~ msgstr "oprande invalide %1 pour l'oprateur relationnel %0" #~ msgid "Relational operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning integer, real, or character scalars, or a combination of both -- but the subexpression at %1 is %A" #~ msgstr "oprateur relationnal %0 doit oprer sur deux sous-expressions de type scalaire (non pas de tableau), deux invocations de fonction retournant un type entier, rel ou caractre ou une combinaison des deux mais la sous-expression %1 est %A" #~ msgid "Invalid operand (is %A) at %1 for relational operator at %0" #~ msgstr "oprande invalide (est %A) %1 pour l'oprateur relationnel %0" #~ msgid "Reference to intrinsic `%A' at %0 invalid -- one or more arguments have incorrect type" #~ msgstr "rfrence l'intrinsque %A %0 invalide -- un ou plusieurs d'arguments ont un type incorrect" #~ msgid "Invalid reference to intrinsic `%A' at %0" #~ msgstr "rfrence invalide vers l'intrinsque %A %0" #~ msgid "Too few arguments passed to intrinsic `%A' at %0" #~ msgstr "trop peu d'arguments passs l'intrinsque %A %0" #~ msgid "Too few arguments for intrinsic `%A' at %0" #~ msgstr "trop peu d'arguments passs l'intrinsque %A %0" #~ msgid "Too many arguments passed to intrinsic `%A' at %0" #~ msgstr "trop d'arguments passs l'intrinsque %A %0" #~ msgid "Too many arguments for intrinsic `%A' at %0" #~ msgstr "trop d'arguments passs l'intrinsque %A %0" #~ msgid "Reference to disabled intrinsic `%A' at %0" #~ msgstr "rfrence l'intrinsque dsactiv %A %0" #~ msgid "Disabled intrinsic `%A' at %0" #~ msgstr "Dsactiver les intrinsques %A %0" #~ msgid "Reference to intrinsic subroutine `%A' as if it were a function at %0" #~ msgstr "rfrence la sous-routine intrinsque %A comme s'il est une fonction %0" #~ msgid "Function reference to intrinsic subroutine `%A' at %0" #~ msgstr "rfrence de fonction la sous-routine intrinsque %A %0" #~ msgid "Reference to intrinsic function `%A' as if it were a subroutine at %0" #~ msgstr "rfrence une fonction intrinsque %A comme s'il est une sous-routine %0" #~ msgid "Subroutine reference to intrinsic function `%A' at %0" #~ msgstr "rfrence de sous-routine la fonction %A %0" #~ msgid "Reference to unimplemented intrinsic `%A' at %0 -- use EXTERNAL to reference user-written procedure with this name" #~ msgstr "rfrence un intrinsque non implant %A %0 -- utiliser EXTERNAL pour rfrence la procdure ayant ce nom et crite par l'usager" #~ msgid "Unimplemented intrinsic `%A' at %0" #~ msgstr "intrinsque %A non implant %0" #~ msgid "Reference to unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)" #~ msgstr "rfrence un intrinsque non implant %A (EXTERNAL assum)" #~ msgid "Unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)" #~ msgstr "intrinsque non implante %A (EXTERNAL assum)" #~ msgid "Attempt to modify variable `%A' at %0 while it serves as DO-loop iterator at %1" #~ msgstr "Tentative de modification de la variable %A %0 alors qu'il sert l'itration de la boucle DO %1" #~ msgid "Modification of DO-loop iterator `%A' at %0" #~ msgstr "Modification de l'itration de la boucle DO %A %0" #~ msgid "Attempt to modify variable `%A' via item #%B in list at %0 while it serves as implied-DO iterator at %1" #~ msgstr "Tentative de modification de la variable %A par le biais de l'item #%b dans la liste %0 alors qu'il sert l'itration implicite de la boucle DO %1" #~ msgid "Array has too many dimensions, as of dimension specifier at %0" #~ msgstr "Tableau trop de dimensions comme spcificateur de dimension %0" #~ msgid "Too many dimensions at %0" #~ msgstr "trop de dimensions %0" #~ msgid "Unsupported OPEN control item at %0 -- ACTION=, ASSOCIATEVARIABLE=, BLOCKSIZE=, BUFFERCOUNT=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, DISPOSE=, EXTENDSIZE=, INITIALSIZE=, KEY=, MAXREC=, NOSPANBLOCKS, ORGANIZATION=, PAD=, POSITION=, READONLY=, RECORDTYPE=, SHARED=, and USEROPEN= are not supported" #~ msgstr "Item de contrle OPEN non support %0 -- ACTION=, ASSOCIATEVARIABLE=, BLOCKSIZE=, BUFFERCOUNT=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, DISPOSE=, EXTENDSIZE=, INITIALSIZE=, KEY=, MAXREC=, NOSPANBLOCKS, ORGANIZATION=, PAD=, POSITION=, READONLY=, RECORDTYPE=, SHARED= et USEROPEN= ne sont pas supports" #~ msgid "Unsupported OPEN control item at %0" #~ msgstr "item de contrle OPEN non support %0" #~ msgid "Unsupported INQUIRE control item at %0 -- ACTION=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, KEYED=, ORGANIZATION=, PAD=, POSITION=, READ=, READWRITE=, RECORDTYPE=, and WRITE= are not supported" #~ msgstr "item de contrle INQUIRE non support %0 -- ACTION=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, KEYED=, ORGANIZATION=, PAD=, POSITION=, READ=, READWRITE=, RECORDTYPE= et WRITE= ne sont pas supports" #~ msgid "Unsupported INQUIRE control item at %0" #~ msgstr "item de contrle INQUIRE non support %0" #~ msgid "Unsupported READ control item at %0 -- ADVANCE=, EOR=, KEYEQ=, KEYGE=, KEYGT=, KEYID=, NULLS=, and SIZE= are not supported" #~ msgstr "item de contrle READ non support %0 -- ADVANCE=, EOR=, KEYEQ=, KEYGE=, KEYGT=, KEYID=, NULLS= et SIZE= ne sont pas supports" #~ msgid "Unsupported READ control item at %0" #~ msgstr "item de contrle READ non support %0" #~ msgid "Unsupported WRITE control item at %0 -- ADVANCE= and EOR= are not supported" #~ msgstr "item de contrle WRITE non support %0 -- ADVANCE= et EOR= ne sont pas supports" #~ msgid "Unsupported WRITE control item at %0" #~ msgstr "item de contrle WRITE non support %0" #~ msgid "Padding of %A %D required before `%B' in common block `%C' at %0 -- consider reordering members, largest-type-size first" #~ msgstr "Remplissage de %A %D requis avant %B dans le bloc commun %C %0 -- considrer reordonner les membres, celui de plus grande taille en premier" #~ msgid "Padding of %A %D required before `%B' in common block `%C' at %0" #~ msgstr "Remplissage de %A %D requis avant %B dans le bloc commun %C %0" #~ msgid "Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s) -- must all be identical-length CHARACTER or none be CHARACTER type" #~ msgstr "Type du point d'entre %0 de la fonction est en conflit avec le type de point d'entre prcdent de la fonction -- doit tre de longueur indentique ou zro pour un type caractre" #~ msgid "Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s)" #~ msgstr "type de point d'entr %0 la fonction est en conflit avec le type de point d'entre prcdent de la fonction" #~ msgid "Common block `%A' initialized at %0 already initialized at %1 -- only one program unit may specify initial values for a particular common block" #~ msgstr "bloc commun %A initialis %0 est dj initialis %1 -- une seule unit de programme peut spcifier les valeurs initiales pour un bloc commun particulier" #~ msgid "Common block `%A' initialized at %0 already initialized at %1" #~ msgstr "bloc commun %A initialis %0 est dj initialis %1" #~ msgid "Initial padding for common block `%A' is %B %C at %0 -- consider reordering members, largest-type-size first" #~ msgstr "remplissage initial pour le bloc commun %A est %B %C %0 -- considrer rordonner les membres, celui de plus grande taille en premier" #~ msgid "Initial padding for common block `%A' is %B %C at %0" #~ msgstr "remplissage initial pour le bloc commun %A est %B %C %0" #~ msgid "Initial padding for common block `%A' is %B %D at %0 but %C %E at %1 -- consider reordering members, largest-type-size first" #~ msgstr "remplissage initial pour le bloc commun %A est %B %D %0 mais %C %E %1 -- considrer rordonner les membres, ceux de plus grande taille en premier" #~ msgid "Initial padding for common block `%A' is %B %D at %0 but %C %E at %1" #~ msgstr "remplissage initial pour le bloc commun %A est %B %D %0 mais %C %E %1" #~ msgid "Common block `%A' is initialized to %B %D long at %0 but enlarged to %C %E at %1 -- use consistent definitions or reorder program units in source file" #~ msgstr "bloc commun %A initialis un longueur %B %D %0 mais augment %C %E %1 -- utiliser des dfinitions consistantes ou rordonner les units de programmes dans le fichier source" #~ msgid "Common block `%A' is initialized to %B %D long at %0 but enlarged to %C %E at %1" #~ msgstr "bloc commun %A initialis un longueur %B %D %0 mais augment %C %E %1" #~ msgid "DO-variable `%A' is type REAL or DOUBLE PRECISION at %0 -- unexpected behavior likely" #~ msgstr "variable DO %A est de type REEL ou DOUBLE PRECISION %0 -- comportement inattendue est prvoir" #~ msgid "DO-variable `%A' is type REAL or DOUBLE PRECISION at %0" #~ msgstr "variable DO %A est de type REEL ou DOUBLE PRECISION %0" #~ msgid "Invalid actual argument at %0 -- replace hollerith constants with %%REF('string') and typeless constants with INTEGER constant equivalents, or use -fugly-args or -fugly" #~ msgstr "argument actuel invalide %0 -- remplacer les constantes Hollerith avec %%REF('chane') et des constantes sans type avec des quivalents entiers ou utiliser -fugly-args ou -fugly" #~ msgid "Invalid actual argument at %0" #~ msgstr "argument actuel invalide %0" #~ msgid "Quadruple-precision floating-point unsupported -- treating constant at %0 as double-precision" #~ msgstr "virgule flottante en quadruple prcision non support -- tratement de la constante %0 en double prcision" #~ msgid "Quadruple-precision floating-point unsupported" #~ msgstr "virgule flottante en quadruple prcision non support" #~ msgid "Initialization of large (%B-unit) aggregate area `%A' at %0 currently very slow and takes lots of memory during g77 compile -- to be improved in 0.6" #~ msgstr "initialisation d'une large zone aggrgat (unit %B) %A %0 couramment lente et prenant beaucoup de mmoire durant la compilation g77 -- tre amlior dans 0.6" #~ msgid "This could take a while (initializing `%A' at %0)..." #~ msgstr "Cela pourrait prendre du temps (initialisation %A %0)..." #~ msgid "can't to open %s" #~ msgstr "ne peut ouvrir %s" #~ msgid "Set class path and suppress system path" #~ msgstr "Initialiser le chemin des classes et supprimer le chemin systmes" #~ msgid "" #~ msgstr "" #~ msgid "hard register `%s' listed as input operand to `asm'" #~ msgstr "registre matriel `%s' est list comme une oprande d'entre `asm'" #~ msgid "floating point trap outputting a constant" #~ msgstr "la trappe en virgule flottante produit une constante" #~ msgid "no file-scope type named `%D'" #~ msgstr "pas de type de porte de fichier nomm `%D'" #~ msgid "%T is not a class type" #~ msgstr " %T n'est pas un type de classe" #~ msgid "base clause without member specification for `%#T'" #~ msgstr "clause de base sans spcification de membre pour `%#T'" #~ msgid "non-`union' tag used in declaring `%#T'" #~ msgstr "tiquette non-`union' utilis dans la dclaration de `%#T'" #~ msgid "invalid use of %D" #~ msgstr "utilisation invalide de %D" #~ msgid "return value from function receives multiple initializations" #~ msgstr "valeur retourne de la fonction reoit de multiples initialisations" #~ msgid "Can't use '$' as a separator for inner classes" #~ msgstr "Ne peut utiliser '$' comme sparateur pour des classes internes" #~ msgid "-mlong32 and -mlong64 can not both be specified" #~ msgstr "-mlong32 et -mlong64 ne peuvent tre spcifis ensembles." #~ msgid "type with more precision than %s" #~ msgstr "type avec plus de precision que %s" #~ msgid "ANSI C forbids const or volatile function types" #~ msgstr "C ANSI interdit les types `const' ou de fonctions volatiles" #~ msgid "leaving more files than we entered" #~ msgstr "laissant plus de fichiers que nous en avons entre" #~ msgid "universal-character-name used for '%c'" #~ msgstr "nom-de-caractre-universel utilis pour `%c'" #~ msgid "unknown escape sequence: '\\' followed by char 0x%x" #~ msgstr "squence d'chappement inconnue: '\\' suivi du caractre 0x%x" #~ msgid "wrong type argument to %s" #~ msgstr "type d'argument erron pour %s" #~ msgid "deprecated initialization of zero-length array" #~ msgstr "initialisation obsolte d'un tableau de taille zro" #~ msgid "initialization of zero-length array before end of structure" #~ msgstr "initialisation d'un tableau de taille zro avant la fin de la structure" #~ msgid "initialization of zero-length array inside a nested context" #~ msgstr "initialisation d'un tableau de taille zro l'intrieur d'un contexte imbriqu" #~ msgid "Unable to find a temporary location for static chain register" #~ msgstr "Incapable de trouver une location temporaire pour un registre chan statique" #~ msgid "Internal gcc abort from %s:%d" #~ msgstr "Abandon interne gcc partir de %s:%d" #~ msgid "The local variable `insn' has the value:" #~ msgstr "La variable locale `insn' a la valeur:" #~ msgid "Register '%c' already specified in allocation order" #~ msgstr "Registre '%c' est dj spcifi dans l'ordre d'allocation" #~ msgid "Same as -mcpu=i386" #~ msgstr "Identique -mcpu=i386" #~ msgid "Same as -mcpu=i486" #~ msgstr "Identique -mcpu=i486" #~ msgid "Same as -mcpu=pentium" #~ msgstr "Identique -mcpu=pentium" #~ msgid "Same as -mcpu=pentiumpro" #~ msgstr "Identique -mcpu=pentiumpro" #~ msgid "Emit Intel syntax assembler opcodes" #~ msgstr "Produire les code-op pour la syntaxe d'assembleur Intel" #~ msgid "Control allocation order of integer registers" #~ msgstr "Contrle l'ordre d'allocation des registres entier" #~ msgid "The -mabi=32 support does not work yet." #~ msgstr "L'option -mabi=32 n'est pas fonctionnelle encore." #~ msgid "-mcpu=%s does not support -mips%d" #~ msgstr "-mcpu=%s ne supporte par -mips%d" #~ msgid "Use FUNCTION_EPILOGUE" #~ msgstr "Utiliser FUNCTION_EPILOGUE" #~ msgid "Do not use FUNCTION_EPILOGUE" #~ msgstr "Ne pas utiliser FUNCTION_EPILOGUE" #~ msgid "object size exceeds built-in limit for virtual function table implementation" #~ msgstr "taille des objets excde les limites internes pour la table implante de fonctions virtuelles" #~ msgid "object size exceeds normal limit for virtual function table implementation, recompile all source and use -fhuge-objects" #~ msgstr "taille des objets excde la limite normale pour la table implante de foncions virtuelles, recompiler tous les sources et utiliser -fhuge-objects" #~ msgid "the ABI requires vtable thunks" #~ msgstr "l'ABI requiert vtable thunks" #~ msgid "`__alignof__' applied to a bit-field" #~ msgstr "`__alignof__' appliqu un champ de bits" #~ msgid "Do not treat the namespace `std' as a normal namespace" #~ msgstr "Ne pas traiter l'espace nom `std' comme un espace nom normal" #~ msgid "taking dynamic typeid of object with -fno-rtti" #~ msgstr "prendre le typeid dynamique d'objet avec -fno-rtti" #~ msgid "recoverable compiler error, fixups for virtual function" #~ msgstr "erreur de recouvrement du compilateur, correctifs pour les fonctions virtuelles" #~ msgid "`com_interface' only supported with -fvtable-thunks" #~ msgstr "`com_interface' support seulement avec -fvtable-thunks" #~ msgid "\"defined\" operator appears during macro expansion" #~ msgstr "oprateur \"defined\" apparat durant l'expansion de macro" #~ msgid "-include and -imacros cannot be used with -fpreprocessed" #~ msgstr "-include et -imacros ne peuvent tre utiliss avec -fpreprocessed" #~ msgid "buffers still stacked in cpp_finish" #~ msgstr "tampons toujours empils dans cpp_finish" #~ msgid "# followed by integer" #~ msgstr "# suivi d'un entier" #~ msgid "attempt to push file buffer with contexts stacked" #~ msgstr "tentative d'empilage du tampon fichier dans un contexte de pile" #~ msgid "file \"%s\" left but not entered" #~ msgstr "fichier \"%s\" a t laiss mais n'a pas t entr" #~ msgid "expected to return to file \"%s\"" #~ msgstr "attendait retourner au fichier \"%s\"" #~ msgid "header flags for \"%s\" have changed" #~ msgstr "fanion d'en-tte de \"%s\" a chang" #~ msgid "file \"%s\" entered but not left" #~ msgstr "fichier \"%s\" entre mais non laiss" #~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d\n" #~ msgstr "NOTE_INSN_BASIC_BLOCK est manquant por le bloc %d\n" #~ msgid "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file\n" #~ msgstr "gcov [-b] [-v] [-n] [-l] [-f] [-o RP_OBJ] fichier\n" #~ msgid "Premature end of input file %s" #~ msgstr "Fin prmatur du fichier d'entre %s" #~ msgid "Make is_compiled_class return 1" #~ msgstr "Faire que is_compiled_class retourne 1" #~ msgid "Dump class files to .class" #~ msgstr "Vidanger les fichiers de classs dans .class" #~ msgid "input file is list of file names to compile" #~ msgstr "fichier d'entre est list dans les noms de fichiers compiler" #~ msgid "Generate code for Boehm GC" #~ msgstr "Gnrer le code pour Boehm GC" #~ msgid "Don't put synchronization structure in each object" #~ msgstr "Ne pas insrer de structure de synchronisation dans cahque objet" #~ msgid "Arc profiling: some edge counts were bad." #~ msgstr "profilage Arc: quelques compteurs de bordures taient errones." #~ msgid "`asm' cannot be used in function where memory usage is checked" #~ msgstr "`asm' ne peut tre utilis dans une fonction o l'usage de la mmoire est vrifi" #~ msgid "`asm' cannot be used with `-fcheck-memory-usage'" #~ msgstr "`asm' ne peut tre utilis `-fcheck-memory-usage'" #~ msgid "output operand constraint %d contains `+'" #~ msgstr "contrainte de sortie de l'oprande %d contient `+'" #~ msgid "\"%s\" and \"%s\" identical in first %d characters" #~ msgstr "\"%s\" et \"%s\" identique pour les premiers %d caractres" #~ msgid "Improve FP speed by violating ANSI & IEEE rules" #~ msgstr "Amliorer la vitesse FP en violant les rgles ANSI & IEEE" #~ msgid "Generate code to check every memory access" #~ msgstr "Gnrer du code pour vrifier chaque accs mmoire" #~ msgid "Add a prefix to all function names" #~ msgstr "Ajouter un prfixe tous les noms de fonctions" #~ msgid "Errors detected in input file (your bison.simple is out of date)\n" #~ msgstr "Erreurs dtectes dans le fichier d'entre (votre bison.simple est prim)\n" #~ msgid " -Wid-clash- Warn if 2 identifiers have the same first chars\n" #~ msgstr " -Wid-clash- avertir si 2 identificateurs one les mmes premiers de caractres\n" #~ msgid "Unrecognized option `%s'" #~ msgstr "Option non reconnue `%s'" #~ msgid "`-a' option (basic block profile) not supported" #~ msgstr "`-a' option (profile de blocs de base) non support" #~ msgid "`-ax' option (jump profiling) not supported" #~ msgstr "`-ax' option (profilage des sauts) non support" #~ msgid "`-ax' and `-a' are conflicting options. `-a' ignored." #~ msgstr "`-ax' et `-a' sont des options conflictuelles. `-a' ignor." #~ msgid "Data size %ld.\n" #~ msgstr "Taille des donnes %ld.\n" #~ msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n" #~ msgstr "Copyright 2001 Free Software Foundation, Inc.\n" #~ msgid "Name `%s' contains quotes" #~ msgstr "Nom %s contient des guillemets" #~ msgid "invalid string `%s' in define_query_cpu_unit" #~ msgstr "chane invalide %s dans define_query_cpu_unit" #~ msgid "invalid first string `%s' in presence_set" #~ msgstr "premire chane invalide %s dans presence_set" #~ msgid "invalid first string `%s' in absence_set" #~ msgstr "premire chane invalide %s dans absence_set" #~ msgid "invalid second string `%s' in absence_set" #~ msgstr "seconde chane invalide %s dans absence_set" #~ msgid "invalid string `%s' in define_automaton" #~ msgstr "chane invalide %s dans define_automaton" #~ msgid "garbage after ) in reservation `%s'" #~ msgstr "rebut aprs ) dans la rservation %s " #~ msgid "repetition `%s' <= 1 in reservation `%s'" #~ msgstr "rptition %s <= 1 dans la rservation %s " #~ msgid "`%s' in exclusion is not unit" #~ msgstr " %s dans l'exclusion n'est pas une unit" #~ msgid "units `%s' and `%s' in exclusion set belong to different automata" #~ msgstr "units %s et %s dans l'ensemble d'exclusions appartient un automate diffrent" #~ msgid "unit `%s' excludes and requires presence of `%s'" #~ msgstr "unit %s exclue et requiert la prsence de %s " #~ msgid "unit `%s' requires absence and presence of `%s'" #~ msgstr "unit %s exclue et requiert l'absence ou la prsence de %s " #~ msgid "define_insn_reservation `%s' has negative latency time" #~ msgstr "define_insn_reservation %s a un temps de latence ngatif" #~ msgid "define_bypass `%s - %s' has negative latency time" #~ msgstr "define_bypass %s - %s a un temps de latence ngatif" #~ msgid "define_unit `%s' without automaton when one defined" #~ msgstr "define_unit %s sans automate alors qu'il y en a un dfini" #~ msgid "Units `%s' and `%s' should be in the same automaton" #~ msgstr "Units %s et %s devraient tre dans le mme automate" #~ msgid "Automaton `%s': Insn `%s' will never be issued" #~ msgstr "Automate %s : Insn %s ne sera jamais mis" #~ msgid "Insn `%s' will never be issued" #~ msgstr "Insn %s ne sera jamais mis" #~ msgid "Profile does not match flowgraph of function %s (out of date?)" #~ msgstr "Profil ne concorde pas le graphe de flux de la fonction %s (prim?)" #~ msgid "The slope of the linear function throttling inlining after the recursive inlining limit has been reached is given by the negative reciprocal value of this parameter" #~ msgstr "La pente de la fonction linaire d'trnaglement d'enlignage aprs avoir atteint rcursivement la limite d'enlignage rcursif est obtenue par la valeur ngative rciproque de ce paramtre" #~ msgid "push %s level %p line %d\n" #~ msgstr "empiler %s niveau %p ligne %d\n" #~ msgid "pop %s level %p line %d\n" #~ msgstr "dpiler %s niveau %p ligne %d\n" #~ msgid "suspend %s level %p line %d\n" #~ msgstr "suspendre %s niveau %p ligne %d\n" #~ msgid "resume %s level %p line %d\n" #~ msgstr "complter %s niveau %p ligne %d\n" #~ msgid "\\x%x" #~ msgstr "\\x%x" #~ msgid "invalid use of template `%D'" #~ msgstr "utilisation invalide du canevas %D " #~ msgid "qualified name does not name a class" #~ msgstr "nom qualifi ne nomme pas une classe" #~ msgid "assignment to non-static member `%D' of enclosing class `%T'" #~ msgstr "affectation un membre non statique %D de la classe %T entoure" #~ msgid "ISO C++ does not permit named return values" #~ msgstr "ISO C++ ne permet pas les valeurs retournes nommes" #~ msgid "exception handler inside code that is being protected" #~ msgstr "traitement d'exception l'intrieur du code qui est protg" #~ msgid "(debug) trace parsing process" #~ msgstr "(dbug) tracer le traitement de l'analyse" #~ msgid "(debug) trace lexical analysis" #~ msgstr "(dbug) trace l'analyse lexicale" nescc-1.3.4/libcpp/po/ja.po000066400000000000000000013051251177770303300154520ustar00rootroot00000000000000# Japanese messages for gcc 3.0 # Copyright (C) 2001 Free Software Foundation, Inc. # Daisuke Yamashita , 1999-2001 # Masahito Yamaga , 1999. # IIDA Yosiaki , 1999. # msgid "" msgstr "" "Project-Id-Version: gcc 3.0\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2007-11-08 21:08+0000\n" "PO-Revision-Date: 2001-12-05 22:47+0900\n" "Last-Translator: Daisuke Yamashita \n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=EUC-JP\n" "Content-Transfer-Encoding: 8bit\n" #: charset.c:654 #, fuzzy, c-format msgid "conversion from %s to %s not supported by iconv" msgstr "NaN ̵ؤѴǤ" #: charset.c:657 msgid "iconv_open" msgstr "" #: charset.c:665 #, c-format msgid "no iconv implementation, cannot convert from %s to %s" msgstr "" #: charset.c:742 #, fuzzy, c-format msgid "character 0x%lx is not in the basic source character set\n" msgstr "universal-character-name `%c' ؼޤŪʸΰǤ" #: charset.c:759 charset.c:1352 msgid "converting to execution character set" msgstr "" #: charset.c:765 #, c-format msgid "character 0x%lx is not unibyte in execution character set" msgstr "" #: charset.c:889 #, c-format msgid "Character %x might not be NFKC" msgstr "" #: charset.c:949 #, fuzzy msgid "universal character names are only valid in C++ and C99" msgstr "˥Сʸ̾ `\\U%08x' ϼ̻ҤǤͭǤϤޤ" #: charset.c:952 #, fuzzy, c-format msgid "the meaning of '\\%c' is different in traditional C" msgstr "'\\%c' ΰ̣ -traditional ĤȰۤʤޤ" #: charset.c:961 msgid "In _cpp_valid_ucn but not a UCN" msgstr "" #: charset.c:986 #, fuzzy, c-format msgid "incomplete universal character name %.*s" msgstr "̵ ˥Сʸ̾" #: charset.c:998 #, fuzzy, c-format msgid "%.*s is not a valid universal character" msgstr "Ŭڤʥ˥С륭饯̾" #: charset.c:1008 lex.c:484 msgid "'$' in identifier or number" msgstr "" #: charset.c:1018 #, fuzzy, c-format msgid "universal character %.*s is not valid in an identifier" msgstr "˥Сʸ̾ `\\U%08x' ϼ̻ҤǤͭǤϤޤ" #: charset.c:1022 #, fuzzy, c-format msgid "universal character %.*s is not valid at the start of an identifier" msgstr "˥Сʸ̾ `\\U%08x' ϼ̻ҤǤͭǤϤޤ" #: charset.c:1056 charset.c:1571 msgid "converting UCN to source character set" msgstr "" #: charset.c:1060 msgid "converting UCN to execution character set" msgstr "" #: charset.c:1132 #, fuzzy msgid "the meaning of '\\x' is different in traditional C" msgstr "`\\x' ΰ̣ -traditional ĤȰۤʤޤ" #: charset.c:1149 msgid "\\x used with no following hex digits" msgstr "\\x ˡ³Ϥ 16 ʿޤ" #: charset.c:1156 msgid "hex escape sequence out of range" msgstr "16 ʥץ󥹤ϰϳǤ" #: charset.c:1195 msgid "octal escape sequence out of range" msgstr "8 ʥץ󥹤ϰϳǤ" #: charset.c:1263 #, fuzzy msgid "the meaning of '\\a' is different in traditional C" msgstr "'\\a' ΰ̣ -traditional ĤȰۤʤޤ" #: charset.c:1270 #, c-format msgid "non-ISO-standard escape sequence, '\\%c'" msgstr " ISO ɸΥץ, '\\%c'" #: charset.c:1278 #, c-format msgid "unknown escape sequence '\\%c'" msgstr "ʥץ '\\%c'" #: charset.c:1286 #, fuzzy, c-format msgid "unknown escape sequence: '\\%s'" msgstr "ʥץ '\\%c'" #: charset.c:1293 #, fuzzy msgid "converting escape sequence to execution character set" msgstr "ʸФ륨ץ󥹤ϰϤ򳰤Ƥޤ" #: charset.c:1415 charset.c:1478 #, fuzzy msgid "character constant too long for its type" msgstr "ʸĹޤ" #: charset.c:1418 msgid "multi-character character constant" msgstr "ʣʸʤʸ" #: charset.c:1510 msgid "empty character constant" msgstr "ʸ" #: charset.c:1612 #, c-format msgid "failure to convert %s to %s" msgstr "" #: directives.c:215 directives.c:241 #, c-format msgid "extra tokens at end of #%s directive" msgstr ";ʬʥȡ #%s ǥ쥯ƥ֤νˤޤ" #: directives.c:344 #, c-format msgid "#%s is a GCC extension" msgstr "#%s GCC γĥǤ" #: directives.c:356 msgid "suggest not using #elif in traditional C" msgstr "Ť C Ǥ #elif ȤʤǤ" #: directives.c:359 #, c-format msgid "traditional C ignores #%s with the # indented" msgstr "Ť C ǤϡǥȤ줿 # #%s ̵뤷ޤ" #: directives.c:363 #, c-format msgid "suggest hiding #%s from traditional C with an indented #" msgstr "ǥȤ줿 # Ť C #%s 򱣤Ȥ򤪴ᤷޤ" #: directives.c:389 msgid "embedding a directive within macro arguments is not portable" msgstr "" #: directives.c:409 #, fuzzy msgid "style of line directive is a GCC extension" msgstr "#%s GCC γĥǤ" #: directives.c:464 #, c-format msgid "invalid preprocessing directive #%s" msgstr "̵ʥץץǥ쥯ƥ #%s" #: directives.c:532 msgid "\"defined\" cannot be used as a macro name" msgstr "\"defined\" ޥ̾ȤƤϻȤޤ" #: directives.c:538 #, c-format msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "\"%s\" C++ α黻ҤǤꡢޥ̾ȤƻѤ뤳ȤϤǤޤ" #: directives.c:541 #, c-format msgid "no macro name given in #%s directive" msgstr "ޥ̾ #%s ǥ쥯ƥͿƤޤ" #: directives.c:544 msgid "macro names must be identifiers" msgstr "ޥ̾ϼ̻ҤǤʤƤϤʤޤ" #: directives.c:585 #, c-format msgid "undefining \"%s\"" msgstr "\"%s\" undef ޤ" #: directives.c:640 msgid "missing terminating > character" msgstr "üʸ > 礤Ƥޤ" #: directives.c:695 #, c-format msgid "#%s expects \"FILENAME\" or " msgstr "#%s \"ե̾\" 뤤 <ե̾> ɬפȤޤ" #: directives.c:739 #, fuzzy, c-format msgid "empty filename in #%s" msgstr "#%s ǤΥե̾Ǥ" #: directives.c:749 msgid "#include nested too deeply" msgstr "#include ΥͥȤޤ" #: directives.c:790 msgid "#include_next in primary source file" msgstr "#include_next 礿륽եˤޤ" #: directives.c:816 #, c-format msgid "invalid flag \"%s\" in line directive" msgstr "\"%s\" line ǥ쥯ƥ֤Ǥ̵ʥե饰Ǥ" #: directives.c:868 #, c-format msgid "\"%s\" after #line is not a positive integer" msgstr "#line θ \"%s\" ǤϤޤ" #: directives.c:874 msgid "line number out of range" msgstr "ֹ椬ϰϳǤ" #: directives.c:887 directives.c:964 #, c-format msgid "\"%s\" is not a valid filename" msgstr "\"%s\" ʥե̾ǤϤޤ" #: directives.c:924 #, fuzzy, c-format msgid "\"%s\" after # is not a positive integer" msgstr "#line θ \"%s\" ǤϤޤ" #: directives.c:1026 #, fuzzy, c-format msgid "invalid #%s directive" msgstr "̤ # ǥ쥯ƥ֤Ǥ" #: directives.c:1089 #, c-format msgid "registering pragmas in namespace \"%s\" with mismatched name expansion" msgstr "" #: directives.c:1098 #, c-format msgid "registering pragma \"%s\" with name expansion and no namespace" msgstr "" #: directives.c:1116 #, c-format msgid "registering \"%s\" as both a pragma and a pragma namespace" msgstr "" #: directives.c:1119 #, fuzzy, c-format msgid "#pragma %s %s is already registered" msgstr "饹 `%s' ϴ¸ߤޤ" #: directives.c:1122 #, c-format msgid "#pragma %s is already registered" msgstr "" #: directives.c:1152 msgid "registering pragma with NULL handler" msgstr "" #: directives.c:1362 msgid "#pragma once in main file" msgstr "#pragma once ᥤեˤޤ" #: directives.c:1385 msgid "invalid #pragma GCC poison directive" msgstr "#pragma GCC ǥ쥯ƥ̵Ǥ" #: directives.c:1394 #, c-format msgid "poisoning existing macro \"%s\"" msgstr "¸Υޥ \"%s' ޤ" #: directives.c:1413 msgid "#pragma system_header ignored outside include file" msgstr "include ե볰 #pragma system_header ̵뤵ޤ" #: directives.c:1437 #, fuzzy, c-format msgid "cannot find source file %s" msgstr " %s Ĥޤ" #: directives.c:1441 #, c-format msgid "current file is older than %s" msgstr "ߤΥե %s ŤǤ" #: directives.c:1620 msgid "_Pragma takes a parenthesized string literal" msgstr "_Pramga ̤ǰϤޤ줿ʸƥޤ" #: directives.c:1693 msgid "#else without #if" msgstr "#else #if ޤ" #: directives.c:1698 msgid "#else after #else" msgstr "#else #else θˤޤ" #: directives.c:1700 directives.c:1733 msgid "the conditional began here" msgstr "ξϤϤޤޤ" #: directives.c:1726 msgid "#elif without #if" msgstr "#elif #if ޤ" #: directives.c:1731 msgid "#elif after #else" msgstr "#elif #else θˤޤ" #: directives.c:1761 msgid "#endif without #if" msgstr "#endif #if ޤ" #: directives.c:1838 msgid "missing '(' after predicate" msgstr "Ҹθ '(' 礤Ƥޤ" #: directives.c:1853 msgid "missing ')' to complete answer" msgstr "䴰 ')' 礤Ƥޤ" #: directives.c:1873 msgid "predicate's answer is empty" msgstr "Ҹβ򤬶Ǥ" #: directives.c:1900 msgid "assertion without predicate" msgstr "ҸΤʤǤ" #: directives.c:1902 msgid "predicate must be an identifier" msgstr "Ҹϼ̻ҤǤʤФʤޤ" #: directives.c:1988 #, c-format msgid "\"%s\" re-asserted" msgstr "\"%s\" ƥȤޤ" #: directives.c:2271 #, c-format msgid "unterminated #%s" msgstr "üΤʤ #%s" #: directives-only.c:221 lex.c:1016 traditional.c:162 msgid "unterminated comment" msgstr "üƤʤ" #: errors.c:118 msgid "warning: " msgstr "ٹ: " #: errors.c:120 msgid "internal error: " msgstr "顼: " #: errors.c:122 #, fuzzy msgid "error: " msgstr "顼: " #: errors.c:186 #, fuzzy msgid "stdout" msgstr "¤" #: errors.c:188 #, c-format msgid "%s: %s" msgstr "%s: %s" #: expr.c:261 #, fuzzy msgid "too many decimal points in number" msgstr "`asm' إɤ¿ޤ" #: expr.c:290 expr.c:365 msgid "fixed-point constants are a GCC extension" msgstr "" #: expr.c:303 #, fuzzy, c-format msgid "invalid digit \"%c\" in binary constant" msgstr " '%.*s' ˤ̵Ǥ" #: expr.c:305 #, fuzzy, c-format msgid "invalid digit \"%c\" in octal constant" msgstr "̵ʶ `%c' ˤޤ" #: expr.c:313 #, fuzzy msgid "invalid prefix \"0b\" for floating constant" msgstr " '%.*s' ˤ̵Ǥ" #: expr.c:319 #, fuzzy msgid "use of C99 hexadecimal floating constant" msgstr "16 ư٤ޤ" #: expr.c:328 #, fuzzy msgid "exponent has no digits" msgstr "ưΤ٤ӥäƤޤ" #: expr.c:335 #, fuzzy msgid "hexadecimal floating constants require an exponent" msgstr "16 ư٤ޤ" #: expr.c:341 #, fuzzy, c-format msgid "invalid suffix \"%.*s\" on floating constant" msgstr " '%.*s' ˤ̵Ǥ" #: expr.c:351 expr.c:393 #, fuzzy, c-format msgid "traditional C rejects the \"%.*s\" suffix" msgstr "Ť C Ǥ 'f' ݤޤ" #: expr.c:358 #, fuzzy, c-format msgid "invalid suffix \"%.*s\" with hexadecimal floating constant" msgstr " '%.*s' ˤ̵Ǥ" #: expr.c:369 #, fuzzy msgid "decimal float constants are a GCC extension" msgstr "16 ư٤ޤ" #: expr.c:379 #, fuzzy, c-format msgid "invalid suffix \"%.*s\" on integer constant" msgstr " '%.*s' ˤ̵Ǥ" #: expr.c:401 #, fuzzy msgid "use of C99 long long integer constant" msgstr "ISO C89 Ǥ long long ؤޤ" #: expr.c:409 #, fuzzy msgid "imaginary constants are a GCC extension" msgstr "#if ǤʸȤޤ" #: expr.c:412 #, fuzzy msgid "binary constants are a GCC extension" msgstr "#%s GCC γĥǤ" #: expr.c:505 #, fuzzy msgid "integer constant is too large for its type" msgstr "礭Τ unsigned ˤʤޤ" #: expr.c:517 msgid "integer constant is so large that it is unsigned" msgstr "礭Τ unsigned ˤʤޤ" #: expr.c:612 msgid "missing ')' after \"defined\"" msgstr "\"defined\" θ ')' 礱Ƥޤ" #: expr.c:619 msgid "operator \"defined\" requires an identifier" msgstr "\"defined\" 黻Ҥϼ̻Ҥ׵ᤷޤ" #: expr.c:627 #, c-format msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "C++ Ǥ \"%s\" \"%s\" إȡǤ" #: expr.c:637 msgid "this use of \"defined\" may not be portable" msgstr "" #: expr.c:676 #, fuzzy msgid "floating constant in preprocessor expression" msgstr "ץץåǥСեޤ" #: expr.c:682 #, fuzzy msgid "imaginary number in preprocessor expression" msgstr "ץץåǥСեޤ" #: expr.c:727 #, c-format msgid "\"%s\" is not defined" msgstr "\"%s\" Ƥޤ" #: expr.c:855 expr.c:884 #, c-format msgid "missing binary operator before token \"%s\"" msgstr "" #: expr.c:875 #, fuzzy, c-format msgid "token \"%s\" is not valid in preprocessor expressions" msgstr "ץץåǥСեޤ" #: expr.c:892 msgid "missing expression between '(' and ')'" msgstr "" #: expr.c:895 #, fuzzy msgid "#if with no expression" msgstr " throw 줿" #: expr.c:898 #, fuzzy, c-format msgid "operator '%s' has no right operand" msgstr "ȿ `%s' Ǥ" #: expr.c:903 #, fuzzy, c-format msgid "operator '%s' has no left operand" msgstr " `%s' ԴǤ" #: expr.c:929 msgid " ':' without preceding '?'" msgstr "" #: expr.c:956 #, fuzzy msgid "unbalanced stack in #if" msgstr "бƤʤ #endif" #: expr.c:975 #, fuzzy, c-format msgid "impossible operator '%u'" msgstr "ꤨʤ黻 '%s'" #: expr.c:1065 #, fuzzy msgid "missing ')' in expression" msgstr "礱Ƥ뤫̵Ǥ" #: expr.c:1086 msgid "'?' without following ':'" msgstr "" #: expr.c:1096 msgid "integer overflow in preprocessor expression" msgstr "ץץåǥСեޤ" #: expr.c:1101 #, fuzzy msgid "missing '(' in expression" msgstr "礱Ƥ뤫̵Ǥ" #: expr.c:1133 #, c-format msgid "the left operand of \"%s\" changes sign when promoted" msgstr "" #: expr.c:1138 #, c-format msgid "the right operand of \"%s\" changes sign when promoted" msgstr "" #: expr.c:1397 msgid "traditional C rejects the unary plus operator" msgstr "Ť C Ǥñץ饹黻Ҥݤޤ" #: expr.c:1480 msgid "comma operator in operand of #if" msgstr "ޱ黻Ҥ #if 黻Ҥˤޤ" #: expr.c:1612 msgid "division by zero in #if" msgstr "#if ǥȯޤ" #: files.c:442 msgid "NULL directory in find_file" msgstr "" #: files.c:480 msgid "one or more PCH files were found, but they were invalid" msgstr "" #: files.c:483 msgid "use -Winvalid-pch for more information" msgstr "" #: files.c:570 #, c-format msgid "%s is a block device" msgstr "%s ϥ֥åǥХǤ" #: files.c:587 #, c-format msgid "%s is too large" msgstr "%s 礭ޤ" #: files.c:622 #, c-format msgid "%s is shorter than expected" msgstr "%s ûǤ" #: files.c:852 #, fuzzy, c-format msgid "no include path in which to search for %s" msgstr "%s 򸫤Ĥ뤿Υ󥯥롼ɥѥޤ" #: files.c:1157 msgid "Multiple include guards may be useful for:\n" msgstr "¿ include ݸͭפȤʤǤ礦:\n" #: init.c:426 #, fuzzy msgid "cppchar_t must be an unsigned type" msgstr "Ҹϼ̻ҤǤʤФʤޤ" #: init.c:430 #, c-format msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits" msgstr "" #: init.c:437 msgid "CPP arithmetic must be at least as precise as a target int" msgstr "" #: init.c:440 msgid "target char is less than 8 bits wide" msgstr "" #: init.c:444 msgid "target wchar_t is narrower than target char" msgstr "" #: init.c:448 msgid "target int is narrower than target char" msgstr "" #: init.c:453 msgid "CPP half-integer narrower than CPP character" msgstr "" #: init.c:457 #, c-format msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits" msgstr "" #: lex.c:283 msgid "backslash and newline separated by space" msgstr "ХååȲԤʬ䤵ޤ" #: lex.c:288 msgid "backslash-newline at end of file" msgstr "եν˥Хåå-Ԥޤ" #: lex.c:303 #, c-format msgid "trigraph ??%c converted to %c" msgstr "ȥ饤 ??%c %c Ѵޤ" #: lex.c:310 #, fuzzy, c-format msgid "trigraph ??%c ignored, use -trigraphs to enable" msgstr "ȥ饤 ??%c ̵뤵ޤ" #: lex.c:356 msgid "\"/*\" within comment" msgstr " \"/*\" ޤ" #: lex.c:414 #, c-format msgid "%s in preprocessing directive" msgstr "ץץ̿ %s ޤ" #: lex.c:423 msgid "null character(s) ignored" msgstr "null ʸ̵뤵ޤ" #: lex.c:460 #, fuzzy, c-format msgid "`%.*s' is not in NFKC" msgstr "\"%s\" Ƥޤ" #: lex.c:463 #, fuzzy, c-format msgid "`%.*s' is not in NFC" msgstr "\"%s\" Ƥޤ" #: lex.c:551 #, c-format msgid "attempt to use poisoned \"%s\"" msgstr "줿 '%s' ȤȤƤޤ" #: lex.c:559 msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "__VA_ARGS__ C99 ѰޥĥǤΤ߽иǤޤ" #: lex.c:659 msgid "null character(s) preserved in literal" msgstr "ƥ null ʸݤޤ" #: lex.c:662 #, c-format msgid "missing terminating %c character" msgstr "%c ʸǤνü礤Ƥޤ" #: lex.c:1027 #, fuzzy msgid "C++ style comments are not allowed in ISO C90" msgstr "C++ ΥȤ ISO C89 Ǥϵޤ" #: lex.c:1029 msgid "(this will be reported only once per input file)" msgstr "(ϥեˤĤ𤵤ޤ)" #: lex.c:1034 msgid "multi-line comment" msgstr "ʣԤΥ" #: lex.c:1347 #, fuzzy, c-format msgid "unspellable token %s" msgstr "֤ʤȡ %s Ǥ" #: line-map.c:320 #, c-format msgid "In file included from %s:%u" msgstr "%s:%u include 줿ե" #: line-map.c:338 #, c-format msgid "" ",\n" " from %s:%u" msgstr "" ",\n" " %s:%u " #: macro.c:84 #, fuzzy, c-format msgid "macro \"%s\" is not used" msgstr "\"%s\" Ƥޤ" #: macro.c:123 macro.c:319 #, fuzzy, c-format msgid "invalid built-in macro \"%s\"" msgstr "Ȥ߹ߥޥ \"%s\" ̵Ǥ" #: macro.c:157 #, fuzzy msgid "could not determine file timestamp" msgstr "ץե %s 򳫤ޤǤ" #: macro.c:254 #, fuzzy msgid "could not determine date and time" msgstr "¸طפΤΥå̾ǤޤǤ" #: macro.c:270 msgid "__COUNTER__ expanded inside directive with -fdirectives-only" msgstr "" #: macro.c:423 msgid "invalid string literal, ignoring final '\\'" msgstr "ʸƥ뤬̵ǤǸ '\\' ̵뤷ޤ" #: macro.c:483 #, c-format msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "\"%s\" \"%s\" ŽդޤʥץץåȡȤʤޤ" #: macro.c:558 msgid "ISO C99 requires rest arguments to be used" msgstr "ISO C99 ϻѤ٤ĤΤΰ׵ᤷޤ" #: macro.c:563 #, c-format msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "ޥ \"%s\" ϰ %u ׵ᤷޤ%u ĤͿƤޤ" #: macro.c:568 #, c-format msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "ޥ \"%s\" ˰ %u Ϥޤ%u ޤ" #: macro.c:679 traditional.c:680 #, c-format msgid "unterminated argument list invoking macro \"%s\"" msgstr "üƤʤꥹȤޥ \"%s\" ư褦Ȥޤ" #: macro.c:782 #, c-format msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "Ť C ǤϡؿŪޥ \"%s\" ˰ͿͤФʤޤ" #: macro.c:1325 #, c-format msgid "duplicate macro parameter \"%s\"" msgstr "ޥ \"%s\" ʣƤޤ" #: macro.c:1371 #, c-format msgid "\"%s\" may not appear in macro parameter list" msgstr "\"%s\" ϥޥꥹȤ˸ƤϤʤޤ" #: macro.c:1379 msgid "macro parameters must be comma-separated" msgstr "ޥϥ޶ڤꤵʤФʤޤ" #: macro.c:1396 msgid "parameter name missing" msgstr "̾礤Ƥޤ" #: macro.c:1413 msgid "anonymous variadic macros were introduced in C99" msgstr "̵̾Ѱޥ C99 ǺΤޤ" #: macro.c:1418 msgid "ISO C does not permit named variadic macros" msgstr "ISO C Ǥ̾ĤѰޥޤ" #: macro.c:1427 msgid "missing ')' in macro parameter list" msgstr "ޥꥹȤǡ')' 礤Ƥޤ" #: macro.c:1476 msgid "'##' cannot appear at either end of a macro expansion" msgstr "'##' ϥޥŸξüˤϽиǤޤ" #: macro.c:1510 #, fuzzy msgid "ISO C99 requires whitespace after the macro name" msgstr "ISO C Ǥϥޥ̾θ˶׵ᤷޤ" #: macro.c:1534 #, fuzzy msgid "missing whitespace after the macro name" msgstr "ISO C Ǥϥޥ̾θ˶׵ᤷޤ" #: macro.c:1564 msgid "'#' is not followed by a macro parameter" msgstr "'#' ˥ޥ̾³Ƥޤ" #: macro.c:1683 #, c-format msgid "\"%s\" redefined" msgstr "\"%s\" ޤ" #: macro.c:1688 msgid "this is the location of the previous definition" msgstr "֤Ǥ" #: macro.c:1738 #, fuzzy, c-format msgid "macro argument \"%s\" would be stringified in traditional C" msgstr "ޥ \"%s\" -traditional Ĥʸ󲽤줿Ǥ礦" #: macro.c:1761 #, fuzzy, c-format msgid "invalid hash type %d in cpp_macro_definition" msgstr "dump_definition ̵ʥϥå奿 %d" #: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377 msgid "while writing precompiled header" msgstr "" #: pch.c:485 #, fuzzy, c-format msgid "%s: not used because `%.*s' not defined" msgstr "٥ `%s' ȤޤƤޤ" #: pch.c:497 #, c-format msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'" msgstr "" #: pch.c:538 #, fuzzy, c-format msgid "%s: not used because `%s' is defined" msgstr "`%s' Ȥޤ̤Ǥ" #: pch.c:558 #, c-format msgid "%s: not used because `__COUNTER__' is invalid" msgstr "" #: pch.c:567 pch.c:737 msgid "while reading precompiled header" msgstr "" #: traditional.c:750 #, fuzzy, c-format msgid "detected recursion whilst expanding macro \"%s\"" msgstr "üƤʤꥹȤޥ \"%s\" ư褦Ȥޤ" #: traditional.c:917 #, fuzzy msgid "syntax error in macro parameter list" msgstr "\"%s\" ϥޥꥹȤ˸ƤϤʤޤ" #~ msgid "offset outside bounds of constant string" #~ msgstr "եåȤʸζγˤޤ" #~ msgid "__builtin_saveregs not supported by this target" #~ msgstr "__builtin_saveregs ϤΥåȤǤϼƤޤ" #~ msgid "argument of `__builtin_args_info' must be constant" #~ msgstr "`__builtin_args_info' ΰǤʤФʤޤ" #~ msgid "argument of `__builtin_args_info' out of range" #~ msgstr "`__builtin_args_info' ΰϰϳǤ" #~ msgid "missing argument in `__builtin_args_info'" #~ msgstr "`__builtin_args_info' ˰ޤ" #~ msgid "`va_start' used in function with fixed args" #~ msgstr "`va_start' İδؿǻȤޤ" #~ msgid "second parameter of `va_start' not last named argument" #~ msgstr "`va_start' ܤͤκǸ̾ˤʤäƤޤ" #~ msgid "`__builtin_next_arg' called without an argument" #~ msgstr "`__builtin_next_arg' ̵ǤǸƤӽФޤ" #~ msgid "too many arguments to function `va_start'" #~ msgstr "`va_start' Ф¿ޤ" #~ msgid "first argument to `va_arg' not of type `va_list'" #~ msgstr "`va_arg' Ф `va_list' ǤϤޤ" #~ msgid "`%s' is promoted to `%s' when passed through `...'" #~ msgstr "`%s' `...' νβ `%s' ˳ʾ夲ޤ" #~ msgid "(so you should pass `%s' not `%s' to `va_arg')" #~ msgstr "(äơ`va_arg' ˤ `%s' (`%s' Ǥʤ)ϤʤФʤޤ)" #~ msgid "invalid arg to `__builtin_frame_address'" #~ msgstr "`__builtin_frame_address' ؤΰŬڤǤ" #~ msgid "invalid arg to `__builtin_return_address'" #~ msgstr "`__builtin_return_address' ؤΰŬڤǤ" #~ msgid "unsupported arg to `__builtin_frame_address'" #~ msgstr "ݡȤƤʤ `__builtin_frame_address' ؤΰǤ" #~ msgid "unsupported arg to `__builtin_return_address'" #~ msgstr "ݡȤƤʤ `__builtin_return_address' ذǤ" #~ msgid "second arg to `__builtin_expect' must be a constant" #~ msgstr "`__builtin_expect' ؤǤʤФʤޤ" #~ msgid "__builtin_longjmp second argument must be 1" #~ msgstr "__builtin_longjmp 1 ǤʤФʤޤ" #~ msgid "__builtin_trap not supported by this target" #~ msgstr "__builtin_trap ΥåȤǤϼƤޤ" #~ msgid "built-in function `%s' not currently supported" #~ msgstr "Ȥ߹ߴؿ `%s' ϸߥݡȤƤޤ" #~ msgid "string length `%d' is greater than the length `%d' ISO C%d compilers are required to support" #~ msgstr "ʸĹ `%d' ϡĹ `%d' (ISO C%d ѥΥݡ׷)礭ʤäƤޤ" #~ msgid "`%s' attribute directive ignored" #~ msgstr "`%s' °ε̿᤬̵뤵ޤ" #~ msgid "`%s' attribute does not apply to types" #~ msgstr "`%s' °ϷˤŬѤޤ" #~ msgid "wrong number of arguments specified for `%s' attribute" #~ msgstr "`%s' °˻ꤵ줿θĿְäƤޤ" #~ msgid "`%s' attribute ignored" #~ msgstr "`%s' °̵뤵ޤ" #~ msgid "unknown machine mode `%s'" #~ msgstr "ʥޥ⡼ `%s'" #~ msgid "no data type for mode `%s'" #~ msgstr "⡼ `%s' Фǡޤ" #~ msgid "type with more precision than %s" #~ msgstr "%s ̩ʷ" #~ msgid "section attribute cannot be specified for local variables" #~ msgstr "section °ϥѿФƤϻǤޤ" #~ msgid "section of `%s' conflicts with previous declaration" #~ msgstr "`%s' ΥǤ줿ΤȾͤޤ" #~ msgid "section attribute not allowed for `%s'" #~ msgstr "° `%s' ˤϻȤޤ" #~ msgid "section attributes are not supported for this target" #~ msgstr "°ϤΥåȤǤϼƤޤ" #~ msgid "requested alignment is not a constant" #~ msgstr "׵ᤵ줿饤ȤǤϤޤ" #~ msgid "requested alignment is not a power of 2" #~ msgstr "׵ᤵ줿饤Ȥ 2 Τ٤ǤϤޤ" #~ msgid "requested alignment is too large" #~ msgstr "׵ᤵ줿饤Ȥ礭ޤ" #~ msgid "alignment may not be specified for `%s'" #~ msgstr "`%s' ФƤΥ饤ȤϻǤޤ" #~ msgid "`%s' defined both normally and as an alias" #~ msgstr "`%s' ̾ΤΤȥꥢȤξޤ" #~ msgid "alias arg not a string" #~ msgstr "alias ʸǤϤʤ" #~ msgid "`%s' attribute applies only to functions" #~ msgstr "`%s' °ϴؿФƤΤŬѤޤ" #~ msgid "can't set `%s' attribute after definition" #~ msgstr "θ `%s' °򥻥åȤ뤳ȤϤǤޤ" #~ msgid "overflow in constant expression" #~ msgstr "Сեޤ" #~ msgid "integer overflow in expression" #~ msgstr "Сեޤ" #~ msgid "floating point overflow in expression" #~ msgstr "ưСեޤ" #~ msgid "large integer implicitly truncated to unsigned type" #~ msgstr "礭̵ۤڤͤޤ" #~ msgid "negative integer implicitly converted to unsigned type" #~ msgstr "̵ۤѴޤ" #~ msgid "overflow in implicit constant conversion" #~ msgstr "ۤѴǥСեޤ" #~ msgid "operation on `%s' may be undefined" #~ msgstr "`%s' Ǥα黻ƤʤȻפޤ" #~ msgid "expression statement has incomplete type" #~ msgstr "ʸԴޤ" #~ msgid "case label does not reduce to an integer constant" #~ msgstr "case ٥˴ԸǤޤ" #~ msgid "invalid truth-value expression" #~ msgstr "ͼŬڤǤ" #~ msgid "invalid operands to binary %s" #~ msgstr "黻 %s ŬڤǤ" #~ msgid "comparison is always false due to limited range of data type" #~ msgstr "ǡϰ¤ˤäơӤ false Ȥʤޤ" #~ msgid "comparison is always true due to limited range of data type" #~ msgstr "ǡϰ¤ˤäơӤ true Ȥʤޤ" #~ msgid "comparison of unsigned expression >= 0 is always true" #~ msgstr "̵μ >= 0 ȤӤϾ true Ǥ" #~ msgid "comparison of unsigned expression < 0 is always false" #~ msgstr "̵μ < 0 ȤӤϾ false Ǥ" #~ msgid "struct type value used where scalar is required" #~ msgstr "顼ɬפʾ˹¤ηͤȤޤ" #~ msgid "union type value used where scalar is required" #~ msgstr "顼ɬפʾ˶ηͤȤޤ" #~ msgid "array type value used where scalar is required" #~ msgstr "顼ɬפʾ󷿤ͤȤޤ" #~ msgid "suggest parentheses around assignment used as truth value" #~ msgstr "ͤȤƻȤΤޤǤϡݳ̤λѤ򤪴ᤷޤ" #~ msgid "invalid use of `restrict'" #~ msgstr "`restrict' ˡŬڤǤ" #~ msgid "too few arguments to function `%s'" #~ msgstr "ؿ `%s' ؤΰʤޤ" #~ msgid "too many arguments to function `%s'" #~ msgstr "ؿ `%s' Ф¿ޤ" #~ msgid "pointers are not permitted as case values" #~ msgstr "case ͤȤƤΥݥ󥿤ϵƤޤ" #~ msgid "ISO C++ forbids range expressions in switch statements" #~ msgstr "ISO C++ Ǥ switch ʸǤϰϼ϶ؤƤޤ" #~ msgid "ISO C forbids range expressions in switch statements" #~ msgstr "ISO C Ǥ switch ʸǤϰϼ϶ؤƤޤ" #~ msgid "empty range specified" #~ msgstr "ϰϤꤵޤ" #~ msgid "duplicate (or overlapping) case value" #~ msgstr "Ť(뤤ϽʣƤ) case " #~ msgid "this is the first entry overlapping that value" #~ msgstr "줬ͤȽʣǽιܤǤ" #~ msgid "duplicate case value" #~ msgstr "ʣ case " #~ msgid "previously used here" #~ msgstr "ˤǻȤޤ" #~ msgid "multiple default labels in one switch" #~ msgstr "Ĥ switch ʣ default ٥뤬ޤ" #~ msgid "this is the first default label" #~ msgstr "줬ǽ default ٥Ǥ" #~ msgid "-Wformat-y2k ignored without -Wformat" #~ msgstr "-Wformat-y2k ̵뤵ޤ-Wformat ޤ" #~ msgid "-Wformat-extra-args ignored without -Wformat" #~ msgstr "-Wformat-extra-args ̵뤵ޤ-Wformat ޤ" #~ msgid "-Wformat-nonliteral ignored without -Wformat" #~ msgstr "-Wformat-nonliteral ̵뤵ޤ-Wformat ޤ" #~ msgid "-Wformat-security ignored without -Wformat" #~ msgstr "-Wformat-security ̵뤵ޤ-Wformat ޤ" #~ msgid "-Wmissing-format-attribute ignored without -Wformat" #~ msgstr "-Wmissing-format-attribute ̵뤵ޤ-Wformat ޤ" #~ msgid "void value not ignored as it ought to be" #~ msgstr "void ͤΰ̵̣̤뤵ޤǤ" #~ msgid "conversion to non-scalar type requested" #~ msgstr "󥹥顼ؤѴ׵ᤵޤ" #~ msgid "unknown C standard `%s'" #~ msgstr " C ɸ `%s'" #~ msgid "array `%s' assumed to have one element" #~ msgstr " `%s' ϰǤäƤΤȸʤޤ" #~ msgid "`struct %s' incomplete in scope ending here" #~ msgstr "פ뤳ΰ֤ǡ`struct %s' ԴǤ" #~ msgid "`union %s' incomplete in scope ending here" #~ msgstr "פ뤳ʬ `union %s' ԴǤ" #~ msgid "`enum %s' incomplete in scope ending here" #~ msgstr "פ뤳ʬ `enum %s' ԴǤ" #~ msgid "label `%s' defined but not used" #~ msgstr "٥ `%s' ޤȤƤޤ" #~ msgid "shadowing built-in function `%s'" #~ msgstr "Ȥ߹ߴؿ `%s' ʤޤ" #~ msgid "shadowing library function `%s'" #~ msgstr "饤֥ؿ `%s' ʤޤ" #~ msgid "library function `%s' declared as non-function" #~ msgstr "饤֥ؿ `%s' ؿȤޤ" #~ msgid "built-in function `%s' declared as non-function" #~ msgstr "Ȥ߹ߴؿ `%s' ؿȤޤ" #~ msgid "`%s' redeclared as different kind of symbol" #~ msgstr "`%s' ̤ΥܥȤƺޤ" #~ msgid "previous declaration of `%s'" #~ msgstr "Ǥ `%s' " #~ msgid "conflicting types for built-in function `%s'" #~ msgstr "Ȥ߹ߴؿ `%s' ȷ̷⤷ޤ" #~ msgid "conflicting types for `%s'" #~ msgstr "`%s' ȷ̷⤷ޤ" #~ msgid "A parameter list with an ellipsis can't match an empty parameter name list declaration." #~ msgstr "άդѥ᥿ꥹȤϡβ̾ꥹȰפǤޤ" #~ msgid "An argument type that has a default promotion can't match an empty parameter name list declaration." #~ msgstr "ǥեȤdzʾ夲뷿ΰβ̾ꥹŬ礷ޤ" #~ msgid "redefinition of `%s'" #~ msgstr "`%s' ޤ" #~ msgid "redeclaration of `%s'" #~ msgstr "`%s' ޤ" #~ msgid "conflicting declarations of `%s'" #~ msgstr "`%s' ̷⤷Ƥޤ" #~ msgid "`%s' previously defined here" #~ msgstr "`%s' ˤޤ" #~ msgid "`%s' previously declared here" #~ msgstr "`%s' ˤޤ" #~ msgid "prototype for `%s' follows" #~ msgstr "`%s' Υץȥפˤޤ" #~ msgid "non-prototype definition here" #~ msgstr "ץȥˤޤ" #~ msgid "prototype for `%s' follows and number of arguments doesn't match" #~ msgstr "`%s' ΥץȥפˤꡢθĿפޤ" #~ msgid "prototype for `%s' follows and argument %d doesn't match" #~ msgstr "`%s' Υץȥפˤꡢ %d פޤ" #~ msgid "`%s' declared inline after being called" #~ msgstr "`%s' ϸƤӽФ inline Ƥޤ" #~ msgid "`%s' declared inline after its definition" #~ msgstr "`%s' Ϥ inline Ƥޤ" #~ msgid "static declaration for `%s' follows non-static" #~ msgstr "`%s' static θ static Ƥޤ" #~ msgid "non-static declaration for `%s' follows static" #~ msgstr "`%s' static θ static Ƥޤ" #~ msgid "const declaration for `%s' follows non-const" #~ msgstr "`%s' const θ const Ƥޤ" #~ msgid "type qualifiers for `%s' conflict with previous decl" #~ msgstr "`%s' ηҤ̷⤷ޤ" #~ msgid "redundant redeclaration of `%s' in same scope" #~ msgstr "`%s' ξĹʺƱ쥹ˤޤ" #~ msgid "nested extern declaration of `%s'" #~ msgstr "`%s' extern ͥȤƤޤ" #~ msgid "`%s' used prior to declaration" #~ msgstr "`%s' ˻Ѥޤ" #~ msgid "`%s' was declared implicitly `extern' and later `static'" #~ msgstr "`%s' ϰۤ `extern' 졢 `static' ޤ" #~ msgid "type mismatch with previous external decl" #~ msgstr "γȰפޤ" #~ msgid "previous external decl of `%s'" #~ msgstr " `%s' γ" #~ msgid "type mismatch with previous implicit declaration" #~ msgstr "ΰۤȰפޤ" #~ msgid "previous implicit declaration of `%s'" #~ msgstr "Ǥ `%s' ΰŪ" #~ msgid "type of external `%s' is not global" #~ msgstr " `%s' ηϥХǤϤޤ" #~ msgid "`%s' was previously implicitly declared to return `int'" #~ msgstr "`%s' ǰŪ `int' ֤ޤ" #~ msgid "`%s' was declared `extern' and later `static'" #~ msgstr "`%s' `extern' 졢 `static' ޤ" #~ msgid "extern declaration of `%s' doesn't match global one" #~ msgstr "`%s' extern ϥХΤȰפޤ" #~ msgid "`%s' locally external but globally static" #~ msgstr "`%s' ϥŪˤ extern ǤХŪ static Ǥ" #~ msgid "declaration of `%s' shadows a parameter" #~ msgstr "`%s' ϲʤޤ" #~ msgid "declaration of `%s' shadows a symbol from the parameter list" #~ msgstr "`%s' ϲꥹȤΥܥʤޤ" #~ msgid "declaration of `%s' shadows previous local" #~ msgstr "`%s' Υ륷ܥʤޤ" #~ msgid "declaration of `%s' shadows global declaration" #~ msgstr "`%s' ϥХʤޤ" #~ msgid "function `%s' was previously declared within a block" #~ msgstr "ؿ `%s' ϥ֥åƤޤ" #~ msgid "implicit declaration of function `%s'" #~ msgstr "ؿ `%s' ΰۤ" #~ msgid "label %s referenced outside of any function" #~ msgstr "٥ %s ؿγ¦ǻȤޤ" #~ msgid "duplicate label declaration `%s'" #~ msgstr "٥ `%s' ʣƤޤ" #~ msgid "this is a previous declaration" #~ msgstr "Ǥ `%s' " #~ msgid "unnamed struct/union that defines no instances" #~ msgstr "̵̾¤/ΤΥ󥹥󥹤Ƥޤ" #~ msgid "useless keyword or type name in empty declaration" #~ msgstr "ˡ̵̣ʥϷ̾ޤ" #~ msgid "two types specified in one empty declaration" #~ msgstr "ĤζˡĤηꤵƤޤ" #~ msgid "empty declaration" #~ msgstr "Ǥ" #~ msgid "`%s' is usually a function" #~ msgstr "`%s' ̾ϴؿǤ" #~ msgid "typedef `%s' is initialized" #~ msgstr "typedef `%s' ޤ" #~ msgid "function `%s' is initialized like a variable" #~ msgstr "ؿ `%s' ѿǤ뤫Τ褦˽ޤ" #~ msgid "parameter `%s' is initialized" #~ msgstr " `%s' ޤ" #~ msgid "variable-sized object may not be initialized" #~ msgstr "Ĺ֥ȤϽʤȤˤʤǤ礦" #~ msgid "variable `%s' has initializer but incomplete type" #~ msgstr "ѿ `%s' ˤϽҤޤԴǤ" #~ msgid "elements of array `%s' have incomplete type" #~ msgstr " `%s' ǤԴޤ" #~ msgid "declaration of `%s' has `extern' and is initialized" #~ msgstr "`%s' `extern' ĤƤꡢ⤵Ƥޤ" #~ msgid "initializer fails to determine size of `%s'" #~ msgstr "Ҥ `%s' Υ˼Ԥޤ" #~ msgid "array size missing in `%s'" #~ msgstr "`%s' Ǥ󥵥礤Ƥޤ" #~ msgid "zero or negative size array `%s'" #~ msgstr "`%s' 󥵥Ǥ" #~ msgid "storage size of `%s' isn't known" #~ msgstr "`%s' ΰ襵狼ޤ" #~ msgid "storage size of `%s' isn't constant" #~ msgstr "`%s' ΰ襵ǤϤޤ" #~ msgid "ignoring asm-specifier for non-static local variable `%s'" #~ msgstr " static ѿ `%s' ؤ asm Ҥ̵뤵ޤ" #~ msgid "ANSI C forbids parameter `%s' shadowing typedef" #~ msgstr "ANSI C typedef ʤ `%s' ؤƤޤ" #~ msgid "`long long long' is too long for GCC" #~ msgstr "`long long long' GCC ˤȤäĹޤ" #~ msgid "ISO C89 does not support `long long'" #~ msgstr "ISO C89 `long long' դޤ" #~ msgid "duplicate `%s'" #~ msgstr "`%s' ʣƤޤ" #~ msgid "two or more data types in declaration of `%s'" #~ msgstr "`%s' İʾΥǡꤵޤ" #~ msgid "`%s' fails to be a typedef or built in type" #~ msgstr "`%s' typedef ޤȤ߹߷ˤǤޤ" #~ msgid "type defaults to `int' in declaration of `%s'" #~ msgstr "`%s' ǷǥեȤ `int' Ȥޤ" #~ msgid "both long and short specified for `%s'" #~ msgstr "`%s' Ф long short ξꤵƤޤ" #~ msgid "long or short specified with char for `%s'" #~ msgstr "`%s' Ф char ȤȤ long ޤ short ꤵƤޤ" #~ msgid "long or short specified with floating type for `%s'" #~ msgstr "`%s' ФưȤȤ long ޤ short ꤵƤޤ" #~ msgid "the only valid combination is `long double'" #~ msgstr "ͣͭȹ碌 `long double' Ǥ" #~ msgid "both signed and unsigned specified for `%s'" #~ msgstr "`%s' Ф椢ʤξꤵƤޤ" #~ msgid "long, short, signed or unsigned invalid for `%s'" #~ msgstr "`%s' Ф long, short, signed ޤ unsigned ŬڤǤ" #~ msgid "long, short, signed or unsigned used invalidly for `%s'" #~ msgstr "`%s' Ф long, short, singed unsigned λѤŬڤǤ" #~ msgid "complex invalid for `%s'" #~ msgstr "`%s' Ф complex ŬڤǤ" #~ msgid "ISO C89 does not support complex types" #~ msgstr "ISO C89 complex դޤ" #~ msgid "ISO C does not support plain `complex' meaning `double complex'" #~ msgstr "ISO C `double complex' ̵̣ `complex' դޤ" #~ msgid "ISO C does not support complex integer types" #~ msgstr "ISO C complex դޤ" #~ msgid "duplicate `const'" #~ msgstr "ʣ `const'" #~ msgid "duplicate `restrict'" #~ msgstr "ʣ٥ `restrict'" #~ msgid "duplicate `volatile'" #~ msgstr "ʣ `volatile'" #~ msgid "multiple storage classes in declaration of `%s'" #~ msgstr "`%s' ˤʣ¸饹" #~ msgid "function definition declared `auto'" #~ msgstr "ؿ `auto' ޤ" #~ msgid "function definition declared `register'" #~ msgstr "ؿ `register' ޤ" #~ msgid "function definition declared `typedef'" #~ msgstr "ؿ `typedef' ޤ" #~ msgid "storage class specified for structure field `%s'" #~ msgstr "¤Υե `%s' ˻ꤵ줿饹" #~ msgid "storage class specified for parameter `%s'" #~ msgstr " `%s' ǻꤵ줿饹" #~ msgid "storage class specified for typename" #~ msgstr "̾Фƻꤵ줿饹" #~ msgid "`%s' initialized and declared `extern'" #~ msgstr "`%s' Ȥǡ`extern' ޤ" #~ msgid "`%s' has both `extern' and initializer" #~ msgstr "`%s' `extern' ȽҤξޤ" #~ msgid "nested function `%s' declared `extern'" #~ msgstr "ͥȤؿ `%s' `extern' ޤ" #~ msgid "top-level declaration of `%s' specifies `auto'" #~ msgstr "`%s' Υȥåץ٥ `auto' ꤷޤ" #~ msgid "declaration of `%s' as array of voids" #~ msgstr "`%s' void " #~ msgid "declaration of `%s' as array of functions" #~ msgstr "`%s' ϴؿ" #~ msgid "size of array `%s' has non-integer type" #~ msgstr " `%s' 礭" #~ msgid "ISO C forbids zero-size array `%s'" #~ msgstr "ISO C 0 `%s' ؤޤ" #~ msgid "size of array `%s' is negative" #~ msgstr " `%s' 礭Ǥ" #~ msgid "ISO C89 forbids array `%s' whose size can't be evaluated" #~ msgstr "ISO C89 ϥɾǤʤ `%s' ؤޤ" #~ msgid "ISO C89 forbids variable-size array `%s'" #~ msgstr "ISO C89 ϲĹ `%s' ؤޤ" #~ msgid "size of array `%s' is too large" #~ msgstr " `%s' 礭礭ޤ" #~ msgid "ISO C89 does not support flexible array members" #~ msgstr "ISO C89 ϲФդޤ" #~ msgid "array type has incomplete element type" #~ msgstr "ηԴǷäƤޤ" #~ msgid "ANSI C forbids const or volatile function types" #~ msgstr "ANSI C const volatile ؿդޤ" #~ msgid "`%s' declared as function returning a function" #~ msgstr "`%s' ϴؿ֤ؿȤƤޤ" #~ msgid "`%s' declared as function returning an array" #~ msgstr "`%s' ֤ؿȤƤޤ" #~ msgid "ISO C forbids qualified void function return type" #~ msgstr "ISO C Ͻդ void ͤĴؿؤޤ" #~ msgid "type qualifiers ignored on function return type" #~ msgstr "ؿͤηҤ̵뤵ޤ" #~ msgid "ISO C forbids qualified function types" #~ msgstr "ISO C ϴؿηҤؤޤ" #~ msgid "invalid type modifier within pointer declarator" #~ msgstr "ݥҤŬڤʷ" #~ msgid "ISO C forbids const or volatile function types" #~ msgstr "ISO C const volatile δؿؤޤ" #~ msgid "variable or field `%s' declared void" #~ msgstr "ѿޤΰ `%s' void Ƥޤ" #~ msgid "field `%s' declared as a function" #~ msgstr "ΰ `%s' ϴؿȤƤޤ" #~ msgid "field `%s' has incomplete type" #~ msgstr "ΰ `%s' ԴʷǤ" #~ msgid "invalid storage class for function `%s'" #~ msgstr "ؿ `%s' ФŬڤ¸饹" #~ msgid "`noreturn' function returns non-void value" #~ msgstr "`noreturn' ؿ void ֤ͤƤޤ" #~ msgid "cannot inline function `main'" #~ msgstr "`main' inline ؿˤϤǤޤ" #~ msgid "variable `%s' declared `inline'" #~ msgstr "ѿ `%s' `inline' ޤ" #~ msgid "function declaration isn't a prototype" #~ msgstr "ؿϥץȥפǤϤޤ" #~ msgid "parameter names (without types) in function declaration" #~ msgstr "ؿˡʷ̵˲̾ޤ" #~ msgid "parameter has incomplete type" #~ msgstr "ԴǤ" #~ msgid "parameter `%s' points to incomplete type" #~ msgstr " `%s' ԴؤƤޤ" #~ msgid "parameter points to incomplete type" #~ msgstr "ԴؤƤޤ" #~ msgid "parameter `%s' has just a forward declaration" #~ msgstr " `%s' ޤ" #~ msgid "`void' in parameter list must be the entire list" #~ msgstr "ꥹ `void' ϥꥹΤʤФʤޤ" #~ msgid "`%s %s' declared inside parameter list" #~ msgstr "`%s %s' ϲꥹޤ" #~ msgid "anonymous struct declared inside parameter list" #~ msgstr "̵̾¤Τꥹޤ" #~ msgid "anonymous union declared inside parameter list" #~ msgstr "̵̾Τꥹޤ" #~ msgid "anonymous enum declared inside parameter list" #~ msgstr "̵̾Ҥꥹޤ" #~ msgid "its scope is only this definition or declaration, which is probably not what you want." #~ msgstr "ΥפǤ餯˾ȤȰۤʤǤ礦" #~ msgid "redefinition of `%s %s'" #~ msgstr "`%s %s' κ" #~ msgid "%s defined inside parms" #~ msgstr "%sޤ" #~ msgid "union" #~ msgstr "" #~ msgid "structure" #~ msgstr "¤" #~ msgid "%s has no %s" #~ msgstr "%s%säƤޤ" #~ msgid "named members" #~ msgstr "̾դ" #~ msgid "members" #~ msgstr "" #~ msgid "nested redefinition of `%s'" #~ msgstr "`%s' ΥͥȤ" #~ msgid "bit-field `%s' width not an integer constant" #~ msgstr "ӥåȥե `%s' ǤϤޤ" #~ msgid "bit-field `%s' has invalid type" #~ msgstr "ӥåȥե `%s' ŬڤʷäƤޤ" #~ msgid "bit-field `%s' type invalid in ISO C" #~ msgstr "ӥåȥե `%s' ISO C ǤŬڤǤ" #~ msgid "negative width in bit-field `%s'" #~ msgstr "ӥåȥե `%s' οǤ" #~ msgid "width of `%s' exceeds its type" #~ msgstr "`%s' ϤηΥĶƤޤ" #~ msgid "zero width for bit-field `%s'" #~ msgstr "ӥåȥե `%s' 0 Ǥ" #~ msgid "`%s' is narrower than values of its type" #~ msgstr "`%s' ϤηͤⶹǤ" #~ msgid "flexible array member in union" #~ msgstr "Τ˲Фޤ" #~ msgid "flexible array member not at end of struct" #~ msgstr "¤ΤκǸǤϤʤ˲Фޤ" #~ msgid "flexible array member in otherwise empty struct" #~ msgstr "¤Τ˲аʳΥФޤ" #~ msgid "duplicate member `%s'" #~ msgstr "ʣ `%s'" #~ msgid "union cannot be made transparent" #~ msgstr "ΤƩŪˤǤޤ" #~ msgid "redeclaration of `enum %s'" #~ msgstr "`enum %s' κ" #~ msgid "enum defined inside parms" #~ msgstr " enum ޤ" #~ msgid "enumeration values exceed range of largest integer" #~ msgstr "ҤͤϰϤκͤĶޤ" #~ msgid "enumerator value for `%s' not integer constant" #~ msgstr "`%s' ͤǤϤޤ" #~ msgid "overflow in enumeration values" #~ msgstr "ͤСե" #~ msgid "ISO C restricts enumerator values to range of `int'" #~ msgstr "ISO C Ҥͤ `int' ϰϤ˸ꤷƤޤ" #~ msgid "return type is an incomplete type" #~ msgstr "ͤηԴǤ" #~ msgid "return type defaults to `int'" #~ msgstr "ͤηǥեȤ `int' Ȥޤ" #~ msgid "no previous prototype for `%s'" #~ msgstr "`%s' ץȥפޤ" #~ msgid "`%s' was used with no prototype before its definition" #~ msgstr "`%s' Ϥ˥ץȥפʤǻȤޤ" #~ msgid "no previous declaration for `%s'" #~ msgstr "`%s' ޤ" #~ msgid "`%s' was used with no declaration before its definition" #~ msgstr "`%s' ϤʤǻѤޤ" #~ msgid "return type of `%s' is not `int'" #~ msgstr "`%s' ͤη `int' ǤϤޤ" #~ msgid "first argument of `%s' should be `int'" #~ msgstr "`%s' `int' Ȥ٤Ǥ" #~ msgid "second argument of `%s' should be `char **'" #~ msgstr "`%s' `char **' Ȥ٤Ǥ" #~ msgid "third argument of `%s' should probably be `char **'" #~ msgstr "`%s' 軰Ϥ餯 `char **' Ȥ٤Ǥ礦" #~ msgid "`%s' takes only zero or two arguments" #~ msgstr "`%s' 0 2 ĤΰȤޤ" #~ msgid "`%s' is normally a non-static function" #~ msgstr "`%s' ̾ static ʴؿǤ" #~ msgid "parm types given both in parmlist and separately" #~ msgstr "ηꥹȤȤ̤ΤȤͿƤޤ" #~ msgid "parameter name omitted" #~ msgstr "άޤ" #~ msgid "parameter `%s' declared void" #~ msgstr " `%s' void Ƥޤ" #~ msgid "parameter name missing from parameter list" #~ msgstr "ꥹȤβ̾礤Ƥޤ" #~ msgid "multiple parameters named `%s'" #~ msgstr "ʣ̾ `%s'" #~ msgid "type of `%s' defaults to `int'" #~ msgstr "`%s' ηǥեȤ `int' Ȥޤ" #~ msgid "declaration for parameter `%s' but no such parameter" #~ msgstr " `%s' ޤʲϤޤ" #~ msgid "number of arguments doesn't match prototype" #~ msgstr "οץȥפȰפޤ" #~ msgid "promoted argument `%s' doesn't match prototype" #~ msgstr "ʾ夲줿 `%s' ϥץȥפȰפޤ" #~ msgid "argument `%s' doesn't match prototype" #~ msgstr " `%s' ϥץȥפ˰פޤ" #~ msgid "type of parameter `%s' is not declared" #~ msgstr " `%s' ηƤޤ" #~ msgid "this function may return with or without a value" #~ msgstr "δؿ֤֤ͤʤäꤹǤ礦" #~ msgid "size of return value of `%s' is %u bytes" #~ msgstr "`%s' ͤΥ %u ХȤǤ" #~ msgid "size of return value of `%s' is larger than %d bytes" #~ msgstr "`%s' ͤΥ %d ХȤ礭ʤޤ" #~ msgid "`for' loop initial declaration used outside C99 mode" #~ msgstr "`for' 롼פν C99 ⡼ɰʳǻȤޤ" #~ msgid "`%s %s' declared in `for' loop initial declaration" #~ msgstr "`%s %s' `for' 롼׽ޤ" #~ msgid "declaration of non-variable `%s' in `for' loop initial declaration" #~ msgstr "ѿ `%s' `for' 롼׽ˤޤ" #~ msgid "declaration of static variable `%s' in `for' loop initial declaration" #~ msgstr "ƥåѿ `%s' `for' 롼׽ˤޤ" #~ msgid "declaration of `extern' variable `%s' in `for' loop initial declaration" #~ msgstr "`extern' ѿ `%s' `for' 롼׽ˤޤ" #~ msgid "ignoring `%s' at end of `-f%s'" #~ msgstr "`%s'(`-f%s' νˤ) ̵뤷ޤ" #~ msgid "argument format specified for non-function `%s'" #~ msgstr "ؿ `%s' ΰ format °ꤵޤ" #~ msgid "unrecognized format specifier" #~ msgstr "ǧǤʤեޥåȻ" #~ msgid "`%s' is an unrecognized format function type" #~ msgstr "`%s' ǧǤʤեޥåȴؿǤ" #~ msgid "format string has invalid operand number" #~ msgstr "եޥåʸŬڤʥڥɿޤ" #~ msgid "format string arg follows the args to be formatted" #~ msgstr "եޥåʸեޥåȤθ³Ƥޤ" #~ msgid "format string arg not a string type" #~ msgstr "եޥåʸʸ󷿤ǤϤޤ" #~ msgid "args to be formatted is not '...'" #~ msgstr "եޥåȤ'...' ˤʤäƤޤ" #~ msgid "strftime formats cannot format arguments" #~ msgstr "strftime եޥåȤϰեޥåȤǤޤ" #~ msgid "function does not return string type" #~ msgstr "ؿʸ󷿤֤ޤ" #~ msgid "` ' flag" #~ msgstr "` ' ե饰" #~ msgid "the ` ' printf flag" #~ msgstr "printf ` ' ե饰" #~ msgid "`+' flag" #~ msgstr "`+' ե饰" #~ msgid "the `+' printf flag" #~ msgstr "printf `+' ե饰" #~ msgid "`#' flag" #~ msgstr "`#' ե饰" #~ msgid "the `#' printf flag" #~ msgstr "printf `#' ե饰" #~ msgid "`0' flag" #~ msgstr "`0' ե饰" #~ msgid "the `0' printf flag" #~ msgstr "printf `0' ե饰" #~ msgid "`-' flag" #~ msgstr "`-' ե饰" #~ msgid "the `-' printf flag" #~ msgstr "printf `-' ե饰" #~ msgid "`'' flag" #~ msgstr "`'' ե饰" #~ msgid "the `'' printf flag" #~ msgstr "printf `'' ե饰" #~ msgid "`I' flag" #~ msgstr "`I' ե饰" #~ msgid "the `I' printf flag" #~ msgstr "printf `I' ե饰" #~ msgid "field width" #~ msgstr "ե" #~ msgid "field width in printf format" #~ msgstr "printf եޥåȤǤΥե" #~ msgid "precision" #~ msgstr "" #~ msgid "precision in printf format" #~ msgstr "printf եޥåȤǤ" #~ msgid "length modifier" #~ msgstr "Ĺ" #~ msgid "length modifier in printf format" #~ msgstr "printf եޥåȤĹ" #~ msgid "assignment suppression" #~ msgstr "" #~ msgid "`a' flag" #~ msgstr "`a' ե饰" #~ msgid "the `a' scanf flag" #~ msgstr "scanf `a' ե饰" #~ msgid "field width in scanf format" #~ msgstr "scanf եޥåȤΥե" #~ msgid "length modifier in scanf format" #~ msgstr "scanf եޥåȤĹ" #~ msgid "the `'' scanf flag" #~ msgstr "scanf `'' ե饰" #~ msgid "the `I' scanf flag" #~ msgstr "scanf `I' ե饰" #~ msgid "`_' flag" #~ msgstr "`_' ե饰" #~ msgid "the `_' strftime flag" #~ msgstr "strftime `_' ե饰" #~ msgid "the `-' strftime flag" #~ msgstr "strftime `-' ե饰" #~ msgid "the `0' strftime flag" #~ msgstr "strftime `^' ե饰" #~ msgid "`^' flag" #~ msgstr "`^' ե饰" #~ msgid "the `^' strftime flag" #~ msgstr "strftime `^' ե饰" #~ msgid "the `#' strftime flag" #~ msgstr "strftime `#' ե饰" #~ msgid "field width in strftime format" #~ msgstr "strftime եޥåȤΥե" #~ msgid "`E' modifier" #~ msgstr "`E' " #~ msgid "the `E' strftime modifier" #~ msgstr "strftime `E' " #~ msgid "`O' modifier" #~ msgstr "`O' " #~ msgid "the `O' strftime modifier" #~ msgstr "strftime `O' " #~ msgid "the `O' modifier" #~ msgstr "the `O' " #~ msgid "fill character" #~ msgstr "ͤʸ" #~ msgid "fill character in strfmon format" #~ msgstr "strfmon եޥåȤεͤʸ" #~ msgid "the `^' strfmon flag" #~ msgstr "strfmon `^' ե饰" #~ msgid "the `+' strfmon flag" #~ msgstr "strfmon `+' ե饰" #~ msgid "`(' flag" #~ msgstr "`(' ե饰" #~ msgid "the `(' strfmon flag" #~ msgstr "strfmon `(' ե饰" #~ msgid "`!' flag" #~ msgstr "`!' ե饰" #~ msgid "the `!' strfmon flag" #~ msgstr "strfmon `!' ե饰" #~ msgid "the `-' strfmon flag" #~ msgstr "strfmon `-' ե饰" #~ msgid "field width in strfmon format" #~ msgstr "strfmon եޥåȤΥե" #~ msgid "left precision" #~ msgstr "" #~ msgid "left precision in strfmon format" #~ msgstr "strfmon եޥåȤκ" #~ msgid "right precision" #~ msgstr "" #~ msgid "right precision in strfmon format" #~ msgstr "strfmon եޥåȤα" #~ msgid "length modifier in strfmon format" #~ msgstr "strfmon եޥåȤĹ" #~ msgid "function might be possible candidate for `%s' format attribute" #~ msgstr "ؿ϶餯 `%s' format °θȻפޤ" #~ msgid "missing $ operand number in format" #~ msgstr "եޥå $ 黻ֹ礤Ƥޤ" #~ msgid "%s does not support %%n$ operand number formats" #~ msgstr "%s %%n$ 黻ֹեޥåȤդޤ" #~ msgid "operand number out of range in format" #~ msgstr "黻ֹ椬եޥåȤϰϳǤ" #~ msgid "format argument %d used more than once in %s format" #~ msgstr "եޥåȰ %d %s եޥåʾȤޤ" #~ msgid "format argument %d unused before used argument %d in $-style format" #~ msgstr "$-եޥåΥեޥåȰ %d %d Ȥ̤ѤǤ" #~ msgid "format not a string literal, format string not checked" #~ msgstr "եޥåȤʸƥǤϤޤΤǡեޥåȤϸޤ" #~ msgid "format not a string literal and no format arguments" #~ msgstr "եޥåȤʸƥǡĥեޥåȰޤ" #~ msgid "format not a string literal, argument types not checked" #~ msgstr "եޥåȤʸƥǤϤޤΤǡηϸޤ" #~ msgid "too many arguments for format" #~ msgstr "եޥåȤؤΰ¿ޤ" #~ msgid "unused arguments in $-style format" #~ msgstr "$-ΥեޥåȤ̤Ѥΰޤ" #~ msgid "zero-length format string" #~ msgstr "Ĺ 0 Υեޥåʸ" #~ msgid "format is a wide character string" #~ msgstr "եޥåȤ磻ʸǤ" #~ msgid "unterminated format string" #~ msgstr "üƤʤեޥåʸ" #~ msgid "null format string" #~ msgstr "եޥåʸ null Ǥ" #~ msgid "embedded `\\0' in format" #~ msgstr "եޥåȤ `\\0' ޤƤޤ" #~ msgid "spurious trailing `%%' in format" #~ msgstr "եޥåȤ `%%' κפ餷Τޤ" #~ msgid "repeated %s in format" #~ msgstr "եޥå %s 򷫤֤Ƥޤ" #~ msgid "missing fill character at end of strfmon format" #~ msgstr "strfmon եޥåȤνǵͤʸ礤Ƥޤ" #~ msgid "too few arguments for format" #~ msgstr "եޥåȤؤΰʤޤ" #~ msgid "zero width in %s format" #~ msgstr "%s 0 ΥեޥåȤǤ" #~ msgid "empty left precision in %s format" #~ msgstr "%s Ƕκ٥եޥåȤǤ" #~ msgid "field precision" #~ msgstr "ե" #~ msgid "empty precision in %s format" #~ msgstr "%s Ƕ٥եޥåȤǤ" #~ msgid "%s does not support the `%s' %s length modifier" #~ msgstr "%s `%s' %s ĹҤդޤ" #~ msgid "conversion lacks type at end of format" #~ msgstr "եޥåȤνǷѴʸ礱Ƥޤ" #~ msgid "unknown conversion type character `%c' in format" #~ msgstr "եޥåʷѴʸ `%c' ޤ" #~ msgid "unknown conversion type character 0x%x in format" #~ msgstr "եޥåʷѴʸ 0x%x ޤ" #~ msgid "%s does not support the `%%%c' %s format" #~ msgstr "%s `%%%c' %s եޥåȤդޤ" #~ msgid "%s used with `%%%c' %s format" #~ msgstr "%s `%%%c' %s եޥåȤȰ˻Ȥޤ" #~ msgid "%s does not support %s" #~ msgstr "%s %s դޤ" #~ msgid "%s does not support %s with the `%%%c' %s format" #~ msgstr "%s %s `%%%c' %s եޥåȤȰ˻Ȥդޤ" #~ msgid "%s ignored with %s and `%%%c' %s format" #~ msgstr "%s %s ڤ `%%%c' %s եޥåȤȰ˻Ȥ̵뤵ޤ" #~ msgid "%s ignored with %s in %s format" #~ msgstr "%s %s %s եޥåȤǰ˻Ȥ̵뤵ޤ" #~ msgid "use of %s and %s together with `%%%c' %s format" #~ msgstr "%s %s Ȥ `%%%c' %s եޥåȤȰ˻ȤäƤޤ" #~ msgid "use of %s and %s together in %s format" #~ msgstr "%s %s Ȥ %s եޥåȤǻȤäƤޤ" #~ msgid "`%%%c' yields only last 2 digits of year in some locales" #~ msgstr "`%%%c' ϥˤäƤϡǯβ⤿餷ޤ" #~ msgid "`%%%c' yields only last 2 digits of year" #~ msgstr "`%%%c' ǯβ⤿餷ޤ" #~ msgid "no closing `]' for `%%[' format" #~ msgstr "`%%[' եޥåȤĤ `]' ޤ" #~ msgid "use of `%s' length modifier with `%c' type character" #~ msgstr "`%s' ĹҤ `%c' ѴʸȰ˻ȤäƤޤ" #~ msgid "%s does not support the `%%%s%c' %s format" #~ msgstr "%s `%%%s%c' %s եޥåȤդޤ" #~ msgid "operand number specified with suppressed assignment" #~ msgstr "黻ֹ椬ȶ˻ȤƤޤ" #~ msgid "operand number specified for format taking no argument" #~ msgstr "黻ֹ椬ʤեޥåȤǻꤵޤ" #~ msgid "writing through null pointer (arg %d)" #~ msgstr "null ݥ󥿤񤭹Ǥޤ ( %d)" #~ msgid "reading through null pointer (arg %d)" #~ msgstr "null ݥ󥿤ɹǤޤ ( %d)" #~ msgid "writing into constant object (arg %d)" #~ msgstr "֥Ȥ˽񤭹Ǥޤ ( %d)" #~ msgid "extra type qualifiers in format argument (arg %d)" #~ msgstr "եޥåȰ;ʬʷҤޤ ( %d)" #~ msgid "format argument is not a pointer (arg %d)" #~ msgstr "եޥåȰݥ󥿤ǤϤޤ ( %d)" #~ msgid "format argument is not a pointer to a pointer (arg %d)" #~ msgstr "եޥåȰݥ󥿤ؤΥݥ󥿤ǤϤޤ ( %d)" #~ msgid "%s is not type %s (arg %d)" #~ msgstr "%s Ϸ %s ǤϤޤ ( %d)" #~ msgid "%s format, %s arg (arg %d)" #~ msgstr "եޥåȤ %s Ǥ %s Ǥ ( %d)" #~ msgid "badly nested C headers from preprocessor" #~ msgstr "ץץå۾˥ͥȤ줿 C إåǤ" #~ msgid "leaving more files than we entered" #~ msgstr "äեФե¿ʤޤ" #~ msgid "ignoring #pragma %s %s" #~ msgstr "#pragma %s %s ̵뤷ޤ" #~ msgid "ignoring #pragma %s" #~ msgstr "#pragma %s ̵뤷ޤ" #~ msgid "non hex digit '%c' in universal-character-name" #~ msgstr " 16 ʿ '%c' universal-character-name ˤޤ" #~ msgid "universal-character-name on EBCDIC target" #~ msgstr "EBCDIC ΥåȤ `%c' ˥˥С륭饯̾Ȥޤ" #~ msgid "universal-character-name used for '%c'" #~ msgstr "`%c' ˥˥С륭饯̾Ȥޤ" #~ msgid "hex escape out of range" #~ msgstr "16 ʥץ󥹤ϰϳǤ" #~ msgid "unknown escape sequence: '\\' followed by char 0x%x" #~ msgstr "ʥץ: ʸ 0x%x ³ '\\'" #~ msgid "universal-character-name '\\u%04x' not valid in identifier" #~ msgstr "˥Сʸ̾ `\\u%04x' ϼ̻ҤǤͭǤϤޤ" #~ msgid "both 'f' and 'l' suffixes on floating constant" #~ msgstr "ư 'f' 'l' ξޤ" #~ msgid "floating point number exceeds range of '%s'" #~ msgstr "ư '%s' ϰϤĶޤ" #~ msgid "stray '%c' in program" #~ msgstr "ץȤưæʸ '%c'" #~ msgid "stray '\\%o' in program" #~ msgstr "ץȤưæʸ '\\%o'" #~ msgid "floating constant may not be in radix 16" #~ msgstr " 16 ưϵޤ" #~ msgid "traditional C rejects the 'l' suffix" #~ msgstr "Ť C Ǥ 'l' ݤޤ" #~ msgid "ISO C forbids imaginary numeric constants" #~ msgstr "ISO C ǤϵؤƤޤ" #~ msgid "floating point number exceeds range of 'double'" #~ msgstr "ư 'double' ϰϤĶƤޤ" #~ msgid "two 'u' suffixes on integer constant" #~ msgstr "2 Ĥ 'u' ˤĤƤޤ" #~ msgid "traditional C rejects the 'u' suffix" #~ msgstr "Ū C Ǥ 'u' ݤޤ" #~ msgid "three 'l' suffixes on integer constant" #~ msgstr "3 Ĥ 'l' ˤĤƤޤ" #~ msgid "'lul' is not a valid integer suffix" #~ msgstr "'lul' ǤϤޤ" #~ msgid "'Ll' and 'lL' are not valid integer suffixes" #~ msgstr "'Ll' 'lL' ǤϤޤ" #~ msgid "more than one 'i' or 'j' suffix on integer constant" #~ msgstr "ʣ 'i' 'j' ˤĤƤޤ" #~ msgid "integer constant is too large for this configuration of the compiler - truncated to %d bits" #~ msgstr "ѥθߤ礭뤿ᡢ%d ӥåȤڤͤޤ" #~ msgid "width of integer constant changes with -traditional" #~ msgstr "-traditional ĤѤޤ" #~ msgid "integer constant is unsigned in ISO C, signed with -traditional" #~ msgstr " ISO C Ǥ̵ǡ-traditional ĤդǤ" #~ msgid "width of integer constant may change on other systems with -traditional" #~ msgstr "¾Υƥ -traditional ĤѤǤ礦" #~ msgid "integer constant larger than the maximum value of %s" #~ msgstr "%s κͤ礭ͤǤ" #~ msgid "decimal constant is so large that it is unsigned" #~ msgstr "ȤƤ礭Τ̵Ȥޤ" #~ msgid "integer constant is larger than the maximum value for its type" #~ msgstr "ηκͤ礭ͤǤ" #~ msgid "missing white space after number '%.*s'" #~ msgstr " '%.*s' θ˶礤Ƥޤ" #~ msgid "Ignoring invalid multibyte character" #~ msgstr "̵ʥޥХʸ̵뤷ޤ" #~ msgid "syntax error" #~ msgstr "ʸˡ顼" #~ msgid "ISO C forbids an empty source file" #~ msgstr "ISO C ϶Υեؤޤ" #~ msgid "argument of `asm' is not a constant string" #~ msgstr "`asm' ΰʸǤϤޤ " #~ msgid "ISO C forbids data definition with no type or storage class" #~ msgstr "ISO C Ϸ䵭饹Τʤǡؤޤ" #~ msgid "data definition has no type or storage class" #~ msgstr "ǡ䵭饹äƤޤ" #~ msgid "ISO C does not allow extra `;' outside of a function" #~ msgstr "ISO C ǤϴؿǤ;ʬ `;' ޤ" #~ msgid "ISO C forbids `&&'" #~ msgstr "ISO C `&&' ؤޤ" #~ msgid "`sizeof' applied to a bit-field" #~ msgstr "ӥåȥեɤŬѤ줿 `sizeof'" #~ msgid "ISO C forbids omitting the middle term of a ?: expression" #~ msgstr "ISO C ֹबά줿 ?: ؤޤ" #~ msgid "ISO C89 forbids compound literals" #~ msgstr "ISO C89 ʣƥؤޤ" #~ msgid "ISO C forbids braced-groups within expressions" #~ msgstr "ISO C ϥ֥졼ǤޤȤ줿ؤޤ" #~ msgid "traditional C rejects string concatenation" #~ msgstr "Ť C Ǥʸݤޤ" #~ msgid "ISO C does not permit use of `varargs.h'" #~ msgstr "ISO C Ǥ `varargs.h' Ѥޤ" #~ msgid "`%s' is not at beginning of declaration" #~ msgstr "`%s' λϤޤǤϤޤ" #~ msgid "ISO C forbids empty initializer braces" #~ msgstr "ISO C Ǥ϶νѥ֥졼ؤޤ" #~ msgid "ISO C89 forbids specifying subobject to initialize" #~ msgstr "ISO C89 ϽѤ֥Ȼؤޤ" #~ msgid "obsolete use of designated initializer without `='" #~ msgstr "`=' Τʤл̾ҤѤޤ" #~ msgid "obsolete use of designated initializer with `:'" #~ msgstr "`:' Ĥл̾ҤѤޤ" #~ msgid "ISO C forbids specifying range of elements to initialize" #~ msgstr "ISO C ϽѤϰϻؤޤ" #~ msgid "ISO C forbids nested functions" #~ msgstr "ISO C ͥȤ줿ؿؤޤ" #~ msgid "`[*]' in parameter declaration only allowed in ISO C 99" #~ msgstr " `[*]' ISO C 99 ǤΤߵƤޤ" #~ msgid "ISO C forbids forward references to `enum' types" #~ msgstr "ISO C `enum' Ȥؤޤ" #~ msgid "comma at end of enumerator list" #~ msgstr "ҥꥹȤκǸ˥ޤޤ" #~ msgid "no semicolon at end of struct or union" #~ msgstr "struct union κǸ˥ߥ󤬤ޤ" #~ msgid "extra semicolon in struct or union specified" #~ msgstr "struct union ;ʬʥߥ󤬻ꤵޤ" #~ msgid "ISO C doesn't support unnamed structs/unions" #~ msgstr "ISO C Ǥ̵̾¤Τ䶦Τդޤ" #~ msgid "ISO C forbids member declarations with no members" #~ msgstr "ISO C ϥФΤʤؤޤ" #~ msgid "deprecated use of label at end of compound statement" #~ msgstr "ʣʸνǥ٥ȤȤϿ侩ޤ" #~ msgid "ISO C89 forbids mixed declarations and code" #~ msgstr "ISO C89 ȥɤȤκؤޤ" #~ msgid "ISO C forbids label declarations" #~ msgstr "ISO C ϥ٥ؤޤ" #~ msgid "braced-group within expression allowed only inside a function" #~ msgstr "֥졼ǤޤȤ줿ϴؿ¦ǤΤߵޤ" #~ msgid "empty body in an else-statement" #~ msgstr "else ʸȤǤ" #~ msgid "ISO C forbids `goto *expr;'" #~ msgstr "ISO C `goto *;' νؤޤ" #~ msgid "ISO C forbids forward parameter declarations" #~ msgstr "ISO C ؤޤ" #~ msgid "ISO C requires a named argument before `...'" #~ msgstr "ISO C `...' ̾Ĥ줿׵ᤷޤ" #~ msgid "`...' in old-style identifier list" #~ msgstr "Ťμ̻ҥꥹȤǤ `...'" #~ msgid "%s at end of input" #~ msgstr "ϤκǸ %s" #~ msgid "%s before %s'%c'" #~ msgstr "%s %s'%c' ˤޤ" #~ msgid "%s before %s'\\x%x'" #~ msgstr "%s %s'\\x%x' ˤޤ" #~ msgid "%s before string constant" #~ msgstr "ʸ %s" #~ msgid "%s before numeric constant" #~ msgstr " %s" #~ msgid "%s before \"%s\"" #~ msgstr "%s \"%s\" ˤޤ" #~ msgid "%s before '%s' token" #~ msgstr "%s '%s' ȡˤޤ" #~ msgid "syntax error at '%s' token" #~ msgstr "'%s' ȡνʸˡ顼" #~ msgid "YYDEBUG not defined." #~ msgstr "YYDEBUG Ƥޤ" #~ msgid "#pragma pack (pop) encountered without matching #pragma pack (push, )" #~ msgstr "#pragma pack (pop) б #pragma pack (push, ) ʤ˽иޤ" #~ msgid "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, )" #~ msgstr "#pragma pack(pop, %s) б #pragma pack(push, %s) ʤ˽иޤ" #~ msgid "junk at end of '#pragma pack'" #~ msgstr "'#pragma pack' ˥ߤޤ" #~ msgid "junk at end of #pragma weak" #~ msgstr "#pragma weak ˥ߤޤ" #~ msgid "break statement not within loop or switch" #~ msgstr "break ʸ loop ޤ switch ˤޤ" #~ msgid "continue statement not within a loop" #~ msgstr "continue ʸ loop ˤޤ" #~ msgid "destructor needed for `%#D'" #~ msgstr "`%#D' ΤΥǥȥ饯ɬפǤ" #~ msgid "where case label appears here" #~ msgstr "case ٥뤬줿ΤϤǤ" #~ msgid "(enclose actions of previous case statements requiring destructors in their own scope.)" #~ msgstr "( case ʸΰϤޤ줿ưϤ켫ȤΥפǥǥȥ饯׵ᤷޤ)" #~ msgid "%s qualifier ignored on asm" #~ msgstr "asm Ǥ %s Ҥ̵뤵ޤ" #~ msgid "`%s' has an incomplete type" #~ msgstr "`%s' ԴǤ" #~ msgid "invalid use of void expression" #~ msgstr "void Ŭڤʻ" #~ msgid "invalid use of array with unspecified bounds" #~ msgstr "ꤵʤŬڤ" #~ msgid "invalid use of undefined type `%s %s'" #~ msgstr "̤η `%s %s' λѤŬڤǤ" #~ msgid "invalid use of incomplete typedef `%s'" #~ msgstr "Դ typedef `%s' λѤŬڤǤ" #~ msgid "function types not truly compatible in ISO C" #~ msgstr "ؿ ISO C ȴߴǤϤޤ" #~ msgid "types are not quite compatible" #~ msgstr "ߴޤ" #~ msgid "sizeof applied to a function type" #~ msgstr "sizeof ؿŬѤޤ" #~ msgid "sizeof applied to a void type" #~ msgstr "sizeof void ŬѤޤ" #~ msgid "sizeof applied to an incomplete type" #~ msgstr "sizeof ԴʷŬѤޤ" #~ msgid "arithmetic on pointer to an incomplete type" #~ msgstr "ԴؤΥݥ󥿤Ф黻" #~ msgid "__alignof__ applied to an incomplete type" #~ msgstr "__alignof__ ԴʷŬѤޤ" #~ msgid "`__alignof' applied to a bit-field" #~ msgstr "ӥåȥեɤ `__alignof' ŬѤޤ" #~ msgid "invalid use of non-lvalue array" #~ msgstr "̵" #~ msgid "%s has no member named `%s'" #~ msgstr "%s `%s' Ȥ̾ΥФϤޤ" #~ msgid "request for member `%s' in something not a structure or union" #~ msgstr "¤ΤǤⶦΤǤʤǡ `%s' ׵ᤵޤ" #~ msgid "dereferencing pointer to incomplete type" #~ msgstr "ԴΥݥ󥿤ؤδܻ" #~ msgid "dereferencing `void *' pointer" #~ msgstr "`void *' ݥ󥿤ؤδܻȤǤ" #~ msgid "invalid type argument of `%s'" #~ msgstr "`%s' ΰȤ̵ʷ" #~ msgid "subscript missing in array reference" #~ msgstr "󻲾ȤǤź礤Ƥޤ" #~ msgid "array subscript has type `char'" #~ msgstr "ź `char' Ǥ" #~ msgid "array subscript is not an integer" #~ msgstr "źǤϤޤ" #~ msgid "ISO C forbids subscripting `register' array" #~ msgstr "ISO C `register' ؤźؤޤ" #~ msgid "ISO C89 forbids subscripting non-lvalue array" #~ msgstr "ISO C89 ؤźؤޤ" #~ msgid "subscript has type `char'" #~ msgstr "ź `char' ޤ" #~ msgid "subscripted value is neither array nor pointer" #~ msgstr "źĤ줿ͤǤݥ󥿤Ǥ⤢ޤ" #~ msgid "`%s' undeclared here (not in a function)" #~ msgstr "`%s' ǤƤޤ (ؿǤϤʤ)" #~ msgid "`%s' undeclared (first use in this function)" #~ msgstr "`%s' Ƥޤ (δؿǺǽ)" #~ msgid "(Each undeclared identifier is reported only once" #~ msgstr "(̤γѿˤĤƤϡ줬ǽ˸줿줾δؿ" #~ msgid "for each function it appears in.)" #~ msgstr " Фư٤𤵤ޤ)" #~ msgid "local declaration of `%s' hides instance variable" #~ msgstr "`%s' Υǡ󥹥ѿޤ" #~ msgid "called object is not a function" #~ msgstr "ƤӽФ줿֥ȤϴؿǤϤޤ" #~ msgid "too many arguments to function" #~ msgstr "ؿФ¿ޤ" #~ msgid "type of formal parameter %d is incomplete" #~ msgstr "ʲ %d ηԴǤ" #~ msgid "%s as integer rather than floating due to prototype" #~ msgstr "ץȥפˤ %s ưǤϤʤȤƤޤ" #~ msgid "%s as integer rather than complex due to prototype" #~ msgstr "ץȥפˤ %s ʣǿǤϤʤȤƤޤ" #~ msgid "%s as complex rather than floating due to prototype" #~ msgstr "ץȥפˤ %s ưǤϤʤʣǿȤƤޤ" #~ msgid "%s as floating rather than integer due to prototype" #~ msgstr "ץȥפˤ %s ǤϤʤưȤƤޤ" #~ msgid "%s as complex rather than integer due to prototype" #~ msgstr "ץȥפˤ %s ǤϤʤʣǿȤƤޤ" #~ msgid "%s as floating rather than complex due to prototype" #~ msgstr "ץȥפˤ %s ʣǿǤϤʤưȤƤޤ" #~ msgid "%s as `float' rather than `double' due to prototype" #~ msgstr "ץȥפˤ %s `double' Ǥʤ `float' ȤƤޤ" #~ msgid "%s with different width due to prototype" #~ msgstr "%s ϥץȥפǤηȤϰۤʤäƤޤ" #~ msgid "%s as unsigned due to prototype" #~ msgstr "ץȥפˤ %s ʤȤƤޤ" #~ msgid "%s as signed due to prototype" #~ msgstr "ץȥפˤ %s դȤƤޤ" #~ msgid "too few arguments to function" #~ msgstr "ؿؤΰʤޤ" #~ msgid "suggest parentheses around + or - inside shift" #~ msgstr "ե + - μǤϳ̤Ĥ뤳Ȥ򤪴ᤷޤ" #~ msgid "suggest parentheses around && within ||" #~ msgstr "|| ȶ˻Ȥ && μǤϳ̤Ĥ뤳Ȥ򤪴ᤷޤ" #~ msgid "suggest parentheses around arithmetic in operand of |" #~ msgstr "׻ | 黻ҤιȤʤˤϳ̤Ĥ뤳Ȥ򤪴ᤷޤ" #~ msgid "suggest parentheses around comparison in operand of |" #~ msgstr "Ӥ | 黻ҤιȤʤˤϳ̤Ĥ뤳Ȥ򤪴ᤷޤ" #~ msgid "suggest parentheses around arithmetic in operand of ^" #~ msgstr "׻ ^ 黻ҤιȤʤˤϳ̤Ĥ뤳Ȥ򤪴ᤷޤ" #~ msgid "suggest parentheses around comparison in operand of ^" #~ msgstr "׻ ^ 黻ҤιȤʤˤϳ̤Ĥ뤳Ȥ򤪴ᤷޤ" #~ msgid "suggest parentheses around + or - in operand of &" #~ msgstr "& 黻Ҥμ + - μˤϳ̤Ĥ뤳Ȥ򤪴ᤷޤ" #~ msgid "suggest parentheses around comparison in operand of &" #~ msgstr "Ӥ & 黻ҤιȤʤˤϳ̤Ĥ뤳Ȥ򤪴ᤷޤ" #~ msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" #~ msgstr "X<=Y<=Z ͤӤϿŪʰ̣Ǥη̤⤿餷ޤ" #~ msgid "right shift count is negative" #~ msgstr "եȲοǤ" #~ msgid "right shift count >= width of type" #~ msgstr "եȲ >= ȤʤäƤޤ" #~ msgid "left shift count is negative" #~ msgstr "եȲοǤ" #~ msgid "left shift count >= width of type" #~ msgstr "եȲ >= ȤʤäƤޤ" #~ msgid "shift count is negative" #~ msgstr "եȲͤǤ" #~ msgid "shift count >= width of type" #~ msgstr "եȲ >= ȤʤäƤޤ" #~ msgid "comparing floating point with == or != is unsafe" #~ msgstr "ưӤ == != ȤΤϰǤϤޤ" #~ msgid "ISO C forbids comparison of `void *' with function pointer" #~ msgstr "ISO C `void *' ȴؿݥ󥿤ȤӤؤޤ" #~ msgid "comparison of distinct pointer types lacks a cast" #~ msgstr "ۤʤݥ󥿤Ӥǥ㥹Ȥ礤Ƥޤ" #~ msgid "comparison between pointer and integer" #~ msgstr "ݥ󥿤ȤӤԤʤäƤޤ" #~ msgid "ISO C forbids ordered comparisons of pointers to functions" #~ msgstr "ISO C ؿݥ󥿤νӤؤޤ" #~ msgid "comparison of complete and incomplete pointers" #~ msgstr "ʥݥ󥿤Դʥݥ󥿤ȤӤǤ" #~ msgid "ordered comparison of pointer with integer zero" #~ msgstr " 0 ȥݥ󥿤ȤνӤǤ" #~ msgid "unordered comparison on non-floating point argument" #~ msgstr "ưǤνդʤӤǤ" #~ msgid "comparison between signed and unsigned" #~ msgstr "դ̵ȤӤǤ" #~ msgid "comparison of promoted ~unsigned with constant" #~ msgstr "~ȿž줿ʾ夲̵ȤӤǤ" #~ msgid "comparison of promoted ~unsigned with unsigned" #~ msgstr "~ȿž줿̵̵ȤӤǤ" #~ msgid "pointer of type `void *' used in arithmetic" #~ msgstr "`void *' Υݥ󥿤׻ǻȤޤ" #~ msgid "pointer to a function used in arithmetic" #~ msgstr "ؿݥ󥿤׻ǻȤޤ" #~ msgid "pointer of type `void *' used in subtraction" #~ msgstr "`void *' Υݥ󥿤κ褦ȤƤޤ" #~ msgid "pointer to a function used in subtraction" #~ msgstr "ؿݥ󥿤κ褦ȤƤޤ" #~ msgid "wrong type argument to unary plus" #~ msgstr "ñץ饹ؤΰηְäƤޤ" #~ msgid "wrong type argument to unary minus" #~ msgstr "ñޥʥؤΰηְäƤޤ" #~ msgid "ISO C does not support `~' for complex conjugation" #~ msgstr "ISO C ʣǶѤ `~' դޤ" #~ msgid "wrong type argument to bit-complement" #~ msgstr "ӥåȿžؤΰηְäƤޤ" #~ msgid "wrong type argument to abs" #~ msgstr "abs ؤΰηְäƤޤ" #~ msgid "wrong type argument to conjugation" #~ msgstr "ʣǶ(~)ؤΰηְäƤޤ" #~ msgid "wrong type argument to unary exclamation mark" #~ msgstr "ñശò(!)ؤΰηְäƤޤ" #~ msgid "ISO C does not support `++' and `--' on complex types" #~ msgstr "ISO C complex Ǥ `++' `--' դޤ" #~ msgid "wrong type argument to %s" #~ msgstr "%s ؤΰηְäƤޤ" #~ msgid "%s of pointer to unknown structure" #~ msgstr "ʹ¤ΤФݥ󥿤%s" #~ msgid "invalid lvalue in increment" #~ msgstr "󥯥ȤǤκ̵ͤǤ" #~ msgid "invalid lvalue in decrement" #~ msgstr "ǥȤǤκ̵ͤǤ" #~ msgid "increment" #~ msgstr "󥯥" #~ msgid "decrement" #~ msgstr "ǥ" #~ msgid "ISO C forbids the address of a cast expression" #~ msgstr "ISO C ϥ㥹ȼΥɥ쥹ɾؤޤ" #~ msgid "invalid lvalue in unary `&'" #~ msgstr "ñ `&' Ǥκ̵ͤǤ" #~ msgid "attempt to take address of bit-field structure member `%s'" #~ msgstr "¤Υ `%s' ΥӥåȥեɤΥɥ쥹褦ȤƤޤ" #~ msgid "%s" #~ msgstr "%s" #~ msgid "ISO C forbids use of conditional expressions as lvalues" #~ msgstr "ISO C ϺͤȤƤξPѤؤޤ" #~ msgid "ISO C forbids use of compound expressions as lvalues" #~ msgstr "ISO C ϺͤȤƤʣ缰Ѥؤޤ" #~ msgid "ISO C forbids use of cast expressions as lvalues" #~ msgstr "ISO C ϺͤȤƤΥ㥹ȼѤؤޤ" #~ msgid "%s of read-only member `%s'" #~ msgstr "%sɤ߹ѥ `%s' ˹Ԥޤ" #~ msgid "%s of read-only variable `%s'" #~ msgstr "%sɤ߹ѿ `%s' ˹Ԥޤ" #~ msgid "%s of read-only location" #~ msgstr "%sɤ߹ΰǹԤޤ" #~ msgid "cannot take address of bitfield `%s'" #~ msgstr "ӥåȥե `%s' Υɥ쥹Ǥޤ" #~ msgid "global register variable `%s' used in nested function" #~ msgstr "쥸ѿ `%s' ҴؿǻȤޤ" #~ msgid "register variable `%s' used in nested function" #~ msgstr "쥸ѿ `%s' ҴؿǻȤޤ" #~ msgid "address of global register variable `%s' requested" #~ msgstr "׵ᤵ줿쥸ѿ `%s' Υɥ쥹" #~ msgid "cannot put object with volatile field into register" #~ msgstr "volatile եɤ쥸˻äƤ褦ʥ֥Ȥ֤ޤ" #~ msgid "address of register variable `%s' requested" #~ msgstr "register ѿ `%s' Υɥ쥹׵ᤵޤ" #~ msgid "signed and unsigned type in conditional expression" #~ msgstr "Pդ̵Ȥޤ" #~ msgid "ISO C forbids conditional expr with only one void side" #~ msgstr "ISO C ¦ void ȤʤPؤޤ" #~ msgid "ISO C forbids conditional expr between `void *' and function pointer" #~ msgstr "ISO C `void *' ȴؿݥ󥿤ȤPȤ뤳Ȥؤޤ" #~ msgid "pointer type mismatch in conditional expression" #~ msgstr "PǤΥݥ󥿤ηŬ礷ޤ" #~ msgid "pointer/integer type mismatch in conditional expression" #~ msgstr "Pǥݥ󥿷Ŭ礷ޤ" #~ msgid "type mismatch in conditional expression" #~ msgstr "PǤηȹ碌Ŭ礷ޤ" #~ msgid "left-hand operand of comma expression has no effect" #~ msgstr "ޱ黻Ҥκ¦μ˸Ϥޤ" #~ msgid "cast specifies array type" #~ msgstr "㥹Ȥ󷿤ꤷƤޤ" #~ msgid "cast specifies function type" #~ msgstr "㥹ȤϴؿꤷƤޤ" #~ msgid "ISO C forbids casting nonscalar to the same type" #~ msgstr "ISO C 󥹥顼ƱؤΥ㥹Ȥؤޤ" #~ msgid "ISO C forbids casts to union type" #~ msgstr "ISO C ϶ηؤΥ㥹Ȥؤޤ" #~ msgid "cast to union type from type not present in union" #~ msgstr "Τˤʤ鶦ηإ㥹ȤƤޤ" #~ msgid "cast discards qualifiers from pointer target type" #~ msgstr "㥹Ȥˤäƥݥ󥿤齤ҤڤΤƤޤ" #~ msgid "cast increases required alignment of target type" #~ msgstr "㥹Ȥˤäƥݥ󥿤׵ᥢ饤Ȥäޤ" #~ msgid "cast from pointer to integer of different size" #~ msgstr "㥹Ȥˤäƥݥ󥿤ۤʤ륵Ȥʤޤ" #~ msgid "cast does not match function type" #~ msgstr "㥹ȤˤؿηŬ礷ޤ" #~ msgid "cast to pointer from integer of different size" #~ msgstr "ۤʤ륵ݥ󥿤˥㥹Ȥޤ" #~ msgid "invalid lvalue in assignment" #~ msgstr "Ȥ̵ʺͤǤ" #~ msgid "assignment" #~ msgstr "" #~ msgid "%s makes qualified function pointer from unqualified" #~ msgstr "%sˤꡢʤؿݥ󥿤顢줿ؿݥ󥿤ޤ" #~ msgid "%s discards qualifiers from pointer target type" #~ msgstr "%sˤꡢݥ󥿤μνҤڤΤƤޤ" #~ msgid "ISO C prohibits argument conversion to union type" #~ msgstr "ISO C Ǥϰ鶦ΤؤѴػߤƤޤ" #~ msgid "ISO C forbids %s between function pointer and `void *'" #~ msgstr "ISO C ϴؿݥ󥿤 `void *' Ȥ%sؤޤ" #~ msgid "pointer targets in %s differ in signedness" #~ msgstr "%s ǥݥ󥿤μоݤ̵ͭۤʤޤ" #~ msgid "%s from incompatible pointer type" #~ msgstr "ߴΤʤݥ󥿷%sǤ" #~ msgid "%s makes pointer from integer without a cast" #~ msgstr "%sˤꡢ㥹Ȥʤݥ󥿤ޤ" #~ msgid "%s makes integer from pointer without a cast" #~ msgstr "%sˤꡢ㥹Ȥʤǥݥ󥿤ޤ" #~ msgid "incompatible type for argument %d of `%s'" #~ msgstr "%d ܤΰ `%s' ηȸߴޤ" #~ msgid "incompatible type for argument %d of indirect function call" #~ msgstr "ŪʴؿƤӽФ %d ФƸߴΤʤǤ" #~ msgid "incompatible types in %s" #~ msgstr "%s ˸ߴΤʤ" #~ msgid "passing arg %d of `%s'" #~ msgstr " %d Ĥ `%s' Ϥޤ" #~ msgid "passing arg %d of pointer to function" #~ msgstr " %d Ĥδؿݥ󥿤Ϥޤ" #~ msgid "initializer for static variable is not constant" #~ msgstr "static ѿνҤǤϤޤ" #~ msgid "initializer for static variable uses complicated arithmetic" #~ msgstr "static ѿνҤʣʷ׻ȤäƤޤ" #~ msgid "aggregate initializer is not constant" #~ msgstr "ΤνҤǤϤޤ" #~ msgid "aggregate initializer uses complicated arithmetic" #~ msgstr "ΤνҤʣʷ׻ԤäƤޤ" #~ msgid "traditional C rejects automatic aggregate initialization" #~ msgstr "Ť C ǤϼưŪʽΤν䤷ޤ" #~ msgid "(near initialization for `%s')" #~ msgstr "(`%s' νԴǤ)" #~ msgid "char-array initialized from wide string" #~ msgstr "磻ʸ󤫤 char 󤬽ޤ" #~ msgid "int-array initialized from non-wide string" #~ msgstr "磻ʸ󤫤 int 󤬽ޤ" #~ msgid "initializer-string for array of chars is too long" #~ msgstr "char ˤȤäƽʸĹޤ" #~ msgid "array initialized from non-constant array expression" #~ msgstr "󼰤󤬽ޤ" #~ msgid "initializer element is not constant" #~ msgstr "ҤǤǤϤޤ" #~ msgid "initialization" #~ msgstr "" #~ msgid "initializer element is not computable at load time" #~ msgstr "ҤǤϥɻ˷׻ޤ" #~ msgid "invalid initializer" #~ msgstr "̵ʽ" #~ msgid "extra brace group at end of initializer" #~ msgstr "Ҥν;ʬʥ֥졼Υ롼" #~ msgid "missing braces around initializer" #~ msgstr "ҤΤޤΥ֥졼礤Ƥޤ" #~ msgid "braces around scalar initializer" #~ msgstr "顼Ҥ֥졼ǰϤޤƤޤ" #~ msgid "initialization of flexible array member in a nested context" #~ msgstr "ͥȤʸ̮DzФƤޤ" #~ msgid "initialization of a flexible array member" #~ msgstr "ФƤޤ" #~ msgid "deprecated initialization of zero-length array" #~ msgstr "Ĺ 0 νϿ侩ޤ" #~ msgid "initialization of zero-length array before end of structure" #~ msgstr "¤ΤκǸĹ 0 Ƥޤ" #~ msgid "initialization of zero-length array inside a nested context" #~ msgstr "ͥȤʸ̮¦Ĺ 0 Ƥޤ" #~ msgid "missing initializer" #~ msgstr "Ҥ礤Ƥޤ" #~ msgid "empty scalar initializer" #~ msgstr "Υ顼" #~ msgid "extra elements in scalar initializer" #~ msgstr "顼Ҥ;ʬ" #~ msgid "initialization designators may not nest" #~ msgstr "̾ҤǤϥͥȤ뤳ȤǤޤ" #~ msgid "array index in non-array initializer" #~ msgstr "νҤ󥤥ǥåȤޤ" #~ msgid "field name not in record or union initializer" #~ msgstr "쥳ɤ䶦Τ˥ե̾ʤҤǤ" #~ msgid "nonconstant array index in initializer" #~ msgstr "󥤥ǥåޤ" #~ msgid "array index in initializer exceeds array bounds" #~ msgstr "󥤥ǥåζĶޤ" #~ msgid "empty index range in initializer" #~ msgstr "˶ϰϥǥåޤ" #~ msgid "array index range in initializer exceeds array bounds" #~ msgstr "ҤϰϥǥåζĶޤ" #~ msgid "unknown field `%s' specified in initializer" #~ msgstr "ʥե `%s' Ҥǻꤵޤ" #~ msgid "initialized field with side-effects overwritten" #~ msgstr "줿եɤѤǾ񤭤ޤ" #~ msgid "excess elements in char array initializer" #~ msgstr "char Ǥ¿ޤ" #~ msgid "excess elements in struct initializer" #~ msgstr "¤νǤ¿ޤ" #~ msgid "excess elements in union initializer" #~ msgstr "νǤ¿ޤ" #~ msgid "traditional C rejects initialization of unions" #~ msgstr "Ť C ϶Τν䤷ޤ" #~ msgid "excess elements in array initializer" #~ msgstr "Ǥ¿ޤ" #~ msgid "excess elements in scalar initializer" #~ msgstr "顼Ǥ¿ޤ" #~ msgid "asm template is not a string constant" #~ msgstr "asm ƥץ졼ȤʸǤϤޤ" #~ msgid "invalid lvalue in asm statement" #~ msgstr "asm ʸ̵ʺ" #~ msgid "modification by `asm'" #~ msgstr "`asm' ˤ뽤" #~ msgid "function declared `noreturn' has a `return' statement" #~ msgstr "`noreturn' 줿ؿ `return' ʸޤ" #~ msgid "`return' with no value, in function returning non-void" #~ msgstr "귿ؿǡ`return' ͤޤ" #~ msgid "`return' with a value, in function returning void" #~ msgstr "귿 void δؿǡ`return' ͤޤ" #~ msgid "return" #~ msgstr "return" #~ msgid "function returns address of local variable" #~ msgstr "ؿѿΥɥ쥹֤Ƥޤ" #~ msgid "switch quantity not an integer" #~ msgstr "switch ƤǤϤޤ" #~ msgid "`long' switch expression not converted to `int' in ISO C" #~ msgstr "ISO C Ǥ `long' switch `int' Ѵޤ" #~ msgid "case label not within a switch statement" #~ msgstr "case ٥뤬 switch ʸˤޤ" #~ msgid "`default' label not within a switch statement" #~ msgstr "`default' ٥뤬 switch ʸˤޤ" #~ msgid "inlining failed in call to `%s'" #~ msgstr "`%s' ؤθƤӽФΥ饤󲽤˼Ԥޤ" #~ msgid "called from here" #~ msgstr "ƤФޤ" #~ msgid "can't inline call to `%s'" #~ msgstr "`%s' ؤθƤӽФϥ饤󲽤Ǥޤ" #~ msgid "function call has aggregate value" #~ msgstr "ؿƤӽФΤͤäƤޤ" #~ msgid "variable offset is passed paritially in stack and in reg" #~ msgstr "ѿեåȤåȥ쥸Ϥޤ" #~ msgid "variable size is passed partially in stack and in reg" #~ msgstr "ѿåȥ쥸Ϥޤ" #~ msgid "internal error" #~ msgstr "顼" #~ msgid "no arguments" #~ msgstr "ޤ" #~ msgid "fopen %s" #~ msgstr "fopen %s" #~ msgid "fclose %s" #~ msgstr "fclose %s" #~ msgid "collect2 version %s" #~ msgstr "collect2 version %s" #~ msgid "%d constructor(s) found\n" #~ msgstr "%d ĤΥ󥹥ȥ饯Ĥޤ\n" #~ msgid "%d destructor(s) found\n" #~ msgstr "%d ĤΥǥȥ饯Ĥޤ\n" #~ msgid "%d frame table(s) found\n" #~ msgstr "%d ĤΥե졼ơ֥뤬Ĥޤ\n" #~ msgid "%s terminated with signal %d [%s]%s" #~ msgstr "%s ʥ %d [%s]%s ǽλޤ" #~ msgid "%s returned %d exit status" #~ msgstr "%s exit %d ֤ޤ" #~ msgid "[cannot find %s]" #~ msgstr "[%s Ĥޤ]" #~ msgid "cannot find `%s'" #~ msgstr "`%s' Ĥޤ" #~ msgid "redirecting stdout: %s" #~ msgstr "stdout ؤΥ쥯: %s" #~ msgid "[Leaving %s]\n" #~ msgstr "[%s Υޤ]\n" #~ msgid "" #~ "\n" #~ "write_c_file - output name is %s, prefix is %s\n" #~ msgstr "" #~ "\n" #~ "write_c_file - ̾ %sץե %s\n" #~ msgid "cannot find `nm'" #~ msgstr "`nm' Ĥޤ" #~ msgid "pipe" #~ msgstr "pipe" #~ msgid "fdopen" #~ msgstr "fdopen" #~ msgid "dup2 %d 1" #~ msgstr "dup2 %d 1" #~ msgid "close %d" #~ msgstr "close %d" #~ msgid "execvp %s" #~ msgstr "execvp %s" #~ msgid "init function found in object %s" #~ msgstr "init ؿ򥪥֥ %s ǸĤޤ" #~ msgid "fini function found in object %s" #~ msgstr "fini ؿ򥪥֥ %s ǸĤޤ" #~ msgid "fclose" #~ msgstr "fclose" #~ msgid "unable to open file '%s'" #~ msgstr "ե '%s' open Ǥޤ" #~ msgid "unable to stat file '%s'" #~ msgstr "ե '%s' stat Ǥޤ" #~ msgid "unable to mmap file '%s'" #~ msgstr "ե '%s' mmap Ǥޤ" #~ msgid "not found\n" #~ msgstr "Ĥޤ\n" #~ msgid "dynamic dependency %s not found" #~ msgstr "ưŪ¸ط %s Ĥޤ" #~ msgid "bad magic number in file '%s'" #~ msgstr "ե '%s' ʥޥåʥ" #~ msgid "dynamic dependencies.\n" #~ msgstr "ưŪ¸ط\n" #~ msgid "cannot find `ldd'" #~ msgstr "`ldd' Ĥޤ" #~ msgid "execv %s" #~ msgstr "execv %s" #~ msgid "" #~ "\n" #~ "ldd output with constructors/destructors.\n" #~ msgstr "" #~ "\n" #~ "ldd Ϥ󥹥ȥ饯/ǥȥ饯ȼޤ\n" #~ msgid "unable to open dynamic dependency '%s'" #~ msgstr "ưŪ¸ط '%s' 򳫤ޤ" #~ msgid "%s: not a COFF file" #~ msgstr "%s: COFF եǤϤޤ" #~ msgid "%s: cannot open as COFF file" #~ msgstr "%s: COFF եȤƳޤ" #~ msgid "Library lib%s not found" #~ msgstr "饤֥ lib%s Ĥޤ" #~ msgid "open %s" #~ msgstr "open %s" #~ msgid "incompatibilities between object file & expected values" #~ msgstr "ξΩʤ֥ȥեȴ" #~ msgid "" #~ "\n" #~ "Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n" #~ msgstr "" #~ "\n" #~ "ܥơ֥ #%d ޤեå = 0x%.8lx, = %s\n" #~ msgid "string section missing" #~ msgstr "ʸ󥻥礤Ƥޤ" #~ msgid "section pointer missing" #~ msgstr "ݥ󥿤礤Ƥޤ" #~ msgid "no symbol table found" #~ msgstr "ܥơ֥뤬Ĥޤ" #~ msgid "no cmd_strings found" #~ msgstr "cmd_strings Ĥޤ" #~ msgid "" #~ "\n" #~ "Updating header and load commands.\n" #~ "\n" #~ msgstr "" #~ "\n" #~ "إå load ޥɤ򹹿ޤ\n" #~ msgid "load command map, %d cmds, new size %ld.\n" #~ msgstr "load ޥɥޥåס%d ĤΥޥɡʥ %ld\n" #~ msgid "" #~ "writing load commands.\n" #~ "\n" #~ msgstr "" #~ "load ޥɤ񤭹ߤޤ\n" #~ "\n" #~ msgid "close %s" #~ msgstr "close %s" #~ msgid "could not convert 0x%l.8x into a region" #~ msgstr "0x%l.8x ΰѴǤޤ" #~ msgid "%s function, region %d, offset = %ld (0x%.8lx)\n" #~ msgstr "%s ؿ, ΰ %d, եå = %ld (0x%.8lx)\n" #~ msgid "bad magic number" #~ msgstr "ʥޥåʥ" #~ msgid "bad header version" #~ msgstr "ʥإåС" #~ msgid "bad raw header version" #~ msgstr "ΥإåС" #~ msgid "raw header buffer too small" #~ msgstr "ΥإåХåե" #~ msgid "old raw header file" #~ msgstr "ŤΥإåե" #~ msgid "unsupported version" #~ msgstr "ݡȤƤʤСǤ" #~ msgid "unknown {de,en}code_mach_o_hdr return value %d" #~ msgstr " {de,en}code_mach_o_hdr %d" #~ msgid "fstat %s" #~ msgstr "fstat %s" #~ msgid "lseek %s 0" #~ msgstr "lseek %s 0" #~ msgid "read %s" #~ msgstr "read %s" #~ msgid "read %ld bytes, expected %ld, from %s" #~ msgstr "%ld Хɹߡ%ld (%s )ɹϤǤ" #~ msgid "msync %s" #~ msgstr "msync %s" #~ msgid "munmap %s" #~ msgstr "munmap %s" #~ msgid "write %s" #~ msgstr "write %s" #~ msgid "wrote %ld bytes, expected %ld, to %s" #~ msgstr "%ld ХȽߡ%ld (%s )ϤǤ" #~ msgid "" #~ ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n" #~ ";; %d successes.\n" #~ "\n" #~ msgstr "" #~ ";; : %d , %d (%d ʶ֤׵),\n" #~ ";; %d \n" #~ msgid "" #~ "\n" #~ ";; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n" #~ ";; %d successes.\n" #~ msgstr "" #~ "\n" #~ ";; : %d , %d (%d ʶ֤׵),\n" #~ ";; %d \n" #~ msgid "Use VAX-C alignment" #~ msgstr "VAX-C 饤Ȥ" #~ msgid "invalid %%Q value" #~ msgstr "̵ %%Q " #~ msgid "invalid %%C value" #~ msgstr "̵ %%C " #~ msgid "invalid %%N value" #~ msgstr "̵ %%N " #~ msgid "invalid %%M value" #~ msgstr "̵ %%M " #~ msgid "invalid %%m value" #~ msgstr "̵ %%m " #~ msgid "invalid %%L value" #~ msgstr "̵ %%L " #~ msgid "invalid %%O value" #~ msgstr "̵ %%O " #~ msgid "invalid %%P value" #~ msgstr "̵ %%P " #~ msgid "invalid %%V value" #~ msgstr "̵ %%V " #~ msgid "Generate code assuming DW bit is set" #~ msgstr "DW ӥåȤåȤ줿ȸʤƥ" #~ msgid "Generate code assuming DW bit is not set" #~ msgstr "DW ӥåȤåȤƤʤȸʤƥ" #~ msgid "Generate code using byte writes" #~ msgstr "ХȽ񤭹ߤȤäƥ" #~ msgid "Do not generate byte writes" #~ msgstr "ХȽ񤭹ߤȤ鷺˥" #~ msgid "Use small memory model" #~ msgstr "⡼ǥ" #~ msgid "Use normal memory model" #~ msgstr "Ρޥǥ" #~ msgid "Use large memory model" #~ msgstr "顼ǥ" #~ msgid "Generate 29050 code" #~ msgstr "29050 ɤ" #~ msgid "Generate 29000 code" #~ msgstr "29000 ɤ" #~ msgid "Use kernel global registers" #~ msgstr "ͥ륰Х쥸" #~ msgid "Use user global registers" #~ msgstr "桼Х쥸" #~ msgid "Emit stack checking code" #~ msgstr "ååѥɤǤ" #~ msgid "Do not emit stack checking code" #~ msgstr "ååѥɤǤʤ" #~ msgid "Work around storem hardware bug" #~ msgstr "storem ϡɥХнԤʤ" #~ msgid "Do not work around storem hardware bug" #~ msgstr "storem ϡɥХнԤʤʤ" #~ msgid "Store locals in argument registers" #~ msgstr "쥸˥ΤΤǼ" #~ msgid "Do not store locals in arg registers" #~ msgstr "쥸˥ΤΤǼʤ" #~ msgid "Use software floating point" #~ msgstr "եưѤ" #~ msgid "Do not generate multm instructions" #~ msgstr "multm ̿ʤ" #~ msgid "bad value `%s' for -mtrap-precision switch" #~ msgstr "-mtrap-precision åˤȤäƤ `%s'" #~ msgid "bad value `%s' for -mfp-rounding-mode switch" #~ msgstr "-mfp-rounding-mode åˤȤäƤ `%s'" #~ msgid "bad value `%s' for -mfp-trap-mode switch" #~ msgstr "-mfp-trap-mode åˤȤäƤ `%s'" #~ msgid "bad value `%s' for -mcpu switch" #~ msgstr "-mcpu åˤȤäƤ `%s'" #~ msgid "fp software completion requires -mtrap-precision=i" #~ msgstr "ư䴰 -mtrap-precision=i ɬפȤޤ" #~ msgid "rounding mode not supported for VAX floats" #~ msgstr "VAX ưǤϴݤ⡼ɤѤǤޤ" #~ msgid "trap mode not supported for VAX floats" #~ msgstr "VAX ưǤϥȥåץ⡼ɤѤǤޤ" #~ msgid "L%d cache latency unknown for %s" #~ msgstr "L%d å쥤ƥ󥷤 %s ˤȤäǤ" #~ msgid "bad value `%s' for -mmemory-latency" #~ msgstr "`%s' -mmemory-latency ˤȤäͤǤ" #~ msgid "invalid %%r value" #~ msgstr "̵ %%r " #~ msgid "invalid %%R value" #~ msgstr "̵ %%R " #~ msgid "invalid %%h value" #~ msgstr "̵ %%h " #~ msgid "invalid %%U value" #~ msgstr "̵ %%U " #~ msgid "invalid %%s value" #~ msgstr "̵ %%s " #~ msgid "invalid %%E value" #~ msgstr "̵ %%E " #~ msgid "invalid %%xn code" #~ msgstr "̵ %%xn " #~ msgid "Use hardware fp" #~ msgstr "ϡɥư" #~ msgid "Do not use hardware fp" #~ msgstr "ϡɥưѤʤ" #~ msgid "Use fp registers" #~ msgstr "ư쥸Ѥ" #~ msgid "Do not use fp registers" #~ msgstr "ư쥸Ѥʤ" #~ msgid "Do not assume GAS" #~ msgstr "GAS ѤȤʤ" #~ msgid "Assume GAS" #~ msgstr "GAS ѤȤ" #~ msgid "Request IEEE-conformant math library routines (OSF/1)" #~ msgstr "IEEE οإ饤֥롼 (OSF/1) ׵᤹" #~ msgid "Emit IEEE-conformant code, without inexact exceptions" #~ msgstr "Ŭڤ㳰 IEEE ΥɤȯԤ" #~ msgid "Emit IEEE-conformant code, with inexact exceptions" #~ msgstr "Ŭڤ㳰ޤ IEEE ΥɤȯԤ" #~ msgid "Do not emit complex integer constants to read-only memory" #~ msgstr "ʣǿɤ߹ѥŸʤ" #~ msgid "Use VAX fp" #~ msgstr "VAX ưѤ" #~ msgid "Do not use VAX fp" #~ msgstr "VAX ưѤʤ" #~ msgid "Emit code for the byte/word ISA extension" #~ msgstr "Х/ ISA ĥѤΥɤȯԤ" #~ msgid "Emit code for the motion video ISA extension" #~ msgstr "⡼ӥǥ ISA ĥѤΥɤȯԤ" #~ msgid "Emit code for the fp move and sqrt ISA extension" #~ msgstr "ư move sqrt ISA ĥѤΥɤȯԤ" #~ msgid "Emit code for the counting ISA extension" #~ msgstr " ISA ĥѤΥɤȯԤ" #~ msgid "Use features of and schedule given CPU" #~ msgstr "CPU Ϳ줿ħ䥹塼Ѥ" #~ msgid "Schedule given CPU" #~ msgstr "CPU Ϳ줿塼Ѥ" #~ msgid "Control the generated fp rounding mode" #~ msgstr "줿ưݤ⡼ɤ椹" #~ msgid "Control the IEEE trap mode" #~ msgstr "IEEE ȥåץ⡼ɤ椹" #~ msgid "Control the precision given to fp exceptions" #~ msgstr "ư㳰Ϳ줿٤椹" #~ msgid "Tune expected memory latency" #~ msgstr "ͽ쥤ƥ󥷤Ĵ" #~ msgid "%s causes a section type conflict" #~ msgstr "%s ϥ󥿥פζޤ" #~ msgid "bad value (%s) for -mcpu switch" #~ msgstr "-mcpu åФ (%s)" #~ msgid "invalid operand to %R code" #~ msgstr "%R ɤФ̵ʥڥ" #~ msgid "invalid operand to %H/%L code" #~ msgstr "%H/%L ɤФ̵ʥڥ" #~ msgid "invalid operand to %U code" #~ msgstr "%U ɤФ̵ʥڥ" #~ msgid "invalid operand to %V code" #~ msgstr "%V ɤФ̵ʥڥ" #~ msgid "invalid operand output code" #~ msgstr "̵ʥڥɽϥ" #~ msgid "switch -mcpu=%s conflicts with -march= switch" #~ msgstr "-mcpu=%s å -march= åȶ礷ޤ" #~ msgid "bad value (%s) for %s switch" #~ msgstr " (%s) %s switch ˤȤäޤ" #~ msgid "target CPU does not support APCS-32" #~ msgstr "å CPU APCS-32 򥵥ݡȤޤ" #~ msgid "target CPU does not support APCS-26" #~ msgstr "å CPU APCS-26 򥵥ݡȤޤ" #~ msgid "target CPU does not support interworking" #~ msgstr "å CPU interworking 򥵥ݡȤޤ" #~ msgid "target CPU does not support THUMB instructions." #~ msgstr "å CPU THUMB ̿򥵥ݡȤޤ" #~ msgid "enabling backtrace support is only meaningful when compiling for the Thumb." #~ msgstr "Thumb Ѥ˥ѥ뤷ȤΤߡ̣ΤХåȥ졼ͭˤޤ" #~ msgid "enabling callee interworking support is only meaningful when compiling for the Thumb." #~ msgstr "Thumb Ѥ˥ѥ뤷ȤΤߡƤӽФ¦ interworking ͭˤޤ" #~ msgid "enabling caller interworking support is only meaningful when compiling for the Thumb." #~ msgstr "Thumb Ѥ˥ѥ뤷ȤΤߡƤӽФ¦ interworking ͭˤޤ" #~ msgid "interworking forces APCS-32 to be used" #~ msgstr "interworking APCS-32 λѤפޤ" #~ msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" #~ msgstr "-mapcs-stack-check -mno-apcs-frame ȶ¸Ǥޤ" #~ msgid "-fpic and -mapcs-reent are incompatible" #~ msgstr "-fpic -mapcs-reent ϶¸Ǥޤ" #~ msgid "APCS reentrant code not supported. Ignored" #~ msgstr "APCS ǽɤϥݡȤޤ̵뤵ޤ" #~ msgid "-g with -mno-apcs-frame may not give sensible debugging" #~ msgstr "-g -mno-apcs-frame Ĥȡ٤ʥǥХåϤǤʤǤ礦" #~ msgid "Passing floating point arguments in fp regs not yet supported" #~ msgstr "ưư쥸ϤȤϡޤݡȤޤ" #~ msgid "Invalid floating point emulation option: -mfpe-%s" #~ msgstr "̵ưߥ졼ȥץ: -mfpe-%s" #~ msgid "Structure size boundary can only be set to 8 or 32" #~ msgstr "¤ΤΥ 8 32 ˤǤޤ" #~ msgid "-mpic-register= is useless without -fpic" #~ msgstr "-mpic-register= -fpic ĤʤΩޤ" #~ msgid "Unable to use '%s' for PIC register" #~ msgstr "'%s' PIC Υ쥸ȤƻȤȤǤޤ" #~ msgid "Unable to find a temporary location for static chain register" #~ msgstr "Ū쥸Ѥΰΰ򸫤Ĥޤ" #~ msgid "Unable to compute real location of stacked parameter" #~ msgstr "åѤޤ줿μºݤΰ׻Ǥޤ" #~ msgid "no low registers available for popping high registers" #~ msgstr "̥쥸 pop ٤˻ѤǤ̥쥸ޤ" #~ msgid "Interrupt Service Routines cannot be coded in Thumb mode." #~ msgstr "Thumb ⡼ɤǤϳߥӥ롼򥳡ɲǤޤ" #~ msgid "Generate APCS conformant stack frames" #~ msgstr "APCS Ŭ礷åե졼" #~ msgid "Store function names in object code" #~ msgstr "֥ȥɤ˴ؿ̾Ǽ" #~ msgid "Use the 32-bit version of the APCS" #~ msgstr "APCS 32 ӥåǤѤ" #~ msgid "Use the 26-bit version of the APCS" #~ msgstr "APCS 26 ӥåǤѤ" #~ msgid "Pass FP arguments in FP registers" #~ msgstr "FP 쥸 FP Ϥ" #~ msgid "Generate re-entrant, PIC code" #~ msgstr "ǽ PIC ɤޤ" #~ msgid "The MMU will trap on unaligned accesses" #~ msgstr "MMU ϥ饤ȤʤǥȥåפȯǤ礦" #~ msgid "Use library calls to perform FP operations" #~ msgstr "ư黻Ԥ饤֥ƤӽФѤ" #~ msgid "Use hardware floating point instructions" #~ msgstr "ϡɥư̿Ѥ" #~ msgid "Assume target CPU is configured as big endian" #~ msgstr "å CPU ӥåǥȤꤵƤȤߤʤ" #~ msgid "Assume target CPU is configured as little endian" #~ msgstr "å CPU ȥ륨ǥȤꤵƤȤߤʤ" #~ msgid "Assume big endian bytes, little endian words" #~ msgstr "byte ӥåǥ word ȥ륨ǥȤߤʤ" #~ msgid "Support calls between Thumb and ARM instruction sets" #~ msgstr "Thumb ARM ̿᥻åȴ֤θƤӽФ򥵥ݡȤ" #~ msgid "Generate a call to abort if a noreturn function returns" #~ msgstr "noreturn ؿ return Ȥ abort θƤӽФ" #~ msgid "Do not move instructions into a function's prologue" #~ msgstr "ؿγʬ̿ưʤ" #~ msgid "Do not load the PIC register in function prologues" #~ msgstr "ؿ֤ʬ PIC 쥸ɤʤ" #~ msgid "Generate call insns as indirect calls, if necessary" #~ msgstr "ɬפС̿ƤӽФܸƤӽФȤ" #~ msgid "Compile for the Thumb not the ARM" #~ msgstr "ARM ǤϤʤ Thumb Ѥ˥ѥ뤹" #~ msgid "Thumb: Generate (non-leaf) stack frames even if not needed" #~ msgstr "Thumb: פʾǤ(ü)åե졼" #~ msgid "Thumb: Generate (leaf) stack frames even if not needed" #~ msgstr "Thumb: פʾǤ(ü)åե졼" #~ msgid "Thumb: Assume non-static functions may be called from ARM code" #~ msgstr "Thumb: Ūؿ ARM ɤƤӽФǽȤߤʤ" #~ msgid "Thumb: Assume function pointers may go to non-Thumb aware code" #~ msgstr "Thumb: ؿݥ󥿤 Thumb ǧ륳ɤǽȤߤʤ" #~ msgid "Specify the name of the target CPU" #~ msgstr "å CPU ̾ꤹ" #~ msgid "Specify the name of the target architecture" #~ msgstr "åȥƥ̾ꤹ" #~ msgid "Specify the version of the floating point emulator" #~ msgstr "ưߥ졼ΥСꤹ" #~ msgid "Specify the minimum bit alignment of structures" #~ msgstr "¤Υ饤ȤκǾӥåȿꤹ" #~ msgid "Specify the register to be used for PIC addressing" #~ msgstr "PIC ɥ쥷󥰤Ѥ쥸ꤹ" #~ msgid "initialized variable `%s' is marked dllimport" #~ msgstr "줿ѿ `%s' dllimport ޡƤޤ" #~ msgid "static variable `%s' is marked dllimport" #~ msgstr "Ūѿ `%s' dllimport ȥޡƤޤ" #~ msgid "Ignore dllimport attribute for functions" #~ msgstr "ؿ dllimport °̵뤹" #~ msgid "Do symbol renaming for BSD" #~ msgstr "BSD Ѥ˥ܥ̾ѹ" #~ msgid "Do symbol renaming for X/OPEN" #~ msgstr "X/OPEN Ѥ˥ܥ̾ѹ" #~ msgid "Don't do symbol renaming" #~ msgstr "ܥ̾ѹԤʤ" #~ msgid "MCU `%s' not supported" #~ msgstr "MCU `%s' ϥݡȤޤ" #~ msgid "large frame pointer change (%d) with -mtiny-stack" #~ msgstr "-mtiny-stack ˤ顼ե졼ݥ󥿤ѹޤ(%d)" #~ msgid "Only initialized variables can be placed into program memory area." #~ msgstr "ץΰ֤Ǥѿޤ" #~ msgid "Assume int to be 8 bit integer" #~ msgstr "int 8 ӥåȤߤʤ" #~ msgid "Change the stack pointer without disabling interrupts" #~ msgstr "ߤ̵ʤǥåݥ󥿤ѹ" #~ msgid "Use subroutines for function prologue/epilogue" #~ msgstr "ؿ֤/ӤΤΥ֥롼Ѥ" #~ msgid "Change only the low 8 bits of the stack pointer" #~ msgstr "åݥ󥿤β 8 ӥåȤѹ" #~ msgid "Do not generate tablejump insns" #~ msgstr "ơ֥른̿ʤ" #~ msgid "Output instruction sizes to the asm file" #~ msgstr "asm ե̿᥵Ϥ" #~ msgid "Specify the initial stack address" #~ msgstr "åɥ쥹ꤹ" #~ msgid "Specify the MCU name" #~ msgstr "MCU ̾ꤹ" #~ msgid "Trampolines not supported\n" #~ msgstr "ȥݥϥݡȤޤ\n" #~ msgid "Unknown CPU version %d, using 40.\n" #~ msgstr " CPU С %d40 Ѥޤ\n" #~ msgid "ISR %s requires %d words of local vars, max is 32767." #~ msgstr "ISR %s %d ɤΥѿ׵ᤷ 32767 Ǥ" #~ msgid "junk at end of '#pragma %s'" #~ msgstr "'#pragma %s' κǸ˥ߤޤ" #~ msgid "Small memory model" #~ msgstr "⡼ǥ" #~ msgid "Big memory model" #~ msgstr "ӥåǥ" #~ msgid "Use MPYI instruction for C3x" #~ msgstr "MPYI ̿ C3x Ѥ˻Ѥ" #~ msgid "Do not use MPYI instruction for C3x" #~ msgstr "MPYI ̿ C3x Ѥ˻Ѥʤ" #~ msgid "Use fast but approximate float to integer conversion" #~ msgstr "®ͤȤʤưؤѴѤ" #~ msgid "Use slow but accurate float to integer conversion" #~ msgstr "®ΤưؤѴѤ" #~ msgid "Enable use of RTPS instruction" #~ msgstr "RTPS ̿Ѥͭˤ" #~ msgid "Disable use of RTPS instruction" #~ msgstr "RTPS ̿Ѥ̵ˤ" #~ msgid "Enable use of RTPB instruction" #~ msgstr "RTPB ̿Ѥͭˤ" #~ msgid "Disable use of RTPB instruction" #~ msgstr "RTPB ̿Ѥ̵ˤ" #~ msgid "Generate code for C30 CPU" #~ msgstr "C30 CPU ѤΥɤ" #~ msgid "Generate code for C31 CPU" #~ msgstr "C31 CPU ѤΥɤ" #~ msgid "Generate code for C32 CPU" #~ msgstr "C32 CPU ѤΥɤ" #~ msgid "Generate code for C33 CPU" #~ msgstr "C33 CPU ѤΥɤ" #~ msgid "Generate code for C40 CPU" #~ msgstr "C40 CPU ѤΥɤ" #~ msgid "Generate code for C44 CPU" #~ msgstr "C44 CPU ѤΥɤ" #~ msgid "Emit code compatible with TI tools" #~ msgstr "TI ġߴΥɤȯԤ" #~ msgid "Emit code to use GAS extensions" #~ msgstr "GAS ĥѤ륳ɤȯԤ" #~ msgid "Save DP across ISR in small memory model" #~ msgstr "⡼ǥ ISR ٤ DP 򥻡֤" #~ msgid "Don't save DP across ISR in small memory model" #~ msgstr "⡼ǥ ISR ٤ DP 򥻡֤ʤ" #~ msgid "Pass arguments on the stack" #~ msgstr "򥹥åϤˤ" #~ msgid "Pass arguments in registers" #~ msgstr "쥸Ϥˤ" #~ msgid "Enable new features under development" #~ msgstr "ȯοǽͭˤ" #~ msgid "Disable new features under development" #~ msgstr "ȯοǽ̵ˤ" #~ msgid "Use the BK register as a general purpose register" #~ msgstr "BK 쥸ѥ쥸ȤƻѤ" #~ msgid "Do not allocate BK register" #~ msgstr "BK 쥸ݤʤ" #~ msgid "Enable use of DB instruction" #~ msgstr "DB ̿λѤͭˤ" #~ msgid "Disable use of DB instruction" #~ msgstr "DB ̿λѤ̵ˤ" #~ msgid "Enable debugging" #~ msgstr "ǥХåͭˤ" #~ msgid "Disable debugging" #~ msgstr "ǥХå̵ˤ" #~ msgid "Force constants into registers to improve hoisting" #~ msgstr "夲(hoist)뤿쥸˳Ƥ뤳Ȥפ" #~ msgid "Don't force constants into registers" #~ msgstr "Υ쥸Ƥפʤ" #~ msgid "Force RTL generation to emit valid 3 operand insns" #~ msgstr "RTL ˤĤơ 3 ڥ̿פ" #~ msgid "Allow RTL generation to emit invalid 3 operand insns" #~ msgstr "RTL ˤĤơ̵ 3 ڥ̿Ƥ" #~ msgid "Allow unsigned interation counts for RPTB/DB" #~ msgstr "̵ RPTB/DB ѤȿȤƤ" #~ msgid "Disallow unsigned iteration counts for RPTB/DB" #~ msgstr "̵ RPTB/DB ѤȿȤƤʤ" #~ msgid "Preserve all 40 bits of FP reg across call" #~ msgstr "ƤӽФδ FP 쥸 40 ӥåƤ¸" #~ msgid "Only preserve 32 bits of FP reg across call" #~ msgstr "ƤӽФδ FP 쥸 32 ӥåȤ¸" #~ msgid "Enable parallel instructions" #~ msgstr "̿ͭˤ" #~ msgid "Disable parallel instructions" #~ msgstr "̵̿ˤ" #~ msgid "Enable MPY||ADD and MPY||SUB instructions" #~ msgstr "MPY||ADD MPY||SUB ̿ͭˤ" #~ msgid "Disable MPY||ADD and MPY||SUB instructions" #~ msgstr "MPY||ADD MPY||SUB ̵̿ˤ" #~ msgid "Assume that pointers may be aliased" #~ msgstr "ݥ󥿤̾Ȥʤꤦ뤳ȤȤ" #~ msgid "Assume that pointers not aliased" #~ msgstr "ݥ󥿤̾ˤʤʤȤߤʤ" #~ msgid "Specify maximum number of iterations for RPTS" #~ msgstr "RPTS Ѥκȿꤹ" #~ msgid "Select CPU to generate code for" #~ msgstr "ɤ CPU 򤹤" #~ msgid "Generate code for the C400" #~ msgstr "C400 ѤΥɤ" #~ msgid "Generate code for the C300" #~ msgstr "C300 ѤΥɤ" #~ msgid "Generate code for c1" #~ msgstr "c1 ѤΥɤ" #~ msgid "Generate code for c2" #~ msgstr "c2 ѤΥɤ" #~ msgid "Generate code for c32" #~ msgstr "c32 ѤΥɤ" #~ msgid "Generate code for c34" #~ msgstr "c34 ѤΥɤ" #~ msgid "Use standard calling sequence, with arg count word" #~ msgstr "ɸŪƤӽФȤ word Ĥ" #~ msgid "Place arg count in a nop instruction (faster than push)" #~ msgstr "nop ̿˰Ȥ֤ (push ®)" #~ msgid "Don't push arg count, depend on symbol table" #~ msgstr "Ȥ push ܥơ֥򤢤Ƥˤ" #~ msgid "Use data cache for volatile mem refs (default)" #~ msgstr "volatile 껲ѥǡåѤ(ǥե)" #~ msgid "Don't use data cache for volatile mem refs" #~ msgstr "volatile 껲ѤˤϥǡåԤʤ" #~ msgid "Bypass data cache for volatile mem refs" #~ msgstr "volatile 껲Ѥˤ cache 줿ǡ򤹤" #~ msgid "Use 64-bit longs" #~ msgstr "64 ӥå long Ѥ" #~ msgid "Use cc- and libc-compatible 32-bit longs" #~ msgstr "cc- libc ߴ 32 ӥå long Ѥ" #~ msgid "Bad modes_tieable_p for register %s, mode1 %s, mode2 %s" #~ msgstr "쥸 %s ˤȤä modes_tieable_p, mode1 %s, mode2 %s" #~ msgid "Enable use of conditional move instructions" #~ msgstr "Ū move ̿Ѥͭˤ" #~ msgid "Disable use of conditional move instructions" #~ msgstr "Ū move ̿Ѥ̵ˤ" #~ msgid "Debug argument support in compiler" #~ msgstr "ѥΥǥХå򥵥ݡȤ" #~ msgid "Debug stack support in compiler" #~ msgstr "ѥΥǥХåå򥵥ݡȤ" #~ msgid "Debug memory address support in compiler" #~ msgstr "ѥΥǥХåꥢɥ쥹򥵥ݡȤ" #~ msgid "Make adjacent short instructions parallel if possible." #~ msgstr "ǽʤܤû̿󲽤" #~ msgid "Do not make adjacent short instructions parallel." #~ msgstr "ܤû̿󲽤ʤ" #~ msgid "Link programs/data to be in external memory by default" #~ msgstr "ץ/ǡǥեȤdz˥󥯤" #~ msgid "Link programs/data to be in onchip memory by default" #~ msgstr "ץ/ǡǥեȤǥå׾Υ˥󥯤" #~ msgid "Change the branch costs within the compiler" #~ msgstr "ѥǤʬȤѹ" #~ msgid "Change the threshold for conversion to conditional execution" #~ msgstr "Ūʼ¹ԤؤѹΤͤѹ" #~ msgid "Stack size > 32k" #~ msgstr "å > 32k" #~ msgid "inline float constants not supported on this host" #~ msgstr "ΥۥȤǤϥ饤ư򥵥ݡȤƤޤ" #~ msgid "Profiling not implemented yet." #~ msgstr "ץե󥰤ϡޤƤޤ" #~ msgid "Trampolines not yet implemented" #~ msgstr "Trampoline ϡޤƤޤ" #~ msgid "Generate code the unix assembler can handle" #~ msgstr "unix ֥餬Ǥ륳ɤ" #~ msgid "Generate code an embedded assembler can handle" #~ msgstr "ߥ֥餬Ǥ륳ɤ" #~ msgid "fr30_print_operand_address: unhandled address" #~ msgstr "fr30_print_operand_address: ʤɥ쥹Ǥ" #~ msgid "fr30_print_operand: unrecognised %p code" #~ msgstr "fr30_print_operand: ǧǤʤ %p ɤǤ" #~ msgid "fr30_print_operand: unrecognised %b code" #~ msgstr "fr30_print_operand: ǧǤʤ %b ɤǤ" #~ msgid "fr30_print_operand: unrecognised %B code" #~ msgstr "fr30_print_operand: ǧǤʤ %B ɤǤ" #~ msgid "fr30_print_operand: invalid operand to %A code" #~ msgstr "fr30_print_operand: %A ɤФ̵ʱ黻ҤǤ" #~ msgid "fr30_print_operand: invalid %x code" #~ msgstr "fr30_print_operand: ̵ %x ɤǤ" #~ msgid "fr30_print_operand: invalid %F code" #~ msgstr "fr30_print_operand: ̵ %F ɤǤ" #~ msgid "fr30_print_operand: unknown code" #~ msgstr "fr30_print_operand: ʥɤǤ" #~ msgid "fr30_print_operand: unhandled MEM" #~ msgstr "fr30_print_operand: ʤ MEM Ǥ" #~ msgid "Assume small address space" #~ msgstr "⡼륢ɥ쥹֤Ȥߤʤ" #~ msgid "-ms2600 is used without -ms." #~ msgstr "-ms2600 -ms ʤǻȤޤ" #~ msgid "Only initialized variables can be placed into the 8-bit area." #~ msgstr "8 ӥåΰ֤Ǥѿޤ" #~ msgid "Generate H8/S code" #~ msgstr "H8/S ɤ" #~ msgid "Do not generate H8/S code" #~ msgstr "H8/S ɤʤ" #~ msgid "Generate H8/S2600 code" #~ msgstr "H8/S2600 ɤ" #~ msgid "Do not generate H8/S2600 code" #~ msgstr "H8/S2600 ɤʤ" #~ msgid "Make integers 32 bits wide" #~ msgstr " 32 ӥåȤ" #~ msgid "Use registers for argument passing" #~ msgstr "쥸Ϥˤ" #~ msgid "Do not use registers for argument passing" #~ msgstr "쥸Ϥˤʤ" #~ msgid "Consider access to byte sized memory slow" #~ msgstr "Хȥñ̤Υꥢ٤Ȥθ" #~ msgid "Enable linker relaxing" #~ msgstr "󥫤 -relax ץͭˤ" #~ msgid "Generate H8/300H code" #~ msgstr "H8/300H ɤ" #~ msgid "Do not generate H8/300H code" #~ msgstr "H8/300H ɤʤ" #~ msgid "Use H8/300 alignment rules" #~ msgstr "H8/300 饤ȵ§Ѥ" #~ msgid "real name is too long - alias ignored" #~ msgstr "̾Ĺޤ - ̵̾뤵ޤ" #~ msgid "alias name is too long - alias ignored" #~ msgstr "̾Ĺޤ - ̵̾뤵ޤ" #~ msgid "junk at end of #pragma map" #~ msgstr "#pragma map ν˥ߤޤ" #~ msgid "malformed #pragma map, ignored" #~ msgstr " #pragma map̵뤵ޤ" #~ msgid "Generate char instructions" #~ msgstr "ʸ̿" #~ msgid "Do not generate char instructions" #~ msgstr "ʸ̿ʤ" #~ msgid "Use the Cygwin interface" #~ msgstr "Cygwin 󥿡եѤ" #~ msgid "Use the Mingw32 interface" #~ msgstr "Mingw32 󥿡եѤ" #~ msgid "Create GUI application" #~ msgstr "GUI ץꥱ" #~ msgid "Don't set Windows defines" #~ msgstr "Windows define ꤷʤ" #~ msgid "Set Windows defines" #~ msgstr "Windows define ꤹ" #~ msgid "Create console application" #~ msgstr "󥽡륢ץꥱ" #~ msgid "Generate code for a DLL" #~ msgstr "DLL ѤΥɤ" #~ msgid "Ignore dllimport for functions" #~ msgstr "ؿؤ dllimport ̵뤹" #~ msgid "Use Mingw-specific thread support" #~ msgstr "Mingw ͭΥåɥݡȤѤ" #~ msgid "-f%s ignored for target (all code is position independent)" #~ msgstr "-f%s ϥåȤ̵뤵ޤ (ƤΥɤϰ¸Ǥ)" #~ msgid "Internal gcc abort from %s:%d" #~ msgstr "gcc %s:%d" #~ msgid "The local variable `insn' has the value:" #~ msgstr "Υѿ `insn' ͤäƤޤ:" #~ msgid "Retain standard MXDB information" #~ msgstr "ɸ MXDB ݻ" #~ msgid "Retain legend information" #~ msgstr "legend ݻ" #~ msgid "Generate external legend information" #~ msgstr " legend " #~ msgid "Emit identifying info in .s file" #~ msgstr ".s ե˼̻ҾФ" #~ msgid "Warn when a function arg is a structure" #~ msgstr "ؿΰ¤Τäٹ𤹤" #~ msgid "argument is a structure" #~ msgstr "¤ΤǤ" #~ msgid "-mbnu210 is ignored (option is obsolete)." #~ msgstr "-mbnu210 ̵뤵ޤ(Ѥ줿ץǤ)" #~ msgid "bad value (%s) for -march= switch" #~ msgstr "-march= åФ (%s)" #~ msgid "bad value (%s) for -mcpu= switch" #~ msgstr "-mcpu= åФ (%s)" #~ msgid "Register '%c' is unknown" #~ msgstr "쥸 '%c' Ǥ" #~ msgid "Register '%c' already specified in allocation order" #~ msgstr "쥸 '%c' ϴ˳ݽǻꤵƤޤ" #~ msgid "-mregparm=%d is not between 0 and %d" #~ msgstr "-mregparm=%d 0 %d δ֤ǤϤޤ" #~ msgid "-malign-loops=%d is not between 0 and %d" #~ msgstr "-malign-loops=%d 0 %d δ֤ǤϤޤ" #~ msgid "-malign-jumps=%d is not between 0 and %d" #~ msgstr "-malign-jumps=%d 0 %d δ֤ǤϤޤ" #~ msgid "-malign-functions=%d is not between 0 and %d" #~ msgstr "-malign-functions=%d 0 %d δ֤ǤϤޤ" #~ msgid "-mpreferred-stack-boundary=%d is not between 2 and 31" #~ msgstr "-mpreferred-stack-boundary=%d 2 31 δ֤ǤϤޤ" #~ msgid "-mbranch-cost=%d is not between 0 and 5" #~ msgstr "-mbranch-cost=%d 0 5 δ֤ǤϤޤ" #~ msgid "floating constant misused" #~ msgstr "ưȤ»ͤޤ" #~ msgid "invalid UNSPEC as operand" #~ msgstr "ڥɤȤ̵ UNSPEC" #~ msgid "invalid expression as operand" #~ msgstr "ڥɤȤ̵ʼ" #~ msgid "selector must be an immediate" #~ msgstr "쥯¨ͤǤʤФʤޤ" #~ msgid "mask must be an immediate" #~ msgstr "ޥ¨ͤǤʤФʤޤ" #~ msgid "half-pic init called on systems that don't support it." #~ msgstr "half-pic 򥵥ݡȤƤʤƥǸƤӽФޤ" #~ msgid "Same as -mcpu=i386" #~ msgstr "-mcpu=i386 Ʊ" #~ msgid "Same as -mcpu=i486" #~ msgstr "-mcpu=i486 Ʊ" #~ msgid "Same as -mcpu=pentium" #~ msgstr "-mcpu=pentium Ʊ" #~ msgid "Same as -mcpu=pentiumpro" #~ msgstr "-mcpu=pentiumpro Ʊ" #~ msgid "Alternate calling convention" #~ msgstr "ƤӽФؤ" #~ msgid "Use normal calling convention" #~ msgstr "̤θƤӽФȤ" #~ msgid "Align some doubles on dword boundary" #~ msgstr "double dword ˥饤Ȥ" #~ msgid "Align doubles on word boundary" #~ msgstr "double word ˥饤Ȥ" #~ msgid "Uninitialized locals in .bss" #~ msgstr ".bss ˤʤΤϽʤ" #~ msgid "Uninitialized locals in .data" #~ msgstr ".data ˤʤΤϽʤ" #~ msgid "Use IEEE math for fp comparisons" #~ msgstr "ưӤ IEEE ʤȤ" #~ msgid "Do not use IEEE math for fp comparisons" #~ msgstr "ưӤ IEEE ʤȤʤ" #~ msgid "Return values of functions in FPU registers" #~ msgstr "FPU 쥸εǽ֤ͤ" #~ msgid "Do not return values of functions in FPU registers" #~ msgstr "FPU 쥸εǽ֤ͤʤ" #~ msgid "Do not generate sin, cos, sqrt for FPU" #~ msgstr "FPU Ѥ sin, cos, sqrt ʤ" #~ msgid "Generate sin, cos, sqrt for FPU" #~ msgstr "FPU Ѥ sin, cos, sqrt " #~ msgid "Omit the frame pointer in leaf functions" #~ msgstr "üδؿǤϥե졼ݥ󥿤ά" #~ msgid "Enable stack probing" #~ msgstr "åõͭˤ" #~ msgid "Emit Intel syntax assembler opcodes" #~ msgstr "Intel 󥿥åΥ֥̿ǤФ" #~ msgid "Align destination of the string operations" #~ msgstr "ʸν򥢥饤Ȥ" #~ msgid "Do not align destination of the string operations" #~ msgstr "ʸν򥢥饤Ȥʤ" #~ msgid "Inline all known string operations" #~ msgstr "ΤƤʸ inline ˤ" #~ msgid "Do not inline all known string operations" #~ msgstr "ΤƤʸ inline ˤʤ" #~ msgid "Use push instructions to save outgoing arguments" #~ msgstr "Ϥ򥻡֤뤿 push ̿Ȥ" #~ msgid "Do not use push instructions to save outgoing arguments" #~ msgstr "Ϥ򥻡֤뤿ˤ push ̿Ȥʤ" #~ msgid "sizeof(long double) is 16." #~ msgstr "sizeof(long double) 16 Ȥ롣" #~ msgid "sizeof(long double) is 12." #~ msgstr "sizeof(long double) 12 Ȥ롣" #~ msgid "Schedule code for given CPU" #~ msgstr "Ϳ CPU ѤΥɤ򥹥塼뤹" #~ msgid "Generate code for given CPU" #~ msgstr "Ϳ CPU ѤΥɤ" #~ msgid "Control allocation order of integer registers" #~ msgstr "쥸γݽ椹" #~ msgid "Number of registers used to pass integer arguments" #~ msgstr "쥸οϤ˻Ȥ" #~ msgid "Loop code aligned to this power of 2" #~ msgstr "롼ץɤ򤳤ͤ˥饤Ȥ" #~ msgid "Jump targets are aligned to this power of 2" #~ msgstr "򤳤ͤ˥饤Ȥ" #~ msgid "Function starts are aligned to this power of 2" #~ msgstr "ؿγϰ֤򤳤ͤ˥饤Ȥ" #~ msgid "Attempt to keep stack aligned to this power of 2" #~ msgstr "Ǥå򤳤ͤ˥饤Ȥ" #~ msgid "Branches are this expensive (1-5, arbitrary units)" #~ msgstr "֥ΥȤؼ (1-5, ǤդθĿ)" #~ msgid "Profiling uses mcount" #~ msgstr "ץե mcount Ѥ" #~ msgid "Emit half-PIC code" #~ msgstr "Ⱦ PIC ɤФ" #~ msgid "Emit ELF object code" #~ msgstr "ELF ֥ȥɤФ" #~ msgid "Emit ROSE object code" #~ msgstr "ROSE ֥ȥɤФ" #~ msgid "Symbols have a leading underscore" #~ msgstr "ܥƬ˥Ĥ" #~ msgid "Align to >word boundaries" #~ msgstr "ɶ礭˥饤󤹤" #~ msgid "Use mcount for profiling" #~ msgstr "ץեѤ mcount Ѥ" #~ msgid "Use mcount_ptr for profiling" #~ msgstr "ץեΤ mcount_ptr Ѥ" #~ msgid "Generate ELF output" #~ msgstr "ELF Ϥ" #~ msgid "Use Mingw32 interface" #~ msgstr "Mingw32 󥿡եѤ" #~ msgid "Use Cygwin interface" #~ msgstr "Cygwin 󥿡եѤ" #~ msgid "Use bare Windows interface" #~ msgstr "Ǥ Windows 󥿡եѤ" #~ msgid "`%s' declared as both exported to and imported from a DLL." #~ msgstr "`%s' DLL importDLL export ξȤޤ" #~ msgid "Environment variable DJGPP not defined." #~ msgstr "Ķѿ DJGPP Ƥޤ" #~ msgid "Environment variable DJGPP points to missing file '%s'." #~ msgstr "Ķѿ DJGPP Ĥʤե '%s' 򼨤Ƥޤ" #~ msgid "Environment variable DJGPP points to corrupt file '%s'." #~ msgstr "Ķѿ DJGPP 줿ե '%s' 򼨤Ƥޤ" #~ msgid "Generate code which uses the FPU" #~ msgstr "ư˥åȤѤ륳ɤʤ" #~ msgid "Do not generate code which uses the FPU" #~ msgstr "ư˥åȤѤ륳ɤʤ" #~ msgid "sorry, not implemented: #pragma align NAME=SIZE" #~ msgstr "ǰƤޤ: #pragma align NAME=SIZE" #~ msgid "malformed #pragma align - ignored" #~ msgstr " #pragma align - ̵뤵ޤ" #~ msgid "sorry, not implemented: #pragma noalign NAME" #~ msgstr "ǰƤޤ: #pragma noalign NAME" #~ msgid "stack limit expression is not supported" #~ msgstr "å¼դޤ" #~ msgid "Generate SA code" #~ msgstr "SA ɤ" #~ msgid "Generate SB code" #~ msgstr "SB ɤ" #~ msgid "Generate KA code" #~ msgstr "KA ɤ" #~ msgid "Generate KB code" #~ msgstr "KB ɤ" #~ msgid "Generate JA code" #~ msgstr "JA ɤ" #~ msgid "Generate JD code" #~ msgstr "JD ɤ" #~ msgid "Generate JF code" #~ msgstr "JF ɤ" #~ msgid "generate RP code" #~ msgstr "RP ɤ" #~ msgid "Generate MC code" #~ msgstr "MC ɤ" #~ msgid "Generate CA code" #~ msgstr "CA ɤ" #~ msgid "Generate CF code" #~ msgstr "CF ɤ" #~ msgid "Use alternate leaf function entries" #~ msgstr "ؿܤѤ" #~ msgid "Do not use alternate leaf function entries" #~ msgstr "ؿѤʤ" #~ msgid "Perform tail call optimization" #~ msgstr "ƤӽФŬԤ" #~ msgid "Do not perform tail call optimization" #~ msgstr "ƤӽФŬԤʤ" #~ msgid "Use complex addressing modes" #~ msgstr "ʣʥɥ쥷󥰥⡼ɤѤ" #~ msgid "Do not use complex addressing modes" #~ msgstr "ʣʥɥ쥷󥰥⡼ɤѤʤ" #~ msgid "Align code to 8 byte boundary" #~ msgstr "ɤ 8 Хȶ˥饤󤹤" #~ msgid "Do not align code to 8 byte boundary" #~ msgstr "ɤ 8 bit ɤ˥饤󤷤ʤ" #~ msgid "Enable compatibility with iC960 v2.0" #~ msgstr "iC960 v2.0 Ȥθߴͭˤ" #~ msgid "Enable compatibility with iC960 v3.0" #~ msgstr "iC960 v3.0 Ȥθߴͭˤ" #~ msgid "Enable compatibility with ic960 assembler" #~ msgstr "ic960 ֥Ȥθߴͭˤ" #~ msgid "Do not permit unaligned accesses" #~ msgstr "饤󤵤ʤĤʤ" #~ msgid "Permit unaligned accesses" #~ msgstr "饤󤵤ʤĤ" #~ msgid "Layout types like Intel's v1.3 gcc" #~ msgstr "Intel v1.3 gcc ͤʥפ֤" #~ msgid "Do not layout types like Intel's v1.3 gcc" #~ msgstr "Intel v1.3 gcc ͤʥפ֤Ԥʤʤ" #~ msgid "Use 64 bit long doubles" #~ msgstr "64 ӥå long double Ѥ" #~ msgid "Enable linker relaxation" #~ msgstr "󥫤δ¤ͭˤ" #~ msgid "Do not enable linker relaxation" #~ msgstr "󥫤δ¤ͭˤʤ" #~ msgid "conflicting architectures defined - using C series" #~ msgstr "礹 architecture ޤ - C ꡼" #~ msgid "conflicting architectures defined - using K series" #~ msgstr "礹 architecture ޤ - K ꡼<" #~ msgid "iC2.0 and iC3.0 are incompatible - using iC3.0" #~ msgstr "iC2.0 iC3.0 Ȥϸߴޤ - iC3.0 Ѥޤ" #~ msgid "The -mlong-double-64 option does not work yet." #~ msgstr "-mlong-double-64 ץϤޤưޤ" #~ msgid "ia64_print_operand: unknown code" #~ msgstr "ia64_print_operand: ʥɤǤ" #~ msgid "value of -mfixed-range must have form REG1-REG2" #~ msgstr "-mfixed-range ͤ REG1-REG2 ͤФʤޤ" #~ msgid "unknown register name: %s" #~ msgstr "ʥ쥸̾Ǥ: %s" #~ msgid "%s-%s is an empty range" #~ msgstr "%s-%s ϰϤǤ" #~ msgid "cannot optimize division for both latency and throughput" #~ msgstr "쥤ƥ󥷤ȥ롼ץåξʬŬϹԤʤޤ" #~ msgid "Generate big endian code" #~ msgstr "ӥåǥΥɤ" #~ msgid "Generate little endian code" #~ msgstr "ȥ륨ǥΥɤ" #~ msgid "Generate code for GNU as" #~ msgstr "GNU as ѤΥɤ" #~ msgid "Generate code for Intel as" #~ msgstr "Intel as ѤΥɤ" #~ msgid "Generate code for GNU ld" #~ msgstr "GNU ld ѤΥɤ" #~ msgid "Generate code for Intel ld" #~ msgstr "Intel ld ѤΥɤ" #~ msgid "Generate code without GP reg" #~ msgstr "GP 쥸ԻѤΥɤ" #~ msgid "Emit stop bits before and after volatile extended asms" #~ msgstr "ĥ֥ volatile stop ӥåȤФ" #~ msgid "Don't emit stop bits before and after volatile extended asms" #~ msgstr "ĥ֥ volatile stop ӥåȤФ" #~ msgid "Emit code for Itanium (TM) processor B step" #~ msgstr "Itanium (TM) ץå B step ѥɤФ" #~ msgid "Use in/loc/out register names" #~ msgstr "in/loc/out 쥸̾Ѥ" #~ msgid "Disable use of sdata/scommon/sbss" #~ msgstr "sdata/scommon/sbss λѤ̵ˤ" #~ msgid "Enable use of sdata/scommon/sbss" #~ msgstr "sdata/scommon/sbss λѤͭˤ" #~ msgid "gp is constant (but save/restore gp on indirect calls)" #~ msgstr "gp ȤâܸƤӽФǤ gp save/restore " #~ msgid "Generate self-relocatable code" #~ msgstr "ʺֲǽɤ" #~ msgid "Generate inline division, optimize for latency" #~ msgstr "쥤ƥ󥷤Ŭ륤饤ʬ" #~ msgid "Generate inline division, optimize for throughput" #~ msgstr "롼ץåȤŬ륤饤ʬ" #~ msgid "Enable Dwarf 2 line debug info via GNU as" #~ msgstr "GNU as ̤ Dwarf2 ιԥǥХåͭˤ" #~ msgid "Disable Dwarf 2 line debug info via GNU as" #~ msgstr "GNU as ̤ Dwarf2 ιԥǥХå̵ˤ" #~ msgid "Specify range of registers to make fixed." #~ msgstr "ꤹ뤿Υ쥸ϰϤꤹ" #~ msgid "-msystem-v and -p are incompatible" #~ msgstr "-msystem-v -p ϸߴޤ" #~ msgid "-msystem-v and -mthreads are incompatible" #~ msgstr "-msystem-v -mthreads ϸߴޤ" #~ msgid "bad value (%s) for -mmodel switch" #~ msgstr "-mmodel åФ (%s)" #~ msgid "bad value (%s) for -msdata switch" #~ msgstr "-msdata åФ (%s)" #~ msgid "const objects cannot go in .sdata/.sbss" #~ msgstr "const ֥Ȥ .sdata/.sbss ֤ޤ" #~ msgid "invalid operand to %s code" #~ msgstr "%s ɤФ̵ʥڥ" #~ msgid "invalid operand to %p code" #~ msgstr "%p ɤФ̵ʥڥ" #~ msgid "invalid operand to %T/%B code" #~ msgstr "%T/%B ɤФ̵ʥڥ" #~ msgid "invalid operand to %N code" #~ msgstr "%N ɤФ̵ʥڥ" #~ msgid "Display compile time statistics" #~ msgstr "ѥͤɽ" #~ msgid "Align all loops to 32 byte boundary" #~ msgstr "ƤΥ롼פ 32 Хȶ˥饤󤹤" #~ msgid "Only issue one instruction per cycle" #~ msgstr "˰Ĥ̿ȯԤ" #~ msgid "Prefer branches over conditional execution" #~ msgstr "μ¹Ԥʬͥ褹" #~ msgid "Code size: small, medium or large" #~ msgstr "ɥ: small, medium large" #~ msgid "Small data area: none, sdata, use" #~ msgstr "⡼ǡΰ: none, sdata, use" #~ msgid "-f%s ignored for 68HC11/68HC12 (not supported)" #~ msgstr "-f%s 68HC11/68HC12 ѤȤƤ̵뤵ޤ (ݡȤޤ)" #~ msgid "Compile with 16-bit integer mode" #~ msgstr "16 ӥå⡼ɤǥѥ뤹" #~ msgid "Compile with 32-bit integer mode" #~ msgstr "32 ӥå⡼ɤǥѥ뤹" #~ msgid "Auto pre/post decrement increment allowed" #~ msgstr "ư pre/post ǥ 󥯥ȤƤ" #~ msgid "Auto pre/post decrement increment not allowed" #~ msgstr "ư pre/post ǥ 󥯥ȤƤʤ" #~ msgid "Compile for a 68HC11" #~ msgstr "68HC11 Ѥ˥ѥ뤹" #~ msgid "Compile for a 68HC12" #~ msgstr "68HC12 Ѥ˥ѥ뤹" #~ msgid "Specify the register allocation order" #~ msgstr "쥸ݽꤹ" #~ msgid "Indicate the number of soft registers available" #~ msgstr "Ѳǽեȥ쥸ο򼨤" #~ msgid "-malign-loops=%d is not between 1 and %d" #~ msgstr "-malign-loops=%d 1 %d δ֤ˤʤäƤޤ" #~ msgid "-malign-jumps=%d is not between 1 and %d" #~ msgstr "-malign-jumps=%d 1 %d δ֤ˤʤäƤޤ" #~ msgid "-malign-functions=%d is not between 1 and %d" #~ msgstr "-malign-functions=%d 1 %d δ֤ˤʤäƤޤ" #~ msgid "-fPIC is not currently supported on the 68000 or 68010\n" #~ msgstr "ΤȤ 68000 68010 Ǥ -fPIC ݡȤƤޤ\n" #~ msgid "Internal gcc monitor: short-branch(%x)" #~ msgstr " gcc ˥: 硼ȥ֥(%x)" #~ msgid "Internal gcc error: Can't express symbolic location" #~ msgstr " gcc 顼: ֤򥷥ܥɽǤޤ" #~ msgid "argument #%d is a structure" #~ msgstr " #%d Ϲ¤ΤǤ" #~ msgid "%R not followed by %B/C/D/E" #~ msgstr "%R θ %B/C/D/E ֤ޤ" #~ msgid "invalid %x/X value" #~ msgstr "̵ %x/X ͤǤ" #~ msgid "invalid %H value" #~ msgstr "̵ %H ͤǤ" #~ msgid "invalid %h value" #~ msgstr "̵ %h ͤǤ" #~ msgid "invalid %Q value" #~ msgstr "̵ %Q ͤǤ" #~ msgid "invalid %q value" #~ msgstr "̵ %q ͤǤ" #~ msgid "invalid %o value" #~ msgstr "̵ %o ͤǤ" #~ msgid "invalid %p value" #~ msgstr "̵ %p ͤǤ" #~ msgid "invalid %s/S value" #~ msgstr "̵ %s/S ͤǤ" #~ msgid "invalid %P operand" #~ msgstr "̵ %P ڥɤǤ" #~ msgid "invalid %B value" #~ msgstr "̵ %B ͤǤ" #~ msgid "invalid %C value" #~ msgstr "̵ %C ͤǤ" #~ msgid "invalid %D value" #~ msgstr "̵ %D ͤǤ" #~ msgid "invalid %E value" #~ msgstr "̵ %E ͤǤ" #~ msgid "`%d' operand isn't a register" #~ msgstr "`%d' ڥɤ쥸ǤϤޤ" #~ msgid "invalid %r value" #~ msgstr "̵ %r ͤǤ" #~ msgid "operand is r0" #~ msgstr "ڥɤ r0 Ǥ" #~ msgid "operand is const_double" #~ msgstr "ڥɤ const_double Ǥ" #~ msgid "invalid code" #~ msgstr "̵ʥɤǤ" #~ msgid "-mtrap-large-shift and -mhandle-large-shift are incompatible" #~ msgstr "-mtrap-large-shift -mhandle-large-shift ϶¸Ǥޤ" #~ msgid "Invalid option `-mshort-data-%s'" #~ msgstr "̵ʥץ `-mshort-data-%s'" #~ msgid "-mshort-data-%s is too large " #~ msgstr "-mshort-data-%s 礭ޤ" #~ msgid "-mshort-data-%s and PIC are incompatible" #~ msgstr "-mshort-data-%s PIC ϶¸Ǥޤ" #~ msgid "Invalid option `-mstack-increment=%s'" #~ msgstr "`-mstack-increment=%s' ̵ʥץǤ" #~ msgid "Inline constants if it can be done in 2 insns or less" #~ msgstr "2 ̿ʲǹԤʤѽ򥤥饤ˤ" #~ msgid "inline constants if it only takes 1 instruction" #~ msgstr "1 ̿Ȥѽ򥤥饤ˤ" #~ msgid "Set maximum alignment to 4" #~ msgstr "祢饤Ȥ 4 ꤹ" #~ msgid "Set maximum alignment to 8" #~ msgstr "祢饤Ȥ 8 ꤹ" #~ msgid "Do not use the divide instruction" #~ msgstr "ʬ̿Ѥʤ" #~ msgid "Do not arbitary sized immediates in bit operations" #~ msgstr "ӥåȱ黻Ǥ¨ͥĴ䤷ʤ" #~ msgid "Always treat bitfield as int-sized" #~ msgstr "ӥåȥեɤ int ΥȤư" #~ msgid "Force functions to be aligned to a 4 byte boundary" #~ msgstr "ؿŪ 4 Хȶ˥饤󤹤" #~ msgid "Force functions to be aligned to a 2 byte boundary" #~ msgstr "ؿŪ 2 Хȶ˥饤󤹤" #~ msgid "Emit call graph information" #~ msgstr "ƤӽФվФ" #~ msgid "Prefer word accesses over byte accesses" #~ msgstr "Хȥɥ" #~ msgid "Generate code for the M*Core M340" #~ msgstr "M*Core M340 ѤΥɤ" #~ msgid "Maximum amount for a single stack increment operation" #~ msgstr "ñ쥹å󥯥κ" #~ msgid "-mips%d not supported" #~ msgstr "-mips%d ϥݡȤޤ" #~ msgid "bad value (%s) for -mips switch" #~ msgstr "-mips åФ (%s)" #~ msgid "bad value (%s) for -mabi= switch" #~ msgstr "-mabi= åФ (%s)" #~ msgid "-mabi=%s does not support -mips%d" #~ msgstr "-mabi=%s -mips%d 򥵥ݡȤޤ" #~ msgid "The -mabi=32 support does not work yet." #~ msgstr "-mabi=32 ݡȤϤޤưޤ" #~ msgid "This target does not support the -mabi switch." #~ msgstr "ΥåȤ -mabi å򥵥ݡȤޤ" #~ msgid "-mcpu=%s does not support -mips%d" #~ msgstr "-mcpu=%s -mips%d 򥵥ݡȤޤ" #~ msgid "-mips%d does not support 64 bit fp registers" #~ msgstr "-mips%d 64 bit fp 쥸򥵥ݡȤޤ" #~ msgid "-mips%d does not support 64 bit gp registers" #~ msgstr "-mips%d 64 bit gp 쥸򥵥ݡȤƤޤ" #~ msgid "-G is incompatible with PIC code which is the default" #~ msgstr "-G ϥǥեȤ PIC ɤȶ¸Ǥޤ" #~ msgid "-membedded-pic and -mabicalls are incompatible" #~ msgstr "-membedded-pic -mabicalls ϶¸Ǥޤ" #~ msgid "-G and -membedded-pic are incompatible" #~ msgstr "-G -membedded-pic ϶¸Ǥޤ" #~ msgid "Invalid option `entry%s'" #~ msgstr "̵ʥץ `entry%s'" #~ msgid "-mentry is only meaningful with -mips-16" #~ msgstr "-mentry -mips-16 ꤷȤ̣ޤ" #~ msgid "internal error: %%) found without a %%( in assembler pattern" #~ msgstr "顼: ֥ѥ %%( ʤ %%) Ĥޤ" #~ msgid "internal error: %%] found without a %%[ in assembler pattern" #~ msgstr "顼: ֥ѥ %%[ ʤ %%] Ĥޤ" #~ msgid "internal error: %%> found without a %%< in assembler pattern" #~ msgstr "顼: ֥ѥ %%< ʤ %%> Ĥޤ" #~ msgid "internal error: %%} found without a %%{ in assembler pattern" #~ msgstr "顼: ֥ѥ %%{ ʤ %%} Ĥޤ" #~ msgid "PRINT_OPERAND: Unknown punctuation '%c'" #~ msgstr "PRINT_OPERAND: ʶ '%c'" #~ msgid "PRINT_OPERAND null pointer" #~ msgstr "PRINT_OPERAND NULL ݥ" #~ msgid "invalid use of %%d, %%x, or %%X" #~ msgstr "̵ˡ of %%d, %%x, %%X" #~ msgid "PRINT_OPERAND_ADDRESS, null pointer" #~ msgstr "PRINT_OPERAND_ADDRESS, null ݥ" #~ msgid "can't open %s" #~ msgstr "%s 򳫤ޤ" #~ msgid "MIPS ECOFF format does not allow changing filenames within functions with #line" #~ msgstr "MIPS ECOFF Ǥ #line ĴؿǤΥե̾ѹϵĤޤ" #~ msgid "can't rewind %s" #~ msgstr "%s rewind Ǥޤ" #~ msgid "can't write to %s" #~ msgstr "%s ؽ񤭹ޤ" #~ msgid "can't read from %s" #~ msgstr "%s ɹޤ" #~ msgid "can't close %s" #~ msgstr "%s close Ǥޤ" #~ msgid "gp_offset (%ld) or end_offset (%ld) is less than zero." #~ msgstr "gp_offset (%ld) end_offset (%ld) ⾮ʤäƤޤ" #~ msgid "fp_offset (%ld) or end_offset (%ld) is less than zero." #~ msgstr "fp_offset (%ld) end_offset (%ld) ⾮ʤäƤޤ" #~ msgid "can not handle inconsistent calls to `%s'" #~ msgstr "`%s' ؤ̷⤷ƤӽФªǤޤ" #~ msgid "No default crt0.o" #~ msgstr "crt0.o ǥեȤȤʤ" #~ msgid "Use 64-bit int type" #~ msgstr "64 ӥå int Ѥ" #~ msgid "Use 64-bit long type" #~ msgstr "64 ӥå long Ѥ" #~ msgid "Use 32-bit long type" #~ msgstr "32 ӥå long Ѥ" #~ msgid "Optimize lui/addiu address loads" #~ msgstr "lui/addiu ɥ쥹ɤŬ" #~ msgid "Don't optimize lui/addiu address loads" #~ msgstr "lui/addiu ɥ쥹ɤŬʤ" #~ msgid "Use MIPS as" #~ msgstr "MIPS as Ѥ" #~ msgid "Use GNU as" #~ msgstr "GNU as Ѥ" #~ msgid "Use symbolic register names" #~ msgstr "ܥå쥸̾Ѥ" #~ msgid "Don't use symbolic register names" #~ msgstr "ܥå쥸̾Ѥʤ" #~ msgid "Use GP relative sdata/sbss sections" #~ msgstr "GP Ϣ sdata/sbss Ѥ" #~ msgid "Don't use GP relative sdata/sbss sections" #~ msgstr "GP Ϣ sdata/sbss Ѥʤ" #~ msgid "Output compiler statistics" #~ msgstr "ѥפϤ" #~ msgid "Don't output compiler statistics" #~ msgstr "ѥפϤʤ" #~ msgid "Don't optimize block moves" #~ msgstr "֥åưŬʤ" #~ msgid "Optimize block moves" #~ msgstr "֥åưŬ" #~ msgid "Use mips-tfile asm postpass" #~ msgstr "asm mips-tfile Ѥ" #~ msgid "Don't use mips-tfile asm postpass" #~ msgstr "asm mips-tfile Ѥʤ" #~ msgid "Use hardware floating point" #~ msgstr "ϡɥưѤ" #~ msgid "Use 64-bit FP registers" #~ msgstr "64 ӥå FP 쥸Ѥ" #~ msgid "Use 32-bit FP registers" #~ msgstr "32 ӥå FP 쥸Ѥ" #~ msgid "Use 64-bit general registers" #~ msgstr "64 ӥåȰ̥쥸Ѥ" #~ msgid "Use 32-bit general registers" #~ msgstr "32 ӥåȰ̥쥸Ѥ" #~ msgid "Use Irix PIC" #~ msgstr "Irix PIC Ѥ" #~ msgid "Don't use Irix PIC" #~ msgstr "Irix PIC Ѥʤ" #~ msgid "Use OSF PIC" #~ msgstr "OSF PIC Ѥ" #~ msgid "Don't use OSF PIC" #~ msgstr "OSF PIC Ѥʤ" #~ msgid "Use indirect calls" #~ msgstr "ܸƤӽФѤ" #~ msgid "Don't use indirect calls" #~ msgstr "ܸƤӽФѤʤ" #~ msgid "Use embedded PIC" #~ msgstr " PIC Ѥ" #~ msgid "Don't use embedded PIC" #~ msgstr " PIC Ѥʤ" #~ msgid "Use ROM instead of RAM" #~ msgstr "RAM ROM Ѥ" #~ msgid "Don't use ROM instead of RAM" #~ msgstr "RAM ROM Ѥʤ" #~ msgid "Put uninitialized constants in ROM (needs -membedded-data)" #~ msgstr "̤ ROM ֤( -membedded-data)" #~ msgid "Don't put uninitialized constants in ROM" #~ msgstr "̤ ROM ֤ʤ" #~ msgid "Use big-endian byte order" #~ msgstr "ӥåǥΥХȽѤ" #~ msgid "Use little-endian byte order" #~ msgstr "ȥ륨ǥΥХȽѤ" #~ msgid "Use single (32-bit) FP only" #~ msgstr "ñ(32bit) FP ΤߤѤ" #~ msgid "Don't use single (32-bit) FP only" #~ msgstr "ñ(32bit) FP ʳѤ" #~ msgid "Use multiply accumulate" #~ msgstr "軻̿Ѥ" #~ msgid "Don't use multiply accumulate" #~ msgstr "軻û̿Ѥʤ" #~ msgid "Work around early 4300 hardware bug" #~ msgstr " 4300 ϡɥХнԤ" #~ msgid "Don't work around early 4300 hardware bug" #~ msgstr " 4300 ϡɥХнԤʤ" #~ msgid "Optimize for 4650" #~ msgstr "4650 Ѥ˺Ŭ" #~ msgid "Optimize for 3900" #~ msgstr "3900 Ѥ˺Ŭ" #~ msgid "Trap on integer divide by zero" #~ msgstr "Υȥåפ" #~ msgid "Don't trap on integer divide by zero" #~ msgstr "Υȥåפʤ" #~ msgid "Trap on integer divide overflow" #~ msgstr "ΥСեȥåפ" #~ msgid "Don't trap on integer divide overflow" #~ msgstr "ΥСեȥåפʤ" #~ msgid "Specify CPU for scheduling purposes" #~ msgstr "̿᥹塼󥰤Τ CPU ꤹ" #~ msgid "Specify MIPS ISA" #~ msgstr "MIPS ISA ꤹ" #~ msgid "Use mips16 entry/exit psuedo ops" #~ msgstr "mips16 entry/exit ڥɤѤ" #~ msgid "Don't use MIPS16 instructions" #~ msgstr "MIPS16 ̿Ѥʤ" #~ msgid "mips16 function profiling" #~ msgstr "mips16 ؿץե" #~ msgid "Work around hardware multiply bug" #~ msgstr "ϡɥ軻Хн褹" #~ msgid "Do not work around hardware multiply bug" #~ msgstr "ϡɥ軻Хн褷ʤ" #~ msgid "Target the AM33 processor" #~ msgstr "AM33 ץå򥿡åȤȤ" #~ msgid "optimization turned on" #~ msgstr "Ŭͭˤ" #~ msgid "optimization turned off" #~ msgstr "Ŭ̵ˤ" #~ msgid "optimization level restored" #~ msgstr "Ŭ٥򸵤ᤷޤ" #~ msgid "Don't use hardware fp" #~ msgstr "ϡɥưѤʤ" #~ msgid "Alternative calling convention" #~ msgstr "̤θƤӽФѤ" #~ msgid "Pass some arguments in registers" #~ msgstr "Ĥΰϥ쥸Ϥˤ" #~ msgid "Pass all arguments on stack" #~ msgstr "Ƥΰ򥹥åϤˤ" #~ msgid "Optimize for 32532 cpu" #~ msgstr "32532 cpu Ѥ˺Ŭ" #~ msgid "Optimize for 32332 cpu" #~ msgstr "32332 cpu Ѥ˺Ŭ" #~ msgid "Optimize for 32032" #~ msgstr "32032 Ѥ˺Ŭ" #~ msgid "Register sb is zero. Use for absolute addressing" #~ msgstr "sb 쥸򥼥Ȥ롣Хɥ쥹Ѥ" #~ msgid "Do not use register sb" #~ msgstr "sb 쥸Ѥʤ" #~ msgid "Do not use bitfield instructions" #~ msgstr "ӥåȥե̿Ѥʤ" #~ msgid "Use bitfield instructions" #~ msgstr "ӥåȥե̿Ѥ" #~ msgid "Generate code for high memory" #~ msgstr "̥ɥ쥹ѤΥɤ" #~ msgid "Generate code for low memory" #~ msgstr "̥ɥ쥹ѤΥɤ" #~ msgid "32381 fpu" #~ msgstr "32381 ư˥å" #~ msgid "Use multiply-accumulate fp instructions" #~ msgstr "軻-ûư̿Ѥ" #~ msgid "Do not use multiply-accumulate fp instructions" #~ msgstr "軻-ûư̿Ѥʤ" #~ msgid "\"Small register classes\" kludge" #~ msgstr "\"⡼쥸饹\" Υĥϥ(kludge)Ԥʤ" #~ msgid "No \"Small register classes\" kludge" #~ msgstr "\"⡼쥸饹\" Υĥϥ(kludge)Ԥʤʤ" #~ msgid "" #~ "Unknown -mschedule= option (%s).\n" #~ "Valid options are 700, 7100, 7100LC, 7200, and 8000\n" #~ msgstr "" #~ " -mschedule= ץ (%s).\n" #~ "ʥץ 700, 7100, 7100LC, 7200, ڤ 8000 Ǥ\n" #~ msgid "" #~ "Unknown -march= option (%s).\n" #~ "Valid options are 1.0, 1.1, and 2.0\n" #~ msgstr "" #~ " -march= ץ (%s).\n" #~ "ʥץ 1.0, 1.1, ڤ 2.0\n" #~ msgid "PIC code generation is not supported in the portable runtime model\n" #~ msgstr "PIC ϲ¼¹ԻǥǤϥݡȤޤ\n" #~ msgid "PIC code generation is not compatible with fast indirect calls\n" #~ msgstr "PIC Ϲ®ܸƤӽФƤޤ\n" #~ msgid "PIC code generation is not compatible with profiling\n" #~ msgstr "PIC ϥץե󥰤ȤƤޤ\n" #~ msgid "-g is only supported when using GAS on this processor," #~ msgstr "-g ϤΥץåǤ GAS ѤݡȤޤ" #~ msgid "-g option disabled." #~ msgstr "-g ץ̵ޤ" #~ msgid "Do not use hardware floating point" #~ msgstr "ϡɥưѤʤ" #~ msgid "Return floating point results in ac0" #~ msgstr "ưη̤ ac0 ֤" #~ msgid "Return floating point results in memory" #~ msgstr "ưη̤֤" #~ msgid "Generate code for an 11/40" #~ msgstr "11/40 ѤΥɤ" #~ msgid "Generate code for an 11/45" #~ msgstr "11/45 ѤΥɤ" #~ msgid "Generate code for an 11/10" #~ msgstr "11/10 ѤΥɤ" #~ msgid "Use 32 bit int" #~ msgstr "32 ӥåѤ" #~ msgid "Use 16 bit int" #~ msgstr "16 ӥåѤ" #~ msgid "Use 32 bit float" #~ msgstr "32 ӥåưѤ" #~ msgid "Use 64 bit float" #~ msgstr "64 ӥåưѤ" #~ msgid "Target has split I&D" #~ msgstr "åȤ split ̿ȥǡ" #~ msgid "Target does not have split I&D" #~ msgstr "åȤ split ̿ȥǡʤ" #~ msgid "Use UNIX assembler syntax" #~ msgstr "UNIX ֥ʸˡѤ" #~ msgid "Use DEC assembler syntax" #~ msgstr "DEC ֥ʸˡѤ" #~ msgid "Generate little endian data" #~ msgstr "ȥ륨ǥǡ" #~ msgid "Generate big endian data" #~ msgstr "ӥåǥǡ" #~ msgid "Turn on maintainer testing code" #~ msgstr "ƥʥƥȥɤͭˤ" #~ msgid "Enable Transmeta picoJava extensions" #~ msgstr "Transmeta picoJava ĥͭˤ" #~ msgid "Disable Transmeta picoJava extensions" #~ msgstr "Transmeta picoJava ĥ̵ˤ" #~ msgid "Disable reorganization pass" #~ msgstr "̵ˤ" #~ msgid "invalid %%B value" #~ msgstr "̵ %%B " #~ msgid "invalid %%S value" #~ msgstr "̵ %%S " #~ msgid "invalid %%b value" #~ msgstr "̵ %%b " #~ msgid "invalid %%H value" #~ msgstr "̵ %%H " #~ msgid "invalid %%z value" #~ msgstr "̵ %%z " #~ msgid "invalid %%Z value" #~ msgstr "̵ %%Z " #~ msgid "invalid %%k value" #~ msgstr "̵ %%k " #~ msgid "invalid %%j value" #~ msgstr "̵ %%j " #~ msgid "can't have varargs with -mfp-arg-in-fp-regs" #~ msgstr "-mfp-arg-in-fp-regs ȤȲѸİƤޤ" #~ msgid "Always pass floating-point arguments in memory" #~ msgstr "ưϾ˥ϤȤ" #~ msgid "Don't always pass floating-point arguments in memory" #~ msgstr "ưϾ˥ϤȤʤ" #~ msgid "Support message passing with the Parallel Environment" #~ msgstr "ĶǤΥåѥå󥰤򥵥ݡȤ" #~ msgid "Compile for 64-bit pointers" #~ msgstr "64 ӥåȥݥѤ˥ѥ뤹" #~ msgid "Compile for 32-bit pointers" #~ msgstr "32 ӥåȥݥѤ˥ѥ뤹" #~ msgid "-maix64 and POWER architecture are incompatible." #~ msgstr "-maix64 POWER ƥȤǤϸߴޤ" #~ msgid "-maix64 requires PowerPC64 architecture remain enabled." #~ msgstr "PowerPC64 ƥǤʤ -maix64 ͭˤϤǤޤ" #~ msgid "-maix64 required: 64-bit computation with 32-bit addressing not yet supported." #~ msgstr "-maix64 ׵: 32 bit ɥ쥷󥰲 64 bit ׻ϤޤѤǤޤ" #~ msgid "-mmultiple is not supported on little endian systems" #~ msgstr "-mmultiple ϥȥ륨ǥ󥷥ƥǤϼޤ" #~ msgid "-mstring is not supported on little endian systems" #~ msgstr "-mstring ϥȥ륨ǥ󥷥ƥǤϼޤ" #~ msgid "-f%s ignored for AIX (all code is position independent)" #~ msgstr "AIX Ѥ -f%s ̵뤵ޤƤΥɤϰ¸Ǥ" #~ msgid "-ffunction-sections disabled on AIX when debugging" #~ msgstr "AIX ǤϥǥХå -ffunction-sections ̵Ȥޤ" #~ msgid "-fdata-sections not supported on AIX" #~ msgstr "AIX Ǥ -fdata-sections ϼޤ" #~ msgid "Unknown -mdebug-%s switch" #~ msgstr " -mdebug-%s åǤ" #~ msgid "invalid %%f value" #~ msgstr "̵ %%f ͤǤ" #~ msgid "invalid %%F value" #~ msgstr "̵ %%F ͤǤ" #~ msgid "invalid %%G value" #~ msgstr "̵ %%G ͤǤ" #~ msgid "invalid %%j code" #~ msgstr "̵ %%j ɤǤ" #~ msgid "invalid %%J code" #~ msgstr "̵ %%J ɤǤ" #~ msgid "invalid %%K value" #~ msgstr "̵ %%K ͤǤ" #~ msgid "invalid %%p value" #~ msgstr "̵ %%p ͤǤ" #~ msgid "invalid %%q value" #~ msgstr "̵ %%q ͤǤ" #~ msgid "%%S computed all 1's mask" #~ msgstr "%%S Ƥ 1 Υޥ׻ޤ" #~ msgid "%%S computed all 0's mask" #~ msgstr "%%S Ƥ 0 Υޥ׻ޤ" #~ msgid "invalid %%T value" #~ msgstr "̵ %%T ͤǤ" #~ msgid "invalid %%u value" #~ msgstr "̵ %%u ͤǤ" #~ msgid "invalid %%v value" #~ msgstr "̵ %%v ͤǤ" #~ msgid "invalid %%W value" #~ msgstr "̵ %%W ͤǤ" #~ msgid "Use POWER instruction set" #~ msgstr "POWER ̿᥻åȤѤ" #~ msgid "Use POWER2 instruction set" #~ msgstr "POWER2 ̿᥻åȤѤ" #~ msgid "Do not use POWER2 instruction set" #~ msgstr "POWER2 ̿᥻åȤѤʤ" #~ msgid "Do not use POWER instruction set" #~ msgstr "POWER ̿᥻åȤѤʤ" #~ msgid "Use PowerPC instruction set" #~ msgstr "PowerPC ̿᥻åȤѤ" #~ msgid "Do not use PowerPC instruction set" #~ msgstr "PowerPC ̿᥻åȤѤʤ" #~ msgid "Use PowerPC General Purpose group optional instructions" #~ msgstr "PowerPC ӥ롼ץץ̿Ѥ" #~ msgid "Don't use PowerPC General Purpose group optional instructions" #~ msgstr "PowerPC ӥ롼ץץ̿Ѥʤ" #~ msgid "Use PowerPC Graphics group optional instructions" #~ msgstr "PowerPC ե롼ץץ̿Ѥʤ" #~ msgid "Don't use PowerPC Graphics group optional instructions" #~ msgstr "PowerPC ե롼ץץ̿Ѥʤ" #~ msgid "Use PowerPC-64 instruction set" #~ msgstr "PowerPC-64 ̿᥻åȤѤ" #~ msgid "Don't use PowerPC-64 instruction set" #~ msgstr "PowerPC-64 ̿᥻åȤѤʤ" #~ msgid "Use new mnemonics for PowerPC architecture" #~ msgstr "PowerPC ƥѤοˡ˥åѤ" #~ msgid "Use old mnemonics for PowerPC architecture" #~ msgstr "PowerPC ƥѤθŤˡ˥åѤ" #~ msgid "Put everything in the regular TOC" #~ msgstr "Ƥ̾ TOC ֤" #~ msgid "Place floating point constants in TOC" #~ msgstr "ư TOC ֤" #~ msgid "Don't place floating point constants in TOC" #~ msgstr "ư TOC ֤ʤ" #~ msgid "Place symbol+offset constants in TOC" #~ msgstr "ܥ+եå TOC ֤" #~ msgid "Don't place symbol+offset constants in TOC" #~ msgstr "ܥ+եå TOC ֤ʤ" #~ msgid "Place variable addresses in the regular TOC" #~ msgstr "ѿɥ쥹̾ TOC ֤" #~ msgid "Generate load/store multiple instructions" #~ msgstr "ʣ̿Υ/ȥ" #~ msgid "Do not generate load/store multiple instructions" #~ msgstr "ʣ̿Υ/ȥʤ" #~ msgid "Generate string instructions for block moves" #~ msgstr "֥åưѤ string ̿" #~ msgid "Do not generate string instructions for block moves" #~ msgstr "֥åưѤ string ̿ʤ" #~ msgid "Generate load/store with update instructions" #~ msgstr "update ̿Ȱ˥/ȥ̿" #~ msgid "Do not generate load/store with update instructions" #~ msgstr "update ̿Ȱ˥/ȥ̿ʤ" #~ msgid "Generate fused multiply/add instructions" #~ msgstr "ưξ軻/û̿" #~ msgid "Don't generate fused multiply/add instructions" #~ msgstr "ưξ軻/û̿ʤ" #~ msgid "Don't schedule the start and end of the procedure" #~ msgstr "ץ㳫ϤȽλΥ塼Ԥʤʤ" #~ msgid "Use features of and schedule code for given CPU" #~ msgstr "Ϳ줿 CPU Ѥεǽȥ塼륳ɤѤ" #~ msgid "Enable debug output" #~ msgstr "ǥХåϤͭˤ" #~ msgid "RETURN_ADDRESS_OFFSET not supported" #~ msgstr "RETURN_ADDRESS_OFFSET ϥݡȤƤޤ" #~ msgid "Select ABI calling convention." #~ msgstr "ABI ƤӽФ򤹤" #~ msgid "Select method for sdata handling." #~ msgstr "sdata 갷ΤΥ᥽åɤ򤹤" #~ msgid "Align to the base type of the bitfield." #~ msgstr "ӥåȥեɤΥ١פ˥饤󤹤" #~ msgid "Don't align to the base type of the bitfield." #~ msgstr "ӥåȥեɤΥ١פ˥饤󤷤ʤ" #~ msgid "Don't assume that unaligned accesses are handled by the system" #~ msgstr "饤󤵤ʤƥˤäƥϥɥ뤵ȤϤߤʤʤ" #~ msgid "Assume that unaligned accesses are handled by the system" #~ msgstr "饤󤵤ʤƥˤäƥϥɥ뤵Ȥߤʤ" #~ msgid "Produce code relocatable at runtime." #~ msgstr "¹Ի˺ֲǽʥɤ" #~ msgid "Don't produce code relocatable at runtime." #~ msgstr "¹Ի˺ֲǽʥɤ" #~ msgid "Produce little endian code." #~ msgstr "ȥ륨ǥ󥳡ɤ" #~ msgid "Produce big endian code." #~ msgstr "ӥåǥ󥳡ɤ" #~ msgid "Use 128 bit long doubles" #~ msgstr "128 ӥåȤ long double Ѥ" #~ msgid "no description yet" #~ msgstr "Ϥޤޤ" #~ msgid "Use EABI." #~ msgstr "EABI Ѥ롣" #~ msgid "Don't use EABI." #~ msgstr "EABI Ѥʤ" #~ msgid "Use alternate register names." #~ msgstr "إ쥸̾Ѥ" #~ msgid "Don't use alternate register names." #~ msgstr "إ쥸̾Ѥʤ" #~ msgid "Link with libsim.a, libc.a and sim-crt0.o." #~ msgstr "libsim.a, libc.a ڤ sim-crt0.o ȥ󥯤롣" #~ msgid "Link with libads.a, libc.a and crt0.o." #~ msgstr "libads.a, libc.a ڤ crt0.o ȥ󥯤롣" #~ msgid "Link with libyk.a, libc.a and crt0.o." #~ msgstr "libyk.a, libc.a ڤ crt0.o ȥ󥯤롣" #~ msgid "Link with libmvme.a, libc.a and crt0.o." #~ msgstr "libmvme.a, libc.a ڤ crt0.o ȥ󥯤롣" #~ msgid "Set the PPC_EMB bit in the ELF flags header" #~ msgstr "PPC_EMB ӥåȤ ELF ե饰إå˥åȤ" #~ msgid "Bad value for -mcall-%s" #~ msgstr "-mcall-%s åˤȤäƤ" #~ msgid "Bad value for -msdata=%s" #~ msgstr "-msdata=%s åФ" #~ msgid "-mrelocatable and -msdata=%s are incompatible." #~ msgstr "-mrelocatable -msdata=%s Ȥ϶¸Ǥޤ" #~ msgid "-f%s and -msdata=%s are incompatible." #~ msgstr "-f%s -msdata=%s ϶¸Ǥޤ" #~ msgid "-msdata=%s and -mcall-%s are incompatible." #~ msgstr "-msdata=%s -mcall-%s Ȥ϶¸Ǥޤ" #~ msgid "-mrelocatable and -mno-minimal-toc are incompatible." #~ msgstr "-mrelocatable -mno-minimal-toc Ȥ϶¸Ǥޤ" #~ msgid "-mrelocatable and -mcall-%s are incompatible." #~ msgstr "-mrelocatable -mcall-%s Ȥ϶¸Ǥޤ" #~ msgid "-fPIC and -mcall-%s are incompatible." #~ msgstr "-fPIC -mcall-%s ϶¸Ǥޤ" #~ msgid "-mcall-aixdesc must be big endian" #~ msgstr "-mcall-aixdesc ϥӥåǥǤʤФʤޤ" #~ msgid "Generate code for big endian" #~ msgstr "ӥåǥѤΥɤ" #~ msgid "Generate code for little endian" #~ msgstr "ȥ륨ǥѤΥɤ" #~ msgid "Use little-endian byte order for data" #~ msgstr "ǡΥХȽ˥ȥ륨ǥѤ" #~ msgid "%s is not supported by this configuration" #~ msgstr "%s ϤΥե졼ǤϥݡȤޤ" #~ msgid "-mlong-double-64 not allowed with -m64" #~ msgstr "-m64 ⡼ɤǤ -mlong-double-64 ϵĤޤ" #~ msgid "bad value (%s) for -mcmodel= switch" #~ msgstr "-mcmodel= åˤȤä (%s)" #~ msgid "-mcmodel= is not supported on 32 bit systems" #~ msgstr "-mcmodel= 32 bit ƥǤϥݡȤޤ" #~ msgid "profiling does not support code models other than medlow" #~ msgstr "ץե󥰤 medlow ʳΥɥǥǤϥݡȤޤ" #~ msgid "Invalid %%Y operand" #~ msgstr "̵ %%Y ڥ" #~ msgid "Invalid %%A operand" #~ msgstr "̵ %%A ڥ" #~ msgid "Invalid %%B operand" #~ msgstr "̵ %%B ڥ" #~ msgid "Invalid %%c operand" #~ msgstr "̵ %%c ڥ" #~ msgid "Invalid %%C operand" #~ msgstr "̵ %%C ڥ" #~ msgid "Invalid %%d operand" #~ msgstr "̵ %%d ڥ" #~ msgid "Invalid %%D operand" #~ msgstr "̵ %%D ڥ" #~ msgid "Invalid %%f operand" #~ msgstr "̵ %%f ڥ" #~ msgid "long long constant not a valid immediate operand" #~ msgstr "long long ¨ͥڥɤǤϤޤ" #~ msgid "floating point constant not a valid immediate operand" #~ msgstr "ư¨ͥڥɤǤϤޤ" #~ msgid "%s and profiling conflict: disabling %s" #~ msgstr "%s ȥץե󥰤϶礷ޤ: %s ̵ޤ" #~ msgid "Use FUNCTION_EPILOGUE" #~ msgstr "FUNCTION_EPILOGUE Ѥ" #~ msgid "Do not use FUNCTION_EPILOGUE" #~ msgstr "FUNCTION_EPILOGUE Ѥʤ" #~ msgid "Assume possible double misalignment" #~ msgstr "double ä饤ȤȤʤǽȤߤʤ" #~ msgid "Assume all doubles are aligned" #~ msgstr "Ƥ double 򥢥饤󤵤줿ΤȤߤʤ" #~ msgid "Pass -assert pure-text to linker" #~ msgstr "󥫤 -assert pure-text Ϥ" #~ msgid "Do not pass -assert pure-text to linker" #~ msgstr "󥫤 -assert pure-text Ϥʤ" #~ msgid "Use flat register window model" #~ msgstr "եåȥ쥸ɥǥѤ" #~ msgid "Do not use flat register window model" #~ msgstr "եåȥ쥸ɥǥѤʤ" #~ msgid "Use ABI reserved registers" #~ msgstr "ABI ͽ쥸Ѥ" #~ msgid "Do not use ABI reserved registers" #~ msgstr "ABI ͽ쥸Ѥʤ" #~ msgid "Use hardware quad fp instructions" #~ msgstr "ư̿Ѥ" #~ msgid "Do not use hardware quad fp instructions" #~ msgstr "ư̿Ѥʤ" #~ msgid "Compile for v8plus ABI" #~ msgstr "v8plus ABI Ѥ˥ѥ뤹" #~ msgid "Do not compile for v8plus ABI" #~ msgstr "v8plus ABI Ѥ˥ѥ뤷ʤ" #~ msgid "Utilize Visual Instruction Set" #~ msgstr "Visual ̿᥻åȤѤ" #~ msgid "Do not utilize Visual Instruction Set" #~ msgstr "Visual ̿᥻åȤѤʤ" #~ msgid "Optimize for Cypress processors" #~ msgstr "Cypress ץåѤ˺Ŭ" #~ msgid "Optimize for SparcLite processors" #~ msgstr "SparcLite ץåѤ˺Ŭ" #~ msgid "Optimize for F930 processors" #~ msgstr "F930 ץåѤ˺Ŭ" #~ msgid "Optimize for F934 processors" #~ msgstr "F934 ץåѤ˺Ŭ" #~ msgid "Use V8 Sparc ISA" #~ msgstr "V8 Sparc ISA Ѥ" #~ msgid "Optimize for SuperSparc processors" #~ msgstr "SuperSparc ץåѤ˺Ŭ" #~ msgid "Pointers are 64-bit" #~ msgstr "ݥ󥿤 64 ӥåȤȤ" #~ msgid "Pointers are 32-bit" #~ msgstr "ݥ󥿤 32 ӥåȤȤ" #~ msgid "Use 32-bit ABI" #~ msgstr "32 ӥå ABI Ѥ" #~ msgid "Use 64-bit ABI" #~ msgstr "64 ӥå ABI Ѥ" #~ msgid "Use stack bias" #~ msgstr "åХѤ" #~ msgid "Do not use stack bias" #~ msgstr "åХѤʤ" #~ msgid "Use structs on stronger alignment for double-word copies" #~ msgstr "֥ɥԡѤζ饤󤵤줿¤ΤѤ" #~ msgid "Do not use structs on stronger alignment for double-word copies" #~ msgstr "֥ɥԡѤζ饤󤵤줿¤ΤѤʤ" #~ msgid "Optimize tail call instructions in assembler and linker" #~ msgstr "֥ȥ󥫤ƤӽФ̿Ŭ" #~ msgid "Do not optimize tail call instructions in assembler or linker" #~ msgstr "֥ȥ󥫤ƤӽФ̿Ŭʤ" #~ msgid "Use given Sparc code model" #~ msgstr "Ϳ줿 Sparc ɥǥѤ" #~ msgid "#pragma GHS endXXXX found without previous startXXX" #~ msgstr "#pragma GHS endXXXX startXXX ̵ǸĤޤ" #~ msgid "#pragma GHS endXXX does not match previous startXXX" #~ msgstr "#pragma GHS endXXX startXXX Ŭ礷ޤ" #~ msgid "Cannot set interrupt attribute: no current function" #~ msgstr "interrupt °Ǥޤ: ߤδؿޤ" #~ msgid "Cannot set interrupt attribute: no such identifier" #~ msgstr "interrupt °Ǥޤ: ͤʼ̻Ҥޤ" #~ msgid "junk at end of #pragma ghs section" #~ msgstr "#pragma ghs section ν˥ߤޤ" #~ msgid "unrecognised section name \"%s\"" #~ msgstr "ǧǤʤ̾ \"%s\"" #~ msgid "malformed #pragma ghs section" #~ msgstr " #pragma ghs section" #~ msgid "junk at end of #pragma ghs interrupt" #~ msgstr "#pragma ghs interrupt ν˥ߤޤ" #~ msgid "junk at end of #pragma ghs starttda" #~ msgstr "#pragma ghs starttda ν˥ߤޤ" #~ msgid "junk at end of #pragma ghs startsda" #~ msgstr "#pragma ghs startsda ν˥ߤޤ" #~ msgid "junk at end of #pragma ghs startzda" #~ msgstr "#pragma ghs startzda ν˥ߤޤ" #~ msgid "junk at end of #pragma ghs endtda" #~ msgstr "#pragma ghs endtda ν˥ߤޤ" #~ msgid "junk at end of #pragma ghs endsda" #~ msgstr "#pragma ghs endsda ν˥ߤޤ" #~ msgid "junk at end of #pragma ghs endzda" #~ msgstr "#pragma ghs ν˥ߤޤ" #~ msgid "%s=%s is not numeric." #~ msgstr "%s=%s ϿͤǤϤޤ" #~ msgid "%s=%s is too large." #~ msgstr "%s=%s 礭ޤ" #~ msgid "a data area attribute cannot be specified for local variables" #~ msgstr "ǡΰ°ѿˤϻǤޤ" #~ msgid "data area of '%s' conflicts with previous declaration" #~ msgstr "ǡΰ '%s' ̷⤷ޤ" #~ msgid "Bogus JR construction: %d\n" #~ msgstr "ⲽ줿 JR ¤: %d\n" #~ msgid "Bad amount of stack space removal: %d" #~ msgstr "åֺ̤Ǥ: %d" #~ msgid "Bogus JARL construction: %d\n" #~ msgstr "ⲽ줿 JARL ¤: %d\n" #~ msgid "Support Green Hills ABI" #~ msgstr "Green Hill ABI 򥵥ݡȤ" #~ msgid "Prohibit PC relative function calls" #~ msgstr "PC ϢδؿƤӽФؤ" #~ msgid "Reuse r30 on a per function basis" #~ msgstr "ؿμʬ r30 Ѥ" #~ msgid "Use stubs for function prologues" #~ msgstr "ؿʬѤΥ֤Ѥ" #~ msgid "Same as: -mep -mprolog-function" #~ msgstr "-mep -mprolog-function Ʊ" #~ msgid "Enable backend debugging" #~ msgstr "ХåɥǥХåͭˤ" #~ msgid "Compile for the v850 processor" #~ msgstr "v850 ץåѤ˥ѥ뤹" #~ msgid "Use 4 byte entries in switch tables" #~ msgstr "switch ơ֥ 4 ХȥȥѤ" #~ msgid "Set the max size of data eligible for the TDA area" #~ msgstr "TDA ΰˤȤä˾ޤǡꤹ" #~ msgid "Set the max size of data eligible for the SDA area" #~ msgstr "SDA ΰˤȤä˾ޤǡꤹ" #~ msgid "Set the max size of data eligible for the ZDA area" #~ msgstr "ZDA ΰˤȤä˾ޤǡꤹ" #~ msgid "cannot convert to a pointer type" #~ msgstr "ݥ󥿷ѴǤޤ" #~ msgid "pointer value used where a floating point value was expected" #~ msgstr "ư٤սǡݥͤȤޤ" #~ msgid "aggregate value used where a float was expected" #~ msgstr "ư٤սǡΤͤȤޤ" #~ msgid "conversion to incomplete type" #~ msgstr "ԴؤѴǤ" #~ msgid "can't convert between vector values of different size" #~ msgstr "礭ΰۤʤ٥ȥƱΤѴϤǤޤ" #~ msgid "aggregate value used where an integer was expected" #~ msgstr "٤սǡΤͤȤޤ" #~ msgid "pointer value used where a complex was expected" #~ msgstr "ʣǿ٤սǡݥͤȤޤ" #~ msgid "aggregate value used where a complex was expected" #~ msgstr "ʣǿ٤սǡΤͤȤޤ" #~ msgid "can't convert value to a vector" #~ msgstr "ͤ٥ȥˤѴǤޤ" #~ msgid "unable to call pointer to member function here" #~ msgstr "Ǥϥдؿݥ󥿸ƤӽФǤޤ" #~ msgid "destructors take no parameters" #~ msgstr "ǥȥ饯ϲޤ" #~ msgid "ISO C++ forbids omitting the middle term of a ?: expression" #~ msgstr "ISO C++ ֹबά줿 ?: ؤޤ" #~ msgid "conflicting access specifications for field `%s', ignored" #~ msgstr "ե `%s' Ф륢Ҥ礷ᡢ̵뤵ޤ" #~ msgid "trying to finish struct, but kicked out due to previous parse errors." #~ msgstr "ʸϤ¤Τν˺ݤޤΥ顼Τʸ̮򸫼ޤ" #~ msgid "language string `\"%s\"' not recognized" #~ msgstr "ʸ `\"%s\"' ǧޤ" #~ msgid "not enough type information" #~ msgstr "Խʬʷ" #~ msgid "invalid operation on uninstantiated type" #~ msgstr "󥹥󥹲ʤФ̵Ǥ" #~ msgid "object size exceeds built-in limit for virtual function table implementation" #~ msgstr "֥ȥ۴ؿơ֥Ȥ߹ޤ줿Ķᤷޤ" #~ msgid "object size exceeds normal limit for virtual function table implementation, recompile all source and use -fhuge-objects" #~ msgstr "֥ȥ۴ؿơ֥̾¤ĶᤷᡢƤΥ -fhuge-objects Ȥäƺƥѥ뤷Ƥ" #~ msgid "declaration of `%s' shadows a member of `this'" #~ msgstr "`%s' ˤ `this' ΥФʤޤ" #~ msgid "label `%s' referenced outside of any function" #~ msgstr "٥ `%s' ؿγ¦β򻲾Ȥޤ" #~ msgid "jump to case label" #~ msgstr "case ٥˥פƤޤ" #~ msgid " enters try block" #~ msgstr " try ֥åޤ" #~ msgid " enters catch block" #~ msgstr " catch ֥åޤ" #~ msgid " from here" #~ msgstr " " #~ msgid "the ABI requires vtable thunks" #~ msgstr "ABI ϲ۴ؿơ֥륵󥯤׵ᤷޤ" #~ msgid "multiple types in one declaration" #~ msgstr "Ĥʣηޤ" #~ msgid "declaration does not declare anything" #~ msgstr "Ƥޤ" #~ msgid "Missing type-name in typedef-declaration." #~ msgstr "typdef Ƿ̾礤Ƥޤ" #~ msgid "ISO C++ prohibits anonymous structs" #~ msgstr "ISO C++ ̵̾¤ΤػߤƤޤ" #~ msgid "assignment (not initialization) in declaration" #~ msgstr "(ǤϤʤ)ޤ" #~ msgid "invalid catch parameter" #~ msgstr "̵ catch ΰ" #~ msgid "cannot declare `::main' to be a template" #~ msgstr "`::main' template ȤƤǤޤ" #~ msgid "cannot declare `::main' to be inline" #~ msgstr "`::main' inline ȤƤǤޤ" #~ msgid "cannot declare `::main' to be static" #~ msgstr "`::main' static ȤƤǤޤ" #~ msgid "`main' must return `int'" #~ msgstr "`main' `int' ֤ʤФʤޤ" #~ msgid "overflow in array dimension" #~ msgstr "μСեޤ" #~ msgid "destructors must be member functions" #~ msgstr "ǥȥ饯ϥдؿǤʤФʤޤ" #~ msgid "`bool' is now a keyword" #~ msgstr "`bool' Ϻ䥭ɤǤ" #~ msgid "ISO C++ does not support `long long'" #~ msgstr "ISO C++ `long long' ޤ" #~ msgid "short, signed or unsigned invalid for `%s'" #~ msgstr "short, Ĥޤʤ `%s' ˤȤä̵Ǥ" #~ msgid "long and short specified together for `%s'" #~ msgstr "long short `%s' Фư˻ꤵƤޤ" #~ msgid "signed and unsigned given together for `%s'" #~ msgstr "դ̵ `%s' ФưͿƤޤ" #~ msgid "storage class specifiers invalid in parameter declarations" #~ msgstr "ε饹Ҥ̵Ǥ" #~ msgid "typedef declaration invalid in parameter declaration" #~ msgstr " typedef ̵Ǥ" #~ msgid "virtual outside class declaration" #~ msgstr "饹γ¦ virtual ꤷƤޤ" #~ msgid "storage class specified for %s `%s'" #~ msgstr "%s Ф뵭饹 `%s'" #~ msgid "storage class specifiers invalid in friend function declarations" #~ msgstr "friend ؿε饹Ҥ̵Ǥ" #~ msgid "destructor cannot be static member function" #~ msgstr "ǥȥ饯ŪдؿȤ뤳ȤϤǤޤ" #~ msgid "constructor cannot be static member function" #~ msgstr "󥹥ȥ饯ŪдؿȤ뤳ȤϤǤޤ" #~ msgid "constructors cannot be declared virtual" #~ msgstr "󥹥ȥ饯 virtual Ǥޤ" #~ msgid "return value type specifier for constructor ignored" #~ msgstr "󥹥ȥ饯Фͤη̵뤵ޤ" #~ msgid "can't initialize friend function `%s'" #~ msgstr "friend ؿ `%s' Ǥޤ" #~ msgid "virtual functions cannot be friends" #~ msgstr "۴ؿ friend ˤǤޤ" #~ msgid "friend declaration not in class definition" #~ msgstr "friend 饹ˤޤ" #~ msgid "cannot declare %s to references" #~ msgstr "%s 򻲾ȤȤǤޤ" #~ msgid "invalid type: `void &'" #~ msgstr "̵ʷ: `void &'" #~ msgid "discarding `const' applied to a reference" #~ msgstr "ȤѤ줿 `const' ϼΤƤޤ" #~ msgid "discarding `volatile' applied to a reference" #~ msgstr "ȤѤ줿 `volatile' ϼΤƤޤ" #~ msgid "only declarations of constructors can be `explicit'" #~ msgstr "`explicit' ˤǤΤϡ󥹥ȥ饯Ǥ" #~ msgid "non-member `%s' cannot be declared `mutable'" #~ msgstr " `%s' `mutable' ȤǤޤ" #~ msgid "non-object member `%s' cannot be declared `mutable'" #~ msgstr "󥪥֥ȥ `%s' `mutable' ȤǤޤ" #~ msgid "function `%s' cannot be declared `mutable'" #~ msgstr "ؿ `%s' `mutable' ȤƤǤޤ" #~ msgid "static `%s' cannot be declared `mutable'" #~ msgstr "static `%s' mutable ȤǤޤ" #~ msgid "const `%s' cannot be declared `mutable'" #~ msgstr "const `%s' `mutable' ȤǤޤ" #~ msgid "typedef declaration includes an initializer" #~ msgstr "typedef ҤޤǤޤ" #~ msgid "unnamed variable or field declared void" #~ msgstr "̵̾ѿեɤ void ޤ" #~ msgid "variable or field declared void" #~ msgstr "ѿޤϥեɤ void ޤ" #~ msgid "cannot use `::' in parameter declaration" #~ msgstr " `::' Ȥޤ" #~ msgid "`%s' is neither function nor member function; cannot be declared friend" #~ msgstr "`%s' ϴؿǤдؿǤ⤢ޤ -- friend ȤǤޤ" #~ msgid "member functions are implicitly friends of their class" #~ msgstr "дؿϰŪˤΥ饹 friend Ǥ" #~ msgid "storage class `auto' invalid for function `%s'" #~ msgstr "ؿ `%s' Ф뵭饹 `auto' ̵Ǥ" #~ msgid "storage class `register' invalid for function `%s'" #~ msgstr "ؿ `%s' Ф뵭饹 `register' ̵Ǥ" #~ msgid "storage class `static' invalid for function `%s' declared out of global scope" #~ msgstr "襹׳δؿ `%s' Ф뵭饹 `static' ̵Ǥ" #~ msgid "storage class `inline' invalid for function `%s' declared out of global scope" #~ msgstr "襹׳δؿ `%s' Ф뵭饹 `inline' ̵Ǥ" #~ msgid "virtual non-class function `%s'" #~ msgstr "virtual 󥯥饹ؿ `%s'" #~ msgid "cannot declare static function inside another function" #~ msgstr "¾δؿ static ؿǤޤ" #~ msgid "invalid integer constant in parameter list, did you forget to give parameter name?" #~ msgstr "ꥹȤ̵ޤ̾Ϳ˺줿ΤǤϡ" #~ msgid "conversion to %s%s will never use a type conversion operator" #~ msgstr "%s%s ؤѴǷѴ黻ҤѤ뤳ȤϷ褷Ƥޤ" #~ msgid "return type for `main' changed to `int'" #~ msgstr "`main' return `int' Ѥޤ" #~ msgid "-f%s is no longer supported" #~ msgstr "-f%s ϤϤ䥵ݡȤޤ" #~ msgid "-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)" #~ msgstr "-fhandle-exceptions -fexception ѹޤ(˥ǥեȤͭǤ)" #~ msgid "-fname-mangling-version is no longer supported" #~ msgstr "-fname-mangling-version ϤϤ䥵ݡȤޤ" #~ msgid "-Wno-strict-prototypes is not supported in C++" #~ msgstr "-Wno-strict-prototypes C++ Ǥϼդޤ" #~ msgid "name missing for member function" #~ msgstr "дؿ̾礤Ƥޤ" #~ msgid "`__alignof__' applied to a bit-field" #~ msgstr "ӥåȥեɤФŬѤ줿 `__alignof__'" #~ msgid "parser may be lost: is there a '{' missing somewhere?" #~ msgstr "ʸϴ郎»Ҥˤʤä褦Ǥ: ɤ '{' ˺ƤΤǤϡ" #~ msgid "ambiguous conversion for array subscript" #~ msgstr "źФۣѴ" #~ msgid "anachronistic use of array size in vector delete" #~ msgstr "٥ȥ delete 󥵥ȤΤŪǤ" #~ msgid "cannot delete a function. Only pointer-to-objects are valid arguments to `delete'" #~ msgstr "ؿ delete Ǥޤ ֥ȤؤΥݥ󥿤 `delete' ȤͭǤ" #~ msgid "initializer invalid for static member with constructor" #~ msgstr "󥹥ȥ饯ŪнҤ̵Ǥ" #~ msgid "(an out of class initialization is required)" #~ msgstr "(饹ǤνɬפȤޤ)" #~ msgid "field initializer is not constant" #~ msgstr "եɽҤǤϤޤ" #~ msgid "anonymous struct not inside named type" #~ msgstr "̵̾¤Τ̾Ĥˤޤ" #~ msgid "namespace-scope anonymous aggregates must be static" #~ msgstr "anonumous ֤̾νΤ static ǤʤФʤޤ" #~ msgid "anonymous aggregate with no members" #~ msgstr "̵̾Τ˥Фޤ" #~ msgid "too many initialization functions required" #~ msgstr "ɬפȤؿο¿ޤ" #~ msgid "use of old-style cast" #~ msgstr "ŤΥ㥹ȤѤƤޤ" #~ msgid "`%s' not supported by %s" #~ msgstr "`%s' %s ǤϥݡȤޤ" #~ msgid "" #~ msgstr "<̵̾ %s>" #~ msgid "(static %s for %s)" #~ msgstr "(Ū%s: %s )" #~ msgid "In %s `%s':" #~ msgstr "%s `%s':" #~ msgid "%s: In instantiation of `%s':\n" #~ msgstr "%s: `%s' ν:\n" #~ msgid "%s:%d: instantiated from `%s'\n" #~ msgstr "%s:%d: `%s' βޤ\n" #~ msgid "%s:%d: instantiated from here\n" #~ msgstr "%s:%d: Ǽβޤ\n" #~ msgid "call to Java `catch' or `throw' with `jthrowable' undefined" #~ msgstr "Java `catch' `throw' ƤФޤ`jthrowable' ̤Ǥ" #~ msgid "mixing C++ and Java catches in a single translation unit" #~ msgstr "C++ Java `catch' Ĥ˥åȤˤޤȤޤ" #~ msgid "(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning." #~ msgstr "ʤ⤷줬ʤΰտޤΤǤʤСؿƥץ졼ȤϴѤǤǧδؿ̾θ <> դ­Ƥ -Wno-non-template-friend Ǥηٹɽ̵ˤޤ" #~ msgid "argument to `%s' missing\n" #~ msgstr "`%s' ؤΰ礤Ƥޤ\n" #~ msgid "initializer list treated as compound expression" #~ msgstr "ҥꥹȤʣ缰ȤƼ갷ޤ" #~ msgid " will be re-ordered to match declaration order" #~ msgstr " Ȱפ褦¤ؤޤ" #~ msgid " will be re-ordered to match inheritance order" #~ msgstr " Ȱפ褦¤ؤޤ" #~ msgid "base class initializer specified, but no base class to initialize" #~ msgstr "쥯饹Ҥꤵޤ٤쥯饹ޤ" #~ msgid "initializer for unnamed base class ambiguous" #~ msgstr "̵̾쥯饹νҤۣǤ" #~ msgid "no base class to initialize" #~ msgstr "٤쥯饹ޤ" #~ msgid "object missing in use of pointer-to-member construct" #~ msgstr "ФؤΥݥ󥿹ۤλѤǥ֥Ȥ礤Ƥޤ" #~ msgid "at this point in file" #~ msgstr "եΤΰ" #~ msgid "new of array type fails to specify size" #~ msgstr "󷿤 new ϥλ˼Ԥޤ" #~ msgid "size in array new must have integral type" #~ msgstr " new ǤΥϴʷͤФʤޤ" #~ msgid "zero size array reserves no space" #~ msgstr "϶֤ݤޤ" #~ msgid "new cannot be applied to a reference type" #~ msgstr "ȷФ new ŬѤǤޤ" #~ msgid "new cannot be applied to a function type" #~ msgstr "ؿФ new ŬѤǤޤ" #~ msgid "call to Java constructor, while `jclass' undefined" #~ msgstr "Java 󥹥ȥ饯ƤФޤ`jclass' ̤Ǥ" #~ msgid "Can't find class$" #~ msgstr "class$ Ĥޤ" #~ msgid "invalid type `void' for new" #~ msgstr "new Ф̵ʷǤ `void'" #~ msgid "call to Java constructor with `%s' undefined" #~ msgstr "Java 󥹥ȥ饯ƤФޤ`%s' ̤Ǥ" #~ msgid "initializer list being treated as compound expression" #~ msgstr "ҥꥹȤʣ缰ȤƼ갷褦ȤƤޤ" #~ msgid "ISO C++ forbids aggregate initializer to new" #~ msgstr "ISO C++ new ؤννҤؤޤ" #~ msgid "initializer ends prematurely" #~ msgstr "Ҥ᤯иޤ" #~ msgid "cannot initialize multi-dimensional array with initializer" #~ msgstr "¿ϽҤǽ뤳ȤǤޤ" #~ msgid "unknown array size in delete" #~ msgstr "delete Ǥ󥵥Ǥ" #~ msgid "type to vector delete is neither pointer or array type" #~ msgstr "٥ȥ뷿 delete Ǥݥ󥿤Ǥ󷿤Ǥ⤢ޤ" #~ msgid "Do not obey access control semantics" #~ msgstr "ΰ̣˽ʤ" #~ msgid "Change when template instances are emitted" #~ msgstr "ƥץ졼ȥ󥹥󥹤Ф줿ѹ" #~ msgid "Check the return value of new" #~ msgstr "new ͤ򸡺" #~ msgid "Reduce size of object files" #~ msgstr "֥ȥեΥ򾮤" #~ msgid "Make string literals `char[]' instead of `const char[]'" #~ msgstr "ʸƥ `const char[]' `char[]' Ȥ" #~ msgid "Dump the entire translation unit to a file" #~ msgstr "ñΤե˥פ" #~ msgid "Do not inline member functions by default" #~ msgstr "дؿǥեȤǥ饤Ȥʤ" #~ msgid "Do not generate run time type descriptor information" #~ msgstr "¹ԻҾʤ" #~ msgid "Do not generate code to check exception specifications" #~ msgstr "㳰ͤθ򤹤륳ɤʤ" #~ msgid "Scope of for-init-statement vars extends outside" #~ msgstr "for ʸѿ򥹥׳˳礹" #~ msgid "Do not recognise GNU defined keywords" #~ msgstr "GNU ͽǧʤ" #~ msgid "Do not treat the namespace `std' as a normal namespace" #~ msgstr "̾ `std' ֤̾̾ȤƼ갷ʤ" #~ msgid "Enable support for huge objects" #~ msgstr "礭ʥ֥ȤΥݡ" #~ msgid "Export functions even if they can be inlined" #~ msgstr "饤ˤǤؿǤ export " #~ msgid "Only emit explicit template instatiations" #~ msgstr "Ūʥƥץ졼ȼβΤߤ" #~ msgid "Only emit explicit instatiations of inline templates" #~ msgstr "饤ƥץ졼ȤŪʼβΤߤ" #~ msgid "Don't pedwarn about uses of Microsoft extensions" #~ msgstr "Microsoft ĥѤ˴ؤ pedantic ٹԤʤ" #~ msgid "Recognise and/bitand/bitor/compl/not/or/xor" #~ msgstr "and/bitand/bitor/compl/not/or/xor ǧ" #~ msgid "Disable optional diagnostics" #~ msgstr "ץοǥåɽʤ" #~ msgid "Downgrade conformance errors to warnings" #~ msgstr "Ŭ顼ٹ˳ʲ" #~ msgid "Enable automatic template instantiation" #~ msgstr "ưƥץ졼ȼβͭˤ" #~ msgid "Display statistics accumulated during compilation" #~ msgstr "ѥѤ줿׾ɽ" #~ msgid "Specify maximum template instantiation depth" #~ msgstr "ƥץ졼ȼβοκͤꤹ" #~ msgid "Use __cxa_atexit to register destructors." #~ msgstr "ǥȥ饯Ͽ __cxa_atexit Ѥ" #~ msgid "Discard unused virtual functions" #~ msgstr "Ȥʤ۴ؿڤΤƤ" #~ msgid "Implement vtables using thunks" #~ msgstr "thunk Ȥä vtable " #~ msgid "Emit common-like symbols as weak symbols" #~ msgstr "󥷥ܥ򥦥ܥͤ" #~ msgid "Emit cross referencing information" #~ msgstr "߻Ⱦ" #~ msgid "Warn about inconsistent return types" #~ msgstr "ͤηȰפʤΤˤĤƷٹ𤹤" #~ msgid "Warn about overloaded virtual function names" #~ msgstr "Сɤ줿۴ؿ̾ˤĤƷٹ𤹤" #~ msgid "Don't warn when all ctors/dtors are private" #~ msgstr "ƤΥ󥹥ȥ饯/ǥȥ饯 private Ǥٹ𤷤ʤ" #~ msgid "Warn about non virtual destructors" #~ msgstr "ۥǥȥ饯ˤĤƷٹ𤹤" #~ msgid "Warn when a function is declared extern, then inline" #~ msgstr "ؿ extern 줿塢inline Ȥ줿˷ٹ𤹤" #~ msgid "Warn when the compiler reorders code" #~ msgstr "ѥ餬ɤ¤ؤȤ˷ٹ𤹤" #~ msgid "Warn when synthesis behaviour differs from Cfront" #~ msgstr "ο񤤤 Cfront Ȱۤʤ˷ٹ𤹤" #~ msgid "Don't warn when type converting pointers to member functions" #~ msgstr "ݥ󥿤дؿؤηѴξǤٹ𤷤ʤ" #~ msgid "Warn about violations of Effective C++ style rules" #~ msgstr "Effective C++ λؿˤϤΤˤĤƷٹ𤹤" #~ msgid "Warn when overload promotes from unsigned to signed" #~ msgstr "Сɤ̵դ˳ʾ夲Ȥʤ˷ٹ𤹤" #~ msgid "Warn if a C style cast is used in a program" #~ msgstr "C Υ㥹ȤץǻȤ줿ٹ𤹤" #~ msgid "Don't warn when non-templatized friend functions are declared within a template" #~ msgstr "template template friend ؿ줿Ǥٹ𤷤ʤ" #~ msgid "Don't announce deprecation of compiler features" #~ msgstr "侩ʤѥεǽΤʤ" #~ msgid "type name expected before `*'" #~ msgstr "`*' ˷̾٤Ǥ" #~ msgid "cannot declare references to references" #~ msgstr "Ȥ򻲾ȤȤǤޤ" #~ msgid "cannot declare pointers to references" #~ msgstr "ݥ󥿤򻲾ȤȤǤޤ" #~ msgid "type name expected before `&'" #~ msgstr "`&' ˷̾٤Ǥ" #~ msgid "semicolon missing after %s declaration" #~ msgstr "%s θΥߥ礤Ƥޤ" #~ msgid "junk at end of #pragma %s" #~ msgstr "#pragma %s ˥" #~ msgid "invalid #pragma %s" #~ msgstr "̵ #pragma %s Ǥ" #~ msgid "#pragma implementation for %s appears after file is included" #~ msgstr "%s ؤ #pragma implementation ϥե뤬 include 줿ǽиޤ" #~ msgid "junk at end of #pragma GCC java_exceptions" #~ msgstr "#pragma GCC java_exceptions ˥" #~ msgid "(Each undeclared identifier is reported only once for each function it appears in.)" #~ msgstr "(̤ѿˤĤƤϡ줬ؿǺǽ˸줿𤵤ޤ)" #~ msgid "name lookup of `%s' changed" #~ msgstr "`%s' ̾ѹޤ" #~ msgid "name lookup of `%s' changed for new ISO `for' scoping" #~ msgstr "`%s' ̾Ͽ ISO `for' פѤޤ" #~ msgid "real-valued template parameters when cross-compiling" #~ msgstr "ѥμ¿ͥƥץ졼Ȳ" #~ msgid "methods cannot be converted to function pointers" #~ msgstr "᥽åɤϴؿݥ󥿤ѴǤޤ" #~ msgid "ambiguous request for method pointer `%s'" #~ msgstr "᥽åɥݥ `%s' ؤ׵᤬ۣǤ" #~ msgid "invalid default template argument" #~ msgstr "̵ʥǥեȥƥץ졼Ȱ" #~ msgid "no base or member initializers given following ':'" #~ msgstr "нҥꥹȤ ':' θ³Ƥޤ" #~ msgid "base initializers not allowed for non-member functions" #~ msgstr "ҥꥹȤдؿǤϻȤޤ" #~ msgid "only constructors take base initializers" #~ msgstr "󥹥ȥ饯ҥꥹȤȤޤ" #~ msgid "anachronistic old style base class initializer" #~ msgstr "ŪʸŤδ쥯饹ҤǤ" #~ msgid "`>>' should be `> >' in template class name" #~ msgstr "`>>' ϥƥץ졼ȥ饹̾ `> >' Ȥ٤Ǥ" #~ msgid "ISO C++ forbids an empty condition for `%s'" #~ msgstr "ISO C++ `%s' Фξؤޤ" #~ msgid "ISO C++ forbids `&&'" #~ msgstr "ISO C++ `&&' ؤޤ" #~ msgid "ISO C++ forbids initialization of new expression with `='" #~ msgstr "ISO C++ new νǤ `=' ؤޤ" #~ msgid "ISO C++ forbids compound literals" #~ msgstr "ISO C++ ʣƥؤޤ" #~ msgid "ISO C++ forbids braced-groups within expressions" #~ msgstr "ISO C++ ϥ֥졼ǤޤȤ줿ؤޤ" #~ msgid "sigof type specifier" #~ msgstr "Ҥ sigof Ǥ" #~ msgid "`sigof' applied to non-aggregate expression" #~ msgstr "󽸹μФŬѤ줿 `sigof'" #~ msgid "`sigof' applied to non-aggregate type" #~ msgstr "󽸹ηФŬѤ줿 `sigof'" #~ msgid "storage class specifier `%s' not allowed after struct or class" #~ msgstr "饹 `%s' struct class θˤϻȤޤ" #~ msgid "type specifier `%s' not allowed after struct or class" #~ msgstr " `%s' struct class θˤϻȤޤ" #~ msgid "type qualifier `%s' not allowed after struct or class" #~ msgstr " `%s' struct class θˤϻȤޤ" #~ msgid "no body nor ';' separates two class, struct or union declarations" #~ msgstr "Τʤclass, struct union ڤ ';' ⤢ޤ" #~ msgid "multiple access specifiers" #~ msgstr "ʣ륢" #~ msgid "multiple `virtual' specifiers" #~ msgstr "ʣ `virtual' " #~ msgid "missing ';' before right brace" #~ msgstr "¦֥졼 ';' 礤Ƥޤ" #~ msgid "ISO C++ forbids array dimensions with parenthesized type in new" #~ msgstr "ISO C++ new Ǥϡ̤ΤĤ󼡸ؤޤ" #~ msgid "ISO C++ forbids label declarations" #~ msgstr "ISO C++ ϥ٥ؤƤޤ" #~ msgid "ISO C++ forbids computed gotos" #~ msgstr "ISO C++ Ϸ׻ goto ؤޤ" #~ msgid "label must be followed by statement" #~ msgstr "٥θˤʸɬפǤ" #~ msgid "ISO C++ forbids compound statements inside for initializations" #~ msgstr "ISO C++ ҤǤʣʸؤƤޤ" #~ msgid "possibly missing ')'" #~ msgstr "餯 ')' ˺Ƥޤ" #~ msgid "type specifier omitted for parameter" #~ msgstr "ҤϲѤ˾άޤ" #~ msgid "creating array with size zero" #~ msgstr "礭ȤƤޤ" #~ msgid "use of `%s' in template" #~ msgstr "ƥץ졼 `%s' ѤƤޤ" #~ msgid "incomplete type unification" #~ msgstr "Դʷñ첽" #~ msgid "use of `%s' in template type unification" #~ msgstr "ƥץ졼ȷ `%s' Ѥޤ" #~ msgid "-frepo must be used with -c" #~ msgstr "-frepo -c դǤʤФʤޤ" #~ msgid "mysterious repository information in %s" #~ msgstr "%s ԲIJʥݥȥ󤬤ޤ" #~ msgid "can't create repository information file `%s'" #~ msgstr "ե `%s' ˥ݥȥǤޤ" #~ msgid "taking dynamic typeid of object with -fno-rtti" #~ msgstr "-fno-rtti λȰ˥֥ȤưŪ typeid ȤƤޤ" #~ msgid "cannot use typeid with -fno-rtti" #~ msgstr "-fno-rtti ꤵ typeid Ȥޤ" #~ msgid "must #include before using typeid" #~ msgstr "typeid Ȥ #include ȤʤȤޤ" #~ msgid "adjusting pointers for covariant returns" #~ msgstr "(covariant)ͤؤΥݥ󥿤Ĵޤ" #~ msgid "recoverable compiler error, fixups for virtual function" #~ msgstr "ǽʥѥΥ顼۴ؿν" #~ msgid "ISO C++ does not permit named return values" #~ msgstr "ISO C++ ̾ĤͤĤޤ" #~ msgid "can't redefine default return value for constructors" #~ msgstr "󥹥ȥ饯ѤΥǥեͤ뤳ȤϤǤޤ" #~ msgid " will be re-ordered to precede member initializations" #~ msgstr " ˤнҤ¤ؤޤ" #~ msgid "`this' is unavailable for static member functions" #~ msgstr "`this' ŪдؿѤǤޤ" #~ msgid "invalid use of `this' in non-member function" #~ msgstr "дؿǤ `this' λѤ̵Ǥ" #~ msgid "invalid use of `this' at top level" #~ msgstr "ȥåץ٥Ǥ `this' λѤ̵Ǥ" #~ msgid "template type parameters must use the keyword `class' or `typename'" #~ msgstr "ƥץ졼ȷˤ `class' `typename' ͽȤͤФʤޤ" #~ msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy" #~ msgstr "̻̾ `%s' GNU C++ Υ͡ߥάȶ礷ޤ" #~ msgid "parse error" #~ msgstr "ʸϥ顼" #~ msgid "parse error at end of saved function text" #~ msgstr "¸ѤߴؿƥȤǹʸϥ顼" #~ msgid "parse error in method specification" #~ msgstr "᥽åɻǤιʸϥ顼" #~ msgid "function body for constructor missing" #~ msgstr "󥹥ȥ饯δؿΤ礤Ƥޤ" #~ msgid "%s before `%s'" #~ msgstr "%s `%s' ˤޤ" #~ msgid "%s before `%c'" #~ msgstr "%s `%c' ˤޤ" #~ msgid "%s before `\\%o'" #~ msgstr "%s `\\%o' ˤޤ" #~ msgid "%s before `%s' token" #~ msgstr "%s `%s' ȡˤޤ" #~ msgid "non-lvalue in %s" #~ msgstr "%s ˺ͤǤϤʤ" #~ msgid "`java_interface' attribute can only be applied to Java class definitions" #~ msgstr "`java_interface' ° Java 饹ФƤΤѤǤޤ" #~ msgid "`com_interface' only supported with -fvtable-thunks" #~ msgstr "`com_interface' -fvtable-thunks ꤷȤݡȤޤ" #~ msgid "`com_interface' attribute can only be applied to class definitions" #~ msgstr "`com_interface' °ϥ饹ˤΤѤǤޤ" #~ msgid "requested init_priority is not an integer constant" #~ msgstr "׵ᤵ줿 init_priority ǤϤޤ" #~ msgid "can only use init_priority attribute on file-scope definitions of objects of class type" #~ msgstr "init_priority °ϥ饹֥ȤΥե륹ǤΤ߻Ȥޤ" #~ msgid "requested init_priority is out of range" #~ msgstr "׵ᤵ줿 init_priority ϰϳǤ" #~ msgid "requested init_priority is reserved for internal use" #~ msgstr "׵ᤵ줿 init_priority ǻѤ뤿ͽ󤵤Ƥޤ" #~ msgid "init_priority attribute is not supported on this platform" #~ msgstr "init_priority °ϤΥץåȥեǤϥݡȤƤޤ" #~ msgid "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function" #~ msgstr "ISO C++ `void *' ݥ󥿤ȴؿݥ󥿤Ȥ %s ؤޤ" #~ msgid "ISO C++ forbids applying `sizeof' to a function type" #~ msgstr "ISO C++ ϴؿؤ `sizeof' ŬѤؤޤ" #~ msgid "ISO C++ forbids applying `sizeof' to a member function" #~ msgstr "ISO C++ ϥдؿؤ `sizeof' ŬѤؤޤ" #~ msgid "ISO C++ forbids applying `sizeof' to type `void' which is an incomplete type" #~ msgstr "ISO C++ ԴǤ `void' ؤ `sizeof' ŬѤؤޤ" #~ msgid "sizeof applied to a bit-field" #~ msgstr "sizeof ӥåȥեɤŬѤޤ" #~ msgid "ISO C++ forbids applying `sizeof' to an expression of function type" #~ msgstr "ISO C++ ϴؿμؤ `sizeof' ŬѤؤޤ" #~ msgid "invalid reference to NULL ptr, use ptr-to-member instead" #~ msgstr "NULL ݥ󥿤ؤ̵ʻȡ˥ФؤΥݥ󥿤Ȥޤ礦" #~ msgid "invalid use of `%s' on pointer to member" #~ msgstr "ФؤΥݥ󥿤Ǥ̵ `%s' λ" #~ msgid "invalid type argument" #~ msgstr "̵ʷǤ" #~ msgid "ISO C++ forbids subscripting non-lvalue array" #~ msgstr "ISO C++ ϺͤǤϤʤźؤޤ" #~ msgid "subscripting array declared `register'" #~ msgstr "`register' 줿źĤ褦ȤƤޤ" #~ msgid "pointer to member function called, but not in class scope" #~ msgstr "дؿؤΥݥ󥿤ƤФޤ饹ǤϤޤ" #~ msgid "invalid call to member function needing `this' in static member function scope" #~ msgstr "ŪдؿǤ `this' פдؿθƤӽФ̵Ǥ" #~ msgid "ISO C++ forbids calling `::main' from within program" #~ msgstr "ISO C++ ϥץ椫 `::main' ƤӽФȤؤޤ" #~ msgid "parameter type of called function is incomplete" #~ msgstr "ƤФ줿ؿβηԴǤ" #~ msgid "%s rotate count is negative" #~ msgstr "%s ơȲͤǤ" #~ msgid "%s rotate count >= width of type" #~ msgstr "%s ơȲ >= Ǥ" #~ msgid "ISO C++ forbids comparison between pointer and integer" #~ msgstr "ISO C++ ϥݥ󥿤ȤӤؤޤ" #~ msgid "comparison between signed and unsigned integer expressions" #~ msgstr "դ̵ƱΤӤǤ" #~ msgid "ISO C++ forbids using pointer of type `void *' in pointer arithmetic" #~ msgstr "ISO C++ ϥݥ󥿷׻ `void *' Υݥ󥿤ȤȤؤޤ" #~ msgid "ISO C++ forbids using a pointer-to-function in pointer arithmetic" #~ msgstr "ISO C++ ϥݥ󥿷׻˴ؿؤΥݥ󥿤ȤȤؤޤ" #~ msgid "ISO C++ forbids using a pointer to member function in pointer arithmetic" #~ msgstr "ISO C++ ϥݥ󥿷׻˥дؿؤΥݥ󥿤ȤȤؤޤ" #~ msgid "ISO C++ forbids using pointer to a member in pointer arithmetic" #~ msgstr "ISO C++ ϥݥ󥿷׻˥ФؤΥݥ󥿤ȤȤؤޤ" #~ msgid "ISO C++ forbids using pointer of type `void *' in subtraction" #~ msgstr "ISO C++ ϸ `void *' Υݥ󥿤ȤȤؤޤ" #~ msgid "ISO C++ forbids using pointer to a function in subtraction" #~ msgstr "ISO C++ ϸ˴ؿؤΥݥ󥿤ȤȤؤޤ" #~ msgid "ISO C++ forbids using pointer to a method in subtraction" #~ msgstr "ISO C++ ϸ˥᥽åɤؤΥݥ󥿤ȤȤؤޤ" #~ msgid "ISO C++ forbids using pointer to a member in subtraction" #~ msgstr "ISO C++ ϸ˥ФؤΥݥ󥿤ȤȤؤޤ" #~ msgid "invalid use of a pointer to an incomplete type in pointer arithmetic" #~ msgstr "ݥ󥿱黻ԴؤΥݥ󥿤ȤȤ̵Ǥ" #~ msgid "taking address of temporary" #~ msgstr "֥ȤΥɥ쥹ȤƤޤ" #~ msgid "ISO C++ forbids %sing an enum" #~ msgstr "ISO C++ enum %s ؤޤ" #~ msgid "cast to non-reference type used as lvalue" #~ msgstr "ͤȤƻȤ󻲾ȷؤΥ㥹ȤǤ" #~ msgid "ISO C++ forbids taking address of function `::main'" #~ msgstr "ISO C++ `::main' ؿΥɥ쥹뤳Ȥؤޤ" #~ msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression" #~ msgstr "ISO C++ ͼؤΥ㥹ȤΥɥ쥹뤳Ȥؤޤ" #~ msgid "unary `&'" #~ msgstr "ñ `&'" #~ msgid "cannot take the address of `this', which is an rvalue expression" #~ msgstr "`this' ϱͼǤꡢΥɥ쥹뤳ȤϤǤޤ" #~ msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object" #~ msgstr "ISO C++ ϴؿݥ󥿤ȥ֥ȥݥ󥿤δ֤ǤΥ㥹Ȥؤޤ" #~ msgid "ISO C++ forbids cast to non-reference type used as lvalue" #~ msgstr "ISO C++ ϺͤȤƻȤ󻲾ȷؤΥ㥹Ȥؤޤ" #~ msgid "ISO C++ forbids assignment of arrays" #~ msgstr "ISO C++ ؤޤ" #~ msgid "return value from function receives multiple initializations" #~ msgstr "ؿͤʣνޤ" #~ msgid " in pointer to member function conversion" #~ msgstr " ݥ󥿤дؿؤѴ" #~ msgid " in pointer to member conversion" #~ msgstr " ݥ󥿤ФؤѴ" #~ msgid "returning reference to temporary" #~ msgstr "֥ȤؤλȤ֤ȤƤޤ" #~ msgid "reference to non-lvalue returned" #~ msgstr "ͤؤλȤ֤ޤ" #~ msgid "returning a value from a destructor" #~ msgstr "ǥȥ饯֤ͤȤƤޤ" #~ msgid "cannot return from a handler of a function-try-block of a constructor" #~ msgstr "󥹥ȥ饯δؿ try ֥åΥϥɥ餫 return Ǥޤ" #~ msgid "returning a value from a constructor" #~ msgstr "󥹥ȥ饯֤ͤȤƤޤ" #~ msgid "return-statement with no value, in function declared with a non-void return type" #~ msgstr "return ʸͤޤ󡣴ؿǤ void ͤޤ" #~ msgid "return-statement with a value, in function declared with a void return type" #~ msgstr "return ʸͤޤؿǤ귿 void ȤʤäƤޤ" #~ msgid " because the following virtual functions are abstract:" #~ msgstr " ʲβ۴ؿݤǤ뤿Ǥ:" #~ msgid "Internal error #%d." #~ msgstr "顼: #%d" #~ msgid "due to the presence of a constructor" #~ msgstr "󥹥ȥ饯뤳Ȥˤ" #~ msgid "comma expression used to initialize return value" #~ msgstr "ޱ黻Ҥͤ뤿˻Ȥޤ" #~ msgid "cannot initialize arrays using this syntax" #~ msgstr "ʸˡȤä뤳ȤϤǤޤ" #~ msgid "ANSI C++ forbids non-constant aggregate initializer expressions" #~ msgstr "ANSI C++ ǤʤΤνҼؤޤ" #~ msgid "initializing array with parameter list" #~ msgstr "򲾰ꥹȤˤäƽ褦ȤƤޤ" #~ msgid "initializer for scalar variable requires one element" #~ msgstr "顼ѿνҤϰĤǤ׵ᤷޤ" #~ msgid "aggregate has a partly bracketed initializer" #~ msgstr "ΤʬŪ˥֥饱åȤνҤޤ" #~ msgid "non-trivial labeled initializers" #~ msgstr "Ǥʤ٥ΤĤҤǤ" #~ msgid "non-empty initializer for array of empty elements" #~ msgstr "ǤΤʤФ롢ǤϤʤҤǤ" #~ msgid "initializer list for object of class with virtual base classes" #~ msgstr "۴쥯饹ĥ饹Υ֥ѤνҥꥹȤǤ" #~ msgid "initializer list for object of class with base classes" #~ msgstr "쥯饹ĥ饹Υ֥ѤνҥꥹȤǤ" #~ msgid "initializer list for object using virtual functions" #~ msgstr "۴ؿѤ륪֥ѤνҥꥹȤǤ" #~ msgid "index value instead of field name in union initializer" #~ msgstr "union Ҥե̾ǤϤʤǥåͤˤʤäƤޤ" #~ msgid "excess elements in aggregate initializer" #~ msgstr "νǤǤޤ" #~ msgid "circular pointer delegation detected" #~ msgstr "۴ĥݥ󥿤ɽ򸡽Фޤ" #~ msgid "result of `operator->()' yields non-pointer result" #~ msgstr "`operator->()'η̤ݥ󥿤η̤⤿餷ޤ" #~ msgid "base operand of `->' is not a pointer" #~ msgstr "`->' Υ١ڥɤݥ󥿤ǤϤޤ" #~ msgid "ISO C++ forbids defining types within %s" #~ msgstr "ISO C++ %s ηؤޤ" #~ msgid "Can't create cross-reference file `%s'" #~ msgstr "߻ȥե `%s' 뤳ȤǤޤ" #~ msgid "traditional C rejects the `U' suffix" #~ msgstr "Ť C Ǥ `U' 䤵ޤ" #~ msgid "too many 'l' suffixes in integer constant" #~ msgstr "Υեå 'l' ¿ޤ" #~ msgid "integer constant contains digits beyond the radix" #~ msgstr "ĶͤޤǤޤ" #~ msgid "integer constant out of range" #~ msgstr "ϰϤ򳰤Ƥޤ" #~ msgid "\"defined\" operator appears during macro expansion" #~ msgstr "\"defined\" 黻ҤޥŸ˸ޤ" #~ msgid "ISO C++ does not permit \"%s\" in #if" #~ msgstr "ISO C++ #if \"%s\" ޤ" #~ msgid "absolute file name in remap_filename" #~ msgstr "Хѥե̾ remap_filename ˤޤ" #~ msgid "ignoring nonexistent directory \"%s\"\n" #~ msgstr "¸ߤʤǥ쥯ȥ \"%s\" ̵뤷ޤ\n" #~ msgid "%s: Not a directory" #~ msgstr "%s: ǥ쥯ȥǤϤޤ" #~ msgid "ignoring duplicate directory \"%s\"\n" #~ msgstr "ʣǥ쥯ȥ \"%s\" ̵뤷ޤ\n" #~ msgid "-include and -imacros cannot be used with -fpreprocessed" #~ msgstr "-include -imacros -fpreprocessed Ȱ˻ȤȤϤǤޤ" #~ msgid "#include \"...\" search starts here:\n" #~ msgstr "#include \"...\" õϤϤޤޤ:\n" #~ msgid "#include <...> search starts here:\n" #~ msgstr "#include <...> õϤϤޤޤ:\n" #~ msgid "End of search list.\n" #~ msgstr "õꥹȤν\n" #~ msgid "I/O error on output" #~ msgstr " I/O 顼ȯ" #~ msgid "buffers still stacked in cpp_finish" #~ msgstr "cpp_finish ǥХåեޤåƤޤ" #~ msgid "Argument missing after %s" #~ msgstr "%s θΰ礤Ƥޤ" #~ msgid "Assertion missing after %s" #~ msgstr "%s θΥ礤Ƥޤ" #~ msgid "Directory name missing after %s" #~ msgstr "%s θΥǥ쥯ȥ̾礤Ƥޤ" #~ msgid "File name missing after %s" #~ msgstr "%s θΥե̾礤Ƥޤ" #~ msgid "Macro name missing after %s" #~ msgstr "%s θΥޥ̾礤Ƥޤ" #~ msgid "Path name missing after %s" #~ msgstr "%s θΥѥ̾礤Ƥޤ" #~ msgid "Number missing after %s" #~ msgstr "%s θο礤Ƥޤ" #~ msgid "Target missing after %s" #~ msgstr "%s θΥåȤ礤Ƥޤ" #~ msgid "Too many filenames. Type %s --help for usage info" #~ msgstr "ե̾¿ޤ%s --help ȥפƻȤ򸫤ޤ礦" #~ msgid "Output filename specified twice" #~ msgstr "ϥե̾ꤵޤ" #~ msgid "-I- specified twice" #~ msgstr "-I- ꤵޤ" #~ msgid "GNU CPP version %s (cpplib)" #~ msgstr "GNU CPP version %s (cpplib)" #~ msgid "you must additionally specify either -M or -MM" #~ msgstr "-M -MM Τ줫ɲŪ˻ꤷʤФʤޤ" #~ msgid "Usage: %s [switches] input output\n" #~ msgstr "Ȥ: %s [å] \n" #~ msgid "" #~ "Switches:\n" #~ " -include Include the contents of before other files\n" #~ " -imacros Accept definition of macros in \n" #~ " -iprefix Specify as a prefix for next two options\n" #~ " -iwithprefix Add to the end of the system include path\n" #~ " -iwithprefixbefore Add to the end of the main include path\n" #~ " -isystem Add to the start of the system include path\n" #~ msgstr "" #~ "å:\n" #~ " -include ¾Υե Ƥޤ\n" #~ " -imacros Υޥ\n" #~ " -iprefix ĤΥץѥץե \n" #~ " -iwithprefix 򥷥ƥ include ѥνɲä\n" #~ " -iwithprefixbefore ᥤ include ѥνɲä\n" #~ " -isystem 򥷥ƥ include ѥκǽɲä\n" #~ msgid "" #~ " -idirafter Add to the end of the system include path\n" #~ " -I Add to the end of the main include path\n" #~ " -I- Fine-grained include path control; see info docs\n" #~ " -nostdinc Do not search system include directories\n" #~ " (dirs specified with -isystem will still be used)\n" #~ " -nostdinc++ Do not search system include directories for C++\n" #~ " -o Put output into \n" #~ msgstr "" #~ " -idirafter 򥷥ƥ include ѥνɲä\n" #~ " -I ᥤ include ѥνɲä\n" #~ " -I- ٤ include ѥ -- info ʸ򻲾\n" #~ " -nostdinc ƥ include ǥ쥯ȥõʤ\n" #~ " (-system ǻꤵ줿ǥ쥯ȥõ)\n" #~ " -nostdinc++ C++ ѥƥ include ǥ쥯ȥõʤ\n" #~ " -o ؽϤ\n" #~ msgid "" #~ " -pedantic Issue all warnings demanded by strict ISO C\n" #~ " -pedantic-errors Issue -pedantic warnings as errors instead\n" #~ " -trigraphs Support ISO C trigraphs\n" #~ " -lang-c Assume that the input sources are in C\n" #~ " -lang-c89 Assume that the input sources are in C89\n" #~ msgstr "" #~ " -pedantic ̩ ISO C ׵ᤵƤηٹȯԤ\n" #~ " -pedantic-errors -pedantic ٹ˥顼ȯԤ\n" #~ " -trigraphs ISO C ȥ饤դ\n" #~ " -lang-c ϥ C Ȥߤʤ\n" #~ " -lang-c89 ϥ C89 Ȥߤʤ\n" #~ msgid "" #~ " -lang-c++ Assume that the input sources are in C++\n" #~ " -lang-objc Assume that the input sources are in ObjectiveC\n" #~ " -lang-objc++ Assume that the input sources are in ObjectiveC++\n" #~ " -lang-asm Assume that the input sources are in assembler\n" #~ msgstr "" #~ " -lang-c++ ϥ C Ȥߤʤ\n" #~ " -lang-objc ϥ ObjectiveC Ȥߤʤ\n" #~ " -lang-objc++ ϥ ObjectiveC++ Ȥߤʤ\n" #~ " -lang-asm ϥ򥢥֥Ȥߤʤ\n" #~ msgid "" #~ " -std= Specify the conformance standard; one of:\n" #~ " gnu89, gnu99, c89, c99, iso9899:1990,\n" #~ " iso9899:199409, iso9899:1999\n" #~ " -+ Allow parsing of C++ style features\n" #~ " -w Inhibit warning messages\n" #~ " -Wtrigraphs Warn if trigraphs are encountered\n" #~ " -Wno-trigraphs Do not warn about trigraphs\n" #~ " -Wcomment{s} Warn if one comment starts inside another\n" #~ msgstr "" #~ " -std= Ŭ礵ɸ -- ʲ\n" #~ " gnu89, gnu99, c89, c99, iso9899:1990,\n" #~ " iso9899:199409, iso9899:1999\n" #~ " -+ C++ ιʸϤĤ\n" #~ " -w ٹå\n" #~ " -Wtrigraphs ȥ饤դ˽Ф路ٹ𤹤\n" #~ " -Wno-trigraphs ȥ饤դˤĤƤηٹԤʤʤ\n" #~ " -Wcomment{s} Ȥ¾ΥǻϤޤäƤٹ𤹤\n" #~ msgid "" #~ " -Wno-comment{s} Do not warn about comments\n" #~ " -Wtraditional Warn about features not present in traditional C\n" #~ " -Wno-traditional Do not warn about traditional C\n" #~ " -Wundef Warn if an undefined macro is used by #if\n" #~ " -Wno-undef Do not warn about testing undefined macros\n" #~ " -Wimport Warn about the use of the #import directive\n" #~ msgstr "" #~ " -Wno-comment{s} Ȥ˴ؤٹԤʤʤ\n" #~ " -Wtraditional ߤȤϰۤʤŤ C ǤεǽˤĤƷٹ𤹤\n" #~ " -Wno-traditional Ť C ˴ؤٹԤʤʤ\n" #~ " -Wundef ̤Υޥ #if ǻȤƤзٹ𤹤\n" #~ " -Wno-undef ̤ޥɾ˴ؤٹԤʤʤ\n" #~ " -Wimport #import ǥ쥯ƥ֤Ѥ˴ؤƷٹ𤹤\n" #~ msgid "" #~ " -Wno-import Do not warn about the use of #import\n" #~ " -Werror Treat all warnings as errors\n" #~ " -Wno-error Do not treat warnings as errors\n" #~ " -Wsystem-headers Do not suppress warnings from system headers\n" #~ " -Wno-system-headers Suppress warnings from system headers\n" #~ " -Wall Enable all preprocessor warnings\n" #~ msgstr "" #~ " -Wno-import #import Ѥ˴ؤٹԤʤʤ\n" #~ " -Werror Ƥηٹ򥨥顼ȤƼ갷\n" #~ " -Wno-error ٹ򥨥顼ȤƼ갷ʤ\n" #~ " -Wsystem-headers ƥإåηٹʤ\n" #~ " -Wno-system-headers ƥإåηٹ\n" #~ " -Wall ƤΥץץåٹͭˤ\n" #~ msgid "" #~ " -M Generate make dependencies\n" #~ " -MM As -M, but ignore system header files\n" #~ " -MF Write dependency output to the given file\n" #~ " -MG Treat missing header file as generated files\n" #~ msgstr "" #~ " -M make ¸ط\n" #~ " -MM -M Ʊ͡âƥإåե̵뤹\n" #~ " -MF ¸طνϤͿ줿ե˽񤭹\n" #~ " -MG ĤʤإåեȤư\n" #~ msgid "" #~ " -MP\t\t\t Generate phony targets for all headers\n" #~ " -MQ Add a MAKE-quoted target\n" #~ " -MT Add an unquoted target\n" #~ msgstr "" #~ " -MP\t\t\t ƤΥإåˤĤ phony åȤ\n" #~ " -MQ MAKE ǤΥȤ줿åȤɲä\n" #~ " -MT ȤʤåȤɲä\n" #~ msgid "" #~ " -D Define a with string '1' as its value\n" #~ " -D= Define a with as its value\n" #~ " -A () Assert the to \n" #~ " -A- () Disable the to \n" #~ " -U Undefine \n" #~ " -v Display the version number\n" #~ msgstr "" #~ " -D ͤʸ '1' Ȥ\n" #~ " -D= ͤ Ȥ\n" #~ " -A () \n" #~ " -A- () Ȥʤ\n" #~ " -U \n" #~ " -v Сֹɽ\n" #~ msgid "" #~ " -H Print the name of header files as they are used\n" #~ " -C Do not discard comments\n" #~ " -dM Display a list of macro definitions active at end\n" #~ " -dD Preserve macro definitions in output\n" #~ " -dN As -dD except that only the names are preserved\n" #~ " -dI Include #include directives in the output\n" #~ msgstr "" #~ " -H Ȥ줿إåեɽ\n" #~ " -C Ȥ˴ʤ\n" #~ " -dM ǸͭʥޥꥹȤɽ\n" #~ " -dD Ϥ˥ޥ¸\n" #~ " -dN -dD Ʊͤ̾¸\n" #~ " -dI #include ǥ쥯ƥ֤Ϥ˴ޤ\n" #~ msgid "" #~ " -fpreprocessed Treat the input file as already preprocessed\n" #~ " -ftabstop= Distance between tab stops for column reporting\n" #~ " -P Do not generate #line directives\n" #~ " -$ Do not allow '$' in identifiers\n" #~ " -remap Remap file names when including files.\n" #~ " --version Display version information\n" #~ " -h or --help Display this information\n" #~ msgstr "" #~ " -fpreprocessed ϥե˥ץץѤȤư\n" #~ " -ftabstop= Υֳִ֤𤹤\n" #~ " -P #line ǥ쥯ƥ֤ʤ\n" #~ " -$ ̻ҤǤ '$' Ĥʤ\n" #~ " -remap ե륤󥯥롼ɻ˥ե̾ƥޥåפ\n" #~ " --version Сɽ\n" #~ " -h or --help ξɽ\n" #~ msgid "'$' character(s) in identifier" #~ msgstr "'$' ʸ̻ҤäƤޤ" #~ msgid "possible start of unterminated string literal" #~ msgstr "üΤʤʸƥο곫ϰ" #~ msgid "multi-line string literals are deprecated" #~ msgstr "ʣʸƥϿ侩ޤ" #~ msgid "no newline at end of file" #~ msgstr "ե˲Ԥޤ" #~ msgid "directives may not be used inside a macro argument" #~ msgstr "ޥǥǥ쥯ȥȤȤϤǤޤ" #~ msgid "# followed by integer" #~ msgstr " # ³Ƥޤ" #~ msgid "\"%s\" cannot be used as a macro name" #~ msgstr "\"%s\" ϥޥ̾ȤƤϻȤޤ" #~ msgid "attempt to push file buffer with contexts stacked" #~ msgstr "å줿ƥȤȰ˥եХåե push 褦ȤƤޤ" #~ msgid "#import is obsolete, use an #ifndef wrapper in the header file" #~ msgstr "#import ϸŤɽǤ. إåե #ifndef ΥåѡȤäƤ" #~ msgid "file \"%s\" left but not entered" #~ msgstr "ե \"%s\" ФޤäƤޤ" #~ msgid "expected to return to file \"%s\"" #~ msgstr "ե \"%s\" ϤǤ" #~ msgid "expected to return to line number %u" #~ msgstr "ֹ %u ϤǤ" #~ msgid "header flags for \"%s\" have changed" #~ msgstr "\"%s\" Υإåե饰ѹޤ" #~ msgid "invalid #ident" #~ msgstr "̵ #ident" #~ msgid "unknown #pragma namespace %s" #~ msgstr " #pragma namespace %s Ǥ" #~ msgid "#pragma once is obsolete" #~ msgstr "#pragma once Ϥ⤦ȤƤޤ" #~ msgid "" #~ msgstr "<Ȥ߹>" #~ msgid "" #~ msgstr "<ޥɥ饤>" #~ msgid "" #~ msgstr "<ɸ>" #~ msgid "file \"%s\" entered but not left" #~ msgstr "ե \"%s\" ޤФޤǤ" #~ msgid "Invalid option %s" #~ msgstr "̵ʥץ %s" #~ msgid "\"%s\" is not a valid option to the preprocessor" #~ msgstr "\"%s\" ϥץץåФʥץǤϤޤ" #~ msgid "too many input files" #~ msgstr "ϥե뤬¿ޤ" #~ msgid ";; Processing block from %d to %d, %d sets.\n" #~ msgstr ";; %d %d ޤǤν֥å%d åȡ\n" #~ msgid "%s:%d: warning: " #~ msgstr "%s:%d: ٹ: " #~ msgid "%s: warning: " #~ msgstr "%s: ٹ: " #~ msgid "((anonymous))" #~ msgstr "((̵̾))" #~ msgid "%s: warnings being treated as errors\n" #~ msgstr "%s: ٹϥ顼ȤƼ갷ޤ\n" #~ msgid "%s: %s: " #~ msgstr "%s: %s: " #~ msgid "sorry, not implemented: " #~ msgstr "ǰʤ鸫Ǥ: " #~ msgid "%s " #~ msgstr "%s " #~ msgid " %s" #~ msgstr " %s" #~ msgid "At top level:" #~ msgstr "ȥåץ٥:" #~ msgid "In method `%s':" #~ msgstr "᥽å `%s' :" #~ msgid "In function `%s':" #~ msgstr "ؿ `%s' :" #~ msgid "compilation terminated.\n" #~ msgstr "ѥ뤬Ǥޤ\n" #~ msgid "%s:%d: confused by earlier errors, bailing out\n" #~ msgstr "%s:%d: Υ顼ˤ꺮𤷤ƤޤΤǡæФޤ\n" #~ msgid "" #~ "Please submit a full bug report,\n" #~ "with preprocessed source if appropriate.\n" #~ "See %s for instructions.\n" #~ msgstr "" #~ "ʥХäƲ\n" #~ "ŬڤʤХץץΥĤƤ\n" #~ "%s 򸫤ˡ񤤤Ƥޤ\n" #~ msgid "Unrecognizable insn:" #~ msgstr "ǧǽ̿:" #~ msgid "Insn does not satisfy its constraints:" #~ msgstr "̿᤬ޤ" #~ msgid "Internal compiler error: Error reporting routines re-entered.\n" #~ msgstr "ѥ륨顼: 顼롼˺ޤ\n" #~ msgid "Internal compiler error in %s, at %s:%d" #~ msgstr "%s ѥ饨顼 (%s:%d)" #~ msgid "In file included from %s:%d" #~ msgstr "%s:%d include 줿ե" #~ msgid "" #~ ",\n" #~ " from %s:%d" #~ msgstr "" #~ ",\n" #~ " %s:%d " #~ msgid ":\n" #~ msgstr ":\n" #~ msgid "DW_LOC_OP %s not implememnted\n" #~ msgstr "DW_LOC_OP %s ϼƤޤ\n" #~ msgid "internal regno botch: regno = %d\n" #~ msgstr "Ū regno ν: regno = %d\n" #~ msgid "can't get current directory" #~ msgstr "ȥǥ쥯ȥǤޤ" #~ msgid "Can't access real part of complex value in hard register" #~ msgstr "ϡɥ쥸ʣǿμ¿ʬ˥Ǥޤ" #~ msgid "can't access imaginary part of complex value in hard register" #~ msgstr "ϡɥ쥸ʣǿεʬ˥Ǥޤ" #~ msgid "ICE: emit_insn used where emit_jump_insn needed:\n" #~ msgstr "ICE: emit_insn emit_jump_insn פǻȤޤ:\n" #~ msgid "abort in %s, at %s:%d" #~ msgstr "%s , %s:%d" #~ msgid "exception handling disabled, use -fexceptions to enable" #~ msgstr "㳰̵ˤޤ. ͭˤˤ -fexceptions ȤäƤ" #~ msgid "argument of `__builtin_eh_return_regno' must be constant" #~ msgstr "`__builtin_eh_return_regno' ΰǤʤФʤޤ" #~ msgid "__builtin_eh_return not supported on this target" #~ msgstr "__builtin_eh_return ϤΥåȤǤϥݡȤƤޤ" #~ msgid "stack limits not supported on this target" #~ msgstr "å¤ϤΥåȤǤϼƤޤ" #~ msgid "function using short complex types cannot be inline" #~ msgstr "short complex Ȥؿ inline ˤǤޤ" #~ msgid "unsupported wide integer operation" #~ msgstr "ݡȤƤʤ磻黻" #~ msgid "prior parameter's size depends on `%s'" #~ msgstr "ͥ褹벾Υ `%s' Ǥ" #~ msgid "returned value in block_exit_expr" #~ msgstr "block_exit_expr ͤ return ޤ" #~ msgid "no INTEGER type can hold a pointer on this configuration" #~ msgstr "ߤǤ INTEGER ݥ󥿤ݻǤޤ" #~ msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide," #~ msgstr ": REAL, INTEGER ڤ LOGICAL %d ӥåǡ" #~ msgid "and pointers are %d bits wide, but g77 doesn't yet work" #~ msgstr "ݥ󥿤 %d ӥåǤƤ 32 ӥå" #~ msgid "properly unless they all are 32 bits wide." #~ msgstr "Ǥʤ g77 ưޤ" #~ msgid "Please keep this in mind before you report bugs. g77 should" #~ msgstr "ХݡȤˤλ򿴤α֤Ƥ" #~ msgid "support non-32-bit machines better as of version 0.6." #~ msgstr "g77 Ϥ version 0.6 Ʊͤ 32 ӥåȵǤ⥵ݡȤޤ" #~ msgid "configuration: char * holds %d bits, but ftnlen only %d" #~ msgstr ": char * %d ӥåȳݤޤftnlen ä %d ӥåȤǤ" #~ msgid "" #~ "configuration: char * holds %d bits, but INTEGER only %d --\n" #~ " ASSIGN statement might fail" #~ msgstr "" #~ ": char * %d ӥåȳݤޤINTEGER ä %d ӥåȤǤ --\n" #~ " 餯 ASSIGN ʸԤޤ" #~ msgid "Directory name must immediately follow -I" #~ msgstr "ǥ쥯ȥ̾ -I ΤˤĤʤФʤޤ" #~ msgid "overflowed output arg list for `%s'" #~ msgstr "`%s' ѤνϰꥹȤСեޤ" #~ msgid "--driver no longer supported" #~ msgstr "--driver Ϻ᥵ݡȤޤ" #~ msgid "argument to `%s' missing" #~ msgstr "`%s' ؤΰ礤Ƥޤ" #~ msgid "No input files; unwilling to write output files" #~ msgstr "ϥե뤬ޤ -- ܰդʽϥեؤν񤭹" #~ msgid "Print g77-specific compiler version info, run internal tests" #~ msgstr "g77 ͭΥѥСɽƥȤμ¹" #~ msgid "Program is written in typical FORTRAN 66 dialect" #~ msgstr "ץबŵŪ FORTRAN 66 ǽ񤫤Ƥ" #~ msgid "Program is written in typical Unix f77 dialect" #~ msgstr "ץबŵŪ Unix f77 ǽ񤫤Ƥ" #~ msgid "Program does not use Unix-f77 dialectal features" #~ msgstr "ץब Unix-f77 εǽȤäƤʤ" #~ msgid "Program is written in Fortran-90-ish dialect" #~ msgstr "ץब Fortran-90 Ūǽ񤫤Ƥ" #~ msgid "Treat local vars and COMMON blocks as if they were named in SAVE statements" #~ msgstr "ѿ COMMON ֥å SAVE ʸ̾դ줿褦˼갷" #~ msgid "Allow $ in symbol names" #~ msgstr "$ 򥷥ܥ̾ȤƻȤ褦ˤ" #~ msgid "f2c-compatible code need not be generated" #~ msgstr "f2c ߴɤɬפʤ" #~ msgid "Unsupported; do not generate libf2c-calling code" #~ msgstr "ݡȤʤ -- libf2c-calling ɤʤ" #~ msgid "Unsupported; affects code-generation of arrays" #~ msgstr "ݡȤʤ -- Υ˱ƶ" #~ msgid "Program is written in Fortran-90-ish free form" #~ msgstr "ץ Fortran-90 Ūե꡼եǽ񤫤Ƥ" #~ msgid "Warn about use of (only a few for now) Fortran extensions" #~ msgstr "Fortran ĥ(Ͼʤ)λѤˤĤƷٹ𤹤" #~ msgid "Program is written in VXT (Digital-like) FORTRAN" #~ msgstr "ץ VXT (Digital) FORTRAN ǽ񤫤Ƥ" #~ msgid "Disallow all ugly features" #~ msgstr "ƤνǽĤʤ" #~ msgid "Hollerith and typeless constants not passed as arguments" #~ msgstr "Hollerith ䷿ʤȤϤʤ" #~ msgid "Allow ordinary copying of ASSIGN'ed vars" #~ msgstr "ASSIGN 줿ѿ̾ΥԡĤ" #~ msgid "Dummy array dimensioned to (1) is assumed-size" #~ msgstr "ߡμ (1) Ȥߤʤ" #~ msgid "Trailing comma in procedure call denotes null argument" #~ msgstr "ץƤӽФϢ³ޤ null ɽ" #~ msgid "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z" #~ msgstr "DOUBLE COMPLEX Z Ǥ REAL(Z) AIMAG(Z) Ĥ" #~ msgid "Initialization via DATA and PARAMETER is type-compatible" #~ msgstr "DATA PARAMETER ͳνϷߴǤ" #~ msgid "Allow INTEGER and LOGICAL interchangeability" #~ msgstr "INTEGER LOGICAL ߤѹǽǤȤ" #~ msgid "Print internal debugging-related info" #~ msgstr "ǥХåϢɽ" #~ msgid "Initialize local vars and arrays to zero" #~ msgstr "ѿ򥼥˽" #~ msgid "Backslashes in character/hollerith constants not special (C-style)" #~ msgstr "ʸ/hollerith ǤΥХååüʤΤȤʤ (C )" #~ msgid "Have front end emulate COMPLEX arithmetic to avoid bugs" #~ msgstr "COMPLEX ׻ΥХ򥨥ߥ졼Ȥեȥɤ" #~ msgid "Disable the appending of underscores to externals" #~ msgstr "ѿ˥դ­ʤ" #~ msgid "Never append a second underscore to externals" #~ msgstr "ѿܤΥդ­ʤ" #~ msgid "Intrinsics spelled as e.g. SqRt" #~ msgstr "intrinsic 㤨 SqRt Ѥ֤" #~ msgid "Intrinsics in uppercase" #~ msgstr "intrinsic ʸȤ" #~ msgid "Intrinsics letters in arbitrary cases" #~ msgstr "intrinsic ʸǤդΥȤ" #~ msgid "Language keywords spelled as e.g. IOStat" #~ msgstr "ͽ줬㤨 IOStat Ѥ֤" #~ msgid "Language keywords in uppercase" #~ msgstr "ͽϱʸȤ" #~ msgid "Language keyword letters in arbitrary cases" #~ msgstr "ͽʸǤդΥȤ" #~ msgid "Internally convert most source to uppercase" #~ msgstr "ŪѴǤϥؤɤʸȤ" #~ msgid "Internally preserve source case" #~ msgstr "Ū˥Υݻ" #~ msgid "Symbol names spelled in mixed case" #~ msgstr "ܥ̾ϥߤ֤" #~ msgid "Symbol names in uppercase" #~ msgstr "ܥ̾ʸȤ" #~ msgid "Symbol names in lowercase" #~ msgstr "ܥ̾ʸȤ" #~ msgid "Program written in uppercase" #~ msgstr "ץबʸǽ񤫤Ƥ" #~ msgid "Program written in lowercase" #~ msgstr "ץबѾʸǽ񤫤Ƥ" #~ msgid "Program written in strict mixed-case" #~ msgstr "ץब̩˥ߤǽ񤫤Ƥ" #~ msgid "Compile as if program written in uppercase" #~ msgstr "ץबʸǽ񤫤줿ͤ˥ѥ뤹" #~ msgid "Compile as if program written in lowercase" #~ msgstr "ץबѾʸǽ񤫤줿ͤ˥ѥ뤹" #~ msgid "Preserve all spelling (case) used in program" #~ msgstr "ץǻȤ줿֤(Υ)ݻ" #~ msgid "Delete libU77 intrinsics with bad interfaces" #~ msgstr "libU77 intrinsic interface ȶ˺" #~ msgid "Disable libU77 intrinsics with bad interfaces" #~ msgstr "libU77 intrinsic interface ȶ̵" #~ msgid "Hide libU77 intrinsics with bad interfaces" #~ msgstr "libU77 intrinsic interface ȶ˱" #~ msgid "Delete non-FORTRAN-77 intrinsics f2c supports" #~ msgstr "f2c ݡȤ FORTRAN-77 intrinsics " #~ msgid "Disable non-FORTRAN-77 intrinsics f2c supports" #~ msgstr "f2c ݡȤ FORTRAN-77 intrinsics ̵" #~ msgid "Hide non-FORTRAN-77 intrinsics f2c supports" #~ msgstr "f2c ݡȤ FORTRAN-77 intrinsics 򱣤" #~ msgid "Delete non-FORTRAN-77 intrinsics F90 supports" #~ msgstr "F90 ݡȤ FORTRAN-77 intrinsics " #~ msgid "Disable non-FORTRAN-77 intrinsics F90 supports" #~ msgstr "F90 ݡȤ FORTRAN-77 intrinsics ̵" #~ msgid "Hide non-FORTRAN-77 intrinsics F90 supports" #~ msgstr "F90 ݡȤ FORTRAN-77 intrinsics 򱣤" #~ msgid "Delete non-FORTRAN-77 intrinsics g77 supports" #~ msgstr "g77 ݡȤ FORTRAN-77 intrinsics " #~ msgid "Disable non-FORTRAN 77 intrinsics F90 supports" #~ msgstr "g77 ݡȤ FORTRAN-77 intrinsics ̵" #~ msgid "Hide non-FORTRAN 77 intrinsics F90 supports" #~ msgstr "g77 ݡȤ FORTRAN-77 intrinsics 򱣤" #~ msgid "Delete MIL-STD 1753 intrinsics" #~ msgstr "MIL-STD 1753 intrinsic " #~ msgid "Disable MIL-STD 1753 intrinsics" #~ msgstr "MIL-STD 1753 intrinsic ̵" #~ msgid "Hide MIL-STD 1753 intrinsics" #~ msgstr "MIL-STD 1753 intrinsic 򱣤" #~ msgid "Delete libU77 intrinsics" #~ msgstr "libU77 intrinsic " #~ msgid "Disable libU77 intrinsics" #~ msgstr "libU77 intrinsic ̵" #~ msgid "Hide libU77 intrinsics" #~ msgstr "libU77 intrinsic 򱣤" #~ msgid "Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports" #~ msgstr "VXT FORTRAN ݡȤ FORTRAN-77 intrinsics " #~ msgid "Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports" #~ msgstr "VXT FORTRAN ݡȤ FORTRAN-77 intrinsics ̵" #~ msgid "Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports" #~ msgstr "VXT FORTRAN ݡȤ FORTRAN-77 intrinsics 򱣤" #~ msgid "Treat initial values of 0 like non-zero values" #~ msgstr "0 νͤ󥼥ͤȤƼ갷" #~ msgid "Emit special debugging information for COMMON and EQUIVALENCE (disabled)" #~ msgstr "COMMON EQUIVALENCE Ѥ̤ʥǥХåȯԤ̵Ƥ" #~ msgid "Take at least one trip through each iterative DO loop" #~ msgstr "Ǥϳȿ DO 롼פȤ" #~ msgid "Print names of program units as they are compiled" #~ msgstr "ѥ뤵줿ץñ̤̾ɽ" #~ msgid "Disable fatal diagnostics about inter-procedural problems" #~ msgstr "inter-procedural ˤĤƤ̿Ūʿɽɽʤ" #~ msgid "Make prefix-radix non-decimal constants be typeless" #~ msgstr "ʤǤȤ" #~ msgid "Generate code to check subscript and substring bounds" #~ msgstr "źź򸡺륳ɤ" #~ msgid "Fortran-specific form of -fbounds-check" #~ msgstr "Fortran ͭ -fbounds-check η" #~ msgid "Disable warnings about inter-procedural problems" #~ msgstr "inter-procedural ˤĤƤηٹɽɽʤ" #~ msgid "Warn about constructs with surprising meanings" #~ msgstr "˸򾷤ΤˤĤƷٹ𤹤" #~ msgid "Add a directory for INCLUDE searching" #~ msgstr "INCLUDE õѤΥǥ쥯ȥɲä" #~ msgid "Set the maximum line length" #~ msgstr "ԤĹκͤꤹ" #~ msgid "the meaning of `\\a' varies with -traditional" #~ msgstr "-traditional Ǥ `\\a' ΰ̣ۤʤޤ" #~ msgid "non-ANSI-standard escape sequence, `\\%c'" #~ msgstr " ANSI ɸΥץ󥹡`\\%c'" #~ msgid "non-ANSI escape sequence `\\%c'" #~ msgstr " ANSI Υץ󥹡`\\%c'" #~ msgid "unknown escape sequence `\\%c'" #~ msgstr "ʥץ `\\%c'" #~ msgid "unknown escape sequence: `\\' followed by char code 0x%x" #~ msgstr "ʥץ: `\\' θʸ 0x%x" #~ msgid "Badly formed directive -- no closing quote" #~ msgstr "ʷΥǥ쥯ƥ -- ĤȤޤ" #~ msgid "#-lines for entering and leaving files don't match" #~ msgstr "եؤνȤʤ #- 礷ޤ" #~ msgid "Bad directive -- missing close-quote" #~ msgstr "ʥǥ쥯ƥ -- ĤȤ礤Ƥޤ" #~ msgid "ignoring pragma: %s" #~ msgstr "pragma ̵뤷ޤ: %s" #~ msgid "invalid #line" #~ msgstr "̵ #line" #~ msgid "Use `#line ...' instead of `# ...' in first line" #~ msgstr "ǽιԤǤ `# ...' `#line ...' Ȥޤ礦" #~ msgid "invalid #-line" #~ msgstr "̵ #-" #~ msgid "ASSIGNed FORMAT specifier is too small" #~ msgstr "ASSIGN 줿 FORMAT Ҥޤ" #~ msgid "ASSIGN to variable that is too small" #~ msgstr "ASSIGN ѿޤ" #~ msgid "ASSIGNed GOTO target variable is too small" #~ msgstr "ASSIGN 줿 GOTO ѿޤ" #~ msgid "%s no longer supported -- try -fvxt" #~ msgstr "%s Ϻ᥵ݡȤޤ -- -fvxt ȤƤߤƤ" #~ msgid "%s no longer supported -- try -fno-vxt -ff90" #~ msgstr "%s Ϻ᥵ݡȤޤ -- -fno-vxt -ff90 ȤƤߤƤ" #~ msgid "%s disabled, use normal debugging flags" #~ msgstr "%s ̵Ǥ̾ǥХåե饰Ȥޤ礦" #~ msgid "invalid `asm': %s" #~ msgstr "̵ `asm': %s" #~ msgid "output_operand: %s" #~ msgstr "output_operand: %s" #~ msgid "operand number missing after %-letter" #~ msgstr "黻 %-letter θˤޤ" #~ msgid "operand number out of range" #~ msgstr "黻ϰϳǤ" #~ msgid "invalid %%-code" #~ msgstr "̵ %%-code" #~ msgid "`%l' operand isn't a label" #~ msgstr "`%l' 黻ϥ٥ǤϤޤ" #~ msgid "function might be possible candidate for attribute `noreturn'" #~ msgstr "ؿ϶餯 `noreturn' °θȻפޤ" #~ msgid "`noreturn' function does return" #~ msgstr "`noreturn' ؿ return Ƥޤ" #~ msgid "control reaches end of non-void function" #~ msgstr "椬 void ؿνãޤ" #~ msgid "End insn %d for block %d not found in the insn stream." #~ msgstr "λ̿ %d(֥å %d) Ϣ̿˸Ĥޤ" #~ msgid "Insn %d is in multiple basic blocks (%d and %d)" #~ msgstr "̿ %d ʣδܥ֥å(%d %d)ˤޤ" #~ msgid "Head insn %d for block %d not found in the insn stream." #~ msgstr "̿ %d(֥å %d) Ϣ̿˸Ĥޤ" #~ msgid "Basic block %i edge lists are corrupted" #~ msgstr "ܥ֥å %i edge ꥹȤǽƤޤ" #~ msgid "Basic block %d pred edge is corrupted" #~ msgstr "ܥ֥å %d pred edge ꥹȤǽƤޤ" #~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" #~ msgstr "NOTE_INSN_BASIC_BLOCK ֥å %d ˤޤ" #~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d\n" #~ msgstr "NOTE_INSN_BASIC_BLOCK ֥å %d ˤޤ\n" #~ msgid "NOTE_INSN_BASIC_BLOCK %d in the middle of basic block %d" #~ msgstr "NOTE_INSN_BASIC_BLOCK %d ܥ֥å %d ۤɤˤޤ" #~ msgid "In basic block %d:" #~ msgstr "ܥ֥å %d :" #~ msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" #~ msgstr "̿Ϣ bb ο (%d) n_basic_blocks (%d) Ȱ㤤ޤ" #~ msgid "comparison is always %d due to width of bitfield" #~ msgstr "ӥåȥեɤΤӤ %d Ȥʤޤ" #~ msgid "comparison is always %d" #~ msgstr "Ӥ %d Ȥʤޤ" #~ msgid "`or' of unmatched not-equal tests is always 1" #~ msgstr "פʤƱΤǤ `or' ƥȤϾ 1 Ǥ" #~ msgid "`and' of mutually exclusive equal-tests is always 0" #~ msgstr "¾Ūͤ `and' ƥȤϾ 0 Ǥ" #~ msgid "`%s' might be used uninitialized in this function" #~ msgstr "`%s' Ϥδؿǽ줺˻Ѥǽޤ" #~ msgid "variable `%s' might be clobbered by `longjmp' or `vfork'" #~ msgstr "ѿ `%s' `longjmp' `vfork' ˤäƹ󤤤Ȥˤʤǽޤ" #~ msgid "argument `%s' might be clobbered by `longjmp' or `vfork'" #~ msgstr " `%s' `longjmp' `vfork' ˤäƹ󤤤Ȥˤʤǽޤ" #~ msgid "function returns an aggregate" #~ msgstr "ؿΤ֤Ƥޤ" #~ msgid "unused parameter `%s'" #~ msgstr " `%s' ̤ѤǤ" #~ msgid "Ambiguous abbreviation %s" #~ msgstr "ޤʾά %s Ǥ" #~ msgid "Incomplete `%s' option" #~ msgstr "Դ `%s' ץǤ" #~ msgid "Missing argument to `%s' option" #~ msgstr "`%s' ץФޤ" #~ msgid "Extraneous argument to `%s' option" #~ msgstr "`%s' ץФ̵طʰ" #~ msgid "Using builtin specs.\n" #~ msgstr "Ȥ߹ spec .\n" #~ msgid "" #~ "Setting spec %s to '%s'\n" #~ "\n" #~ msgstr "" #~ "spec %s '%s' \n" #~ "\n" #~ msgid "Reading specs from %s\n" #~ msgstr "%s spec ɤ߹\n" #~ msgid "specs %%include syntax malformed after %ld characters" #~ msgstr "specs %ld ʸܰʹߤ %%include ν񼰤ѤǤ" #~ msgid "Could not find specs file %s\n" #~ msgstr "spec ե %s 򸫤Ĥ뤳ȤǤޤǤ\n" #~ msgid "specs %%rename syntax malformed after %ld characters" #~ msgstr "specs %ld ʸܰʹߤ %%rename ν񼰤ѤǤ" #~ msgid "specs %s spec was not found to be renamed" #~ msgstr "spec ե %s ̾ѹ spec ĤޤǤ" #~ msgid "rename spec %s to %s\n" #~ msgstr "spec %s %s ̾ѹ\n" #~ msgid "" #~ "spec is '%s'\n" #~ "\n" #~ msgstr "" #~ "spec '%s' Ǥ\n" #~ "\n" #~ msgid "specs unknown %% command after %ld characters" #~ msgstr "spec ե %ld ʸθ %% ޥ" #~ msgid "specs file malformed after %ld characters" #~ msgstr "%ld ʸθˤ spec ե" #~ msgid "spec file has no spec for linking" #~ msgstr "spec ե˥󥯤˴ؤ spec ޤ" #~ msgid "-pipe not supported" #~ msgstr "-pipe ϼƤޤ" #~ msgid "" #~ "\n" #~ "Go ahead? (y or n) " #~ msgstr "" #~ "\n" #~ "³ޤ? (y ޤ n) " #~ msgid "" #~ "Internal error: %s (program %s)\n" #~ "Please submit a full bug report.\n" #~ "See %s for instructions." #~ msgstr "" #~ "顼: %s (ץ %s)\n" #~ "ʥХݡȤäƤ\n" #~ "%s ˼礬񤤤Ƥޤ" #~ msgid "# %s %.2f %.2f\n" #~ msgstr "# %s %.2f %.2f\n" #~ msgid "Usage: %s [options] file...\n" #~ msgstr "Ȥ: %s [ץ] ե...\n" #~ msgid "Options:\n" #~ msgstr "ץ:\n" #~ msgid " -pass-exit-codes Exit with highest error code from a phase\n" #~ msgstr "" #~ " -pass-exit-codes եΥ顼ɤκͤ exit\n" #~ " ɤȤ֤\n" #~ msgid " --help Display this information\n" #~ msgstr " --help Υإ׾ɽ\n" #~ msgid " --target-help Display target specific command line options\n" #~ msgstr " --target-help åȸͭΥޥɥ饤󥪥ץɽ\n" #~ msgid " (Use '-v --help' to display command line options of sub-processes)\n" #~ msgstr "(`-v --help' ȤȡҥץΥޥɥ饤󥪥ץɽ)\n" #~ msgid " -dumpspecs Display all of the built in spec strings\n" #~ msgstr " -dumpspecs Ȥ߹ޤ줿 spec ʸɽ\n" #~ msgid " -dumpversion Display the version of the compiler\n" #~ msgstr " -dumpversion ѥΥСɽ\n" #~ msgid " -dumpmachine Display the compiler's target processor\n" #~ msgstr " -dumpmachine ѥΥåȥץåɽ\n" #~ msgid " -print-search-dirs Display the directories in the compiler's search path\n" #~ msgstr " -print-search-dirs ѥΥѥˤǥ쥯ȥɽ\n" #~ msgid " -print-libgcc-file-name Display the name of the compiler's companion library\n" #~ msgstr " -print-libgcc-file-name ѥΥѥ˥饤֥̾ɽ\n" #~ msgid " -print-file-name= Display the full path to library \n" #~ msgstr " -print-file-name= 饤֥ ؤΥեѥɽ\n" #~ msgid " -print-prog-name= Display the full path to compiler component \n" #~ msgstr " -print-prog-name= ѥ ؤΥեѥɽ\n" #~ msgid " -print-multi-directory Display the root directory for versions of libgcc\n" #~ msgstr " -print-multi-directory libgcc ΥСǥ쥯ȥ롼Ȥɽ\n" #~ msgid "" #~ " -print-multi-lib Display the mapping between command line options and\n" #~ " multiple library search directories\n" #~ msgstr "" #~ " -print-multi-lib ޥɥ饤󥪥ץʣΥ饤֥õ\n" #~ " ǥ쥯ȥȤбɽ\n" #~ msgid " -Wa, Pass comma-separated on to the assembler\n" #~ msgstr " -Wa, ޶ڤ 򥢥֥Ϥ\n" #~ msgid " -Wp, Pass comma-separated on to the preprocessor\n" #~ msgstr " -Wp, ޶ڤ ץץåϤ\n" #~ msgid " -Wl, Pass comma-separated on to the linker\n" #~ msgstr " -Wl, ޶ڤ 󥫤Ϥ\n" #~ msgid " -Xlinker Pass on to the linker\n" #~ msgstr " -Xlinker 󥫤Ϥ\n" #~ msgid " -save-temps Do not delete intermediate files\n" #~ msgstr " -save-temps ֥եʤ\n" #~ msgid " -pipe Use pipes rather than intermediate files\n" #~ msgstr " -pipe ֥եǤϤʤѥפȤ\n" #~ msgid " -time Time the execution of each subprocess\n" #~ msgstr " -time ҥץȤμ¹Ի֤¬\n" #~ msgid " -specs= Override builtin specs with the contents of \n" #~ msgstr " -specs= Ȥ߹ specs Ƥ֤\n" #~ msgid " -std= Assume that the input sources are for \n" #~ msgstr " -std= ϥ ȸʤ\n" #~ msgid " -B Add to the compiler's search paths\n" #~ msgstr " -B 򥳥ѥõѥɲä\n" #~ msgid " -b Run gcc for target , if installed\n" #~ msgstr "" #~ " -b 󥹥ȡ뤵ƤХå Ȥ\n" #~ " gcc ¹Ԥ\n" #~ msgid " -V Run gcc version number , if installed\n" #~ msgstr "" #~ " -V 󥹥ȡ뤵Ƥ Сֹ\n" #~ " gcc ȤƼ¹Ԥ\n" #~ msgid " -v Display the programs invoked by the compiler\n" #~ msgstr " -v ѥˤäƵưץɽ\n" #~ msgid " -E Preprocess only; do not compile, assemble or link\n" #~ msgstr "" #~ " -E ץץΤ -- ѥ롢֥롢\n" #~ " Ԥʤʤ\n" #~ msgid " -S Compile only; do not assemble or link\n" #~ msgstr " -S ѥΤ -- ֥롢󥯤Ԥʤʤ\n" #~ msgid " -c Compile and assemble, but do not link\n" #~ msgstr " -c ѥ롢֥뤹뤬󥯤Ԥʤʤ\n" #~ msgid " -o Place the output into \n" #~ msgstr " -o ˽ϤԤʤ\n" #~ msgid "" #~ " -x Specify the language of the following input files\n" #~ " Permissable languages include: c c++ assembler none\n" #~ " 'none' means revert to the default behaviour of\n" #~ " guessing the language based on the file's extension\n" #~ msgstr "" #~ " -x ʲϥեθꤹ\n" #~ " Ǥ: c c++ assembler none\n" #~ " 'none' ꤹȥեĥҤˤäƸ\n" #~ " ꤹ롢ǥեȤο񤤤\n" #~ msgid "" #~ "\n" #~ "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n" #~ " passed on to the various sub-processes invoked by %s. In order to pass\n" #~ " other options on to these processes the -W options must be used.\n" #~ msgstr "" #~ "\n" #~ "-g, -f, -m, -O, -W ǻϤޤ륪ץ䡢--param %s ư뤢\n" #~ "ҥץ˼ưŪϤޤäץˤ¾ΥץϤ\n" #~ "ˤ -W ץȤʤФʤޤ\n" #~ msgid "argument to `-Xlinker' is missing" #~ msgstr "`-Xlinker' ΰޤ" #~ msgid "argument to `-specs' is missing" #~ msgstr "`-specs' ΰޤ" #~ msgid "argument to `-specs=' is missing" #~ msgstr "`-specs=' ΰޤ" #~ msgid "argument to `-b' is missing" #~ msgstr "`-b' ΰޤ" #~ msgid "argument to `-B' is missing" #~ msgstr "`-B' ΰޤ" #~ msgid "argument to `-V' is missing" #~ msgstr "`-V' ΰޤ" #~ msgid "invalid version number format" #~ msgstr "̵ʥСֹ" #~ msgid "cannot specify -o with -c or -S and multiple compilations" #~ msgstr "-c -S Ȱ -o ꤹȡʣѥǤޤ" #~ msgid "Warning: -pipe ignored because -save-temps specified" #~ msgstr "ٹ: -save-temps ꤵ줿Τ -pipe ̵뤵ޤ" #~ msgid "Warning: -pipe ignored because -time specified" #~ msgstr "ٹ: -time ꤵ줿Τ -pipe ̵뤵ޤ" #~ msgid "argument to `-x' is missing" #~ msgstr "`-x' ΰޤ" #~ msgid "argument to `-%s' is missing" #~ msgstr "`-%s' ΰޤ" #~ msgid "Warning: `-x %s' after last input file has no effect" #~ msgstr "ٹ: Ǹϥեθ `-x %s' ϲ⤷ޤ" #~ msgid "Invalid specification! Bug in cc." #~ msgstr "̵ʻ! cc ΥХ." #~ msgid "%s\n" #~ msgstr "%s\n" #~ msgid "Spec failure: '%%*' has not been initialised by pattern match" #~ msgstr "spec 顼: '%%*' ϥѥޥåǽʤޤޤǤ" #~ msgid "Warning: use of obsolete %%[ operator in specs" #~ msgstr "ٹ: 켰 %%[ 黻Ҥ spec ˤޤ" #~ msgid "Processing spec %c%s%c, which is '%s'\n" #~ msgstr "spec %c%s%c , '%s' Ǥ\n" #~ msgid "Spec failure: Unrecognised spec option '%c'" #~ msgstr "spec 顼: ǧǽ spec ץ '%c'" #~ msgid "unrecognized option `-%s'" #~ msgstr "ǧǽʥץ `-%s'" #~ msgid "install: %s%s\n" #~ msgstr "󥹥ȡ: %s%s\n" #~ msgid "programs: %s\n" #~ msgstr "ץ: %s\n" #~ msgid "libraries: %s\n" #~ msgstr "饤֥: %s\n" #~ msgid "" #~ "\n" #~ "For bug reporting instructions, please see:\n" #~ msgstr "" #~ "\n" #~ "ХݡȤμϡʲ򻲾\n" #~ msgid "Configured with: %s\n" #~ msgstr "եץ: %s\n" #~ msgid "Thread model: %s\n" #~ msgstr "åɥǥ: %s\n" #~ msgid "gcc version %s\n" #~ msgstr "gcc С %s\n" #~ msgid "gcc driver version %s executing gcc version %s\n" #~ msgstr "gcc ɥ饤ХС %s ¹ gcc С %s\n" #~ msgid "No input files" #~ msgstr "ϥե뤬ޤ" #~ msgid "%s: %s compiler not installed on this system" #~ msgstr "%s: %s ѥϤΥƥ˥󥹥ȡ뤵Ƥޤ" #~ msgid "%s: linker input file unused because linking not done" #~ msgstr "%s: 󥯤λʤäΤǥ󥫤ϥեϻȤޤǤ" #~ msgid "language %s not recognized" #~ msgstr " %s ǧǤޤ" #~ msgid "Internal gcc abort." #~ msgstr " gcc " #~ msgid "Internal gcov abort.\n" #~ msgstr " gcc abort.\n" #~ msgid "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] file\n" #~ msgstr "gcov [-b] [-v] [-n] [-l] [-f] [-o OBJDIR] ե\n" #~ msgid "Could not open basic block file %s.\n" #~ msgstr "ܥ֥åե %s 򳫤ޤǤ\n" #~ msgid "Could not open data file %s.\n" #~ msgstr "ǡե %s 򳫤ȤǤޤǤ\n" #~ msgid "Assuming that all execution counts are zero.\n" #~ msgstr "¹ԿǤȲꤷޤ\n" #~ msgid "Could not open program flow graph file %s.\n" #~ msgstr "ץեե %s 򳫤ޤǤ\n" #~ msgid "No executable code associated with file %s.\n" #~ msgstr "ե %s ˷դ¹ԥɤޤ\n" #~ msgid ".da file contents exhausted too early\n" #~ msgstr ".da եƤ򤢤ޤ᤯ȤڤäƤޤޤ\n" #~ msgid ".da file contents not exhausted\n" #~ msgstr ".da եƤȤڤäƤޤ\n" #~ msgid "%6.2f%% of %d source lines executed in function %s\n" #~ msgstr "%6.2f%%(%d ) ΥԤؿ %s Ǽ¹Ԥޤ\n" #~ msgid "No executable source lines in function %s\n" #~ msgstr "ؿ %s ˼¹ԲǽʥԤޤ\n" #~ msgid "%6.2f%% of %d branches executed in function %s\n" #~ msgstr "%6.2f%%(%d ) Υ֥ؿ %s Ǽ¹Ԥޤ\n" #~ msgid "%6.2f%% of %d branches taken at least once in function %s\n" #~ msgstr "%6.2f%%(%d ) Υ֥ʤȤ٤ϴؿ %s Ǽޤ\n" #~ msgid "No branches in function %s\n" #~ msgstr "ؿ %s ˤʬޤ\n" #~ msgid "%6.2f%% of %d calls executed in function %s\n" #~ msgstr "%6.2f%%(%d ) θƤӽФؿ %s Ǽ¹Ԥޤ\n" #~ msgid "No calls in function %s\n" #~ msgstr "ؿ %s ˸ƤӽФޤ\n" #~ msgid "didn't use all bb entries of graph, function %s\n" #~ msgstr "դ bb ȥΰȤޤǤؿ %s\n" #~ msgid "block_num = %ld, num_blocks = %d\n" #~ msgstr "֥å = %ldֹ֥å = %d\n" #~ msgid "ERROR: too many basic blocks in .bb file %s\n" #~ msgstr "顼: .bb ե %s ˴ܥ֥å¿ޤ\n" #~ msgid "%6.2f%% of %d source lines executed in file %s\n" #~ msgstr "%6.2f%%(%d ) ΥԤե %s Ǽ¹Ԥޤ\n" #~ msgid "No executable source lines in file %s\n" #~ msgstr "ե %s ˼¹ԲǽʥԤޤ\n" #~ msgid "%6.2f%% of %d branches executed in file %s\n" #~ msgstr "%6.2f%%(%d ) Υ֥ե %s Ǽ¹Ԥޤ\n" #~ msgid "%6.2f%% of %d branches taken at least once in file %s\n" #~ msgstr "%6.2f%%(%d ) Υ֥ʤȤϥե %s Ǽޤ\n" #~ msgid "No branches in file %s\n" #~ msgstr "ե %s ˤϥ֥ޤ\n" #~ msgid "%6.2f%% of %d calls executed in file %s\n" #~ msgstr "%6.2f%%(%d ) θƤӽФե %s Ǽ¹Ԥޤ\n" #~ msgid "No calls in file %s\n" #~ msgstr "ե %s ˸ƤӽФޤ\n" #~ msgid "Could not open source file %s.\n" #~ msgstr "ե %s 򳫤ޤǤ.\n" #~ msgid "Could not open output file %s.\n" #~ msgstr "ϥե %s 򳫤ޤǤ.\n" #~ msgid "Creating %s.\n" #~ msgstr "%s .\n" #~ msgid "call %d never executed\n" #~ msgstr "ƤӽФ %d ϰ٤¹Ԥ\n" #~ msgid "call %d returns = %d\n" #~ msgstr "ƤӽФ %d = %d\n" #~ msgid "call %d returns = %d%%\n" #~ msgstr "ƤӽФ %d = %d%%\n" #~ msgid "branch %d never executed\n" #~ msgstr "֥ %d ϰ٤¹Ԥ줺\n" #~ msgid "branch %d taken = %d\n" #~ msgstr "֥ %d = %d\n" #~ msgid "branch %d taken = %d%%\n" #~ msgstr "֥ %d = %d%%\n" #~ msgid "Unexpected EOF while reading source file %s.\n" #~ msgstr "ե %s ɤ߹ͽ EOF.\n" #~ msgid "GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" #~ msgstr "GCSE ̵: %d > 1000 ܥ֥åڤ %d >= 20 edge/ܥ֥å" #~ msgid "GCSE disabled: %d basic blocks and %d registers" #~ msgstr "GCSE ̵: %d ܥ֥åڤ %d ĤΥ쥸" #~ msgid "fix_sched_param: unknown param: %s" #~ msgstr "fix_sched_param: ʥѥ᥿: %s" #~ msgid "function cannot be inline" #~ msgstr "ؿ inline ˤǤޤ" #~ msgid "varargs function cannot be inline" #~ msgstr "Ѱؿ inline ˤǤޤ" #~ msgid "function using alloca cannot be inline" #~ msgstr "alloca ȤäƤؿ inline ˤǤޤ" #~ msgid "function using setjmp cannot be inline" #~ msgstr "setjmp ȤäƤؿ inline ˤǤޤ" #~ msgid "function uses __builtin_eh_return" #~ msgstr "ؿ __builtin_eh_return Ȥޤ" #~ msgid "function with nested functions cannot be inline" #~ msgstr "ҴؿĴؿ inline ˤǤޤ" #~ msgid "function with label addresses used in initializers cannot inline" #~ msgstr "٥륢ɥ쥹ҤǻȤؿ inline ˤǤޤ" #~ msgid "function too large to be inline" #~ msgstr "ؿ礭 inline ˤǤޤ" #~ msgid "no prototype, and parameter address used; cannot be inline" #~ msgstr "ץȥפʤΥɥ쥹ȤƤ -- inline ˤǤޤ" #~ msgid "inline functions not supported for this return value type" #~ msgstr "ͷ inline ؿϥݡȤޤ" #~ msgid "function with varying-size return value cannot be inline" #~ msgstr "Ĺ֤ͤؿ inline ˤǤޤ" #~ msgid "function with varying-size parameter cannot be inline" #~ msgstr "ĹĴؿ inline ˤǤޤ" #~ msgid "function with transparent unit parameter cannot be inline" #~ msgstr "ƩᶦΤΰĴؿ inline ˤǤޤ" #~ msgid "function with computed jump cannot inline" #~ msgstr "Ф줿פԤʤؿ inline ˤǤޤ" #~ msgid "function with nonlocal goto cannot be inline" #~ msgstr " goto ȤäƤؿ inline ˤǤޤ" #~ msgid "function with target specific attribute(s) cannot be inlined" #~ msgstr "åȸͭ°դδؿ inline ˤǤޤ" #~ msgid "internal error in check-init: tree code not implemented: %s" #~ msgstr "check-init 顼: ĥ꡼ɤϼƤޤ: %s" #~ msgid "internal error - too many interface type" #~ msgstr "顼 - interface ¿ޤ" #~ msgid "bad method signature" #~ msgstr "ʥ᥽åɥͥǤ" #~ msgid "misplaced ConstantValue attribute (not in any field)" #~ msgstr "ConstantValue °ξְ㤨ƤޤʤɤΥեɤǤ⤢ޤ" #~ msgid "duplicate ConstanValue atribute for field '%s'" #~ msgstr "ե '%s' ConstantValue °ʣƤޤ" #~ msgid "field '%s' not found in class" #~ msgstr "ե '%s' 饹˸Ĥޤ" #~ msgid "abstract method in non-abstract class" #~ msgstr "abstract ᥽åɤݥ饹ˤޤ" #~ msgid "non-static method '%s' overrides static method" #~ msgstr "Ū᥽å '%s' Ū᥽åɤ򥪡С饤ɤƤޤ" #~ msgid "In %s: overlapped variable and exception ranges at %d" #~ msgstr "%s : ѿ㳰ϰϤ %d ǽŤʤäƤޤ" #~ msgid "bad type in parameter debug info" #~ msgstr "ǥХåʷޤ" #~ msgid "bad PC range for debug info for local `%s'" #~ msgstr " `%s' ѥǥХåΤ PC ϰϤǤ" #~ msgid "stack underflow - dup* operation" #~ msgstr "åե - dup* " #~ msgid "reference `%s' is ambiguous: appears in interface `%s' and interface `%s'" #~ msgstr " `%s' ۣǤ: interface `%s' interface `%s' ˸ޤ" #~ msgid "field `%s' not found" #~ msgstr "ե `%s' Ĥޤ" #~ msgid "ret instruction not implemented" #~ msgstr "ret ̿ϼƤޤ" #~ msgid "method '%s' not found in class" #~ msgstr "᥽å '%s' ϥ饹˸Ĥޤ" #~ msgid "failed to find class '%s'" #~ msgstr "'%s' 饹򸫤ĤΤ˼Ԥޤ" #~ msgid "Class '%s' has no method named '%s' matching signature '%s'" #~ msgstr "饹 '%s' ̾ '%s' ǥͥ '%s' Ȱפ᥽åɤäƤޤ" #~ msgid "invokestatic on non static method" #~ msgstr "Ū᥽åɤ invokestatic ޤ" #~ msgid "invokestatic on abstract method" #~ msgstr "ݥ᥽åɤ invokestatic ޤ" #~ msgid "invoke[non-static] on static method" #~ msgstr "Ū᥽åɤ invoke[ static] ޤ" #~ msgid "Missing field '%s' in '%s'" #~ msgstr "ե '%s'('%s' ) 礤Ƥޤ" #~ msgid "Mismatching signature for field '%s' in '%s'" #~ msgstr "ե '%s'('%s' ) Υͥ㤬פޤ" #~ msgid "assignment to final field `%s' not in field's class" #~ msgstr "final ե `%s' ؤǤΥեɤΥ饹ǤϤޤ" #~ msgid "assignment to final static field `%s' not in class initializer" #~ msgstr "final static ե `%s' ؤǤΥեɤΥ饹ǤϤޤ" #~ msgid "assignment to final field `%s' not in constructor" #~ msgstr "final ե `%s' ؤǤ󥹥ȥ饯ǤϤޤ" #~ msgid "Can't expand %s" #~ msgstr "%s ŸǤޤ" #~ msgid "invalid PC in line number table" #~ msgstr "̵ PC ֹơ֥ˤޤ" #~ msgid "Unreachable bytecode from %d to before %d." #~ msgstr "%d %d ޤǤΥХȥɤˤãǤޤ" #~ msgid "Unreachable bytecode from %d to the end of the method." #~ msgstr "%d ᥽åɤνޤǤΥХȥɤˤãǤޤ" #~ msgid "unrecogized wide sub-instruction" #~ msgstr "ǧǤʤ wide sub ̿Ǥ" #~ msgid "Source file for class `%s' is newer than its matching class file. Source file used instead" #~ msgstr "饹 `%s' Υեϡפ륯饹ե꿷Ǥե˻Ȥޤ" #~ msgid "bad string constant" #~ msgstr "ʸǤ" #~ msgid "bad value constant type %d, index %d" #~ msgstr "ͷ %d, ǥå %d" #~ msgid "can't reopen %s" #~ msgstr "%s open Ǥޤ" #~ msgid "Cannot find file for class %s." #~ msgstr "饹 %s ѤΥե򸫤Ĥޤ" #~ msgid "not a valid Java .class file" #~ msgstr " Java .class եǤϤޤ" #~ msgid "error while parsing constant pool" #~ msgstr "constant סιʸ˥顼ȯޤ" #~ msgid "error in constant pool entry #%d\n" #~ msgstr "constant ס #%d ǥ顼ȯޤ\n" #~ msgid "reading class %s for the second time from %s" #~ msgstr "class %s ɹΤ %s ܤˤʤޤ" #~ msgid "error while parsing fields" #~ msgstr "եɤιʸ˥顼ȯޤ" #~ msgid "error while parsing methods" #~ msgstr "᥽åɤιʸ˥顼ȯޤ" #~ msgid "error while parsing final attributes" #~ msgstr "final °ιʸ˥顼ȯޤ" #~ msgid "The `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute. This generally means that your classpath is incorrect set. Use `info gcj \"Input Options\"' to see the info page describing how to set the classpath." #~ msgstr "`%s' ǸĤä `java.lang.Object' ϡĹ̤ `gnu.gcj.gcj-compiled' °äƤޤ󡣤̤ʤΥ饹ѥꤵƤʤ̣ޤ`info gcj \"Input Options\"' Ȥäơ饹ѥˡƤ info ڡ򸫤Ʋ" #~ msgid "missing Code attribute" #~ msgstr "Code °礤Ƥޤ" #~ msgid "error closing %s" #~ msgstr "顼ˤ %s Ĥޤ" #~ msgid "source file seen twice on command line and will be compiled only once." #~ msgstr "ե뤬ޥɥ饤˺ƤӸޤѥ뤵Τϰ٤Ǥ" #~ msgid "no input file specified" #~ msgstr "ϥե뤬ꤵƤޤ" #~ msgid "can't close input file %s" #~ msgstr "ϥե %s close Ǥޤ" #~ msgid "Premature end of input file %s" #~ msgstr "ϥե %s νãΤ᤹ޤ" #~ msgid "bad zip/jar file %s" #~ msgstr "zip/jar ե %s Ǥ" #~ msgid "internal error in generate_bytecode_insn - tree code not implemented: %s" #~ msgstr "generate_bytecode_insn 顼 - ĥ꡼ɤϼƤޤ: %s" #~ msgid "can't create directory %s" #~ msgstr "ǥ쥯ȥ %s Ǥޤ" #~ msgid "can't to open %s" #~ msgstr "%s open Ǥޤ" #~ msgid "Only one of `--print-main', `--list-class', and `--complexity' allowed" #~ msgstr "`--print-main', `--list-class', `--complexity' ϰĤ٤ޤ" #~ msgid "Can't open output file `%s'" #~ msgstr "ϥե `%s' open Ǥޤ" #~ msgid "File not found `%s'" #~ msgstr "ե `%s' Ĥޤ" #~ msgid "can't specify `-D' without `--main'\n" #~ msgstr "`--main' ̵Ǥ `-D' Ǥޤ\n" #~ msgid "Warning: already-compiled .class files ignored with -C" #~ msgstr "ٹ: ѥ .class ե -C ˤ̵뤵ޤ" #~ msgid "cannot specify both -C and -o" #~ msgstr "-C -o ξ˻Ǥޤ" #~ msgid "cannot create temporary file" #~ msgstr "եǤޤ" #~ msgid "using both @FILE with multiple files not implemented" #~ msgstr "@FILE ǤʣեλѤϼƤޤ" #~ msgid "cannot specify `main' class when not linking" #~ msgstr "󥯻ʳˤ `main' 饹Ǥޤ" #~ msgid "Disable automatic array bounds checking" #~ msgstr "ưŪ󶭳Ԥʤ" #~ msgid "Make is_compiled_class return 1" #~ msgstr "is_compiled_class 1 ֤褦ˤ" #~ msgid "Dump class files to .class" #~ msgstr "饹 .class եإפ" #~ msgid "input file is list of file names to compile" #~ msgstr "ϥե򥳥ѥ뤹ե̾ΥꥹȤȤ" #~ msgid "Generate code for Boehm GC" #~ msgstr "Boehm GC ѤΥɤ" #~ msgid "Don't put synchronization structure in each object" #~ msgstr "Ʊ¤Τƥ֥ȤȤʤ" #~ msgid "Assume native functions are implemented using JNI" #~ msgstr "native ؿ JNI ѤƼƤΤȤߤʤ" #~ msgid "Set class path and suppress system path" #~ msgstr "饹ѥꤷƥƥѥ򱣤" #~ msgid "Set class path" #~ msgstr "饹ѥꤹ" #~ msgid "Choose class whose main method should be used" #~ msgstr "main ᥽åɤȤ٤饹򤹤" #~ msgid "Choose input encoding (default is UTF-8)" #~ msgstr "ϥ󥳡ǥ󥰤򤹤(ǥեȤǤ UTF-8)" #~ msgid "Add directory to class path" #~ msgstr "饹ѥ˥ǥ쥯ȥɲä" #~ msgid "Directory where class files should be written" #~ msgstr "饹ե뤬񤭹ޤǥ쥯ȥ" #~ msgid "Use built-in instructions for division" #~ msgstr "Ȥ߹ߤν̿Ѥ" #~ msgid "Warn if modifiers are specified when not necessary" #~ msgstr "ꤵ줿ҤפʤΤǤзٹ𤹤" #~ msgid "Warn if deprecated empty statements are found" #~ msgstr "侩ʤʸĤзٹ𤹤" #~ msgid "Warn if .class files are out of date" #~ msgstr ".class ե뤬եŤзٹ𤹤" #~ msgid "Always check for non gcj generated classes archives" #~ msgstr "gcj Ƥʤ饹֤˸" #~ msgid "can't do dependency tracking with input from stdin" #~ msgstr "ɸϤϤǤϰ¸طפǤޤ" #~ msgid "" #~ "unknown encoding: `%s'\n" #~ "This might mean that your locale's encoding is not supported\n" #~ "by your system's iconv(3) implementation. If you aren't trying\n" #~ "to use a particular encoding for your input file, try the\n" #~ "`--encoding=UTF-8' option." #~ msgstr "" #~ "ʥ󥳡: `%s'\n" #~ "ϤʤΥΥ󥳡ɤƥ iconv(3) \n" #~ "ݡȤƤʤọ̇̄ޤ⤷ʤϥե\n" #~ "ꥨ󥳡ɤȤΤǤʤС`--encoding=UTF-8' ץ\n" #~ "ȤäƤߤƤ" #~ msgid "Can't mangle %s" #~ msgstr "%s ̾Ѵ(mangle) Ǥޤ" #~ msgid "internal error - invalid Utf8 name" #~ msgstr "顼 - ̵ Utf8 ̾Ǥ" #~ msgid "Missing name" #~ msgstr "̾礤Ƥޤ" #~ msgid "';' expected" #~ msgstr "';' ɬפǤ" #~ msgid "'*' expected" #~ msgstr "'*' ɬפǤ" #~ msgid "Class or interface declaration expected" #~ msgstr "饹䥤󥿡եɬפǤ" #~ msgid "Missing class name" #~ msgstr "饹̾礤Ƥޤ" #~ msgid "'{' expected" #~ msgstr "'{' ɬפǤ" #~ msgid "Missing super class name" #~ msgstr "ѡ饹̾礤Ƥޤ" #~ msgid "Missing interface name" #~ msgstr "󥿡ե̾礤Ƥޤ" #~ msgid "Missing term" #~ msgstr "礤Ƥޤ" #~ msgid "Missing variable initializer" #~ msgstr "ѿҤ礤Ƥޤ" #~ msgid "Invalid declaration" #~ msgstr "̵Ǥ" #~ msgid "Can't specify array dimension in a declaration" #~ msgstr "μǻꤹ뤳ȤϤǤޤ" #~ msgid "']' expected" #~ msgstr "']' ɬפǤ" #~ msgid "Unbalanced ']'" #~ msgstr "бΤʤ ']' Ǥ" #~ msgid "Invalid method declaration, method name required" #~ msgstr "̵ʥ᥽åǤ᥽å̾ɬפǤ" #~ msgid "Identifier expected" #~ msgstr "̻ҤɬפǤ" #~ msgid "Invalid method declaration, return type required" #~ msgstr "̵ʥ᥽åǤ᥽å̾ɬפǤ" #~ msgid "')' expected" #~ msgstr "')' ɬפǤ" #~ msgid "Missing formal parameter term" #~ msgstr "ʲ礤Ƥޤ" #~ msgid "Missing identifier" #~ msgstr "̻Ҥ礤Ƥޤ" #~ msgid "Missing class type term" #~ msgstr "饹׹礤Ƥޤ" #~ msgid "Invalid interface type" #~ msgstr "󥿡ե̵Ǥ" #~ msgid "':' expected" #~ msgstr "':' ɬפǤ" #~ msgid "Invalid expression statement" #~ msgstr "ʸ̵Ǥ" #~ msgid "'(' expected" #~ msgstr "'(' ɬפǤ" #~ msgid "Missing term or ')'" #~ msgstr "ޤ ')' 礤Ƥޤ" #~ msgid "Missing term and ')' expected" #~ msgstr "ɬܤ ')' 礤Ƥޤ" #~ msgid "Invalid control expression" #~ msgstr "̵漰Ǥ" #~ msgid "Invalid update expression" #~ msgstr "̵ʹǤ" #~ msgid "Invalid init statement" #~ msgstr "̵ʽǤ" #~ msgid "Missing term or ')' expected" #~ msgstr "ޤɬܤ ')' 礤Ƥޤ" #~ msgid "'class' or 'this' expected" #~ msgstr "'class' ޤ 'this' ɬפǤ" #~ msgid "'class' expected" #~ msgstr "'class' ɬפǤ" #~ msgid "')' or term expected" #~ msgstr "')' ޤϹबɬפǤ" #~ msgid "'[' expected" #~ msgstr "'[' ɬפǤ" #~ msgid "Field expected" #~ msgstr "եɤɬפǤ" #~ msgid "Missing term and ']' expected" #~ msgstr "ɬܤ ']' 礤Ƥޤ" #~ msgid "']' expected, invalid type expression" #~ msgstr "']' ɬפǡ̵ʷɽǤ" #~ msgid "Invalid type expression" #~ msgstr "̵ʷɽǤ" #~ msgid "Invalid reference type" #~ msgstr "̵ʻȷǤ" #~ msgid "Constructor invocation must be first thing in a constructor" #~ msgstr "󥹥ȥ饯εưϥ󥹥ȥ饯Ǻǽ˹ԤʤʤФʤޤ" #~ msgid "Only constructors can invoke constructors" #~ msgstr "󥹥ȥ饯󥹥ȥ饯ưǤޤ" #~ msgid ": `%s' JDK1.1(TM) feature" #~ msgstr ": `%s' JDK1.1(TM) εǽǤ" #~ msgid "" #~ "%s.\n" #~ "%s" #~ msgstr "" #~ "%s.\n" #~ "%s" #~ msgid "Can't use '$' as a separator for inner classes" #~ msgstr "'$' 饹ζڤҤȤƻѤǤޤ" #~ msgid "malformed .zip archive in CLASSPATH: %s" #~ msgstr "CLASSPATH Ѥ .zip ֤ޤ: %s" #~ msgid "Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archives." #~ msgstr "ǥեȥѥå `%s' ĤޤCLASSPATH Ķѿȥ֤ؤΥΤƤ" #~ msgid "missing static field `%s'" #~ msgstr "static ե `%s' 礤Ƥޤ" #~ msgid "not a static field `%s'" #~ msgstr "static ե `%s' ǤϤޤ" #~ msgid "No case for %s" #~ msgstr "%s Τ case ޤ" #~ msgid "unregistered operator %s" #~ msgstr "ϿƤʤ黻 %s Ǥ" #~ msgid "internal error - use of undefined type" #~ msgstr "顼 - ̤λѤǤ" #~ msgid "junk at end of signature string" #~ msgstr "ͥʸν˥ߤޤ" #~ msgid "bad pc in exception_table" #~ msgstr "exception_table pc ޤ" #~ msgid "unknown opcode %d@pc=%d during verification" #~ msgstr " opcode %d@pc=%d 򸡾ȯޤ" #~ msgid "verification error at PC=%d" #~ msgstr "ڥ顼 (PC=%d)" #~ msgid "Dump decls to a .decl file" #~ msgstr " .decl ե˥פ" #~ msgid "Generate code for GNU runtime environment" #~ msgstr "GNU ¹ԴĶѤΥɤ" #~ msgid "Generate code for NeXT runtime environment" #~ msgstr "NeXT ¹ԴĶѤΥɤ" #~ msgid "Warn if a selector has multiple methods" #~ msgstr "쥯ʣΥ᥽åɤäƤзٹ𤹤" #~ msgid "Do not warn if inherited methods are unimplemented" #~ msgstr "᥽åɤ̤ξǤٹ𤷤ʤ" #~ msgid "Generate C header of platform specific features" #~ msgstr "ץåȥեͭεǽ C إå" #~ msgid "Specify the name of the class for constant strings" #~ msgstr "ʸѤΥ饹̾ꤹ" #~ msgid "no class name specified as argument to -fconstant-string-class" #~ msgstr "-fconstant-string-class ˰Ȥƻꤵ줿饹ޤ" #~ msgid "object does not conform to the `%s' protocol" #~ msgstr "֥Ȥ `%s' ץȥŬ礷ޤ" #~ msgid "class `%s' does not implement the `%s' protocol" #~ msgstr "饹 `%s' `%s' ץȥƤޤ" #~ msgid "`%s' cannot be statically allocated" #~ msgstr "`%s' Ū˳ݤǤޤ" #~ msgid "Unexpected type for `id' (%s)" #~ msgstr "ͽʤ `id' (%s) ˻ꤵޤ" #~ msgid "Undefined type `id', please import " #~ msgstr "`id' ̤Ǥ import Ʋ" #~ msgid "Cannot find protocol declaration for `%s'" #~ msgstr "`%s' ФץȥĤޤ" #~ msgid "Cannot find interface declaration for `%s'" #~ msgstr "`%s' Ф륤󥿥եĤޤ" #~ msgid "Cannot find class `%s'" #~ msgstr "饹 `%s' Ĥޤ" #~ msgid "Cannot find interface declaration for `%s', superclass of `%s'" #~ msgstr "`%s' Υ󥿡եĤޤ`%s' δ쥯饹Ǥ" #~ msgid "Circular inheritance in interface declaration for `%s'" #~ msgstr "`%s' ؤΥ󥿡ե۴ŪʷѾȤʤäƤޤ" #~ msgid "inconsistent instance variable specification" #~ msgstr "󥹥ѿλͤӤƤޤ" #~ msgid "multiple declarations for method `%s'" #~ msgstr "᥽å `%s' ʣƤޤ" #~ msgid "invalid receiver type `%s'" #~ msgstr "쥷з `%s' ̵Ǥ" #~ msgid "`%s' does not respond to `%s'" #~ msgstr "`%s' `%s' ˱ޤ" #~ msgid "no super class declared in interface for `%s'" #~ msgstr "`%s' ؤΥ󥿡ե˴쥯饹Ƥޤ" #~ msgid "cannot find class (factory) method." #~ msgstr "饹 (factory) ᥽åɤĤޤ" #~ msgid "return type for `%s' defaults to id" #~ msgstr "`%s' ͤηϥǥեȤ id Ȥޤ" #~ msgid "method `%s' not implemented by protocol." #~ msgstr "᥽å `%s' ϥץȥˤäƼƤޤ" #~ msgid "return type defaults to id" #~ msgstr "ͤηǥեȤ id Ȥޤ" #~ msgid "cannot find method." #~ msgstr "᥽åɤĤޤ" #~ msgid "instance variable `%s' accessed in class method" #~ msgstr "󥹥ѿ `%s' 饹᥽åɤ饢ޤ" #~ msgid "duplicate definition of class method `%s'." #~ msgstr "饹᥽å `%s' ʣƤޤ" #~ msgid "duplicate declaration of class method `%s'." #~ msgstr "饹᥽å `%s' ʣƤޤ" #~ msgid "duplicate definition of instance method `%s'." #~ msgstr "󥹥󥹥᥽å `%s' ʣƤޤ" #~ msgid "duplicate declaration of instance method `%s'." #~ msgstr "󥹥󥹥᥽å `%s' ʣƤޤ" #~ msgid "duplicate interface declaration for category `%s(%s)'" #~ msgstr "ƥ `%s(%s)' ؤΥ󥿡եʣƤޤ" #~ msgid "instance variable `%s' is declared private" #~ msgstr "󥹥ѿ `%s' private Ƥޤ" #~ msgid "instance variable `%s' is declared %s" #~ msgstr "󥹥ѿ `%s' %s Ƥޤ" #~ msgid "static access to object of type `id'" #~ msgstr "`id' Υ֥ȤΤŪǤ" #~ msgid "incomplete implementation of class `%s'" #~ msgstr "饹 `%s' μԴǤ" #~ msgid "incomplete implementation of category `%s'" #~ msgstr "ƥ `%s' μԴǤ" #~ msgid "method definition for `%c%s' not found" #~ msgstr "`%c%s' Υ᥽åĤޤ" #~ msgid "%s `%s' does not fully implement the `%s' protocol" #~ msgstr "%s `%s' `%s' ץȥˤϼƤޤ" #~ msgid "reimplementation of class `%s'" #~ msgstr "饹 `%s' κƼǤ" #~ msgid "conflicting super class name `%s'" #~ msgstr "쥯饹̾ `%s' ͤƤޤ" #~ msgid "duplicate interface declaration for class `%s'" #~ msgstr "饹 `%s' Υ󥿡եʣƤޤ" #~ msgid "duplicate declaration for protocol `%s'" #~ msgstr "ץȥ '%s' ʣƤޤ" #~ msgid "[super ...] must appear in a method context" #~ msgstr "[super ...] ϥ᥽åɥƥȤ˸ʤФʤޤ" #~ msgid "potential selector conflict for method `%s'" #~ msgstr "ǽΤ륻쥯᥽å `%s' ȶ礷ޤ" #~ msgid "`@end' must appear in an implementation context" #~ msgstr "`@end' ϼƥȤ˸ʤФʤޤ" #~ msgid "method definition not in class context" #~ msgstr "᥽å饹ƥǤϤޤ" #~ msgid "syntax error at '@' token" #~ msgstr "'@' ȡʸˡ顼" #~ msgid "invalid parameter `%s'" #~ msgstr " `%s' ̵Ǥ" #~ msgid "Arc profiling: some edge counts were bad." #~ msgstr "(arc)ץե: Ĥ edge ȤǤ" #~ msgid "file %s not found, execution counts assumed to be zero." #~ msgstr "ե %s ĤޤΤǡ¹ԥȤϥȸʤޤ" #~ msgid "%s: internal abort\n" #~ msgstr "%s: \n" #~ msgid "%s: error writing file `%s': %s\n" #~ msgstr "%s: ե `%s' ˽񤭹˥顼: %s\n" #~ msgid "%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]'\n" #~ msgstr "%s: ˡ '%s [ -VqfnkN ] [ -i ] [ ե̾ ... ]'\n" #~ msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]'\n" #~ msgstr "%s: ˡ '%s [ -VqfnkNlgC ] [ -B <ǥ쥯ȥ̾> ] [ ե̾ ... ]'\n" #~ msgid "%s: warning: no read access for file `%s'\n" #~ msgstr "%s: ٹ: ե `%s' Фɤ߽ФĤޤ\n" #~ msgid "%s: warning: no write access for file `%s'\n" #~ msgstr "%s: ٹ: ե `%s' Фƽ񤭹ߵĤޤ\n" #~ msgid "%s: warning: no write access for dir containing `%s'\n" #~ msgstr "%s: ٹ: `%s' ޤǥ쥯ȥФƽ񤭹ߵĤޤ\n" #~ msgid "%s: invalid file name: %s\n" #~ msgstr "%s: ̵ʥե̾: %s\n" #~ msgid "%s: %s: can't get status: %s\n" #~ msgstr "%s: %s: ֤Ǥޤ: %s\n" #~ msgid "" #~ "\n" #~ "%s: fatal error: aux info file corrupted at line %d\n" #~ msgstr "" #~ "\n" #~ "%s: ̿Ū顼: info ե뤬 %d ܤDzƤޤ\n" #~ msgid "%s:%d: declaration of function `%s' takes different forms\n" #~ msgstr "%s:%d: ؿ `%s' ̤ηäƤޤ\n" #~ msgid "%s: compiling `%s'\n" #~ msgstr "%s: `%s' 򥳥ѥ\n" #~ msgid "%s: wait: %s\n" #~ msgstr "%s: Ԥ: %s\n" #~ msgid "%s: subprocess got fatal signal %d\n" #~ msgstr "%s: ֥ץ̿Ūʥ %d ޤ\n" #~ msgid "%s: %s exited with status %d\n" #~ msgstr "%s: %s ϥơ %d ǽλޤ\n" #~ msgid "%s: warning: missing SYSCALLS file `%s'\n" #~ msgstr "%s: ٹ: SYSCALLS ե `%s' ޤ\n" #~ msgid "%s: can't read aux info file `%s': %s\n" #~ msgstr "%s: info ե `%s' ɤळȤǤޤ: %s\n" #~ msgid "%s: can't get status of aux info file `%s': %s\n" #~ msgstr "%s: info ե `%s' ξ֤뤳ȤǤޤ: %s\n" #~ msgid "%s: can't open aux info file `%s' for reading: %s\n" #~ msgstr "%s: info ե `%s' ɤ߹Ѥ˳ȤǤޤ: %s\n" #~ msgid "%s: error reading aux info file `%s': %s\n" #~ msgstr "%s: info ե `%s' ɤ߹˥顼: %s\n" #~ msgid "%s: error closing aux info file `%s': %s\n" #~ msgstr "%s: info ե `%s' ĤƤ˥顼: %s\n" #~ msgid "%s: can't delete aux info file `%s': %s\n" #~ msgstr "%s: info ե `%s' Ǥޤ: %s\n" #~ msgid "%s: can't delete file `%s': %s\n" #~ msgstr "%s: ե `%s' Ǥޤ: %s\n" #~ msgid "%s: warning: can't rename file `%s' to `%s': %s\n" #~ msgstr "%s: ٹ: ե `%s' `%s' ̾ѹǤޤ: %s\n" #~ msgid "%s: conflicting extern definitions of '%s'\n" #~ msgstr "%s: '%s' γ̷⤷Ƥޤ\n" #~ msgid "%s: declarations of '%s' will not be converted\n" #~ msgstr "%s: '%s' Ѵޤ\n" #~ msgid "%s: conflict list for '%s' follows:\n" #~ msgstr "%s: `%s' Ф̷ϰʲ̤Ǥ:\n" #~ msgid "%s: warning: using formals list from %s(%d) for function `%s'\n" #~ msgstr "%s: ٹ: %s(%d) ηꥹȤ򡢴ؿ `%s' ΰ٤˻Ȥޤ\n" #~ msgid "%s: %d: `%s' used but missing from SYSCALLS\n" #~ msgstr "%s: %d: `%s' ϻȤƤޤ SYSCALLS ˤޤ\n" #~ msgid "%s: %d: warning: no extern definition for `%s'\n" #~ msgstr "%s: %d: ٹ: `%s' Ф볰ޤ\n" #~ msgid "%s: warning: no static definition for `%s' in file `%s'\n" #~ msgstr "%s: ٹ: `%s' Ūե `%s' ˤޤ\n" #~ msgid "%s: multiple static defs of `%s' in file `%s'\n" #~ msgstr "%s: `%s' Ūե `%s' ǽʣƤޤ\n" #~ msgid "%s: %d: warning: source too confusing\n" #~ msgstr "%s: %d: ٹ: 𤷤Ƥޤ\n" #~ msgid "%s: %d: warning: varargs function declaration not converted\n" #~ msgstr "%s: %d: ٹ: varargs ؿѴƤޤ\n" #~ msgid "%s: declaration of function `%s' not converted\n" #~ msgstr "%s: ؿ `%s' ѴƤޤ\n" #~ msgid "%s: warning: too many parameter lists in declaration of `%s'\n" #~ msgstr "%s: ٹ: `%s' ǤβꥹȤ¿ޤ\n" #~ msgid "" #~ "\n" #~ "%s: warning: too few parameter lists in declaration of `%s'\n" #~ msgstr "" #~ "\n" #~ "%s: ٹ: `%s' ǤβꥹȤʤޤ\n" #~ msgid "%s: %d: warning: found `%s' but expected `%s'\n" #~ msgstr "%s: %d: ٹ: `%s' Ĥޤ `%s' ԤƤޤ\n" #~ msgid "%s: local declaration for function `%s' not inserted\n" #~ msgstr "%s: ؿ `%s' ΥƤޤ\n" #~ msgid "" #~ "\n" #~ "%s: %d: warning: can't add declaration of `%s' into macro call\n" #~ msgstr "" #~ "\n" #~ "%s: %d: ٹ: `%s' ޥƤӽФɲäǤޤ\n" #~ msgid "%s: global declarations for file `%s' not inserted\n" #~ msgstr "%s: ե `%s' Ƥޤ\n" #~ msgid "%s: definition of function `%s' not converted\n" #~ msgstr "%s: ؿ `%s' ѴƤޤ\n" #~ msgid "%s: %d: warning: definition of %s not converted\n" #~ msgstr "%s: %d: ٹ: %s ѴƤޤ\n" #~ msgid "%s: found definition of `%s' at %s(%d)\n" #~ msgstr "%s: `%s' %s(%d) ˸Ĥޤ\n" #~ msgid "%s: %d: warning: `%s' excluded by preprocessing\n" #~ msgstr "%s: %d: ٹ: `%s' ϥץץƤޤ\n" #~ msgid "%s: function definition not converted\n" #~ msgstr "%s: ؿѴƤޤ\n" #~ msgid "%s: `%s' not converted\n" #~ msgstr "%s: `%s' ѴƤޤ\n" #~ msgid "%s: would convert file `%s'\n" #~ msgstr "%s: `%s' Ѵޤ\n" #~ msgid "%s: converting file `%s'\n" #~ msgstr "%s: ե `%s' Ѵ\n" #~ msgid "%s: can't get status for file `%s': %s\n" #~ msgstr "%s: ե `%s' ξ֤뤳ȤǤޤ: %s\n" #~ msgid "%s: can't open file `%s' for reading: %s\n" #~ msgstr "%s: ɤ߹Ѥ˥ե `%s' 򳫤ȤǤޤ: %s\n" #~ msgid "" #~ "\n" #~ "%s: error reading input file `%s': %s\n" #~ msgstr "" #~ "\n" #~ "%s: ϥե `%s' ɤ߹˥顼: %s\n" #~ msgid "%s: can't create/open clean file `%s': %s\n" #~ msgstr "%s: 줤ʥե `%s' /ץǤޤ: %s\n" #~ msgid "%s: warning: file `%s' already saved in `%s'\n" #~ msgstr "%s: ٹ: ե `%s' ϴ `%s' ¸Ƥޤ\n" #~ msgid "%s: can't link file `%s' to `%s': %s\n" #~ msgstr "%s: ե `%s' `%s' ˥󥯤Ǥޤ: %s\n" #~ msgid "%s: can't create/open output file `%s': %s\n" #~ msgstr "%s: ϥե `%s' 곫ꤹ뤳ȤǤޤ: %s\n" #~ msgid "%s: can't change mode of file `%s': %s\n" #~ msgstr "%s: ե `%s' Υ⡼ɤѹǤޤ: %s\n" #~ msgid "%s: cannot get working directory: %s\n" #~ msgstr "%s: ȥǥ쥯ȥ꤬ʬޤ: %s\n" #~ msgid "%s: input file names must have .c suffixes: %s\n" #~ msgstr "%s: ϥե̾ˤϳĥ .c ʤФޤ: %s\n" #~ msgid "conversion from NaN to int" #~ msgstr "NaN ؤѴǤ" #~ msgid "floating point overflow" #~ msgstr "ưСեޤ" #~ msgid "overflow on truncation to integer" #~ msgstr "ؤڤͤǥСեޤ" #~ msgid "overflow on truncation to unsigned integer" #~ msgstr "̵ؤڤͤǥСեޤ" #~ msgid "%s: argument domain error" #~ msgstr "%s: ΰ襨顼Ǥ" #~ msgid "%s: function singularity" #~ msgstr "%s: ؿñ" #~ msgid "%s: overflow range error" #~ msgstr "%s: Сեϰϥ顼" #~ msgid "%s: underflow range error" #~ msgstr "%s: եϰϥ顼" #~ msgid "%s: total loss of precision" #~ msgstr "%s: Ū٤㲼" #~ msgid "%s: partial loss of precision" #~ msgstr "%s: ʬŪ٤㲼" #~ msgid "%s: NaN - producing operation" #~ msgstr "%s: NaN - ޤ" #~ msgid "Output constraint %d must specify a single register" #~ msgstr " %d ϰĤΥ쥸ꤷʤФʤޤ" #~ msgid "Output regs must be grouped at top of stack" #~ msgstr "ϥ쥸ϥåΥȥåפ˥롼פƤʤФʤޤ" #~ msgid "Implicitly popped regs must be grouped at top of stack" #~ msgstr "ۤ pop 쥸ϥåΥȥåפ˥롼פƤʤФʤޤ" #~ msgid "Output operand %d must use `&' constraint" #~ msgstr "ϥڥ %d `&' ȤʤФʤޤ" #~ msgid "can't use '%s' as a %s register" #~ msgstr "'%s' %s Υ쥸ȤƻȤȤǤޤ" #~ msgid "global register variable follows a function definition" #~ msgstr " register ѿؿθˤޤ" #~ msgid "register used for two global register variables" #~ msgstr "쥸ĤΥХ쥸ѿȤƻȤޤ" #~ msgid "call-clobbered register used for global register variable" #~ msgstr "ƤӽФ˲쥸Х쥸ѿȤƻȤޤ" #~ msgid "cannot reload integer constant operand in `asm'" #~ msgstr "ڥɤ `asm' ǺƥɤǤޤ" #~ msgid "impossible register constraint in `asm'" #~ msgstr "`asm' Ǥϥ쥸Ԥʤޤ" #~ msgid "`&' constraint used with no register class" #~ msgstr "`&' 󤬥쥸饹̵ǻȤޤ" #~ msgid "inconsistent operand constraints in an `asm'" #~ msgstr "`asm' ǤΥڥ̷⤷Ƥޤ" #~ msgid "frame size too large for reliable stack checking" #~ msgstr "ե졼ॵ礭ơåǤʤʤޤ" #~ msgid "try reducing the number of local variables" #~ msgstr "ѿο︺ƤߤƤ" #~ msgid "Can't find a register in class `%s' while reloading `asm'." #~ msgstr "饹 `%s' Υ쥸 `asm' ƥ˸Ĥޤ" #~ msgid "Unable to find a register to spill in class `%s'." #~ msgstr "饹 `%s' Ǥդ뤤Ȥ쥸򸫤Ĥޤ" #~ msgid "`asm' operand requires impossible reload" #~ msgstr "`asm' ڥɤϺƥɤǤʤ׵ᤵޤ" #~ msgid "`asm' operand constraint incompatible with operand size" #~ msgstr "`asm' ڥ󤬥ڥɥ礷ޤ" #~ msgid "output operand is constant in `asm'" #~ msgstr "ϥڥɤ `asm' Ǥ" #~ msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d" #~ msgstr "RTL : elt %d(%s) Ǹ elt %d(%s ) Ȱ˥ޤ (%s:%d)" #~ msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" #~ msgstr "RTL : elt %d '%c' ΤϤʤΤ '%c' (rtx %s, %s )Ǥ (%s:%d)" #~ msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d" #~ msgstr "RTL : elt %d '%c' '%c' ΤϤʤΤ '%c' (rtx %s, %s ) Ǥ (%s:%d)" #~ msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d" #~ msgstr "RTL : `%s' ΤϤʤΤ `%s' (%s )Ǥ (%s:%d)" #~ msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d" #~ msgstr "RTL : `%s' `%s' ΤϤʤΤ `%s' (%s )Ǥ (%s:%d)" #~ msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" #~ msgstr "RTL check: ٥ȥ elt %d Ǹ elt %d (%s )Ȱ˥ޤ (%s:%d)" #~ msgid "jump to `%s' invalidly jumps into binding contour" #~ msgstr "`%s' ؤΥפŻ줿֥åء̵˥פƤޤ" #~ msgid "label `%s' used before containing binding contour" #~ msgstr "٥ `%s' Ż줿֥å˻Ȥޤ" #~ msgid "`asm' cannot be used in function where memory usage is checked" #~ msgstr "`asm' ϴؿǥѤĴ٤ǤϻȤޤ" #~ msgid "`asm' cannot be used with `-fcheck-memory-usage'" #~ msgstr "`asm' `-fcheck-memory-usage' Ȱ˻Ȥޤ" #~ msgid "unknown register name `%s' in `asm'" #~ msgstr "`asm' ʥ쥸̾ `%s' ޤ" #~ msgid "operand constraints for `asm' differ in number of alternatives" #~ msgstr "`asm' ΥڥֹȤϰۤʤޤ" #~ msgid "output operand constraint lacks `='" #~ msgstr "ϥڥ `=' 礱Ƥޤ" #~ msgid "output constraint `%c' for operand %d is not at the beginning" #~ msgstr " `%c' (operand %d ) ʬˤޤ" #~ msgid "output operand constraint %d contains `+'" #~ msgstr "ϥڥ %d `+' ޤǤޤ" #~ msgid "operand constraint contains '+' or '=' at illegal position." #~ msgstr "ڥ桢ʰ֤ '+' '=' ޤޤƤޤ" #~ msgid "`%%' constraint used with last operand" #~ msgstr "`%%' 󤬺ǸΥڥɤȤȤ˻Ȥޤ" #~ msgid "matching constraint not valid in output operand" #~ msgstr "ϥڥޤ" #~ msgid "output number %d not directly addressable" #~ msgstr "ֹ %d ľܥɥ쥹Ǥޤ" #~ msgid "more than %d operands in `asm'" #~ msgstr "`asm' %d ۤ륪ڥɤޤ" #~ msgid "hard register `%s' listed as input operand to `asm'" #~ msgstr "ϡɥ쥸 `%s' `asm' ФϥڥɤȤϿޤ" #~ msgid "input operand constraint contains `%c'" #~ msgstr "ϥڥ `%c' ޤǤޤ" #~ msgid "matching constraint references invalid operand number" #~ msgstr "Ŭ礵ˡ̵ʥڥֹ򻲾Ȥޤ" #~ msgid "asm operand %d probably doesn't match constraints" #~ msgstr "asm ڥ %d ϶餯Ŭ礷ޤ" #~ msgid "unused variable `%s'" #~ msgstr "ѿ `%s' ϻȤޤǤ" #~ msgid "enumeration value `%s' not handled in switch" #~ msgstr " `%s' switch ǰƤޤ" #~ msgid "case value `%ld' not in enumerated type" #~ msgstr "case `%ld' 󷿤ˤϤޤ" #~ msgid "case value `%ld' not in enumerated type `%s'" #~ msgstr "case `%ld' `%s' ˤϤޤ" #~ msgid "type size can't be explicitly evaluated" #~ msgstr "礭ŪɾΤǤϤꤨޤ" #~ msgid "variable-size type declared outside of any function" #~ msgstr "ѿؿγ¦ޤ" #~ msgid "size of `%s' is %d bytes" #~ msgstr "`%s' Υ %d ХȤǤ" #~ msgid "size of `%s' is larger than %d bytes" #~ msgstr "`%s' Υ %d ХȤ礭ʤäƤޤ" #~ msgid "packed attribute causes inefficient alignment for `%s'" #~ msgstr "packed ° `%s' ФԸΨʥ饤Ȥޤ" #~ msgid "packed attribute is unnecessary for `%s'" #~ msgstr "packed ° `%s' ˤɬפޤ" #~ msgid "padding struct to align `%s'" #~ msgstr "`%s' 򥢥饤󤹤뤿˹¤Τѥǥ󥰤ޤ" #~ msgid "padding struct size to alignment boundary" #~ msgstr "饤ȶΥ˹¤Τѥǥ󥰤ޤ" #~ msgid "packed attribute causes inefficient alignment" #~ msgstr "packed °ԸΨʥ饤Ȥޤ" #~ msgid "packed attribute is unnecessary" #~ msgstr "packed °ɬפޤ" #~ msgid "\"%s\" and \"%s\" identical in first %d characters" #~ msgstr "\"%s\" \"%s\" Ϻǽ %d ʸƱǤ" #~ msgid "" #~ "\n" #~ "Execution times (seconds)\n" #~ msgstr "" #~ "\n" #~ "¹Բ ()\n" #~ msgid " TOTAL :" #~ msgstr " :" #~ msgid "time in %s: %ld.%06ld (%ld%%)\n" #~ msgstr "%s Ǥλ: %ld.%06ld (%ld%%)\n" #~ msgid "collect: reading %s\n" #~ msgstr "collect: %s ɤ߹ߤޤ\n" #~ msgid "collect: recompiling %s\n" #~ msgstr "collect: %s ƥѥ뤷ޤ\n" #~ msgid "collect: tweaking %s in %s\n" #~ msgstr "collect: %s ĥޤ(%s )\n" #~ msgid "collect: relinking\n" #~ msgstr "collect: ƥ󥯤ޤ\n" #~ msgid "ld returned %d exit status" #~ msgstr "ld ϥơ %d ǽλޤ" #~ msgid "Generate debugging info in default format" #~ msgstr "ǥեȷΥǥХå" #~ msgid "Generate debugging info in default extended format" #~ msgstr "ǥեȳĥΥǥХå" #~ msgid "Generate STABS format debug info" #~ msgstr "STABS ΥǥХå" #~ msgid "Generate extended STABS format debug info" #~ msgstr "ĥ STABS ΥǥХå" #~ msgid "Generate DWARF-1 format debug info" #~ msgstr "DWARF-1 ΥǥХå" #~ msgid "Generate extended DWARF-1 format debug info" #~ msgstr "ĥ DWARF-1 ΥǥХå" #~ msgid "Generate DWARF-2 debug info" #~ msgstr "DWARF-2 ΥǥХå" #~ msgid "Generate XCOFF format debug info" #~ msgstr "XCOFF ΥǥХå" #~ msgid "Generate extended XCOFF format debug info" #~ msgstr "ĥ XCOFF ΥǥХå" #~ msgid "Generate COFF format debug info" #~ msgstr "COFF ΥǥХå" #~ msgid "Do not store floats in registers" #~ msgstr "쥸ưǼʤ" #~ msgid "Consider all mem refs through pointers as volatile" #~ msgstr "ݥ󥿷ͳΥ껲Ȥ volatile Ȥߤʤ" #~ msgid "Consider all mem refs to global data to be volatile" #~ msgstr "ǡؤΥ껲Ȥ volatile Ȥߤʤ" #~ msgid "Consider all mem refs to static data to be volatile" #~ msgstr "ŪǡؤΥ껲Ȥ volatile Ȥߤʤ" #~ msgid "Defer popping functions args from stack until later" #~ msgstr "ؿ򥹥å pop ΤƤӽФޤ٤餻" #~ msgid "When possible do not generate stack frames" #~ msgstr "ǽʾ硢åե졼ʤ" #~ msgid "Optimize sibling and tail recursive calls" #~ msgstr "sibling ƤӽФƵƤӽФŬ" #~ msgid "When running CSE, follow jumps to their targets" #~ msgstr "CSE ưȤΥåȤؤΥפɿ魯" #~ msgid "When running CSE, follow conditional jumps" #~ msgstr "CSE ưȤ兩פɿ魯" #~ msgid "Perform a number of minor, expensive optimisations" #~ msgstr "ΩʤȤΤŬԤʤ" #~ msgid "Perform jump threading optimisations" #~ msgstr "ʬŬԤʤ" #~ msgid "Perform strength reduction optimisations" #~ msgstr "ٺ︺ŬԤʤ" #~ msgid "Perform loop unrolling when iteration count is known" #~ msgstr "ȿΤΤȤ롼ŸԤʤ" #~ msgid "Perform loop unrolling for all loops" #~ msgstr "ƤΥ롼פǥ롼ŸԤʤ" #~ msgid "Force all loop invariant computations out of loops" #~ msgstr "롼Ѥʷ׻롼פγ˰ư" #~ msgid "Strength reduce all loop general induction variables" #~ msgstr "롼פƤΰͶƳѿٺ︺" #~ msgid "Store strings in writable data section" #~ msgstr "ʸ񤭹߲ǽǡ˳Ǽ" #~ msgid "Enable machine specific peephole optimisations" #~ msgstr "ͭŬͭˤ" #~ msgid "Copy memory operands into registers before using" #~ msgstr "ꥪڥɤѤ˥쥸إԡ" #~ msgid "Copy memory address constants into regs before using" #~ msgstr "ꥢɥ쥹Ѥ˥쥸إԡ" #~ msgid "Allow function addresses to be held in registers" #~ msgstr "ؿɥ쥹쥸˻Ĥ" #~ msgid "Integrate simple functions into their callers" #~ msgstr "ñʴؿƤӽФ¦礹" #~ msgid "Generate code for funcs even if they are fully inlined" #~ msgstr "ƥ饤Ȥ줿ȤƤؿΥɤ" #~ msgid "Pay attention to the 'inline' keyword" #~ msgstr "'inline' ɤդʧ" #~ msgid "Emit static const variables even if they are not used" #~ msgstr "ѤʤŪѿǤäƤϤ" #~ msgid "Check for syntax errors, then stop" #~ msgstr "ʸˡ顼򸡽Фơߤ" #~ msgid "Mark data as shared rather than private" #~ msgstr "ǡץ饤١ȤǤϤʤͭ褦ޡ" #~ msgid "Enable saving registers around function calls" #~ msgstr "ؿƤӽФǥ쥸¸ͭˤ" #~ msgid "Return 'short' aggregates in memory, not registers" #~ msgstr "'' Τ쥸ǤϤʤ˳Ǽ֤" #~ msgid "Return 'short' aggregates in registers" #~ msgstr "'' Τ쥸˳Ǽ֤" #~ msgid "Attempt to fill delay slots of branch instructions" #~ msgstr "ʬ̿ٱ䥹åȤȤȤߤ" #~ msgid "Perform the global common subexpression elimination" #~ msgstr "Х붦ʬ" #~ msgid "Run CSE pass after loop optimisations" #~ msgstr "롼׺Ŭ˶ʬ¹" #~ msgid "Run the loop optimiser twice" #~ msgstr "롼׺Ŭ¹Ԥ" #~ msgid "Delete useless null pointer checks" #~ msgstr "̵̣ null ݥ󥿸" #~ msgid "Pretend that host and target use the same FP format" #~ msgstr "ۥȤȥåȤƱưȤ񤤤򤵤" #~ msgid "Reschedule instructions before register allocation" #~ msgstr "쥸ݤ̿¤ľ" #~ msgid "Reschedule instructions after register allocation" #~ msgstr "쥸ݤθ̿¤ľ" #~ msgid "Enable scheduling across basic blocks" #~ msgstr "ܥ֥å٤֤̿ͭˤ" #~ msgid "Allow speculative motion of non-loads" #~ msgstr "ɤǤԳμ¤ưĤ" #~ msgid "Allow speculative motion of some loads" #~ msgstr "ĤΥɤǤԳμ¤ưĤ" #~ msgid "Allow speculative motion of more loads" #~ msgstr "¿ΥɤǤԳμ¤ưĤ" #~ msgid "Replace add,compare,branch with branch on count reg" #~ msgstr "ûӥ֥˥ȥ쥸Υ֥Ȥ" #~ msgid "Generate position independent code, if possible" #~ msgstr "ǽǤаΩɤ" #~ msgid "Enable exception handling" #~ msgstr "㳰ªͭˤ" #~ msgid "Just generate unwind tables for exception handling" #~ msgstr "ᤷԤʤ㳰­ѥơ֥" #~ msgid "Support synchronous non-call exceptions" #~ msgstr "ƱƤӽФ㳰򥵥ݡȤ" #~ msgid "Insert arc based program profiling code" #~ msgstr "ץबɥץե뤹븵ˤʤ̤" #~ msgid "Create data files needed by gcov" #~ msgstr "gcov ɬפȤǡե" #~ msgid "Use profiling information for branch probabilities" #~ msgstr "ʬϩ¬ѤΥץեѤ" #~ msgid "Reorder basic blocks to improve code placement" #~ msgstr "֤뤿˴ܥ֥å" #~ msgid "Do the register renaming optimization pass" #~ msgstr "ŬΥ쥸ĤѤԤʤ" #~ msgid "Improve FP speed by violating ANSI & IEEE rules" #~ msgstr "ANSI & IEEE §ˤäư®٤" #~ msgid "Do not put unitialised globals in the common section" #~ msgstr "ѿʤ󥻥֤ʤ" #~ msgid "Do not generate .size directives" #~ msgstr ".size ̿ʤ" #~ msgid "place each function into its own section" #~ msgstr "ơδؿ򤽤켫ȤΥ֤" #~ msgid "place data items into their own section" #~ msgstr "ǡܤ򤽤鼫ȤΥ֤" #~ msgid "Add extra commentry to assembler output" #~ msgstr ";ʬʥȤ򥢥֥Ϥɲä" #~ msgid "Output GNU ld formatted global initialisers" #~ msgstr "GNU ld ҤϤ" #~ msgid "Enables a register move optimisation" #~ msgstr "ư̿Ŭ쥸ͭˤ" #~ msgid "Do the full regmove optimization pass" #~ msgstr "ŬǺ¤ regmove Ԥʤ" #~ msgid "Pack structure members together without holes" #~ msgstr "¤ΥФ꤬ʤ褦˥ѥå" #~ msgid "Insert stack checking code into the program" #~ msgstr "ץ˥åХɤ" #~ msgid "Specify that arguments may alias each other & globals" #~ msgstr "ǡ¾ΰ̾ˤʤꤦꤹ" #~ msgid "Assume arguments may alias globals but not each other" #~ msgstr "ǡ̾ˤʤꤦ뤬¾ΰȤ̾ǤϤʤȤߤʤ" #~ msgid "Assume arguments do not alias each other or globals" #~ msgstr "ǡ¾ΰ̾ˤϤʤʤȤߤʤ" #~ msgid "Assume strict aliasing rules apply" #~ msgstr "̩̾§Ŭ礹Ȥߤʤ" #~ msgid "Align the start of loops" #~ msgstr "롼פγϤ򥢥饤󤹤" #~ msgid "Align labels which are only reached by jumping" #~ msgstr "٥ΤãȤʤΤ򥢥饤󤹤" #~ msgid "Align all labels" #~ msgstr "ƤΥ٥򥢥饤󤹤" #~ msgid "Align the start of functions" #~ msgstr "ؿγϤ򥢥饤󤹤" #~ msgid "Generate code to check every memory access" #~ msgstr "ƥꥢ򸡽Ф륳ɤ" #~ msgid "Add a prefix to all function names" #~ msgstr "Ƥδؿ̾Ƭɲä" #~ msgid "Suppress output of instruction numbers and line number notes in debugging dumps" #~ msgstr "ǥХåפֹ̿ȹֹΡȤνϤ" #~ msgid "Instrument function entry/exit with profiling calls" #~ msgstr "ؿ/иǥץեƤӽФ" #~ msgid "Enable SSA optimizations" #~ msgstr "SSA Ŭͭˤ" #~ msgid "Enable dead code elimination" #~ msgstr "ǥåɥɤνԤʤ" #~ msgid "External symbols have a leading underscore" #~ msgstr "ܥƬʸ" #~ msgid "Process #ident directives" #~ msgstr "#ident ǥ쥯ƥ֤" #~ msgid "Enables an rtl peephole pass run before sched2" #~ msgstr "֤̿ rtl ͭˤ" #~ msgid "Enables guessing of branch probabilities" #~ msgstr "ʬϩ¬ͭˤ" #~ msgid "Set errno after built-in math functions" #~ msgstr "Ȥ߹߿شؿθ errno 򥻥åȤ" #~ msgid "Convert floating point constant to single precision constant" #~ msgstr "ưñѴ" #~ msgid "Report time taken by each compiler pass at end of run" #~ msgstr "¹Խλ˥ѥγƲפ֤𤹤" #~ msgid "Report on permanent memory allocation at end of run" #~ msgstr "¹Խλ˱³Ū˳ݤ줿𤹤" #~ msgid "Trap for signed overflow in addition / subtraction / multiplication." #~ msgstr "դβû//軻Ǥη夢դȥåפ" #~ msgid "Compile just for ISO C89" #~ msgstr "ISO C89 Ѥ˥ѥ뤹" #~ msgid "Do not promote floats to double if using -traditional" #~ msgstr "-traditional ѻˤϡư˴ؤ float double ˳ʾ夲ʤ" #~ msgid "Determine language standard" #~ msgstr "ɸꤹ" #~ msgid "Make bitfields by unsigned by default" #~ msgstr "ӥåȥեɤǥեȤ̵Ȥ" #~ msgid "Make 'char' be signed by default" #~ msgstr "'char' ǥեȤդȤ" #~ msgid "Make 'char' be unsigned by default" #~ msgstr "'char' ǥեȤ̵Ȥ" #~ msgid "Attempt to support traditional K&R style C" #~ msgstr "Ť K&R C ΥݡȤߤ" #~ msgid "Do not recognise the 'asm' keyword" #~ msgstr "'asm' ͽǧʤ" #~ msgid "Do not recognise any built in functions" #~ msgstr "ĤȤ߹ߴؿǧʤ" #~ msgid "Assume normal C execution environment" #~ msgstr "̾ C ¹ԴĶȤ" #~ msgid "Assume that standard libraries & main might not exist" #~ msgstr "ɸ饤֥ main ¸ߤʤǽΤȤ" #~ msgid "Allow different types as args of ? operator" #~ msgstr "? 黻ҤΰȤưۤʤäƤ" #~ msgid "Allow the use of $ inside identifiers" #~ msgstr "̻Ǥ $ λѤƤ" #~ msgid "Use the same size for double as for float" #~ msgstr "double Υ float ƱȤƻѤ" #~ msgid "Use the smallest fitting integer to hold enums" #~ msgstr "󷿤ݻǤǾѤ" #~ msgid "Override the underlying type for wchar_t to `unsigned short'" #~ msgstr "wchar_t κŪʷ `unsigned short' ʤ" #~ msgid "Enable most warning messages" #~ msgstr "ؤɤηٹåͭˤ" #~ msgid "Warn about casting functions to incompatible types" #~ msgstr "˸ߴΤʤؿΥ㥹Ȥ˴ؤƷٹ𤹤" #~ msgid "Warn about functions which might be candidates for format attributes" #~ msgstr "format °θȤʤꤽʴؿˤĤƷٹ𤹤" #~ msgid "Warn about casts which discard qualifiers" #~ msgstr "Ҥ륭㥹ȤˤĤƷٹ𤹤" #~ msgid "Warn about subscripts whose type is 'char'" #~ msgstr "źη 'char' Ǥзٹ𤹤" #~ msgid "Warn if nested comments are detected" #~ msgstr "ҤˤʤäȤ򸡽ФȤ˷ٹ𤹤" #~ msgid "Warn about possibly confusing type conversions" #~ msgstr "Ѵ𤹤ǽ˴ؤƷٹ𤹤" #~ msgid "Warn about printf/scanf/strftime/strfmon format anomalies" #~ msgstr "printf/scanf/strftime/strfmon §ŪʤΤ˴ؤƷٹ𤹤" #~ msgid "Don't warn about strftime formats yielding 2 digit years" #~ msgstr "strftime ǯɽƤηٹ𤷤ʤ" #~ msgid "Don't warn about too many arguments to format functions" #~ msgstr "format ؿؤ¿˴ؤٹ𤷤ʤ" #~ msgid "Warn about non-string-literal format strings" #~ msgstr "ʸƥ format ʸˤĤƷٹ𤹤" #~ msgid "Warn about possible security problems with format functions" #~ msgstr "ƥŪȤʤꤦ format ؿ˴ؤƷٹ𤹤" #~ msgid "Warn about implicit function declarations" #~ msgstr "ۤδؿ˴ؤƷٹ𤹤" #~ msgid "Warn when a declaration does not specify a type" #~ msgstr "ꤷƤʤ˷ٹ𤹤" #~ msgid "Warn about the use of the #import directive" #~ msgstr "#import ǥ쥯ƥ֤Ѥ˴ؤƷٹ𤹤" #~ msgid "Do not warn about using 'long long' when -pedantic" #~ msgstr "-pedantic Ǥ 'long long' λѤˤĤƤϷٹ𤷤ʤ" #~ msgid "Warn about suspicious declarations of main" #~ msgstr "路 main ˴ؤƷٹ𤹤" #~ msgid "Warn about possibly missing braces around initialisers" #~ msgstr "Ҥμ˥֥졼礤ƤͤǤзٹ𤹤" #~ msgid "Warn about global funcs without previous declarations" #~ msgstr "ʤؿ˴ؤƷٹ𤹤" #~ msgid "Warn about global funcs without prototypes" #~ msgstr "ץȥפʤؿ˴ؤƷٹ𤹤" #~ msgid "Warn about use of multicharacter literals" #~ msgstr "ʣʸƥλѤ˴ؤƷٹ𤹤" #~ msgid "Warn about externs not at file scope level" #~ msgstr "ե륹ץ٥Ǥʤ extern ˴ؤƷٹ𤹤" #~ msgid "Warn about possible missing parentheses" #~ msgstr "̤礤Ƥǽ˷ٹ𤹤" #~ msgid "Warn about possible violations of sequence point rules" #~ msgstr "Ѵλ§ˤǽ˷ٹ𤹤" #~ msgid "Warn about function pointer arithmetic" #~ msgstr "ؿݥ󥿤η׻˴ؤƷٹ𤹤" #~ msgid "Warn about multiple declarations of the same object" #~ msgstr "Ʊ쥪֥Ȥʣзٹ𤹤" #~ msgid "Warn about signed/unsigned comparisons" #~ msgstr "դ/̵Ӥ˴ؤƷٹ𤹤" #~ msgid "Warn about testing equality of floating point numbers" #~ msgstr "ưƥȤ˴ؤƷٹ𤹤" #~ msgid "Warn about unrecognized pragmas" #~ msgstr "ǧǤʤ pragma ˴ؤƷٹ𤹤" #~ msgid "Warn about non-prototyped function decls" #~ msgstr "ץȥפƤʤؿ˴ؤƷٹ𤹤" #~ msgid "Warn about constructs whose meaning change in ISO C" #~ msgstr "ISO C Ǥΰ̣ѹ줿Ƥ˴ؤƷٹ𤹤" #~ msgid "Warn when trigraphs are encountered" #~ msgstr "ȥ饤դȯȤ˷ٹ𤹤" #~ msgid "Mark strings as 'const char *'" #~ msgstr "ʸ 'const char *' Ȥƥޡ" #~ msgid "Warn when a function is unused" #~ msgstr "ؿȤʤȤ˷ٹ𤹤" #~ msgid "Warn when a label is unused" #~ msgstr "٥뤬ȤʤȤ˷ٹ𤹤" #~ msgid "Warn when a function parameter is unused" #~ msgstr "ؿβȤʤȤ˷ٹ𤹤" #~ msgid "Warn when a variable is unused" #~ msgstr "ѿȤʤȤ˷ٹ𤹤" #~ msgid "Warn when an expression value is unused" #~ msgstr "ͤȤʤȤ˷ٹ𤹤" #~ msgid "Do not suppress warnings from system headers" #~ msgstr "ƥإåηٹʤ" #~ msgid "Treat all warnings as errors" #~ msgstr "Ƥηٹ򥨥顼ȤƼ갷" #~ msgid "Warn when one local variable shadows another" #~ msgstr "ѿ¾ΤΤʤȤ˷ٹ𤹤" #~ msgid "Warn about enumerated switches missing a specific case" #~ msgstr " switch case ꤬礱ƤΤ˴ؤƷٹ𤹤" #~ msgid "Warn about returning structures, unions or arrays" #~ msgstr "¤Ρ֤Τ˴ؤƷٹ𤹤" #~ msgid "Warn about pointer casts which increase alignment" #~ msgstr "ݥ󥿤Υ㥹Ȥǥ饤ȤäΤ˴ؤƷٹ𤹤" #~ msgid "Warn about code that will never be executed" #~ msgstr "¹Ԥ뤳Ȥʤɤ˴ؤƷٹ𤹤" #~ msgid "Warn about unitialized automatic variables" #~ msgstr "ʤưѿ˴ؤƷٹ𤹤" #~ msgid "Warn when an inlined function cannot be inlined" #~ msgstr "饤ؿ򥤥饤󲽤Ǥʤ˷ٹ𤹤" #~ msgid "Warn when the packed attribute has no effect on struct layout" #~ msgstr "packed °¤֤˱ƶʤ˷ٹ𤹤" #~ msgid "Warn when padding is required to align struct members" #~ msgstr "¤ΥФΥ饤ǡѥǥ󥰤פ˷ٹ𤹤" #~ msgid "Warn when an optimization pass is disabled" #~ msgstr "Ŭ̵줿˷ٹ𤹤" #~ msgid "Warn about functions which might be candidates for attribute noreturn" #~ msgstr "noreturn °θȤʤꤽʴؿ˴ؤƷٹ𤹤" #~ msgid "Invalid option `%s'" #~ msgstr "̵ʥץ `%s'" #~ msgid "Internal error: %s" #~ msgstr "顼: %s" #~ msgid "`%s' declared `static' but never defined" #~ msgstr "`%s' `static' ޤ̤Ǥ" #~ msgid "`%s' defined but not used" #~ msgstr "`%s' ޤȤޤǤ" #~ msgid "can't open %s for writing" #~ msgstr "%s 񤭹Ѥ˳ޤǤ" #~ msgid "-ffunction-sections not supported for this target." #~ msgstr "-ffunction-sections ϤΥåȤǼޤ" #~ msgid "-fdata-sections not supported for this target." #~ msgstr "-fdata-sections ϤΥåȤǼޤ" #~ msgid "-ffunction-sections disabled; it makes profiling impossible." #~ msgstr "-ffunction-sections ̵Ǥ -- ץեԲǽǤ" #~ msgid "-ffunction-sections may affect debugging on some targets." #~ msgstr "-ffunction-sections ϥåȤˤäƤϥǥХå˱ƶ뤫⤷ޤ" #~ msgid "Errors detected in input file (your bison.simple is out of date)\n" #~ msgstr "ϥե˥顼 (ʤ bison.simple ϸŤޤ)\n" #~ msgid "error writing to %s" #~ msgstr "%s ؤν񤭹ߥ顼Ǥ" #~ msgid "invalid register name `%s' for register variable" #~ msgstr "`%s' ϥ쥸ѿȤƤ̵ʥ쥸̾Ǥ" #~ msgid " -ffixed- Mark as being unavailable to the compiler\n" #~ msgstr " -ffixed- ѥФ ԲĤȥޡ\n" #~ msgid " -fcall-used- Mark as being corrupted by function calls\n" #~ msgstr " -fcall-used- ؿƤӽФ˲ Ȥƥޡ\n" #~ msgid " -fcall-saved- Mark as being preserved across functions\n" #~ msgstr " -fcall-saved- ؿ̤ݻȥޡ\n" #~ msgid " -finline-limit= Limits the size of inlined functions to \n" #~ msgstr " -finline-limit= 饤ؿΥ ¤\n" #~ msgid " -fmessage-length= Limits diagnostics messages lengths to characters per line. 0 suppresses line-wrapping\n" #~ msgstr " -fmessage-length= ǥåĹդ ʸ¤롣 0 ȲԤ\n" #~ msgid " -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping\n" #~ msgstr "" #~ " -fdiagnostics-show-location=[once | every-line] ǥåβԤκݤ,\n" #~ " ־󤬹Ԥκǽɽ٤ꤹ\n" #~ msgid " -O[number] Set optimisation level to [number]\n" #~ msgstr " -O[number] Ŭ٥ [number] ꤹ\n" #~ msgid " -Os Optimise for space rather than speed\n" #~ msgstr " -Os ®٤⥵κŬԤʤ\n" #~ msgid " -pedantic Issue warnings needed by strict compliance to ISO C\n" #~ msgstr " -pedantic ̩ ISO C ؤŬפٹȯ\n" #~ msgid " -pedantic-errors Like -pedantic except that errors are produced\n" #~ msgstr " -pedantic-errors -pedantic Ʊͤ顼ȯ\n" #~ msgid " -w Suppress warnings\n" #~ msgstr " -w ٹ\n" #~ msgid " -W Enable extra warnings\n" #~ msgstr " -W ̤ʷٹͭˤ\n" #~ msgid " -Wunused Enable unused warnings\n" #~ msgstr " -Wunused ̤ѤˤĤƤηٹͭˤ\n" #~ msgid " -Wid-clash- Warn if 2 identifiers have the same first chars\n" #~ msgstr " -Wid-clash- Ĥμ̻Ҥ ʸʬפƤзٹ𤹤\n" #~ msgid " -Wlarger-than- Warn if an object is larger than bytes\n" #~ msgstr " -Wlarger-than- ֥Ȥ ХȤ礭зٹ𤹤\n" #~ msgid " -p Enable function profiling\n" #~ msgstr " -p ؿץեͭˤ\n" #~ msgid " -a Enable block profiling \n" #~ msgstr " -a ֥åץեͭˤ\n" #~ msgid " -ax Enable jump profiling \n" #~ msgstr " -ax ץץեͭˤ\n" #~ msgid " -o Place output into \n" #~ msgstr " -o Ϥ ˽񤭹\n" #~ msgid "" #~ " -G Put global and static data smaller than \n" #~ " bytes into a special section (on some targets)\n" #~ msgstr "" #~ " -G ХȤ꾮褪Ūǡ\n" #~ " ̤ʥ֤ (åȼ)\n" #~ msgid " -aux-info Emit declaration info into \n" #~ msgstr " -aux-info ȯԤ\n" #~ msgid " -quiet Do not display functions compiled or elapsed time\n" #~ msgstr " -quiet ѥ뤵줿ؿв֤ɽʤ\n" #~ msgid " -version Display the compiler's version\n" #~ msgstr " -version ѥΥСɽ\n" #~ msgid " -d[letters] Enable dumps from specific passes of the compiler\n" #~ msgstr " -d[letters] ѥβΥפͭˤ\n" #~ msgid " -dumpbase Base name to be used for dumps from specific passes\n" #~ msgstr " -dumpbase Υפ˻Ȥ̾Υ١Ȥ\n" #~ msgid " -fsched-verbose= Set the verbosity level of the scheduler\n" #~ msgstr " -fsched-verbose= 塼٥ꤹ\n" #~ msgid " --help Display this information\n" #~ msgstr " --help ξɽ\n" #~ msgid "" #~ "\n" #~ "Language specific options:\n" #~ msgstr "" #~ "\n" #~ "ͥץ:\n" #~ msgid " %-23.23s [undocumented]\n" #~ msgstr " %-23.23s [ʸ񲽤Ƥʤ]\n" #~ msgid "" #~ "\n" #~ "There are undocumented %s specific options as well.\n" #~ msgstr "" #~ "\n" #~ "ʸ񲽤Ƥʤ %s ͥץ⤢ޤ\n" #~ msgid "" #~ "\n" #~ " Options for %s:\n" #~ msgstr "" #~ "\n" #~ " %s ѥץ:\n" #~ msgid "" #~ "\n" #~ "Target specific options:\n" #~ msgstr "" #~ "\n" #~ "åȻͥץ:\n" #~ msgid " -m%-23.23s [undocumented]\n" #~ msgstr " -m%-23.23s [ʸ񲽤Ƥʤ]\n" #~ msgid "" #~ "\n" #~ "There are undocumented target specific options as well.\n" #~ msgstr "" #~ "\n" #~ "ʸ񲽤ƤʤåȻͥץ⤢ޤ\n" #~ msgid " They exist, but they are not documented.\n" #~ msgstr " ¸ߤޤʸ񲽤Ƥޤ\n" #~ msgid "unrecognized gcc debugging option: %c" #~ msgstr "ǧǤʤ gcc ǥХåץ: %c" #~ msgid "unrecognized register name `%s'" #~ msgstr "ǧǤʤ쥸̾ `%s'" #~ msgid "Unrecognized option `%s'" #~ msgstr "ǧǽʥץ `%s'" #~ msgid "use -gdwarf -g%d for DWARF v1, level %d" #~ msgstr "-gdwarf -g%d (DWARF v1, ٥ %d)" #~ msgid "use -gdwarf-2 for DWARF v2" #~ msgstr "-gdwarf-2 (DWARF v2)" #~ msgid "ignoring option `%s' due to invalid debug level specification" #~ msgstr "̵ʥǥХå٥ˤꡢץ `%s' ̵뤷ޤ" #~ msgid "`%s': unknown or unsupported -g option" #~ msgstr "`%s': ޤϥݡȤʤ -g ץǤ" #~ msgid "`%s' ignored, conflicts with `-g%s'" #~ msgstr "`%s' `-g%s' ȶ礹뤿̵뤵ޤ" #~ msgid "-param option missing argument" #~ msgstr "-param ץ˰ޤ" #~ msgid "invalid --param option: %s" #~ msgstr "̵ --param ץ: %s" #~ msgid "invalid parameter value `%s'" #~ msgstr "̵ʥѥ᥿ `%s'" #~ msgid "`-a' option (basic block profile) not supported" #~ msgstr "`-a' ץ(ܥ֥åץե)ϥݡȤƤޤ" #~ msgid "`-ax' option (jump profiling) not supported" #~ msgstr "`-ax' ץ(ץץե)ϥݡȤƤޤ" #~ msgid "Ignoring command line option '%s'" #~ msgstr "ޥɥ饤󥪥ץ '%s' ̵뤷ޤ" #~ msgid "(It is valid for %s but not the selected language)" #~ msgstr "(%s ѤȤƤǤ򤵤줿ȤƤ̵Ǥ)" #~ msgid "-Wuninitialized is not supported without -O" #~ msgstr "-Wuninitialized -O ̵ˤϼޤ" #~ msgid "`-ax' and `-a' are conflicting options. `-a' ignored." #~ msgstr "`-ax' `-a' ̷⤹륪ץǤ`-a' ̵뤷ޤ" #~ msgid "instruction scheduling not supported on this target machine" #~ msgstr "̿᥹塼󥰤ϤΥåȥޥǤϥݡȤޤ" #~ msgid "this target machine does not have delayed branches" #~ msgstr "ΥåȥޥٱʬäƤޤ" #~ msgid "profiling does not work without a frame pointer" #~ msgstr "ץեϥե졼ݥ󥿤ʤǤưޤ" #~ msgid "-f%sleading-underscore not supported on this target machine" #~ msgstr "-f%sleading-underscore ϤΥåȥޥǤϥݡȤޤ" #~ msgid "Data size %ld.\n" #~ msgstr "ǡ %ld.\n" #~ msgid "" #~ "%s%s%s version %s (%s)\n" #~ "%s\tcompiled by GNU C version %s.\n" #~ "%s%s%s version %s (%s) compiled by CC.\n" #~ msgstr "" #~ "%s%s%s version %s (%s)\n" #~ "%s\tcompiled by GNU C version %s.\n" #~ "%s%s%s version %s (%s) compiled by CC.\n" #~ msgid "options passed: " #~ msgstr "Ϥ줿ץ: " #~ msgid "options enabled: " #~ msgstr "ͭץ: " #~ msgid "floating point numbers not allowed in #if expressions" #~ msgstr "#if ǤưϵĤޤ" #~ msgid "Invalid number in #if expression" #~ msgstr "#if ̵ʿ" #~ msgid "Invalid character constant in #if" #~ msgstr "̵ʸ #if ˤޤ" #~ msgid "double quoted strings not allowed in #if expressions" #~ msgstr "Ť˥Ȥ줿ʸ #if ǤϻȤޤ" #~ msgid "Invalid token in expression" #~ msgstr "̵ʥȡ󤬼ˤޤ" #~ msgid "octal character constant does not fit in a byte" #~ msgstr "8 ʿʸ 1 ХȤ˼ޤޤ" #~ msgid "hex character constant does not fit in a byte" #~ msgstr "16 ʿʸ 1 ХȤ˼ޤޤ" #~ msgid "empty #if expression" #~ msgstr " #if Ǥ" #~ msgid "Junk after end of expression." #~ msgstr "νʹߤ˥ߤޤ" #~ msgid "macro or #include recursion too deep" #~ msgstr "ޥޤ #include κƵޤ" #~ msgid "Usage: %s [switches] input output" #~ msgstr "Ȥ: %s [å] " #~ msgid "-traditional is not supported in C++" #~ msgstr "-traditional C++ Ǥϼդޤ" #~ msgid "-traditional and -ansi are mutually exclusive" #~ msgstr "-traditional -ansi Ȥ¾ŪǤ" #~ msgid "Filename missing after -i option" #~ msgstr "-i ץθΥե̾礤Ƥޤ" #~ msgid "Filename missing after -o option" #~ msgstr "-o ץθΥե̾礤Ƥޤ" #~ msgid "Target missing after %s option" #~ msgstr "%s ץθΥåȤ礤Ƥޤ" #~ msgid "Filename missing after %s option" #~ msgstr "%s ץθΥե̾礤Ƥޤ" #~ msgid "Macro name missing after -%c option" #~ msgstr "-%c ץθΥޥ̾礤Ƥޤ" #~ msgid "-pedantic and -traditional are mutually exclusive" #~ msgstr "-pedantic -traditional Ȥ¾ŪǤ" #~ msgid "-trigraphs and -traditional are mutually exclusive" #~ msgstr "-trigraphs -traditional Ȥ¾ŪǤ" #~ msgid "Directory name missing after -I option" #~ msgstr "-I ץθΥǥ쥯ȥ̾礤Ƥޤ" #~ msgid "`/*' within comment" #~ msgstr "`/*' ˤޤ" #~ msgid "unterminated #%s conditional" #~ msgstr "üΤʤ #%s " #~ msgid "not in any file?!" #~ msgstr "ե뤬ʤ?!" #~ msgid "`defined' must be followed by ident or (ident)" #~ msgstr "`defined' θ ident (ident) ʤФʤޤ" #~ msgid "cccp error: invalid special hash type" #~ msgstr "cccp 顼: üϥå巿̵Ǥ" #~ msgid "#include expects \"fname\" or " #~ msgstr "#include θˤ \"fname\" ɬפǤ" #~ msgid "No include path in which to find %.*s" #~ msgstr "%.*s Ĥ륤󥯥롼ɥѥޤ" #~ msgid "invalid macro name" #~ msgstr "̵ʥޥ̾" #~ msgid "invalid macro name `%s'" #~ msgstr "̵ʥޥ̾ `%s'" #~ msgid "parameter name starts with a digit in #define" #~ msgstr "#define β̾ǻϤޤäƤޤ" #~ msgid "badly punctuated parameter list in #define" #~ msgstr "#define βꥹȤѤ˶ڤޤ" #~ msgid "unterminated parameter list in #define" #~ msgstr "#define βꥹȤüƤޤ" #~ msgid "\"%.*s\" redefined" #~ msgstr "\"%.*s\" ޤ" #~ msgid "# operator should be followed by a macro argument name" #~ msgstr "# 黻Ҥθˤϥޥ̾³ƤʤФʤޤ" #~ msgid "invalid format #line command" #~ msgstr "#line ޥɤν񼰤̵Ǥ" #~ msgid "undefining `defined'" #~ msgstr "`defined' undef ޤ" #~ msgid "undefining `%s'" #~ msgstr "`%s' undef ޤ" #~ msgid "extra text at end of directive" #~ msgstr "ǥ쥯ƥ֤ν;ʬʥƥȤޤ" #~ msgid "#error%.*s" #~ msgstr "#error%.*s" #~ msgid "#warning%.*s" #~ msgstr "#warning%.*s" #~ msgid "#elif not within a conditional" #~ msgstr "#elif ʸˤޤ" #~ msgid "#%s not within a conditional" #~ msgstr "#%s ʸˤޤ" #~ msgid "#else or #elif after #else" #~ msgstr "#else θ #else #elif ޤ" #~ msgid "#else not within a conditional" #~ msgstr "#else ʸˤޤ" #~ msgid "unterminated string or character constant" #~ msgstr "üƤʤʸʸ" #~ msgid "arguments given to macro `%s'" #~ msgstr "ޥ `%s' ˰Ϳޤ" #~ msgid "no args to macro `%s'" #~ msgstr "ޥ `%s' ؤΰޤ" #~ msgid "only 1 arg to macro `%s'" #~ msgstr "ޥ `%s' ؤΰĤޤ" #~ msgid "only %d args to macro `%s'" #~ msgstr "%d Ĥΰޥ `%s' ϤƤޤ" #~ msgid "too many (%d) args to macro `%s'" #~ msgstr "ο (%d) ޥ `%s' Ф¿ޤ" #~ msgid "" #~ "Internal error in %s, at tradcpp.c:%d\n" #~ "Please submit a full bug report.\n" #~ "See %s for instructions." #~ msgstr "" #~ "%s 顼(tradcpp.c:%d)\n" #~ "ʥХݡȤäƤ\n" #~ "%s Ǥμ򸫤Ƥ" #~ msgid "arrays of functions are not meaningful" #~ msgstr "ؿϰ̣ޤ" #~ msgid "function return type cannot be function" #~ msgstr "ؿ֤ؿǤäƤϤʤޤ" #~ msgid "invalid initializer for bit string" #~ msgstr "̵ʥӥåҤǤ" #~ msgid "Tree check: expected %s, have %s in %s, at %s:%d" #~ msgstr "Tree : %s ٤ %s ޤ(%s , %s:%d)" #~ msgid "Tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d" #~ msgstr "Tree : 饹 '%c' ΤϤ '%c' (%s) Ǥ(%s , %s:%d)" #~ msgid "register name not specified for `%s'" #~ msgstr "쥸̾ `%s' Ѥ˻ꤵƤޤ" #~ msgid "invalid register name for `%s'" #~ msgstr "`%s' Ф쥸̾Ȥ̵Ǥ" #~ msgid "data type of `%s' isn't suitable for a register" #~ msgstr "`%s' Υǡ register ˤϤդ路ޤ" #~ msgid "register specified for `%s' isn't suitable for data type" #~ msgstr "`%s' ˻ꤵ줿 register ϥǡˤդ路ޤ" #~ msgid "global register variable has initial value" #~ msgstr " register ѿͤäƤޤ" #~ msgid "volatile register variables don't work as you might wish" #~ msgstr "volatile register ѿϰտޤ褦ˤưޤ" #~ msgid "register name given for non-register variable `%s'" #~ msgstr "쥸̾ register ѿ `%s' Ϳޤ" #~ msgid "size of variable `%s' is too large" #~ msgstr "ѿ `%s' Υ礭ޤ" #~ msgid "alignment of `%s' is greater than maximum object file alignment. Using %d." #~ msgstr "`%s' Υ饤Ȥϥ֥ȥեκͤ礭Ǥ %d Ȥޤ" #~ msgid "requested alignment for %s is greater than implemented alignment of %d." #~ msgstr "%s ׵ᤵ줿饤Ȥϼ줿饤 %d 礭Ǥ" #~ msgid "floating point trap outputting a constant" #~ msgstr "ư¨ͤϤݤ˥ȥåפޤ" #~ msgid "initializer for integer value is too complicated" #~ msgstr "νҤͤʣޤ" #~ msgid "initializer for floating value is not a floating constant" #~ msgstr "ưνҤͤưǤϤޤ" #~ msgid "unknown set constructor type" #~ msgstr "ѥ󥹥ȥ饯Ǥ" #~ msgid "invalid initial value for member `%s'" #~ msgstr " `%s' Ф̵ʽ" #~ msgid "weak declaration of `%s' must be public" #~ msgstr "`%s' weak public ǤʤФʤޤ" #~ msgid "weak declaration of `%s' must precede definition" #~ msgstr "`%s' weak ˤʤФʤޤ" #~ msgid "only weak aliases are supported in this configuration" #~ msgstr "ߤǤ weak alias ݡȤޤ" #~ msgid "alias definitions not supported in this configuration; ignored" #~ msgstr "ߤǤ alias ϥݡȤޤ -- ̵뤵ޤ" #~ msgid "Virtual array %s[%lu]: element %lu out of bounds" #~ msgstr "ۥơ֥ %s[%lu]: %lu ϰϳǤ" #~ msgid "No sclass for %s stab (0x%x)\n" #~ msgstr "%s Ѥ sclass ޤ (0x%x)\n" #~ msgid "`-p' not supported; use `-pg' and gprof(1)" #~ msgstr "`-p' ϼƤޤ. `-pg' gprof(1) ȤäƤ" #~ msgid "may not use both -EB and -EL" #~ msgstr "-EB -EL ξȤȤϤǤޤ" #~ msgid "-mapcs-26 and -mapcs-32 may not be used together" #~ msgstr "-mapcs-26 -mapcs-32 Ʊ˻Ȥޤ" #~ msgid "-msoft-float and -mhard_float may not be used together" #~ msgstr "-msoft-float -mhard_float Ʊ˻Ȥޤ" #~ msgid "-mbig-endian and -mlittle-endian may not be used together" #~ msgstr "-mbig-endian -mlittle-endian Ʊ˻Ȥޤ" #~ msgid "Incompatible interworking options" #~ msgstr "ߴΤʤ interworking ץ" #~ msgid "-mbsd and -pedantic incompatible" #~ msgstr "-mbsd -pedantic ϶¸Ǥޤ" #~ msgid "-mbsd and -mxopen incompatible" #~ msgstr "-mbsd -mxopen ϶¸Ǥޤ" #~ msgid "-mxopen and -pedantic incompatible" #~ msgstr "-mxopen -pedantic ϶¸Ǥޤ" #~ msgid "A -ifile option requires a -map option" #~ msgstr "-ifile ץˤ -map ץɬפǤ" #~ msgid "mno-cygwin and mno-win32 are not compatible" #~ msgstr "mno-cygwin mno-win32 ϶¸Ǥޤ" #~ msgid "shared and mdll are not compatible" #~ msgstr "shared mdll Ȥ϶¸Ǥޤ" #~ msgid "-static not valid with -mcoff" #~ msgstr "-static -mcoff ȤȤ˻ȤΤޤ" #~ msgid "-shared not valid with -mcoff" #~ msgstr "-shared -mcoff ȤȤ˻ȤΤޤ" #~ msgid "-symbolic not valid with -mcoff" #~ msgstr "-symbolic -mcoff ȤȤ˻ȤΤޤ" #~ msgid "-fpic is not valid with -mcoff" #~ msgstr "-fpic -mcoff ȤȤ˻ȤΤޤ" #~ msgid "-fPIC is not valid with -mcoff" #~ msgstr "-fPIC -mcoff ȤȤ˻ȤΤޤ" #~ msgid "-fpic not valid with -mcoff" #~ msgstr "-fpic -mcoff ȤȤ˻ȤΤޤ" #~ msgid "-fPIC not valid with -mcoff" #~ msgstr "-fPIC -mcoff ȤȤ˻ȤΤޤ" #~ msgid "bx]" #~ msgstr "bx]" #~ msgid "bx" #~ msgstr "bx" #~ msgid "cx" #~ msgstr "cx" #~ msgid "-p option not supported: use -pg instead" #~ msgstr "-p ץϥݡȤƤޤ. -pg ȤäƤ" #~ msgid "choose either big or little endian, not both" #~ msgstr "ӥåޤϥȥ륨ǥξǤϤʤɤ餫Ǥ" #~ msgid "choose either m340 or m210 not both" #~ msgstr "m340 ޤ m210 ξǤϤʤɤ餫Ǥ" #~ msgid "the m210 does not have little endian support" #~ msgstr "m210 ϥȥ륨ǥ󥵥ݡȤԤʤޤ" #~ msgid "-pipe is not supported." #~ msgstr "-pipe ϼƤޤ" #~ msgid "may not use both -mfp64 and -msingle-float" #~ msgstr "-mfp64 -msingle-float ξȤȤϤǤޤ" #~ msgid "may not use both -mfp64 and -m4650" #~ msgstr "-mfp64 -m4650 ξȤȤϤǤޤ" #~ msgid "-mhard-float not supported." #~ msgstr "-mhard-float ϼƤޤ." #~ msgid "-msingle-float and -msoft-float can not both be specified." #~ msgstr "-msingle-float -msoft-float ٤˻ꤹ뤳ȤϤǤޤ" #~ msgid "-p profiling is no longer supported. Use -pg instead." #~ msgstr "-p ǤΥץեϤ⤦󶡤ޤ -pg Ȥޤ礦" #~ msgid "profiling not supported with -mg\n" #~ msgstr "-mg ǤΥץե󶡤ޤ\n" #~ msgid "GNU C does not support -C without using -E" #~ msgstr "GNU C -E ȼʤ -C Ƥޤ" #~ msgid "-pg and -fomit-frame-pointer are incompatible" #~ msgstr "-pg -fomit-frame-pointer ϶¸Ǥޤ" #~ msgid "-E required when input is from standard input" #~ msgstr "ϤɸϤξ -E ɬפǤ" #~ msgid "Compilation of header file requested" #~ msgstr "إåեΥѥ뤬׵ᤵޤ" #~ msgid "-fjni and -femit-class-files are incompatible" #~ msgstr "-fjni -femit-class-files ϶¸Ǥޤ" #~ msgid "-fjni and -femit-class-file are incompatible" #~ msgstr "-fjini -femit-class-file ϶¸Ǥޤ" #~ msgid "iterator `%s' has derived type" #~ msgstr "ȿ `%s' Ǥ" #~ msgid "%s before character constant" #~ msgstr "ʸ %s" #~ msgid "%s before character 0%o" #~ msgstr "ʸ 0%2$o %1$s" #~ msgid "more than one `f' in numeric constant" #~ msgstr " 1İʾ `f'" #~ msgid "more than one `l' in numeric constant" #~ msgstr " 1İʾ `l'" #~ msgid "invalid identifier `%s'" #~ msgstr "̵ʼ̻ `%s'" #~ msgid "parse error at `..'" #~ msgstr "`..' ǹʸϥ顼" #~ msgid "nondigits in number and not hexadecimal" #~ msgstr "ͤ˥ӥǤʤ16 ʤǤʤʸ" #~ msgid "numeric constant contains digits beyond the radix" #~ msgstr "ĶӥޤǤޤ" #~ msgid "two `u's in integer constant" #~ msgstr " 2Ĥ `u'" #~ msgid "Unterminated string constant" #~ msgstr "ʸλƤޤ" #~ msgid "syntax error: cannot back up" #~ msgstr "ʸˡ顼: ɿǤޤ" #~ msgid "parser stack overflow" #~ msgstr "ʸϴΥåޤ" #~ msgid "invalid `for (ITERATOR)' syntax" #~ msgstr "̵ `for (ȿ)' ʸǤ" #~ msgid "`for (%s)' inside expansion of same iterator" #~ msgstr "ƱȿҤ¦ˤ `for (%s)'" #~ msgid "case label within scope of cleanup or variable array" #~ msgstr "case ٥뤬ΤޤϲΥˤޤ" #~ msgid "parse error; also virtual memory exceeded" #~ msgstr "ʸϥ顼 -- ˲ۥĶᤷޤ" #~ msgid "duplicate array index in initializer" #~ msgstr "˽ʣ󥤥ǥå" #~ msgid "duplicate initializer" #~ msgstr "ʣ" #~ msgid "thumb_load_double_from_address: destination is not a register" #~ msgstr "thumb_load_double_from_address: оݤ쥸ǤϤޤ" #~ msgid "thumb_load_double_from_address: source is not a computed memory address" #~ msgstr "thumb_load_double_from_address: ׻Ѥߥꥢɥ쥹ǤϤޤ" #~ msgid "thumb_load_double_from_address: base is not a register" #~ msgstr "thumb_load_double_from_address: ١쥸ǤϤޤ" #~ msgid "thumb_load_double_from_address: Unhandled address calculation" #~ msgstr "thumb_load_double_from_address: ʤɥ쥹׻" #~ msgid "ACCUM_HIGH_REGS class in limit_reload_class" #~ msgstr "limit_reload_class ACCUM_HIGH_REGS 饹" #~ msgid "YH_OR_ACCUM_HIGH_REGS found in limit_reload_class" #~ msgstr "limit_reload_class YH_OR_ACCUM_HIGH_REGS Ĥޤ" #~ msgid "YL found in limit_reload_class" #~ msgstr "limit_reload_class YL Ĥޤ" #~ msgid "Bad register extension code" #~ msgstr "ʥ쥸ĥ" #~ msgid "Invalid offset in ybase addressing" #~ msgstr "ybase ɥ쥷󥰤̵ʥեå" #~ msgid "Invalid shift operator in emit_1600_core_shift" #~ msgstr "emit_1600_core_shift Ǥ̵ʥեȱ黻" #~ msgid "Invalid mode for gen_tst_reg" #~ msgstr "gen_tst_reg ˤȤäƤ̵ʥ⡼" #~ msgid "Invalid mode for integer comparison in gen_compare_reg" #~ msgstr "gen_compare_reg ǤӤˤȤäƤ̵ʥ⡼" #~ msgid "Invalid register for compare" #~ msgstr "̵ѥ쥸" #~ msgid "PRINT_OPERAND: letter %c was found & insn was not CONST_INT" #~ msgstr "PRINT_OPERAND: ʸ %c Ĥꡢ̿ CONST_INT ǤϤޤ" #~ msgid "-mptr%d not allowed on -m%d" #~ msgstr "-mptr%d -m%d ξǤϻȤޤ" #~ msgid "parse errors have confused me too much" #~ msgstr "ʸϥ顼ǡʤ꺮𤷤Ƥޤޤ" #~ msgid "virtual memory exhausted" #~ msgstr "ۥȤ̤ޤ" #~ msgid "destructor for alien class `%s' cannot be a member" #~ msgstr "¾Υ饹 `%s' Υǥȥ饯򡢥ФˤϤǤޤ" #~ msgid "constructor for alien class `%s' cannot be a member" #~ msgstr "¾Υ饹 `%s' Υǥȥ饯򡢥ФˤϤǤޤ" #~ msgid "trying to make class `%s' a friend of global scope" #~ msgstr "饹 `%s' 襹פ friend ˤ褦ȤƤޤ" #~ msgid "parameter invalidly declared method type" #~ msgstr "ѥ᥿ϥ᥽åɤηޤ" #~ msgid "parameter invalidly declared offset type" #~ msgstr "ѥ᥿եåȤηޤ" #~ msgid "`void' in parameter list must be entire list" #~ msgstr "ѥ᥿ꥹ `void' ϥꥹΤǤʤФʤޤ" #~ msgid "no file specified with -fdump-translation-unit" #~ msgstr "-fdump-translation-unit ǻꤵ줿ե뤬ޤ" #~ msgid "(you really want to initialize it separately)" #~ msgstr "(ˤΤǤСʬ䤷ƽƤ)" #~ msgid "`operator new' takes type `size_t' parameter" #~ msgstr "`operator new' `size_t' ѥ᥿Ȥޤ" #~ msgid "`operator new' takes type `size_t' as first parameter" #~ msgstr "`operator new' Ȥ `size_t' Ȥޤ" #~ msgid "`operator delete' must return type `void'" #~ msgstr "`operator delete' 귿 `void' ǤʤФʤޤ" #~ msgid "`operator delete' takes type `void *' as first parameter" #~ msgstr "`operator delete' Ȥ `void *' Ȥޤ" #~ msgid "too many arguments in declaration of `operator delete'" #~ msgstr "`operator delete' ¿" #~ msgid "`...' invalid in specification of `operator delete'" #~ msgstr "`...' `operator delete' λ̵Ǥ" #~ msgid "`default' label within scope of cleanup or variable array" #~ msgstr "`default' ٥뤬ΤޤϲΥˤޤ" #~ msgid "bad array initializer" #~ msgstr "ʽ" #~ msgid "end of file encountered inside string constant" #~ msgstr "ʸǥեνü򸡽Фޤ" #~ msgid "end of file encountered inside character constant" #~ msgstr "ʸǥեνü򸡽Фޤ" #~ msgid "invalid #pragma vtable" #~ msgstr "̵ #pragma vtable" #~ msgid "invalid `#pragma implementation'" #~ msgstr "̵ `#pragma implementation'" #~ msgid "%s at end of saved text" #~ msgstr "¸ѤߥƥȤ%s" #~ msgid "complex integer constant is too wide for `__complex int'" #~ msgstr "ʣǿ `__complex int' ˤȤäƹޤ" #~ msgid "request for member `%s' is ambiguous in multiple inheritance lattice" #~ msgstr "׵ᤵ줿 `%s' ¿ŷѾդۣǤ" #~ msgid "Internal compiler error." #~ msgstr "ѥ饨顼." #~ msgid "Please submit a full bug report." #~ msgstr "ܤХݡȤȤäƤ" #~ msgid "duplicate label `%s' in switch statement" #~ msgstr "switch ʸǥ٥ `%s' ʣƤޤ" #~ msgid "duplicate label (%d) in switch statement" #~ msgstr "switch ʸǥ٥ (%d) ʣƤޤ" #~ msgid "range values `%s' and `%s' reversed" #~ msgstr "ϰϤ `%s' `%s' դǤ" #~ msgid "range values reversed" #~ msgstr "ϰϤͤդǤ" #~ msgid "bad is_error(%d) in v_message" #~ msgstr "v_message is_error(%d)" #~ msgid "'defined' without an identifier" #~ msgstr "̻ҤΤʤ 'defined'" #~ msgid "included file `%s' exists but is not readable" #~ msgstr "include 줿ե `%s' ϡ¸ߤޤɤޤ" #~ msgid "%s is a directory" #~ msgstr "%s ϥǥ쥯ȥǤ" #~ msgid "macro argument \"%s\" is stringified" #~ msgstr "ޥ \"%s\" ʸ󲽤ޤ" #~ msgid "`##' at start of macro definition" #~ msgstr "`##' ޥλϤˤޤ" #~ msgid "`##' at end of macro definition" #~ msgstr "`##' ޥνˤޤ" #~ msgid "empty object-like macro went through full #define" #~ msgstr "Υ֥ȤΤ褦ʥޥ #define Ƥ̤ȴޤ" #~ msgid "first token = %d not %d in collect_formal_parameters" #~ msgstr "collect_formal_parameters ǽΥȡ = %d (%d ǤϤʤ)" #~ msgid "impossible token in macro argument list" #~ msgstr "ޥꥹȤˤʤȡ" #~ msgid "illegal token in macro argument list" #~ msgstr "ޥꥹȤʥȡ" #~ msgid "another parameter follows \"...\"" #~ msgstr "\"...\" θ塢˥ѥ᥿³Ƥޤ" #~ msgid "collect_params: argc=%d argslen=0" #~ msgstr "collect_params: argc=%d argslen=0" #~ msgid "C99 does not permit use of __VA_ARGS__ as a macro argument name" #~ msgstr "C99 ϥޥ̾Ȥ __VA_ARGS__ λѤǧƤޤ" #~ msgid "C89 does not permit varargs macros" #~ msgstr "C89 Ǥ varargs ޥǧƤޤ" #~ msgid "collect_params: impossible token type %d" #~ msgstr "collect_params: ʤȡ %d" #~ msgid "attempt to use poisoned `%s'." #~ msgstr "줿 `%s' Ѥޤ" #~ msgid "macroexpand: unexpected token %d (wanted LPAREN)" #~ msgstr "macroexpand: ͽʤȡ %d (LPAREN ΤϤ)" #~ msgid "unterminated macro call" #~ msgstr "üƤʤޥƤӽФ" #~ msgid "macro `%s' used with just one arg" #~ msgstr "ޥ `%s' ΰĤޤ" #~ msgid "macro `%s' used with only %d args" #~ msgstr "ޥ `%s' ΰ(%d )ʤޤ" #~ msgid "macro `%s' used with too many (%d) args" #~ msgstr "ޥ `%s' ΰ(%d )¿ޤ" #~ msgid "" #~ "Switches:\n" #~ " -include Include the contents of before other files\n" #~ " -imacros Accept definition of macros in \n" #~ " -iprefix Specify as a prefix for next two options\n" #~ " -iwithprefix Add to the end of the system include path\n" #~ " -iwithprefixbefore Add to the end of the main include path\n" #~ " -isystem Add to the start of the system include path\n" #~ " -idirafter Add to the end of the system include path\n" #~ " -I Add to the end of the main include path\n" #~ " -I- Fine-grained include path control; see info docs\n" #~ " -nostdinc Do not search system include directories\n" #~ " (dirs specified with -isystem will still be used)\n" #~ " -nostdinc++ Do not search system include directories for C++\n" #~ " -o Put output into \n" #~ " -pedantic Issue all warnings demanded by strict ANSI C\n" #~ " -pedantic-errors Issue -pedantic warnings as errors instead\n" #~ " -traditional Follow K&R pre-processor behaviour\n" #~ " -trigraphs Support ANSI C trigraphs\n" #~ " -lang-c Assume that the input sources are in C\n" #~ " -lang-c89 Assume that the input sources are in C89\n" #~ " -lang-c++ Assume that the input sources are in C++\n" #~ " -lang-objc Assume that the input sources are in ObjectiveC\n" #~ " -lang-objc++ Assume that the input sources are in ObjectiveC++\n" #~ " -lang-asm Assume that the input sources are in assembler\n" #~ " -lang-fortran\t\t Assume that the input sources are in Fortran\n" #~ " -lang-chill Assume that the input sources are in Chill\n" #~ " -std= Specify the conformance standard; one of:\n" #~ " gnu89, gnu99, c89, c99, iso9899:1990,\n" #~ " iso9899:199409, iso9899:1999\n" #~ " -+ Allow parsing of C++ style features\n" #~ " -w Inhibit warning messages\n" #~ " -Wtrigraphs Warn if trigraphs are encountered\n" #~ " -Wno-trigraphs Do not warn about trigraphs\n" #~ " -Wcomment{s} Warn if one comment starts inside another\n" #~ " -Wno-comment{s} Do not warn about comments\n" #~ " -Wtraditional Warn if a macro argument is/would be turned into\n" #~ " a string if -traditional is specified\n" #~ " -Wno-traditional Do not warn about stringification\n" #~ " -Wundef Warn if an undefined macro is used by #if\n" #~ " -Wno-undef Do not warn about testing undefined macros\n" #~ " -Wimport Warn about the use of the #import directive\n" #~ " -Wno-import Do not warn about the use of #import\n" #~ " -Werror Treat all warnings as errors\n" #~ " -Wno-error Do not treat warnings as errors\n" #~ " -Wall Enable all preprocessor warnings\n" #~ " -M Generate make dependencies\n" #~ " -MM As -M, but ignore system header files\n" #~ " -MD As -M, but put output in a .d file\n" #~ " -MMD As -MD, but ignore system header files\n" #~ " -MG Treat missing header file as generated files\n" #~ " -g3 Include #define and #undef directives in the output\n" #~ " -D Define a with string '1' as its value\n" #~ " -D= Define a with as its value\n" #~ " -A () Assert the to \n" #~ " -A- () Disable the to \n" #~ " -U Undefine \n" #~ " -v Display the version number\n" #~ " -H Print the name of header files as they are used\n" #~ " -C Do not discard comments\n" #~ " -dM Display a list of macro definitions active at end\n" #~ " -dD Preserve macro definitions in output\n" #~ " -dN As -dD except that only the names are preserved\n" #~ " -dI Include #include directives in the output\n" #~ " -ftabstop= Distance between tab stops for column reporting\n" #~ " -P Do not generate #line directives\n" #~ " -$ Do not allow '$' in identifiers\n" #~ " -remap Remap file names when including files.\n" #~ " --version Display version information\n" #~ " -h or --help Display this information\n" #~ msgstr "" #~ "å:\n" #~ " -include ¾Υե Ƥ include\n" #~ " -imacros ޥ\n" #~ " -iprefix ʹߤĤΥץ ƬĤ\n" #~ " -iwithprefix ƥ।󥯥롼ɥѥ ɲ\n" #~ " -iwithprefixbefore 祤󥯥롼ɥѥ ɲ\n" #~ " -isystem ƥ।󥯥롼ɥѥκǽ ɲ\n" #~ " -idirafter ƥ।󥯥롼ɥѥ ɲ\n" #~ " -I 祤󥯥롼ɥѥ ɲ\n" #~ " -I- ٤ʥ󥯥롼ɥѥ; info 򸫤\n" #~ " -nostdinc ƥ।󥯥롼ɥǥ쥯ȥõʤ\n" #~ " (-isystem ǻꤵ줿Ѥޤ)\n" #~ " -nostdinc++ C++ ѥƥ।󥯥롼ɥǥ쥯ȥõʤ\n" #~ " -o ФƽϤ\n" #~ " -pedantic ̩ ANSI C ׵᤹ٹȯ\n" #~ " -pedantic-errors -pedantic ηٹ򥨥顼Ȥȯ\n" #~ " -traditional K&R ץץåο񤤤ɿ\n" #~ " -trigraphs ANSI C ȥ饤դ򥵥ݡ\n" #~ " -lang-c Ϥ C Ȳꤹ\n" #~ " -lang-c89 Ϥ C89 Ȳꤹ\n" #~ " -lang-c++ Ϥ C++ Ȳꤹ\n" #~ " -lang-objc Ϥ ObjectiveC Ȳꤹ\n" #~ " -lang-objc++ Ϥ ObjectiveC++ Ȳꤹ\n" #~ " -lang-asm Ϥ assembler Ȳꤹ\n" #~ " -lang-fortran Ϥ Fortran Ȳꤹ\n" #~ " -lang-chill Ϥ Chill Ȳꤹ\n" #~ " -std= Ŭ礹ɸʲĻ;\n" #~ " gnu89, gnu99, c89, c99, iso9899:1990,\n" #~ " iso9899:199409, iso9899:1999\n" #~ " -+ C++ Υѡ󥰤\n" #~ " -w ٹå\n" #~ " -Wtrigraphs ȥ饤դ򸫤Ĥٹ𤹤\n" #~ " -Wno-trigraphs ȥ饤դ򸫤ĤƤٹ𤷤ʤ\n" #~ " -Wcomment{s} Ȥ˥Ȥзٹ𤹤\n" #~ " -Wno-comment{s} Ȥ˴ؤٹ򤷤ʤ\n" #~ " -Wtraditional -traditional ꤵ줿硢ޥ\n" #~ " ʸѹ褦ʤٹ𤹤\n" #~ " -Wno-traditional ʸ˴ؤƷٹ𤷤ʤ\n" #~ " -Wundef #if ̤ΥޥȤƤٹ𤹤\n" #~ " -Wno-undef ̤ޥΥƥȤˤĤƷٹ𤷤ʤ\n" #~ " -Wimport #import λѤˤĤƷٹ𤹤\n" #~ " -Wno-import #import λѤˤĤƷٹ𤷤ʤ\n" #~ " -Werror Ƥηٹ򥨥顼Ȥư\n" #~ " -Wno-error ٹ򥨥顼Ȥưʤ\n" #~ " -Wall ƤΥץץåηٹͭˤ\n" #~ " -M make ΰ¸ط\n" #~ " -MM -M Ʊƥإå̵뤹\n" #~ " -MD -M Ʊ.d ե˽Ϥ\n" #~ " -MMD -MD Ʊƥإå̵뤹\n" #~ " -MG ĤʤإåեΤȤ\n" #~ " -g3 #define #undef ̿Ϥ˴ޤ\n" #~ " -D ʸ '1' 򤽤ͤȤ\n" #~ " -D= 򤽤ͤȤ\n" #~ " -A () Ǹ\n" #~ " -A- () Ȥʤ\n" #~ " -U \n" #~ " -v Сֹɽ\n" #~ " -H Ѥإåե̾ɽ\n" #~ " -C Ȥ˴ʤ\n" #~ " -dM ͭˤʤäƤޥꥹȤɽ\n" #~ " -dD Ϥ˥ޥĤƤ\n" #~ " -dN -dD Ʊ̾ĤƤ\n" #~ " -dI #include ̿Ϥ˴ޤ\n" #~ " -ftabstop= 𥫥Υֳִ֤ꤹ\n" #~ " -P #line ̿ʤ\n" #~ " -$ ̻Ҥ '$' ʤ\n" #~ " -remap ե include Ȥե̾ƥޥå\n" #~ " --version Сɽ\n" #~ " -h or --help ξɽ\n" #~ msgid "mark active in cpp_pop_buffer" #~ msgstr "cpp_pop_buffer ǥޡƥ" #~ msgid "length < 0 in cpp_expand_to_buffer" #~ msgstr "cpp_expand_to_buffer length < 0" #~ msgid "backslash-newline within line comment" #~ msgstr "ԥ˥Хåå" #~ msgid "C++ style comments are not allowed in traditional C" #~ msgstr "C++ ΥȤŪ C Ǥϵޤ" #~ msgid "embedded null character ignored" #~ msgstr "ޤ줿 null ʸ̵뤵ޤ" #~ msgid "string constant runs past end of line" #~ msgstr "ʸԤνǽüƤޤ" #~ msgid "\\r escape inside string constant" #~ msgstr "ʸ \\r " #~ msgid "null characters in string or character constant" #~ msgstr "ʸʸ null ʸ" #~ msgid "missing '>' in `#include '" #~ msgstr "`#include <ե̾>' '>' ޤ" #~ msgid "unrecognized escape \\r%c" #~ msgstr "ǧǽΥ \\r%c" #~ msgid "vertical tab in preprocessing directive" #~ msgstr "ץץǥ쥯ƥ˿ľʸ" #~ msgid "form feed in preprocessing directive" #~ msgstr "ץץǥ쥯ƥ˥եե" #~ msgid "null character preserved" #~ msgstr "̥ʸݤޤ" #~ msgid "comment start split across lines" #~ msgstr "ȳϤԤޤǤޤ" #~ msgid "comment start '/*' split across lines" #~ msgstr "ȳ '/*' ԤޤǤޤ" #~ msgid "comment end '*/' split across lines" #~ msgstr "Ƚü '*/' ԤޤǤޤ" #~ msgid "handle_directive called on macro buffer" #~ msgstr "ޥХåե handle_directive ƤФޤ" #~ msgid "ignoring #%s because of its indented #" #~ msgstr "ǥȤ줿 # ʤΤǡ#%s ̵뤷ޤ" #~ msgid "ISO C does not allow #%s" #~ msgstr "ISO C #%s Ĥޤ" #~ msgid "redefining poisoned `%.*s'" #~ msgstr "줿 `%.*s' " #~ msgid "garbage at end of #line" #~ msgstr "#line ޥɤκǸ˥" #~ msgid "second token after #line is not a string" #~ msgstr "#line θܤΥȡʸǤϤޤ" #~ msgid "junk on line after #undef" #~ msgstr "#undef θιԤ˥" #~ msgid "cannot undefine poisoned \"%s\"" #~ msgstr "줿 \"%s\" undefine Ǥޤ" #~ msgid "malformed #pragma implementation" #~ msgstr " #pragma implementation" #~ msgid "#%s with no argument" #~ msgstr "#%s ˰ޤ" #~ msgid "#%s with invalid argument" #~ msgstr "̵ʰä #%s" #~ msgid "Cannot duplicate non-existant exception region." #~ msgstr "¸ߤʤ㳰ΰʣ뤳ȤϤǤޤ" #~ msgid "Never issued previous false_label" #~ msgstr " false_label Ϸ褷ȯԤޤ" #~ msgid "Basic blocks not numbered consecutively" #~ msgstr "ܥ֥åϢ³ŪֹդƤޤ" #~ msgid "file path prefix `%s%s' never used" #~ msgstr "եѥΥץեå `%s%s' Ȥޤ" #~ msgid "file path prefix `%s' never used" #~ msgstr "եѥΥץեå `%s' Ȥޤ" #~ msgid "%s: option `%s' is ambiguous\n" #~ msgstr "%s: ץ `%s' ϤޤǤ\n" #~ msgid "%s: option `--%s' doesn't allow an argument\n" #~ msgstr "%s: ץ `--%s' ˰Ϥޤ\n" #~ msgid "%s: option `%c%s' doesn't allow an argument\n" #~ msgstr "%s: ץ `%c%s' ˰Ϥޤ\n" #~ msgid "%s: option `%s' requires an argument\n" #~ msgstr "%s: ץ `%s' ˤϰɬפǤ\n" #~ msgid "%s: unrecognized option `--%s'\n" #~ msgstr "%s: ǧǽʥץ `--%s'\n" #~ msgid "%s: unrecognized option `%c%s'\n" #~ msgstr "%s: ǧǽʥץ `%c%s'\n" #~ msgid "%s: illegal option -- %c\n" #~ msgstr "%s: ʥץ -- %c\n" #~ msgid "%s: invalid option -- %c\n" #~ msgstr "%s: ̵ʥץ -- %c\n" #~ msgid "%s: option requires an argument -- %c\n" #~ msgstr "%s: ץˤϰɬפǤ -- %c\n" #~ msgid "%s: option `-W %s' is ambiguous\n" #~ msgstr "%s: ץ `-W %s' ϤޤǤ\n" #~ msgid "%s: option `-W %s' doesn't allow an argument\n" #~ msgstr "%s: ץ `-W %s' ˰Ϥޤ\n" #~ msgid "function with complex parameters cannot be inline" #~ msgstr "ʣʥѥ᥿Ĵؿ inline ˤǤޤ" #~ msgid "Objective-C text in C source file" #~ msgstr "C Υե Objective-C ʸ" #~ msgid "statically allocated objects not supported" #~ msgstr "֥ȤŪʳƤϥݡȤƤޤ" #~ msgid "output pipe has been closed" #~ msgstr "ϤΥѥפĤޤ" #~ msgid "Unknown stab %s: : 0x%x\n" #~ msgstr "ʥ %s: : 0x%x\n" nescc-1.3.4/libcpp/po/nl.po000066400000000000000000000632771177770303300155010ustar00rootroot00000000000000# Dutch messages for cpplib. # Copyright (C) 1999, 2000, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. # Tim Van Holder , 2007. # msgid "" msgstr "" "Project-Id-Version: cpplib 4.3-b20071109\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2007-11-08 21:08+0000\n" "PO-Revision-Date: 2007-11-10 17:28+0100\n" "Last-Translator: Tim Van Holder \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: charset.c:654 #, c-format msgid "conversion from %s to %s not supported by iconv" msgstr "iconv ondersteunt geen omzetting van %s naar %s" #: charset.c:657 msgid "iconv_open" msgstr "iconv_open" #: charset.c:665 #, c-format msgid "no iconv implementation, cannot convert from %s to %s" msgstr "geen implementatie van iconv beschikbaar; kan niet omzetten van %s naar %s" # of "tekenset" aangezien character door "teken" vertaald wordt? #: charset.c:742 #, c-format msgid "character 0x%lx is not in the basic source character set\n" msgstr "teken 0x%lx maakt geen deel uit van de basis bronkarakterset\n" #: charset.c:759 charset.c:1352 msgid "converting to execution character set" msgstr "omzetting naar uitvoeringskarakterset" #: charset.c:765 #, c-format msgid "character 0x%lx is not unibyte in execution character set" msgstr "teken 0x%lx is niet unibyte in de uitvoeringskarakterset" #: charset.c:889 #, c-format msgid "Character %x might not be NFKC" msgstr "Teken %x is misschien niet NFKC" #: charset.c:949 msgid "universal character names are only valid in C++ and C99" msgstr "universele tekennamen zijn enkel geldig in C++ en C99" #: charset.c:952 #, c-format msgid "the meaning of '\\%c' is different in traditional C" msgstr "de betekenis van '\\%c' is anders in traditionele C" #: charset.c:961 msgid "In _cpp_valid_ucn but not a UCN" msgstr "In _cpp_valid_ucn maar het is geen UCN" #: charset.c:986 #, c-format msgid "incomplete universal character name %.*s" msgstr "onvolledige universele tekennaam %.*s" #: charset.c:998 #, c-format msgid "%.*s is not a valid universal character" msgstr "%.*s is geen geldige universele tekennaam" #: charset.c:1008 lex.c:484 msgid "'$' in identifier or number" msgstr "'$' in naam of getal" # "identifier" is een verdomd rottig woord om te vertalen... #: charset.c:1018 #, c-format msgid "universal character %.*s is not valid in an identifier" msgstr "universeel teken %.*s is niet geldig in een naam" #: charset.c:1022 #, c-format msgid "universal character %.*s is not valid at the start of an identifier" msgstr "universeel teken %.*s is niet geldig aan het begin van een naam" #: charset.c:1056 charset.c:1571 msgid "converting UCN to source character set" msgstr "omzetting van UCN naar bronkarakterset" #: charset.c:1060 msgid "converting UCN to execution character set" msgstr "omzetting van UCN naar uitvoeringskarakterset" #: charset.c:1132 msgid "the meaning of '\\x' is different in traditional C" msgstr "de betekenis van '\\x' is anders in traditionele C" #: charset.c:1149 msgid "\\x used with no following hex digits" msgstr "\\x gebruikt zonder daaropvolgende hexadecimale cijfers" #: charset.c:1156 msgid "hex escape sequence out of range" msgstr "hexadecimale escape sequence buiten bereik" #: charset.c:1195 msgid "octal escape sequence out of range" msgstr "octale escape sequence buiten bereik" #: charset.c:1263 msgid "the meaning of '\\a' is different in traditional C" msgstr "de betekenis van '\\a' is anders in traditionele C" #: charset.c:1270 #, c-format msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "escape sequence '\\%c' is niet ISO-standaard" #: charset.c:1278 #, c-format msgid "unknown escape sequence '\\%c'" msgstr "onbekende escape sequence '\\%c'" #: charset.c:1286 #, c-format msgid "unknown escape sequence: '\\%s'" msgstr "onbekende escape sequence '\\%s'" #: charset.c:1293 msgid "converting escape sequence to execution character set" msgstr "omzetting van escape sequence naar uitvoeringskarakterset" #: charset.c:1415 charset.c:1478 msgid "character constant too long for its type" msgstr "karakterconstante te lang voor zijn type" #: charset.c:1418 msgid "multi-character character constant" msgstr "karakterconstante bevat meerdere karakters" #: charset.c:1510 msgid "empty character constant" msgstr "lege karakterconstante" #: charset.c:1612 #, c-format msgid "failure to convert %s to %s" msgstr "fout bij omzetten van %s naar %s" #: directives.c:215 directives.c:241 #, c-format msgid "extra tokens at end of #%s directive" msgstr "overbodige tokens aan einde van #%s commando" #: directives.c:344 #, c-format msgid "#%s is a GCC extension" msgstr "#%s is een uitbreiding van GCC" #: directives.c:356 msgid "suggest not using #elif in traditional C" msgstr "gebruik liefst geen #elif in traditionele C" #: directives.c:359 #, c-format msgid "traditional C ignores #%s with the # indented" msgstr "traditionele C negeert #%s wanneer de # geïndenteerd is" #: directives.c:363 #, c-format msgid "suggest hiding #%s from traditional C with an indented #" msgstr "verberg #%s liefst van traditionele C via een geïndenteerde #" #: directives.c:389 msgid "embedding a directive within macro arguments is not portable" msgstr "het plaatsen van een commando binnen macro-argumenten is niet portabel" #: directives.c:409 msgid "style of line directive is a GCC extension" msgstr "dit soort line commando is een uitbreiding van GCC" #: directives.c:464 #, c-format msgid "invalid preprocessing directive #%s" msgstr "ongeldig preprocessing-commando #%s" #: directives.c:532 msgid "\"defined\" cannot be used as a macro name" msgstr "\"defined\" kan niet als macronaam gebruikt worden" #: directives.c:538 #, c-format msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "\"%s\" kan niet als macronaam gebruikt worden omdat het een operator is in C++" #: directives.c:541 #, c-format msgid "no macro name given in #%s directive" msgstr "geen macronaam opgegeven in #%s commando" # lap! hier heb ik het zitten... wat is verdorie een betere vertaling voor identifier? # Dit is wel langer maar zegt denk ik wel waar het om gaat. #: directives.c:544 msgid "macro names must be identifiers" msgstr "macronamen moeten voldoen aan de regels voor namen in C/C++" # niet perfect, maar beter dan "wordt ongedefinieerd", "wordt geondefinieerd" of iets dergelijks... #: directives.c:585 #, c-format msgid "undefining \"%s\"" msgstr "definitie van \"%s\" wordt ongedaan gemaakt" #: directives.c:640 msgid "missing terminating > character" msgstr "sluitend > teken ontbreekt" #: directives.c:695 #, c-format msgid "#%s expects \"FILENAME\" or " msgstr "#%s verwacht \"BESTAND\" of " #: directives.c:739 #, c-format msgid "empty filename in #%s" msgstr "lege bestandsnaam in #%s" #: directives.c:749 msgid "#include nested too deeply" msgstr "#include te diep genest" #: directives.c:790 msgid "#include_next in primary source file" msgstr "#include_next in primair bronbestand" #: directives.c:816 #, c-format msgid "invalid flag \"%s\" in line directive" msgstr "ongeldige vlag \"%s\" in #line commando" #: directives.c:868 #, c-format msgid "\"%s\" after #line is not a positive integer" msgstr "\"%s\" (na #line) is geen positieve integer" #: directives.c:874 msgid "line number out of range" msgstr "regelnummer buiten bereik" #: directives.c:887 directives.c:964 #, c-format msgid "\"%s\" is not a valid filename" msgstr "\"%s\" is geen geldige bestandsnaam" #: directives.c:924 #, c-format msgid "\"%s\" after # is not a positive integer" msgstr "\"%s\" (na #) is geen positieve integer" #: directives.c:1026 #, c-format msgid "invalid #%s directive" msgstr "ongeldig #%s commando" # goede vertaling voor 'mismatched'? #: directives.c:1089 #, c-format msgid "registering pragmas in namespace \"%s\" with mismatched name expansion" msgstr "registratie van pragmas in namespace \"%s\" met niet-overeenkomstige naamexpansie" # moet namespace hier ook vertaald worden? #: directives.c:1098 #, c-format msgid "registering pragma \"%s\" with name expansion and no namespace" msgstr "registratie van pragma \"%s\" met naamexpansie maar geen namespace" # moet namespace hier ook vertaald worden? #: directives.c:1116 #, c-format msgid "registering \"%s\" as both a pragma and a pragma namespace" msgstr "registratie van \"%s\" zowel als pragma en als pragma-namespace" #: directives.c:1119 #, c-format msgid "#pragma %s %s is already registered" msgstr "#pragma %s %s is reeds geregistreerd" #: directives.c:1122 #, c-format msgid "#pragma %s is already registered" msgstr "#pragma %s is reeds geregistreerd" # betere vertaling voor 'handler'? #: directives.c:1152 msgid "registering pragma with NULL handler" msgstr "registratie van pragma met NULL als afhandelingsroutine" #: directives.c:1362 msgid "#pragma once in main file" msgstr "#pragma once in hoofdbestand" #: directives.c:1385 msgid "invalid #pragma GCC poison directive" msgstr "ongeldig #pragma GCC poison commando" #: directives.c:1394 #, c-format msgid "poisoning existing macro \"%s\"" msgstr "bestaande macro \"%s\" wordt 'vergiftigd'" #: directives.c:1413 msgid "#pragma system_header ignored outside include file" msgstr "#pragma system_header wordt genegeerd buiten een invoegbestand" #: directives.c:1437 #, c-format msgid "cannot find source file %s" msgstr "kan bronbestand %s niet vinden" #: directives.c:1441 #, c-format msgid "current file is older than %s" msgstr "huidig bestand is ouder dan %s" #: directives.c:1620 msgid "_Pragma takes a parenthesized string literal" msgstr "_Pragma verwacht een stringconstante tussen haakjes als argument" #: directives.c:1693 msgid "#else without #if" msgstr "#else zonder #if" #: directives.c:1698 msgid "#else after #else" msgstr "#else na #else" # of gewoon "de conditie"? #: directives.c:1700 directives.c:1733 msgid "the conditional began here" msgstr "het conditionele blok begon hier" #: directives.c:1726 msgid "#elif without #if" msgstr "#elif zonder #if" #: directives.c:1731 msgid "#elif after #else" msgstr "#elif na #else" #: directives.c:1761 msgid "#endif without #if" msgstr "#endif zonder #if" #: directives.c:1838 msgid "missing '(' after predicate" msgstr "'(' ontbreekt na predicaat" #: directives.c:1853 msgid "missing ')' to complete answer" msgstr "')' ontbreekt als afronding van het antwoord" #: directives.c:1873 msgid "predicate's answer is empty" msgstr "antwoord van het predicaat is leeg" # dit moet beter kunnen... #: directives.c:1900 msgid "assertion without predicate" msgstr "assertie zonder predicaat" # ... dit klinkt echt niet - maar wat is hier een beter vertaling voor identifier? #: directives.c:1902 msgid "predicate must be an identifier" msgstr "predicaat moet een naam zijn" # is "asserteren" wel een echt woord? #: directives.c:1988 #, c-format msgid "\"%s\" re-asserted" msgstr "\"%s\" opnieuw geasserteerd" #: directives.c:2271 #, c-format msgid "unterminated #%s" msgstr "niet-beëindigde #%s" #: directives-only.c:221 lex.c:1016 traditional.c:162 msgid "unterminated comment" msgstr "niet-beëindigde commentaar" # Dit zou misschien beter 'warning' blijven #: errors.c:118 msgid "warning: " msgstr "let op: " #: errors.c:120 msgid "internal error: " msgstr "interne fout: " #: errors.c:122 msgid "error: " msgstr "fout: " #: errors.c:186 msgid "stdout" msgstr "stdout" # hoort niet echt een vertaalbare string te zijn :-) #: errors.c:188 #, c-format msgid "%s: %s" msgstr "%s: %s" # betere vertaling voor decimal point? #: expr.c:261 msgid "too many decimal points in number" msgstr "teveel komma's in getal" #: expr.c:290 expr.c:365 msgid "fixed-point constants are a GCC extension" msgstr "fixed-point constantes zijn een uitbreiding van GCC" #: expr.c:303 #, c-format msgid "invalid digit \"%c\" in binary constant" msgstr "ongeldig cijfer \"%c\" in binaire constante" #: expr.c:305 #, c-format msgid "invalid digit \"%c\" in octal constant" msgstr "ongeldig cijfer \"%c\" in octale constante" #: expr.c:313 msgid "invalid prefix \"0b\" for floating constant" msgstr "ongeldige prefix \"0b\" voor floating-point constante" #: expr.c:319 msgid "use of C99 hexadecimal floating constant" msgstr "gebruik van C99 hexadecimale floating-point constante" #: expr.c:328 msgid "exponent has no digits" msgstr "exponent heeft geen cijfers" #: expr.c:335 msgid "hexadecimal floating constants require an exponent" msgstr "hexadecimale floating-point constante vereist een exponent" #: expr.c:341 #, c-format msgid "invalid suffix \"%.*s\" on floating constant" msgstr "ongeldige suffix \"%.*s\" aan floating-point constante" #: expr.c:351 expr.c:393 #, c-format msgid "traditional C rejects the \"%.*s\" suffix" msgstr "traditionele C aanvaardt de \"%.*s\" suffix niet" #: expr.c:358 #, c-format msgid "invalid suffix \"%.*s\" with hexadecimal floating constant" msgstr "ongeldige suffix \"%.*s\" bij hexadecimale floating-point constante" #: expr.c:369 msgid "decimal float constants are a GCC extension" msgstr "decimale float-constantes zijn een uitbreiding van GCC" #: expr.c:379 #, c-format msgid "invalid suffix \"%.*s\" on integer constant" msgstr "ongeldige suffix \"%.*s\" aan integerconstante" #: expr.c:401 msgid "use of C99 long long integer constant" msgstr "gebruik van C99 long long integerconstantes" #: expr.c:409 msgid "imaginary constants are a GCC extension" msgstr "imaginaire constantes zijn een uitbreiding van GCC" #: expr.c:412 msgid "binary constants are a GCC extension" msgstr "binaire constantes zijn een uitbreiding van GCC" #: expr.c:505 msgid "integer constant is too large for its type" msgstr "integerconstante is te groot voor zijn type" #: expr.c:517 msgid "integer constant is so large that it is unsigned" msgstr "integerconstante is zo groot dat hij tekenloos is" #: expr.c:612 msgid "missing ')' after \"defined\"" msgstr "')' ontbreekt na \"defined\"" #: expr.c:619 msgid "operator \"defined\" requires an identifier" msgstr "de \"defined\" operator verwacht een naam als argument" #: expr.c:627 #, c-format msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "(\"%s\" is een alternatieve schrijfwijze voor \"%s\" in C++)" # betere vertaling voor "portable"? #: expr.c:637 msgid "this use of \"defined\" may not be portable" msgstr "dit gebruik van \"define\" is mogelijk niet portabel" #: expr.c:676 msgid "floating constant in preprocessor expression" msgstr "floating-point constante in preprocessor-expressie" #: expr.c:682 msgid "imaginary number in preprocessor expression" msgstr "imaginair getal in preprocessor-expressie" #: expr.c:727 #, c-format msgid "\"%s\" is not defined" msgstr "\"%s\" is niet gedefinieerd" #: expr.c:855 expr.c:884 #, c-format msgid "missing binary operator before token \"%s\"" msgstr "binaire operator ontbreekt voor het \"%s\" token" #: expr.c:875 #, c-format msgid "token \"%s\" is not valid in preprocessor expressions" msgstr "token \"%s\" is niet geldig in preprocessor-expressies" #: expr.c:892 msgid "missing expression between '(' and ')'" msgstr "expressie ontbreekt tussen '(' en ')'" #: expr.c:895 msgid "#if with no expression" msgstr "#if zonder expressie" #: expr.c:898 #, c-format msgid "operator '%s' has no right operand" msgstr "operator '%s' heeft geen rechtse operand" #: expr.c:903 #, c-format msgid "operator '%s' has no left operand" msgstr "operator '%s' heeft geen linkse operand" #: expr.c:929 msgid " ':' without preceding '?'" msgstr " ':' zonder voorafgaande '?'" #: expr.c:956 msgid "unbalanced stack in #if" msgstr "niet-gebalanceerde stack in #if" #: expr.c:975 #, c-format msgid "impossible operator '%u'" msgstr "operator '%u' is onmogelijk" #: expr.c:1065 msgid "missing ')' in expression" msgstr "')' ontbreekt in expressie" #: expr.c:1086 msgid "'?' without following ':'" msgstr "'?' zonder daaropvolgende ':'" #: expr.c:1096 msgid "integer overflow in preprocessor expression" msgstr "integer-overflow in preprocessor-expressie" #: expr.c:1101 msgid "missing '(' in expression" msgstr "'(' ontbreekt in expressie" #: expr.c:1133 #, c-format msgid "the left operand of \"%s\" changes sign when promoted" msgstr "de linker operand van \"%s\" verandert van teken indien hij gepromoveerd wordt" #: expr.c:1138 #, c-format msgid "the right operand of \"%s\" changes sign when promoted" msgstr "de rechter operand van \"%s\" verandert van teken indien hij gepromoveerd wordt" #: expr.c:1397 msgid "traditional C rejects the unary plus operator" msgstr "traditionele C verwerpt de unaire plus-operator" #: expr.c:1480 msgid "comma operator in operand of #if" msgstr "comma operator in operand van #if" #: expr.c:1612 msgid "division by zero in #if" msgstr "deling door nul in `#if'" #: files.c:442 msgid "NULL directory in find_file" msgstr "directory is NULL in find_file" #: files.c:480 msgid "one or more PCH files were found, but they were invalid" msgstr "een of meer PCH bestanden werden gevonden, maar ze waren ongeldig" #: files.c:483 msgid "use -Winvalid-pch for more information" msgstr "gebruik -Winvalid-pch voor meer informatie" #: files.c:570 #, c-format msgid "%s is a block device" msgstr "%s is een blokapparaat" #: files.c:587 #, c-format msgid "%s is too large" msgstr "%s is te groot" #: files.c:622 #, c-format msgid "%s is shorter than expected" msgstr "%s is korter dan verwacht" #: files.c:852 #, c-format msgid "no include path in which to search for %s" msgstr "geen invoegpad waarin naar %s gezocht kan worden" # goede vertaling voor "include guard"? #: files.c:1157 msgid "Multiple include guards may be useful for:\n" msgstr "Meerdere invoegbeschermingen zouden nuttig kunnen zijn voor:\n" #: init.c:426 msgid "cppchar_t must be an unsigned type" msgstr "cppchar_t moet een tekenloos type zijn" #: init.c:430 #, c-format msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits" msgstr "preprocessor-rekensommen hebben een maximale precisie van %lu bits; doelomgeving vereist %lu bits" #: init.c:437 msgid "CPP arithmetic must be at least as precise as a target int" msgstr "CPP rekensommen moet minstens even precies zijn als een int in de doelomgeving" #: init.c:440 msgid "target char is less than 8 bits wide" msgstr "char is minder dan 8 bits breed in de doelomgeving" #: init.c:444 msgid "target wchar_t is narrower than target char" msgstr "wchar_t is smaller dan char in de doelomgeving" #: init.c:448 msgid "target int is narrower than target char" msgstr "int is smaller dan char in de doelomgeving" #: init.c:453 msgid "CPP half-integer narrower than CPP character" msgstr "CPP half-integer is smaller dan een CPP character" #: init.c:457 #, c-format msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits" msgstr "CPP kan op deze host geen brede karakterconstantes aan van meer dan %lu bits, maar de doelomgeving vereist %lu bits" #: lex.c:283 msgid "backslash and newline separated by space" msgstr "backslash en newline gescheiden door spatie(s)" #: lex.c:288 msgid "backslash-newline at end of file" msgstr "backslash-newline aan einde van bestand" #: lex.c:303 #, c-format msgid "trigraph ??%c converted to %c" msgstr "trigraph ??%c omgezet naar %c" #: lex.c:310 #, c-format msgid "trigraph ??%c ignored, use -trigraphs to enable" msgstr "trigraph ??%c genegeerd, gebruik -trigraphs om ondersteuning in te schakelen" #: lex.c:356 msgid "\"/*\" within comment" msgstr "\"/*\" binnen commentaar" #: lex.c:414 #, c-format msgid "%s in preprocessing directive" msgstr "%s binnen preprocessor-commando" #: lex.c:423 msgid "null character(s) ignored" msgstr "nulkarakter(s) worden genegeerd" #: lex.c:460 #, c-format msgid "`%.*s' is not in NFKC" msgstr "`%.*s' zit niet in NFKC" #: lex.c:463 #, c-format msgid "`%.*s' is not in NFC" msgstr "`%.*s' zit niet in NFC" #: lex.c:551 #, c-format msgid "attempt to use poisoned \"%s\"" msgstr "poging tot gebruik van 'vergiftigde' \"%s\"" #: lex.c:559 msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "__VA_ARGS__ mag enkel voorkomen in de expansie van een C99 variadische macro" #: lex.c:659 msgid "null character(s) preserved in literal" msgstr "nulkarakter(s) in een constante worden behouden" #: lex.c:662 #, c-format msgid "missing terminating %c character" msgstr "sluitend %c teken ontbreekt" #: lex.c:1027 msgid "C++ style comments are not allowed in ISO C90" msgstr "commentaar in C++ stijl is niet toegestaan in ISO C90" #: lex.c:1029 msgid "(this will be reported only once per input file)" msgstr "(dit wordt maar een keer gemeld per invoerbestand)" #: lex.c:1034 msgid "multi-line comment" msgstr "commentaar gespreid over meerdere lijnen" # lijkt een vreemde boodschap... #: lex.c:1347 #, c-format msgid "unspellable token %s" msgstr "kan token %s niet spellen" #: line-map.c:320 #, c-format msgid "In file included from %s:%u" msgstr "In bestand ingevoegd vanuit %s:%u" #: line-map.c:338 #, c-format msgid "" ",\n" " from %s:%u" msgstr "" ",\n" " vanuit %s:%u" #: macro.c:84 #, c-format msgid "macro \"%s\" is not used" msgstr "macro \"%s\" wordt nergens gebruikt" #: macro.c:123 macro.c:319 #, c-format msgid "invalid built-in macro \"%s\"" msgstr "ongeldige ingebouwde macro \"%s\"" # betere vertaling voor 'timestamp'? #: macro.c:157 msgid "could not determine file timestamp" msgstr "kan tijdsinformatie van bestand niet bepalen" #: macro.c:254 msgid "could not determine date and time" msgstr "kan datum en tijd niet bepalen" #: macro.c:270 msgid "__COUNTER__ expanded inside directive with -fdirectives-only" msgstr "expansie van __COUNTER__ binnenin commando terwijl -fdirectives-only opgegeven is" #: macro.c:423 msgid "invalid string literal, ignoring final '\\'" msgstr "ongeldige stringconstante, laatste '\\' wordt genegeerd" #: macro.c:483 #, c-format msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "\"%s\" en \"%s\" aan elkaar plakken levert geen geldig preprocessing token op" # "rest arguments"? #: macro.c:558 msgid "ISO C99 requires rest arguments to be used" msgstr "ISO C99 verplicht het gebruik van restargumenten" #: macro.c:563 #, c-format msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "macro \"%s\" vereist %u argumenten, maar er werden er slechts %u opgegeven" #: macro.c:568 #, c-format msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "macro \"%s\" kreeg %u argumenten, maar heeft er slechts %u nodig" #: macro.c:679 traditional.c:680 #, c-format msgid "unterminated argument list invoking macro \"%s\"" msgstr "niet-beëindigde argumentenlijst bij oproep van macro \"%s\"" #: macro.c:782 #, c-format msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "functie-achtige macro \"%s\" moet in traditionele C altijd met argumenten gebruikt worden" #: macro.c:1325 #, c-format msgid "duplicate macro parameter \"%s\"" msgstr "herhaalde macro-parameter \"%s\"" #: macro.c:1371 #, c-format msgid "\"%s\" may not appear in macro parameter list" msgstr "\"%s\" mag niet voorkomen in lijst van macro-parameters" #: macro.c:1379 msgid "macro parameters must be comma-separated" msgstr "macro-parameters moet door komma's gescheiden worden" #: macro.c:1396 msgid "parameter name missing" msgstr "parameternaam weggelaten" #: macro.c:1413 msgid "anonymous variadic macros were introduced in C99" msgstr "anonieme variadische macros werden door C99 ingevoerd" # variadic? " met variabele argumentenlijst" is nogal lang... #: macro.c:1418 msgid "ISO C does not permit named variadic macros" msgstr "ISO C staat het gebruik benoemde variadische macro's niet toe" #: macro.c:1427 msgid "missing ')' in macro parameter list" msgstr "')' ontbreekt in lijst van macro-parameters" #: macro.c:1476 msgid "'##' cannot appear at either end of a macro expansion" msgstr "'##' mag niet voorkomen aan het begin of einde van een macro-expansie" #: macro.c:1510 msgid "ISO C99 requires whitespace after the macro name" msgstr "ISO C99 vereist witruimte na de macronaam" #: macro.c:1534 msgid "missing whitespace after the macro name" msgstr "witruimte ontbreekt na de macronaam" #: macro.c:1564 msgid "'#' is not followed by a macro parameter" msgstr "'#' wordt niet gevolgd door de naam van een macro-parameter" #: macro.c:1683 #, c-format msgid "\"%s\" redefined" msgstr "\"%s\" opnieuw gedefinieerd" #: macro.c:1688 msgid "this is the location of the previous definition" msgstr "dit is de locatie van de eerdere definitie" #: macro.c:1738 #, c-format msgid "macro argument \"%s\" would be stringified in traditional C" msgstr "macro-argument \"%s\" zou string gemaakt worden in traditionele C" #: macro.c:1761 #, c-format msgid "invalid hash type %d in cpp_macro_definition" msgstr "ongeldig hashtype %d in cpp_macro_definition" #: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377 msgid "while writing precompiled header" msgstr "bij het schrijven van een voorgecompileerde header" #: pch.c:485 #, c-format msgid "%s: not used because `%.*s' not defined" msgstr "%s: niet gebruikt omdat \"%.*s\" niet gedefinieerd werd" #: pch.c:497 #, c-format msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'" msgstr "%s: niet gebruikt omdat \"%.*s\" als \"%s\" (en niet als \"%.*s\") gedefinieerd werd" #: pch.c:538 #, c-format msgid "%s: not used because `%s' is defined" msgstr "%s: niet gebruikt omdat \"%s\" gedefinieerd is" #: pch.c:558 #, c-format msgid "%s: not used because `__COUNTER__' is invalid" msgstr "%s: niet gebruikt omdat \"__COUNTER__\" ongeldig is" #: pch.c:567 pch.c:737 msgid "while reading precompiled header" msgstr "bij het lezen van een voorgecompileerde header" #: traditional.c:750 #, c-format msgid "detected recursion whilst expanding macro \"%s\"" msgstr "recursie gedetecteerd bij uitbreiden van macro \"%s\"" #: traditional.c:917 msgid "syntax error in macro parameter list" msgstr "syntaxfout in lijst van macro-parameters" nescc-1.3.4/libcpp/po/rw.po000066400000000000000000015772301177770303300155200ustar00rootroot00000000000000# Kinyarwanda translations for cpplib package. # Copyright (C) 2005 Free Software Foundation, Inc. # This file is distributed under the same license as the cpplib package. # Steve Murphy , 2005. # Steve performed initial rough translation from compendium built from translations provided by the following translators: # Philibert Ndandali , 2005. # Viateur MUGENZI , 2005. # Noëlla Mupole , 2005. # Carole Karema , 2005. # JEAN BAPTISTE NGENDAHAYO , 2005. # Augustin KIBERWA , 2005. # Donatien NSENGIYUMVA , 2005. # Antoine Bigirimana , 2005. # msgid "" msgstr "" "Project-Id-Version: cpplib 3.3\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2007-05-13 19:48-0700\n" "PO-Revision-Date: 2005-04-04 10:55-0700\n" "Last-Translator: Steven Michael Murphy \n" "Language-Team: Kinyarwanda \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: charset.c:654 #, fuzzy, c-format msgid "conversion from %s to %s not supported by iconv" msgstr "Ihindurangero Bivuye Kuri ni" #: charset.c:657 msgid "iconv_open" msgstr "" #: charset.c:665 #, c-format msgid "no iconv implementation, cannot convert from %s to %s" msgstr "" #: charset.c:742 #, c-format msgid "character 0x%lx is not in the basic source character set\n" msgstr "" #: charset.c:759 charset.c:1352 msgid "converting to execution character set" msgstr "" #: charset.c:765 #, c-format msgid "character 0x%lx is not unibyte in execution character set" msgstr "" #: charset.c:889 #, c-format msgid "Character %x might not be NFKC" msgstr "" #: charset.c:949 #, fuzzy msgid "universal character names are only valid in C++ and C99" msgstr "Ky'isi yose Inyuguti Izina: OYA Byemewe in Ikiranga" #: charset.c:952 #, fuzzy, c-format msgid "the meaning of '\\%c' is different in traditional C" msgstr "i Igisobanuro Bya ni in C" #: charset.c:961 msgid "In _cpp_valid_ucn but not a UCN" msgstr "" #: charset.c:986 #, fuzzy, c-format msgid "incomplete universal character name %.*s" msgstr "Ky'isi yose Inyuguti Izina:" #: charset.c:998 #, fuzzy, c-format msgid "%.*s is not a valid universal character" msgstr "`%T::%D'ni OYA a Byemewe" #: charset.c:1008 lex.c:472 #, fuzzy msgid "'$' in identifier or number" msgstr "'$'Inyuguti S in Ikiranga Cyangwa Umubare" #: charset.c:1018 #, fuzzy, c-format msgid "universal character %.*s is not valid in an identifier" msgstr "Ky'isi yose Inyuguti Izina: OYA Byemewe in Ikiranga" #: charset.c:1022 #, fuzzy, c-format msgid "universal character %.*s is not valid at the start of an identifier" msgstr "Ky'isi yose Inyuguti Izina: OYA Byemewe in Ikiranga" #: charset.c:1056 charset.c:1571 #, fuzzy msgid "converting UCN to source character set" msgstr "Guhindura.... Kuri Mweretsi Ubwoko" #: charset.c:1060 #, fuzzy msgid "converting UCN to execution character set" msgstr "Guhindura.... Kuri Mweretsi Ubwoko" #: charset.c:1132 #, fuzzy msgid "the meaning of '\\x' is different in traditional C" msgstr "i Igisobanuro Bya ni in C" #: charset.c:1149 #, fuzzy msgid "\\x used with no following hex digits" msgstr "\\xNa: Oya" #: charset.c:1156 #, fuzzy msgid "hex escape sequence out of range" msgstr "Inyuma Bya Urutonde" #: charset.c:1195 #, fuzzy msgid "octal escape sequence out of range" msgstr "Inyuma Bya Urutonde" #: charset.c:1263 #, fuzzy msgid "the meaning of '\\a' is different in traditional C" msgstr "i Igisobanuro Bya ni in C" #: charset.c:1270 #, fuzzy, c-format msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "Bisanzwe" #: charset.c:1278 #, fuzzy, c-format msgid "unknown escape sequence '\\%c'" msgstr "Kitazwi" #: charset.c:1286 #, fuzzy, c-format msgid "unknown escape sequence: '\\%s'" msgstr "Kitazwi" #: charset.c:1293 #, fuzzy msgid "converting escape sequence to execution character set" msgstr "Inyuma Bya Urutonde" #: charset.c:1415 charset.c:1478 #, fuzzy msgid "character constant too long for its type" msgstr "Inyuguti kugirango Ubwoko" #: charset.c:1418 #, fuzzy msgid "multi-character character constant" msgstr "Inyuguti Inyuguti" #: charset.c:1510 #, fuzzy msgid "empty character constant" msgstr "ubusa Inyuguti" #: charset.c:1612 #, fuzzy, c-format msgid "failure to convert %s to %s" msgstr "OYA GUHINDURA Kuri" #: directives.c:214 directives.c:240 #, fuzzy, c-format msgid "extra tokens at end of #%s directive" msgstr "Birenga ku Impera Bya" #: directives.c:343 #, fuzzy, c-format msgid "#%s is a GCC extension" msgstr "#%sni a Umugereka" #: directives.c:355 #, fuzzy msgid "suggest not using #elif in traditional C" msgstr "OYA ikoresha in C" #: directives.c:358 #, fuzzy, c-format msgid "traditional C ignores #%s with the # indented" msgstr "C Na: i hariho marije" #: directives.c:362 #, fuzzy, c-format msgid "suggest hiding #%s from traditional C with an indented #" msgstr "Bivuye C Na: hariho marije" #: directives.c:388 #, fuzzy msgid "embedding a directive within macro arguments is not portable" msgstr "a muri Makoro ingingo ni OYA" #: directives.c:408 #, fuzzy msgid "style of line directive is a GCC extension" msgstr "IMISUSIRE Bya Umurongo ni a Umugereka" #: directives.c:458 #, fuzzy, c-format msgid "invalid preprocessing directive #%s" msgstr "Sibyo" #: directives.c:524 #, fuzzy msgid "\"defined\" cannot be used as a macro name" msgstr "\"Nka a Makoro Izina:" #: directives.c:530 #, fuzzy, c-format msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "\"%s\"Nka a Makoro Izina: Nka ni Mukoresha in C" #: directives.c:533 #, fuzzy, c-format msgid "no macro name given in #%s directive" msgstr "Oya Makoro Izina: in" #: directives.c:536 #, fuzzy msgid "macro names must be identifiers" msgstr "Makoro Amazina" #: directives.c:577 #, c-format msgid "undefining \"%s\"" msgstr "" #: directives.c:632 #, fuzzy msgid "missing terminating > character" msgstr "Ibuze Inyuguti" #: directives.c:687 #, fuzzy, c-format msgid "#%s expects \"FILENAME\" or " msgstr "#%sCyangwa" #: directives.c:727 #, fuzzy, c-format msgid "empty filename in #%s" msgstr "ubusa IDOSIYE Izina: in" #: directives.c:737 #, fuzzy msgid "#include nested too deeply" msgstr "#Gushyiramo" #: directives.c:778 #, fuzzy msgid "#include_next in primary source file" msgstr "#in Inkomoko IDOSIYE" #: directives.c:804 #, fuzzy, c-format msgid "invalid flag \"%s\" in line directive" msgstr "Sibyo Ibendera in Umurongo" #: directives.c:856 #, fuzzy, c-format msgid "\"%s\" after #line is not a positive integer" msgstr "\"%s\"Nyuma Umurongo ni OYA a Umubare wuzuye" #: directives.c:862 #, fuzzy msgid "line number out of range" msgstr "Umurongo Umubare Inyuma Bya Urutonde" #: directives.c:875 directives.c:952 #, fuzzy, c-format msgid "\"%s\" is not a valid filename" msgstr "\"%s\"ni OYA a Byemewe Izina ry'idosiye:" #: directives.c:912 #, fuzzy, c-format msgid "\"%s\" after # is not a positive integer" msgstr "\"%s\"Nyuma ni OYA a Umubare wuzuye" #: directives.c:1014 #, fuzzy, c-format msgid "invalid #%s directive" msgstr "Sibyo" #: directives.c:1077 #, c-format msgid "registering pragmas in namespace \"%s\" with mismatched name expansion" msgstr "" #: directives.c:1086 #, fuzzy, c-format msgid "registering pragma \"%s\" with name expansion and no namespace" msgstr "Nka Byombi a Na a" #: directives.c:1104 #, fuzzy, c-format msgid "registering \"%s\" as both a pragma and a pragma namespace" msgstr "Nka Byombi a Na a" #: directives.c:1107 #, fuzzy, c-format msgid "#pragma %s %s is already registered" msgstr "#ni" #: directives.c:1110 #, fuzzy, c-format msgid "#pragma %s is already registered" msgstr "#ni" #: directives.c:1140 msgid "registering pragma with NULL handler" msgstr "" #: directives.c:1350 #, fuzzy msgid "#pragma once in main file" msgstr "#Rimwe in IDOSIYE" #: directives.c:1373 #, fuzzy msgid "invalid #pragma GCC poison directive" msgstr "Sibyo" #: directives.c:1382 #, fuzzy, c-format msgid "poisoning existing macro \"%s\"" msgstr "Makoro" #: directives.c:1403 #, fuzzy msgid "#pragma system_header ignored outside include file" msgstr "#Hanze Gushyiramo IDOSIYE" #: directives.c:1427 #, fuzzy, c-format msgid "cannot find source file %s" msgstr "Gushaka Inkomoko" #: directives.c:1431 #, fuzzy, c-format msgid "current file is older than %s" msgstr "KIGEZWEHO IDOSIYE ni" #: directives.c:1599 #, fuzzy msgid "_Pragma takes a parenthesized string literal" msgstr "a Ikurikiranyanyuguti" #: directives.c:1671 #, fuzzy msgid "#else without #if" msgstr "#Ikindi NIBA" #: directives.c:1676 #, fuzzy msgid "#else after #else" msgstr "#Ikindi Nyuma Ikindi" #: directives.c:1678 directives.c:1711 #, fuzzy msgid "the conditional began here" msgstr "i" #: directives.c:1704 #, fuzzy msgid "#elif without #if" msgstr "#NIBA" #: directives.c:1709 #, fuzzy msgid "#elif after #else" msgstr "#Nyuma Ikindi" #: directives.c:1739 #, fuzzy msgid "#endif without #if" msgstr "#NIBA" #: directives.c:1816 #, fuzzy msgid "missing '(' after predicate" msgstr "Ibuze Nyuma" #: directives.c:1831 #, fuzzy msgid "missing ')' to complete answer" msgstr "Ibuze Kuri Byuzuye" #: directives.c:1851 #, fuzzy msgid "predicate's answer is empty" msgstr "ni ubusa" #: directives.c:1878 msgid "assertion without predicate" msgstr "" #: directives.c:1880 #, fuzzy msgid "predicate must be an identifier" msgstr "Ikiranga" #: directives.c:1966 #, c-format msgid "\"%s\" re-asserted" msgstr "" #: directives.c:2190 #, c-format msgid "unterminated #%s" msgstr "" #: errors.c:118 #, fuzzy msgid "warning: " msgstr "Iburira!" #: errors.c:120 #, fuzzy msgid "internal error: " msgstr "Ikosa ry'imbere" #: errors.c:122 #, fuzzy msgid "error: " msgstr "Ikosa ry'imbere" #: errors.c:186 msgid "stdout" msgstr "" # desktop/source\app\ssodlg.src:DLG_SSOLOGIN.text #: errors.c:188 #, fuzzy, c-format msgid "%s: %s" msgstr "%s:%s" #: expr.c:203 #, fuzzy msgid "too many decimal points in number" msgstr "NYACUMI Utudomo in Umubare" #: expr.c:223 #, fuzzy, c-format msgid "invalid digit \"%c\" in octal constant" msgstr "Sibyo in" #: expr.c:229 #, fuzzy msgid "use of C99 hexadecimal floating constant" msgstr "Gukoresha Bya Bihindagurika" #: expr.c:238 #, fuzzy msgid "exponent has no digits" msgstr "Oya" #: expr.c:245 #, fuzzy msgid "hexadecimal floating constants require an exponent" msgstr "Bihindagurika" #: expr.c:251 #, fuzzy, c-format msgid "invalid suffix \"%.*s\" on floating constant" msgstr "Sibyo Ingereka S ku Bihindagurika" #: expr.c:261 expr.c:295 #, fuzzy, c-format msgid "traditional C rejects the \"%.*s\" suffix" msgstr "C i S Ingereka" #: expr.c:268 #, fuzzy, c-format msgid "invalid suffix \"%.*s\" with hexadecimal floating constant" msgstr "Sibyo Ingereka S ku Bihindagurika" #: expr.c:281 #, fuzzy, c-format msgid "invalid suffix \"%.*s\" on integer constant" msgstr "Sibyo Ingereka S ku Umubare wuzuye" #: expr.c:303 #, fuzzy msgid "use of C99 long long integer constant" msgstr "Gukoresha Bya Umubare wuzuye" #: expr.c:310 #, fuzzy msgid "imaginary constants are a GCC extension" msgstr "NYURABWENGE a Umugereka" #: expr.c:396 #, fuzzy msgid "integer constant is too large for its type" msgstr "Umubare wuzuye ni Binini kugirango Ubwoko" #: expr.c:408 #, fuzzy msgid "integer constant is so large that it is unsigned" msgstr "Umubare wuzuye ni Binini ni Bitashizweho umukono" #: expr.c:490 #, fuzzy msgid "missing ')' after \"defined\"" msgstr "Ibuze Nyuma" #: expr.c:497 #, fuzzy msgid "operator \"defined\" requires an identifier" msgstr "Mukoresha Ikiranga" #: expr.c:505 #, fuzzy, c-format msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "(\"%s\"ni kugirango in C" #: expr.c:515 #, fuzzy msgid "this use of \"defined\" may not be portable" msgstr "iyi Gukoresha Bya Gicurasi OYA" #: expr.c:554 #, fuzzy msgid "floating constant in preprocessor expression" msgstr "Bihindagurika in imvugo" #: expr.c:560 #, fuzzy msgid "imaginary number in preprocessor expression" msgstr "NYURABWENGE Umubare in imvugo" #: expr.c:605 #, fuzzy, c-format msgid "\"%s\" is not defined" msgstr "\"%s\"ni OYA" #: expr.c:733 expr.c:762 #, fuzzy, c-format msgid "missing binary operator before token \"%s\"" msgstr "Ibuze Nyabibiri Mukoresha Mbere" #: expr.c:753 #, fuzzy, c-format msgid "token \"%s\" is not valid in preprocessor expressions" msgstr "ni OYA Byemewe in" #: expr.c:770 #, fuzzy msgid "missing expression between '(' and ')'" msgstr "imvugo hagati Na" #: expr.c:773 #, fuzzy msgid "#if with no expression" msgstr "#NIBA Na: Oya imvugo" #: expr.c:776 #, fuzzy, c-format msgid "operator '%s' has no right operand" msgstr "Mukoresha Oya Iburyo:" #: expr.c:781 #, fuzzy, c-format msgid "operator '%s' has no left operand" msgstr "Mukoresha Oya Iburyo:" #: expr.c:807 msgid " ':' without preceding '?'" msgstr "" #: expr.c:834 #, fuzzy msgid "unbalanced stack in #if" msgstr "in NIBA" #: expr.c:853 #, fuzzy, c-format msgid "impossible operator '%u'" msgstr "Mukoresha" #: expr.c:943 #, fuzzy msgid "missing ')' in expression" msgstr "Ibuze in imvugo" #: expr.c:964 #, fuzzy msgid "'?' without following ':'" msgstr "" "''Project- Id- Version: basctl\n" "POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n" "PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n" "Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n" "Content- Type: text/ plain; charset= UTF- 8\n" "Content- Transfer- Encoding: 8bit\n" "X- Generator: KBabel 1. 0\n" "." #: expr.c:974 #, fuzzy msgid "integer overflow in preprocessor expression" msgstr "Umubare wuzuye Byarenze urugero in imvugo" #: expr.c:979 #, fuzzy msgid "missing '(' in expression" msgstr "Ibuze in imvugo" #: expr.c:1011 #, fuzzy, c-format msgid "the left operand of \"%s\" changes sign when promoted" msgstr "i Ibumoso: Bya Amahinduka IKIMENYETSO Ryari:" #: expr.c:1016 #, fuzzy, c-format msgid "the right operand of \"%s\" changes sign when promoted" msgstr "i Iburyo: Bya Amahinduka IKIMENYETSO Ryari:" #: expr.c:1275 #, fuzzy msgid "traditional C rejects the unary plus operator" msgstr "C i Guteranya Mukoresha" #: expr.c:1358 #, fuzzy msgid "comma operator in operand of #if" msgstr "Akitso Mukoresha in Bya NIBA" #: expr.c:1490 #, fuzzy msgid "division by zero in #if" msgstr "ku Zeru in NIBA" #: files.c:402 msgid "NULL directory in find_file" msgstr "" #: files.c:440 msgid "one or more PCH files were found, but they were invalid" msgstr "" #: files.c:443 msgid "use -Winvalid-pch for more information" msgstr "" #: files.c:501 #, fuzzy, c-format msgid "%s is a block device" msgstr "%sni a Funga APAREYE" #: files.c:518 #, fuzzy, c-format msgid "%s is too large" msgstr "%sni Binini" #: files.c:553 #, fuzzy, c-format msgid "%s is shorter than expected" msgstr "%sni Ikitezwe:" #: files.c:782 #, fuzzy, c-format msgid "no include path in which to search for %s" msgstr "Oya Gushyiramo Inzira in Kuri Gushaka" #: files.c:1071 #, fuzzy msgid "Multiple include guards may be useful for:\n" msgstr "Gushyiramo Gicurasi kugirango" #: init.c:407 #, fuzzy msgid "cppchar_t must be an unsigned type" msgstr "Bitashizweho umukono Ubwoko" #: init.c:411 #, fuzzy, c-format msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits" msgstr "Kinini Bya Intego" #: init.c:418 #, fuzzy msgid "CPP arithmetic must be at least as precise as a target int" msgstr "ku Nka Nka a Intego INT" #: init.c:421 #, fuzzy msgid "target char is less than 8 bits wide" msgstr "Intego INYUGUTI ni Birutwa 8" #: init.c:425 #, fuzzy msgid "target wchar_t is narrower than target char" msgstr "Intego ni Intego INYUGUTI" #: init.c:429 #, fuzzy msgid "target int is narrower than target char" msgstr "Intego INT ni Intego INYUGUTI" #: init.c:434 #, fuzzy msgid "CPP half-integer narrower than CPP character" msgstr "Umubare wuzuye Inyuguti" #: init.c:438 #, fuzzy, c-format msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits" msgstr "ku iyi Ubuturo Inyuguti KURI i Intego" #: lex.c:271 #, fuzzy msgid "backslash and newline separated by space" msgstr "Na ku Umwanya" #: lex.c:276 #, fuzzy msgid "backslash-newline at end of file" msgstr "ku Impera Bya IDOSIYE" #: lex.c:291 #, fuzzy, c-format msgid "trigraph ??%c converted to %c" msgstr "" "Project- Id- Version: basctl\n" "POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n" "PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n" "Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n" "Content- Type: text/ plain; charset= UTF- 8\n" "Content- Transfer- Encoding: 8bit\n" "X- Generator: KBabel 1. 0\n" "." #: lex.c:298 #, fuzzy, c-format msgid "trigraph ??%c ignored, use -trigraphs to enable" msgstr "" "Project- Id- Version: basctl\n" "POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n" "PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n" "Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n" "Content- Type: text/ plain; charset= UTF- 8\n" "Content- Transfer- Encoding: 8bit\n" "X- Generator: KBabel 1. 0\n" "." #: lex.c:344 #, fuzzy msgid "\"/*\" within comment" msgstr "\"/*\"muri Icyo wongeraho" #: lex.c:402 #, fuzzy, c-format msgid "%s in preprocessing directive" msgstr "%sin" #: lex.c:411 #, fuzzy msgid "null character(s) ignored" msgstr "NTAGIHARI Inyuguti S" #: lex.c:448 #, fuzzy, c-format msgid "`%.*s' is not in NFKC" msgstr "\"%s\"ni OYA" #: lex.c:451 #, fuzzy, c-format msgid "`%.*s' is not in NFC" msgstr "\"%s\"ni OYA" #: lex.c:539 #, fuzzy, c-format msgid "attempt to use poisoned \"%s\"" msgstr "Kuri Gukoresha" #: lex.c:547 #, fuzzy msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "_Kugaragara in i Bya a Makoro" #: lex.c:647 #, fuzzy msgid "null character(s) preserved in literal" msgstr "NTAGIHARI Inyuguti S in" #: lex.c:650 #, fuzzy, c-format msgid "missing terminating %c character" msgstr "Ibuze Inyuguti" #: lex.c:842 #, fuzzy msgid "no newline at end of file" msgstr "Oya ku Impera Bya IDOSIYE" #: lex.c:1002 traditional.c:162 #, fuzzy msgid "unterminated comment" msgstr "Icyo wongeraho" #: lex.c:1013 #, fuzzy msgid "C++ style comments are not allowed in ISO C90" msgstr "C IMISUSIRE Ibisobanuro OYA in" #: lex.c:1015 #, fuzzy msgid "(this will be reported only once per input file)" msgstr "(iyi Rimwe Iyinjiza IDOSIYE" #: lex.c:1020 #, fuzzy msgid "multi-line comment" msgstr "Umurongo Icyo wongeraho" #: lex.c:1333 #, c-format msgid "unspellable token %s" msgstr "" #: line-map.c:313 #, fuzzy, c-format msgid "In file included from %s:%u" msgstr "IDOSIYE Bivuye" #: line-map.c:331 #, fuzzy, c-format msgid "" ",\n" " from %s:%u" msgstr ",Bivuye" #: macro.c:83 #, fuzzy, c-format msgid "macro \"%s\" is not used" msgstr "Makoro ni OYA" #: macro.c:122 macro.c:312 #, fuzzy, c-format msgid "invalid built-in macro \"%s\"" msgstr "Sibyo in Makoro" #: macro.c:156 #, fuzzy msgid "could not determine file timestamp" msgstr "OYA Itariki Na Igihe" #: macro.c:253 #, fuzzy msgid "could not determine date and time" msgstr "OYA Itariki Na Igihe" #: macro.c:416 #, fuzzy msgid "invalid string literal, ignoring final '\\'" msgstr "Sibyo Ikurikiranyanyuguti" #: macro.c:466 #, fuzzy, c-format msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "Na OYA a Byemewe" #: macro.c:538 #, fuzzy msgid "ISO C99 requires rest arguments to be used" msgstr "ingingo Kuri" #: macro.c:543 #, fuzzy, c-format msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "Makoro ingingo" #: macro.c:548 #, fuzzy, c-format msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "Makoro ingingo" #: macro.c:659 traditional.c:675 #, fuzzy, c-format msgid "unterminated argument list invoking macro \"%s\"" msgstr "Urutonde Makoro" #: macro.c:762 #, fuzzy, c-format msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "Umumaro nka Makoro Na: ingingo in C" #: macro.c:1278 #, fuzzy, c-format msgid "duplicate macro parameter \"%s\"" msgstr "Gusubiramo Makoro" #: macro.c:1324 #, fuzzy, c-format msgid "\"%s\" may not appear in macro parameter list" msgstr "\"%s\"Gicurasi OYA Kugaragara in Makoro Urutonde" #: macro.c:1332 #, fuzzy msgid "macro parameters must be comma-separated" msgstr "Makoro Ibigenga Akitso" #: macro.c:1349 #, fuzzy msgid "parameter name missing" msgstr "Izina: Ibuze" #: macro.c:1366 #, fuzzy msgid "anonymous variadic macros were introduced in C99" msgstr "Makoro in" #: macro.c:1371 #, fuzzy msgid "ISO C does not permit named variadic macros" msgstr "C OYA Makoro" #: macro.c:1380 #, fuzzy msgid "missing ')' in macro parameter list" msgstr "Ibuze in Makoro Urutonde" #: macro.c:1458 #, fuzzy msgid "ISO C99 requires whitespace after the macro name" msgstr "C Nyuma i Makoro Izina:" #: macro.c:1482 #, fuzzy msgid "missing whitespace after the macro name" msgstr "C Nyuma i Makoro Izina:" #: macro.c:1512 #, fuzzy msgid "'#' is not followed by a macro parameter" msgstr "'#'ni OYA ku a Makoro" #: macro.c:1531 #, fuzzy msgid "'##' cannot appear at either end of a macro expansion" msgstr "'##'Kugaragara ku Impera Bya a Makoro" #: macro.c:1629 #, c-format msgid "\"%s\" redefined" msgstr "" #: macro.c:1634 #, fuzzy msgid "this is the location of the previous definition" msgstr "iyi ni i Ahantu Bya i Ibanjirije Insobanuro" #: macro.c:1684 #, fuzzy, c-format msgid "macro argument \"%s\" would be stringified in traditional C" msgstr "Makoro in C" #: macro.c:1707 #, fuzzy, c-format msgid "invalid hash type %d in cpp_macro_definition" msgstr "Sibyo Ubwoko in" #: pch.c:84 pch.c:332 pch.c:354 pch.c:360 msgid "while writing precompiled header" msgstr "" #: pch.c:467 #, fuzzy, c-format msgid "%s: not used because `%.*s' not defined" msgstr "Akarango OYA" #: pch.c:479 #, c-format msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'" msgstr "" #: pch.c:520 #, fuzzy, c-format msgid "%s: not used because `%s' is defined" msgstr "`%s'Nta narimwe" #: pch.c:533 pch.c:696 msgid "while reading precompiled header" msgstr "" #: traditional.c:745 #, fuzzy, c-format msgid "detected recursion whilst expanding macro \"%s\"" msgstr "Makoro" #: traditional.c:912 #, fuzzy msgid "syntax error in macro parameter list" msgstr "\"%s\"Gicurasi OYA Kugaragara in Makoro Urutonde" #, fuzzy #~ msgid "`%s' attribute directive ignored" #~ msgstr "`%s'Ikiranga" #, fuzzy #~ msgid "wrong number of arguments specified for `%s' attribute" #~ msgstr "Umubare Bya ingingo kugirango Ikiranga" #, fuzzy #~ msgid "`%s' attribute does not apply to types" #~ msgstr "`%s'Ikiranga OYA Gukurikiza Kuri" #, fuzzy #~ msgid "`%s' attribute only applies to function types" #~ msgstr "`%s'Ikiranga Kuri Umumaro" #, fuzzy #~ msgid "`%s' attribute ignored" #~ msgstr "`%s'Ikiranga" #, fuzzy #~ msgid "offset outside bounds of constant string" #~ msgstr "Nta- boneza Hanze Bya Ikurikiranyanyuguti" #, fuzzy #~ msgid "second arg to `__builtin_prefetch' must be a constant" #~ msgstr "ISEGONDA Kuri a" #, fuzzy #~ msgid "invalid second arg to __builtin_prefetch; using zero" #~ msgstr "Sibyo ISEGONDA Kuri ikoresha Zeru" #, fuzzy #~ msgid "third arg to `__builtin_prefetch' must be a constant" #~ msgstr "Kuri a" #, fuzzy #~ msgid "invalid third arg to __builtin_prefetch; using zero" #~ msgstr "Sibyo Kuri ikoresha Zeru" #, fuzzy #~ msgid "__builtin_saveregs not supported by this target" #~ msgstr "_OYA ku iyi Intego" #, fuzzy #~ msgid "argument of `__builtin_args_info' must be constant" #~ msgstr "Bya" #, fuzzy #~ msgid "argument of `__builtin_args_info' out of range" #~ msgstr "Bya Inyuma Bya Urutonde" #, fuzzy #~ msgid "missing argument in `__builtin_args_info'" #~ msgstr "Ibuze in" #, fuzzy #~ msgid "`va_start' used in function with fixed args" #~ msgstr "`in Umumaro Na: BIHAMYE" #, fuzzy #~ msgid "second parameter of `va_start' not last named argument" #~ msgstr "ISEGONDA Bya OYA Iheruka" #, fuzzy #~ msgid "too many arguments to function `va_start'" #~ msgstr "ingingo Kuri Umumaro" #, fuzzy #~ msgid "first argument to `va_arg' not of type `va_list'" #~ msgstr "Itangira Kuri OYA Bya Ubwoko" #, fuzzy #~ msgid "`%s' is promoted to `%s' when passed through `...'" #~ msgstr "`%s'ni Kuri Ryari: Gihinguranya" #, fuzzy #~ msgid "(so you should pass `%s' not `%s' to `va_arg')" #~ msgstr "(OYA Kuri" #, fuzzy #~ msgid "invalid arg to `__builtin_frame_address'" #~ msgstr "Sibyo Kuri" #, fuzzy #~ msgid "invalid arg to `__builtin_return_address'" #~ msgstr "Sibyo Kuri" #, fuzzy #~ msgid "unsupported arg to `__builtin_frame_address'" #~ msgstr "Kuri" #, fuzzy #~ msgid "unsupported arg to `__builtin_return_address'" #~ msgstr "Kuri" #, fuzzy #~ msgid "second arg to `__builtin_expect' must be a constant" #~ msgstr "ISEGONDA Kuri a" #, fuzzy #~ msgid "__builtin_longjmp second argument must be 1" #~ msgstr "_ISEGONDA 1." #, fuzzy #~ msgid "built-in function `%s' not currently supported" #~ msgstr "in Umumaro OYA" #, fuzzy #~ msgid "target format does not support infinity" #~ msgstr "Intego Imiterere OYA Gushigikira Bidashira" #, fuzzy #~ msgid "`%s' is not defined outside of function scope" #~ msgstr "`%s'ni OYA Hanze Bya Umumaro Ingano:" #, fuzzy #~ msgid "string length `%d' is greater than the length `%d' ISO C%d compilers are required to support" #~ msgstr "Ikurikiranyanyuguti Uburebure ni Biruta i Uburebure C Bya ngombwa Kuri Gushigikira" #, fuzzy #~ msgid "concatenation of string literals with __FUNCTION__ is deprecated" #~ msgstr "Bya Ikurikiranyanyuguti Na: ni Bitemewe." #, fuzzy #~ msgid "overflow in constant expression" #~ msgstr "Byarenze urugero in imvugo" #, fuzzy #~ msgid "integer overflow in expression" #~ msgstr "Umubare wuzuye Byarenze urugero in imvugo" #, fuzzy #~ msgid "floating point overflow in expression" #~ msgstr "Bihindagurika Akadomo Byarenze urugero in imvugo" #, fuzzy #~ msgid "vector overflow in expression" #~ msgstr "Byarenze urugero in imvugo" #, fuzzy #~ msgid "large integer implicitly truncated to unsigned type" #~ msgstr "Binini Umubare wuzuye Kuri Bitashizweho umukono Ubwoko" #, fuzzy #~ msgid "negative integer implicitly converted to unsigned type" #~ msgstr "Umubare wuzuye Kuri Bitashizweho umukono Ubwoko" #, fuzzy #~ msgid "overflow in implicit constant conversion" #~ msgstr "Byarenze urugero in Ihindurangero" #, fuzzy #~ msgid "operation on `%s' may be undefined" #~ msgstr "ku Gicurasi kidasobanuye" #, fuzzy #~ msgid "expression statement has incomplete type" #~ msgstr "imvugo Inyandiko Ubwoko" #, fuzzy #~ msgid "case label does not reduce to an integer constant" #~ msgstr "Akarango OYA Kuri Umubare wuzuye" #, fuzzy #~ msgid "invalid truth-value expression" #~ msgstr "Sibyo Agaciro imvugo" #, fuzzy #~ msgid "invalid operands to binary %s" #~ msgstr "Sibyo Kuri Nyabibiri" #, fuzzy #~ msgid "comparison is always false due to limited range of data type" #~ msgstr "ni Buri gihe SIBYO Kuri Urutonde Bya Ibyatanzwe Ubwoko" #, fuzzy #~ msgid "comparison is always true due to limited range of data type" #~ msgstr "ni Buri gihe NIBYO Kuri Urutonde Bya Ibyatanzwe Ubwoko" #, fuzzy #~ msgid "comparison of unsigned expression >= 0 is always true" #~ msgstr "Bya Bitashizweho umukono imvugo 0 ni Buri gihe NIBYO" #, fuzzy #~ msgid "comparison of unsigned expression < 0 is always false" #~ msgstr "Bya Bitashizweho umukono imvugo 0 ni Buri gihe SIBYO" #, fuzzy #~ msgid "pointer of type `void *' used in arithmetic" #~ msgstr "Mweretsi Bya Ubwoko in" #, fuzzy #~ msgid "pointer to a function used in arithmetic" #~ msgstr "Mweretsi Kuri a Umumaro in" #, fuzzy #~ msgid "pointer to member function used in arithmetic" #~ msgstr "Mweretsi Kuri Umumaro in" #, fuzzy #~ msgid "pointer to a member used in arithmetic" #~ msgstr "Mweretsi Kuri a in" #, fuzzy #~ msgid "struct type value used where scalar is required" #~ msgstr "Ubwoko Agaciro ni Bya ngombwa" #, fuzzy #~ msgid "union type value used where scalar is required" #~ msgstr "Ihuza Ubwoko Agaciro ni Bya ngombwa" #, fuzzy #~ msgid "array type value used where scalar is required" #~ msgstr "Imbonerahamwe Ubwoko Agaciro ni Bya ngombwa" #, fuzzy #~ msgid "suggest parentheses around assignment used as truth value" #~ msgstr "Igenera Nka Agaciro" #, fuzzy #~ msgid "invalid use of `restrict'" #~ msgstr "Sibyo Gukoresha Bya" #, fuzzy #~ msgid "invalid application of `sizeof' to a function type" #~ msgstr "Sibyo Porogaramu Bya Kuri a Umumaro Ubwoko" #, fuzzy #~ msgid "invalid application of `%s' to a void type" #~ msgstr "Sibyo Porogaramu Bya Kuri a Ubwoko" #, fuzzy #~ msgid "invalid application of `%s' to an incomplete type" #~ msgstr "Sibyo Porogaramu Bya Kuri Ubwoko" #, fuzzy #~ msgid "`__alignof' applied to a bit-field" #~ msgstr "`_Byashyizweho Kuri a Umwanya" #, fuzzy #~ msgid "cannot disable built-in function `%s'" #~ msgstr "in Umumaro" #, fuzzy #~ msgid "too few arguments to function `%s'" #~ msgstr "ingingo Kuri Umumaro" #, fuzzy #~ msgid "too many arguments to function `%s'" #~ msgstr "ingingo Kuri Umumaro" #, fuzzy #~ msgid "non-floating-point argument to function `%s'" #~ msgstr "Bihindagurika Akadomo Kuri Umumaro" #, fuzzy #~ msgid "pointers are not permitted as case values" #~ msgstr "OYA Nka Uduciro" #, fuzzy #~ msgid "ISO C++ forbids range expressions in switch statements" #~ msgstr "C Urutonde in Hindura" #, fuzzy #~ msgid "ISO C forbids range expressions in switch statements" #~ msgstr "C Urutonde in Hindura" #, fuzzy #~ msgid "empty range specified" #~ msgstr "ubusa Urutonde" #, fuzzy #~ msgid "duplicate (or overlapping) case value" #~ msgstr "Gusubiramo Cyangwa iyorosa Agaciro" #, fuzzy #~ msgid "this is the first entry overlapping that value" #~ msgstr "iyi ni i Itangira Icyinjijwe iyorosa Agaciro" #, fuzzy #~ msgid "duplicate case value" #~ msgstr "Gusubiramo Agaciro" #, fuzzy #~ msgid "multiple default labels in one switch" #~ msgstr "Igikubo Mburabuzi Uturango... in Hindura" #, fuzzy #~ msgid "this is the first default label" #~ msgstr "iyi ni i Itangira Mburabuzi Akarango" #, fuzzy #~ msgid "ISO C++ forbids taking the address of a label" #~ msgstr "C i Aderesi Bya a Akarango" #, fuzzy #~ msgid "ISO C forbids taking the address of a label" #~ msgstr "C i Aderesi Bya a Akarango" #, fuzzy #~ msgid "declaration of `%s' shadows %s" #~ msgstr "Bya" #, fuzzy #~ msgid "unknown machine mode `%s'" #~ msgstr "Kitazwi Ubwoko" #, fuzzy #~ msgid "no data type for mode `%s'" #~ msgstr "Oya Ibyatanzwe Ubwoko kugirango Ubwoko" #, fuzzy #~ msgid "unable to emulate '%s'" #~ msgstr "Kuri" #, fuzzy #~ msgid "section attribute cannot be specified for local variables" #~ msgstr "Icyiciro Ikiranga kugirango Ibihinduka" #, fuzzy #~ msgid "section of `%s' conflicts with previous declaration" #~ msgstr "Icyiciro Bya Na: Ibanjirije" #, fuzzy #~ msgid "section attribute not allowed for `%s'" #~ msgstr "Icyiciro Ikiranga OYA kugirango" #, fuzzy #~ msgid "section attributes are not supported for this target" #~ msgstr "Icyiciro Ibiranga OYA kugirango iyi Intego" #, fuzzy #~ msgid "requested alignment is not a constant" #~ msgstr "Itunganya ni OYA a" #, fuzzy #~ msgid "requested alignment is not a power of 2" #~ msgstr "Itunganya ni OYA a UMWIKUBE Bya 2." #, fuzzy #~ msgid "requested alignment is too large" #~ msgstr "Itunganya ni Binini" #, fuzzy #~ msgid "alignment may not be specified for `%s'" #~ msgstr "Itunganya Gicurasi OYA kugirango" #, fuzzy #~ msgid "`%s' defined both normally and as an alias" #~ msgstr "`%s'Byombi Na Nka Irihimbano" #, fuzzy #~ msgid "alias arg not a string" #~ msgstr "Irihimbano OYA a Ikurikiranyanyuguti" #, fuzzy #~ msgid "visibility arg not a string" #~ msgstr "Ukugaragara OYA a Ikurikiranyanyuguti" #, fuzzy #~ msgid "visibility arg must be one of \"default\", \"hidden\", \"protected\" or \"internal\"" #~ msgstr "Ukugaragara Bya Mburabuzi gihishwe Birinzwe Cyangwa By'imbere" #, fuzzy #~ msgid "tls_model arg not a string" #~ msgstr "OYA a Ikurikiranyanyuguti" #, fuzzy #~ msgid "tls_model arg must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"" #~ msgstr "Bya Cyangwa" #, fuzzy #~ msgid "`%s' attribute applies only to functions" #~ msgstr "`%s'Ikiranga Kuri Imimaro" #, fuzzy #~ msgid "can't set `%s' attribute after definition" #~ msgstr "Gushyiraho Ikiranga Nyuma Insobanuro" #, fuzzy #~ msgid "`%s' attribute ignored for `%s'" #~ msgstr "`%s'Ikiranga kugirango" #, fuzzy #~ msgid "invalid vector type for attribute `%s'" #~ msgstr "Sibyo Ubwoko kugirango Ikiranga" #, fuzzy #~ msgid "no vector mode with the size and type specified could be found" #~ msgstr "Oya Ubwoko Na: i Ingano Na Ubwoko Byabonetse" #, fuzzy #~ msgid "nonnull attribute without arguments on a non-prototype" #~ msgstr "Ikiranga ingingo ku a" #, fuzzy #~ msgid "nonnull argument has invalid operand number (arg %lu)" #~ msgstr "Sibyo Umubare" #, fuzzy #~ msgid "nonnull argument with out-of-range operand number (arg %lu, operand %lu)" #~ msgstr "Na: Inyuma Bya Urutonde Umubare" #, fuzzy #~ msgid "nonnull argument references non-pointer operand (arg %lu, operand %lu)" #~ msgstr "Indango Mweretsi" #, fuzzy #~ msgid "null argument where non-null required (arg %lu)" #~ msgstr "NTAGIHARI NTAGIHARI Bya ngombwa" #, fuzzy #~ msgid "void value not ignored as it ought to be" #~ msgstr "Agaciro OYA Nka Kuri" #, fuzzy #~ msgid "conversion to non-scalar type requested" #~ msgstr "Ihindurangero Kuri Ubwoko" #, fuzzy #~ msgid "array `%s' assumed to have one element" #~ msgstr "Imbonerahamwe Kuri Ikigize:" #, fuzzy #~ msgid "`struct %s' incomplete in scope ending here" #~ msgstr "`in Ingano:" #, fuzzy #~ msgid "`union %s' incomplete in scope ending here" #~ msgstr "`Ihuza in Ingano:" #, fuzzy #~ msgid "`enum %s' incomplete in scope ending here" #~ msgstr "`in Ingano:" #, fuzzy #~ msgid "label `%s' defined but not used" #~ msgstr "Akarango OYA" #, fuzzy #~ msgid "function `%s' redeclared as inline" #~ msgstr "Umumaro Nka Mumurongo" #, fuzzy #~ msgid "previous declaration of function `%s' with attribute noinline" #~ msgstr "Ibanjirije Bya Umumaro Na: Ikiranga" #, fuzzy #~ msgid "function `%s' redeclared with attribute noinline" #~ msgstr "Umumaro Na: Ikiranga" #, fuzzy #~ msgid "previous declaration of function `%s' was inline" #~ msgstr "Ibanjirije Bya Umumaro Mumurongo" #, fuzzy #~ msgid "shadowing built-in function `%s'" #~ msgstr "Ishyiraho ry'igicucu in Umumaro" #, fuzzy #~ msgid "shadowing library function `%s'" #~ msgstr "Ishyiraho ry'igicucu Isomero Umumaro" #, fuzzy #~ msgid "library function `%s' declared as non-function" #~ msgstr "Isomero Umumaro Nka Umumaro" #, fuzzy #~ msgid "built-in function `%s' declared as non-function" #~ msgstr "in Umumaro Nka Umumaro" #, fuzzy #~ msgid "`%s' redeclared as different kind of symbol" #~ msgstr "`%s'Nka Bya IKIMENYETSO" #, fuzzy #~ msgid "previous declaration of `%s'" #~ msgstr "Ibanjirije Bya" #, fuzzy #~ msgid "conflicting types for built-in function `%s'" #~ msgstr "kugirango in Umumaro" #, fuzzy #~ msgid "conflicting types for `%s'" #~ msgstr "kugirango" #, fuzzy #~ msgid "a parameter list with an ellipsis can't match an empty parameter name list declaration" #~ msgstr "a Urutonde Na: BIHUYE ubusa Izina: Urutonde" #, fuzzy #~ msgid "an argument type that has a default promotion can't match an empty parameter name list declaration" #~ msgstr "Ubwoko a Mburabuzi BIHUYE ubusa Izina: Urutonde" #, fuzzy #~ msgid "thread-local declaration of `%s' follows non thread-local declaration" #~ msgstr "Urudodo Bya Urudodo" #, fuzzy #~ msgid "non thread-local declaration of `%s' follows thread-local declaration" #~ msgstr "Urudodo Bya Urudodo" #, fuzzy #~ msgid "redefinition of `%s'" #~ msgstr "Bya" #, fuzzy #~ msgid "redeclaration of `%s'" #~ msgstr "Bya" #, fuzzy #~ msgid "conflicting declarations of `%s'" #~ msgstr "Bya" #, fuzzy #~ msgid "prototype for `%s' follows" #~ msgstr "kugirango" #, fuzzy #~ msgid "non-prototype definition here" #~ msgstr "Insobanuro" #, fuzzy #~ msgid "prototype for `%s' follows and number of arguments doesn't match" #~ msgstr "kugirango Na Umubare Bya ingingo BIHUYE" #, fuzzy #~ msgid "prototype for `%s' follows and argument %d doesn't match" #~ msgstr "kugirango Na BIHUYE" #, fuzzy #~ msgid "`%s' declared inline after being called" #~ msgstr "`%s'Mumurongo Nyuma" #, fuzzy #~ msgid "`%s' declared inline after its definition" #~ msgstr "`%s'Mumurongo Nyuma Insobanuro" #, fuzzy #~ msgid "static declaration for `%s' follows non-static" #~ msgstr "kugirango" #, fuzzy #~ msgid "non-static declaration for `%s' follows static" #~ msgstr "kugirango" #, fuzzy #~ msgid "const declaration for `%s' follows non-const" #~ msgstr "kugirango" #, fuzzy #~ msgid "type qualifiers for `%s' conflict with previous decl" #~ msgstr "Ubwoko kugirango Na: Ibanjirije" #, fuzzy #~ msgid "redundant redeclaration of `%s' in same scope" #~ msgstr "Bya in Ingano:" #, fuzzy #~ msgid "declaration of `%s' shadows a parameter" #~ msgstr "Bya a" #, fuzzy #~ msgid "declaration of `%s' shadows a symbol from the parameter list" #~ msgstr "Bya a IKIMENYETSO Bivuye i Urutonde" #, fuzzy #~ msgid "a parameter" #~ msgstr "a" #, fuzzy #~ msgid "a previous local" #~ msgstr "a Ibanjirije" #, fuzzy #~ msgid "a global declaration" #~ msgstr "a" #, fuzzy #~ msgid "nested extern declaration of `%s'" #~ msgstr "Bya" #, fuzzy #~ msgid "`%s' used prior to declaration" #~ msgstr "`%s'Kuri" #, fuzzy #~ msgid "`%s' was declared implicitly `extern' and later `static'" #~ msgstr "`%s'Na" #, fuzzy #~ msgid "type mismatch with previous external decl" #~ msgstr "Ubwoko Na: Ibanjirije external" #, fuzzy #~ msgid "previous external decl of `%s'" #~ msgstr "Ibanjirije external Bya" #, fuzzy #~ msgid "type mismatch with previous implicit declaration" #~ msgstr "Ubwoko Na: Ibanjirije" #, fuzzy #~ msgid "previous implicit declaration of `%s'" #~ msgstr "Ibanjirije Bya" #, fuzzy #~ msgid "`%s' was previously implicitly declared to return `int'" #~ msgstr "`%s'Kuri Garuka" #, fuzzy #~ msgid "`%s' was declared `extern' and later `static'" #~ msgstr "`%s'Na" #, fuzzy #~ msgid "extern declaration of `%s' doesn't match global one" #~ msgstr "Bya BIHUYE" #, fuzzy #~ msgid "`%s' locally external but globally static" #~ msgstr "`%s'external" #, fuzzy #~ msgid "function `%s' was previously declared within a block" #~ msgstr "Umumaro muri a Funga" #, fuzzy #~ msgid "implicit declaration of function `%s'" #~ msgstr "Bya Umumaro" #, fuzzy #~ msgid "label %s referenced outside of any function" #~ msgstr "Akarango Hanze Bya Umumaro" #, fuzzy #~ msgid "duplicate label declaration `%s'" #~ msgstr "Gusubiramo Akarango" #, fuzzy #~ msgid "this is a previous declaration" #~ msgstr "iyi ni a Ibanjirije" #, fuzzy #~ msgid "unnamed struct/union that defines no instances" #~ msgstr "Kitiswe Ihuza Oya Ingero" #, fuzzy #~ msgid "useless keyword or type name in empty declaration" #~ msgstr "Ijambo- banze Cyangwa Ubwoko Izina: in ubusa" #, fuzzy #~ msgid "two types specified in one empty declaration" #~ msgstr "in ubusa" #, fuzzy #~ msgid "empty declaration" #~ msgstr "ubusa" #, fuzzy #~ msgid "ISO C90 does not support `static' or type qualifiers in parameter array declarators" #~ msgstr "OYA Gushigikira Cyangwa Ubwoko in Imbonerahamwe" #, fuzzy #~ msgid "ISO C90 does not support `[*]' array declarators" #~ msgstr "OYA Gushigikira Imbonerahamwe" #, fuzzy #~ msgid "GCC does not yet properly implement `[*]' array declarators" #~ msgstr "OYA Imbonerahamwe" #, fuzzy #~ msgid "static or type qualifiers in abstract declarator" #~ msgstr "Cyangwa Ubwoko in Incamake" #, fuzzy #~ msgid "`%s' is usually a function" #~ msgstr "`%s'ni a Umumaro" #, fuzzy #~ msgid "typedef `%s' is initialized (use __typeof__ instead)" #~ msgstr "ni Gukoresha" #, fuzzy #~ msgid "function `%s' is initialized like a variable" #~ msgstr "Umumaro ni nka a IMPINDURAGACIRO" #, fuzzy #~ msgid "parameter `%s' is initialized" #~ msgstr "ni" #, fuzzy #~ msgid "variable-sized object may not be initialized" #~ msgstr "IMPINDURAGACIRO Igikoresho Gicurasi OYA" #, fuzzy #~ msgid "variable `%s' has initializer but incomplete type" #~ msgstr "IMPINDURAGACIRO Ubwoko" #, fuzzy #~ msgid "elements of array `%s' have incomplete type" #~ msgstr "Ibintu Bya Imbonerahamwe Ubwoko" #, fuzzy #~ msgid "declaration of `%s' has `extern' and is initialized" #~ msgstr "Bya Na ni" #, fuzzy #~ msgid "inline function `%s' given attribute noinline" #~ msgstr "Mumurongo Umumaro Ikiranga" #, fuzzy #~ msgid "initializer fails to determine size of `%s'" #~ msgstr "Kuri Ingano Bya" #, fuzzy #~ msgid "array size missing in `%s'" #~ msgstr "Imbonerahamwe Ingano Ibuze in" #, fuzzy #~ msgid "zero or negative size array `%s'" #~ msgstr "Zeru Cyangwa Ingano Imbonerahamwe" #, fuzzy #~ msgid "storage size of `%s' isn't known" #~ msgstr "Ingano Bya si" #, fuzzy #~ msgid "storage size of `%s' isn't constant" #~ msgstr "Ingano Bya si" #, fuzzy #~ msgid "ignoring asm-specifier for non-static local variable `%s'" #~ msgstr "kugirango IMPINDURAGACIRO" #, fuzzy #~ msgid "ISO C forbids parameter `%s' shadowing typedef" #~ msgstr "C Ishyiraho ry'igicucu" #, fuzzy #~ msgid "`long long long' is too long for GCC" #~ msgstr "`ni kugirango" #, fuzzy #~ msgid "ISO C90 does not support `long long'" #~ msgstr "OYA Gushigikira" #, fuzzy #~ msgid "duplicate `%s'" #~ msgstr "Gusubiramo" #, fuzzy #~ msgid "`__thread' before `extern'" #~ msgstr "`_Mbere" #, fuzzy #~ msgid "`__thread' before `static'" #~ msgstr "`_Mbere" #, fuzzy #~ msgid "two or more data types in declaration of `%s'" #~ msgstr "Cyangwa Birenzeho Ibyatanzwe in Bya" #, fuzzy #~ msgid "`%s' fails to be a typedef or built in type" #~ msgstr "`%s'Kuri a Cyangwa in Ubwoko" #, fuzzy #~ msgid "type defaults to `int' in declaration of `%s'" #~ msgstr "Ubwoko Kuri in Bya" #, fuzzy #~ msgid "both long and short specified for `%s'" #~ msgstr "Byombi Na kugirango" #, fuzzy #~ msgid "long or short specified with char for `%s'" #~ msgstr "Cyangwa Na: INYUGUTI kugirango" #, fuzzy #~ msgid "long or short specified with floating type for `%s'" #~ msgstr "Cyangwa Na: Bihindagurika Ubwoko kugirango" #, fuzzy #~ msgid "the only valid combination is `long double'" #~ msgstr "i Byemewe Ivanga ni" #, fuzzy #~ msgid "both signed and unsigned specified for `%s'" #~ msgstr "Byombi Na Bitashizweho umukono kugirango" #, fuzzy #~ msgid "long, short, signed or unsigned invalid for `%s'" #~ msgstr "Cyangwa Bitashizweho umukono Sibyo kugirango" #, fuzzy #~ msgid "long, short, signed or unsigned used invalidly for `%s'" #~ msgstr "Cyangwa Bitashizweho umukono kugirango" #, fuzzy #~ msgid "complex invalid for `%s'" #~ msgstr "ITSINDA RY'IMIBARE C Sibyo kugirango" #, fuzzy #~ msgid "ISO C90 does not support complex types" #~ msgstr "OYA Gushigikira ITSINDA RY'IMIBARE C" #, fuzzy #~ msgid "ISO C does not support plain `complex' meaning `double complex'" #~ msgstr "C OYA Gushigikira Byuzuye Igisobanuro MAHARAKUBIRI" #, fuzzy #~ msgid "ISO C does not support complex integer types" #~ msgstr "C OYA Gushigikira ITSINDA RY'IMIBARE C Umubare wuzuye" #, fuzzy #~ msgid "duplicate `const'" #~ msgstr "Gusubiramo" #, fuzzy #~ msgid "duplicate `restrict'" #~ msgstr "Gusubiramo" #, fuzzy #~ msgid "duplicate `volatile'" #~ msgstr "Gusubiramo" #, fuzzy #~ msgid "multiple storage classes in declaration of `%s'" #~ msgstr "Igikubo Inzego in Bya" #, fuzzy #~ msgid "function definition declared `auto'" #~ msgstr "Umumaro Insobanuro" #, fuzzy #~ msgid "function definition declared `register'" #~ msgstr "Umumaro Insobanuro" #, fuzzy #~ msgid "function definition declared `typedef'" #~ msgstr "Umumaro Insobanuro" #, fuzzy #~ msgid "function definition declared `__thread'" #~ msgstr "Umumaro Insobanuro" #, fuzzy #~ msgid "storage class specified for structure field `%s'" #~ msgstr "ishuri kugirango Imiterere Umwanya" #, fuzzy #~ msgid "storage class specified for parameter `%s'" #~ msgstr "ishuri kugirango" #, fuzzy #~ msgid "storage class specified for typename" #~ msgstr "ishuri kugirango" #, fuzzy #~ msgid "`%s' initialized and declared `extern'" #~ msgstr "`%s'Na" #, fuzzy #~ msgid "`%s' has both `extern' and initializer" #~ msgstr "`%s'Byombi Na" #, fuzzy #~ msgid "top-level declaration of `%s' specifies `auto'" #~ msgstr "Hejuru: urwego Bya" #, fuzzy #~ msgid "nested function `%s' declared `extern'" #~ msgstr "Umumaro" #, fuzzy #~ msgid "function-scope `%s' implicitly auto and declared `__thread'" #~ msgstr "Umumaro Ingano: Ikiyega Na" #, fuzzy #~ msgid "static or type qualifiers in non-parameter array declarator" #~ msgstr "Cyangwa Ubwoko in Imbonerahamwe" #, fuzzy #~ msgid "declaration of `%s' as array of voids" #~ msgstr "Bya Nka Imbonerahamwe Bya" #, fuzzy #~ msgid "declaration of `%s' as array of functions" #~ msgstr "Bya Nka Imbonerahamwe Bya Imimaro" #, fuzzy #~ msgid "invalid use of structure with flexible array member" #~ msgstr "Sibyo Gukoresha Bya Imiterere Na: Imbonerahamwe" #, fuzzy #~ msgid "size of array `%s' has non-integer type" #~ msgstr "Ingano Bya Imbonerahamwe Umubare wuzuye Ubwoko" #, fuzzy #~ msgid "ISO C forbids zero-size array `%s'" #~ msgstr "C Zeru Ingano Imbonerahamwe" #, fuzzy #~ msgid "size of array `%s' is negative" #~ msgstr "Ingano Bya Imbonerahamwe ni" #, fuzzy #~ msgid "ISO C90 forbids array `%s' whose size can't be evaluated" #~ msgstr "Imbonerahamwe bya Ingano" #, fuzzy #~ msgid "ISO C90 forbids variable-size array `%s'" #~ msgstr "IMPINDURAGACIRO Ingano Imbonerahamwe" #, fuzzy #~ msgid "size of array `%s' is too large" #~ msgstr "Ingano Bya Imbonerahamwe ni Binini" #, fuzzy #~ msgid "ISO C90 does not support flexible array members" #~ msgstr "OYA Gushigikira Imbonerahamwe" #, fuzzy #~ msgid "array type has incomplete element type" #~ msgstr "Imbonerahamwe Ubwoko Ikigize: Ubwoko" #, fuzzy #~ msgid "ISO C forbids const or volatile function types" #~ msgstr "C Cyangwa Umumaro" #, fuzzy #~ msgid "`%s' declared as function returning a function" #~ msgstr "`%s'Nka Umumaro a Umumaro" #, fuzzy #~ msgid "`%s' declared as function returning an array" #~ msgstr "`%s'Nka Umumaro Imbonerahamwe" #, fuzzy #~ msgid "ISO C forbids qualified void function return type" #~ msgstr "C Umumaro Garuka Ubwoko" #, fuzzy #~ msgid "type qualifiers ignored on function return type" #~ msgstr "Ubwoko ku Umumaro Garuka Ubwoko" #, fuzzy #~ msgid "ISO C forbids qualified function types" #~ msgstr "C Umumaro" #, fuzzy #~ msgid "invalid type modifier within pointer declarator" #~ msgstr "Sibyo Ubwoko muri Mweretsi" #, fuzzy #~ msgid "variable or field `%s' declared void" #~ msgstr "IMPINDURAGACIRO Cyangwa Umwanya" #, fuzzy #~ msgid "attributes in parameter array declarator ignored" #~ msgstr "Ibiranga in Imbonerahamwe" #, fuzzy #~ msgid "invalid type modifier within array declarator" #~ msgstr "Sibyo Ubwoko muri Imbonerahamwe" #, fuzzy #~ msgid "field `%s' declared as a function" #~ msgstr "Umwanya Nka a Umumaro" #, fuzzy #~ msgid "field `%s' has incomplete type" #~ msgstr "Umwanya Ubwoko" #, fuzzy #~ msgid "invalid storage class for function `%s'" #~ msgstr "Sibyo ishuri kugirango Umumaro" #, fuzzy #~ msgid "`noreturn' function returns non-void value" #~ msgstr "`Umumaro Agaciro" #, fuzzy #~ msgid "cannot inline function `main'" #~ msgstr "Mumurongo Umumaro" #, fuzzy #~ msgid "variable `%s' declared `inline'" #~ msgstr "IMPINDURAGACIRO" #, fuzzy #~ msgid "thread-local storage not supported for this target" #~ msgstr "Urudodo OYA kugirango iyi Intego" #, fuzzy #~ msgid "function declaration isn't a prototype" #~ msgstr "Umumaro si a" #, fuzzy #~ msgid "parameter names (without types) in function declaration" #~ msgstr "Amazina in Umumaro" #, fuzzy #~ msgid "parameter `%s' has incomplete type" #~ msgstr "Ubwoko" #, fuzzy #~ msgid "parameter has incomplete type" #~ msgstr "Ubwoko" #, fuzzy #~ msgid "parameter `%s' points to incomplete type" #~ msgstr "Utudomo Kuri Ubwoko" #, fuzzy #~ msgid "parameter points to incomplete type" #~ msgstr "Utudomo Kuri Ubwoko" #, fuzzy #~ msgid "parameter `%s' has just a forward declaration" #~ msgstr "a Imbere" #, fuzzy #~ msgid "`void' in parameter list must be the entire list" #~ msgstr "`in Urutonde i Urutonde" #, fuzzy #~ msgid "`struct %s' declared inside parameter list" #~ msgstr "`Mo Imbere Urutonde" #, fuzzy #~ msgid "`union %s' declared inside parameter list" #~ msgstr "`Ihuza Mo Imbere Urutonde" #, fuzzy #~ msgid "`enum %s' declared inside parameter list" #~ msgstr "`Mo Imbere Urutonde" #, fuzzy #~ msgid "anonymous struct declared inside parameter list" #~ msgstr "Mo Imbere Urutonde" #, fuzzy #~ msgid "anonymous union declared inside parameter list" #~ msgstr "Ihuza Mo Imbere Urutonde" #, fuzzy #~ msgid "anonymous enum declared inside parameter list" #~ msgstr "Mo Imbere Urutonde" #, fuzzy #~ msgid "its scope is only this definition or declaration, which is probably not what you want" #~ msgstr "Ingano: ni iyi Insobanuro Cyangwa ni OYA" #, fuzzy #~ msgid "redefinition of `union %s'" #~ msgstr "Bya Ihuza" #, fuzzy #~ msgid "redefinition of `struct %s'" #~ msgstr "Bya" #, fuzzy #~ msgid "declaration does not declare anything" #~ msgstr "OYA" #, fuzzy #~ msgid "%s defined inside parms" #~ msgstr "%sMo Imbere" # starmath/source\smres.src:RID_TOOLBOXWINDOW.3.RID_XUNIONY.text #, fuzzy #~ msgid "union" #~ msgstr "Ihuza" # sc/source\ui\formdlg\formdlgs.src:RID_SCTAB_STRUCT.FT_STRUCT.text #, fuzzy #~ msgid "structure" #~ msgstr "Imiterere" #, fuzzy #~ msgid "%s has no %s" #~ msgstr "%sOya" #, fuzzy #~ msgid "nested redefinition of `%s'" #~ msgstr "Bya" #, fuzzy #~ msgid "bit-field `%s' width not an integer constant" #~ msgstr "Umwanya Ubugari OYA Umubare wuzuye" #, fuzzy #~ msgid "bit-field `%s' has invalid type" #~ msgstr "Umwanya Sibyo Ubwoko" #, fuzzy #~ msgid "bit-field `%s' type invalid in ISO C" #~ msgstr "Umwanya Ubwoko Sibyo in C" #, fuzzy #~ msgid "negative width in bit-field `%s'" #~ msgstr "Ubugari in Umwanya" #, fuzzy #~ msgid "width of `%s' exceeds its type" #~ msgstr "Ubugari Bya Ubwoko" #, fuzzy #~ msgid "zero width for bit-field `%s'" #~ msgstr "Zeru Ubugari kugirango Umwanya" #, fuzzy #~ msgid "`%s' is narrower than values of its type" #~ msgstr "`%s'ni Uduciro Bya Ubwoko" #, fuzzy #~ msgid "flexible array member in union" #~ msgstr "Imbonerahamwe in Ihuza" #, fuzzy #~ msgid "flexible array member not at end of struct" #~ msgstr "Imbonerahamwe OYA ku Impera Bya" #, fuzzy #~ msgid "flexible array member in otherwise empty struct" #~ msgstr "Imbonerahamwe in ubusa" #, fuzzy #~ msgid "duplicate member `%s'" #~ msgstr "Gusubiramo" #, fuzzy #~ msgid "union cannot be made transparent" #~ msgstr "Ihuza Bibonerana" #, fuzzy #~ msgid "redeclaration of `enum %s'" #~ msgstr "Bya" #, fuzzy #~ msgid "enum defined inside parms" #~ msgstr "Mo Imbere" #, fuzzy #~ msgid "enumeration values exceed range of largest integer" #~ msgstr "Uduciro Urutonde Bya Kinini Umubare wuzuye" #, fuzzy #~ msgid "enumerator value for `%s' not integer constant" #~ msgstr "Agaciro kugirango OYA Umubare wuzuye" #, fuzzy #~ msgid "overflow in enumeration values" #~ msgstr "Byarenze urugero in Uduciro" #, fuzzy #~ msgid "ISO C restricts enumerator values to range of `int'" #~ msgstr "C Uduciro Kuri Urutonde Bya" #, fuzzy #~ msgid "return type is an incomplete type" #~ msgstr "Garuka Ubwoko ni Ubwoko" #, fuzzy #~ msgid "return type defaults to `int'" #~ msgstr "Garuka Ubwoko Kuri" #, fuzzy #~ msgid "no previous prototype for `%s'" #~ msgstr "Oya Ibanjirije kugirango" #, fuzzy #~ msgid "`%s' was used with no prototype before its definition" #~ msgstr "`%s'Na: Oya Mbere Insobanuro" #, fuzzy #~ msgid "no previous declaration for `%s'" #~ msgstr "Oya Ibanjirije kugirango" #, fuzzy #~ msgid "`%s' was used with no declaration before its definition" #~ msgstr "`%s'Na: Oya Mbere Insobanuro" #, fuzzy #~ msgid "return type of `%s' is not `int'" #~ msgstr "Garuka Ubwoko Bya ni OYA" #, fuzzy #~ msgid "first argument of `%s' should be `int'" #~ msgstr "Itangira Bya" #, fuzzy #~ msgid "second argument of `%s' should be `char **'" #~ msgstr "ISEGONDA Bya INYUGUTI" #, fuzzy #~ msgid "third argument of `%s' should probably be `char **'" #~ msgstr "Bya INYUGUTI" #, fuzzy #~ msgid "`%s' takes only zero or two arguments" #~ msgstr "`%s'Zeru Cyangwa ingingo" #, fuzzy #~ msgid "`%s' is normally a non-static function" #~ msgstr "`%s'ni a Umumaro" #, fuzzy #~ msgid "parm types given both in parmlist and separately" #~ msgstr "Byombi in Na" #, fuzzy #~ msgid "parameter name omitted" #~ msgstr "Izina:" #, fuzzy #~ msgid "parameter name missing from parameter list" #~ msgstr "Izina: Ibuze Bivuye Urutonde" #, fuzzy #~ msgid "multiple parameters named `%s'" #~ msgstr "Igikubo Ibigenga" #, fuzzy #~ msgid "type of `%s' defaults to `int'" #~ msgstr "Ubwoko Bya Kuri" #, fuzzy #~ msgid "declaration for parameter `%s' but no such parameter" #~ msgstr "kugirango Oya" #, fuzzy #~ msgid "number of arguments doesn't match prototype" #~ msgstr "Umubare Bya ingingo BIHUYE" #, fuzzy #~ msgid "promoted argument `%s' doesn't match prototype" #~ msgstr "BIHUYE" #, fuzzy #~ msgid "argument `%s' doesn't match prototype" #~ msgstr "BIHUYE" #, fuzzy #~ msgid "no return statement in function returning non-void" #~ msgstr "Oya Garuka Inyandiko in Umumaro" #, fuzzy #~ msgid "this function may return with or without a value" #~ msgstr "iyi Umumaro Gicurasi Garuka Na: Cyangwa a Agaciro" #, fuzzy #~ msgid "size of return value of `%s' is %u bytes" #~ msgstr "Ingano Bya Garuka Agaciro Bya ni Bayite" #, fuzzy #~ msgid "size of return value of `%s' is larger than %d bytes" #~ msgstr "Ingano Bya Garuka Agaciro Bya ni Kinini Bayite" #, fuzzy #~ msgid "`for' loop initial declaration used outside C99 mode" #~ msgstr "`Hanze Ubwoko" #, fuzzy #~ msgid "`struct %s' declared in `for' loop initial declaration" #~ msgstr "`in" #, fuzzy #~ msgid "`union %s' declared in `for' loop initial declaration" #~ msgstr "`Ihuza in" #, fuzzy #~ msgid "`enum %s' declared in `for' loop initial declaration" #~ msgstr "`in" #, fuzzy #~ msgid "declaration of non-variable `%s' in `for' loop initial declaration" #~ msgstr "Bya IMPINDURAGACIRO in" #, fuzzy #~ msgid "declaration of static variable `%s' in `for' loop initial declaration" #~ msgstr "Bya IMPINDURAGACIRO in" #, fuzzy #~ msgid "declaration of `extern' variable `%s' in `for' loop initial declaration" #~ msgstr "Bya IMPINDURAGACIRO in" #, fuzzy #~ msgid "format string arg not a string type" #~ msgstr "Imiterere Ikurikiranyanyuguti OYA a Ikurikiranyanyuguti Ubwoko" #, fuzzy #~ msgid "args to be formatted is not '...'" #~ msgstr "Kuri Byahanaguwe ni OYA" #, fuzzy #~ msgid "strftime formats cannot format arguments" #~ msgstr "Imiterere Imiterere ingingo" #, fuzzy #~ msgid "format string has invalid operand number" #~ msgstr "Imiterere Ikurikiranyanyuguti Sibyo Umubare" #, fuzzy #~ msgid "function does not return string type" #~ msgstr "Umumaro OYA Garuka Ikurikiranyanyuguti Ubwoko" #, fuzzy #~ msgid "unrecognized format specifier" #~ msgstr "Imiterere" #, fuzzy #~ msgid "`%s' is an unrecognized format function type" #~ msgstr "`%s'ni Imiterere Umumaro Ubwoko" #, fuzzy #~ msgid "format string arg follows the args to be formatted" #~ msgstr "Imiterere Ikurikiranyanyuguti i Kuri Byahanaguwe" #, fuzzy #~ msgid "` ' flag" #~ msgstr "`'Ibendera" #, fuzzy #~ msgid "the ` ' printf flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "`+' flag" #~ msgstr "`+'Ibendera" #, fuzzy #~ msgid "the `+' printf flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "`#' flag" #~ msgstr "`#'Ibendera" #, fuzzy #~ msgid "the `#' printf flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "`0' flag" #~ msgstr "`Ibendera" #, fuzzy #~ msgid "the `0' printf flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "`-' flag" #~ msgstr "`-'Ibendera" #, fuzzy #~ msgid "the `-' printf flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "`'' flag" #~ msgstr "`''Ibendera" #, fuzzy #~ msgid "the `'' printf flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "`I' flag" #~ msgstr "`Ibendera" #, fuzzy #~ msgid "the `I' printf flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "field width" #~ msgstr "Umwanya Ubugari" #, fuzzy #~ msgid "field width in printf format" #~ msgstr "Umwanya Ubugari in Imiterere" #, fuzzy #~ msgid "precision in printf format" #~ msgstr "in Imiterere" #, fuzzy #~ msgid "length modifier" #~ msgstr "Uburebure" #, fuzzy #~ msgid "length modifier in printf format" #~ msgstr "Uburebure in Imiterere" #, fuzzy #~ msgid "assignment suppression" #~ msgstr "Igenera" #, fuzzy #~ msgid "the assignment suppression scanf feature" #~ msgstr "i Igenera" #, fuzzy #~ msgid "`a' flag" #~ msgstr "`Ibendera" #, fuzzy #~ msgid "the `a' scanf flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "field width in scanf format" #~ msgstr "Umwanya Ubugari in Imiterere" #, fuzzy #~ msgid "length modifier in scanf format" #~ msgstr "Uburebure in Imiterere" #, fuzzy #~ msgid "the `'' scanf flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "the `I' scanf flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "`_' flag" #~ msgstr "`_'Ibendera" #, fuzzy #~ msgid "the `_' strftime flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "the `-' strftime flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "the `0' strftime flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "`^' flag" #~ msgstr "`^'Ibendera" #, fuzzy #~ msgid "the `^' strftime flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "the `#' strftime flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "field width in strftime format" #~ msgstr "Umwanya Ubugari in Imiterere" #, fuzzy #~ msgid "the `E' strftime modifier" #~ msgstr "i" #, fuzzy #~ msgid "the `O' strftime modifier" #~ msgstr "i" #, fuzzy #~ msgid "the `O' modifier" #~ msgstr "i" # svx/source\dialog\tabstpge.src:RID_SVXPAGE_TABULATOR.FL_FILLCHAR.text #, fuzzy #~ msgid "fill character" #~ msgstr "Kuzuza inyuguti" #, fuzzy #~ msgid "fill character in strfmon format" #~ msgstr "Kuzuza Inyuguti in Imiterere" #, fuzzy #~ msgid "the `^' strfmon flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "the `+' strfmon flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "`(' flag" #~ msgstr "`('Ibendera" #, fuzzy #~ msgid "the `(' strfmon flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "`!' flag" #~ msgstr "`!'Ibendera" #, fuzzy #~ msgid "the `!' strfmon flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "the `-' strfmon flag" #~ msgstr "i Ibendera" #, fuzzy #~ msgid "field width in strfmon format" #~ msgstr "Umwanya Ubugari in Imiterere" #, fuzzy #~ msgid "left precision" #~ msgstr "Ibumoso:" #, fuzzy #~ msgid "left precision in strfmon format" #~ msgstr "Ibumoso: in Imiterere" #, fuzzy #~ msgid "right precision" #~ msgstr "Iburyo:" #, fuzzy #~ msgid "right precision in strfmon format" #~ msgstr "Iburyo: in Imiterere" #, fuzzy #~ msgid "length modifier in strfmon format" #~ msgstr "Uburebure in Imiterere" #, fuzzy #~ msgid "function might be possible candidate for `%s' format attribute" #~ msgstr "Umumaro kugirango Imiterere Ikiranga" #, fuzzy #~ msgid "missing $ operand number in format" #~ msgstr "Ibuze Umubare in Imiterere" #, fuzzy #~ msgid "%s does not support %%n$ operand number formats" #~ msgstr "%sOYA Gushigikira Umubare Imiterere" #, fuzzy #~ msgid "operand number out of range in format" #~ msgstr "Umubare Inyuma Bya Urutonde in Imiterere" #, fuzzy #~ msgid "format argument %d used more than once in %s format" #~ msgstr "Imiterere Birenzeho Rimwe in Imiterere" #, fuzzy #~ msgid "format argument %d unused before used argument %d in $-style format" #~ msgstr "Imiterere Kidakoreshwa Mbere in IMISUSIRE Imiterere" #, fuzzy #~ msgid "format not a string literal, format string not checked" #~ msgstr "Imiterere OYA a Ikurikiranyanyuguti Imiterere Ikurikiranyanyuguti OYA Ivivuwe" #, fuzzy #~ msgid "format not a string literal and no format arguments" #~ msgstr "Imiterere OYA a Ikurikiranyanyuguti Na Oya Imiterere ingingo" #, fuzzy #~ msgid "format not a string literal, argument types not checked" #~ msgstr "Imiterere OYA a Ikurikiranyanyuguti OYA Ivivuwe" #, fuzzy #~ msgid "too many arguments for format" #~ msgstr "ingingo kugirango Imiterere" #, fuzzy #~ msgid "unused arguments in $-style format" #~ msgstr "Kidakoreshwa ingingo in IMISUSIRE Imiterere" #, fuzzy #~ msgid "zero-length %s format string" #~ msgstr "Zeru Uburebure Imiterere Ikurikiranyanyuguti" #, fuzzy #~ msgid "format is a wide character string" #~ msgstr "Imiterere ni a Inyuguti Ikurikiranyanyuguti" #, fuzzy #~ msgid "unterminated format string" #~ msgstr "Imiterere Ikurikiranyanyuguti" #, fuzzy #~ msgid "embedded `\\0' in format" #~ msgstr "Gitsindiye in Imiterere" #, fuzzy #~ msgid "spurious trailing `%%' in format" #~ msgstr "in Imiterere" #, fuzzy #~ msgid "repeated %s in format" #~ msgstr "byasubiyemo in Imiterere" #, fuzzy #~ msgid "missing fill character at end of strfmon format" #~ msgstr "Ibuze Kuzuza Inyuguti ku Impera Bya Imiterere" #, fuzzy #~ msgid "too few arguments for format" #~ msgstr "ingingo kugirango Imiterere" #, fuzzy #~ msgid "zero width in %s format" #~ msgstr "Zeru Ubugari in Imiterere" #, fuzzy #~ msgid "empty left precision in %s format" #~ msgstr "ubusa Ibumoso: in Imiterere" #, fuzzy #~ msgid "field precision" #~ msgstr "Umwanya" #, fuzzy #~ msgid "empty precision in %s format" #~ msgstr "ubusa in Imiterere" #, fuzzy #~ msgid "%s does not support the `%s' %s length modifier" #~ msgstr "%sOYA Gushigikira i Uburebure" #, fuzzy #~ msgid "conversion lacks type at end of format" #~ msgstr "Ihindurangero Ubwoko ku Impera Bya Imiterere" #, fuzzy #~ msgid "unknown conversion type character `%c' in format" #~ msgstr "Kitazwi Ihindurangero Ubwoko Inyuguti in Imiterere" #, fuzzy #~ msgid "unknown conversion type character 0x%x in format" #~ msgstr "Kitazwi Ihindurangero Ubwoko Inyuguti in Imiterere" #, fuzzy #~ msgid "%s does not support the `%%%c' %s format" #~ msgstr "%sOYA Gushigikira i Imiterere" #, fuzzy #~ msgid "%s used with `%%%c' %s format" #~ msgstr "%sNa: Imiterere" #, fuzzy #~ msgid "%s does not support %s" #~ msgstr "%sOYA Gushigikira" #, fuzzy #~ msgid "%s does not support %s with the `%%%c' %s format" #~ msgstr "%sOYA Gushigikira Na: i Imiterere" #, fuzzy #~ msgid "%s ignored with %s and `%%%c' %s format" #~ msgstr "%sNa: Na Imiterere" #, fuzzy #~ msgid "%s ignored with %s in %s format" #~ msgstr "%sNa: in Imiterere" #, fuzzy #~ msgid "use of %s and %s together with `%%%c' %s format" #~ msgstr "Gukoresha Bya Na Na: Imiterere" #, fuzzy #~ msgid "use of %s and %s together in %s format" #~ msgstr "Gukoresha Bya Na in Imiterere" #, fuzzy #~ msgid "`%%%c' yields only last 2 digits of year in some locales" #~ msgstr "`%%%c'Iheruka 2. Bya Umwaka in" #, fuzzy #~ msgid "`%%%c' yields only last 2 digits of year" #~ msgstr "`%%%c'Iheruka 2. Bya Umwaka" #, fuzzy #~ msgid "no closing `]' for `%%[' format" #~ msgstr "Oya kugirango Imiterere" #, fuzzy #~ msgid "use of `%s' length modifier with `%c' type character" #~ msgstr "Gukoresha Bya Uburebure Na: Ubwoko Inyuguti" #, fuzzy #~ msgid "%s does not support the `%%%s%c' %s format" #~ msgstr "%sOYA Gushigikira i Imiterere" #, fuzzy #~ msgid "operand number specified with suppressed assignment" #~ msgstr "Umubare Na: Igenera" #, fuzzy #~ msgid "operand number specified for format taking no argument" #~ msgstr "Umubare kugirango Imiterere Oya" #, fuzzy #~ msgid "writing through null pointer (arg %d)" #~ msgstr "Gihinguranya NTAGIHARI Mweretsi" #, fuzzy #~ msgid "reading through null pointer (arg %d)" #~ msgstr "Gihinguranya NTAGIHARI Mweretsi" #, fuzzy #~ msgid "writing into constant object (arg %d)" #~ msgstr "Igikoresho" #, fuzzy #~ msgid "extra type qualifiers in format argument (arg %d)" #~ msgstr "Birenga Ubwoko in Imiterere" #, fuzzy #~ msgid "format argument is not a pointer (arg %d)" #~ msgstr "Imiterere ni OYA a Mweretsi" #, fuzzy #~ msgid "format argument is not a pointer to a pointer (arg %d)" #~ msgstr "Imiterere ni OYA a Mweretsi Kuri a Mweretsi" #, fuzzy #~ msgid "pointer" #~ msgstr "Mweretsi" #, fuzzy #~ msgid "different type" #~ msgstr "Ubwoko" #, fuzzy #~ msgid "%s is not type %s (arg %d)" #~ msgstr "%sni OYA Ubwoko" #, fuzzy #~ msgid "%s format, %s arg (arg %d)" #~ msgstr "%sImiterere" #, fuzzy #~ msgid "YYDEBUG not defined" #~ msgstr "OYA" #, fuzzy #~ msgid "badly nested C headers from preprocessor" #~ msgstr "C Imitwe Bivuye" #, fuzzy #~ msgid "universal-character-name '\\u%04x' not valid in identifier" #~ msgstr "Ky'isi yose Inyuguti Izina: OYA Byemewe in Ikiranga" #, fuzzy #~ msgid "stray '%c' in program" #~ msgstr "in Porogaramu" #, fuzzy #~ msgid "stray '\\%o' in program" #~ msgstr "in Porogaramu" #, fuzzy #~ msgid "this decimal constant is unsigned only in ISO C90" #~ msgstr "iyi NYACUMI ni Bitashizweho umukono in" #, fuzzy #~ msgid "this decimal constant would be unsigned in ISO C90" #~ msgstr "iyi NYACUMI Bitashizweho umukono in" #, fuzzy #~ msgid "integer constant is too large for \"%s\" type" #~ msgstr "Umubare wuzuye ni Binini kugirango Ubwoko" #, fuzzy #~ msgid "floating constant exceeds range of \"%s\"" #~ msgstr "Bihindagurika Urutonde Bya" #, fuzzy #~ msgid "ignoring invalid multibyte character" #~ msgstr "Sibyo Inyuguti" #, fuzzy #~ msgid "missing argument to \"-%s\"" #~ msgstr "Ibuze Kuri" #, fuzzy #~ msgid "no class name specified with \"-%s\"" #~ msgstr "Oya ishuri Izina: Na:" #, fuzzy #~ msgid "missing filename after \"-%s\"" #~ msgstr "Ibuze Izina ry'idosiye: Nyuma" #, fuzzy #~ msgid "missing target after \"-%s\"" #~ msgstr "Ibuze Intego Nyuma" #, fuzzy #~ msgid "options array incorrectly sorted: %s is before %s" #~ msgstr "Amahitamo Imbonerahamwe bishunguwe ni Mbere" #, fuzzy #~ msgid "too many filenames given. Type %s --help for usage" #~ msgstr "Ifashayobora kugirango Ikoresha:" #, fuzzy #~ msgid "-Wno-strict-prototypes is not supported in C++" #~ msgstr "-ni OYA in C" #, fuzzy #~ msgid "switch \"%s\" is no longer supported" #~ msgstr "Hindura ni Oya" #, fuzzy #~ msgid "switch \"%s\" is deprecated, please see documentation for details" #~ msgstr "Hindura ni Bitemewe. kugirango Birambuye" #, fuzzy #~ msgid "-fhandle-exceptions has been renamed to -fexceptions (and is now on by default)" #~ msgstr "-Amarengayobora Kuri Na ni NONEAHA ku ku Mburabuzi" #, fuzzy #~ msgid "output filename specified twice" #~ msgstr "Ibisohoka Izina ry'idosiye:" #, fuzzy #~ msgid "-Wformat-extra-args ignored without -Wformat" #~ msgstr "-Birenga" #, fuzzy #~ msgid "-Wformat-zero-length ignored without -Wformat" #~ msgstr "-Zeru Uburebure" #, fuzzy #~ msgid "-Wformat-security ignored without -Wformat" #~ msgstr "-Umutekano" #, fuzzy #~ msgid "-Wmissing-format-attribute ignored without -Wformat" #~ msgstr "-Imiterere Ikiranga" #, fuzzy #~ msgid "opening output file %s" #~ msgstr "Gufungura %s%S Ibisohoka IDOSIYE" #, fuzzy #~ msgid "opening dependency file %s" #~ msgstr "Gufungura %s%S IDOSIYE" #, fuzzy #~ msgid "closing dependency file %s" #~ msgstr "IDOSIYE" #, fuzzy #~ msgid "when writing output to %s" #~ msgstr "Ryari: Ibisohoka Kuri" #, fuzzy #~ msgid "to generate dependencies you must specify either -M or -MM" #~ msgstr "Kuri Cyangwa" #, fuzzy #~ msgid "\"-%s\" is valid for %s but not for %s" #~ msgstr "\"-%s\"ni Byemewe kugirango OYA kugirango" #, fuzzy #~ msgid "" #~ "Switches:\n" #~ " -include Include the contents of before other files\n" #~ " -imacros Accept definition of macros in \n" #~ " -iprefix Specify as a prefix for next two options\n" #~ " -iwithprefix Add to the end of the system include path\n" #~ " -iwithprefixbefore Add to the end of the main include path\n" #~ " -isystem Add to the start of the system include path\n" #~ msgstr "Gushyiramo IDOSIYE i Ibigize Bya IDOSIYE Mbere Ikindi IDOSIYE Insobanuro Bya Makoro in IDOSIYE Inzira Inzira Nka a Imbanziriza kugirango Komeza>> Kuri i Impera Bya i Sisitemu Gushyiramo Kuri i Impera Bya i Gushyiramo Kuri i Gutangira Bya i Sisitemu Gushyiramo" #, fuzzy #~ msgid "" #~ " -idirafter Add to the end of the system include path\n" #~ " -I Add to the end of the main include path\n" #~ " -I- Fine-grained include path control; see info docs\n" #~ " -nostdinc Do not search system include directories\n" #~ " (dirs specified with -isystem will still be used)\n" #~ " -nostdinc++ Do not search system include directories for C++\n" #~ " -o Put output into \n" #~ msgstr "-Kuri i Impera Bya i Sisitemu Gushyiramo Kuri i Impera Bya i Gushyiramo Gushyiramo Inzira Igenzura Ibisobanuro OYA Gushaka Sisitemu Gushyiramo Na: OYA Gushaka Sisitemu Gushyiramo ububiko bw'amaderese kugirango C o IDOSIYE Ibisohoka IDOSIYE" #, fuzzy #~ msgid "" #~ " -trigraphs Support ISO C trigraphs\n" #~ " -std= Specify the conformance standard; one of:\n" #~ " gnu89, gnu99, c89, c99, iso9899:1990,\n" #~ " iso9899:199409, iso9899:1999, c++98\n" #~ " -w Inhibit warning messages\n" #~ " -W[no-]trigraphs Warn if trigraphs are encountered\n" #~ " -W[no-]comment{s} Warn if one comment starts inside another\n" #~ msgstr "-C STD STD Izina: i Bisanzwe Bya C W Iburira Oya NIBA Oya Icyo wongeraho S NIBA Icyo wongeraho Mo Imbere" #, fuzzy #~ msgid "" #~ " -W[no-]traditional Warn about features not present in traditional C\n" #~ " -W[no-]undef Warn if an undefined macro is used by #if\n" #~ " -W[no-]import Warn about the use of the #import directive\n" #~ msgstr "-Oya Ibyerekeye Ibiranga OYA in Oya NIBA kidasobanuye Makoro ni ku Oya Kuzana Ibyerekeye i Gukoresha Bya i Kuzana" #, fuzzy #~ msgid "" #~ " -W[no-]error Treat all warnings as errors\n" #~ " -W[no-]system-headers Do not suppress warnings from system headers\n" #~ " -W[no-]all Enable most preprocessor warnings\n" #~ msgstr "-Oya Ikosa Byose Iburira Nka Oya Sisitemu Imitwe OYA Iburira Bivuye Sisitemu Oya Byose" #, fuzzy #~ msgid "" #~ " -M Generate make dependencies\n" #~ " -MM As -M, but ignore system header files\n" #~ " -MD Generate make dependencies and compile\n" #~ " -MMD As -MD, but ignore system header files\n" #~ " -MF Write dependency output to the given file\n" #~ " -MG Treat missing header file as generated files\n" #~ msgstr "-Ubwoko Kwirengagiza Sisitemu Umutwempangano Ubwoko Na Kwirengagiza Sisitemu Umutwempangano IDOSIYE Ibisohoka Kuri i Ibuze Umutwempangano IDOSIYE Nka" #, fuzzy #~ msgid "" #~ " -MP\t\t\t Generate phony targets for all headers\n" #~ " -MQ Add a MAKE-quoted target\n" #~ " -MT Add an unquoted target\n" #~ msgstr "-kugirango Byose Intego a Intego" #, fuzzy #~ msgid "" #~ " -D Define a with string '1' as its value\n" #~ " -D= Define a with as its value\n" #~ " -A= Assert the to \n" #~ " -A-= Disable the to \n" #~ " -U Undefine \n" #~ " -v Display the version number\n" #~ msgstr "-Makoro a Makoro Na: Ikurikiranyanyuguti Nka Makoro a Makoro Na: Nka A i Kuri A i Kuri U Makoro Makoro v i Verisiyo" #, fuzzy #~ msgid "" #~ " -H Print the name of header files as they are used\n" #~ " -C Do not discard comments\n" #~ " -dM Display a list of macro definitions active at end\n" #~ " -dD Preserve macro definitions in output\n" #~ " -dN As -dD except that only the names are preserved\n" #~ " -dI Include #include directives in the output\n" #~ msgstr "-H i Izina: Bya Umutwempangano Idosiye Nka C OYA Kwanga a Urutonde Bya Makoro Gikora ku Makoro in i Amazina Gushyiramo in i" #, fuzzy #~ msgid "" #~ " -f[no-]preprocessed Treat the input file as already preprocessed\n" #~ " -ftabstop= Distance between tab stops for column reporting\n" #~ " -P Do not generate #line directives\n" #~ " -remap Remap file names when including files\n" #~ " --help Display this information\n" #~ msgstr "-F Oya i Iyinjiza IDOSIYE Nka Umubare hagati Isunika kugirango Inkingi OYA Umurongo IDOSIYE Amazina Ryari: Ifashayobora iyi" #~ msgid "syntax error" #~ msgstr "Ikosa mu myandikire" #, fuzzy #~ msgid "syntax error: cannot back up" #~ msgstr "Ikosa Inyuma Hejuru" #, fuzzy #~ msgid "ISO C forbids an empty source file" #~ msgstr "C ubusa Inkomoko IDOSIYE" #, fuzzy #~ msgid "argument of `asm' is not a constant string" #~ msgstr "Bya ni OYA a Ikurikiranyanyuguti" #, fuzzy #~ msgid "ISO C forbids data definition with no type or storage class" #~ msgstr "C Ibyatanzwe Insobanuro Na: Oya Ubwoko Cyangwa ishuri" #, fuzzy #~ msgid "data definition has no type or storage class" #~ msgstr "Ibyatanzwe Insobanuro Oya Ubwoko Cyangwa ishuri" #, fuzzy #~ msgid "ISO C does not allow extra `;' outside of a function" #~ msgstr "C OYA Kwemerera Birenga Hanze Bya a Umumaro" #, fuzzy #~ msgid "`sizeof' applied to a bit-field" #~ msgstr "`Byashyizweho Kuri a Umwanya" #, fuzzy #~ msgid "ISO C forbids omitting the middle term of a ?: expression" #~ msgstr "C i Hagati Ijambo Bya a imvugo" #, fuzzy #~ msgid "ISO C forbids braced-groups within expressions" #~ msgstr "C Amatsinda muri" #, fuzzy #~ msgid "first argument to __builtin_choose_expr not a constant" #~ msgstr "Itangira Kuri OYA a" #, fuzzy #~ msgid "traditional C rejects ISO C style function definitions" #~ msgstr "C C IMISUSIRE Umumaro" #, fuzzy #~ msgid "`%s' is not at beginning of declaration" #~ msgstr "`%s'ni OYA ku Itangiriro Bya" #, fuzzy #~ msgid "ISO C forbids empty initializer braces" #~ msgstr "C ubusa Ingirwadusodeko" #, fuzzy #~ msgid "ISO C89 forbids specifying subobject to initialize" #~ msgstr "Kuri gutangiza" #, fuzzy #~ msgid "obsolete use of designated initializer without `='" #~ msgstr "Gukoresha Bya" #, fuzzy #~ msgid "obsolete use of designated initializer with `:'" #~ msgstr "Gukoresha Bya Na:" #, fuzzy #~ msgid "ISO C forbids specifying range of elements to initialize" #~ msgstr "C Urutonde Bya Ibintu Kuri gutangiza" #, fuzzy #~ msgid "ISO C forbids nested functions" #~ msgstr "C Imimaro" #, fuzzy #~ msgid "ISO C forbids forward references to `enum' types" #~ msgstr "C Imbere Indango Kuri" #, fuzzy #~ msgid "comma at end of enumerator list" #~ msgstr "Akitso ku Impera Bya Urutonde" #, fuzzy #~ msgid "no semicolon at end of struct or union" #~ msgstr "Oya Akabago n'Akitso ku Impera Bya Cyangwa Ihuza" #, fuzzy #~ msgid "extra semicolon in struct or union specified" #~ msgstr "Birenga Akabago n'Akitso in Cyangwa Ihuza" #, fuzzy #~ msgid "ISO C doesn't support unnamed structs/unions" #~ msgstr "C Gushigikira Kitiswe" #, fuzzy #~ msgid "ISO C forbids member declarations with no members" #~ msgstr "C Na: Oya" #, fuzzy #~ msgid "deprecated use of label at end of compound statement" #~ msgstr "Bitemewe. Gukoresha Bya Akarango ku Impera Bya Inyandiko" #, fuzzy #~ msgid "ISO C89 forbids mixed declarations and code" #~ msgstr "Bivanze Na ITEGEKONGENGA" #, fuzzy #~ msgid "ISO C forbids label declarations" #~ msgstr "C Akarango" #, fuzzy #~ msgid "braced-group within expression allowed only inside a function" #~ msgstr "Itsinda muri imvugo Mo Imbere a Umumaro" #, fuzzy #~ msgid "empty body in an else-statement" #~ msgstr "ubusa Umubiri in Ikindi Inyandiko" #, fuzzy #~ msgid "ISO C forbids `goto *expr;'" #~ msgstr "C" #, fuzzy #~ msgid "ISO C forbids forward parameter declarations" #~ msgstr "C Imbere" #, fuzzy #~ msgid "ISO C requires a named argument before `...'" #~ msgstr "C a Mbere" #, fuzzy #~ msgid "`...' in old-style identifier list" #~ msgstr "`...'in ki/ bishaje IMISUSIRE Ikiranga Urutonde" #, fuzzy #~ msgid "parse error; also virtual memory exhausted" #~ msgstr "Ikosa Kitaboneka Ububiko" #, fuzzy #~ msgid "parse error" #~ msgstr "Ikosa" #, fuzzy #~ msgid "parser stack overflow" #~ msgstr "Byarenze urugero" #, fuzzy #~ msgid "%s at end of input" #~ msgstr "%sku Impera Bya Iyinjiza" #, fuzzy #~ msgid "%s before %s'%c'" #~ msgstr "%sMbere" #, fuzzy #~ msgid "%s before %s'\\x%x'" #~ msgstr "%sMbere" #, fuzzy #~ msgid "%s before string constant" #~ msgstr "%sMbere Ikurikiranyanyuguti" #, fuzzy #~ msgid "%s before numeric constant" #~ msgstr "%sMbere Bikurikije umubare" #, fuzzy #~ msgid "%s before \"%s\"" #~ msgstr "%sMbere" #, fuzzy #~ msgid "%s before '%s' token" #~ msgstr "%sMbere" #, fuzzy #~ msgid "traditional C rejects string concatenation" #~ msgstr "C Ikurikiranyanyuguti" #, fuzzy #~ msgid "syntax error at '%s' token" #~ msgstr "Ikosa ku" #, fuzzy #~ msgid "#pragma pack (pop) encountered without matching #pragma pack (push, )" #~ msgstr "#Ipaki Ipaki N" #, fuzzy #~ msgid "#pragma pack(pop, %s) encountered without matching #pragma pack(push, %s, )" #~ msgstr "#Ipaki Ipaki N" #, fuzzy #~ msgid "#pragma pack(push[, id], ) is not supported on this target" #~ msgstr "#Ipaki ID N ni OYA ku iyi Intego" #, fuzzy #~ msgid "#pragma pack(pop[, id], ) is not supported on this target" #~ msgstr "#Ipaki ID N ni OYA ku iyi Intego" #, fuzzy #~ msgid "missing '(' after '#pragma pack' - ignored" #~ msgstr "Ibuze Nyuma" #, fuzzy #~ msgid "malformed '#pragma pack(push[, id], )' - ignored" #~ msgstr "Ipaki ID N" #, fuzzy #~ msgid "malformed '#pragma pack(pop[, id])' - ignored" #~ msgstr "Ipaki ID" #, fuzzy #~ msgid "unknown action '%s' for '#pragma pack' - ignored" #~ msgstr "Kitazwi Igikorwa kugirango" #, fuzzy #~ msgid "junk at end of '#pragma pack'" #~ msgstr "Umwanda ku Impera Bya" #, fuzzy #~ msgid "alignment must be a small power of two, not %d" #~ msgstr "Itunganya a Gitoya UMWIKUBE Bya OYA" #, fuzzy #~ msgid "applying #pragma weak `%s' after first use results in unspecified behavior" #~ msgstr "Nyuma Itangira Gukoresha Ibisubizo ku in imyitwarire" #, fuzzy #~ msgid "junk at end of #pragma weak" #~ msgstr "Umwanda ku Impera Bya" #, fuzzy #~ msgid "junk at end of #pragma redefine_extname" #~ msgstr "Umwanda ku Impera Bya" #, fuzzy #~ msgid "#pragma redefine_extname conflicts with declaration" #~ msgstr "#Na:" #, fuzzy #~ msgid "junk at end of #pragma extern_prefix" #~ msgstr "Umwanda ku Impera Bya" #, fuzzy #~ msgid "asm declaration conflicts with previous rename" #~ msgstr "Na: Ibanjirije Guhindura izina" #, fuzzy #~ msgid "break statement not within loop or switch" #~ msgstr "itandukanya Inyandiko OYA muri Cyangwa Hindura" #, fuzzy #~ msgid "continue statement not within a loop" #~ msgstr "urifuzagukomeza Inyandiko OYA muri a" #, fuzzy #~ msgid "destructor needed for `%#D'" #~ msgstr "kugirango" #, fuzzy #~ msgid "where case label appears here" #~ msgstr "Akarango" #, fuzzy #~ msgid "(enclose actions of previous case statements requiring destructors in their own scope.)" #~ msgstr "(Bya Ibanjirije in Ingano:" #, fuzzy #~ msgid "%s qualifier ignored on asm" #~ msgstr "%sku" #, fuzzy #~ msgid "`%s' has an incomplete type" #~ msgstr "`%s'Ubwoko" #, fuzzy #~ msgid "invalid use of void expression" #~ msgstr "Sibyo Gukoresha Bya imvugo" #, fuzzy #~ msgid "invalid use of flexible array member" #~ msgstr "Sibyo Gukoresha Bya Imbonerahamwe" #, fuzzy #~ msgid "invalid use of array with unspecified bounds" #~ msgstr "Sibyo Gukoresha Bya Imbonerahamwe Na:" #, fuzzy #~ msgid "invalid use of undefined type `%s %s'" #~ msgstr "Sibyo Gukoresha Bya kidasobanuye Ubwoko" #, fuzzy #~ msgid "invalid use of incomplete typedef `%s'" #~ msgstr "Sibyo Gukoresha Bya" #, fuzzy #~ msgid "function types not truly compatible in ISO C" #~ msgstr "Umumaro OYA in C" #, fuzzy #~ msgid "types are not quite compatible" #~ msgstr "OYA" #, fuzzy #~ msgid "arithmetic on pointer to an incomplete type" #~ msgstr "ku Mweretsi Kuri Ubwoko" #, fuzzy #~ msgid "%s has no member named `%s'" #~ msgstr "%sOya" #, fuzzy #~ msgid "request for member `%s' in something not a structure or union" #~ msgstr "Kubaza... kugirango in OYA a Imiterere Cyangwa Ihuza" #, fuzzy #~ msgid "dereferencing pointer to incomplete type" #~ msgstr "Mweretsi Kuri Ubwoko" #, fuzzy #~ msgid "dereferencing `void *' pointer" #~ msgstr "Mweretsi" #, fuzzy #~ msgid "invalid type argument of `%s'" #~ msgstr "Sibyo Ubwoko Bya" #, fuzzy #~ msgid "subscript missing in array reference" #~ msgstr "Inyandiko nyesi Ibuze in Imbonerahamwe Indango" #, fuzzy #~ msgid "array subscript has type `char'" #~ msgstr "Imbonerahamwe Inyandiko nyesi Ubwoko" #, fuzzy #~ msgid "array subscript is not an integer" #~ msgstr "Imbonerahamwe Inyandiko nyesi ni OYA Umubare wuzuye" #, fuzzy #~ msgid "ISO C forbids subscripting `register' array" #~ msgstr "C Imbonerahamwe" #, fuzzy #~ msgid "ISO C90 forbids subscripting non-lvalue array" #~ msgstr "Imbonerahamwe" #, fuzzy #~ msgid "subscript has type `char'" #~ msgstr "Inyandiko nyesi Ubwoko" #, fuzzy #~ msgid "subscripted value is neither array nor pointer" #~ msgstr "Agaciro ni Imbonerahamwe Mweretsi" #, fuzzy #~ msgid "`%s' undeclared here (not in a function)" #~ msgstr "`%s'OYA in a Umumaro" #, fuzzy #~ msgid "`%s' undeclared (first use in this function)" #~ msgstr "`%s'Itangira Gukoresha in iyi Umumaro" #, fuzzy #~ msgid "(Each undeclared identifier is reported only once" #~ msgstr "(Ikiranga ni Rimwe" #, fuzzy #~ msgid "for each function it appears in.)" #~ msgstr "kugirango Umumaro in" #, fuzzy #~ msgid "local declaration of `%s' hides instance variable" #~ msgstr "Bya Urugero IMPINDURAGACIRO" #, fuzzy #~ msgid "called object is not a function" #~ msgstr "Igikoresho ni OYA a Umumaro" #, fuzzy #~ msgid "too many arguments to function" #~ msgstr "ingingo Kuri Umumaro" #, fuzzy #~ msgid "type of formal parameter %d is incomplete" #~ msgstr "Ubwoko Bya ni" #, fuzzy #~ msgid "%s as integer rather than floating due to prototype" #~ msgstr "%sNka Umubare wuzuye Bihindagurika Kuri" #, fuzzy #~ msgid "%s as integer rather than complex due to prototype" #~ msgstr "%sNka Umubare wuzuye ITSINDA RY'IMIBARE C Kuri" #, fuzzy #~ msgid "%s as complex rather than floating due to prototype" #~ msgstr "%sNka ITSINDA RY'IMIBARE C Bihindagurika Kuri" #, fuzzy #~ msgid "%s as floating rather than integer due to prototype" #~ msgstr "%sNka Bihindagurika Umubare wuzuye Kuri" #, fuzzy #~ msgid "%s as complex rather than integer due to prototype" #~ msgstr "%sNka ITSINDA RY'IMIBARE C Umubare wuzuye Kuri" #, fuzzy #~ msgid "%s as floating rather than complex due to prototype" #~ msgstr "%sNka Bihindagurika ITSINDA RY'IMIBARE C Kuri" #, fuzzy #~ msgid "%s as `float' rather than `double' due to prototype" #~ msgstr "%sNka Kuri" #, fuzzy #~ msgid "%s with different width due to prototype" #~ msgstr "%sNa: Ubugari Kuri" #, fuzzy #~ msgid "%s as unsigned due to prototype" #~ msgstr "%sNka Bitashizweho umukono Kuri" #, fuzzy #~ msgid "%s as signed due to prototype" #~ msgstr "%sNka Kuri" #, fuzzy #~ msgid "too few arguments to function" #~ msgstr "ingingo Kuri Umumaro" #, fuzzy #~ msgid "suggest parentheses around + or - inside shift" #~ msgstr "Cyangwa Mo Imbere Gusunika" #, fuzzy #~ msgid "suggest parentheses around && within ||" #~ msgstr "muri" #, fuzzy #~ msgid "suggest parentheses around arithmetic in operand of |" #~ msgstr "in Bya" #, fuzzy #~ msgid "suggest parentheses around comparison in operand of |" #~ msgstr "in Bya" #, fuzzy #~ msgid "suggest parentheses around arithmetic in operand of ^" #~ msgstr "in Bya" #, fuzzy #~ msgid "suggest parentheses around comparison in operand of ^" #~ msgstr "in Bya" #, fuzzy #~ msgid "suggest parentheses around + or - in operand of &" #~ msgstr "Cyangwa in Bya" #, fuzzy #~ msgid "suggest parentheses around comparison in operand of &" #~ msgstr "in Bya" #, fuzzy #~ msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" #~ msgstr "nka OYA Bijyanye n'imibare Igisobanuro" #, fuzzy #~ msgid "division by zero" #~ msgstr "Kugabanya na zeru" #, fuzzy #~ msgid "right shift count is negative" #~ msgstr "Iburyo: Gusunika IBARA ni" #, fuzzy #~ msgid "right shift count >= width of type" #~ msgstr "Iburyo: Gusunika IBARA Ubugari Bya Ubwoko" #, fuzzy #~ msgid "left shift count is negative" #~ msgstr "Ibumoso: Gusunika IBARA ni" #, fuzzy #~ msgid "left shift count >= width of type" #~ msgstr "Ibumoso: Gusunika IBARA Ubugari Bya Ubwoko" #, fuzzy #~ msgid "shift count is negative" #~ msgstr "Gusunika IBARA ni" #, fuzzy #~ msgid "shift count >= width of type" #~ msgstr "Gusunika IBARA Ubugari Bya Ubwoko" #, fuzzy #~ msgid "comparing floating point with == or != is unsafe" #~ msgstr "Bihindagurika Akadomo Na: Cyangwa ni" #, fuzzy #~ msgid "ISO C forbids comparison of `void *' with function pointer" #~ msgstr "C Bya Na: Umumaro Mweretsi" #, fuzzy #~ msgid "comparison of distinct pointer types lacks a cast" #~ msgstr "Bya Mweretsi a" #, fuzzy #~ msgid "comparison between pointer and integer" #~ msgstr "hagati Mweretsi Na Umubare wuzuye" #, fuzzy #~ msgid "ISO C forbids ordered comparisons of pointers to functions" #~ msgstr "C Bya Kuri Imimaro" #, fuzzy #~ msgid "comparison of complete and incomplete pointers" #~ msgstr "Bya Byuzuye Na" #, fuzzy #~ msgid "ordered comparison of pointer with integer zero" #~ msgstr "Bya Mweretsi Na: Umubare wuzuye Zeru" #, fuzzy #~ msgid "unordered comparison on non-floating point argument" #~ msgstr "ku Bihindagurika Akadomo" #, fuzzy #~ msgid "comparison between signed and unsigned" #~ msgstr "hagati Na Bitashizweho umukono" #, fuzzy #~ msgid "comparison of promoted ~unsigned with constant" #~ msgstr "Bya Bitashizweho umukono Na:" #, fuzzy #~ msgid "comparison of promoted ~unsigned with unsigned" #~ msgstr "Bya Bitashizweho umukono Na: Bitashizweho umukono" #, fuzzy #~ msgid "pointer of type `void *' used in subtraction" #~ msgstr "Mweretsi Bya Ubwoko in Gukuramo" #, fuzzy #~ msgid "pointer to a function used in subtraction" #~ msgstr "Mweretsi Kuri a Umumaro in Gukuramo" #, fuzzy #~ msgid "wrong type argument to unary plus" #~ msgstr "Ubwoko Kuri Guteranya" #, fuzzy #~ msgid "wrong type argument to unary minus" #~ msgstr "Ubwoko Kuri" #, fuzzy #~ msgid "ISO C does not support `~' for complex conjugation" #~ msgstr "C OYA Gushigikira kugirango ITSINDA RY'IMIBARE C" #, fuzzy #~ msgid "wrong type argument to bit-complement" #~ msgstr "Ubwoko Kuri" #, fuzzy #~ msgid "wrong type argument to abs" #~ msgstr "Ubwoko Kuri ABS" #, fuzzy #~ msgid "wrong type argument to conjugation" #~ msgstr "Ubwoko Kuri" #, fuzzy #~ msgid "wrong type argument to unary exclamation mark" #~ msgstr "Ubwoko Kuri Ikimenyetso" #, fuzzy #~ msgid "ISO C does not support `++' and `--' on complex types" #~ msgstr "C OYA Gushigikira Na ku ITSINDA RY'IMIBARE C" #, fuzzy #~ msgid "wrong type argument to increment" #~ msgstr "Ubwoko Kuri Iyongeragaciro" #, fuzzy #~ msgid "wrong type argument to decrement" #~ msgstr "Ubwoko Kuri" #, fuzzy #~ msgid "increment of pointer to unknown structure" #~ msgstr "Iyongeragaciro Bya Mweretsi Kuri Kitazwi Imiterere" #, fuzzy #~ msgid "decrement of pointer to unknown structure" #~ msgstr "Bya Mweretsi Kuri Kitazwi Imiterere" #, fuzzy #~ msgid "ISO C forbids the address of a cast expression" #~ msgstr "C i Aderesi Bya a imvugo" #, fuzzy #~ msgid "invalid lvalue in unary `&'" #~ msgstr "Sibyo in" #, fuzzy #~ msgid "attempt to take address of bit-field structure member `%s'" #~ msgstr "Kuri Aderesi Bya Umwanya Imiterere" # basctl/source\basicide\basidesh.src:RID_IMGBTN_REMOVEWATCH.text #, fuzzy #~ msgid "%s" #~ msgstr "%s" #, fuzzy #~ msgid "ISO C forbids use of conditional expressions as lvalues" #~ msgstr "C Gukoresha Bya Nka" #, fuzzy #~ msgid "ISO C forbids use of compound expressions as lvalues" #~ msgstr "C Gukoresha Bya Nka" #, fuzzy #~ msgid "ISO C forbids use of cast expressions as lvalues" #~ msgstr "C Gukoresha Bya Nka" #, fuzzy #~ msgid "%s of read-only member `%s'" #~ msgstr "%sBya Gusoma" #, fuzzy #~ msgid "%s of read-only variable `%s'" #~ msgstr "%sBya Gusoma IMPINDURAGACIRO" #, fuzzy #~ msgid "%s of read-only location" #~ msgstr "%sBya Gusoma Ahantu" #, fuzzy #~ msgid "cannot take address of bit-field `%s'" #~ msgstr "Aderesi Bya Umwanya" #, fuzzy #~ msgid "global register variable `%s' used in nested function" #~ msgstr "Kwiyandikisha IMPINDURAGACIRO in Umumaro" #, fuzzy #~ msgid "register variable `%s' used in nested function" #~ msgstr "Kwiyandikisha IMPINDURAGACIRO in Umumaro" #, fuzzy #~ msgid "address of global register variable `%s' requested" #~ msgstr "Aderesi Bya Kwiyandikisha IMPINDURAGACIRO" #, fuzzy #~ msgid "cannot put object with volatile field into register" #~ msgstr "Gushyira Igikoresho Na: Umwanya Kwiyandikisha" #, fuzzy #~ msgid "address of register variable `%s' requested" #~ msgstr "Aderesi Bya Kwiyandikisha IMPINDURAGACIRO" #, fuzzy #~ msgid "signed and unsigned type in conditional expression" #~ msgstr "Na Bitashizweho umukono Ubwoko in imvugo" #, fuzzy #~ msgid "ISO C forbids conditional expr with only one void side" #~ msgstr "C Na:" #, fuzzy #~ msgid "ISO C forbids conditional expr between `void *' and function pointer" #~ msgstr "C hagati Na Umumaro Mweretsi" #, fuzzy #~ msgid "pointer type mismatch in conditional expression" #~ msgstr "Mweretsi Ubwoko in imvugo" #, fuzzy #~ msgid "pointer/integer type mismatch in conditional expression" #~ msgstr "Mweretsi Umubare wuzuye Ubwoko in imvugo" #, fuzzy #~ msgid "type mismatch in conditional expression" #~ msgstr "Ubwoko in imvugo" #, fuzzy #~ msgid "left-hand operand of comma expression has no effect" #~ msgstr "Ibumoso: Bya Akitso imvugo Oya INGARUKA" #, fuzzy #~ msgid "cast specifies array type" #~ msgstr "Imbonerahamwe Ubwoko" #, fuzzy #~ msgid "cast specifies function type" #~ msgstr "Umumaro Ubwoko" #, fuzzy #~ msgid "ISO C forbids casting nonscalar to the same type" #~ msgstr "C Kuri i Ubwoko" #, fuzzy #~ msgid "ISO C forbids casts to union type" #~ msgstr "C Kuri Ihuza Ubwoko" #, fuzzy #~ msgid "cast to union type from type not present in union" #~ msgstr "Kuri Ihuza Ubwoko Bivuye Ubwoko OYA in Ihuza" #, fuzzy #~ msgid "cast adds new qualifiers to function type" #~ msgstr "Gishya Kuri Umumaro Ubwoko" #, fuzzy #~ msgid "cast discards qualifiers from pointer target type" #~ msgstr "Bivuye Mweretsi Intego Ubwoko" #, fuzzy #~ msgid "cast increases required alignment of target type" #~ msgstr "Bya ngombwa Itunganya Bya Intego Ubwoko" #, fuzzy #~ msgid "cast from pointer to integer of different size" #~ msgstr "Bivuye Mweretsi Kuri Umubare wuzuye Bya Ingano" #, fuzzy #~ msgid "cast does not match function type" #~ msgstr "OYA BIHUYE Umumaro Ubwoko" #, fuzzy #~ msgid "cast to pointer from integer of different size" #~ msgstr "Kuri Mweretsi Bivuye Umubare wuzuye Bya Ingano" #, fuzzy #~ msgid "type-punning to incomplete type might break strict-aliasing rules" #~ msgstr "Ubwoko Kuri Ubwoko itandukanya" #, fuzzy #~ msgid "dereferencing type-punned pointer will break strict-aliasing rules" #~ msgstr "Ubwoko Mweretsi itandukanya" #, fuzzy #~ msgid "invalid lvalue in assignment" #~ msgstr "Sibyo in Igenera" #, fuzzy #~ msgid "assignment" #~ msgstr "Igenera" #, fuzzy #~ msgid "cannot pass rvalue to reference parameter" #~ msgstr "Kuri Indango" #, fuzzy #~ msgid "%s makes qualified function pointer from unqualified" #~ msgstr "%sUmumaro Mweretsi Bivuye" #, fuzzy #~ msgid "%s discards qualifiers from pointer target type" #~ msgstr "%sBivuye Mweretsi Intego Ubwoko" #, fuzzy #~ msgid "ISO C prohibits argument conversion to union type" #~ msgstr "C Ihindurangero Kuri Ihuza Ubwoko" #, fuzzy #~ msgid "ISO C forbids %s between function pointer and `void *'" #~ msgstr "C hagati Umumaro Mweretsi Na" #, fuzzy #~ msgid "pointer targets in %s differ in signedness" #~ msgstr "Mweretsi in in" #, fuzzy #~ msgid "%s from incompatible pointer type" #~ msgstr "%sBivuye Mweretsi Ubwoko" #, fuzzy #~ msgid "%s makes pointer from integer without a cast" #~ msgstr "%sMweretsi Bivuye Umubare wuzuye a" #, fuzzy #~ msgid "%s makes integer from pointer without a cast" #~ msgstr "%sUmubare wuzuye Bivuye Mweretsi a" #, fuzzy #~ msgid "incompatible type for argument %d of `%s'" #~ msgstr "Ubwoko kugirango Bya" #, fuzzy #~ msgid "incompatible type for argument %d of indirect function call" #~ msgstr "Ubwoko kugirango Bya BUZIGUYE Umumaro" #, fuzzy #~ msgid "incompatible types in %s" #~ msgstr "in" #, fuzzy #~ msgid "passing arg of `%s'" #~ msgstr "Bya" #, fuzzy #~ msgid "passing arg of pointer to function" #~ msgstr "Bya Mweretsi Kuri Umumaro" #, fuzzy #~ msgid "passing arg %d of `%s'" #~ msgstr "Bya" #, fuzzy #~ msgid "passing arg %d of pointer to function" #~ msgstr "Bya Mweretsi Kuri Umumaro" #, fuzzy #~ msgid "initializer for static variable is not constant" #~ msgstr "kugirango IMPINDURAGACIRO ni OYA" #, fuzzy #~ msgid "initializer for static variable uses complicated arithmetic" #~ msgstr "kugirango IMPINDURAGACIRO" #, fuzzy #~ msgid "aggregate initializer is not constant" #~ msgstr "ni OYA" #, fuzzy #~ msgid "traditional C rejects automatic aggregate initialization" #~ msgstr "C Byikoresha" #, fuzzy #~ msgid "(near initialization for `%s')" #~ msgstr "(kugirango" #, fuzzy #~ msgid "char-array initialized from wide string" #~ msgstr "INYUGUTI Imbonerahamwe Bivuye Ikurikiranyanyuguti" #, fuzzy #~ msgid "int-array initialized from non-wide string" #~ msgstr "INT Imbonerahamwe Bivuye Ikurikiranyanyuguti" #, fuzzy #~ msgid "initializer-string for array of chars is too long" #~ msgstr "Ikurikiranyanyuguti kugirango Imbonerahamwe Bya ni" #, fuzzy #~ msgid "array initialized from non-constant array expression" #~ msgstr "Imbonerahamwe Bivuye Imbonerahamwe imvugo" #, fuzzy #~ msgid "initializer element is not constant" #~ msgstr "Ikigize: ni OYA" #, fuzzy #~ msgid "initializer element is not computable at load time" #~ msgstr "Ikigize: ni OYA ku Ibirimo Igihe" #, fuzzy #~ msgid "invalid initializer" #~ msgstr "Sibyo" #, fuzzy #~ msgid "extra brace group at end of initializer" #~ msgstr "Birenga Itsinda ku Impera Bya" #, fuzzy #~ msgid "missing braces around initializer" #~ msgstr "Ibuze Ingirwadusodeko" #, fuzzy #~ msgid "braces around scalar initializer" #~ msgstr "Ingirwadusodeko" #, fuzzy #~ msgid "initialization of flexible array member in a nested context" #~ msgstr "Bya Imbonerahamwe in a Imvugiro" #, fuzzy #~ msgid "initialization of a flexible array member" #~ msgstr "Bya a Imbonerahamwe" #, fuzzy #~ msgid "missing initializer" #~ msgstr "Ibuze" #, fuzzy #~ msgid "empty scalar initializer" #~ msgstr "ubusa" #, fuzzy #~ msgid "extra elements in scalar initializer" #~ msgstr "Birenga Ibintu in" #, fuzzy #~ msgid "initialization designators may not nest" #~ msgstr "Gicurasi OYA" #, fuzzy #~ msgid "array index in non-array initializer" #~ msgstr "Imbonerahamwe Umubarendanga in Imbonerahamwe" #, fuzzy #~ msgid "field name not in record or union initializer" #~ msgstr "Umwanya Izina: OYA in Icyabitswe Cyangwa Ihuza" #, fuzzy #~ msgid "nonconstant array index in initializer" #~ msgstr "Imbonerahamwe Umubarendanga in" #, fuzzy #~ msgid "array index in initializer exceeds array bounds" #~ msgstr "Imbonerahamwe Umubarendanga in Imbonerahamwe" #, fuzzy #~ msgid "empty index range in initializer" #~ msgstr "ubusa Umubarendanga Urutonde in" #, fuzzy #~ msgid "array index range in initializer exceeds array bounds" #~ msgstr "Imbonerahamwe Umubarendanga Urutonde in Imbonerahamwe" #, fuzzy #~ msgid "unknown field `%s' specified in initializer" #~ msgstr "Kitazwi Umwanya in" #, fuzzy #~ msgid "initialized field with side-effects overwritten" #~ msgstr "Umwanya Na: Ingaruka" #, fuzzy #~ msgid "excess elements in char array initializer" #~ msgstr "Ibintu in INYUGUTI Imbonerahamwe" #, fuzzy #~ msgid "excess elements in struct initializer" #~ msgstr "Ibintu in" #, fuzzy #~ msgid "non-static initialization of a flexible array member" #~ msgstr "Bya a Imbonerahamwe" #, fuzzy #~ msgid "excess elements in union initializer" #~ msgstr "Ibintu in Ihuza" #, fuzzy #~ msgid "traditional C rejects initialization of unions" #~ msgstr "C Bya" #, fuzzy #~ msgid "excess elements in array initializer" #~ msgstr "Ibintu in Imbonerahamwe" #, fuzzy #~ msgid "excess elements in vector initializer" #~ msgstr "Ibintu in" #, fuzzy #~ msgid "excess elements in scalar initializer" #~ msgstr "Ibintu in" #, fuzzy #~ msgid "asm template is not a string constant" #~ msgstr "Inyandikorugero ni OYA a Ikurikiranyanyuguti" #, fuzzy #~ msgid "invalid lvalue in asm statement" #~ msgstr "Sibyo in Inyandiko" #, fuzzy #~ msgid "modification by `asm'" #~ msgstr "ku" #, fuzzy #~ msgid "function declared `noreturn' has a `return' statement" #~ msgstr "Umumaro a Inyandiko" #, fuzzy #~ msgid "`return' with no value, in function returning non-void" #~ msgstr "`Na: Oya Agaciro in Umumaro" #, fuzzy #~ msgid "`return' with a value, in function returning void" #~ msgstr "`Na: a Agaciro in Umumaro" #, fuzzy #~ msgid "return" #~ msgstr "Garuka" #, fuzzy #~ msgid "function returns address of local variable" #~ msgstr "Umumaro Aderesi Bya IMPINDURAGACIRO" #, fuzzy #~ msgid "switch quantity not an integer" #~ msgstr "Hindura Ingano OYA Umubare wuzuye" #, fuzzy #~ msgid "`long' switch expression not converted to `int' in ISO C" #~ msgstr "`Hindura imvugo OYA Kuri in C" #, fuzzy #~ msgid "case label not within a switch statement" #~ msgstr "Akarango OYA muri a Hindura Inyandiko" #, fuzzy #~ msgid "`default' label not within a switch statement" #~ msgstr "`Akarango OYA muri a Hindura Inyandiko" #, fuzzy #~ msgid "inlining failed in call to `%s'" #~ msgstr "Byanze in Kuri" #, fuzzy #~ msgid "called from here" #~ msgstr "Bivuye" #, fuzzy #~ msgid "can't inline call to `%s'" #~ msgstr "Mumurongo Kuri" #, fuzzy #~ msgid "function call has aggregate value" #~ msgstr "Umumaro Agaciro" #, fuzzy #~ msgid "Size of loop %d should be %d, not %d." #~ msgstr "Bya OYA" #, fuzzy #~ msgid "Bb %d do not belong to loop %d." #~ msgstr "OYA Kuri" #, fuzzy #~ msgid "Loop %d's header does not have exactly 2 entries." #~ msgstr "S Umutwempangano OYA 2. Ibyinjijwe" #, fuzzy #~ msgid "Loop %d's latch does not have exactly 1 successor." #~ msgstr "S OYA 1." #, fuzzy #~ msgid "Loop %d's latch does not have header as successor." #~ msgstr "S OYA Umutwempangano Nka" #, fuzzy #~ msgid "Loop %d's latch does not belong directly to it." #~ msgstr "S OYA Kuri" #, fuzzy #~ msgid "Loop %d's header does not belong directly to it." #~ msgstr "S Umutwempangano OYA Kuri" #, fuzzy #~ msgid "bb %d on wrong place" #~ msgstr "ku" #, fuzzy #~ msgid "prev_bb of %d should be %d, not %d" #~ msgstr "Bya OYA" #, fuzzy #~ msgid "end insn %d for block %d not found in the insn stream" #~ msgstr "Impera kugirango Funga OYA Byabonetse in i" #, fuzzy #~ msgid "insn %d is in multiple basic blocks (%d and %d)" #~ msgstr "ni in Igikubo BASIC Na" #, fuzzy #~ msgid "head insn %d for block %d not found in the insn stream" #~ msgstr "kugirango Funga OYA Byabonetse in i" #, fuzzy #~ msgid "verify_flow_info: REG_BR_PROB does not match cfg %i %i" #~ msgstr "OYA BIHUYE" #, fuzzy #~ msgid "verify_flow_info: Wrong count of block %i %i" #~ msgstr "IBARA Bya Funga" #, fuzzy #~ msgid "verify_flow_info: Wrong frequency of block %i %i" #~ msgstr "Ubwisubire Bya Funga" #, fuzzy #~ msgid "verify_flow_info: Wrong probability of edge %i->%i %i" #~ msgstr "Imishobokere Bya" #, fuzzy #~ msgid "verify_flow_info: Wrong count of edge %i->%i %i" #~ msgstr "IBARA Bya" #, fuzzy #~ msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i" #~ msgstr "kugirango" #, fuzzy #~ msgid "wrong insn in the fallthru edge" #~ msgstr "in i" #, fuzzy #~ msgid "verify_flow_info: Basic block %d succ edge is corrupted" #~ msgstr "Funga ni" #, fuzzy #~ msgid "Missing REG_EH_REGION note in the end of bb %i" #~ msgstr "Impugukirwa in i Impera Bya" #, fuzzy #~ msgid "Too many outgoing branch edges from bb %i" #~ msgstr "Bivuye" #, fuzzy #~ msgid "Fallthru edge after unconditional jump %i" #~ msgstr "Nyuma Simbuka" #, fuzzy #~ msgid "Wrong amount of branch edges after unconditional jump %i" #~ msgstr "Igiteranyo Bya Nyuma Simbuka" #, fuzzy #~ msgid "Wrong amount of branch edges after conditional jump %i" #~ msgstr "Igiteranyo Bya Nyuma Simbuka" #, fuzzy #~ msgid "Call edges for non-call insn in bb %i" #~ msgstr "kugirango in" #, fuzzy #~ msgid "Abnormal edges for no purpose in bb %i" #~ msgstr "kugirango Oya Intego in" #, fuzzy #~ msgid "missing barrier after block %i" #~ msgstr "Ibuze Nyuma Funga" #, fuzzy #~ msgid "basic block %d pred edge is corrupted" #~ msgstr "BASIC Funga ni" #, fuzzy #~ msgid "insn %d inside basic block %d but block_for_insn is NULL" #~ msgstr "Mo Imbere BASIC Funga ni" #, fuzzy #~ msgid "insn %d inside basic block %d but block_for_insn is %i" #~ msgstr "Mo Imbere BASIC Funga ni" #, fuzzy #~ msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" #~ msgstr "ni Ibuze kugirango Funga" #, fuzzy #~ msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d" #~ msgstr "in Hagati Bya BASIC Funga" #, fuzzy #~ msgid "in basic block %d:" #~ msgstr "in BASIC Funga" #, fuzzy #~ msgid "flow control insn inside a basic block" #~ msgstr "Igenzura Mo Imbere a BASIC Funga" #, fuzzy #~ msgid "basic block %i edge lists are corrupted" #~ msgstr "BASIC Funga Intonde" #, fuzzy #~ msgid "basic blocks not numbered consecutively" #~ msgstr "BASIC OYA Iriho Imibare" #, fuzzy #~ msgid "insn outside basic block" #~ msgstr "Hanze BASIC Funga" #, fuzzy #~ msgid "return not followed by barrier" #~ msgstr "Garuka OYA ku" #, fuzzy #~ msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" #~ msgstr "Umubare Bya Ibisobanuro in" #, fuzzy #~ msgid "verify_flow_info failed" #~ msgstr "Byanze" #, fuzzy #~ msgid "internal error" #~ msgstr "Ikosa ry'imbere" #, fuzzy #~ msgid "no arguments" #~ msgstr "Oya ingingo" #, fuzzy #~ msgid "collect2 version %s" #~ msgstr "Verisiyo" #, fuzzy #~ msgid "%d constructor(s) found\n" #~ msgstr "%dS" #, fuzzy #~ msgid "%d destructor(s) found\n" #~ msgstr "%dS" #, fuzzy #~ msgid "%d frame table(s) found\n" #~ msgstr "%dIkadiri imbonerahamwe# S" #, fuzzy #~ msgid "%s terminated with signal %d [%s]%s" #~ msgstr "%sNa:" #, fuzzy #~ msgid "%s returned %d exit status" #~ msgstr "%sGusohoka Imimerere" #, fuzzy #~ msgid "[cannot find %s]" #~ msgstr "[Gushaka" #, fuzzy #~ msgid "cannot find `%s'" #~ msgstr "Gushaka" #, fuzzy #~ msgid "" #~ "\n" #~ "write_c_file - output name is %s, prefix is %s\n" #~ msgstr "Ibisohoka Izina: ni Imbanziriza ni" #, fuzzy #~ msgid "cannot find `nm'" #~ msgstr "Gushaka" #, fuzzy #~ msgid "dup2 %d 1" #~ msgstr "1." # svx/source\svdraw\svdstr.src:STR_EditShut.text #, fuzzy #~ msgid "close %d" #~ msgstr "Gufunga" #, fuzzy #~ msgid "init function found in object %s" #~ msgstr "Umumaro Byabonetse in Igikoresho" #, fuzzy #~ msgid "fini function found in object %s" #~ msgstr "Umumaro Byabonetse in Igikoresho" #, fuzzy #~ msgid "unable to open file '%s'" #~ msgstr "Kuri Gufungura IDOSIYE" #, fuzzy #~ msgid "unable to stat file '%s'" #~ msgstr "Kuri IDOSIYE" #, fuzzy #~ msgid "unable to mmap file '%s'" #~ msgstr "Kuri IDOSIYE" #, fuzzy #~ msgid "not found\n" #~ msgstr "OYA" #, fuzzy #~ msgid "dynamic dependency %s not found" #~ msgstr "OYA Byabonetse" #, fuzzy #~ msgid "bad magic number in file '%s'" #~ msgstr "Umubare in IDOSIYE" #, fuzzy #~ msgid "cannot find `ldd'" #~ msgstr "Gushaka" #, fuzzy #~ msgid "" #~ "\n" #~ "ldd output with constructors/destructors.\n" #~ msgstr "Ibisohoka Na:" #, fuzzy #~ msgid "unable to open dynamic dependency '%s'" #~ msgstr "Kuri Gufungura" #, fuzzy #~ msgid "%s: not a COFF file" #~ msgstr "%s:OYA a IDOSIYE" #, fuzzy #~ msgid "%s: cannot open as COFF file" #~ msgstr "%s:Gufungura Nka IDOSIYE" #, fuzzy #~ msgid "library lib%s not found" #~ msgstr "Isomero OYA Byabonetse" # sfx2/source\appl\minbox.src:RID_MAIL_INBOX.BTN_MAILINBOX_OPEN.text #, fuzzy #~ msgid "open %s" #~ msgstr "Gufungura..." #, fuzzy #~ msgid "incompatibilities between object file & expected values" #~ msgstr "hagati Igikoresho IDOSIYE Ikitezwe: Uduciro" #, fuzzy #~ msgid "" #~ "\n" #~ "Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n" #~ msgstr "IKIMENYETSO imbonerahamwe# Nta- boneza" #, fuzzy #~ msgid "string section missing" #~ msgstr "Ikurikiranyanyuguti Icyiciro Ibuze" #, fuzzy #~ msgid "section pointer missing" #~ msgstr "Icyiciro Mweretsi Ibuze" #, fuzzy #~ msgid "no symbol table found" #~ msgstr "Oya IKIMENYETSO imbonerahamwe# Byabonetse" #, fuzzy #~ msgid "no cmd_strings found" #~ msgstr "Oya Byabonetse" #, fuzzy #~ msgid "" #~ "\n" #~ "Updating header and load commands.\n" #~ "\n" #~ msgstr "Umutwempangano Na Ibirimo Amabwiriza" #, fuzzy #~ msgid "load command map, %d cmds, new size %ld.\n" #~ msgstr "Ibirimo Komandi: Gishya Ingano" #, fuzzy #~ msgid "" #~ "writing load commands.\n" #~ "\n" #~ msgstr "Ibirimo Amabwiriza" # svx/source\svdraw\svdstr.src:STR_EditShut.text #, fuzzy #~ msgid "close %s" #~ msgstr "Gufunga" #, fuzzy #~ msgid "could not convert 0x%l.8x into a region" #~ msgstr "OYA GUHINDURA a" #, fuzzy #~ msgid "%s function, region %d, offset = %ld (0x%.8lx)\n" #~ msgstr "%sUmumaro Nta- boneza" #, fuzzy #~ msgid "bad magic number" #~ msgstr "Umubare" #, fuzzy #~ msgid "bad header version" #~ msgstr "Umutwempangano Verisiyo" #, fuzzy #~ msgid "bad raw header version" #~ msgstr "Umutwempangano Verisiyo" #, fuzzy #~ msgid "raw header buffer too small" #~ msgstr "Umutwempangano Gitoya" #, fuzzy #~ msgid "old raw header file" #~ msgstr "ki/ bishaje Umutwempangano IDOSIYE" #, fuzzy #~ msgid "unsupported version" #~ msgstr "Verisiyo" #, fuzzy #~ msgid "unknown {de,en}code_mach_o_hdr return value %d" #~ msgstr "Kitazwi Garuka Agaciro" #, fuzzy #~ msgid "lseek %s 0" #~ msgstr "0" # svx/inc\globlmn.hrc:ITEM_FILE_MAIL_INBOX.text #, fuzzy #~ msgid "read %s" #~ msgstr "Gusoma" #, fuzzy #~ msgid "read %ld bytes, expected %ld, from %s" #~ msgstr "Gusoma Bayite Ikitezwe: Bivuye" # #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-# # officecfg/registry\schema\org\openoffice\Office\Common.xcs:....Filter.HTML.Export.Browser..3.text # #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-# # officecfg/registry\schema\org\openoffice\Office\Writer.xcs:....FormLetter.MailingOutput.Format..8.text #, fuzzy #~ msgid "write %s" #~ msgstr "Kwandika" #, fuzzy #~ msgid "wrote %ld bytes, expected %ld, to %s" #~ msgstr "Bayite Ikitezwe: Kuri" #, fuzzy #~ msgid "" #~ ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n" #~ ";; %d successes.\n" #~ "\n" #~ msgstr ";;Sitatisitiki Gishya Umwanya Ibyatunganye" #, fuzzy #~ msgid "" #~ "\n" #~ ";; Combiner totals: %d attempts, %d substitutions (%d requiring new space),\n" #~ ";; %d successes.\n" #~ msgstr ";;Gishya Umwanya Ibyatunganye" #, fuzzy #~ msgid "cannot convert to a pointer type" #~ msgstr "GUHINDURA Kuri a Mweretsi Ubwoko" #, fuzzy #~ msgid "pointer value used where a floating point value was expected" #~ msgstr "Mweretsi Agaciro a Bihindagurika Akadomo Agaciro Ikitezwe:" #, fuzzy #~ msgid "aggregate value used where a float was expected" #~ msgstr "Agaciro a Kureremba Ikitezwe:" #, fuzzy #~ msgid "conversion to incomplete type" #~ msgstr "Ihindurangero Kuri Ubwoko" #, fuzzy #~ msgid "can't convert between vector values of different size" #~ msgstr "GUHINDURA hagati Uduciro Bya Ingano" #, fuzzy #~ msgid "aggregate value used where an integer was expected" #~ msgstr "Agaciro Umubare wuzuye Ikitezwe:" #, fuzzy #~ msgid "pointer value used where a complex was expected" #~ msgstr "Mweretsi Agaciro a ITSINDA RY'IMIBARE C Ikitezwe:" #, fuzzy #~ msgid "aggregate value used where a complex was expected" #~ msgstr "Agaciro a ITSINDA RY'IMIBARE C Ikitezwe:" #, fuzzy #~ msgid "can't convert value to a vector" #~ msgstr "GUHINDURA Agaciro Kuri a" #, fuzzy #~ msgid "ISO C++ does not permit \"%s\" in #if" #~ msgstr "C OYA in NIBA" #, fuzzy #~ msgid "invalid character '%c' in #if" #~ msgstr "Sibyo Inyuguti in NIBA" #, fuzzy #~ msgid "invalid character '\\%03o' in #if" #~ msgstr "Sibyo Inyuguti in NIBA" #, fuzzy #~ msgid "absolute file name in remap_filename" #~ msgstr "IDOSIYE Izina: in" #, fuzzy #~ msgid "ignoring nonexistent directory \"%s\"\n" #~ msgstr "bushyinguro" #, fuzzy #~ msgid "%s: Not a directory" #~ msgstr "%s:a bushyinguro" #, fuzzy #~ msgid "ignoring duplicate directory \"%s\"\n" #~ msgstr "Gusubiramo bushyinguro" #, fuzzy #~ msgid " as it is a non-system directory that duplicates a system directory\n" #~ msgstr "Nka ni a Sisitemu bushyinguro a Sisitemu" #, fuzzy #~ msgid "#include \"...\" search starts here:\n" #~ msgstr "#Gushyiramo Gushaka" #, fuzzy #~ msgid "#include <...> search starts here:\n" #~ msgstr "#Gushyiramo Gushaka" #, fuzzy #~ msgid "End of search list.\n" #~ msgstr "Impera Bya Gushaka Urutonde" #, fuzzy #~ msgid "" #~ msgstr "" #~ msgstr " MIME- Version: 1. 0\n" #~ "Content- Type: text/ plain; charset= UTF- 8\n" #~ "Content- Transfer- Encoding: 8bit\n" #~ "X- Generator: KBabel 1. 0\n" #~ "." #, fuzzy #~ msgid "Usage: %s [options] file...\n" #~ msgstr "Amahitamo IDOSIYE" # crashrep/source\all\crashrep.lng:%OPTIONS_BUTTON%.text #, fuzzy #~ msgid "Options:\n" #~ msgstr "Amahitamo..." #, fuzzy #~ msgid " -pass-exit-codes Exit with highest error code from a phase\n" #~ msgstr "-Gusohoka Na: kirekire kurusha ibindi Ikosa ITEGEKONGENGA Bivuye a" #, fuzzy #~ msgid " --help Display this information\n" #~ msgstr "--Ifashayobora iyi" #, fuzzy #~ msgid " --target-help Display target specific command line options\n" #~ msgstr "--Intego Ifashayobora Intego Komandi: Umurongo" #, fuzzy #~ msgid " (Use '-v --help' to display command line options of sub-processes)\n" #~ msgstr "(v Kuri Kugaragaza Komandi: Umurongo Amahitamo Bya" #, fuzzy #~ msgid " -dumpspecs Display all of the built in spec strings\n" #~ msgstr "-Byose Bya i in" #, fuzzy #~ msgid " -dumpversion Display the version of the compiler\n" #~ msgstr "-i Verisiyo Bya i" #, fuzzy #~ msgid " -dumpmachine Display the compiler's target processor\n" #~ msgstr "-i Intego" #, fuzzy #~ msgid " -print-search-dirs Display the directories in the compiler's search path\n" #~ msgstr "-Gucapa Gushaka i ububiko bw'amaderese in i Gushaka" #, fuzzy #~ msgid " -print-libgcc-file-name Display the name of the compiler's companion library\n" #~ msgstr "-Gucapa IDOSIYE Izina: i Izina: Bya i" #, fuzzy #~ msgid " -print-file-name= Display the full path to library \n" #~ msgstr "-Gucapa IDOSIYE Izina: i Inzira Kuri Isomero" #, fuzzy #~ msgid " -print-prog-name= Display the full path to compiler component \n" #~ msgstr "-Gucapa Izina: i Inzira Kuri" #, fuzzy #~ msgid " -print-multi-directory Display the root directory for versions of libgcc\n" #~ msgstr "-Gucapa bushyinguro i Imizi bushyinguro kugirango Uburyo Bya" #, fuzzy #~ msgid "" #~ " -print-multi-lib Display the mapping between command line options and\n" #~ " multiple library search directories\n" #~ msgstr "-Gucapa i Igereranya hagati Komandi: Umurongo Amahitamo Igikubo Isomero Gushaka" #, fuzzy #~ msgid " -print-multi-os-directory Display the relative path to OS libraries\n" #~ msgstr "-Gucapa bushyinguro i Bifitanye isano Inzira Kuri" #, fuzzy #~ msgid " -Wa, Pass comma-separated on to the assembler\n" #~ msgstr "-Amahitamo Akitso Amahitamo ku Kuri i" #, fuzzy #~ msgid " -Wp, Pass comma-separated on to the preprocessor\n" #~ msgstr "-Amahitamo Akitso Amahitamo ku Kuri i" #, fuzzy #~ msgid " -Wl, Pass comma-separated on to the linker\n" #~ msgstr "-Amahitamo Akitso Amahitamo ku Kuri i" #, fuzzy #~ msgid " -Xlinker Pass on to the linker\n" #~ msgstr "-ku Kuri i" #, fuzzy #~ msgid " -save-temps Do not delete intermediate files\n" #~ msgstr "-Kubika OYA Gusiba" #, fuzzy #~ msgid " -time Time the execution of each subprocess\n" #~ msgstr "-Igihe i Bya" #, fuzzy #~ msgid " -specs= Override built-in specs with the contents of \n" #~ msgstr "-IDOSIYE in Na: i Ibigize Bya IDOSIYE" #, fuzzy #~ msgid " -std= Assume that the input sources are for \n" #~ msgstr "-STD Bisanzwe i Iyinjiza kugirango Bisanzwe" #, fuzzy #~ msgid " -B Add to the compiler's search paths\n" #~ msgstr "-bushyinguro bushyinguro Kuri i Gushaka" #, fuzzy #~ msgid " -b Run gcc for target , if installed\n" #~ msgstr "-B kugirango Intego NIBA" #, fuzzy #~ msgid " -V Run gcc version number , if installed\n" #~ msgstr "-V Verisiyo Verisiyo Umubare Verisiyo NIBA" #, fuzzy #~ msgid " -v Display the programs invoked by the compiler\n" #~ msgstr "-v i Porogaramu ku i" #, fuzzy #~ msgid " -### Like -v but options quoted and commands not executed\n" #~ msgstr "-###v Amahitamo Na Amabwiriza OYA" #, fuzzy #~ msgid " -E Preprocess only; do not compile, assemble or link\n" #~ msgstr "-E OYA Gukusanya Cyangwa" #, fuzzy #~ msgid " -S Compile only; do not assemble or link\n" #~ msgstr "-OYA Cyangwa" #, fuzzy #~ msgid " -c Compile and assemble, but do not link\n" #~ msgstr "-C Na OYA" #, fuzzy #~ msgid " -o Place the output into \n" #~ msgstr "-o IDOSIYE i Ibisohoka IDOSIYE" #, fuzzy #~ msgid "" #~ " -x Specify the language of the following input files\n" #~ " Permissible languages include: c c++ assembler none\n" #~ " 'none' means revert to the default behavior of\n" #~ " guessing the language based on the file's extension\n" #~ msgstr "-X Ururimi i Ururimi Bya i Iyinjiza Indimi Gushyiramo C C Kugaruza Kuri i Mburabuzi imyitwarire i Ururimi ku i" #, fuzzy #~ msgid "" #~ "\n" #~ "Options starting with -g, -f, -m, -O, -W, or --param are automatically\n" #~ " passed on to the various sub-processes invoked by %s. In order to pass\n" #~ " other options on to these processes the -W options must be used.\n" #~ msgstr "Na: g F M Cyangwa ku Kuri i ku Itondekanya Kuri Ikindi Amahitamo ku Kuri i Ibaruwa... Amahitamo" #, fuzzy #~ msgid "`-%c' option must have argument" #~ msgstr "`-%c'Ihitamo" #, fuzzy #~ msgid "couldn't run `%s': %s" #~ msgstr "Gukoresha" #, fuzzy #~ msgid "Copyright (C) 2003 Free Software Foundation, Inc.\n" #~ msgstr "C" #, fuzzy #~ msgid "" #~ "This is free software; see the source for copying conditions. There is NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" #~ "\n" #~ msgstr "ni Kigenga i Inkomoko kugirango ni OYA ATARIIGIHARWE kugirango Cyangwa A" #, fuzzy #~ msgid "argument to `-Xlinker' is missing" #~ msgstr "Kuri ni Ibuze" #, fuzzy #~ msgid "argument to `-l' is missing" #~ msgstr "Kuri ni Ibuze" #, fuzzy #~ msgid "argument to `-specs' is missing" #~ msgstr "Kuri ni Ibuze" #, fuzzy #~ msgid "argument to `-specs=' is missing" #~ msgstr "Kuri ni Ibuze" #, fuzzy #~ msgid "`-%c' must come at the start of the command line" #~ msgstr "`-%c'ku i Gutangira Bya i Komandi: Umurongo" #, fuzzy #~ msgid "argument to `-B' is missing" #~ msgstr "Kuri ni Ibuze" #, fuzzy #~ msgid "cannot specify -o with -c or -S and multiple compilations" #~ msgstr "o Na: C Cyangwa Na Igikubo" #, fuzzy #~ msgid "warning: -pipe ignored because -save-temps specified" #~ msgstr "Iburira Kubika" #, fuzzy #~ msgid "warning: -pipe ignored because -time specified" #~ msgstr "Iburira Igihe" #, fuzzy #~ msgid "argument to `-x' is missing" #~ msgstr "Kuri ni Ibuze" #, fuzzy #~ msgid "argument to `-%s' is missing" #~ msgstr "Kuri ni Ibuze" #, fuzzy #~ msgid "warning: `-x %s' after last input file has no effect" #~ msgstr "Iburira X Nyuma Iheruka Iyinjiza IDOSIYE Oya INGARUKA" #, fuzzy #~ msgid "invalid specification! Bug in cc" #~ msgstr "Sibyo in KopiKubandi" # basctl/source\basicide\basidesh.src:RID_IMGBTN_REMOVEWATCH.text #, fuzzy #~ msgid "%s\n" #~ msgstr "%s" #, fuzzy #~ msgid "spec failure: '%%*' has not been initialized by pattern match" #~ msgstr "OYA ku Ishusho BIHUYE" #, fuzzy #~ msgid "warning: use of obsolete %%[ operator in specs" #~ msgstr "Iburira Gukoresha Bya Mukoresha in" #, fuzzy #~ msgid "Processing spec %c%s%c, which is '%s'\n" #~ msgstr "ni" #, fuzzy #~ msgid "spec failure: unrecognized spec option '%c'" #~ msgstr "Ihitamo" #, fuzzy #~ msgid "unknown spec function `%s'" #~ msgstr "Kitazwi Umumaro" #, fuzzy #~ msgid "error in args to spec function `%s'" #~ msgstr "Ikosa in Kuri Umumaro" #, fuzzy #~ msgid "malformed spec function name" #~ msgstr "Umumaro Izina:" #, fuzzy #~ msgid "no arguments for spec function" #~ msgstr "Oya ingingo kugirango Umumaro" #, fuzzy #~ msgid "malformed spec function arguments" #~ msgstr "Umumaro ingingo" #, fuzzy #~ msgid "mismatched braces in specs" #~ msgstr "Ingirwadusodeko in" #, fuzzy #~ msgid "unrecognized option `-%s'" #~ msgstr "Ihitamo" # #-#-#-#-# setup2.pot (PACKAGE VERSION) #-#-#-#-# # setup2/source\ui\pages\plang.src:RESID_PAGE_PAGELANGUAGE.STR_PROG.text # #-#-#-#-# setup2.pot (PACKAGE VERSION) #-#-#-#-# # setup2/source\uibase\agentdlg.src:RC_AGENTDLG.RESID_DLG_AGENT_STR_INSTALL.text #, fuzzy #~ msgid "install: %s%s\n" #~ msgstr "Kwinjiza porogaramu" #, fuzzy #~ msgid "programs: %s\n" #~ msgstr "Porogaramu" # basctl/source\basicide\moduldlg.src:RID_TD_ORGANIZE.RID_TC_ORGANIZE.RID_TP_LIB.text #, fuzzy #~ msgid "libraries: %s\n" #~ msgstr "Amasomero" #, fuzzy #~ msgid "" #~ "\n" #~ "For bug reporting instructions, please see:\n" #~ msgstr "Amabwiriza" #, fuzzy #~ msgid "Configured with: %s\n" #~ msgstr "Na:" #, fuzzy #~ msgid "Thread model: %s\n" #~ msgstr "Urugero" #, fuzzy #~ msgid "gcc version %s\n" #~ msgstr "Verisiyo" #, fuzzy #~ msgid "gcc driver version %s executing gcc version %s\n" #~ msgstr "Musomyi: Verisiyo Gukora: %s%s Verisiyo" #, fuzzy #~ msgid "no input files" #~ msgstr "Oya Iyinjiza Idosiye" #, fuzzy #~ msgid "%s: %s compiler not installed on this system" #~ msgstr "%s:%sOYA ku iyi Sisitemu" #, fuzzy #~ msgid "%s: linker input file unused because linking not done" #~ msgstr "%s:Iyinjiza IDOSIYE Kidakoreshwa Impuza OYA Byakozwe" #, fuzzy #~ msgid "language %s not recognized" #~ msgstr "Ururimi OYA" #, fuzzy #~ msgid "internal gcc abort" #~ msgstr "By'imbere Kureka" #, fuzzy #~ msgid "Internal gcov abort.\n" #~ msgstr "Kureka" #, fuzzy #~ msgid "" #~ "Print code coverage information.\n" #~ "\n" #~ msgstr "ITEGEKONGENGA Ibisobanuro" #, fuzzy #~ msgid " -h, --help Print this help, then exit\n" #~ msgstr "-h Ifashayobora iyi Ifashayobora Hanyuma" #, fuzzy #~ msgid " -v, --version Print version number, then exit\n" #~ msgstr "-v Verisiyo Verisiyo Umubare Hanyuma" #, fuzzy #~ msgid " -b, --branch-probabilities Include branch probabilities in output\n" #~ msgstr "-B in" #, fuzzy #~ msgid "" #~ " -c, --branch-counts Given counts of branches taken\n" #~ " rather than percentages\n" #~ msgstr "-C Bya" #, fuzzy #~ msgid " -n, --no-output Do not create an output file\n" #~ msgstr "-N Oya Ibisohoka OYA Kurema Ibisohoka" #, fuzzy #~ msgid "" #~ " -l, --long-file-names Use long output file names for included\n" #~ " source files\n" #~ msgstr "-L IDOSIYE Amazina Ibisohoka IDOSIYE Amazina kugirango Inkomoko" #, fuzzy #~ msgid " -f, --function-summaries Output summaries for each function\n" #~ msgstr "-F Umumaro kugirango" #, fuzzy #~ msgid " -o, --object-directory DIR|FILE Search for object files in DIR or called FILE\n" #~ msgstr "-o Igikoresho bushyinguro kugirango Igikoresho Idosiye in Cyangwa" #, fuzzy #~ msgid " -p, --preserve-paths Preserve all pathname components\n" #~ msgstr "-P Inzira Byose" #, fuzzy #~ msgid "" #~ "\n" #~ "For bug reporting instructions, please see:\n" #~ "%s.\n" #~ msgstr "Amabwiriza" #, fuzzy #~ msgid "Copyright (C) 2001 Free Software Foundation, Inc.\n" #~ msgstr "C" #, fuzzy #~ msgid "Could not open basic block file %s.\n" #~ msgstr "OYA Gufungura BASIC Funga IDOSIYE" #, fuzzy #~ msgid "Could not open program flow graph file %s.\n" #~ msgstr "OYA Gufungura Porogaramu IDOSIYE" #, fuzzy #~ msgid "Could not open data file %s.\n" #~ msgstr "OYA Gufungura Ibyatanzwe IDOSIYE" #, fuzzy #~ msgid "Assuming that all execution counts are zero.\n" #~ msgstr "Byose Zeru" #, fuzzy #~ msgid "No executable code associated with file %s.\n" #~ msgstr "ITEGEKONGENGA Na: IDOSIYE" #, fuzzy #~ msgid "%s of %d lines executed in %s %s\n" #~ msgstr "%sBya Imirongo in" #, fuzzy #~ msgid "No executable lines in %s %s\n" #~ msgstr "Imirongo in" #, fuzzy #~ msgid "%s of %d branches executed in %s %s\n" #~ msgstr "%sBya in" #, fuzzy #~ msgid "%s of %d branches taken at least once in %s %s\n" #~ msgstr "%sBya ku Rimwe in" #, fuzzy #~ msgid "No branches in %s %s\n" #~ msgstr "in" #, fuzzy #~ msgid "%s of %d calls executed in %s %s\n" #~ msgstr "%sBya Amahamagara: in" #, fuzzy #~ msgid "No calls in %s %s\n" #~ msgstr "Amahamagara: in" #, fuzzy #~ msgid "didn't use all bb entries of graph, function %s\n" #~ msgstr "Gukoresha Byose Ibyinjijwe Bya Umumaro" #, fuzzy #~ msgid "ERROR: unexpected line number %ld\n" #~ msgstr "Umurongo Umubare" #, fuzzy #~ msgid "ERROR: too many basic blocks in function %s\n" #~ msgstr "BASIC in Umumaro" #, fuzzy #~ msgid "ERROR: out of range line number in function %s\n" #~ msgstr "Inyuma Bya Urutonde Umurongo Umubare in Umumaro" #, fuzzy #~ msgid "Could not open source file %s.\n" #~ msgstr "OYA Gufungura Inkomoko IDOSIYE" #, fuzzy #~ msgid "Warning: source file %s is newer than %s\n" #~ msgstr "Inkomoko IDOSIYE ni" #, fuzzy #~ msgid "Unexpected EOF while reading source file %s.\n" #~ msgstr "Inkomoko IDOSIYE" #, fuzzy #~ msgid "call %2d never executed\n" #~ msgstr "Nta narimwe" #, fuzzy #~ msgid "branch %2d never executed\n" #~ msgstr "Nta narimwe" #, fuzzy #~ msgid "Error writing output file %s.\n" #~ msgstr "Ibisohoka IDOSIYE" #, fuzzy #~ msgid "Could not open output file %s.\n" #~ msgstr "OYA Gufungura Ibisohoka IDOSIYE" #, fuzzy #~ msgid "GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block" #~ msgstr "Yahagaritswe 1000 BASIC Na 20 BASIC Funga" #, fuzzy #~ msgid "GCSE disabled: %d basic blocks and %d registers" #~ msgstr "Yahagaritswe BASIC Na" #, fuzzy #~ msgid "Name `%s' contains quotes" #~ msgstr "Kirimo" #, fuzzy #~ msgid "invalid string `%s' in define_cpu_unit" #~ msgstr "Sibyo Ikurikiranyanyuguti in" #, fuzzy #~ msgid "invalid string `%s' in define_query_cpu_unit" #~ msgstr "Sibyo Ikurikiranyanyuguti in" #, fuzzy #~ msgid "invalid string `%s' in define_bypass" #~ msgstr "Sibyo Ikurikiranyanyuguti in" #, fuzzy #~ msgid "invalid first string `%s' in exclusion_set" #~ msgstr "Sibyo Itangira Ikurikiranyanyuguti in" #, fuzzy #~ msgid "invalid second string `%s' in exclusion_set" #~ msgstr "Sibyo ISEGONDA Ikurikiranyanyuguti in" #, fuzzy #~ msgid "invalid first string `%s' in presence_set" #~ msgstr "Sibyo Itangira Ikurikiranyanyuguti in" #, fuzzy #~ msgid "invalid second string `%s' in presence_set" #~ msgstr "Sibyo ISEGONDA Ikurikiranyanyuguti in" #, fuzzy #~ msgid "invalid first string `%s' in absence_set" #~ msgstr "Sibyo Itangira Ikurikiranyanyuguti in" #, fuzzy #~ msgid "invalid second string `%s' in absence_set" #~ msgstr "Sibyo ISEGONDA Ikurikiranyanyuguti in" #, fuzzy #~ msgid "invalid string `%s' in define_automaton" #~ msgstr "Sibyo Ikurikiranyanyuguti in" #, fuzzy #~ msgid "invalid option `%s' in automata_option" #~ msgstr "Sibyo Ihitamo in" #, fuzzy #~ msgid "garbage after ) in reservation `%s'" #~ msgstr "Nyuma in" #, fuzzy #~ msgid "invalid `%s' in reservation `%s'" #~ msgstr "Sibyo in" #, fuzzy #~ msgid "repetition `%s' <= 1 in reservation `%s'" #~ msgstr "1. in" #, fuzzy #~ msgid "unit `%s' in exclusion is not declared" #~ msgstr "Igice: in ni OYA" #, fuzzy #~ msgid "`%s' in exclusion is not unit" #~ msgstr "`%s'in ni OYA Igice:" #, fuzzy #~ msgid "unit `%s' excludes itself" #~ msgstr "Igice:" #, fuzzy #~ msgid "units `%s' and `%s' in exclusion set belong to different automata" #~ msgstr "Na in Gushyiraho Kuri" #, fuzzy #~ msgid "unit `%s' excludes and requires presence of `%s'" #~ msgstr "Igice: Na Bya" #, fuzzy #~ msgid "unit `%s' requires absence and presence of `%s'" #~ msgstr "Igice: Na Bya" #, fuzzy #~ msgid "repeated declaration of automaton `%s'" #~ msgstr "byasubiyemo Bya" #, fuzzy #~ msgid "define_insn_reservation `%s' has negative latency time" #~ msgstr "Igihe" #, fuzzy #~ msgid "`%s' is already used as insn reservation name" #~ msgstr "`%s'ni Nka Izina:" #, fuzzy #~ msgid "define_bypass `%s - %s' has negative latency time" #~ msgstr "Igihe" #, fuzzy #~ msgid "automaton `%s' is not declared" #~ msgstr "ni OYA" #, fuzzy #~ msgid "define_unit `%s' without automaton when one defined" #~ msgstr "Ryari:" #, fuzzy #~ msgid "`%s' is declared as cpu unit" #~ msgstr "`%s'ni Nka CPU Igice:" #, fuzzy #~ msgid "`%s' is declared as cpu reservation" #~ msgstr "`%s'ni Nka CPU" #, fuzzy #~ msgid "repeated declaration of unit `%s'" #~ msgstr "byasubiyemo Bya Igice:" #, fuzzy #~ msgid "repeated declaration of reservation `%s'" #~ msgstr "byasubiyemo Bya" #, fuzzy #~ msgid "there is no insn reservation `%s'" #~ msgstr "ni Oya" #, fuzzy #~ msgid "the same bypass `%s - %s' is already defined" #~ msgstr "i ni" #, fuzzy #~ msgid "bypass `%s - %s' is already defined" #~ msgstr "ni" #, fuzzy #~ msgid "automaton `%s' is not used" #~ msgstr "ni OYA" #, fuzzy #~ msgid "undeclared unit or reservation `%s'" #~ msgstr "Igice: Cyangwa" #, fuzzy #~ msgid "unit `%s' is not used" #~ msgstr "Igice: ni OYA" #, fuzzy #~ msgid "reservation `%s' is not used" #~ msgstr "ni OYA" #, fuzzy #~ msgid "cycle in definition of reservation `%s'" #~ msgstr "Uruziga in Insobanuro Bya" #, fuzzy #~ msgid "Units `%s' and `%s' should be in the same automaton" #~ msgstr "Na in i" #, fuzzy #~ msgid "-split has no argument." #~ msgstr "-Gutandukanya Oya" #, fuzzy #~ msgid "option `-split' has not been implemented yet\n" #~ msgstr "Ihitamo OYA" #, fuzzy #~ msgid "Automaton `%s': Insn `%s' will never be issued" #~ msgstr "Nta narimwe Byasohowe" #, fuzzy #~ msgid "Insn `%s' will never be issued" #~ msgstr "Nta narimwe Byasohowe" #, fuzzy #~ msgid "Errors in DFA description" #~ msgstr "in Isobanuramiterere" #, fuzzy #~ msgid "Error in writing DFA description file %s" #~ msgstr "in Isobanuramiterere IDOSIYE" #, fuzzy #~ msgid "No input file name." #~ msgstr "Iyinjiza IDOSIYE Izina:" #, fuzzy #~ msgid "can't open %s" #~ msgstr "Gufungura" #, fuzzy #~ msgid "fix_sched_param: unknown param: %s" #~ msgstr "Kitazwi" #, fuzzy #~ msgid "function cannot be inline" #~ msgstr "Umumaro Mumurongo" #, fuzzy #~ msgid "varargs function cannot be inline" #~ msgstr "Umumaro Mumurongo" #, fuzzy #~ msgid "function using alloca cannot be inline" #~ msgstr "Umumaro ikoresha Mumurongo" #, fuzzy #~ msgid "function using setjmp cannot be inline" #~ msgstr "Umumaro ikoresha Mumurongo" #, fuzzy #~ msgid "function uses __builtin_eh_return" #~ msgstr "Umumaro" #, fuzzy #~ msgid "function with nested functions cannot be inline" #~ msgstr "Umumaro Na: Imimaro Mumurongo" #, fuzzy #~ msgid "function with label addresses used in initializers cannot inline" #~ msgstr "Umumaro Na: Akarango Amaderesi in Mumurongo" #, fuzzy #~ msgid "function too large to be inline" #~ msgstr "Umumaro Binini Kuri Mumurongo" #, fuzzy #~ msgid "no prototype, and parameter address used; cannot be inline" #~ msgstr "Oya Na Aderesi Mumurongo" #, fuzzy #~ msgid "inline functions not supported for this return value type" #~ msgstr "Mumurongo Imimaro OYA kugirango iyi Garuka Agaciro Ubwoko" #, fuzzy #~ msgid "function with varying-size return value cannot be inline" #~ msgstr "Umumaro Na: Ingano Garuka Agaciro Mumurongo" #, fuzzy #~ msgid "function with varying-size parameter cannot be inline" #~ msgstr "Umumaro Na: Ingano Mumurongo" #, fuzzy #~ msgid "function with transparent unit parameter cannot be inline" #~ msgstr "Umumaro Na: Bibonerana Igice: Mumurongo" #, fuzzy #~ msgid "function with computed jump cannot inline" #~ msgstr "Umumaro Na: Simbuka Mumurongo" #, fuzzy #~ msgid "function with nonlocal goto cannot be inline" #~ msgstr "Umumaro Na: Mumurongo" #, fuzzy #~ msgid "function with target specific attribute(s) cannot be inlined" #~ msgstr "Umumaro Na: Intego Ikiranga S" #, fuzzy #~ msgid "invalid parameter `%s'" #~ msgstr "Ikigenderwaho sicyo" #, fuzzy #~ msgid "Profile does not match flowgraph of function %s (out of date?)" #~ msgstr "OYA BIHUYE Bya Umumaro Inyuma Bya Itariki" #, fuzzy #~ msgid ".da file corrupted" #~ msgstr "" #~ ".Project- Id- Version: basctl\n" #~ "POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n" #~ "PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n" #~ "Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n" #~ "Content- Type: text/ plain; charset= UTF- 8\n" #~ "Content- Transfer- Encoding: 8bit\n" #~ "X- Generator: KBabel 1. 0\n" #~ "." #, fuzzy #~ msgid "corrupted profile info: prob for %d-%d thought to be %d" #~ msgstr "Ibijyana Ibisobanuro PROB kugirango Kuri" #, fuzzy #~ msgid "file %s not found, execution counts assumed to be zero" #~ msgstr "IDOSIYE OYA Byabonetse Kuri Zeru" #, fuzzy #~ msgid "%s: internal abort\n" #~ msgstr "%s:By'imbere" #, fuzzy #~ msgid "%s: error writing file `%s': %s\n" #~ msgstr "%s:Ikosa IDOSIYE" #, fuzzy #~ msgid "%s: usage '%s [ -VqfnkN ] [ -i ] [ filename ... ]'\n" #~ msgstr "%s:Ikoresha: i Izina ry'idosiye:" #, fuzzy #~ msgid "%s: usage '%s [ -VqfnkNlgC ] [ -B ] [ filename ... ]'\n" #~ msgstr "%s:Ikoresha: Izina ry'idosiye:" #, fuzzy #~ msgid "%s: warning: no read access for file `%s'\n" #~ msgstr "%s:Iburira Oya Gusoma kugirango IDOSIYE" #, fuzzy #~ msgid "%s: warning: no write access for file `%s'\n" #~ msgstr "%s:Iburira Oya Kwandika kugirango IDOSIYE" #, fuzzy #~ msgid "%s: warning: no write access for dir containing `%s'\n" #~ msgstr "%s:Iburira Oya Kwandika kugirango" #, fuzzy #~ msgid "%s: invalid file name: %s\n" #~ msgstr "%s:Sibyo IDOSIYE Izina:" #, fuzzy #~ msgid "%s: %s: can't get status: %s\n" #~ msgstr "%s:%s:Kubona Imimerere" #, fuzzy #~ msgid "" #~ "\n" #~ "%s: fatal error: aux info file corrupted at line %d\n" #~ msgstr "%s:Ikosa Ibisobanuro IDOSIYE ku Umurongo" #, fuzzy #~ msgid "%s:%d: declaration of function `%s' takes different forms\n" #~ msgstr "%s:%d:Bya Umumaro" #, fuzzy #~ msgid "%s: wait: %s\n" #~ msgstr "%s:Tegereza" #, fuzzy #~ msgid "%s: %s exited with status %d\n" #~ msgstr "%s:%sNa: Imimerere" #, fuzzy #~ msgid "%s: warning: missing SYSCALLS file `%s'\n" #~ msgstr "%s:Iburira Ibuze IDOSIYE" #, fuzzy #~ msgid "%s: can't read aux info file `%s': %s\n" #~ msgstr "%s:Gusoma Ibisobanuro IDOSIYE" #, fuzzy #~ msgid "%s: can't get status of aux info file `%s': %s\n" #~ msgstr "%s:Kubona Imimerere Bya Ibisobanuro IDOSIYE" #, fuzzy #~ msgid "%s: can't open aux info file `%s' for reading: %s\n" #~ msgstr "%s:Gufungura Ibisobanuro IDOSIYE kugirango" #, fuzzy #~ msgid "%s: error reading aux info file `%s': %s\n" #~ msgstr "%s:Ikosa Ibisobanuro IDOSIYE" #, fuzzy #~ msgid "%s: error closing aux info file `%s': %s\n" #~ msgstr "%s:Ikosa Ibisobanuro IDOSIYE" #, fuzzy #~ msgid "%s: can't delete aux info file `%s': %s\n" #~ msgstr "%s:Gusiba Ibisobanuro IDOSIYE" #, fuzzy #~ msgid "%s: can't delete file `%s': %s\n" #~ msgstr "%s:Gusiba IDOSIYE" #, fuzzy #~ msgid "%s: warning: can't rename file `%s' to `%s': %s\n" #~ msgstr "%s:Iburira Guhindura izina IDOSIYE Kuri" #, fuzzy #~ msgid "%s: conflicting extern definitions of '%s'\n" #~ msgstr "%s:Bya" #, fuzzy #~ msgid "%s: declarations of '%s' will not be converted\n" #~ msgstr "%s:Bya OYA" #, fuzzy #~ msgid "%s: conflict list for '%s' follows:\n" #~ msgstr "%s:Urutonde kugirango" #, fuzzy #~ msgid "%s: warning: using formals list from %s(%d) for function `%s'\n" #~ msgstr "%s:Iburira ikoresha Urutonde Bivuye kugirango Umumaro" #, fuzzy #~ msgid "%s: %d: `%s' used but missing from SYSCALLS\n" #~ msgstr "%s:%d:`%s'Ibuze Bivuye" #, fuzzy #~ msgid "%s: %d: warning: no extern definition for `%s'\n" #~ msgstr "%s:%d:Iburira Oya Insobanuro kugirango" #, fuzzy #~ msgid "%s: warning: no static definition for `%s' in file `%s'\n" #~ msgstr "%s:Iburira Oya Insobanuro kugirango in IDOSIYE" #, fuzzy #~ msgid "%s: multiple static defs of `%s' in file `%s'\n" #~ msgstr "%s:Igikubo Bya in IDOSIYE" #, fuzzy #~ msgid "%s: %d: warning: source too confusing\n" #~ msgstr "%s:%d:Iburira Inkomoko" #, fuzzy #~ msgid "%s: %d: warning: varargs function declaration not converted\n" #~ msgstr "%s:%d:Iburira Umumaro OYA" #, fuzzy #~ msgid "%s: declaration of function `%s' not converted\n" #~ msgstr "%s:Bya Umumaro OYA" #, fuzzy #~ msgid "%s: warning: too many parameter lists in declaration of `%s'\n" #~ msgstr "%s:Iburira Intonde in Bya" #, fuzzy #~ msgid "" #~ "\n" #~ "%s: warning: too few parameter lists in declaration of `%s'\n" #~ msgstr "%s:Iburira Intonde in Bya" #, fuzzy #~ msgid "%s: %d: warning: found `%s' but expected `%s'\n" #~ msgstr "%s:%d:Iburira Byabonetse Ikitezwe:" #, fuzzy #~ msgid "%s: local declaration for function `%s' not inserted\n" #~ msgstr "%s:kugirango Umumaro OYA" #, fuzzy #~ msgid "" #~ "\n" #~ "%s: %d: warning: can't add declaration of `%s' into macro call\n" #~ msgstr "%s:%d:Iburira Kongeramo Bya Makoro" #, fuzzy #~ msgid "%s: global declarations for file `%s' not inserted\n" #~ msgstr "%s:kugirango IDOSIYE OYA" #, fuzzy #~ msgid "%s: definition of function `%s' not converted\n" #~ msgstr "%s:Insobanuro Bya Umumaro OYA" #, fuzzy #~ msgid "%s: %d: warning: definition of %s not converted\n" #~ msgstr "%s:%d:Iburira Insobanuro Bya OYA" #, fuzzy #~ msgid "%s: found definition of `%s' at %s(%d)\n" #~ msgstr "%s:Byabonetse Insobanuro Bya ku" #, fuzzy #~ msgid "%s: %d: warning: `%s' excluded by preprocessing\n" #~ msgstr "%s:%d:Iburira ku" #, fuzzy #~ msgid "%s: function definition not converted\n" #~ msgstr "%s:Umumaro Insobanuro OYA" #, fuzzy #~ msgid "%s: `%s' not converted\n" #~ msgstr "%s:`%s'OYA" #, fuzzy #~ msgid "%s: would convert file `%s'\n" #~ msgstr "%s:GUHINDURA IDOSIYE" #, fuzzy #~ msgid "%s: converting file `%s'\n" #~ msgstr "%s:Guhindura.... IDOSIYE" #, fuzzy #~ msgid "%s: can't get status for file `%s': %s\n" #~ msgstr "%s:Kubona Imimerere kugirango IDOSIYE" #, fuzzy #~ msgid "%s: can't open file `%s' for reading: %s\n" #~ msgstr "%s:Gufungura IDOSIYE kugirango" #, fuzzy #~ msgid "" #~ "\n" #~ "%s: error reading input file `%s': %s\n" #~ msgstr "%s:Ikosa Iyinjiza IDOSIYE" #, fuzzy #~ msgid "%s: can't create/open clean file `%s': %s\n" #~ msgstr "%s:Kurema Gufungura GUSUKURA IDOSIYE" #, fuzzy #~ msgid "%s: warning: file `%s' already saved in `%s'\n" #~ msgstr "%s:Iburira IDOSIYE in" #, fuzzy #~ msgid "%s: can't link file `%s' to `%s': %s\n" #~ msgstr "%s:Ihuza IDOSIYE Kuri" #, fuzzy #~ msgid "%s: can't create/open output file `%s': %s\n" #~ msgstr "%s:Kurema Gufungura Ibisohoka IDOSIYE" #, fuzzy #~ msgid "%s: can't change mode of file `%s': %s\n" #~ msgstr "%s:Guhindura>> Ubwoko Bya IDOSIYE" #, fuzzy #~ msgid "%s: cannot get working directory: %s\n" #~ msgstr "%s:Kubona bushyinguro" #, fuzzy #~ msgid "%s: input file names must have .c suffixes: %s\n" #~ msgstr "%s:Iyinjiza IDOSIYE Amazina C Imigereka" #, fuzzy #~ msgid "Didn't find a coloring.\n" #~ msgstr "Gushaka a" #, fuzzy #~ msgid "output constraint %d must specify a single register" #~ msgstr "Ibisohoka Imbogamizi a UMWE Kwiyandikisha" #, fuzzy #~ msgid "output constraint %d cannot be specified together with \"%s\" clobber" #~ msgstr "Ibisohoka Imbogamizi Na:" #, fuzzy #~ msgid "output regs must be grouped at top of stack" #~ msgstr "Ibisohoka ku Hejuru: Bya" #, fuzzy #~ msgid "implicitly popped regs must be grouped at top of stack" #~ msgstr "ku Hejuru: Bya" #, fuzzy #~ msgid "output operand %d must use `&' constraint" #~ msgstr "Ibisohoka Gukoresha Imbogamizi" #, fuzzy #~ msgid "can't use '%s' as a %s register" #~ msgstr "Gukoresha Nka a Kwiyandikisha" #, fuzzy #~ msgid "unknown register name: %s" #~ msgstr "Kitazwi Kwiyandikisha Izina:" #, fuzzy #~ msgid "global register variable follows a function definition" #~ msgstr "Kwiyandikisha IMPINDURAGACIRO a Umumaro Insobanuro" #, fuzzy #~ msgid "register used for two global register variables" #~ msgstr "Kwiyandikisha kugirango Kwiyandikisha Ibihinduka" #, fuzzy #~ msgid "call-clobbered register used for global register variable" #~ msgstr "Kwiyandikisha kugirango Kwiyandikisha IMPINDURAGACIRO" #, fuzzy #~ msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)" #~ msgstr "kugirango ubusa" #, fuzzy #~ msgid "validate_value_data: Loop in regno chain (%u)" #~ msgstr "in" #, fuzzy #~ msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)" #~ msgstr "ubusa in" #, fuzzy #~ msgid "cannot reload integer constant operand in `asm'" #~ msgstr "Kongera Gutangiza Umubare wuzuye in" #, fuzzy #~ msgid "impossible register constraint in `asm'" #~ msgstr "Kwiyandikisha Imbogamizi in" #, fuzzy #~ msgid "`&' constraint used with no register class" #~ msgstr "`&'Imbogamizi Na: Oya Kwiyandikisha ishuri" #, fuzzy #~ msgid "unable to generate reloads for:" #~ msgstr "Kuri kugirango" #, fuzzy #~ msgid "inconsistent operand constraints in an `asm'" #~ msgstr "in" #, fuzzy #~ msgid "frame size too large for reliable stack checking" #~ msgstr "Ikadiri Ingano Binini kugirango" #, fuzzy #~ msgid "try reducing the number of local variables" #~ msgstr "i Umubare Bya Ibihinduka" #, fuzzy #~ msgid "can't find a register in class `%s' while reloading `asm'" #~ msgstr "Gushaka a Kwiyandikisha in ishuri" #, fuzzy #~ msgid "unable to find a register to spill in class `%s'" #~ msgstr "Kuri Gushaka a Kwiyandikisha Kuri in ishuri" #, fuzzy #~ msgid "this is the insn:" #~ msgstr "iyi ni i" #, fuzzy #~ msgid "`asm' operand requires impossible reload" #~ msgstr "`Kongera Gutangiza" #, fuzzy #~ msgid "could not find a spill register" #~ msgstr "OYA Gushaka a Kwiyandikisha" #, fuzzy #~ msgid "`asm' operand constraint incompatible with operand size" #~ msgstr "`Imbogamizi Na: Ingano" #, fuzzy #~ msgid "VOIDmode on an output" #~ msgstr "ku Ibisohoka" #, fuzzy #~ msgid "output operand is constant in `asm'" #~ msgstr "Ibisohoka ni in" #, fuzzy #~ msgid "insn does not satisfy its constraints:" #~ msgstr "OYA" #, fuzzy #~ msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d" #~ msgstr "Kugenzura... Bya Bya Na: Iheruka in ku" #, fuzzy #~ msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" #~ msgstr "Kugenzura... Ikitezwe: Ubwoko in ku" #, fuzzy #~ msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d" #~ msgstr "Kugenzura... Ikitezwe: Ubwoko Cyangwa in ku" #, fuzzy #~ msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d" #~ msgstr "Kugenzura... Ikitezwe: ITEGEKONGENGA in ku" #, fuzzy #~ msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d" #~ msgstr "Kugenzura... Ikitezwe: ITEGEKONGENGA Cyangwa in ku" #, fuzzy #~ msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" #~ msgstr "Kugenzura... Bya Bya Na: Iheruka in ku" #, fuzzy #~ msgid "RTL flag check: %s used with unexpected rtx code `%s' in %s, at %s:%d" #~ msgstr "Ibendera Kugenzura... Na: ITEGEKONGENGA in ku" #, fuzzy #~ msgid "jump to `%s' invalidly jumps into binding contour" #~ msgstr "Simbuka Kuri Bifatanya Umuzenguruko" #, fuzzy #~ msgid "label `%s' used before containing binding contour" #~ msgstr "Akarango Mbere Bifatanya Umuzenguruko" #, fuzzy #~ msgid "output operand constraint lacks `='" #~ msgstr "Ibisohoka Imbogamizi" #, fuzzy #~ msgid "output constraint `%c' for operand %d is not at the beginning" #~ msgstr "Ibisohoka Imbogamizi kugirango ni OYA ku i Itangiriro" #, fuzzy #~ msgid "operand constraint contains incorrectly positioned '+' or '='" #~ msgstr "Imbogamizi Kirimo Cyangwa" #, fuzzy #~ msgid "`%%' constraint used with last operand" #~ msgstr "`%%'Imbogamizi Na: Iheruka" #, fuzzy #~ msgid "matching constraint not valid in output operand" #~ msgstr "Imbogamizi OYA Byemewe in Ibisohoka" #, fuzzy #~ msgid "input operand constraint contains `%c'" #~ msgstr "Iyinjiza Imbogamizi Kirimo" #, fuzzy #~ msgid "matching constraint references invalid operand number" #~ msgstr "Imbogamizi Indango Sibyo Umubare" #, fuzzy #~ msgid "invalid punctuation `%c' in constraint" #~ msgstr "Sibyo in Imbogamizi" #, fuzzy #~ msgid "asm-specifier for variable `%s' conflicts with asm clobber list" #~ msgstr "kugirango IMPINDURAGACIRO Na: Urutonde" #, fuzzy #~ msgid "unknown register name `%s' in `asm'" #~ msgstr "Kitazwi Kwiyandikisha Izina: in" #, fuzzy #~ msgid "more than %d operands in `asm'" #~ msgstr "Birenzeho in" #, fuzzy #~ msgid "output number %d not directly addressable" #~ msgstr "Ibisohoka Umubare OYA" #, fuzzy #~ msgid "asm operand %d probably doesn't match constraints" #~ msgstr "BIHUYE" #, fuzzy #~ msgid "asm clobber conflict with output operand" #~ msgstr "Na: Ibisohoka" #, fuzzy #~ msgid "asm clobber conflict with input operand" #~ msgstr "Na: Iyinjiza" #, fuzzy #~ msgid "too many alternatives in `asm'" #~ msgstr "in" #, fuzzy #~ msgid "operand constraints for `asm' differ in number of alternatives" #~ msgstr "kugirango in Umubare Bya" #, fuzzy #~ msgid "duplicate asm operand name '%s'" #~ msgstr "Gusubiramo Izina:" #, fuzzy #~ msgid "missing close brace for named operand" #~ msgstr "Ibuze Gufunga kugirango" #, fuzzy #~ msgid "undefined named operand '%s'" #~ msgstr "kidasobanuye" #, fuzzy #~ msgid "unused variable `%s'" #~ msgstr "Kidakoreshwa IMPINDURAGACIRO" #, fuzzy #~ msgid "enumeration value `%s' not handled in switch" #~ msgstr "Agaciro OYA in Hindura" #, fuzzy #~ msgid "case value `%ld' not in enumerated type" #~ msgstr "Agaciro OYA in Ubwoko" #, fuzzy #~ msgid "case value `%ld' not in enumerated type `%s'" #~ msgstr "Agaciro OYA in Ubwoko" #, fuzzy #~ msgid "switch missing default case" #~ msgstr "Hindura Ibuze Mburabuzi" #, fuzzy #~ msgid "type size can't be explicitly evaluated" #~ msgstr "Ubwoko Ingano" #, fuzzy #~ msgid "variable-size type declared outside of any function" #~ msgstr "IMPINDURAGACIRO Ingano Ubwoko Hanze Bya Umumaro" #, fuzzy #~ msgid "size of `%s' is %d bytes" #~ msgstr "Ingano Bya ni Bayite" #, fuzzy #~ msgid "size of `%s' is larger than %d bytes" #~ msgstr "Ingano Bya ni Kinini Bayite" #, fuzzy #~ msgid "packed attribute causes inefficient alignment for `%s'" #~ msgstr "Ikiranga Itunganya kugirango" #, fuzzy #~ msgid "packed attribute is unnecessary for `%s'" #~ msgstr "Ikiranga ni kugirango" #, fuzzy #~ msgid "padding struct to align `%s'" #~ msgstr "Wuzuza: Kuri Gutondeka" #, fuzzy #~ msgid "padding struct size to alignment boundary" #~ msgstr "Wuzuza: Ingano Kuri Itunganya" #, fuzzy #~ msgid "packed attribute causes inefficient alignment" #~ msgstr "Ikiranga Itunganya" #, fuzzy #~ msgid "packed attribute is unnecessary" #~ msgstr "Ikiranga ni" #, fuzzy #~ msgid "cannot timevar_pop '%s' when top of timevars stack is '%s'" #~ msgstr "Ryari: Hejuru: Bya ni" #, fuzzy #~ msgid "" #~ "\n" #~ "Execution times (seconds)\n" #~ msgstr "Times amasogonda" # #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-# # sc/source\ui\src\autofmt.src:RID_SCDLG_AUTOFORMAT.STR_SUM.text # #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-# # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_PIVOT_TOTAL.text #, fuzzy #~ msgid " TOTAL :" #~ msgstr "Igiteranyo" #, fuzzy #~ msgid "time in %s: %ld.%06ld (%ld%%)\n" #~ msgstr "Igihe in" #, fuzzy #~ msgid "collect: tweaking %s in %s\n" #~ msgstr "in" #, fuzzy #~ msgid "ld returned %d exit status" #~ msgstr "Gusohoka Imimerere" #, fuzzy #~ msgid "Generate debugging info in default format" #~ msgstr "Ibisobanuro in Mburabuzi Imiterere" #, fuzzy #~ msgid "Generate debugging info in default extended format" #~ msgstr "Ibisobanuro in Mburabuzi Byongerewe... Imiterere" #, fuzzy #~ msgid "Generate STABS format debug info" #~ msgstr "Imiterere Kosora amakosa Ibisobanuro" #, fuzzy #~ msgid "Generate extended STABS format debug info" #~ msgstr "Byongerewe... Imiterere Kosora amakosa Ibisobanuro" #, fuzzy #~ msgid "Generate DWARF-1 format debug info" #~ msgstr "1. Imiterere Kosora amakosa Ibisobanuro" #, fuzzy #~ msgid "Generate extended DWARF-1 format debug info" #~ msgstr "Byongerewe... 1. Imiterere Kosora amakosa Ibisobanuro" #, fuzzy #~ msgid "Generate DWARF-2 debug info" #~ msgstr "2. Kosora amakosa Ibisobanuro" #, fuzzy #~ msgid "Generate XCOFF format debug info" #~ msgstr "Imiterere Kosora amakosa Ibisobanuro" #, fuzzy #~ msgid "Generate extended XCOFF format debug info" #~ msgstr "Byongerewe... Imiterere Kosora amakosa Ibisobanuro" #, fuzzy #~ msgid "Generate COFF format debug info" #~ msgstr "Imiterere Kosora amakosa Ibisobanuro" #, fuzzy #~ msgid "Generate VMS format debug info" #~ msgstr "Imiterere Kosora amakosa Ibisobanuro" #, fuzzy #~ msgid "Perform DWARF2 duplicate elimination" #~ msgstr "Gusubiramo" #, fuzzy #~ msgid "Do not store floats in registers" #~ msgstr "OYA in" #, fuzzy #~ msgid "Consider all mem refs through pointers as volatile" #~ msgstr "Byose mem Gihinguranya Nka" #, fuzzy #~ msgid "Consider all mem refs to global data to be volatile" #~ msgstr "Byose mem Kuri Ibyatanzwe Kuri" #, fuzzy #~ msgid "Consider all mem refs to static data to be volatile" #~ msgstr "Byose mem Kuri Ibyatanzwe Kuri" #, fuzzy #~ msgid "Defer popping functions args from stack until later" #~ msgstr "Imimaro Bivuye" #, fuzzy #~ msgid "When possible do not generate stack frames" #~ msgstr "OYA Amakadiri" #, fuzzy #~ msgid "Optimize sibling and tail recursive calls" #~ msgstr "Na Amahamagara:" #, fuzzy #~ msgid "Perform superblock formation via tail duplication" #~ msgstr "Biturutse" #, fuzzy #~ msgid "When running CSE, follow jumps to their targets" #~ msgstr "Kuri" #, fuzzy #~ msgid "Perform a number of minor, expensive optimizations" #~ msgstr "a Umubare Bya" #, fuzzy #~ msgid "Perform jump threading optimizations" #~ msgstr "Simbuka" #, fuzzy #~ msgid "Perform loop unrolling when iteration count is known" #~ msgstr "Ryari: IBARA ni" #, fuzzy #~ msgid "Perform loop unrolling for all loops" #~ msgstr "kugirango Byose" #, fuzzy #~ msgid "Generate prefetch instructions, if available, for arrays in loops" #~ msgstr "Amabwiriza NIBA Bihari kugirango in" #, fuzzy #~ msgid "Force all loop invariant computations out of loops" #~ msgstr "Byose Inyuma Bya" #, fuzzy #~ msgid "Strength reduce all loop general induction variables" #~ msgstr "Byose Rusange Ibihinduka" #, fuzzy #~ msgid "Store strings in writable data section" #~ msgstr "Ikurikiranyanyuguti in Ibyatanzwe Icyiciro" #, fuzzy #~ msgid "Copy memory operands into registers before using" #~ msgstr "Ububiko Mbere ikoresha" #, fuzzy #~ msgid "Copy memory address constants into regs before using" #~ msgstr "Ububiko Aderesi Mbere ikoresha" #, fuzzy #~ msgid "Allow function addresses to be held in registers" #~ msgstr "Umumaro Amaderesi Kuri in" #, fuzzy #~ msgid "Integrate simple functions into their callers" #~ msgstr "Byoroheje Imimaro" #, fuzzy #~ msgid "Generate code for funcs even if they are fully inlined" #~ msgstr "ITEGEKONGENGA kugirango ATARIIGIHARWE NIBA" #, fuzzy #~ msgid "Pay attention to the 'inline' keyword" #~ msgstr "Kuri i Ijambo- banze" #, fuzzy #~ msgid "Emit static const variables even if they are not used" #~ msgstr "Ibihinduka ATARIIGIHARWE NIBA OYA" #, fuzzy #~ msgid "Check for syntax errors, then stop" #~ msgstr "kugirango Amakosa Hanyuma Guhagarara" #, fuzzy #~ msgid "Mark data as shared rather than private" #~ msgstr "Ibyatanzwe Nka By'umwihariko" #, fuzzy #~ msgid "Enable saving registers around function calls" #~ msgstr "Mu kubika Umumaro Amahamagara:" #, fuzzy #~ msgid "Return 'short' aggregates in memory, not registers" #~ msgstr "in Ububiko OYA" #, fuzzy #~ msgid "Return 'short' aggregates in registers" #~ msgstr "in" #, fuzzy #~ msgid "Attempt to fill delay slots of branch instructions" #~ msgstr "Kuri Kuzuza Gutinda Siloti Bya Amabwiriza" #, fuzzy #~ msgid "Perform the global common subexpression elimination" #~ msgstr "i" #, fuzzy #~ msgid "Perform enhanced load motion during global subexpression elimination" #~ msgstr "Ibirimo" #, fuzzy #~ msgid "Perform store motion after global subexpression elimination" #~ msgstr "Nyuma" #, fuzzy #~ msgid "Perform the loop optimizations" #~ msgstr "i" #, fuzzy #~ msgid "Perform cross-jumping optimization" #~ msgstr "Kwambukiranya" #, fuzzy #~ msgid "Perform conversion of conditional jumps to branchless equivalents" #~ msgstr "Ihindurangero Bya Kuri" #, fuzzy #~ msgid "Perform conversion of conditional jumps to conditional execution" #~ msgstr "Ihindurangero Bya Kuri" #, fuzzy #~ msgid "Run CSE pass after loop optimizations" #~ msgstr "Nyuma" #, fuzzy #~ msgid "Run the loop optimizer twice" #~ msgstr "i" #, fuzzy #~ msgid "Delete useless null pointer checks" #~ msgstr "NTAGIHARI Mweretsi" #, fuzzy #~ msgid "Reschedule instructions before register allocation" #~ msgstr "Amabwiriza Mbere Kwiyandikisha" #, fuzzy #~ msgid "Reschedule instructions after register allocation" #~ msgstr "Amabwiriza Nyuma Kwiyandikisha" #, fuzzy #~ msgid "Enable scheduling across basic blocks" #~ msgstr "Kwambukiranya BASIC" #, fuzzy #~ msgid "Allow speculative motion of non-loads" #~ msgstr "Bya" #, fuzzy #~ msgid "Allow speculative motion of some loads" #~ msgstr "Bya" #, fuzzy #~ msgid "Allow speculative motion of more loads" #~ msgstr "Bya Birenzeho" #, fuzzy #~ msgid "Replace add,compare,branch with branch on count reg" #~ msgstr "Kongeramo Kugereranya# Na: ku IBARA" #, fuzzy #~ msgid "Generate position independent code, if possible" #~ msgstr "Ibirindiro ITEGEKONGENGA NIBA" #, fuzzy #~ msgid "Enable exception handling" #~ msgstr "Irengayobora(-)" #, fuzzy #~ msgid "Just generate unwind tables for exception handling" #~ msgstr "Imbonerahamwe kugirango Irengayobora(-)" #, fuzzy #~ msgid "Generate unwind tables exact at each instruction boundary" #~ msgstr "Imbonerahamwe NYACYO ku" #, fuzzy #~ msgid "Support synchronous non-call exceptions" #~ msgstr "Amarengayobora" #, fuzzy #~ msgid "Insert arc based program profiling code" #~ msgstr "Agaheto Porogaramu ITEGEKONGENGA" #, fuzzy #~ msgid "Create data files needed by gcov" #~ msgstr "Ibyatanzwe Idosiye ku" #, fuzzy #~ msgid "Use profiling information for branch probabilities" #~ msgstr "Ibisobanuro kugirango" #, fuzzy #~ msgid "Enable basic program profiling code" #~ msgstr "BASIC Porogaramu ITEGEKONGENGA" #, fuzzy #~ msgid "Reorder basic blocks to improve code placement" #~ msgstr "BASIC Kuri ITEGEKONGENGA Ishyira mu mwanya" #, fuzzy #~ msgid "Reorder functions to improve code placement" #~ msgstr "Imimaro Kuri ITEGEKONGENGA Ishyira mu mwanya" #, fuzzy #~ msgid "Do the register renaming optimization pass" #~ msgstr "i Kwiyandikisha" #, fuzzy #~ msgid "Do the register copy-propagation optimization pass" #~ msgstr "i Kwiyandikisha Gukoporora" #, fuzzy #~ msgid "Do not put uninitialized globals in the common section" #~ msgstr "OYA Gushyira Itatangijwe in i Icyiciro" #, fuzzy #~ msgid "Do not generate .size directives" #~ msgstr "OYA Ingano" #, fuzzy #~ msgid "place each function into its own section" #~ msgstr "Umumaro Icyiciro" #, fuzzy #~ msgid "place data items into their own section" #~ msgstr "Ibyatanzwe Icyiciro" #, fuzzy #~ msgid "Add extra commentary to assembler output" #~ msgstr "Birenga Kuri Ibisohoka" #, fuzzy #~ msgid "Output GNU ld formatted global initializers" #~ msgstr "Byahanaguwe" #, fuzzy #~ msgid "Enables a register move optimization" #~ msgstr "a Kwiyandikisha Kwimura" #, fuzzy #~ msgid "Do the full regmove optimization pass" #~ msgstr "i" #, fuzzy #~ msgid "Pack structure members together without holes" #~ msgstr "Imiterere" #, fuzzy #~ msgid "Insert stack checking code into the program" #~ msgstr "ITEGEKONGENGA i Porogaramu" #, fuzzy #~ msgid "Specify that arguments may alias each other & globals" #~ msgstr "ingingo Gicurasi Irihimbano Ikindi" #, fuzzy #~ msgid "Assume arguments may alias globals but not each other" #~ msgstr "ingingo Gicurasi Irihimbano OYA Ikindi" #, fuzzy #~ msgid "Assume arguments do not alias each other or globals" #~ msgstr "ingingo OYA Irihimbano Ikindi Cyangwa" #, fuzzy #~ msgid "Assume strict aliasing rules apply" #~ msgstr "Gukurikiza" #, fuzzy #~ msgid "Align the start of loops" #~ msgstr "i Gutangira Bya" #, fuzzy #~ msgid "Align labels which are only reached by jumping" #~ msgstr "Uturango... ku" #, fuzzy #~ msgid "Align all labels" #~ msgstr "Byose Uturango..." #, fuzzy #~ msgid "Align the start of functions" #~ msgstr "i Gutangira Bya Imimaro" #, fuzzy #~ msgid "Attempt to merge identical constants across compilation units" #~ msgstr "Kuri Gukomatanya birasa Kwambukiranya" #, fuzzy #~ msgid "Attempt to merge identical constants and constant variables" #~ msgstr "Kuri Gukomatanya birasa Na Ibihinduka" #, fuzzy #~ msgid "Suppress output of instruction numbers and line number notes in debugging dumps" #~ msgstr "Ibisohoka Bya Imibare Na Umurongo Umubare Ibisobanuro in" #, fuzzy #~ msgid "Instrument function entry/exit with profiling calls" #~ msgstr "Umumaro Icyinjijwe Gusohoka Na: Amahamagara:" #, fuzzy #~ msgid "Put zero initialized data in the bss section" #~ msgstr "Zeru Ibyatanzwe in i Icyiciro" #, fuzzy #~ msgid "Enable aggressive SSA dead code elimination" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "External symbols have a leading underscore" #~ msgstr "Ibimenyetso a Nyobora" #, fuzzy #~ msgid "Enables an rtl peephole pass run before sched2" #~ msgstr "Gukoresha Mbere" #, fuzzy #~ msgid "Assume no NaNs or +-Infs are generated" #~ msgstr "Oya Cyangwa" #, fuzzy #~ msgid "Enables guessing of branch probabilities" #~ msgstr "Bya" #, fuzzy #~ msgid "Set errno after built-in math functions" #~ msgstr "Nyuma in Imibare Imimaro" #, fuzzy #~ msgid "Floating-point operations can trap" #~ msgstr "Akadomo Ibikorwa:" #, fuzzy #~ msgid "Allow math optimizations that may violate IEEE or ANSI standards" #~ msgstr "Imibare Gicurasi Cyangwa" #, fuzzy #~ msgid "Disable optimizations observable by IEEE signaling NaNs" #~ msgstr "ku" #, fuzzy #~ msgid "Generate code to check bounds before indexing arrays" #~ msgstr "ITEGEKONGENGA Kuri Kugenzura... Mbere gushyiraho umugereka" #, fuzzy #~ msgid "Convert floating point constant to single precision constant" #~ msgstr "Bihindagurika Akadomo Kuri UMWE" #, fuzzy #~ msgid "Report time taken by each compiler pass at end of run" #~ msgstr "Igihe ku ku Impera Bya Gukoresha" #, fuzzy #~ msgid "Report on permanent memory allocation at end of run" #~ msgstr "ku Ububiko ku Impera Bya Gukoresha" #, fuzzy #~ msgid "Trap for signed overflow in addition / subtraction / multiplication" #~ msgstr "kugirango Byarenze urugero in Guteranya+ Gukuramo Gukuba(*)" #, fuzzy #~ msgid "Use graph coloring register allocation." #~ msgstr "Kwiyandikisha" #, fuzzy #~ msgid "Compile just for ISO C90" #~ msgstr "kugirango" #, fuzzy #~ msgid "Determine language standard" #~ msgstr "Ururimi Bisanzwe" #, fuzzy #~ msgid "Make bit-fields by unsigned by default" #~ msgstr "Imyanya ku Bitashizweho umukono ku Mburabuzi" #, fuzzy #~ msgid "Make 'char' be signed by default" #~ msgstr "ku Mburabuzi" #, fuzzy #~ msgid "Make 'char' be unsigned by default" #~ msgstr "Bitashizweho umukono ku Mburabuzi" #, fuzzy #~ msgid "Do not recognize the 'asm' keyword" #~ msgstr "OYA i Ijambo- banze" #, fuzzy #~ msgid "Do not recognize any built in functions" #~ msgstr "OYA in Imimaro" #, fuzzy #~ msgid "Assume normal C execution environment" #~ msgstr "Bisanzwe C" #, fuzzy #~ msgid "Assume that standard libraries & main might not exist" #~ msgstr "Bisanzwe Amasomero OYA" #, fuzzy #~ msgid "Allow different types as args of ? operator" #~ msgstr "Nka Bya Mukoresha" #, fuzzy #~ msgid "Allow the use of $ inside identifiers" #~ msgstr "i Gukoresha Bya Mo Imbere" #, fuzzy #~ msgid "Use the same size for double as for float" #~ msgstr "i Ingano kugirango MAHARAKUBIRI Nka kugirango Kureremba" #, fuzzy #~ msgid "Use the smallest fitting integer to hold enums" #~ msgstr "i Gitoya Umubare wuzuye Kuri" #, fuzzy #~ msgid "Override the underlying type for wchar_t to `unsigned short'" #~ msgstr "i Ubwoko kugirango Kuri Bitashizweho umukono" #, fuzzy #~ msgid "Enable most warning messages" #~ msgstr "Iburira Ubutumwa" #, fuzzy #~ msgid "Warn about casting functions to incompatible types" #~ msgstr "Ibyerekeye Imimaro Kuri" #, fuzzy #~ msgid "Warn about functions which might be candidates for format attributes" #~ msgstr "Ibyerekeye Imimaro kugirango Imiterere Ibiranga" #, fuzzy #~ msgid "Warn about casts which discard qualifiers" #~ msgstr "Ibyerekeye Kwanga" #, fuzzy #~ msgid "Warn about subscripts whose type is 'char'" #~ msgstr "Ibyerekeye bya Ubwoko ni" #, fuzzy #~ msgid "Warn if nested comments are detected" #~ msgstr "NIBA Ibisobanuro" #, fuzzy #~ msgid "Warn about possibly confusing type conversions" #~ msgstr "Ibyerekeye Ubwoko" #, fuzzy #~ msgid "Do not warn about compile-time integer division by zero" #~ msgstr "OYA Ibyerekeye Gukusanya Igihe Umubare wuzuye ku Zeru" #, fuzzy #~ msgid "Warn about testing equality of floating point numbers" #~ msgstr "Ibyerekeye Bya Bihindagurika Akadomo Imibare" #, fuzzy #~ msgid "Warn about printf/scanf/strftime/strfmon format anomalies" #~ msgstr "Ibyerekeye Imiterere" #, fuzzy #~ msgid "Don't warn about too many arguments to format functions" #~ msgstr "Ibyerekeye ingingo Kuri Imiterere Imimaro" #, fuzzy #~ msgid "Warn about non-string-literal format strings" #~ msgstr "Ibyerekeye Ikurikiranyanyuguti Imiterere Ikurikiranyanyuguti" #, fuzzy #~ msgid "Warn about possible security problems with format functions" #~ msgstr "Ibyerekeye Umutekano Na: Imiterere Imimaro" #, fuzzy #~ msgid "Don't warn about strftime formats yielding 2 digit years" #~ msgstr "Ibyerekeye Imiterere 2. IMYAKA" #, fuzzy #~ msgid "Warn about implicit function declarations" #~ msgstr "Ibyerekeye Umumaro" #, fuzzy #~ msgid "Warn when a declaration does not specify a type" #~ msgstr "Ryari: a OYA a Ubwoko" #, fuzzy #~ msgid "Warn about the use of the #import directive" #~ msgstr "Ibyerekeye i Gukoresha Bya i Kuzana" #, fuzzy #~ msgid "Do not warn about using 'long long' when -pedantic" #~ msgstr "OYA Ibyerekeye ikoresha Ryari:" #, fuzzy #~ msgid "Warn about suspicious declarations of main" #~ msgstr "Ibyerekeye Bya" #, fuzzy #~ msgid "Warn about possibly missing braces around initializers" #~ msgstr "Ibyerekeye Ibuze Ingirwadusodeko" #, fuzzy #~ msgid "Warn about global funcs without previous declarations" #~ msgstr "Ibyerekeye Ibanjirije" #, fuzzy #~ msgid "Warn about global funcs without prototypes" #~ msgstr "Ibyerekeye" #, fuzzy #~ msgid "Warn about use of multicharacter literals" #~ msgstr "Ibyerekeye Gukoresha Bya" #, fuzzy #~ msgid "Warn about externs not at file scope level" #~ msgstr "Ibyerekeye OYA ku IDOSIYE Ingano: urwego" #, fuzzy #~ msgid "Warn about possible missing parentheses" #~ msgstr "Ibyerekeye Ibuze" #, fuzzy #~ msgid "Warn about function pointer arithmetic" #~ msgstr "Ibyerekeye Umumaro Mweretsi" #, fuzzy #~ msgid "Warn about multiple declarations of the same object" #~ msgstr "Ibyerekeye Igikubo Bya i Igikoresho" #, fuzzy #~ msgid "Warn whenever a function's return-type defaults to int" #~ msgstr "a Garuka Ubwoko Kuri INT" #, fuzzy #~ msgid "Warn about possible violations of sequence point rules" #~ msgstr "Ibyerekeye Bya Akadomo" #, fuzzy #~ msgid "Warn about signed/unsigned comparisons" #~ msgstr "Ibyerekeye Bitashizweho umukono" #, fuzzy #~ msgid "Warn about non-prototyped function decls" #~ msgstr "Ibyerekeye Umumaro" #, fuzzy #~ msgid "Warn about constructs whose meanings change in ISO C" #~ msgstr "Ibyerekeye bya Guhindura>> in C" #, fuzzy #~ msgid "Warn when trigraphs are encountered" #~ msgstr "Ryari:" #, fuzzy #~ msgid "Warn about unrecognized pragmas" #~ msgstr "Ibyerekeye" #, fuzzy #~ msgid "Mark strings as 'const char *'" #~ msgstr "Ikurikiranyanyuguti Nka INYUGUTI" #, fuzzy #~ msgid "Warn when a function is unused" #~ msgstr "Ryari: a Umumaro ni Kidakoreshwa" #, fuzzy #~ msgid "Warn when a label is unused" #~ msgstr "Ryari: a Akarango ni Kidakoreshwa" #, fuzzy #~ msgid "Warn when a function parameter is unused" #~ msgstr "Ryari: a Umumaro ni Kidakoreshwa" #, fuzzy #~ msgid "Warn when a variable is unused" #~ msgstr "Ryari: a IMPINDURAGACIRO ni Kidakoreshwa" #, fuzzy #~ msgid "Warn when an expression value is unused" #~ msgstr "Ryari: imvugo Agaciro ni Kidakoreshwa" #, fuzzy #~ msgid "Do not suppress warnings from system headers" #~ msgstr "OYA Iburira Bivuye Sisitemu Imitwe" #, fuzzy #~ msgid "Treat all warnings as errors" #~ msgstr "Byose Iburira Nka Amakosa" #, fuzzy #~ msgid "Warn when one local variable shadows another" #~ msgstr "Ryari: IMPINDURAGACIRO" #, fuzzy #~ msgid "Warn about enumerated switches, with no default, missing a case" #~ msgstr "Ibyerekeye Na: Oya Mburabuzi Ibuze a" #, fuzzy #~ msgid "Warn about enumerated switches missing a default case" #~ msgstr "Ibyerekeye Ibuze a Mburabuzi" #, fuzzy #~ msgid "Warn about all enumerated switches missing a specific case" #~ msgstr "Ibyerekeye Byose Ibuze a" #, fuzzy #~ msgid "Warn about returning structures, unions or arrays" #~ msgstr "Ibyerekeye Cyangwa" #, fuzzy #~ msgid "Warn about pointer casts which increase alignment" #~ msgstr "Ibyerekeye Mweretsi Itunganya" #, fuzzy #~ msgid "Warn about code that will never be executed" #~ msgstr "Ibyerekeye ITEGEKONGENGA Nta narimwe" #, fuzzy #~ msgid "Warn about uninitialized automatic variables" #~ msgstr "Ibyerekeye Itatangijwe Byikoresha Ibihinduka" #, fuzzy #~ msgid "Warn when an inlined function cannot be inlined" #~ msgstr "Ryari: Umumaro" #, fuzzy #~ msgid "Warn when the packed attribute has no effect on struct layout" #~ msgstr "Ryari: i Ikiranga Oya INGARUKA ku Imigaragarire" #, fuzzy #~ msgid "Warn when padding is required to align struct members" #~ msgstr "Ryari: Wuzuza: ni Bya ngombwa Kuri Gutondeka" #, fuzzy #~ msgid "Warn when an optimization pass is disabled" #~ msgstr "Ryari: ni Yahagaritswe" #, fuzzy #~ msgid "Warn about uses of __attribute__((deprecated)) declarations" #~ msgstr "Ibyerekeye Bya Ikiranga Bitemewe." #, fuzzy #~ msgid "Warn about functions which might be candidates for attribute noreturn" #~ msgstr "Ibyerekeye Imimaro kugirango Ikiranga" #, fuzzy #~ msgid "Warn about code which might break the strict aliasing rules" #~ msgstr "Ibyerekeye ITEGEKONGENGA itandukanya i" #, fuzzy #~ msgid "invalid option `%s'" #~ msgstr "Sibyo Ihitamo" #, fuzzy #~ msgid "`%s' declared `static' but never defined" #~ msgstr "`%s'Nta narimwe" #, fuzzy #~ msgid "`%s' defined but not used" #~ msgstr "`%s'OYA" #, fuzzy #~ msgid "invalid register name `%s' for register variable" #~ msgstr "Sibyo Kwiyandikisha Izina: kugirango Kwiyandikisha IMPINDURAGACIRO" #, fuzzy #~ msgid " -ffixed- Mark as being unavailable to the compiler\n" #~ msgstr "-Kwiyandikisha Kwiyandikisha Nka Kuri i" #, fuzzy #~ msgid " -fcall-used- Mark as being corrupted by function calls\n" #~ msgstr "-Kwiyandikisha Kwiyandikisha Nka ku Umumaro" #, fuzzy #~ msgid " -fcall-saved- Mark as being preserved across functions\n" #~ msgstr "-Kwiyandikisha Kwiyandikisha Nka Kwambukiranya" #, fuzzy #~ msgid " -finline-limit= Limits the size of inlined functions to \n" #~ msgstr "-Umubare i Ingano Bya Imimaro Kuri Umubare" #, fuzzy #~ msgid " -fmessage-length= Limits diagnostics messages lengths to characters per line. 0 suppresses line-wrapping\n" #~ msgstr "-Uburebure Umubare Ubutumwa Kuri Umubare Inyuguti Umurongo 0 Umurongo" #, fuzzy #~ msgid " -fdiagnostics-show-location=[once | every-line] Indicates how often source location information should be emitted, as prefix, at the beginning of diagnostics when line-wrapping\n" #~ msgstr "-Garagaza Ahantu Rimwe buri Umurongo Inkomoko Ahantu Ibisobanuro Nka Imbanziriza ku i Itangiriro Bya Ryari: Umurongo" #, fuzzy #~ msgid " -ftls-model=[global-dynamic | local-dynamic | initial-exec | local-exec] Indicates the default thread-local storage code generation model\n" #~ msgstr "-Urugero i Mburabuzi Urudodo ITEGEKONGENGA" #, fuzzy #~ msgid " -O[number] Set optimization level to [number]\n" #~ msgstr "-Umubare urwego Kuri Umubare" #, fuzzy #~ msgid " -Os Optimize for space rather than speed\n" #~ msgstr "-kugirango Umwanya" #, fuzzy #~ msgid " -pedantic Issue warnings needed by strict compliance to ISO C\n" #~ msgstr "-Iburira ku Kuri" #, fuzzy #~ msgid " -pedantic-errors Like -pedantic except that errors are produced\n" #~ msgstr "-Amakosa Amakosa" #, fuzzy #~ msgid " -w Suppress warnings\n" #~ msgstr "-W" #, fuzzy #~ msgid " -W Enable extra warnings\n" #~ msgstr "-Birenga" #, fuzzy #~ msgid " -Wunused Enable unused warnings\n" #~ msgstr "-Kidakoreshwa" #, fuzzy #~ msgid " -Wlarger-than- Warn if an object is larger than bytes\n" #~ msgstr "-Umubare NIBA Igikoresho ni Kinini Umubare" #, fuzzy #~ msgid " -p Enable function profiling\n" #~ msgstr "-P Umumaro" #, fuzzy #~ msgid " -o Place output into \n" #~ msgstr "-o IDOSIYE Ibisohoka IDOSIYE" #, fuzzy #~ msgid "" #~ " -G Put global and static data smaller than \n" #~ " bytes into a special section (on some targets)\n" #~ msgstr "-Umubare Na Ibyatanzwe Gitoya Umubare Bayite a Bidasanzwe Icyiciro ku" #, fuzzy #~ msgid " -aux-info Emit declaration info into \n" #~ msgstr "-Ibisobanuro IDOSIYE Ibisobanuro IDOSIYE" #, fuzzy #~ msgid " -quiet Do not display functions compiled or elapsed time\n" #~ msgstr "-OYA Kugaragaza Imimaro Cyangwa" #, fuzzy #~ msgid " -version Display the compiler's version\n" #~ msgstr "-Verisiyo i" #, fuzzy #~ msgid " -d[letters] Enable dumps from specific passes of the compiler\n" #~ msgstr "-D Bivuye Bya i" #, fuzzy #~ msgid " -dumpbase Base name to be used for dumps from specific passes\n" #~ msgstr "-IDOSIYE Base Izina: Kuri kugirango Bivuye" #, fuzzy #~ msgid " -fsched-verbose= Set the verbosity level of the scheduler\n" #~ msgstr "-Umubare i urwego Bya i" #, fuzzy #~ msgid " --help Display this information\n" #~ msgstr "--Ifashayobora iyi" #, fuzzy #~ msgid "" #~ "\n" #~ "Language specific options:\n" #~ msgstr "Amahitamo" #, fuzzy #~ msgid " %-23.23s [undocumented]\n" #~ msgstr "" #~ "%-23.Project- Id- Version: basctl\n" #~ "POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n" #~ "PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n" #~ "Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n" #~ "Content- Type: text/ plain; charset= UTF- 8\n" #~ "Content- Transfer- Encoding: 8bit\n" #~ "X- Generator: KBabel 1. 0\n" #~ "." #, fuzzy #~ msgid "" #~ "\n" #~ "There are undocumented %s specific options as well.\n" #~ msgstr "Amahitamo Nka" #, fuzzy #~ msgid "" #~ "\n" #~ " Options for %s:\n" #~ msgstr "kugirango" #, fuzzy #~ msgid "" #~ "\n" #~ "Target specific options:\n" #~ msgstr "Amahitamo" #, fuzzy #~ msgid " -m%-23.23s [undocumented]\n" #~ msgstr "-M." #, fuzzy #~ msgid "" #~ "\n" #~ "There are undocumented target specific options as well.\n" #~ msgstr "Intego Amahitamo Nka" #, fuzzy #~ msgid " They exist, but they are not documented.\n" #~ msgstr "OYA" #, fuzzy #~ msgid "unrecognized gcc debugging option: %c" #~ msgstr "Ihitamo" #, fuzzy #~ msgid "`%s': unknown tls-model option" #~ msgstr "`%s':Kitazwi TLS Urugero Ihitamo" #, fuzzy #~ msgid "unrecognized register name `%s'" #~ msgstr "Kwiyandikisha Izina:" #, fuzzy #~ msgid "unrecognized option `%s'" #~ msgstr "Ihitamo" #, fuzzy #~ msgid "-Wid-clash-LEN is no longer supported" #~ msgstr "-ni Oya" #, fuzzy #~ msgid "use -gdwarf -g%d for DWARF v1, level %d" #~ msgstr "Gukoresha g kugirango urwego" #, fuzzy #~ msgid "use -gdwarf-2 for DWARF v2" #~ msgstr "Gukoresha 2. kugirango" #, fuzzy #~ msgid "ignoring option `%s' due to invalid debug level specification" #~ msgstr "Ihitamo Kuri Sibyo Kosora amakosa urwego" #, fuzzy #~ msgid "`%s': unknown or unsupported -g option" #~ msgstr "`%s':Kitazwi Cyangwa g Ihitamo" #, fuzzy #~ msgid "`%s' ignored, conflicts with `-g%s'" #~ msgstr "`%s'Na: g" #, fuzzy #~ msgid "-param option missing argument" #~ msgstr "-Ihitamo Ibuze" #, fuzzy #~ msgid "invalid --param option: %s" #~ msgstr "Sibyo Ihitamo" #, fuzzy #~ msgid "invalid parameter value `%s'" #~ msgstr "Sibyo Agaciro" #, fuzzy #~ msgid "" #~ "%s%s%s version %s (%s)\n" #~ "%s\tcompiled by GNU C version %s.\n" #~ "%s%s%s version %s (%s) compiled by CC.\n" #~ msgstr "%s%s%sVerisiyo ku C Verisiyo Verisiyo ku" #, fuzzy #~ msgid "%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n" #~ msgstr "%s%sGGCGITO Kwagura GITO" #, fuzzy #~ msgid "options passed: " #~ msgstr "Amahitamo" #, fuzzy #~ msgid "options enabled: " #~ msgstr "Amahitamo Bikora" #, fuzzy #~ msgid "can't open %s for writing" #~ msgstr "Gufungura kugirango" #, fuzzy #~ msgid "ignoring command line option '%s'" #~ msgstr "Komandi: Umurongo Ihitamo" #, fuzzy #~ msgid "(it is valid for %s but not the selected language)" #~ msgstr "(ni Byemewe kugirango OYA i Byahiswemo Ururimi" #, fuzzy #~ msgid "-Wuninitialized is not supported without -O" #~ msgstr "-ni OYA" #, fuzzy #~ msgid "instruction scheduling not supported on this target machine" #~ msgstr "OYA ku iyi Intego" #, fuzzy #~ msgid "this target machine does not have delayed branches" #~ msgstr "iyi Intego OYA" #, fuzzy #~ msgid "-f%sleading-underscore not supported on this target machine" #~ msgstr "-F OYA ku iyi Intego" #, fuzzy #~ msgid "-ffunction-sections not supported for this target" #~ msgstr "-Ibyatoranyijwe OYA kugirango iyi Intego" #, fuzzy #~ msgid "-fdata-sections not supported for this target" #~ msgstr "-Ibyatoranyijwe OYA kugirango iyi Intego" #, fuzzy #~ msgid "-ffunction-sections disabled; it makes profiling impossible" #~ msgstr "-Ibyatoranyijwe Yahagaritswe" #, fuzzy #~ msgid "-fprefetch-loop-arrays not supported for this target" #~ msgstr "-OYA kugirango iyi Intego" #, fuzzy #~ msgid "-fprefetch-loop-arrays not supported for this target (try -march switches)" #~ msgstr "-OYA kugirango iyi Intego Werurwe" #, fuzzy #~ msgid "-fprefetch-loop-arrays is not supported with -Os" #~ msgstr "-ni OYA Na:" #, fuzzy #~ msgid "-ffunction-sections may affect debugging on some targets" #~ msgstr "-Ibyatoranyijwe Gicurasi ku" #, fuzzy #~ msgid "error writing to %s" #~ msgstr "Ikosa Kuri" #, fuzzy #~ msgid "error closing %s" #~ msgstr "Ikosa" #, fuzzy #~ msgid "could not open dump file `%s'" #~ msgstr "OYA Gufungura IDOSIYE" #, fuzzy #~ msgid "ignoring unknown option `%.*s' in `-f%s'" #~ msgstr "Kitazwi Ihitamo in F" #, fuzzy #~ msgid "arrays of functions are not meaningful" #~ msgstr "Bya Imimaro OYA" #, fuzzy #~ msgid "function return type cannot be function" #~ msgstr "Umumaro Garuka Ubwoko Umumaro" #, fuzzy #~ msgid "invalid initializer for bit string" #~ msgstr "Sibyo kugirango Ikurikiranyanyuguti" #, fuzzy #~ msgid "tree check: expected %s, have %s in %s, at %s:%d" #~ msgstr "Kugenzura... Ikitezwe: in ku" #, fuzzy #~ msgid "tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d" #~ msgstr "Kugenzura... Ikitezwe: ishuri in ku" #, fuzzy #~ msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d" #~ msgstr "Kugenzura... birabonetse Bya Na: in ku" #, fuzzy #~ msgid "%s causes a section type conflict" #~ msgstr "%sa Icyiciro Ubwoko" #, fuzzy #~ msgid "register name not specified for `%s'" #~ msgstr "Kwiyandikisha Izina: OYA kugirango" #, fuzzy #~ msgid "invalid register name for `%s'" #~ msgstr "Sibyo Kwiyandikisha Izina: kugirango" #, fuzzy #~ msgid "data type of `%s' isn't suitable for a register" #~ msgstr "Ibyatanzwe Ubwoko Bya si kugirango a Kwiyandikisha" #, fuzzy #~ msgid "register specified for `%s' isn't suitable for data type" #~ msgstr "Kwiyandikisha kugirango si kugirango Ibyatanzwe Ubwoko" #, fuzzy #~ msgid "global register variable has initial value" #~ msgstr "Kwiyandikisha IMPINDURAGACIRO Agaciro" #, fuzzy #~ msgid "volatile register variables don't work as you might wish" #~ msgstr "Kwiyandikisha Ibihinduka Akazi Nka" #, fuzzy #~ msgid "register name given for non-register variable `%s'" #~ msgstr "Kwiyandikisha Izina: kugirango Kwiyandikisha IMPINDURAGACIRO" #, fuzzy #~ msgid "alignment of `%s' is greater than maximum object file alignment. Using %d" #~ msgstr "Itunganya Bya ni Biruta Kinini Igikoresho IDOSIYE Itunganya" #, fuzzy #~ msgid "thread-local COMMON data not implemented" #~ msgstr "Urudodo Ibyatanzwe OYA" #, fuzzy #~ msgid "requested alignment for %s is greater than implemented alignment of %d" #~ msgstr "Itunganya kugirango ni Biruta Itunganya Bya" #, fuzzy #~ msgid "initializer for integer value is too complicated" #~ msgstr "kugirango Umubare wuzuye Agaciro ni" #, fuzzy #~ msgid "initializer for floating value is not a floating constant" #~ msgstr "kugirango Bihindagurika Agaciro ni OYA a Bihindagurika" #, fuzzy #~ msgid "unknown set constructor type" #~ msgstr "Kitazwi Gushyiraho Ubwoko" #, fuzzy #~ msgid "invalid initial value for member `%s'" #~ msgstr "Sibyo Agaciro kugirango" #, fuzzy #~ msgid "weak declaration of `%s' must precede definition" #~ msgstr "Bya Insobanuro" #, fuzzy #~ msgid "weak declaration of `%s' after first use results in unspecified behavior" #~ msgstr "Bya Nyuma Itangira Gukoresha Ibisubizo ku in imyitwarire" #, fuzzy #~ msgid "weak declaration of `%s' must be public" #~ msgstr "Bya Rusange" #, fuzzy #~ msgid "weak declaration of `%s' not supported" #~ msgstr "Bya OYA" #, fuzzy #~ msgid "only weak aliases are supported in this configuration" #~ msgstr "Irihimbano in iyi Iboneza" #, fuzzy #~ msgid "alias definitions not supported in this configuration; ignored" #~ msgstr "Irihimbano OYA in iyi Iboneza" #, fuzzy #~ msgid "visibility attribute not supported in this configuration; ignored" #~ msgstr "Ukugaragara Ikiranga OYA in iyi Iboneza" #, fuzzy #~ msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d" #~ msgstr "Kitaboneka Imbonerahamwe Ikigize: Inyuma Bya in ku" #, fuzzy #~ msgid "no sclass for %s stab (0x%x)\n" #~ msgstr "Oya kugirango" #, fuzzy #~ msgid "#`%s' not supported by %s#" #~ msgstr "#`%s'OYA ku" #, fuzzy #~ msgid "The maximum number of instructions in a single function eligible for inlining" #~ msgstr "Kinini Umubare Bya Amabwiriza in a UMWE Umumaro kugirango" #, fuzzy #~ msgid "The maximum number of instructions when automatically inlining" #~ msgstr "Kinini Umubare Bya Amabwiriza Ryari: ku buryo bwikora" #, fuzzy #~ msgid "The maximum number of instructions by repeated inlining before gcc starts to throttle inlining" #~ msgstr "Kinini Umubare Bya Amabwiriza ku byasubiyemo Mbere Kuri" #, fuzzy #~ msgid "The slope of the linear function throttling inlining after the recursive inlining limit has been reached is given by the negative reciprocal value of this parameter" #~ msgstr "IMANURA Bya i By'umurongo Umumaro Nyuma i ni ku i Agaciro Bya iyi" #, fuzzy #~ msgid "The number of instructions in a single functions still eligible to inlining after a lot recursive inlining" #~ msgstr "Umubare Bya Amabwiriza in a UMWE Imimaro Kuri Nyuma a" #, fuzzy #~ msgid "The maximum number of instructions for the RTL inliner" #~ msgstr "Kinini Umubare Bya Amabwiriza kugirango i" #, fuzzy #~ msgid "The maximum number of instructions to consider to fill a delay slot" #~ msgstr "Kinini Umubare Bya Amabwiriza Kuri Kuri Kuzuza a Gutinda" #, fuzzy #~ msgid "The maximum number of instructions to consider to find accurate live register information" #~ msgstr "Kinini Umubare Bya Amabwiriza Kuri Kuri Gushaka Kwiyandikisha Ibisobanuro" #, fuzzy #~ msgid "The maximum length of scheduling's pending operations list" #~ msgstr "Kinini Uburebure Bya Ibikorwa: Urutonde" #, fuzzy #~ msgid "The maximum amount of memory to be allocated by GCSE" #~ msgstr "Kinini Igiteranyo Bya Ububiko Kuri ku" #, fuzzy #~ msgid "The maximum number of passes to make when doing GCSE" #~ msgstr "Kinini Umubare Bya Kuri Ubwoko Ryari:" #, fuzzy #~ msgid "The maximum number of instructions to consider to unroll in a loop" #~ msgstr "Kinini Umubare Bya Amabwiriza Kuri Kuri in a" #, fuzzy #~ msgid "Select fraction of the maximal count of repetitions of basic block in program given basic block needs to have to be considered hot" #~ msgstr "Imigabane Bya i IBARA Bya Bya BASIC Funga in Porogaramu BASIC Funga Kuri Kuri" #, fuzzy #~ msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot" #~ msgstr "Imigabane Bya i Ubwisubire Bya Bya BASIC Funga in Umumaro BASIC Funga Kuri Kuri" #, fuzzy #~ msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available" #~ msgstr "Ijanisha Bya Umumaro ku Ubwisubire ku Ryari: Ibijyana ni Bihari" #, fuzzy #~ msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is not available" #~ msgstr "Ijanisha Bya Umumaro ku Ubwisubire ku Ryari: Ibijyana ni OYA Bihari" #, fuzzy #~ msgid "Maximal code growth caused by tail duplication (in percents)" #~ msgstr "ITEGEKONGENGA IKURA ku in" #, fuzzy #~ msgid "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percents)" #~ msgstr "Ihindurakerekezo IKURA NIBA i Ihindurakerekezo Imishobokere Bya ni Birutwa iyi in" #, fuzzy #~ msgid "Stop forward growth if the probability of best edge is less than this threshold (in percents). Used when profile feedback is available" #~ msgstr "Imbere IKURA NIBA i Imishobokere Bya ni Birutwa iyi in Ryari: Ibijyana ni Bihari" #, fuzzy #~ msgid "Stop forward growth if the probability of best edge is less than this threshold (in percents). Used when profile feedback is not available" #~ msgstr "Imbere IKURA NIBA i Imishobokere Bya ni Birutwa iyi in Ryari: Ibijyana ni OYA Bihari" #, fuzzy #~ msgid "The maximum number of incoming edges to consider for crossjumping" #~ msgstr "Kinini Umubare Bya Kuri kugirango" #, fuzzy #~ msgid "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap." #~ msgstr "Kuri Imbarutso Nka a Ijanisha Bya i Igiteranyo Ingano Bya i" #, fuzzy #~ msgid "Minimum heap size before we start collecting garbage, in kilobytes." #~ msgstr "Ingano Mbere Twebwe Gutangira in" #, fuzzy #~ msgid "too many #pragma options align=reset" #~ msgstr "Amahitamo Gutondeka Kugarura" #, fuzzy #~ msgid "junk at end of '#pragma options'" #~ msgstr "Umwanda ku Impera Bya" #, fuzzy #~ msgid "malformed '#pragma options align={mac68k|power|reset}', ignoring" #~ msgstr "Amahitamo Gutondeka UMWIKUBE Kugarura" #, fuzzy #~ msgid "missing '(' after '#pragma unused', ignoring" #~ msgstr "Ibuze Nyuma" #, fuzzy #~ msgid "missing ')' after '#pragma unused', ignoring" #~ msgstr "Ibuze Nyuma" #, fuzzy #~ msgid "junk at end of '#pragma unused'" #~ msgstr "Umwanda ku Impera Bya" #, fuzzy #~ msgid "-msystem-v and -p are incompatible" #~ msgstr "-v Na P" #, fuzzy #~ msgid "-msystem-v and -mthreads are incompatible" #~ msgstr "-v Na" #, fuzzy #~ msgid "-f%s ignored for Unicos/Mk (not supported)" #~ msgstr "-F kugirango OYA" #, fuzzy #~ msgid "-mieee not supported on Unicos/Mk" #~ msgstr "-OYA ku" #, fuzzy #~ msgid "-mieee-with-inexact not supported on Unicos/Mk" #~ msgstr "-Na: OYA ku" #, fuzzy #~ msgid "bad value `%s' for -mtrap-precision switch" #~ msgstr "Agaciro kugirango Hindura" #, fuzzy #~ msgid "bad value `%s' for -mfp-rounding-mode switch" #~ msgstr "Agaciro kugirango Ubwoko Hindura" #, fuzzy #~ msgid "bad value `%s' for -mfp-trap-mode switch" #~ msgstr "Agaciro kugirango Ubwoko Hindura" #, fuzzy #~ msgid "bad value `%s' for -mtls-size switch" #~ msgstr "Agaciro kugirango Ingano Hindura" #, fuzzy #~ msgid "bad value `%s' for -mcpu switch" #~ msgstr "Agaciro kugirango Hindura" #, fuzzy #~ msgid "trap mode not supported on Unicos/Mk" #~ msgstr "Ubwoko OYA ku" #, fuzzy #~ msgid "fp software completion requires -mtrap-precision=i" #~ msgstr "i" #, fuzzy #~ msgid "rounding mode not supported for VAX floats" #~ msgstr "Ubwoko OYA kugirango" #, fuzzy #~ msgid "trap mode not supported for VAX floats" #~ msgstr "Ubwoko OYA kugirango" #, fuzzy #~ msgid "L%d cache latency unknown for %s" #~ msgstr "Ubwihisho Kitazwi kugirango" #, fuzzy #~ msgid "bad value `%s' for -mmemory-latency" #~ msgstr "Agaciro kugirango" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%H value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%J value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%r value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%R value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%N value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%P value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%h value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%L value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%m value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%M value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%U value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%s value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%C value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%E value" #~ msgstr "Agaciro siko" #, fuzzy #~ msgid "unknown relocation unspec" #~ msgstr "Kitazwi" #, fuzzy #~ msgid "invalid %%xn code" #~ msgstr "Sibyo ITEGEKONGENGA" #, fuzzy #~ msgid "Do not use hardware fp" #~ msgstr "OYA Gukoresha" #, fuzzy #~ msgid "Do not use fp registers" #~ msgstr "OYA Gukoresha" #, fuzzy #~ msgid "Do not assume GAS" #~ msgstr "OYA" #, fuzzy #~ msgid "Request IEEE-conformant math library routines (OSF/1)" #~ msgstr "Imibare Isomero 1." #, fuzzy #~ msgid "Emit IEEE-conformant code, without inexact exceptions" #~ msgstr "ITEGEKONGENGA Amarengayobora" #, fuzzy #~ msgid "Emit IEEE-conformant code, with inexact exceptions" #~ msgstr "ITEGEKONGENGA Na: Amarengayobora" #, fuzzy #~ msgid "Do not emit complex integer constants to read-only memory" #~ msgstr "OYA ITSINDA RY'IMIBARE C Umubare wuzuye Kuri Gusoma Ububiko" #, fuzzy #~ msgid "Do not use VAX fp" #~ msgstr "OYA Gukoresha" #, fuzzy #~ msgid "Emit code for the byte/word ISA extension" #~ msgstr "ITEGEKONGENGA kugirango i Bayite ijambo Umugereka" #, fuzzy #~ msgid "Emit code for the motion video ISA extension" #~ msgstr "ITEGEKONGENGA kugirango i Videwo... Umugereka" #, fuzzy #~ msgid "Emit code for the fp move and sqrt ISA extension" #~ msgstr "ITEGEKONGENGA kugirango i Kwimura Na SQRT Umugereka" #, fuzzy #~ msgid "Emit code for the counting ISA extension" #~ msgstr "ITEGEKONGENGA kugirango i Kubara Umugereka" #, fuzzy #~ msgid "Emit code using explicit relocation directives" #~ msgstr "ITEGEKONGENGA ikoresha" #, fuzzy #~ msgid "Emit 16-bit relocations to the small data areas" #~ msgstr "Kuri i Gitoya Ibyatanzwe Ubuso" #, fuzzy #~ msgid "Emit 32-bit relocations to the small data areas" #~ msgstr "Kuri i Gitoya Ibyatanzwe Ubuso" #, fuzzy #~ msgid "Emit rdval instead of rduniq for thread pointer" #~ msgstr "Bya kugirango Urudodo Mweretsi" #, fuzzy #~ msgid "Use features of and schedule given CPU" #~ msgstr "Ibiranga Bya Na Igenabihe" #, fuzzy #~ msgid "Control the generated fp rounding mode" #~ msgstr "i Ubwoko" #, fuzzy #~ msgid "Control the IEEE trap mode" #~ msgstr "i Ubwoko" #, fuzzy #~ msgid "Control the precision given to fp exceptions" #~ msgstr "i Kuri Amarengayobora" #, fuzzy #~ msgid "Tune expected memory latency" #~ msgstr "Ikitezwe: Ububiko" #, fuzzy #~ msgid "Specify bit size of immediate TLS offsets" #~ msgstr "Ingano Bya" #, fuzzy #~ msgid "bad value (%s) for -mcpu switch" #~ msgstr "Agaciro kugirango Hindura" #, fuzzy #~ msgid "argument of `%s' attribute is not a string constant" #~ msgstr "Bya Ikiranga ni OYA a Ikurikiranyanyuguti" #, fuzzy #~ msgid "argument of `%s' attribute is not \"ilink1\" or \"ilink2\"" #~ msgstr "Bya Ikiranga ni OYA Cyangwa" #, fuzzy #~ msgid "invalid operand to %%R code" #~ msgstr "Sibyo Kuri ITEGEKONGENGA" #, fuzzy #~ msgid "invalid operand to %%H/%%L code" #~ msgstr "Sibyo Kuri ITEGEKONGENGA" #, fuzzy #~ msgid "invalid operand to %%U code" #~ msgstr "Sibyo Kuri ITEGEKONGENGA" #, fuzzy #~ msgid "invalid operand to %%V code" #~ msgstr "Sibyo Kuri ITEGEKONGENGA" #, fuzzy #~ msgid "invalid operand output code" #~ msgstr "Sibyo Ibisohoka ITEGEKONGENGA" #, fuzzy #~ msgid "switch -mcpu=%s conflicts with -march= switch" #~ msgstr "Hindura Na: Werurwe Hindura" #, fuzzy #~ msgid "bad value (%s) for %s switch" #~ msgstr "Agaciro kugirango Hindura" #, fuzzy #~ msgid "target CPU does not support APCS-32" #~ msgstr "Intego OYA Gushigikira" #, fuzzy #~ msgid "target CPU does not support APCS-26" #~ msgstr "Intego OYA Gushigikira" #, fuzzy #~ msgid "target CPU does not support interworking" #~ msgstr "Intego OYA Gushigikira" #, fuzzy #~ msgid "target CPU does not support THUMB instructions" #~ msgstr "Intego OYA Gushigikira Amabwiriza" #, fuzzy #~ msgid "enabling backtrace support is only meaningful when compiling for the Thumb" #~ msgstr "Gushigikira ni Ryari: kugirango i" #, fuzzy #~ msgid "enabling callee interworking support is only meaningful when compiling for the Thumb" #~ msgstr "Gushigikira ni Ryari: kugirango i" #, fuzzy #~ msgid "enabling caller interworking support is only meaningful when compiling for the Thumb" #~ msgstr "Gushigikira ni Ryari: kugirango i" #, fuzzy #~ msgid "interworking forces APCS-32 to be used" #~ msgstr "Kuri" #, fuzzy #~ msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" #~ msgstr "-Kugenzura... Na: Ikadiri" #, fuzzy #~ msgid "-fpic and -mapcs-reent are incompatible" #~ msgstr "-Na" #, fuzzy #~ msgid "APCS reentrant code not supported. Ignored" #~ msgstr "ITEGEKONGENGA OYA" #, fuzzy #~ msgid "-g with -mno-apcs-frame may not give sensible debugging" #~ msgstr "-g Na: Ikadiri Gicurasi OYA" #, fuzzy #~ msgid "passing floating point arguments in fp regs not yet supported" #~ msgstr "Bihindagurika Akadomo ingingo in OYA" #, fuzzy #~ msgid "invalid floating point emulation option: -mfpe-%s" #~ msgstr "Sibyo Bihindagurika Akadomo Ihitamo" #, fuzzy #~ msgid "structure size boundary can only be set to 8 or 32" #~ msgstr "Imiterere Ingano Gushyiraho Kuri 8 Cyangwa" #, fuzzy #~ msgid "-mpic-register= is useless without -fpic" #~ msgstr "-Kwiyandikisha ni" #, fuzzy #~ msgid "unable to use '%s' for PIC register" #~ msgstr "Kuri Gukoresha kugirango Kwiyandikisha" #, fuzzy #~ msgid "`%s' attribute only applies to functions" #~ msgstr "`%s'Ikiranga Kuri Imimaro" #, fuzzy #~ msgid "unable to compute real location of stacked parameter" #~ msgstr "Kuri Ahantu Bya Birunze" #, fuzzy #~ msgid "no low registers available for popping high registers" #~ msgstr "Oya Byo hasi Bihari kugirango kirekire" #, fuzzy #~ msgid "interrupt Service Routines cannot be coded in Thumb mode" #~ msgstr "Hagarikira aho in Ubwoko" #, fuzzy #~ msgid "initialized variable `%s' is marked dllimport" #~ msgstr "IMPINDURAGACIRO ni cy/ byagarajwe" #, fuzzy #~ msgid "static variable `%s' is marked dllimport" #~ msgstr "IMPINDURAGACIRO ni cy/ byagarajwe" #, fuzzy #~ msgid "Generate APCS conformant stack frames" #~ msgstr "Amakadiri" #, fuzzy #~ msgid "Store function names in object code" #~ msgstr "Umumaro Amazina in Igikoresho ITEGEKONGENGA" #, fuzzy #~ msgid "Use the 32-bit version of the APCS" #~ msgstr "i Verisiyo Bya i" #, fuzzy #~ msgid "Use the 26-bit version of the APCS" #~ msgstr "i Verisiyo Bya i" #, fuzzy #~ msgid "Pass FP arguments in FP registers" #~ msgstr "ingingo in" #, fuzzy #~ msgid "Generate re-entrant, PIC code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "The MMU will trap on unaligned accesses" #~ msgstr "ku" #, fuzzy #~ msgid "Use library calls to perform FP operations" #~ msgstr "Isomero Amahamagara: Kuri Ibikorwa:" #, fuzzy #~ msgid "Use hardware floating point instructions" #~ msgstr "Bihindagurika Akadomo Amabwiriza" #, fuzzy #~ msgid "Assume target CPU is configured as big endian" #~ msgstr "Intego ni Nka" #, fuzzy #~ msgid "Assume target CPU is configured as little endian" #~ msgstr "Intego ni Nka" #, fuzzy #~ msgid "Assume big endian bytes, little endian words" #~ msgstr "Bayite Amagambo" #, fuzzy #~ msgid "Support calls between Thumb and ARM instruction sets" #~ msgstr "Amahamagara: hagati Na" #, fuzzy #~ msgid "Generate a call to abort if a noreturn function returns" #~ msgstr "a Kuri Kureka NIBA a Umumaro" #, fuzzy #~ msgid "Do not move instructions into a function's prologue" #~ msgstr "OYA Kwimura Amabwiriza a" #, fuzzy #~ msgid "Do not load the PIC register in function prologues" #~ msgstr "OYA Ibirimo i Kwiyandikisha in Umumaro" #, fuzzy #~ msgid "Generate call insns as indirect calls, if necessary" #~ msgstr "Nka BUZIGUYE Amahamagara: NIBA" #, fuzzy #~ msgid "Compile for the Thumb not the ARM" #~ msgstr "kugirango i OYA i" #, fuzzy #~ msgid "Thumb: Generate (non-leaf) stack frames even if not needed" #~ msgstr "Amakadiri ATARIIGIHARWE NIBA OYA" #, fuzzy #~ msgid "Thumb: Generate (leaf) stack frames even if not needed" #~ msgstr "Amakadiri ATARIIGIHARWE NIBA OYA" #, fuzzy #~ msgid "Thumb: Assume non-static functions may be called from ARM code" #~ msgstr "Imimaro Gicurasi Bivuye ITEGEKONGENGA" #, fuzzy #~ msgid "Thumb: Assume function pointers may go to non-Thumb aware code" #~ msgstr "Umumaro Gicurasi Gyayo Kuri ITEGEKONGENGA" #, fuzzy #~ msgid "Specify the name of the target CPU" #~ msgstr "i Izina: Bya i Intego" #, fuzzy #~ msgid "Specify the name of the target architecture" #~ msgstr "i Izina: Bya i Intego" #, fuzzy #~ msgid "Specify the version of the floating point emulator" #~ msgstr "i Verisiyo Bya i Bihindagurika Akadomo" #, fuzzy #~ msgid "Specify the minimum bit alignment of structures" #~ msgstr "i Gito Itunganya Bya" #, fuzzy #~ msgid "Specify the register to be used for PIC addressing" #~ msgstr "i Kwiyandikisha Kuri kugirango Kwohereza" #, fuzzy #~ msgid "Ignore dllimport attribute for functions" #~ msgstr "Ikiranga kugirango Imimaro" #, fuzzy #~ msgid "large frame pointer change (%d) with -mtiny-stack" #~ msgstr "Binini Ikadiri Mweretsi Guhindura>> Na:" #, fuzzy #~ msgid "bad address, not (reg+disp):" #~ msgstr "Aderesi OYA" #, fuzzy #~ msgid "internal compiler error. Bad address:" #~ msgstr "By'imbere Ikosa Aderesi" #, fuzzy #~ msgid "internal compiler error. Unknown mode:" #~ msgstr "By'imbere Ikosa Ubwoko" #, fuzzy #~ msgid "invalid insn:" #~ msgstr "Sibyo" #, fuzzy #~ msgid "unknown move insn:" #~ msgstr "Kitazwi Kwimura" #, fuzzy #~ msgid "bad shift insn:" #~ msgstr "Gusunika" #, fuzzy #~ msgid "internal compiler error. Incorrect shift:" #~ msgstr "By'imbere Ikosa Gusunika" #, fuzzy #~ msgid "only initialized variables can be placed into program memory area" #~ msgstr "Ibihinduka Porogaramu Ububiko Ubuso" #, fuzzy #~ msgid "only uninitialized variables can be placed in the .noinit section" #~ msgstr "Itatangijwe Ibihinduka in i Icyiciro" #, fuzzy #~ msgid "MCU `%s' supported for assembler only" #~ msgstr "kugirango" #, fuzzy #~ msgid "Assume int to be 8 bit integer" #~ msgstr "INT Kuri 8 Umubare wuzuye" #, fuzzy #~ msgid "Change the stack pointer without disabling interrupts" #~ msgstr "i Mweretsi" #, fuzzy #~ msgid "Use subroutines for function prologue/epilogue" #~ msgstr "kugirango Umumaro" #, fuzzy #~ msgid "Change only the low 8 bits of the stack pointer" #~ msgstr "i Byo hasi 8 Bya i Mweretsi" #, fuzzy #~ msgid "Do not generate tablejump insns" #~ msgstr "OYA" #, fuzzy #~ msgid "Use rjmp/rcall (limited range) on >8K devices" #~ msgstr "Urutonde ku" #, fuzzy #~ msgid "Output instruction sizes to the asm file" #~ msgstr "Kuri i IDOSIYE" #, fuzzy #~ msgid "Specify the initial stack address" #~ msgstr "i Aderesi" #, fuzzy #~ msgid "Specify the MCU name" #~ msgstr "i Izina:" #, fuzzy #~ msgid "trampolines not supported" #~ msgstr "OYA" #, fuzzy #~ msgid "missing '(' after '#pragma %s' - ignored" #~ msgstr "Ibuze Nyuma" #, fuzzy #~ msgid "missing function name in '#pragma %s' - ignored" #~ msgstr "Ibuze Umumaro Izina: in" #, fuzzy #~ msgid "missing section name in '#pragma %s' - ignored" #~ msgstr "Ibuze Icyiciro Izina: in" #, fuzzy #~ msgid "missing ')' for '#pragma %s' - ignored" #~ msgstr "Ibuze kugirango" #, fuzzy #~ msgid "junk at end of '#pragma %s'" #~ msgstr "Umwanda ku Impera Bya" #, fuzzy #~ msgid "unknown CPU version %d, using 40.\n" #~ msgstr "Kitazwi Verisiyo ikoresha" #, fuzzy #~ msgid "ISR %s requires %d words of local vars, max is 32767" #~ msgstr "Amagambo Bya KININI ni" #, fuzzy #~ msgid "using CONST_DOUBLE for address" #~ msgstr "ikoresha kugirango Aderesi" #, fuzzy #~ msgid "c4x_address_cost: Invalid addressing mode" #~ msgstr "Kwohereza Ubwoko" #, fuzzy #~ msgid "c4x_rptb_insert: Cannot find start label" #~ msgstr "Gushaka Gutangira Akarango" #, fuzzy #~ msgid "mode not QImode" #~ msgstr "Ubwoko OYA" #, fuzzy #~ msgid "invalid indirect memory address" #~ msgstr "Sibyo BUZIGUYE Ububiko Aderesi" #, fuzzy #~ msgid "invalid indirect (S) memory address" #~ msgstr "Sibyo BUZIGUYE Ububiko Aderesi" #, fuzzy #~ msgid "c4x_valid_operands: Internal error" #~ msgstr "Ikosa" #, fuzzy #~ msgid "c4x_operand_subword: invalid mode" #~ msgstr "Sibyo Ubwoko" #, fuzzy #~ msgid "c4x_operand_subword: invalid operand" #~ msgstr "Sibyo" #, fuzzy #~ msgid "c4x_operand_subword: invalid autoincrement" #~ msgstr "Sibyo nyamwiyongera" #, fuzzy #~ msgid "c4x_operand_subword: invalid address" #~ msgstr "Sibyo Aderesi" #, fuzzy #~ msgid "c4x_operand_subword: address not offsettable" #~ msgstr "Aderesi OYA" #, fuzzy #~ msgid "c4x_rptb_rpts_p: Repeat block top label moved\n" #~ msgstr "Funga Hejuru: Akarango" #, fuzzy #~ msgid "Small memory model" #~ msgstr "Ububiko Urugero" #, fuzzy #~ msgid "Big memory model" #~ msgstr "Ububiko Urugero" #, fuzzy #~ msgid "Use MPYI instruction for C3x" #~ msgstr "kugirango" #, fuzzy #~ msgid "Do not use MPYI instruction for C3x" #~ msgstr "OYA Gukoresha kugirango" #, fuzzy #~ msgid "Use fast but approximate float to integer conversion" #~ msgstr "Byihuta Kureremba Kuri Umubare wuzuye Ihindurangero" #, fuzzy #~ msgid "Use slow but accurate float to integer conversion" #~ msgstr "Buhoro Kureremba Kuri Umubare wuzuye Ihindurangero" #, fuzzy #~ msgid "Enable use of RTPS instruction" #~ msgstr "Gukoresha Bya" #, fuzzy #~ msgid "Disable use of RTPS instruction" #~ msgstr "Gukoresha Bya" #, fuzzy #~ msgid "Enable use of RTPB instruction" #~ msgstr "Gukoresha Bya" #, fuzzy #~ msgid "Disable use of RTPB instruction" #~ msgstr "Gukoresha Bya" #, fuzzy #~ msgid "Generate code for C30 CPU" #~ msgstr "ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Generate code for C31 CPU" #~ msgstr "ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Generate code for C32 CPU" #~ msgstr "ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Generate code for C33 CPU" #~ msgstr "ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Generate code for C40 CPU" #~ msgstr "ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Generate code for C44 CPU" #~ msgstr "ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Emit code compatible with TI tools" #~ msgstr "ITEGEKONGENGA Na: Ibikoresho" #, fuzzy #~ msgid "Emit code to use GAS extensions" #~ msgstr "ITEGEKONGENGA Kuri Gukoresha Umigereka" #, fuzzy #~ msgid "Save DP across ISR in small memory model" #~ msgstr "Kubika Kwambukiranya in Gitoya Ububiko Urugero" #, fuzzy #~ msgid "Don't save DP across ISR in small memory model" #~ msgstr "Kubika Kwambukiranya in Gitoya Ububiko Urugero" #, fuzzy #~ msgid "Pass arguments on the stack" #~ msgstr "ingingo ku i" #, fuzzy #~ msgid "Pass arguments in registers" #~ msgstr "ingingo in" #, fuzzy #~ msgid "Enable new features under development" #~ msgstr "Gishya Ibiranga" #, fuzzy #~ msgid "Disable new features under development" #~ msgstr "Gishya Ibiranga" #, fuzzy #~ msgid "Use the BK register as a general purpose register" #~ msgstr "i Kwiyandikisha Nka a Rusange Intego Kwiyandikisha" #, fuzzy #~ msgid "Do not allocate BK register" #~ msgstr "OYA Kwiyandikisha" #, fuzzy #~ msgid "Enable use of DB instruction" #~ msgstr "Gukoresha Bya" #, fuzzy #~ msgid "Disable use of DB instruction" #~ msgstr "Gukoresha Bya" #, fuzzy #~ msgid "Force constants into registers to improve hoisting" #~ msgstr "Kuri" #, fuzzy #~ msgid "Force RTL generation to emit valid 3 operand insns" #~ msgstr "Kuri Byemewe 3." #, fuzzy #~ msgid "Allow RTL generation to emit invalid 3 operand insns" #~ msgstr "Kuri Sibyo 3." #, fuzzy #~ msgid "Allow unsigned iteration counts for RPTB/DB" #~ msgstr "Bitashizweho umukono kugirango" #, fuzzy #~ msgid "Disallow unsigned iteration counts for RPTB/DB" #~ msgstr "Bitashizweho umukono kugirango" #, fuzzy #~ msgid "Preserve all 40 bits of FP reg across call" #~ msgstr "Byose Bya Kwambukiranya" #, fuzzy #~ msgid "Only preserve 32 bits of FP reg across call" #~ msgstr "Bya Kwambukiranya" #, fuzzy #~ msgid "Enable parallel instructions" #~ msgstr "Biteganye Amabwiriza" #, fuzzy #~ msgid "Disable parallel instructions" #~ msgstr "Biteganye Amabwiriza" #, fuzzy #~ msgid "Enable MPY||ADD and MPY||SUB instructions" #~ msgstr "Na Amabwiriza" #, fuzzy #~ msgid "Disable MPY||ADD and MPY||SUB instructions" #~ msgstr "Na Amabwiriza" #, fuzzy #~ msgid "Assume that pointers may be aliased" #~ msgstr "Gicurasi" #, fuzzy #~ msgid "Assume that pointers not aliased" #~ msgstr "OYA" #, fuzzy #~ msgid "Specify maximum number of iterations for RPTS" #~ msgstr "Kinini Umubare Bya Amasubiramo kugirango" #, fuzzy #~ msgid "Select CPU to generate code for" #~ msgstr "Kuri ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "unexpected index-type in cris_print_index" #~ msgstr "Umubarendanga Ubwoko in" #, fuzzy #~ msgid "unexpected base-type in cris_print_base" #~ msgstr "SHINGIRO Ubwoko in" #, fuzzy #~ msgid "stackframe too big: %d bytes" #~ msgstr "Bayite" #, fuzzy #~ msgid "allocated but unused delay list in epilogue" #~ msgstr "Kidakoreshwa Gutinda Urutonde in" #, fuzzy #~ msgid "unexpected function type needing stack adjustment for __builtin_eh_return" #~ msgstr "Umumaro Ubwoko kugirango" #, fuzzy #~ msgid "invalid operand for 'b' modifier" #~ msgstr "Sibyo kugirango" #, fuzzy #~ msgid "invalid operand for 'v' modifier" #~ msgstr "Sibyo kugirango" #, fuzzy #~ msgid "invalid operand for 'P' modifier" #~ msgstr "Sibyo kugirango" #, fuzzy #~ msgid "invalid operand for 'p' modifier" #~ msgstr "Sibyo kugirango" #, fuzzy #~ msgid "invalid operand for 'z' modifier" #~ msgstr "Sibyo kugirango" #, fuzzy #~ msgid "invalid operand for 'H' modifier" #~ msgstr "Sibyo kugirango" #, fuzzy #~ msgid "bad register" #~ msgstr "Kwiyandikisha" #, fuzzy #~ msgid "invalid operand for 'e' modifier" #~ msgstr "Sibyo kugirango" #, fuzzy #~ msgid "invalid operand for 'm' modifier" #~ msgstr "Sibyo kugirango" #, fuzzy #~ msgid "invalid operand for 'A' modifier" #~ msgstr "Sibyo kugirango" #, fuzzy #~ msgid "invalid operand for 'D' modifier" #~ msgstr "Sibyo kugirango" #, fuzzy #~ msgid "invalid operand for 'T' modifier" #~ msgstr "Sibyo kugirango" #, fuzzy #~ msgid "invalid operand modifier letter" #~ msgstr "Sibyo Ibaruwa..." #, fuzzy #~ msgid "internal error: bad register: %d" #~ msgstr "By'imbere Ikosa Kwiyandikisha" #, fuzzy #~ msgid "unrecognized address" #~ msgstr "Aderesi" #, fuzzy #~ msgid "internal error: sideeffect-insn affecting main effect" #~ msgstr "By'imbere Ikosa INGARUKA" #, fuzzy #~ msgid "internal error: cris_side_effect_mode_ok with bad operands" #~ msgstr "By'imbere Ikosa Na:" #, fuzzy #~ msgid "unrecognized supposed constant in cris_global_pic_symbol" #~ msgstr "in" #, fuzzy #~ msgid "-max-stackframe=%d is not usable, not between 0 and %d" #~ msgstr "-KININI ni OYA OYA hagati 0 Na" #, fuzzy #~ msgid "unknown CRIS version specification in -march= or -mcpu= : %s" #~ msgstr "Kitazwi Verisiyo in Werurwe Cyangwa" #, fuzzy #~ msgid "unknown CRIS cpu version specification in -mtune= : %s" #~ msgstr "Kitazwi CPU Verisiyo in" #, fuzzy #~ msgid "-fPIC and -fpic are not supported in this configuration" #~ msgstr "-Na OYA in iyi Iboneza" #, fuzzy #~ msgid "that particular -g option is invalid with -maout and -melinux" #~ msgstr "g Ihitamo ni Sibyo Na: Na" #, fuzzy #~ msgid "unexpected side-effects in address" #~ msgstr "Ingaruka in Aderesi" #, fuzzy #~ msgid "unexpected PIC symbol" #~ msgstr "IKIMENYETSO" #, fuzzy #~ msgid "PIC register isn't set up" #~ msgstr "Kwiyandikisha si Gushyiraho Hejuru" #, fuzzy #~ msgid "unexpected address expression" #~ msgstr "Aderesi imvugo" #, fuzzy #~ msgid "emitting PIC operand, but PIC register isn't set up" #~ msgstr "Kwiyandikisha si Gushyiraho Hejuru" #, fuzzy #~ msgid "unexpected NOTE as addr_const:" #~ msgstr "Nka" #, fuzzy #~ msgid "Compile for the MMU-less Etrax 100-based elinux system" #~ msgstr "kugirango i Birutwa 100 Sisitemu" #, fuzzy #~ msgid "For elinux, request a specified stack-size for this program" #~ msgstr "Kubaza... a Ingano kugirango iyi Porogaramu" #, fuzzy #~ msgid "Compile for ETRAX 4 (CRIS v3)" #~ msgstr "kugirango 4." #, fuzzy #~ msgid "Compile for ETRAX 100 (CRIS v8)" #~ msgstr "kugirango 100" #, fuzzy #~ msgid "Emit verbose debug information in assembly code" #~ msgstr "Kosora amakosa Ibisobanuro in ITEGEKONGENGA" #, fuzzy #~ msgid "Do not use condition codes from normal instructions" #~ msgstr "OYA Gukoresha Ibisabwa Bivuye Bisanzwe Amabwiriza" #, fuzzy #~ msgid "Do not emit addressing modes with side-effect assignment" #~ msgstr "OYA Kwohereza Na: INGARUKA Igenera" #, fuzzy #~ msgid "Do not tune stack alignment" #~ msgstr "OYA Itunganya" #, fuzzy #~ msgid "Do not tune writable data alignment" #~ msgstr "OYA Ibyatanzwe Itunganya" #, fuzzy #~ msgid "Do not tune code and read-only data alignment" #~ msgstr "OYA ITEGEKONGENGA Na Gusoma Ibyatanzwe Itunganya" #, fuzzy #~ msgid "Align code and data to 32 bits" #~ msgstr "ITEGEKONGENGA Na Ibyatanzwe Kuri" #, fuzzy #~ msgid "Don't align items in code or data" #~ msgstr "Gutondeka in ITEGEKONGENGA Cyangwa Ibyatanzwe" #, fuzzy #~ msgid "Do not emit function prologue or epilogue" #~ msgstr "OYA Umumaro Cyangwa" #, fuzzy #~ msgid "Use the most feature-enabling options allowed by other options" #~ msgstr "i Amahitamo ku Ikindi Amahitamo" #, fuzzy #~ msgid "Override -mbest-lib-options" #~ msgstr "Amahitamo" #, fuzzy #~ msgid "Generate code for the specified chip or CPU version" #~ msgstr "ITEGEKONGENGA kugirango i Cyangwa Verisiyo" #, fuzzy #~ msgid "Tune alignment for the specified chip or CPU version" #~ msgstr "Itunganya kugirango i Cyangwa Verisiyo" #, fuzzy #~ msgid "Warn when a stackframe is larger than the specified size" #~ msgstr "Ryari: a ni Kinini i Ingano" #, fuzzy #~ msgid "no FUNCTION_PROFILER for CRIS" #~ msgstr "Oya kugirango" #, fuzzy #~ msgid "Together with -fpic and -fPIC, do not use GOTPLT references" #~ msgstr "Na: Na OYA Gukoresha Indango" #, fuzzy #~ msgid "bad modes_tieable_p for register %s, mode1 %s, mode2 %s" #~ msgstr "kugirango Kwiyandikisha" #, fuzzy #~ msgid "bad insn to d30v_print_operand_address:" #~ msgstr "Kuri" #, fuzzy #~ msgid "bad insn to d30v_print_operand_memory_reference:" #~ msgstr "Kuri" #, fuzzy #~ msgid "bad insn to d30v_print_operand, 'f' modifier:" #~ msgstr "Kuri" #, fuzzy #~ msgid "bad insn to d30v_print_operand, 'A' modifier:" #~ msgstr "Kuri" #, fuzzy #~ msgid "bad insn to d30v_print_operand, 'M' modifier:" #~ msgstr "Kuri" #, fuzzy #~ msgid "bad insn to print_operand, 'F' or 'T' modifier:" #~ msgstr "Kuri Cyangwa" #, fuzzy #~ msgid "bad insn to print_operand, 'B' modifier:" #~ msgstr "Kuri" #, fuzzy #~ msgid "bad insn to print_operand, 'E' modifier:" #~ msgstr "Kuri" #, fuzzy #~ msgid "bad insn to print_operand, 'R' modifier:" #~ msgstr "Kuri" #, fuzzy #~ msgid "bad insn to print_operand, 's' modifier:" #~ msgstr "Kuri" #, fuzzy #~ msgid "bad insn in d30v_print_operand, 0 case" #~ msgstr "in 0" #, fuzzy #~ msgid "bad call to d30v_move_2words" #~ msgstr "Kuri" #, fuzzy #~ msgid "Enable use of conditional move instructions" #~ msgstr "Gukoresha Bya Kwimura Amabwiriza" #, fuzzy #~ msgid "Disable use of conditional move instructions" #~ msgstr "Gukoresha Bya Kwimura Amabwiriza" #, fuzzy #~ msgid "Debug argument support in compiler" #~ msgstr "Gushigikira in" #, fuzzy #~ msgid "Debug stack support in compiler" #~ msgstr "Gushigikira in" #, fuzzy #~ msgid "Debug memory address support in compiler" #~ msgstr "Ububiko Aderesi Gushigikira in" #, fuzzy #~ msgid "Make adjacent short instructions parallel if possible" #~ msgstr "Amabwiriza Biteganye NIBA" #, fuzzy #~ msgid "Do not make adjacent short instructions parallel" #~ msgstr "OYA Ubwoko Amabwiriza Biteganye" #, fuzzy #~ msgid "Link programs/data to be in external memory by default" #~ msgstr "Porogaramu Ibyatanzwe Kuri in external Ububiko ku Mburabuzi" #, fuzzy #~ msgid "Link programs/data to be in onchip memory by default" #~ msgstr "Porogaramu Ibyatanzwe Kuri in Ububiko ku Mburabuzi" #, fuzzy #~ msgid "Change the branch costs within the compiler" #~ msgstr "i muri i" #, fuzzy #~ msgid "Change the threshold for conversion to conditional execution" #~ msgstr "i kugirango Ihindurangero Kuri" #, fuzzy #~ msgid "stack size > 32k" #~ msgstr "Ingano" #, fuzzy #~ msgid "invalid addressing mode" #~ msgstr "Sibyo Kwohereza Ubwoko" #, fuzzy #~ msgid "bad register extension code" #~ msgstr "Kwiyandikisha Umugereka ITEGEKONGENGA" #, fuzzy #~ msgid "invalid offset in ybase addressing" #~ msgstr "Sibyo Nta- boneza in Kwohereza" #, fuzzy #~ msgid "invalid register in ybase addressing" #~ msgstr "Sibyo Kwiyandikisha in Kwohereza" #, fuzzy #~ msgid "invalid shift operator in emit_1600_core_shift" #~ msgstr "Sibyo Gusunika Mukoresha in" #, fuzzy #~ msgid "invalid mode for gen_tst_reg" #~ msgstr "Sibyo Ubwoko kugirango" #, fuzzy #~ msgid "invalid mode for integer comparison in gen_compare_reg" #~ msgstr "Sibyo Ubwoko kugirango Umubare wuzuye in" #, fuzzy #~ msgid "Pass parameters in registers (default)" #~ msgstr "Ibigenga in Mburabuzi" #, fuzzy #~ msgid "Don't pass parameters in registers" #~ msgstr "Ibigenga in" #, fuzzy #~ msgid "Generate code for near calls" #~ msgstr "ITEGEKONGENGA kugirango Amahamagara:" #, fuzzy #~ msgid "Don't generate code for near calls" #~ msgstr "ITEGEKONGENGA kugirango Amahamagara:" #, fuzzy #~ msgid "Generate code for near jumps" #~ msgstr "ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Don't generate code for near jumps" #~ msgstr "ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Generate code for a bit-manipulation unit" #~ msgstr "ITEGEKONGENGA kugirango a Igice:" #, fuzzy #~ msgid "Don't generate code for a bit-manipulation unit" #~ msgstr "ITEGEKONGENGA kugirango a Igice:" #, fuzzy #~ msgid "Generate code for memory map1" #~ msgstr "ITEGEKONGENGA kugirango Ububiko" #, fuzzy #~ msgid "Generate code for memory map2" #~ msgstr "ITEGEKONGENGA kugirango Ububiko" #, fuzzy #~ msgid "Generate code for memory map3" #~ msgstr "ITEGEKONGENGA kugirango Ububiko" #, fuzzy #~ msgid "Generate code for memory map4" #~ msgstr "ITEGEKONGENGA kugirango Ububiko" #, fuzzy #~ msgid "Ouput extra code for initialized data" #~ msgstr "Birenga ITEGEKONGENGA kugirango Ibyatanzwe" #, fuzzy #~ msgid "Don't let reg. allocator use ybase registers" #~ msgstr "Gukoresha" #, fuzzy #~ msgid "Output extra debug info in Luxworks environment" #~ msgstr "Birenga Kosora amakosa Ibisobanuro in" #, fuzzy #~ msgid "Save temp. files in Luxworks environment" #~ msgstr "Kubika Idosiye in" #, fuzzy #~ msgid "Specify alternate name for text section" #~ msgstr "Izina: kugirango Umwandiko Icyiciro" #, fuzzy #~ msgid "Specify alternate name for data section" #~ msgstr "Izina: kugirango Ibyatanzwe Icyiciro" #, fuzzy #~ msgid "Specify alternate name for bss section" #~ msgstr "Izina: kugirango Icyiciro" #, fuzzy #~ msgid "Specify alternate name for constant section" #~ msgstr "Izina: kugirango Icyiciro" #, fuzzy #~ msgid "Specify alternate name for dsp16xx chip" #~ msgstr "Izina: kugirango" #, fuzzy #~ msgid "profiling not implemented yet" #~ msgstr "OYA" #, fuzzy #~ msgid "trampolines not yet implemented" #~ msgstr "OYA" #, fuzzy #~ msgid "fr30_print_operand_address: unhandled address" #~ msgstr "Aderesi" #, fuzzy #~ msgid "fr30_print_operand: unrecognized %%p code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "fr30_print_operand: unrecognized %%b code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "fr30_print_operand: unrecognized %%B code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "fr30_print_operand: invalid operand to %%A code" #~ msgstr "Sibyo Kuri ITEGEKONGENGA" #, fuzzy #~ msgid "fr30_print_operand: invalid %%x code" #~ msgstr "Sibyo ITEGEKONGENGA" #, fuzzy #~ msgid "fr30_print_operand: invalid %%F code" #~ msgstr "Sibyo ITEGEKONGENGA" #, fuzzy #~ msgid "fr30_print_operand: unknown code" #~ msgstr "Kitazwi ITEGEKONGENGA" #, fuzzy #~ msgid "Assume small address space" #~ msgstr "Gitoya Aderesi Umwanya" #, fuzzy #~ msgid "Unknown cpu: -mcpu=%s" #~ msgstr "CPU" #, fuzzy #~ msgid "-fpic and -gdwarf are incompatible (-fpic and -g/-gdwarf-2 are fine)" #~ msgstr "-Na Na g 2." #, fuzzy #~ msgid "Bad insn to frv_print_operand_address:" #~ msgstr "Kuri" #, fuzzy #~ msgid "Bad register to frv_print_operand_memory_reference_reg:" #~ msgstr "Kwiyandikisha Kuri" #, fuzzy #~ msgid "Bad insn to frv_print_operand_memory_reference:" #~ msgstr "Kuri" #, fuzzy #~ msgid "Bad insn in frv_print_operand, bad const_double" #~ msgstr "in" #, fuzzy #~ msgid "Bad insn to frv_print_operand, 'C' modifier:" #~ msgstr "Kuri" #, fuzzy #~ msgid "Bad insn to frv_print_operand, 'c' modifier:" #~ msgstr "Kuri" #, fuzzy #~ msgid "Bad insn to frv_print_operand, 'e' modifier:" #~ msgstr "Kuri" #, fuzzy #~ msgid "Bad insn to frv_print_operand, 'F' modifier:" #~ msgstr "Kuri" #, fuzzy #~ msgid "Bad insn to frv_print_operand, 'f' modifier:" #~ msgstr "Kuri" #, fuzzy #~ msgid "Bad insn to frv_print_operand, 'L' modifier:" #~ msgstr "Kuri" #, fuzzy #~ msgid "Bad insn to frv_print_operand, 'M/N' modifier:" #~ msgstr "Kuri" #, fuzzy #~ msgid "Bad insn to frv_print_operand, 'O' modifier:" #~ msgstr "Kuri" #, fuzzy #~ msgid "Bad insn to frv_print_operand, P modifier:" #~ msgstr "Kuri" #, fuzzy #~ msgid "Bad insn in frv_print_operand, z case" #~ msgstr "in Z" #, fuzzy #~ msgid "Bad insn in frv_print_operand, 0 case" #~ msgstr "in 0" #, fuzzy #~ msgid "frv_print_operand: unknown code" #~ msgstr "Kitazwi ITEGEKONGENGA" #, fuzzy #~ msgid "accumulator is not a constant integer" #~ msgstr "ni OYA a Umubare wuzuye" #, fuzzy #~ msgid "accumulator number is out of bounds" #~ msgstr "Umubare ni Inyuma Bya" #, fuzzy #~ msgid "inappropriate accumulator for `%s'" #~ msgstr "kugirango" #, fuzzy #~ msgid "`%s' expects a constant argument" #~ msgstr "`%s'a" #, fuzzy #~ msgid "constant argument out of range for `%s'" #~ msgstr "Inyuma Bya Urutonde kugirango" #, fuzzy #~ msgid "media functions are not available unless -mmedia is used" #~ msgstr "Ibitangazamakuru Imimaro OYA Bihari ni" #, fuzzy #~ msgid "this media function is only available on the fr500" #~ msgstr "iyi Ibitangazamakuru Umumaro ni Bihari ku i" #, fuzzy #~ msgid "this media function is only available on the fr400" #~ msgstr "iyi Ibitangazamakuru Umumaro ni Bihari ku i" #, fuzzy #~ msgid "-ms2600 is used without -ms" #~ msgstr "-ni" #, fuzzy #~ msgid "-mn is used without -mh or -ms" #~ msgstr "-ni Cyangwa" #, fuzzy #~ msgid "Generate H8S code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Do not generate H8S code" #~ msgstr "OYA ITEGEKONGENGA" #, fuzzy #~ msgid "Generate H8S/2600 code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Do not generate H8S/2600 code" #~ msgstr "OYA ITEGEKONGENGA" #, fuzzy #~ msgid "Use registers for argument passing" #~ msgstr "kugirango" #, fuzzy #~ msgid "Do not use registers for argument passing" #~ msgstr "OYA Gukoresha kugirango" #, fuzzy #~ msgid "Consider access to byte sized memory slow" #~ msgstr "Kuri Bayite Ububiko Buhoro" #, fuzzy #~ msgid "Generate H8/300H code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Enable the normal mode" #~ msgstr "i Bisanzwe Ubwoko" #, fuzzy #~ msgid "Do not generate H8/300H code" #~ msgstr "OYA ITEGEKONGENGA" #, fuzzy #~ msgid "Use H8/300 alignment rules" #~ msgstr "300 Itunganya" #, fuzzy #~ msgid "junk at end of #pragma map" #~ msgstr "Umwanda ku Impera Bya" #, fuzzy #~ msgid "real name is too long - alias ignored" #~ msgstr "Izina: ni Irihimbano" #, fuzzy #~ msgid "alias name is too long - alias ignored" #~ msgstr "Irihimbano Izina: ni Irihimbano" #, fuzzy #~ msgid "internal error--no jump follows compare:" #~ msgstr "By'imbere Ikosa Oya Simbuka Kugereranya#" #, fuzzy #~ msgid "Generate char instructions" #~ msgstr "INYUGUTI Amabwiriza" #, fuzzy #~ msgid "Do not generate char instructions" #~ msgstr "OYA INYUGUTI Amabwiriza" #, fuzzy #~ msgid "code model %s not supported in PIC mode" #~ msgstr "ITEGEKONGENGA Urugero OYA in Ubwoko" #, fuzzy #~ msgid "bad value (%s) for -mcmodel= switch" #~ msgstr "Agaciro kugirango Hindura" #, fuzzy #~ msgid "bad value (%s) for -masm= switch" #~ msgstr "Agaciro kugirango Hindura" #, fuzzy #~ msgid "code model `%s' not supported in the %s bit mode" #~ msgstr "ITEGEKONGENGA Urugero OYA in i Ubwoko" #, fuzzy #~ msgid "code model `large' not supported yet" #~ msgstr "ITEGEKONGENGA Urugero OYA" #, fuzzy #~ msgid "%i-bit mode not compiled in" #~ msgstr "%i-bitUbwoko OYA in" #, fuzzy #~ msgid "bad value (%s) for -march= switch" #~ msgstr "Agaciro kugirango Werurwe Hindura" #, fuzzy #~ msgid "bad value (%s) for -mcpu= switch" #~ msgstr "Agaciro kugirango Hindura" #, fuzzy #~ msgid "-mregparm=%d is not between 0 and %d" #~ msgstr "-ni OYA hagati 0 Na" #, fuzzy #~ msgid "-malign-loops is obsolete, use -falign-loops" #~ msgstr "-ni Gukoresha" #, fuzzy #~ msgid "-malign-loops=%d is not between 0 and %d" #~ msgstr "-ni OYA hagati 0 Na" #, fuzzy #~ msgid "-malign-jumps is obsolete, use -falign-jumps" #~ msgstr "-ni Gukoresha" #, fuzzy #~ msgid "-malign-functions is obsolete, use -falign-functions" #~ msgstr "-Imimaro ni Gukoresha Imimaro" #, fuzzy #~ msgid "-mpreferred-stack-boundary=%d is not between %d and 12" #~ msgstr "-ni OYA hagati Na 12" #, fuzzy #~ msgid "-mbranch-cost=%d is not between 0 and 5" #~ msgstr "-Ikiguzi ni OYA hagati 0 Na 5" #, fuzzy #~ msgid "bad value (%s) for -mtls-dialect= switch" #~ msgstr "Agaciro kugirango Hindura" #, fuzzy #~ msgid "-malign-double makes no sense in the 64bit mode" #~ msgstr "-MAHARAKUBIRI Oya in i Ubwoko" #, fuzzy #~ msgid "-mrtd calling convention not supported in the 64bit mode" #~ msgstr "-OYA in i Ubwoko" #, fuzzy #~ msgid "SSE instruction set disabled, using 387 arithmetics" #~ msgstr "Gushyiraho Yahagaritswe ikoresha" #, fuzzy #~ msgid "387 instruction set disabled, using SSE arithmetics" #~ msgstr "Gushyiraho Yahagaritswe ikoresha" #, fuzzy #~ msgid "bad value (%s) for -mfpmath= switch" #~ msgstr "Agaciro kugirango Hindura" #, fuzzy #~ msgid "`%s' attribute requires an integer constant argument" #~ msgstr "`%s'Ikiranga Umubare wuzuye" #, fuzzy #~ msgid "argument to `%s' attribute larger than %d" #~ msgstr "Kuri Ikiranga Kinini" #, fuzzy #~ msgid "invalid UNSPEC as operand" #~ msgstr "Sibyo Nka" #, fuzzy #~ msgid "extended registers have no high halves" #~ msgstr "Byongerewe... Oya kirekire" #, fuzzy #~ msgid "unsupported operand size for extended register" #~ msgstr "Ingano kugirango Byongerewe... Kwiyandikisha" #, fuzzy #~ msgid "operand is neither a constant nor a condition code, invalid operand code 'c'" #~ msgstr "ni a a Ibisabwa ITEGEKONGENGA Sibyo ITEGEKONGENGA" #, fuzzy #~ msgid "invalid operand code `%c'" #~ msgstr "Sibyo ITEGEKONGENGA" #, fuzzy #~ msgid "invalid constraints for operand" #~ msgstr "Sibyo kugirango" #, fuzzy #~ msgid "unknown insn mode" #~ msgstr "Kitazwi Ubwoko" #, fuzzy #~ msgid "shift must be an immediate" #~ msgstr "Gusunika" #, fuzzy #~ msgid "`%s' attribute only applies to variables" #~ msgstr "`%s'Ikiranga Kuri Ibihinduka" #, fuzzy #~ msgid "`%s' declared as both exported to and imported from a DLL" #~ msgstr "`%s'Nka Byombi Kuri Na cyavuye ahandi/ cyatumijwe Bivuye a" #, fuzzy #~ msgid "Use the Cygwin interface" #~ msgstr "i" #, fuzzy #~ msgid "Use the Mingw32 interface" #~ msgstr "i" #, fuzzy #~ msgid "Create GUI application" #~ msgstr "Porogaramu" #, fuzzy #~ msgid "Don't set Windows defines" #~ msgstr "Gushyiraho" #, fuzzy #~ msgid "Create console application" #~ msgstr "Porogaramu" #, fuzzy #~ msgid "Generate code for a DLL" #~ msgstr "ITEGEKONGENGA kugirango a" #, fuzzy #~ msgid "Ignore dllimport for functions" #~ msgstr "kugirango Imimaro" #, fuzzy #~ msgid "Use Mingw-specific thread support" #~ msgstr "Urudodo Gushigikira" #, fuzzy #~ msgid "-f%s ignored for target (all code is position independent)" #~ msgstr "-F kugirango Intego Byose ITEGEKONGENGA ni Ibirindiro" #, fuzzy #~ msgid "-mbnu210 is ignored (option is obsolete)" #~ msgstr "-ni Ihitamo ni" #, fuzzy #~ msgid "Use normal calling convention" #~ msgstr "Bisanzwe" #, fuzzy #~ msgid "Align some doubles on dword boundary" #~ msgstr "ku" #, fuzzy #~ msgid "Align doubles on word boundary" #~ msgstr "ku ijambo" #, fuzzy #~ msgid "Uninitialized locals in .bss" #~ msgstr "in" #, fuzzy #~ msgid "Uninitialized locals in .data" #~ msgstr "in Ibyatanzwe" #, fuzzy #~ msgid "Use IEEE math for fp comparisons" #~ msgstr "Imibare kugirango" #, fuzzy #~ msgid "Do not use IEEE math for fp comparisons" #~ msgstr "OYA Gukoresha Imibare kugirango" #, fuzzy #~ msgid "Return values of functions in FPU registers" #~ msgstr "Uduciro Bya Imimaro in" #, fuzzy #~ msgid "Do not return values of functions in FPU registers" #~ msgstr "OYA Garuka Uduciro Bya Imimaro in" #, fuzzy #~ msgid "Do not generate sin, cos, sqrt for FPU" #~ msgstr "OYA SIN COS SQRT kugirango" #, fuzzy #~ msgid "Generate sin, cos, sqrt for FPU" #~ msgstr "SIN COS SQRT kugirango" #, fuzzy #~ msgid "Omit the frame pointer in leaf functions" #~ msgstr "i Ikadiri Mweretsi in Imimaro" #, fuzzy #~ msgid "Align destination of the string operations" #~ msgstr "Ishyika Bya i Ikurikiranyanyuguti Ibikorwa:" #, fuzzy #~ msgid "Do not align destination of the string operations" #~ msgstr "OYA Gutondeka Ishyika Bya i Ikurikiranyanyuguti Ibikorwa:" #, fuzzy #~ msgid "Inline all known string operations" #~ msgstr "Byose Ikurikiranyanyuguti Ibikorwa:" #, fuzzy #~ msgid "Do not inline all known string operations" #~ msgstr "OYA Mumurongo Byose Ikurikiranyanyuguti Ibikorwa:" #, fuzzy #~ msgid "Use push instructions to save outgoing arguments" #~ msgstr "Amabwiriza Kuri Kubika ingingo" #, fuzzy #~ msgid "Do not use push instructions to save outgoing arguments" #~ msgstr "OYA Gukoresha Amabwiriza Kuri Kubika ingingo" #, fuzzy #~ msgid "Support MMX built-in functions" #~ msgstr "in Imimaro" #, fuzzy #~ msgid "Do not support MMX built-in functions" #~ msgstr "OYA Gushigikira in Imimaro" #, fuzzy #~ msgid "Support 3DNow! built-in functions" #~ msgstr "in Imimaro" #, fuzzy #~ msgid "Do not support 3DNow! built-in functions" #~ msgstr "OYA Gushigikira in Imimaro" #, fuzzy #~ msgid "Support MMX and SSE built-in functions and code generation" #~ msgstr "Na in Imimaro Na ITEGEKONGENGA" #, fuzzy #~ msgid "Do not support MMX and SSE built-in functions and code generation" #~ msgstr "OYA Gushigikira Na in Imimaro Na ITEGEKONGENGA" #, fuzzy #~ msgid "Support MMX, SSE and SSE2 built-in functions and code generation" #~ msgstr "Na in Imimaro Na ITEGEKONGENGA" #, fuzzy #~ msgid "Do not support MMX, SSE and SSE2 built-in functions and code generation" #~ msgstr "OYA Gushigikira Na in Imimaro Na ITEGEKONGENGA" #, fuzzy #~ msgid "sizeof(long double) is 16" #~ msgstr "MAHARAKUBIRI ni" #, fuzzy #~ msgid "sizeof(long double) is 12" #~ msgstr "MAHARAKUBIRI ni 12" #, fuzzy #~ msgid "Generate 64bit x86-64 code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Generate 32bit i386 code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Use red-zone in the x86-64 code" #~ msgstr "Umutuku in i ITEGEKONGENGA" #, fuzzy #~ msgid "Do not use red-zone in the x86-64 code" #~ msgstr "OYA Gukoresha Umutuku in i ITEGEKONGENGA" #, fuzzy #~ msgid "Schedule code for given CPU" #~ msgstr "ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Generate floating point mathematics using given instruction set" #~ msgstr "Bihindagurika Akadomo ikoresha Gushyiraho" #, fuzzy #~ msgid "Generate code for given CPU" #~ msgstr "ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Number of registers used to pass integer arguments" #~ msgstr "Bya Kuri Umubare wuzuye ingingo" #, fuzzy #~ msgid "Loop code aligned to this power of 2" #~ msgstr "ITEGEKONGENGA Kuri iyi UMWIKUBE Bya 2." #, fuzzy #~ msgid "Jump targets are aligned to this power of 2" #~ msgstr "Kuri iyi UMWIKUBE Bya 2." #, fuzzy #~ msgid "Function starts are aligned to this power of 2" #~ msgstr "Kuri iyi UMWIKUBE Bya 2." #, fuzzy #~ msgid "Attempt to keep stack aligned to this power of 2" #~ msgstr "Kuri Gumana: Kuri iyi UMWIKUBE Bya 2." #, fuzzy #~ msgid "Branches are this expensive (1-5, arbitrary units)" #~ msgstr "iyi 1. 5" #, fuzzy #~ msgid "Use given x86-64 code model" #~ msgstr "ITEGEKONGENGA Urugero" #, fuzzy #~ msgid "Use given thread-local storage dialect" #~ msgstr "Urudodo" #, fuzzy #~ msgid "Generate ELF output" #~ msgstr "Ibisohoka" #, fuzzy #~ msgid "environment variable DJGPP not defined" #~ msgstr "IMPINDURAGACIRO OYA" #, fuzzy #~ msgid "environment variable DJGPP points to missing file '%s'" #~ msgstr "IMPINDURAGACIRO Utudomo Kuri Ibuze IDOSIYE" #, fuzzy #~ msgid "environment variable DJGPP points to corrupt file '%s'" #~ msgstr "IMPINDURAGACIRO Utudomo Kuri IDOSIYE" #, fuzzy #~ msgid "sorry, not implemented: #pragma align NAME=SIZE" #~ msgstr "OYA Gutondeka" #, fuzzy #~ msgid "malformed #pragma align - ignored" #~ msgstr "Gutondeka" #, fuzzy #~ msgid "sorry, not implemented: #pragma noalign NAME" #~ msgstr "OYA" #, fuzzy #~ msgid "conflicting architectures defined - using C series" #~ msgstr "ikoresha C Ibyiciro" #, fuzzy #~ msgid "conflicting architectures defined - using K series" #~ msgstr "ikoresha Ibyiciro" #, fuzzy #~ msgid "iC2.0 and iC3.0 are incompatible - using iC3.0" #~ msgstr "0 Na 0 ikoresha 0" #, fuzzy #~ msgid "stack limit expression is not supported" #~ msgstr "imvugo ni OYA" #, fuzzy #~ msgid "Generate SA code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Generate SB code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Generate KA code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Generate KB code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Generate JA code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Generate JD code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Generate JF code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "generate RP code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Generate MC code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Generate CA code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Generate CF code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Use software floating point" #~ msgstr "Bihindagurika Akadomo" #, fuzzy #~ msgid "Use alternate leaf function entries" #~ msgstr "Umumaro Ibyinjijwe" #, fuzzy #~ msgid "Do not use alternate leaf function entries" #~ msgstr "OYA Gukoresha Umumaro Ibyinjijwe" #, fuzzy #~ msgid "Do not perform tail call optimization" #~ msgstr "OYA" #, fuzzy #~ msgid "Use complex addressing modes" #~ msgstr "ITSINDA RY'IMIBARE C Kwohereza" #, fuzzy #~ msgid "Do not use complex addressing modes" #~ msgstr "OYA Gukoresha ITSINDA RY'IMIBARE C Kwohereza" #, fuzzy #~ msgid "Align code to 8 byte boundary" #~ msgstr "ITEGEKONGENGA Kuri 8 Bayite" #, fuzzy #~ msgid "Do not align code to 8 byte boundary" #~ msgstr "OYA Gutondeka ITEGEKONGENGA Kuri 8 Bayite" #, fuzzy #~ msgid "Enable compatibility with iC960 v2.0" #~ msgstr "Bihuye neza Na: 0" #, fuzzy #~ msgid "Enable compatibility with iC960 v3.0" #~ msgstr "Bihuye neza Na: 0" #, fuzzy #~ msgid "Enable compatibility with ic960 assembler" #~ msgstr "Bihuye neza Na:" #, fuzzy #~ msgid "Do not permit unaligned accesses" #~ msgstr "OYA" #, fuzzy #~ msgid "Layout types like Intel's v1.3 gcc" #~ msgstr "nka 3." #, fuzzy #~ msgid "Do not layout types like Intel's v1.3 gcc" #~ msgstr "OYA Imigaragarire nka 3." #, fuzzy #~ msgid "Do not enable linker relaxation" #~ msgstr "OYA Gushoboza" #, fuzzy #~ msgid "ia64_print_operand: unknown code" #~ msgstr "Kitazwi ITEGEKONGENGA" #, fuzzy #~ msgid "value of -mfixed-range must have form REG1-REG2" #~ msgstr "Agaciro Bya Urutonde Ifishi" #, fuzzy #~ msgid "%s-%s is an empty range" #~ msgstr "%s-%sni ubusa Urutonde" #, fuzzy #~ msgid "cannot optimize floating point division for both latency and throughput" #~ msgstr "Kugeza ku ndunduro Bihindagurika Akadomo kugirango Byombi Na" #, fuzzy #~ msgid "cannot optimize integer division for both latency and throughput" #~ msgstr "Kugeza ku ndunduro Umubare wuzuye kugirango Byombi Na" #, fuzzy #~ msgid "bad value (%s) for -mtls-size= switch" #~ msgstr "Agaciro kugirango Ingano Hindura" #, fuzzy #~ msgid "Generate big endian code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Generate little endian code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Generate code for GNU as" #~ msgstr "ITEGEKONGENGA kugirango Nka" #, fuzzy #~ msgid "Generate code for Intel as" #~ msgstr "ITEGEKONGENGA kugirango Nka" #, fuzzy #~ msgid "Generate code for GNU ld" #~ msgstr "ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Generate code for Intel ld" #~ msgstr "ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Generate code without GP reg" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Emit stop bits before and after volatile extended asms" #~ msgstr "Guhagarara Mbere Na Nyuma Byongerewe..." #, fuzzy #~ msgid "Don't emit stop bits before and after volatile extended asms" #~ msgstr "Guhagarara Mbere Na Nyuma Byongerewe..." #, fuzzy #~ msgid "Emit code for Itanium (TM) processor B step" #~ msgstr "ITEGEKONGENGA kugirango Intera" #, fuzzy #~ msgid "Use in/loc/out register names" #~ msgstr "in Inyuma Kwiyandikisha Amazina" #, fuzzy #~ msgid "Disable use of sdata/scommon/sbss" #~ msgstr "Gukoresha Bya" #, fuzzy #~ msgid "Enable use of sdata/scommon/sbss" #~ msgstr "Gukoresha Bya" #, fuzzy #~ msgid "gp is constant (but save/restore gp on indirect calls)" #~ msgstr "ni Kubika Kugarura ku BUZIGUYE Amahamagara:" #, fuzzy #~ msgid "Generate self-relocatable code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Generate inline floating point division, optimize for latency" #~ msgstr "Mumurongo Bihindagurika Akadomo Kugeza ku ndunduro kugirango" #, fuzzy #~ msgid "Generate inline floating point division, optimize for throughput" #~ msgstr "Mumurongo Bihindagurika Akadomo Kugeza ku ndunduro kugirango" #, fuzzy #~ msgid "Generate inline integer division, optimize for latency" #~ msgstr "Mumurongo Umubare wuzuye Kugeza ku ndunduro kugirango" #, fuzzy #~ msgid "Generate inline integer division, optimize for throughput" #~ msgstr "Mumurongo Umubare wuzuye Kugeza ku ndunduro kugirango" #, fuzzy #~ msgid "Enable Dwarf 2 line debug info via GNU as" #~ msgstr "2. Umurongo Kosora amakosa Ibisobanuro Biturutse Nka" #, fuzzy #~ msgid "Disable Dwarf 2 line debug info via GNU as" #~ msgstr "2. Umurongo Kosora amakosa Ibisobanuro Biturutse Nka" #, fuzzy #~ msgid "Specify range of registers to make fixed" #~ msgstr "Urutonde Bya Kuri Ubwoko BIHAMYE" #, fuzzy #~ msgid "bad value (%s) for -mmodel switch" #~ msgstr "Agaciro kugirango Hindura" #, fuzzy #~ msgid "bad value (%s) for -msdata switch" #~ msgstr "Agaciro kugirango Hindura" #, fuzzy #~ msgid "invalid argument of `%s' attribute" #~ msgstr "Sibyo Bya Ikiranga" #, fuzzy #~ msgid "const objects cannot go in .sdata/.sbss" #~ msgstr "Ibintu Gyayo in" #, fuzzy #~ msgid "invalid operand to %%s code" #~ msgstr "Sibyo Kuri ITEGEKONGENGA" #, fuzzy #~ msgid "invalid operand to %%p code" #~ msgstr "Sibyo Kuri ITEGEKONGENGA" #, fuzzy #~ msgid "bad insn for 'A'" #~ msgstr "kugirango" #, fuzzy #~ msgid "invalid operand to %%T/%%B code" #~ msgstr "Sibyo Kuri ITEGEKONGENGA" #, fuzzy #~ msgid "invalid operand to %%N code" #~ msgstr "Sibyo Kuri ITEGEKONGENGA" #, fuzzy #~ msgid "pre-increment address is not a register" #~ msgstr "Byahawe imiterere mbere Iyongeragaciro Aderesi ni OYA a Kwiyandikisha" #, fuzzy #~ msgid "pre-decrement address is not a register" #~ msgstr "Byahawe imiterere mbere Aderesi ni OYA a Kwiyandikisha" #, fuzzy #~ msgid "post-increment address is not a register" #~ msgstr "Iposita Iyongeragaciro Aderesi ni OYA a Kwiyandikisha" #, fuzzy #~ msgid "bad address" #~ msgstr "Aderesi" #, fuzzy #~ msgid "lo_sum not of register" #~ msgstr "OYA Bya Kwiyandikisha" #, fuzzy #~ msgid "Display compile time statistics" #~ msgstr "Gukusanya Igihe Sitatisitiki" #, fuzzy #~ msgid "Align all loops to 32 byte boundary" #~ msgstr "Byose Kuri Bayite" #, fuzzy #~ msgid "Only issue one instruction per cycle" #~ msgstr "Itangwa Uruziga" #, fuzzy #~ msgid "Prefer branches over conditional execution" #~ msgstr "KURI" #, fuzzy #~ msgid "Code size: small, medium or large" #~ msgstr "Ingano Gitoya biringaniye Cyangwa Binini" #, fuzzy #~ msgid "Small data area: none, sdata, use" #~ msgstr "Ibyatanzwe Ubuso Ntacyo Gukoresha" #, fuzzy #~ msgid "-f%s ignored for 68HC11/68HC12 (not supported)" #~ msgstr "-F kugirango OYA" #, fuzzy #~ msgid "`trap' and `far' attributes are not compatible, ignoring `far'" #~ msgstr "`Na Ibiranga OYA" #, fuzzy #~ msgid "`trap' attribute is already used" #~ msgstr "`Ikiranga ni" #, fuzzy #~ msgid "move insn not handled" #~ msgstr "Kwimura OYA" #, fuzzy #~ msgid "invalid register in the move instruction" #~ msgstr "Sibyo Kwiyandikisha in i Kwimura" #, fuzzy #~ msgid "invalid operand in the instruction" #~ msgstr "Sibyo in i" #, fuzzy #~ msgid "invalid register in the instruction" #~ msgstr "Sibyo Kwiyandikisha in i" #, fuzzy #~ msgid "operand 1 must be a hard register" #~ msgstr "1. a Ikomeye Kwiyandikisha" #, fuzzy #~ msgid "invalid rotate insn" #~ msgstr "Sibyo Kuzerutsa" #, fuzzy #~ msgid "registers IX, IY and Z used in the same INSN" #~ msgstr "Na in i" #, fuzzy #~ msgid "cannot do z-register replacement" #~ msgstr "Z Kwiyandikisha" #, fuzzy #~ msgid "invalid Z register replacement for insn" #~ msgstr "Sibyo Kwiyandikisha kugirango" #, fuzzy #~ msgid "Compile with 16-bit integer mode" #~ msgstr "Na: Umubare wuzuye Ubwoko" #, fuzzy #~ msgid "Compile with 32-bit integer mode" #~ msgstr "Na: Umubare wuzuye Ubwoko" #, fuzzy #~ msgid "Auto pre/post decrement increment allowed" #~ msgstr "Byahawe imiterere mbere Iposita Iyongeragaciro" #, fuzzy #~ msgid "Auto pre/post decrement increment not allowed" #~ msgstr "Byahawe imiterere mbere Iposita Iyongeragaciro OYA" #, fuzzy #~ msgid "Min/max instructions allowed" #~ msgstr "KININI Amabwiriza" #, fuzzy #~ msgid "Min/max instructions not allowed" #~ msgstr "KININI Amabwiriza OYA" #, fuzzy #~ msgid "Use call and rtc for function calls and returns" #~ msgstr "Na kugirango Umumaro Amahamagara: Na" #, fuzzy #~ msgid "Use jsr and rts for function calls and returns" #~ msgstr "Na kugirango Umumaro Amahamagara: Na" #, fuzzy #~ msgid "Do not use direct addressing mode for soft registers" #~ msgstr "OYA Gukoresha Kwohereza Ubwoko kugirango Yoroshe" #, fuzzy #~ msgid "Use direct addressing mode for soft registers" #~ msgstr "Kwohereza Ubwoko kugirango Yoroshe" #, fuzzy #~ msgid "Compile for a 68HC11" #~ msgstr "kugirango a" #, fuzzy #~ msgid "Compile for a 68HC12" #~ msgstr "kugirango a" #, fuzzy #~ msgid "Compile for a 68HCS12" #~ msgstr "kugirango a" #, fuzzy #~ msgid "Specify the register allocation order" #~ msgstr "i Kwiyandikisha Itondekanya" #, fuzzy #~ msgid "Indicate the number of soft registers available" #~ msgstr "i Umubare Bya Yoroshe Bihari" #, fuzzy #~ msgid "-malign-loops=%d is not between 1 and %d" #~ msgstr "-ni OYA hagati 1. Na" #, fuzzy #~ msgid "-malign-jumps=%d is not between 1 and %d" #~ msgstr "-ni OYA hagati 1. Na" #, fuzzy #~ msgid "-malign-functions=%d is not between 1 and %d" #~ msgstr "-Imimaro ni OYA hagati 1. Na" #, fuzzy #~ msgid "-fPIC is not currently supported on the 68000 or 68010\n" #~ msgstr "-ni OYA ku i Cyangwa" #, fuzzy #~ msgid "Generate code for a 68020" #~ msgstr "ITEGEKONGENGA kugirango a" #, fuzzy #~ msgid "Generate code for a 68000" #~ msgstr "ITEGEKONGENGA kugirango a" #, fuzzy #~ msgid "Use the bit-field instructions" #~ msgstr "i Umwanya Amabwiriza" #, fuzzy #~ msgid "Do not use the bit-field instructions" #~ msgstr "OYA Gukoresha i Umwanya Amabwiriza" #, fuzzy #~ msgid "Use different calling convention using 'rtd'" #~ msgstr "ikoresha" #, fuzzy #~ msgid "Consider type `int' to be 16 bits wide" #~ msgstr "Ubwoko Kuri" #, fuzzy #~ msgid "Consider type `int' to be 32 bits wide" #~ msgstr "Ubwoko Kuri" #, fuzzy #~ msgid "Generate code for a Sun FPA" #~ msgstr "ITEGEKONGENGA kugirango a" #, fuzzy #~ msgid "Do not generate code for a Sun FPA" #~ msgstr "OYA ITEGEKONGENGA kugirango a" #, fuzzy #~ msgid "Generate code for a Sun Sky board" #~ msgstr "ITEGEKONGENGA kugirango a" #, fuzzy #~ msgid "Do not use Sky linkage convention" #~ msgstr "OYA Gukoresha" #, fuzzy #~ msgid "Generate code for a 68881" #~ msgstr "ITEGEKONGENGA kugirango a" #, fuzzy #~ msgid "Generate code with library calls for floating point" #~ msgstr "ITEGEKONGENGA Na: Isomero Amahamagara: kugirango Bihindagurika Akadomo" #, fuzzy #~ msgid "Generate code for a 68040, without any new instructions" #~ msgstr "ITEGEKONGENGA kugirango a Gishya Amabwiriza" #, fuzzy #~ msgid "Generate code for a 68060, without any new instructions" #~ msgstr "ITEGEKONGENGA kugirango a Gishya Amabwiriza" #, fuzzy #~ msgid "Generate code for a 68030" #~ msgstr "ITEGEKONGENGA kugirango a" #, fuzzy #~ msgid "Generate code for a 68040" #~ msgstr "ITEGEKONGENGA kugirango a" #, fuzzy #~ msgid "Generate code for a 68060" #~ msgstr "ITEGEKONGENGA kugirango a" #, fuzzy #~ msgid "Generate code for a 520X" #~ msgstr "ITEGEKONGENGA kugirango a" #, fuzzy #~ msgid "Generate code for a 68851" #~ msgstr "ITEGEKONGENGA kugirango a" #, fuzzy #~ msgid "Do no generate code for a 68851" #~ msgstr "Oya ITEGEKONGENGA kugirango a" #, fuzzy #~ msgid "Generate code for a 68302" #~ msgstr "ITEGEKONGENGA kugirango a" #, fuzzy #~ msgid "Generate code for a 68332" #~ msgstr "ITEGEKONGENGA kugirango a" #, fuzzy #~ msgid "Generate code for a cpu32" #~ msgstr "ITEGEKONGENGA kugirango a" #, fuzzy #~ msgid "Align variables on a 32-bit boundary" #~ msgstr "Ibihinduka ku a" #, fuzzy #~ msgid "Align variables on a 16-bit boundary" #~ msgstr "Ibihinduka ku a" #, fuzzy #~ msgid "Generate pc-relative code" #~ msgstr "Bifitanye isano ITEGEKONGENGA" #, fuzzy #~ msgid "Do not use unaligned memory references" #~ msgstr "OYA Gukoresha Ububiko Indango" #, fuzzy #~ msgid "Use unaligned memory references" #~ msgstr "Ububiko Indango" #, fuzzy #~ msgid "internal gcc monitor: short-branch(%x)" #~ msgstr "By'imbere" #, fuzzy #~ msgid "internal gcc error: Can't express symbolic location" #~ msgstr "By'imbere Ikosa Ahantu" #, fuzzy #~ msgid "argument #%d is a structure" #~ msgstr "ni a Imiterere" #, fuzzy #~ msgid "%%R not followed by %%B/C/D/E" #~ msgstr "%%ROYA ku C E" #, fuzzy #~ msgid "invalid %%x/X value" #~ msgstr "Sibyo Agaciro" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%Q value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%q value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%o value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%p value" #~ msgstr "Agaciro siko" #, fuzzy #~ msgid "invalid %%s/S value" #~ msgstr "Sibyo Agaciro" #, fuzzy #~ msgid "invalid %%P operand" #~ msgstr "Sibyo" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%B value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%D value" #~ msgstr "Agaciro siko" #, fuzzy #~ msgid "`%%d' operand isn't a register" #~ msgstr "`%%d'si a Kwiyandikisha" #, fuzzy #~ msgid "operand is r0" #~ msgstr "ni" #, fuzzy #~ msgid "operand is const_double" #~ msgstr "ni" #, fuzzy #~ msgid "invalid code" #~ msgstr "Sibyo ITEGEKONGENGA" #, fuzzy #~ msgid "-mtrap-large-shift and -mhandle-large-shift are incompatible" #~ msgstr "-Binini Gusunika Na Binini Gusunika" #, fuzzy #~ msgid "invalid option `-mshort-data-%s'" #~ msgstr "Sibyo Ihitamo Ibyatanzwe" #, fuzzy #~ msgid "-mshort-data-%s is too large " #~ msgstr "-Ibyatanzwe ni Binini" #, fuzzy #~ msgid "-mshort-data-%s and PIC are incompatible" #~ msgstr "-Ibyatanzwe Na" #, fuzzy #~ msgid "invalid option `-mstack-increment=%s'" #~ msgstr "Sibyo Ihitamo Iyongeragaciro" #, fuzzy #~ msgid "Inline constants if it can be done in 2 insns or less" #~ msgstr "NIBA Byakozwe in 2. Cyangwa Birutwa" #, fuzzy #~ msgid "Inline constants if it only takes 1 instruction" #~ msgstr "NIBA 1." #, fuzzy #~ msgid "Set maximum alignment to 4" #~ msgstr "Kinini Itunganya Kuri 4." #, fuzzy #~ msgid "Set maximum alignment to 8" #~ msgstr "Kinini Itunganya Kuri 8" #, fuzzy #~ msgid "Do not use the divide instruction" #~ msgstr "OYA Gukoresha i Kugabanya" #, fuzzy #~ msgid "Do not arbitrary sized immediates in bit operations" #~ msgstr "OYA in Ibikorwa:" #, fuzzy #~ msgid "Always treat bit-field as int-sized" #~ msgstr "Umwanya Nka INT" #, fuzzy #~ msgid "Force functions to be aligned to a 4 byte boundary" #~ msgstr "Imimaro Kuri Kuri a 4. Bayite" #, fuzzy #~ msgid "Force functions to be aligned to a 2 byte boundary" #~ msgstr "Imimaro Kuri Kuri a 2. Bayite" #, fuzzy #~ msgid "Emit call graph information" #~ msgstr "Ibisobanuro" #, fuzzy #~ msgid "Prefer word accesses over byte accesses" #~ msgstr "ijambo KURI Bayite" #, fuzzy #~ msgid "Generate code for the M*Core M340" #~ msgstr "ITEGEKONGENGA kugirango i" #, fuzzy #~ msgid "Maximum amount for a single stack increment operation" #~ msgstr "Igiteranyo kugirango a UMWE Iyongeragaciro" #, fuzzy #~ msgid "bad value (%s) for -mabi= switch" #~ msgstr "Agaciro kugirango Hindura" #, fuzzy #~ msgid "-mips%d conflicts with the other architecture options, which specify a MIPS%d processor" #~ msgstr "-Na: i Ikindi Amahitamo a" #, fuzzy #~ msgid "bad value (%s) for -mips switch" #~ msgstr "Agaciro kugirango Hindura" #, fuzzy #~ msgid "-march=%s is not compatible with the selected ABI" #~ msgstr "-Werurwe ni OYA Na: i Byahiswemo" #, fuzzy #~ msgid "-mgp64 used with a 32-bit processor" #~ msgstr "-Na: a" #, fuzzy #~ msgid "-mgp32 used with a 64-bit ABI" #~ msgstr "-Na: a" #, fuzzy #~ msgid "-mgp64 used with a 32-bit ABI" #~ msgstr "-Na: a" #, fuzzy #~ msgid "unsupported combination: %s" #~ msgstr "Ivanga" #, fuzzy #~ msgid "generation of Branch Likely instructions enabled, but not supported by architecture" #~ msgstr "Bya Amabwiriza Bikora OYA ku" #, fuzzy #~ msgid "-G is incompatible with PIC code which is the default" #~ msgstr "-ni Na: ITEGEKONGENGA ni i Mburabuzi" #, fuzzy #~ msgid "-membedded-pic and -mabicalls are incompatible" #~ msgstr "-Na" #, fuzzy #~ msgid "-G and -membedded-pic are incompatible" #~ msgstr "-Na" #, fuzzy #~ msgid "invalid option `entry%s'" #~ msgstr "Sibyo Ihitamo Icyinjijwe" #, fuzzy #~ msgid "-mentry is only meaningful with -mips-16" #~ msgstr "-ni Na:" #, fuzzy #~ msgid "internal error: %%) found without a %%( in assembler pattern" #~ msgstr "By'imbere Ikosa Byabonetse a in Ishusho" #, fuzzy #~ msgid "internal error: %%] found without a %%[ in assembler pattern" #~ msgstr "By'imbere Ikosa Byabonetse a in Ishusho" #, fuzzy #~ msgid "internal error: %%> found without a %%< in assembler pattern" #~ msgstr "By'imbere Ikosa Byabonetse a in Ishusho" #, fuzzy #~ msgid "internal error: %%} found without a %%{ in assembler pattern" #~ msgstr "By'imbere Ikosa Byabonetse a in Ishusho" #, fuzzy #~ msgid "PRINT_OPERAND: unknown punctuation '%c'" #~ msgstr "Kitazwi" #, fuzzy #~ msgid "PRINT_OPERAND null pointer" #~ msgstr "NTAGIHARI Mweretsi" #, fuzzy #~ msgid "invalid use of %%d, %%x, or %%X" #~ msgstr "Sibyo Gukoresha Bya Cyangwa" #, fuzzy #~ msgid "PRINT_OPERAND_ADDRESS, null pointer" #~ msgstr "NTAGIHARI Mweretsi" #, fuzzy #~ msgid "MIPS ECOFF format does not allow changing filenames within functions with #line" #~ msgstr "Imiterere OYA Kwemerera muri Imimaro Na: Umurongo" #, fuzzy #~ msgid "can't rewind temp file" #~ msgstr "IDOSIYE" #, fuzzy #~ msgid "can't write to output file" #~ msgstr "Kwandika Kuri Ibisohoka IDOSIYE" #, fuzzy #~ msgid "can't read from temp file" #~ msgstr "Gusoma Bivuye IDOSIYE" #, fuzzy #~ msgid "can't close temp file" #~ msgstr "Gufunga IDOSIYE" #, fuzzy #~ msgid "gp_offset (%ld) or end_offset (%ld) is less than zero" #~ msgstr "Cyangwa ni Birutwa Zeru" #, fuzzy #~ msgid "fp_offset (%ld) or end_offset (%ld) is less than zero" #~ msgstr "Cyangwa ni Birutwa Zeru" #, fuzzy #~ msgid "can not handle inconsistent calls to `%s'" #~ msgstr "OYA Amahamagara: Kuri" #, fuzzy #~ msgid "the cpu name must be lower case" #~ msgstr "i CPU Izina: Ntoya" #, fuzzy #~ msgid "bad value (%s) for %s" #~ msgstr "Agaciro kugirango" #, fuzzy #~ msgid "No default crt0.o" #~ msgstr "Mburabuzi o" #, fuzzy #~ msgid "Use 64-bit int type" #~ msgstr "INT Ubwoko" #, fuzzy #~ msgid "Use 64-bit long type" #~ msgstr "Ubwoko" #, fuzzy #~ msgid "Use 32-bit long type" #~ msgstr "Ubwoko" #, fuzzy #~ msgid "Optimize lui/addiu address loads" #~ msgstr "Aderesi" #, fuzzy #~ msgid "Don't optimize lui/addiu address loads" #~ msgstr "Kugeza ku ndunduro Aderesi" #, fuzzy #~ msgid "Use MIPS as" #~ msgstr "Nka" #, fuzzy #~ msgid "Use GNU as" #~ msgstr "Nka" #, fuzzy #~ msgid "Use symbolic register names" #~ msgstr "Kwiyandikisha Amazina" #, fuzzy #~ msgid "Don't use symbolic register names" #~ msgstr "Gukoresha Kwiyandikisha Amazina" #, fuzzy #~ msgid "Use GP relative sdata/sbss sections" #~ msgstr "Bifitanye isano Ibyatoranyijwe" #, fuzzy #~ msgid "Don't use GP relative sdata/sbss sections" #~ msgstr "Gukoresha Bifitanye isano Ibyatoranyijwe" #, fuzzy #~ msgid "Output compiler statistics" #~ msgstr "Sitatisitiki" #, fuzzy #~ msgid "Don't output compiler statistics" #~ msgstr "Ibisohoka Sitatisitiki" #, fuzzy #~ msgid "Don't optimize block moves" #~ msgstr "Kugeza ku ndunduro Funga" #, fuzzy #~ msgid "Optimize block moves" #~ msgstr "Funga" #, fuzzy #~ msgid "Don't use mips-tfile asm postpass" #~ msgstr "Gukoresha" #, fuzzy #~ msgid "Use hardware floating point" #~ msgstr "Bihindagurika Akadomo" #, fuzzy #~ msgid "Use 64-bit general registers" #~ msgstr "Rusange" #, fuzzy #~ msgid "Use 32-bit general registers" #~ msgstr "Rusange" #, fuzzy #~ msgid "Don't use Irix PIC" #~ msgstr "Gukoresha" #, fuzzy #~ msgid "Use indirect calls" #~ msgstr "BUZIGUYE Amahamagara:" #, fuzzy #~ msgid "Don't use indirect calls" #~ msgstr "Gukoresha BUZIGUYE Amahamagara:" #, fuzzy #~ msgid "Use embedded PIC" #~ msgstr "Gitsindiye" #, fuzzy #~ msgid "Don't use embedded PIC" #~ msgstr "Gukoresha Gitsindiye" #, fuzzy #~ msgid "Use ROM instead of RAM" #~ msgstr "Bya" #, fuzzy #~ msgid "Don't use ROM instead of RAM" #~ msgstr "Gukoresha Bya" #, fuzzy #~ msgid "Put uninitialized constants in ROM (needs -membedded-data)" #~ msgstr "Itatangijwe in Ibyatanzwe" #, fuzzy #~ msgid "Don't put uninitialized constants in ROM" #~ msgstr "Gushyira Itatangijwe in" #, fuzzy #~ msgid "Use big-endian byte order" #~ msgstr "Bayite Itondekanya" #, fuzzy #~ msgid "Use little-endian byte order" #~ msgstr "Bayite Itondekanya" #, fuzzy #~ msgid "Use single (32-bit) FP only" #~ msgstr "UMWE" #, fuzzy #~ msgid "Don't use single (32-bit) FP only" #~ msgstr "Gukoresha UMWE" #, fuzzy #~ msgid "Use multiply accumulate" #~ msgstr "Gukuba" #, fuzzy #~ msgid "Don't use multiply accumulate" #~ msgstr "Gukoresha Gukuba" #, fuzzy #~ msgid "Don't generate fused multiply/add instructions" #~ msgstr "Gukuba Kongeramo Amabwiriza" #, fuzzy #~ msgid "Generate fused multiply/add instructions" #~ msgstr "Gukuba Kongeramo Amabwiriza" #, fuzzy #~ msgid "Don't work around early 4300 hardware bug" #~ msgstr "Akazi" #, fuzzy #~ msgid "Trap on integer divide by zero" #~ msgstr "ku Umubare wuzuye Kugabanya ku Zeru" #, fuzzy #~ msgid "Don't trap on integer divide by zero" #~ msgstr "ku Umubare wuzuye Kugabanya ku Zeru" #, fuzzy #~ msgid "Trap on integer divide overflow" #~ msgstr "ku Umubare wuzuye Kugabanya Byarenze urugero" #, fuzzy #~ msgid "Don't trap on integer divide overflow" #~ msgstr "ku Umubare wuzuye Kugabanya Byarenze urugero" #, fuzzy #~ msgid "Use Branch Likely instructions, overriding default for arch" #~ msgstr "Amabwiriza Mburabuzi kugirango" #, fuzzy #~ msgid "Don't use Branch Likely instructions, overriding default for arch" #~ msgstr "Gukoresha Amabwiriza Mburabuzi kugirango" #, fuzzy #~ msgid "Specify CPU for scheduling purposes" #~ msgstr "kugirango Impamvu" #, fuzzy #~ msgid "Specify CPU for code generation purposes" #~ msgstr "kugirango ITEGEKONGENGA Impamvu" #, fuzzy #~ msgid "Specify a Standard MIPS ISA" #~ msgstr "a" #, fuzzy #~ msgid "Use mips16 entry/exit psuedo ops" #~ msgstr "Icyinjijwe Gusohoka" #, fuzzy #~ msgid "Don't use MIPS16 instructions" #~ msgstr "Gukoresha Amabwiriza" #, fuzzy #~ msgid "Don't call any cache flush functions" #~ msgstr "Ubwihisho Imimaro" #, fuzzy #~ msgid "Specify cache flush function" #~ msgstr "Ubwihisho Umumaro" #, fuzzy #~ msgid "mips16 function profiling" #~ msgstr "Umumaro" #, fuzzy #~ msgid "-f%s not supported: ignored" #~ msgstr "-F OYA" #, fuzzy #~ msgid "too large function value type, needs %d registers, have only %d registers for this" #~ msgstr "Binini Umumaro Agaciro Ubwoko kugirango iyi" #, fuzzy #~ msgid "function_profiler support for MMIX" #~ msgstr "Gushigikira kugirango" #, fuzzy #~ msgid "MMIX Internal: Last named vararg would not fit in a register" #~ msgstr "OYA in a Kwiyandikisha" #, fuzzy #~ msgid "MMIX Internal: Expected a CONST_INT, not this" #~ msgstr "Itegerejwe a OYA iyi" #, fuzzy #~ msgid "MMIX Internal: Bad register: %d" #~ msgstr "Kwiyandikisha" #, fuzzy #~ msgid "MMIX Internal: Bad value for 'm', not a CONST_INT" #~ msgstr "Agaciro kugirango OYA a" #, fuzzy #~ msgid "MMIX Internal: Expected a register, not this" #~ msgstr "Itegerejwe a Kwiyandikisha OYA iyi" #, fuzzy #~ msgid "MMIX Internal: Expected a constant, not this" #~ msgstr "Itegerejwe a OYA iyi" #, fuzzy #~ msgid "MMIX Internal: Missing `%c' case in mmix_print_operand" #~ msgstr "in" #, fuzzy #~ msgid "MMIX Internal: Cannot decode this operand" #~ msgstr "iyi" #, fuzzy #~ msgid "MMIX Internal: This is not a recognized address" #~ msgstr "ni OYA a Aderesi" #, fuzzy #~ msgid "stack frame not a multiple of 8 bytes: %d" #~ msgstr "Ikadiri OYA a Igikubo Bya 8 Bayite" #, fuzzy #~ msgid "stack frame not a multiple of octabyte: %d" #~ msgstr "Ikadiri OYA a Igikubo Bya" #, fuzzy #~ msgid "MMIX Internal: %s is not a shiftable int" #~ msgstr "ni OYA a INT" #, fuzzy #~ msgid "MMIX Internal: Trying to output invalidly reversed condition:" #~ msgstr "Kuri Ibisohoka Bicuritswe Ibisabwa" #, fuzzy #~ msgid "MMIX Internal: What's the CC of this?" #~ msgstr "i Bya iyi" #, fuzzy #~ msgid "MMIX Internal: What is the CC of this?" #~ msgstr "ni i Bya iyi" #, fuzzy #~ msgid "MMIX Internal: This is not a constant:" #~ msgstr "ni OYA a" #, fuzzy #~ msgid "Set start-address of the program" #~ msgstr "Gutangira Aderesi Bya i Porogaramu" #, fuzzy #~ msgid "Set start-address of data" #~ msgstr "Gutangira Aderesi Bya Ibyatanzwe" #, fuzzy #~ msgid "For intrinsics library: pass all parameters in registers" #~ msgstr "Isomero Byose Ibigenga in" #, fuzzy #~ msgid "Use register stack for parameters and return value" #~ msgstr "Kwiyandikisha kugirango Ibigenga Na Garuka Agaciro" #, fuzzy #~ msgid "Use call-clobbered registers for parameters and return value" #~ msgstr "kugirango Ibigenga Na Garuka Agaciro" #, fuzzy #~ msgid "Use epsilon-respecting floating point compare instructions" #~ msgstr "ebusiloni Bihindagurika Akadomo Kugereranya# Amabwiriza" #, fuzzy #~ msgid "Use zero-extending memory loads, not sign-extending ones" #~ msgstr "Zeru Ububiko OYA IKIMENYETSO" #, fuzzy #~ msgid "Generate divide results with reminder having the same sign as the divisor (not the dividend)" #~ msgstr "Kugabanya Ibisubizo ku Na: Mwibutsa i IKIMENYETSO Nka i Ikigabanya OYA i Ikigabanywa" #, fuzzy #~ msgid "Prepend global symbols with \":\" (for use with PREFIX)" #~ msgstr "Ibimenyetso Na: kugirango Gukoresha Na:" #, fuzzy #~ msgid "Do not provide a default start-address 0x100 of the program" #~ msgstr "OYA a Mburabuzi Gutangira Aderesi Bya i Porogaramu" #, fuzzy #~ msgid "Link to emit program in ELF format (rather than mmo)" #~ msgstr "Kuri Porogaramu in Imiterere" #, fuzzy #~ msgid "Use P-mnemonics for branches statically predicted as taken" #~ msgstr "kugirango Nka" #, fuzzy #~ msgid "Don't use P-mnemonics for branches" #~ msgstr "Gukoresha kugirango" #, fuzzy #~ msgid "Use addresses that allocate global registers" #~ msgstr "Amaderesi" #, fuzzy #~ msgid "Do not use addresses that allocate global registers" #~ msgstr "OYA Gukoresha Amaderesi" #, fuzzy #~ msgid "Generate a single exit point for each function" #~ msgstr "a UMWE Gusohoka Akadomo kugirango Umumaro" #, fuzzy #~ msgid "Do not generate a single exit point for each function" #~ msgstr "OYA a UMWE Gusohoka Akadomo kugirango Umumaro" #, fuzzy #~ msgid "Work around hardware multiply bug" #~ msgstr "Gukuba" #, fuzzy #~ msgid "Do not work around hardware multiply bug" #~ msgstr "OYA Akazi Gukuba" #, fuzzy #~ msgid "Target the AM33 processor" #~ msgstr "i" #, fuzzy #~ msgid "Don't use hardware fp" #~ msgstr "Gukoresha" #, fuzzy #~ msgid "Pass some arguments in registers" #~ msgstr "ingingo in" #, fuzzy #~ msgid "Pass all arguments on stack" #~ msgstr "Byose ingingo ku" #, fuzzy #~ msgid "Optimize for 32532 cpu" #~ msgstr "kugirango CPU" #, fuzzy #~ msgid "Optimize for 32332 cpu" #~ msgstr "kugirango CPU" #, fuzzy #~ msgid "Optimize for 32032" #~ msgstr "kugirango" #, fuzzy #~ msgid "Register sb is zero. Use for absolute addressing" #~ msgstr "ni Zeru kugirango Kwohereza" #, fuzzy #~ msgid "Do not use register sb" #~ msgstr "OYA Gukoresha Kwiyandikisha" #, fuzzy #~ msgid "Use bit-field instructions" #~ msgstr "Umwanya Amabwiriza" #, fuzzy #~ msgid "Do not use bit-field instructions" #~ msgstr "OYA Gukoresha Umwanya Amabwiriza" #, fuzzy #~ msgid "Generate code for high memory" #~ msgstr "ITEGEKONGENGA kugirango kirekire Ububiko" #, fuzzy #~ msgid "Generate code for low memory" #~ msgstr "ITEGEKONGENGA kugirango Byo hasi Ububiko" #, fuzzy #~ msgid "Use multiply-accumulate fp instructions" #~ msgstr "Gukuba Amabwiriza" #, fuzzy #~ msgid "Do not use multiply-accumulate fp instructions" #~ msgstr "OYA Gukoresha Gukuba Amabwiriza" #, fuzzy #~ msgid "\"Small register classes\" kludge" #~ msgstr "\"Kwiyandikisha Inzego" #, fuzzy #~ msgid "No \"Small register classes\" kludge" #~ msgstr "Kwiyandikisha Inzego" #, fuzzy #~ msgid "" #~ "unknown -mschedule= option (%s).\n" #~ "Valid options are 700, 7100, 7100LC, 7200, 7300, and 8000\n" #~ msgstr "Kitazwi Ihitamo Amahitamo Na" #, fuzzy #~ msgid "" #~ "unknown -march= option (%s).\n" #~ "Valid options are 1.0, 1.1, and 2.0\n" #~ msgstr "01. 1na2." #, fuzzy #~ msgid "PIC code generation is not supported in the portable runtime model\n" #~ msgstr "ITEGEKONGENGA ni OYA in i" #, fuzzy #~ msgid "PIC code generation is not compatible with fast indirect calls\n" #~ msgstr "ITEGEKONGENGA ni OYA Na: Byihuta BUZIGUYE" #, fuzzy #~ msgid "-g is only supported when using GAS on this processor," #~ msgstr "-g ni Ryari: ikoresha ku iyi" #, fuzzy #~ msgid "-g option disabled" #~ msgstr "-g Ihitamo Yahagaritswe" #, fuzzy #~ msgid "Generate cpp defines for server IO" #~ msgstr "kugirango Seriveri" #, fuzzy #~ msgid "Generate cpp defines for workstation IO" #~ msgstr "kugirango" #, fuzzy #~ msgid "Generate PA1.1 code" #~ msgstr "1. ITEGEKONGENGA" #, fuzzy #~ msgid "Generate PA1.0 code" #~ msgstr "0 ITEGEKONGENGA" #, fuzzy #~ msgid "Generate PA2.0 code (requires binutils 2.10 or later)" #~ msgstr "0 ITEGEKONGENGA 2. 10 Cyangwa" #, fuzzy #~ msgid "Do not disable FP regs" #~ msgstr "OYA" #, fuzzy #~ msgid "Disable space regs" #~ msgstr "Umwanya" #, fuzzy #~ msgid "Do not disable space regs" #~ msgstr "OYA Umwanya" #, fuzzy #~ msgid "Put jumps in call delay slots" #~ msgstr "in Gutinda Siloti" #, fuzzy #~ msgid "Do not put jumps in call delay slots" #~ msgstr "OYA Gushyira in Gutinda Siloti" #, fuzzy #~ msgid "Disable indexed addressing" #~ msgstr "Kwohereza" #, fuzzy #~ msgid "Do not disable indexed addressing" #~ msgstr "OYA Kwohereza" #, fuzzy #~ msgid "Do not use portable calling conventions" #~ msgstr "OYA Gukoresha" #, fuzzy #~ msgid "Assume code will be assembled by GAS" #~ msgstr "ITEGEKONGENGA ku" #, fuzzy #~ msgid "Do not assume code will be assembled by GAS" #~ msgstr "OYA ITEGEKONGENGA ku" #, fuzzy #~ msgid "Do not use software floating point" #~ msgstr "OYA Gukoresha Bihindagurika Akadomo" #, fuzzy #~ msgid "Emit long load/store sequences" #~ msgstr "Ibirimo" #, fuzzy #~ msgid "Do not emit long load/store sequences" #~ msgstr "OYA Ibirimo" #, fuzzy #~ msgid "Generate fast indirect calls" #~ msgstr "Byihuta BUZIGUYE Amahamagara:" #, fuzzy #~ msgid "Do not generate fast indirect calls" #~ msgstr "OYA Byihuta BUZIGUYE Amahamagara:" #, fuzzy #~ msgid "Generate code for huge switch statements" #~ msgstr "ITEGEKONGENGA kugirango Hindura" #, fuzzy #~ msgid "Do not generate code for huge switch statements" #~ msgstr "OYA ITEGEKONGENGA kugirango Hindura" #, fuzzy #~ msgid "Always generate long calls" #~ msgstr "Amahamagara:" #, fuzzy #~ msgid "Generate long calls only when needed" #~ msgstr "Amahamagara: Ryari:" #, fuzzy #~ msgid "Specify architecture for code generation. Values are 1.0, 1.1, and 2.0. 2.0 requires gas snapshot 19990413 or later." #~ msgstr "01. 1na2. 0. 2.." #, fuzzy #~ msgid "Assume code will be linked by GNU ld" #~ msgstr "ITEGEKONGENGA ku" #, fuzzy #~ msgid "Assume code will be linked by HP ld" #~ msgstr "ITEGEKONGENGA ku" #, fuzzy #~ msgid "Do not use hardware floating point" #~ msgstr "OYA Gukoresha Bihindagurika Akadomo" #, fuzzy #~ msgid "Return floating point results in ac0" #~ msgstr "Bihindagurika Akadomo Ibisubizo ku in" #, fuzzy #~ msgid "Return floating point results in memory" #~ msgstr "Bihindagurika Akadomo Ibisubizo ku in Ububiko" #, fuzzy #~ msgid "Generate code for an 11/40" #~ msgstr "ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Generate code for an 11/45" #~ msgstr "ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Generate code for an 11/10" #~ msgstr "ITEGEKONGENGA kugirango 10" #, fuzzy #~ msgid "Use 32 bit int" #~ msgstr "INT" #, fuzzy #~ msgid "Use 16 bit int" #~ msgstr "INT" #, fuzzy #~ msgid "Use 32 bit float" #~ msgstr "Kureremba" #, fuzzy #~ msgid "Use 64 bit float" #~ msgstr "Kureremba" #, fuzzy #~ msgid "Target has split I&D" #~ msgstr "Gutandukanya" #, fuzzy #~ msgid "Target does not have split I&D" #~ msgstr "OYA Gutandukanya" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%S value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%b value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%z value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%Z value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%k value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%j value" #~ msgstr "Agaciro siko" #, fuzzy #~ msgid "can't have varargs with -mfp-arg-in-fp-regs" #~ msgstr "Na: in" #, fuzzy #~ msgid "missing open paren" #~ msgstr "Ibuze Gufungura" #, fuzzy #~ msgid "missing number" #~ msgstr "Ibuze Umubare" #, fuzzy #~ msgid "missing close paren" #~ msgstr "Ibuze Gufunga" #, fuzzy #~ msgid "number must be 0 or 1" #~ msgstr "Umubare 0 Cyangwa 1." #, fuzzy #~ msgid "junk at end of #pragma longcall" #~ msgstr "Umwanda ku Impera Bya" #, fuzzy #~ msgid "-mmultiple is not supported on little endian systems" #~ msgstr "-ni OYA ku" #, fuzzy #~ msgid "-mstring is not supported on little endian systems" #~ msgstr "-ni OYA ku" #, fuzzy #~ msgid "unknown -mdebug-%s switch" #~ msgstr "Kitazwi Hindura" #, fuzzy #~ msgid "unknown -mtraceback arg `%s'; expecting `full', `partial' or `none'" #~ msgstr "Kitazwi Cyangwa" #, fuzzy #~ msgid "Unknown switch -mlong-double-%s" #~ msgstr "Hindura MAHARAKUBIRI" #, fuzzy #~ msgid "unknown -misel= option specified: '%s'" #~ msgstr "Kitazwi Ihitamo" #, fuzzy #~ msgid "unknown -mvrsave= option specified: '%s'" #~ msgstr "Kitazwi Ihitamo" #, fuzzy #~ msgid "unknown ABI specified: '%s'" #~ msgstr "Kitazwi" #, fuzzy #~ msgid "argument 1 must be a 5-bit signed literal" #~ msgstr "1. a 5" #, fuzzy #~ msgid "argument 2 must be a 5-bit unsigned literal" #~ msgstr "2. a 5 Bitashizweho umukono" #, fuzzy #~ msgid "argument 1 of __builtin_altivec_predicate must be a constant" #~ msgstr "1. Bya a" #, fuzzy #~ msgid "argument 1 of __builtin_altivec_predicate is out of range" #~ msgstr "1. Bya ni Inyuma Bya Urutonde" #, fuzzy #~ msgid "argument 3 must be a 4-bit unsigned literal" #~ msgstr "3. a 4. Bitashizweho umukono" #, fuzzy #~ msgid "argument to `%s' must be a 2-bit unsigned literal" #~ msgstr "Kuri a 2. Bitashizweho umukono" #, fuzzy #~ msgid "argument to dss must be a 2-bit unsigned literal" #~ msgstr "Kuri a 2. Bitashizweho umukono" #, fuzzy #~ msgid "argument 1 of __builtin_spe_predicate must be a constant" #~ msgstr "1. Bya a" #, fuzzy #~ msgid "argument 1 of __builtin_spe_predicate is out of range" #~ msgstr "1. Bya ni Inyuma Bya Urutonde" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%f value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%F value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%G value" #~ msgstr "Agaciro siko" #, fuzzy #~ msgid "invalid %%j code" #~ msgstr "Sibyo ITEGEKONGENGA" #, fuzzy #~ msgid "invalid %%J code" #~ msgstr "Sibyo ITEGEKONGENGA" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%K value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%O value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%T value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%u value" #~ msgstr "Agaciro siko" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_VALID_DEFERROR.text #, fuzzy #~ msgid "invalid %%v value" #~ msgstr "Agaciro siko" #, fuzzy #~ msgid "no profiling of 64-bit code for this ABI" #~ msgstr "Oya Bya ITEGEKONGENGA kugirango iyi" #, fuzzy #~ msgid "Always pass floating-point arguments in memory" #~ msgstr "Bihindagurika Akadomo ingingo in Ububiko" #, fuzzy #~ msgid "Don't always pass floating-point arguments in memory" #~ msgstr "Buri gihe Bihindagurika Akadomo ingingo in Ububiko" #, fuzzy #~ msgid "Support message passing with the Parallel Environment" #~ msgstr "Ubutumwa Na: i" #, fuzzy #~ msgid "Compile for 64-bit pointers" #~ msgstr "kugirango" #, fuzzy #~ msgid "Compile for 32-bit pointers" #~ msgstr "kugirango" #, fuzzy #~ msgid "-maix64 and POWER architecture are incompatible" #~ msgstr "-Na" #, fuzzy #~ msgid "-maix64 requires PowerPC64 architecture remain enabled" #~ msgstr "-Bikora" #, fuzzy #~ msgid "-maix64 required: 64-bit computation with 32-bit addressing not yet supported" #~ msgstr "-Bya ngombwa Na: Kwohereza OYA" #, fuzzy #~ msgid "Use POWER instruction set" #~ msgstr "Gushyiraho" #, fuzzy #~ msgid "Use POWER2 instruction set" #~ msgstr "Gushyiraho" #, fuzzy #~ msgid "Do not use POWER2 instruction set" #~ msgstr "OYA Gukoresha Gushyiraho" #, fuzzy #~ msgid "Do not use POWER instruction set" #~ msgstr "OYA Gukoresha Gushyiraho" #, fuzzy #~ msgid "Use PowerPC instruction set" #~ msgstr "Gushyiraho" #, fuzzy #~ msgid "Do not use PowerPC instruction set" #~ msgstr "OYA Gukoresha Gushyiraho" #, fuzzy #~ msgid "Use PowerPC General Purpose group optional instructions" #~ msgstr "Itsinda Bitari ngombwa Amabwiriza" #, fuzzy #~ msgid "Don't use PowerPC General Purpose group optional instructions" #~ msgstr "Gukoresha Itsinda Bitari ngombwa Amabwiriza" #, fuzzy #~ msgid "Use PowerPC Graphics group optional instructions" #~ msgstr "Itsinda Bitari ngombwa Amabwiriza" #, fuzzy #~ msgid "Don't use PowerPC Graphics group optional instructions" #~ msgstr "Gukoresha Itsinda Bitari ngombwa Amabwiriza" #, fuzzy #~ msgid "Use PowerPC-64 instruction set" #~ msgstr "Gushyiraho" #, fuzzy #~ msgid "Don't use PowerPC-64 instruction set" #~ msgstr "Gukoresha Gushyiraho" #, fuzzy #~ msgid "Use AltiVec instructions" #~ msgstr "Amabwiriza" #, fuzzy #~ msgid "Don't use AltiVec instructions" #~ msgstr "Gukoresha Amabwiriza" #, fuzzy #~ msgid "Use new mnemonics for PowerPC architecture" #~ msgstr "Gishya kugirango" #, fuzzy #~ msgid "Use old mnemonics for PowerPC architecture" #~ msgstr "ki/ bishaje kugirango" #, fuzzy #~ msgid "Put everything in the regular TOC" #~ msgstr "in i Ibisanzwe" #, fuzzy #~ msgid "Place floating point constants in TOC" #~ msgstr "Bihindagurika Akadomo in" #, fuzzy #~ msgid "Don't place floating point constants in TOC" #~ msgstr "Bihindagurika Akadomo in" #, fuzzy #~ msgid "Place symbol+offset constants in TOC" #~ msgstr "IKIMENYETSO Nta- boneza in" #, fuzzy #~ msgid "Don't place symbol+offset constants in TOC" #~ msgstr "IKIMENYETSO Nta- boneza in" #, fuzzy #~ msgid "Place variable addresses in the regular TOC" #~ msgstr "IMPINDURAGACIRO Amaderesi in i Ibisanzwe" #, fuzzy #~ msgid "Generate load/store multiple instructions" #~ msgstr "Ibirimo Igikubo Amabwiriza" #, fuzzy #~ msgid "Do not generate load/store multiple instructions" #~ msgstr "OYA Ibirimo Igikubo Amabwiriza" #, fuzzy #~ msgid "Generate string instructions for block moves" #~ msgstr "Ikurikiranyanyuguti Amabwiriza kugirango Funga" #, fuzzy #~ msgid "Do not generate string instructions for block moves" #~ msgstr "OYA Ikurikiranyanyuguti Amabwiriza kugirango Funga" #, fuzzy #~ msgid "Generate load/store with update instructions" #~ msgstr "Ibirimo Na: Kuvugurura Amabwiriza" #, fuzzy #~ msgid "Do not generate load/store with update instructions" #~ msgstr "OYA Ibirimo Na: Kuvugurura Amabwiriza" #, fuzzy #~ msgid "Don't schedule the start and end of the procedure" #~ msgstr "Igenabihe i Gutangira Na Impera Bya i" #, fuzzy #~ msgid "Return all structures in memory (AIX default)" #~ msgstr "Byose in Ububiko Mburabuzi" #, fuzzy #~ msgid "Return small structures in registers (SVR4 default)" #~ msgstr "Gitoya in Mburabuzi" #, fuzzy #~ msgid "Use features of and schedule code for given CPU" #~ msgstr "Ibiranga Bya Na Igenabihe ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Enable debug output" #~ msgstr "Kosora amakosa Ibisohoka" #, fuzzy #~ msgid "Select full, part, or no traceback table" #~ msgstr "Cyangwa Oya imbonerahamwe#" #, fuzzy #~ msgid "Specify ABI to use" #~ msgstr "Kuri Gukoresha" #, fuzzy #~ msgid "Specify size of long double (64 or 128 bits)" #~ msgstr "Ingano Bya MAHARAKUBIRI Cyangwa" #, fuzzy #~ msgid "Specify yes/no if isel instructions should be generated" #~ msgstr "Yego Oya NIBA Amabwiriza" #, fuzzy #~ msgid "Specify yes/no if VRSAVE instructions should be generated for AltiVec" #~ msgstr "Yego Oya NIBA Amabwiriza kugirango" #, fuzzy #~ msgid "Avoid all range limits on call instructions" #~ msgstr "Byose Urutonde Imbibi ku Amabwiriza" #, fuzzy #~ msgid "RETURN_ADDRESS_OFFSET not supported" #~ msgstr "OYA" #, fuzzy #~ msgid "Select method for sdata handling" #~ msgstr "Uburyo kugirango" #, fuzzy #~ msgid "Align to the base type of the bit-field" #~ msgstr "Kuri i SHINGIRO Ubwoko Bya i Umwanya" #, fuzzy #~ msgid "Don't align to the base type of the bit-field" #~ msgstr "Gutondeka Kuri i SHINGIRO Ubwoko Bya i Umwanya" #, fuzzy #~ msgid "Don't assume that unaligned accesses are handled by the system" #~ msgstr "ku i Sisitemu" #, fuzzy #~ msgid "Assume that unaligned accesses are handled by the system" #~ msgstr "ku i Sisitemu" #, fuzzy #~ msgid "Produce code relocatable at runtime" #~ msgstr "ITEGEKONGENGA ku" #, fuzzy #~ msgid "Don't produce code relocatable at runtime" #~ msgstr "ITEGEKONGENGA ku" #, fuzzy #~ msgid "Produce little endian code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "Produce big endian code" #~ msgstr "ITEGEKONGENGA" #, fuzzy #~ msgid "no description yet" #~ msgstr "Oya Isobanuramiterere" #, fuzzy #~ msgid "Don't use EABI" #~ msgstr "Gukoresha" #, fuzzy #~ msgid "Do not allow bit-fields to cross word boundaries" #~ msgstr "OYA Kwemerera Imyanya Kuri Kwambukiranya ijambo" #, fuzzy #~ msgid "Use alternate register names" #~ msgstr "Kwiyandikisha Amazina" #, fuzzy #~ msgid "Don't use alternate register names" #~ msgstr "Gukoresha Kwiyandikisha Amazina" #, fuzzy #~ msgid "Link with libsim.a, libc.a and sim-crt0.o" #~ msgstr "Na: a a Na o" #, fuzzy #~ msgid "Link with libads.a, libc.a and crt0.o" #~ msgstr "Na: a a Na o" #, fuzzy #~ msgid "Link with libyk.a, libc.a and crt0.o" #~ msgstr "Na: a a Na o" #, fuzzy #~ msgid "Link with libmvme.a, libc.a and crt0.o" #~ msgstr "Na: a a Na o" #, fuzzy #~ msgid "Set the PPC_EMB bit in the ELF flags header" #~ msgstr "i in i Amabendera Umutwempangano" #, fuzzy #~ msgid "Use the WindISS simulator" #~ msgstr "i" #, fuzzy #~ msgid "bad value for -mcall-%s" #~ msgstr "Agaciro kugirango" #, fuzzy #~ msgid "bad value for -msdata=%s" #~ msgstr "Agaciro kugirango" #, fuzzy #~ msgid "-mrelocatable and -msdata=%s are incompatible" #~ msgstr "-Na" #, fuzzy #~ msgid "-f%s and -msdata=%s are incompatible" #~ msgstr "-F Na" #, fuzzy #~ msgid "-msdata=%s and -mcall-%s are incompatible" #~ msgstr "-Na" #, fuzzy #~ msgid "-mrelocatable and -mno-minimal-toc are incompatible" #~ msgstr "-Na" #, fuzzy #~ msgid "-mrelocatable and -mcall-%s are incompatible" #~ msgstr "-Na" #, fuzzy #~ msgid "-fPIC and -mcall-%s are incompatible" #~ msgstr "-Na" #, fuzzy #~ msgid "invalid UNSPEC as operand (1)" #~ msgstr "Sibyo Nka 1." #, fuzzy #~ msgid "invalid UNSPEC as operand (2)" #~ msgstr "Sibyo Nka 2." #, fuzzy #~ msgid "UNKNOWN in s390_output_symbolic_const !?" #~ msgstr "in" #, fuzzy #~ msgid "Cannot decompose address." #~ msgstr "Aderesi" #, fuzzy #~ msgid "UNKNOWN in print_operand !?" #~ msgstr "in" #, fuzzy #~ msgid "Total size of local variables exceeds architecture limit." #~ msgstr "Ingano Bya Ibihinduka" #, fuzzy #~ msgid "Don't set backchain (faster, but debug harder" #~ msgstr "Gushyiraho Kosora amakosa" #, fuzzy #~ msgid "Use bras for executable < 64k" #~ msgstr "kugirango" #, fuzzy #~ msgid "Don't use bras" #~ msgstr "Gukoresha" #, fuzzy #~ msgid "Additional debug prints" #~ msgstr "Kosora amakosa" #, fuzzy #~ msgid "Don't print additional debug prints" #~ msgstr "Gucapa Kosora amakosa" #, fuzzy #~ msgid "64 bit mode" #~ msgstr "Ubwoko" #, fuzzy #~ msgid "31 bit mode" #~ msgstr "Ubwoko" #, fuzzy #~ msgid "mvcle use" #~ msgstr "Gukoresha" #, fuzzy #~ msgid "__builtin_saveregs not supported by this subtarget" #~ msgstr "_OYA ku iyi" #, fuzzy #~ msgid "attribute interrupt_handler is not compatible with -m5-compact" #~ msgstr "Ikiranga ni OYA Na:" #, fuzzy #~ msgid "`%s' attribute only applies to interrupt functions" #~ msgstr "`%s'Ikiranga Kuri Hagarikira aho Imimaro" #, fuzzy #~ msgid "`%s' attribute argument not a string constant" #~ msgstr "`%s'Ikiranga OYA a Ikurikiranyanyuguti" #, fuzzy #~ msgid "`%s' attribute argument not an integer constant" #~ msgstr "`%s'Ikiranga OYA Umubare wuzuye" #, fuzzy #~ msgid "Profiling is not supported on this target." #~ msgstr "ni OYA ku iyi Intego" #, fuzzy #~ msgid "%s is not supported by this configuration" #~ msgstr "%sni OYA ku iyi Iboneza" #, fuzzy #~ msgid "-mlong-double-64 not allowed with -m64" #~ msgstr "-MAHARAKUBIRI OYA Na:" #, fuzzy #~ msgid "-mcmodel= is not supported on 32 bit systems" #~ msgstr "-ni OYA ku" #, fuzzy #~ msgid "invalid %%Y operand" #~ msgstr "Sibyo" #, fuzzy #~ msgid "invalid %%A operand" #~ msgstr "Sibyo" #, fuzzy #~ msgid "invalid %%B operand" #~ msgstr "Sibyo" #, fuzzy #~ msgid "invalid %%c operand" #~ msgstr "Sibyo" #, fuzzy #~ msgid "invalid %%C operand" #~ msgstr "Sibyo" #, fuzzy #~ msgid "invalid %%d operand" #~ msgstr "Sibyo" #, fuzzy #~ msgid "invalid %%D operand" #~ msgstr "Sibyo" #, fuzzy #~ msgid "invalid %%f operand" #~ msgstr "Sibyo" #, fuzzy #~ msgid "invalid %%s operand" #~ msgstr "Sibyo" #, fuzzy #~ msgid "long long constant not a valid immediate operand" #~ msgstr "OYA a Byemewe" #, fuzzy #~ msgid "floating point constant not a valid immediate operand" #~ msgstr "Bihindagurika Akadomo OYA a Byemewe" #, fuzzy #~ msgid "Generate code for big endian" #~ msgstr "ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Generate code for little endian" #~ msgstr "ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Use little-endian byte order for data" #~ msgstr "Bayite Itondekanya kugirango Ibyatanzwe" #, fuzzy #~ msgid "Assume possible double misalignment" #~ msgstr "MAHARAKUBIRI" #, fuzzy #~ msgid "Assume all doubles are aligned" #~ msgstr "Byose" #, fuzzy #~ msgid "Pass -assert pure-text to linker" #~ msgstr "Umwandiko Kuri" #, fuzzy #~ msgid "Do not pass -assert pure-text to linker" #~ msgstr "OYA Umwandiko Kuri" #, fuzzy #~ msgid "Use flat register window model" #~ msgstr "Kirambuye Kwiyandikisha Idirishya Urugero" #, fuzzy #~ msgid "Do not use flat register window model" #~ msgstr "OYA Gukoresha Kirambuye Kwiyandikisha Idirishya Urugero" #, fuzzy #~ msgid "Do not use ABI reserved registers" #~ msgstr "OYA Gukoresha" #, fuzzy #~ msgid "Use hardware quad fp instructions" #~ msgstr "Amabwiriza" #, fuzzy #~ msgid "Do not use hardware quad fp instructions" #~ msgstr "OYA Gukoresha Amabwiriza" #, fuzzy #~ msgid "Compile for v8plus ABI" #~ msgstr "kugirango" #, fuzzy #~ msgid "Do not compile for v8plus ABI" #~ msgstr "OYA Gukusanya kugirango" #, fuzzy #~ msgid "Do not utilize Visual Instruction Set" #~ msgstr "OYA" #, fuzzy #~ msgid "Optimize for Cypress processors" #~ msgstr "kugirango" #, fuzzy #~ msgid "Optimize for SPARCLite processors" #~ msgstr "kugirango" #, fuzzy #~ msgid "Optimize for F930 processors" #~ msgstr "kugirango" #, fuzzy #~ msgid "Optimize for F934 processors" #~ msgstr "kugirango" #, fuzzy #~ msgid "Optimize for SuperSPARC processors" #~ msgstr "kugirango" #, fuzzy #~ msgid "Do not use stack bias" #~ msgstr "OYA Gukoresha" #, fuzzy #~ msgid "Use structs on stronger alignment for double-word copies" #~ msgstr "ku Itunganya kugirango MAHARAKUBIRI ijambo Amakopi" #, fuzzy #~ msgid "Do not use structs on stronger alignment for double-word copies" #~ msgstr "OYA Gukoresha ku Itunganya kugirango MAHARAKUBIRI ijambo Amakopi" #, fuzzy #~ msgid "Optimize tail call instructions in assembler and linker" #~ msgstr "Amabwiriza in Na" #, fuzzy #~ msgid "Do not optimize tail call instructions in assembler or linker" #~ msgstr "OYA Kugeza ku ndunduro Amabwiriza in Cyangwa" #, fuzzy #~ msgid "Use given SPARC code model" #~ msgstr "ITEGEKONGENGA Urugero" #, fuzzy #~ msgid "cannot use va_start in interrupt function" #~ msgstr "Gukoresha in Hagarikira aho Umumaro" #, fuzzy #~ msgid "`B' operand is not constant" #~ msgstr "`ni OYA" #, fuzzy #~ msgid "`B' operand has multiple bits set" #~ msgstr "`Igikubo Gushyiraho" #, fuzzy #~ msgid "`o' operand is not constant" #~ msgstr "`ni OYA" #, fuzzy #~ msgid "xstormy16_print_operand: unknown code" #~ msgstr "Kitazwi ITEGEKONGENGA" #, fuzzy #~ msgid "switch statement of size %lu entries too large" #~ msgstr "Hindura Inyandiko Bya Ingano Ibyinjijwe Binini" #, fuzzy #~ msgid "#pragma GHS endXXXX found without previous startXXX" #~ msgstr "#Byabonetse Ibanjirije" #, fuzzy #~ msgid "#pragma GHS endXXX does not match previous startXXX" #~ msgstr "#OYA BIHUYE Ibanjirije" #, fuzzy #~ msgid "cannot set interrupt attribute: no current function" #~ msgstr "Gushyiraho Hagarikira aho Ikiranga Oya KIGEZWEHO Umumaro" #, fuzzy #~ msgid "cannot set interrupt attribute: no such identifier" #~ msgstr "Gushyiraho Hagarikira aho Ikiranga Oya Ikiranga" #, fuzzy #~ msgid "junk at end of #pragma ghs section" #~ msgstr "Umwanda ku Impera Bya Icyiciro" #, fuzzy #~ msgid "unrecognized section name \"%s\"" #~ msgstr "Icyiciro Izina:" #, fuzzy #~ msgid "malformed #pragma ghs section" #~ msgstr "Icyiciro" #, fuzzy #~ msgid "junk at end of #pragma ghs interrupt" #~ msgstr "Umwanda ku Impera Bya Hagarikira aho" #, fuzzy #~ msgid "junk at end of #pragma ghs starttda" #~ msgstr "Umwanda ku Impera Bya" #, fuzzy #~ msgid "junk at end of #pragma ghs startsda" #~ msgstr "Umwanda ku Impera Bya" #, fuzzy #~ msgid "junk at end of #pragma ghs startzda" #~ msgstr "Umwanda ku Impera Bya" #, fuzzy #~ msgid "junk at end of #pragma ghs endtda" #~ msgstr "Umwanda ku Impera Bya" #, fuzzy #~ msgid "junk at end of #pragma ghs endsda" #~ msgstr "Umwanda ku Impera Bya" #, fuzzy #~ msgid "junk at end of #pragma ghs endzda" #~ msgstr "Umwanda ku Impera Bya" #, fuzzy #~ msgid "%s=%s is not numeric" #~ msgstr "%s=%sni OYA Bikurikije umubare" #, fuzzy #~ msgid "%s=%s is too large" #~ msgstr "%s=%sni Binini" #, fuzzy #~ msgid "const_double_split got a bad insn:" #~ msgstr "a" #, fuzzy #~ msgid "a data area attribute cannot be specified for local variables" #~ msgstr "a Ibyatanzwe Ubuso Ikiranga kugirango Ibihinduka" #, fuzzy #~ msgid "data area of '%s' conflicts with previous declaration" #~ msgstr "Ibyatanzwe Ubuso Bya Na: Ibanjirije" #, fuzzy #~ msgid "bad amount of stack space removal: %d" #~ msgstr "Igiteranyo Bya Umwanya" #, fuzzy #~ msgid "Too much stack space to dispose of: %d" #~ msgstr "Umwanya Kuri Bya" #, fuzzy #~ msgid "Too much stack space to prepare: %d" #~ msgstr "Umwanya Kuri" #, fuzzy #~ msgid "Prohibit PC relative function calls" #~ msgstr "Bifitanye isano Umumaro Amahamagara:" #, fuzzy #~ msgid "Reuse r30 on a per function basis" #~ msgstr "ku a Umumaro Ishingiro" #, fuzzy #~ msgid "Use stubs for function prologues" #~ msgstr "kugirango Umumaro" #, fuzzy #~ msgid "Same as: -mep -mprolog-function" #~ msgstr "Nka Umumaro" #, fuzzy #~ msgid "Compile for the v850 processor" #~ msgstr "kugirango i" #, fuzzy #~ msgid "Compile for v850e processor" #~ msgstr "kugirango" #, fuzzy #~ msgid "Enable the use of the short load instructions" #~ msgstr "i Gukoresha Bya i Ibirimo Amabwiriza" #, fuzzy #~ msgid "Do not use the callt instruction" #~ msgstr "OYA Gukoresha i" #, fuzzy #~ msgid "Do not use registers r2 and r5" #~ msgstr "OYA Gukoresha Na" #, fuzzy #~ msgid "Enforce strict alignment" #~ msgstr "Itunganya" #, fuzzy #~ msgid "Use 4 byte entries in switch tables" #~ msgstr "4. Bayite Ibyinjijwe in Hindura Imbonerahamwe" #, fuzzy #~ msgid "Set the max size of data eligible for the TDA area" #~ msgstr "i KININI Ingano Bya Ibyatanzwe kugirango i Ubuso" #, fuzzy #~ msgid "Set the max size of data eligible for the SDA area" #~ msgstr "i KININI Ingano Bya Ibyatanzwe kugirango i Ubuso" #, fuzzy #~ msgid "Set the max size of data eligible for the ZDA area" #~ msgstr "i KININI Ingano Bya Ibyatanzwe kugirango i Ubuso" #, fuzzy #~ msgid "bad test" #~ msgstr "Igerageza" #, fuzzy #~ msgid "boolean registers required for the floating-point option" #~ msgstr "Icyungo Bya ngombwa kugirango i Bihindagurika Akadomo Ihitamo" #, fuzzy #~ msgid "invalid mask" #~ msgstr "Sibyo" #, fuzzy #~ msgid "invalid address" #~ msgstr "Sibyo Aderesi" #, fuzzy #~ msgid "no register in address" #~ msgstr "Oya Kwiyandikisha in Aderesi" #, fuzzy #~ msgid "address offset not a constant" #~ msgstr "Aderesi Nta- boneza OYA a" #, fuzzy #~ msgid "only uninitialized variables can be placed in a .bss section" #~ msgstr "Itatangijwe Ibihinduka in a Icyiciro" #, fuzzy #~ msgid "Use the Xtensa code density option" #~ msgstr "i ITEGEKONGENGA Ihitamo" #, fuzzy #~ msgid "Do not use the Xtensa code density option" #~ msgstr "OYA Gukoresha i ITEGEKONGENGA Ihitamo" #, fuzzy #~ msgid "Use the Xtensa MAC16 option" #~ msgstr "i Ihitamo" #, fuzzy #~ msgid "Do not use the Xtensa MAC16 option" #~ msgstr "OYA Gukoresha i Ihitamo" #, fuzzy #~ msgid "Use the Xtensa MUL16 option" #~ msgstr "i Ihitamo" #, fuzzy #~ msgid "Do not use the Xtensa MUL16 option" #~ msgstr "OYA Gukoresha i Ihitamo" #, fuzzy #~ msgid "Use the Xtensa MUL32 option" #~ msgstr "i Ihitamo" #, fuzzy #~ msgid "Do not use the Xtensa MUL32 option" #~ msgstr "OYA Gukoresha i Ihitamo" #, fuzzy #~ msgid "Use the Xtensa NSA option" #~ msgstr "i Ihitamo" #, fuzzy #~ msgid "Do not use the Xtensa NSA option" #~ msgstr "OYA Gukoresha i Ihitamo" #, fuzzy #~ msgid "Use the Xtensa MIN/MAX option" #~ msgstr "i Ihitamo" #, fuzzy #~ msgid "Do not use the Xtensa MIN/MAX option" #~ msgstr "OYA Gukoresha i Ihitamo" #, fuzzy #~ msgid "Use the Xtensa SEXT option" #~ msgstr "i Ihitamo" #, fuzzy #~ msgid "Do not use the Xtensa SEXT option" #~ msgstr "OYA Gukoresha i Ihitamo" #, fuzzy #~ msgid "Use the Xtensa boolean register option" #~ msgstr "i Icyungo Kwiyandikisha Ihitamo" #, fuzzy #~ msgid "Do not use the Xtensa boolean register option" #~ msgstr "OYA Gukoresha i Icyungo Kwiyandikisha Ihitamo" #, fuzzy #~ msgid "Use the Xtensa floating-point unit" #~ msgstr "i Bihindagurika Akadomo Igice:" #, fuzzy #~ msgid "Do not use the Xtensa floating-point unit" #~ msgstr "OYA Gukoresha i Bihindagurika Akadomo Igice:" #, fuzzy #~ msgid "Disable fused multiply/add and multiply/subtract FP instructions" #~ msgstr "Gukuba Kongeramo Na Gukuba Gukuramo Amabwiriza" #, fuzzy #~ msgid "Enable fused multiply/add and multiply/subtract FP instructions" #~ msgstr "Gukuba Kongeramo Na Gukuba Gukuramo Amabwiriza" #, fuzzy #~ msgid "Serialize volatile memory references with MEMW instructions" #~ msgstr "Ububiko Indango Na: Amabwiriza" #, fuzzy #~ msgid "Do not serialize volatile memory references with MEMW instructions" #~ msgstr "OYA Ububiko Indango Na: Amabwiriza" #, fuzzy #~ msgid "Intersperse literal pools with code in the text section" #~ msgstr "Na: ITEGEKONGENGA in i Umwandiko Icyiciro" #, fuzzy #~ msgid "Put literal pools in a separate literal section" #~ msgstr "in a Icyiciro" #, fuzzy #~ msgid "Automatically align branch targets to reduce branch penalties" #~ msgstr "Gutondeka Kuri" #, fuzzy #~ msgid "Do not automatically align branch targets" #~ msgstr "OYA ku buryo bwikora Gutondeka" #, fuzzy #~ msgid "Use indirect CALLXn instructions for large programs" #~ msgstr "BUZIGUYE Amabwiriza kugirango Binini Porogaramu" #, fuzzy #~ msgid "Use direct CALLn instructions for fast calls" #~ msgstr "Amabwiriza kugirango Byihuta Amahamagara:" #, fuzzy #~ msgid "`-gnat' misspelled as `-gant'" #~ msgstr "`-Nka" #, fuzzy #~ msgid "qualified type `%T' does not match destructor name `~%T'" #~ msgstr "Ubwoko OYA BIHUYE Izina:" #, fuzzy #~ msgid "type of `%E' does not match destructor type `%T' (type was `%T')" #~ msgstr "Ubwoko Bya OYA BIHUYE Ubwoko Ubwoko" #, fuzzy #~ msgid "`%D' is a namespace" #~ msgstr "`%D'ni a" #, fuzzy #~ msgid "base object `%E' of scoped method call is of non-aggregate type `%T'" #~ msgstr "SHINGIRO Igikoresho Bya Uburyo ni Bya Ubwoko" #, fuzzy #~ msgid "unable to call pointer to member function here" #~ msgstr "Kuri Mweretsi Kuri Umumaro" #, fuzzy #~ msgid "destructors take no parameters" #~ msgstr "Oya Ibigenga" #, fuzzy #~ msgid "destructor name `~%T' does not match type `%T' of expression" #~ msgstr "Izina: OYA BIHUYE Ubwoko Bya imvugo" #, fuzzy #~ msgid "request for member `%D' in `%E', which is of non-aggregate type `%T'" #~ msgstr "Kubaza... kugirango in ni Bya Ubwoko" #, fuzzy #~ msgid "request for member `%D' is ambiguous" #~ msgstr "Kubaza... kugirango ni" #, fuzzy #~ msgid "%s %D(%T, %T, %T) " #~ msgstr "%s%D(%T,%T,%T)" #~ msgstr "%s%D(%T,%T)" #~ msgstr "%s%D(%T)" #~ msgstr "%s%T*" #~ msgstr "Mweretsi Kuri Umumaro Igikoresho ikoresha Cyangwa" #, fuzzy #~ msgid "no match for call to `(%T) (%A)'" #~ msgstr "Oya BIHUYE kugirango Kuri" #, fuzzy #~ msgid "call of `(%T) (%A)' is ambiguous" #~ msgstr "Bya ni" #, fuzzy #~ msgid "%s for `%T ? %T : %T' operator" #~ msgstr "%skugirango." #, fuzzy #~ msgid "%s for `%T %s' operator" #~ msgstr "%skugirango Mukoresha" #, fuzzy #~ msgid "%s for `%T [%T]' operator" #~ msgstr "%skugirango Mukoresha" #, fuzzy #~ msgid "%s for `%T %s %T' operator" #~ msgstr "%skugirango Mukoresha" #, fuzzy #~ msgid "%s for `%s %T' operator" #~ msgstr "%skugirango Mukoresha" #, fuzzy #~ msgid "ISO C++ forbids omitting the middle term of a ?: expression" #~ msgstr "C i Hagati Ijambo Bya a imvugo" #, fuzzy #~ msgid "`%E' has type `void' and is not a throw-expression" #~ msgstr "`%E'Ubwoko Na ni OYA a imvugo" #, fuzzy #~ msgid "operands to ?: have different types" #~ msgstr "Kuri" #, fuzzy #~ msgid "enumeral mismatch in conditional expression: `%T' vs `%T'" #~ msgstr "in imvugo" #, fuzzy #~ msgid "enumeral and non-enumeral type in conditional expression" #~ msgstr "Na Ubwoko in imvugo" #, fuzzy #~ msgid "`%D' must be declared before use" #~ msgstr "`%D'Mbere Gukoresha" #, fuzzy #~ msgid "no `%D(int)' declared for postfix `%s', trying prefix operator instead" #~ msgstr "Oya INT kugirango Imbanziriza Mukoresha" #, fuzzy #~ msgid "using synthesized `%#D' for copy assignment" #~ msgstr "ikoresha kugirango Gukoporora Igenera" #, fuzzy #~ msgid " where cfront would use `%#D'" #~ msgstr "Gukoresha" #, fuzzy #~ msgid "comparison between `%#T' and `%#T'" #~ msgstr "hagati Na" #, fuzzy #~ msgid "no suitable `operator delete' for `%T'" #~ msgstr "Oya Mukoresha kugirango" #, fuzzy #~ msgid "`%+#D' is private" #~ msgstr "`%+#D'ni By'umwihariko" #, fuzzy #~ msgid "`%+#D' is protected" #~ msgstr "`%+#D'ni Birinzwe" #, fuzzy #~ msgid "`%+#D' is inaccessible" #~ msgstr "`%+#D'ni" #, fuzzy #~ msgid "within this context" #~ msgstr "muri iyi Imvugiro" #, fuzzy #~ msgid "invalid conversion from `%T' to `%T'" #~ msgstr "Sibyo Ihindurangero Bivuye Kuri" #, fuzzy #~ msgid " initializing argument %P of `%D'" #~ msgstr "Gutangiza Bya" #, fuzzy #~ msgid " initializing argument %P of `%D' from result of `%D'" #~ msgstr "Gutangiza Bya Bivuye Igisubizo Bya" #, fuzzy #~ msgid " initializing temporary from result of `%D'" #~ msgstr "Gutangiza By'igihe gito Bivuye Igisubizo Bya" #, fuzzy #~ msgid "cannot pass objects of non-POD type `%#T' through `...'; call will abort at runtime" #~ msgstr "Ibintu Bya Ubwoko Gihinguranya Kureka ku" #, fuzzy #~ msgid "cannot receive objects of non-POD type `%#T' through `...'" #~ msgstr "Akira Ibintu Bya Ubwoko Gihinguranya" #, fuzzy #~ msgid "passing `%T' as `this' argument of `%#D' discards qualifiers" #~ msgstr "Nka Bya" #, fuzzy #~ msgid "could not find class$ field in java interface type `%T'" #~ msgstr "OYA Gushaka ishuri Umwanya in java Ubwoko" #, fuzzy #~ msgid "call to non-function `%D'" #~ msgstr "Kuri Umumaro" #, fuzzy #~ msgid "no matching function for call to `%T::%D(%A)%#V'" #~ msgstr "Oya Umumaro kugirango Kuri" #, fuzzy #~ msgid "cannot call member function `%D' without object" #~ msgstr "Umumaro Igikoresho" #, fuzzy #~ msgid "passing `%T' chooses `%T' over `%T'" #~ msgstr "KURI" #, fuzzy #~ msgid " in call to `%D'" #~ msgstr "in Kuri" #, fuzzy #~ msgid "choosing `%D' over `%D'" #~ msgstr "KURI" #, fuzzy #~ msgid " for conversion from `%T' to `%T'" #~ msgstr "kugirango Ihindurangero Bivuye Kuri" #, fuzzy #~ msgid " because conversion sequence for the argument is better" #~ msgstr "Ihindurangero kugirango i ni" #, fuzzy #~ msgid "ISO C++ says that `%D' and `%D' are ambiguous even though the worst conversion for the former is better than the worst conversion for the latter" #~ msgstr "C Na ATARIIGIHARWE i Ihindurangero kugirango i ni i Ihindurangero kugirango i" #, fuzzy #~ msgid "cannot convert from base `%T' to derived type `%T' via virtual base `%T'" #~ msgstr "GUHINDURA Bivuye SHINGIRO Kuri Ubwoko Biturutse Kitaboneka SHINGIRO" #, fuzzy #~ msgid "`%#D' and `%#D' cannot be overloaded" #~ msgstr "`%#D'Na" #, fuzzy #~ msgid "duplicate enum value `%D'" #~ msgstr "Gusubiramo Agaciro" #, fuzzy #~ msgid "duplicate field `%D' (as enum and non-enum)" #~ msgstr "Gusubiramo Umwanya Nka Na" #, fuzzy #~ msgid "duplicate nested type `%D'" #~ msgstr "Gusubiramo Ubwoko" #, fuzzy #~ msgid "duplicate field `%D' (as type and non-type)" #~ msgstr "Gusubiramo Umwanya Nka Ubwoko Na Ubwoko" #, fuzzy #~ msgid "duplicate member `%D'" #~ msgstr "Gusubiramo" #, fuzzy #~ msgid "conflicting access specifications for method `%D', ignored" #~ msgstr "kugirango Uburyo" #, fuzzy #~ msgid "conflicting access specifications for field `%s', ignored" #~ msgstr "kugirango Umwanya" #, fuzzy #~ msgid "`%D' names constructor" #~ msgstr "`%D'Amazina" #, fuzzy #~ msgid "`%D' invalid in `%T'" #~ msgstr "`%D'Sibyo in" #, fuzzy #~ msgid "no members matching `%D' in `%#T'" #~ msgstr "Oya in" #, fuzzy #~ msgid "`%D' invalid in `%#T'" #~ msgstr "`%D'Sibyo in" #, fuzzy #~ msgid " because of local method `%#D' with same name" #~ msgstr "Bya Uburyo Na: Izina:" #, fuzzy #~ msgid " because of local member `%#D' with same name" #~ msgstr "Bya Na: Izina:" #, fuzzy #~ msgid "base class `%#T' has a non-virtual destructor" #~ msgstr "SHINGIRO ishuri a Kitaboneka" #, fuzzy #~ msgid "base `%T' with only non-default constructor in class without a constructor" #~ msgstr "SHINGIRO Na: Mburabuzi in ishuri a" #, fuzzy #~ msgid "all member functions in class `%T' are private" #~ msgstr "Byose Imimaro in ishuri By'umwihariko" #, fuzzy #~ msgid "`%#T' only defines a private destructor and has no friends" #~ msgstr "`%#T'a By'umwihariko Na Oya" #, fuzzy #~ msgid "`%#T' only defines private constructors and has no friends" #~ msgstr "`%#T'By'umwihariko Na Oya" #, fuzzy #~ msgid "redefinition of `%#T'" #~ msgstr "Bya" #, fuzzy #~ msgid "previous definition of `%#T'" #~ msgstr "Ibanjirije Insobanuro Bya" #, fuzzy #~ msgid "no unique final overrider for `%D' in `%T'" #~ msgstr "Oya Cyo nyine kugirango in" #, fuzzy #~ msgid "`%D' was hidden" #~ msgstr "`%D'gihishwe" # sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_BY.text #, fuzzy #~ msgid " by `%D'" #~ msgstr "ku" #, fuzzy #~ msgid "ISO C++ forbids member `%D' with same name as enclosing class" #~ msgstr "C Na: Izina: Nka ishuri" #, fuzzy #~ msgid "`%#D' invalid; an anonymous union can only have non-static data members" #~ msgstr "`%#D'Sibyo Ihuza Ibyatanzwe" #, fuzzy #~ msgid "private member `%#D' in anonymous union" #~ msgstr "By'umwihariko in Ihuza" #, fuzzy #~ msgid "protected member `%#D' in anonymous union" #~ msgstr "Birinzwe in Ihuza" #, fuzzy #~ msgid "vtable layout for class `%T' may not be ABI-compliant and may change in a future version of GCC due to implicit virtual destructor" #~ msgstr "Imigaragarire kugirango ishuri Gicurasi OYA Na Gicurasi Guhindura>> in a Verisiyo Bya Kuri Kitaboneka" #, fuzzy #~ msgid "bit-field `%#D' with non-integral type" #~ msgstr "Umwanya Na: Umubare Wuzuye Ubwoko" #, fuzzy #~ msgid "bit-field `%D' width not an integer constant" #~ msgstr "Umwanya Ubugari OYA Umubare wuzuye" #, fuzzy #~ msgid "negative width in bit-field `%D'" #~ msgstr "Ubugari in Umwanya" #, fuzzy #~ msgid "zero width for bit-field `%D'" #~ msgstr "Zeru Ubugari kugirango Umwanya" #, fuzzy #~ msgid "width of `%D' exceeds its type" #~ msgstr "Ubugari Bya Ubwoko" #, fuzzy #~ msgid "`%D' is too small to hold all values of `%#T'" #~ msgstr "`%D'ni Gitoya Kuri Byose Uduciro Bya" #, fuzzy #~ msgid "member `%#D' with constructor not allowed in union" #~ msgstr "Na: OYA in Ihuza" #, fuzzy #~ msgid "member `%#D' with destructor not allowed in union" #~ msgstr "Na: OYA in Ihuza" #, fuzzy #~ msgid "member `%#D' with copy assignment operator not allowed in union" #~ msgstr "Na: Gukoporora Igenera Mukoresha OYA in Ihuza" #, fuzzy #~ msgid "multiple fields in union `%T' initialized" #~ msgstr "Igikubo Imyanya in Ihuza" #, fuzzy #~ msgid "field `%D' in local class cannot be static" #~ msgstr "Umwanya in ishuri" #, fuzzy #~ msgid "field `%D' invalidly declared function type" #~ msgstr "Umwanya Umumaro Ubwoko" #, fuzzy #~ msgid "field `%D' invalidly declared method type" #~ msgstr "Umwanya Uburyo Ubwoko" #, fuzzy #~ msgid "field `%D' invalidly declared offset type" #~ msgstr "Umwanya Nta- boneza Ubwoko" #, fuzzy #~ msgid "field `%D' declared static in union" #~ msgstr "Umwanya in Ihuza" #, fuzzy #~ msgid "non-static reference `%#D' in class without a constructor" #~ msgstr "Indango in ishuri a" #, fuzzy #~ msgid "non-static const member `%#D' in class without a constructor" #~ msgstr "in ishuri a" #, fuzzy #~ msgid "field `%#D' with same name as class" #~ msgstr "Umwanya Na: Izina: Nka ishuri" #, fuzzy #~ msgid "`%#T' has pointer data members" #~ msgstr "`%#T'Mweretsi Ibyatanzwe" #, fuzzy #~ msgid " but does not override `%T(const %T&)'" #~ msgstr "OYA" #, fuzzy #~ msgid " or `operator=(const %T&)'" #~ msgstr "Cyangwa Mukoresha" #, fuzzy #~ msgid " but does not override `operator=(const %T&)'" #~ msgstr "OYA Mukoresha" #, fuzzy #~ msgid "offset of empty base `%T' may not be ABI-compliant and maychange in a future version of GCC" #~ msgstr "Nta- boneza Bya ubusa SHINGIRO Gicurasi OYA Na in a Verisiyo Bya" #, fuzzy #~ msgid "class `%T' will be considered nearly empty in a future version of GCC" #~ msgstr "ishuri ubusa in a Verisiyo Bya" #, fuzzy #~ msgid "initializer specified for non-virtual method `%D'" #~ msgstr "kugirango Kitaboneka Uburyo" #, fuzzy #~ msgid "offset of virtual base `%T' is not ABI-compliant and may change in a future version of GCC" #~ msgstr "Nta- boneza Bya Kitaboneka SHINGIRO ni OYA Na Gicurasi Guhindura>> in a Verisiyo Bya" #, fuzzy #~ msgid "direct base `%T' inaccessible in `%T' due to ambiguity" #~ msgstr "SHINGIRO in Kuri" #, fuzzy #~ msgid "virtual base `%T' inaccessible in `%T' due to ambiguity" #~ msgstr "Kitaboneka SHINGIRO in Kuri" #, fuzzy #~ msgid "size assigned to `%T' may not be ABI-compliant and may change in a future version of GCC" #~ msgstr "Ingano Kuri Gicurasi OYA Na Gicurasi Guhindura>> in a Verisiyo Bya" #, fuzzy #~ msgid "offset of `%D' is not ABI-compliant and may change in a future version of GCC" #~ msgstr "Nta- boneza Bya ni OYA Na Gicurasi Guhindura>> in a Verisiyo Bya" #, fuzzy #~ msgid "`%D' contains empty classes which may cause base classes to be placed at different locations in a future version of GCC" #~ msgstr "`%D'Kirimo ubusa Inzego Gicurasi SHINGIRO Inzego Kuri ku in a Verisiyo Bya" #, fuzzy #~ msgid "layout of classes derived from empty class `%T' may change in a future version of GCC" #~ msgstr "Imigaragarire Bya Inzego Bivuye ubusa ishuri Gicurasi Guhindura>> in a Verisiyo Bya" #, fuzzy #~ msgid "`%#T' has virtual functions but non-virtual destructor" #~ msgstr "`%#T'Kitaboneka Imimaro Kitaboneka" #, fuzzy #~ msgid "trying to finish struct, but kicked out due to previous parse errors" #~ msgstr "Kuri Kurangiza Inyuma Kuri Ibanjirije Amakosa" #, fuzzy #~ msgid "language string `\"%s\"' not recognized" #~ msgstr "Ururimi Ikurikiranyanyuguti OYA" #, fuzzy #~ msgid "cannot resolve overloaded function `%D' based on conversion to type `%T'" #~ msgstr "Umumaro ku Ihindurangero Kuri Ubwoko" #, fuzzy #~ msgid "no matches converting function `%D' to type `%#T'" #~ msgstr "Oya Guhindura.... Umumaro Kuri Ubwoko" #, fuzzy #~ msgid "converting overloaded function `%D' to type `%#T' is ambiguous" #~ msgstr "Guhindura.... Umumaro Kuri Ubwoko ni" #, fuzzy #~ msgid "assuming pointer to member `%D'" #~ msgstr "Mweretsi Kuri" #, fuzzy #~ msgid "(a pointer to member can only be formed with `&%E')" #~ msgstr "(a Mweretsi Kuri Na:" #, fuzzy #~ msgid "not enough type information" #~ msgstr "OYA Ubwoko Ibisobanuro" #, fuzzy #~ msgid "argument of type `%T' does not match `%T'" #~ msgstr "Bya Ubwoko OYA BIHUYE" #, fuzzy #~ msgid "invalid operation on uninstantiated type" #~ msgstr "Sibyo ku Ubwoko" #, fuzzy #~ msgid "declaration of `%#D'" #~ msgstr "Bya" #, fuzzy #~ msgid "changes meaning of `%D' from `%+#D'" #~ msgstr "Amahinduka Igisobanuro Bya Bivuye" #, fuzzy #~ msgid "can't convert from incomplete type `%T' to `%T'" #~ msgstr "GUHINDURA Bivuye Ubwoko Kuri" #, fuzzy #~ msgid "conversion of `%E' from `%T' to `%T' is ambiguous" #~ msgstr "Ihindurangero Bya Bivuye Kuri ni" #, fuzzy #~ msgid "converting from `%T' to `%T'" #~ msgstr "Guhindura.... Bivuye Kuri" #, fuzzy #~ msgid "pointer to member cast from `%T' to `%T' is via virtual base" #~ msgstr "Mweretsi Kuri Bivuye Kuri ni Biturutse Kitaboneka SHINGIRO" #, fuzzy #~ msgid "cannot convert `%E' from type `%T' to type `%T'" #~ msgstr "GUHINDURA Bivuye Ubwoko Kuri Ubwoko" #, fuzzy #~ msgid "invalid conversion from '%T' to '%T'" #~ msgstr "Sibyo Ihindurangero Bivuye Kuri" #, fuzzy #~ msgid "conversion from `%T' to `%T' discards qualifiers" #~ msgstr "Ihindurangero Bivuye Kuri" #, fuzzy #~ msgid "casting `%T' to `%T' does not dereference pointer" #~ msgstr "Kuri OYA Mweretsi" #, fuzzy #~ msgid "cannot convert type `%T' to type `%T'" #~ msgstr "GUHINDURA Ubwoko Kuri Ubwoko" #, fuzzy #~ msgid "conversion from `%#T' to `%#T'" #~ msgstr "Ihindurangero Bivuye Kuri" #, fuzzy #~ msgid "`%#T' used where a `%T' was expected" #~ msgstr "`%#T'a Ikitezwe:" #, fuzzy #~ msgid "the address of `%D', will always be `true'" #~ msgstr "i Aderesi Bya Buri gihe" #, fuzzy #~ msgid "`%#T' used where a floating point value was expected" #~ msgstr "`%#T'a Bihindagurika Akadomo Agaciro Ikitezwe:" #, fuzzy #~ msgid "conversion from `%T' to non-scalar type `%T' requested" #~ msgstr "Ihindurangero Bivuye Kuri Ubwoko" #, fuzzy #~ msgid "object of incomplete type `%T' will not be accessed in %s" #~ msgstr "Igikoresho Bya Ubwoko OYA birabonetse in" #, fuzzy #~ msgid "object of type `%T' will not be accessed in %s" #~ msgstr "Igikoresho Bya Ubwoko OYA birabonetse in" #, fuzzy #~ msgid "object `%E' of incomplete type `%T' will not be accessed in %s" #~ msgstr "Igikoresho Bya Ubwoko OYA birabonetse in" #, fuzzy #~ msgid "%s cannot resolve address of overloaded function" #~ msgstr "%sAderesi Bya Umumaro" #, fuzzy #~ msgid "%s is a reference, not call, to function `%E'" #~ msgstr "%sni a Indango OYA Kuri Umumaro" #, fuzzy #~ msgid "ambiguous default type conversion from `%T'" #~ msgstr "Mburabuzi Ubwoko Ihindurangero Bivuye" #, fuzzy #~ msgid " candidate conversions include `%D' and `%D'" #~ msgstr "Gushyiramo Na" #, fuzzy #~ msgid "conflicts with previous declaration `%#D'" #~ msgstr "Na: Ibanjirije" #, fuzzy #~ msgid "label `%D' used but not defined" #~ msgstr "Akarango OYA" #, fuzzy #~ msgid "label `%D' defined but not used" #~ msgstr "Akarango OYA" #, fuzzy #~ msgid "namespace alias `%D' not allowed here, assuming `%D'" #~ msgstr "Irihimbano OYA" #, fuzzy #~ msgid "previous declaration of `%D'" #~ msgstr "Ibanjirije Bya" #, fuzzy #~ msgid "shadowing %s function `%#D'" #~ msgstr "Ishyiraho ry'igicucu Umumaro" #, fuzzy #~ msgid "library function `%#D' redeclared as non-function `%#D'" #~ msgstr "Isomero Umumaro Nka Umumaro" #, fuzzy #~ msgid "conflicts with built-in declaration `%#D'" #~ msgstr "Na: in" #, fuzzy #~ msgid "new declaration `%#D'" #~ msgstr "Gishya" #, fuzzy #~ msgid "ambiguates built-in declaration `%#D'" #~ msgstr "in" #, fuzzy #~ msgid "`%#D' redeclared as different kind of symbol" #~ msgstr "`%#D'Nka Bya IKIMENYETSO" #, fuzzy #~ msgid "previous declaration of `%#D'" #~ msgstr "Ibanjirije Bya" #, fuzzy #~ msgid "declaration of template `%#D'" #~ msgstr "Bya Inyandikorugero" #, fuzzy #~ msgid "ambiguates old declaration `%#D'" #~ msgstr "ki/ bishaje" #, fuzzy #~ msgid "declaration of C function `%#D' conflicts with" #~ msgstr "Bya C Umumaro Na:" #, fuzzy #~ msgid "previous declaration `%#D' here" #~ msgstr "Ibanjirije" #, fuzzy #~ msgid "conflicting types for `%#D'" #~ msgstr "kugirango" #, fuzzy #~ msgid "previous declaration as `%#D'" #~ msgstr "Ibanjirije Nka" #, fuzzy #~ msgid "prototype for `%#D'" #~ msgstr "kugirango" #, fuzzy #~ msgid "follows non-prototype definition here" #~ msgstr "Insobanuro" #, fuzzy #~ msgid "previous declaration of `%#D' with %L linkage" #~ msgstr "Ibanjirije Bya Na:" #, fuzzy #~ msgid "conflicts with new declaration with %L linkage" #~ msgstr "Na: Gishya Na:" #, fuzzy #~ msgid "default argument given for parameter %d of `%#D'" #~ msgstr "Mburabuzi kugirango Bya" #, fuzzy #~ msgid "after previous specification in `%#D'" #~ msgstr "Nyuma Ibanjirije in" #, fuzzy #~ msgid "`%#D' was used before it was declared inline" #~ msgstr "`%#D'Mbere Mumurongo" #, fuzzy #~ msgid "previous non-inline declaration here" #~ msgstr "Ibanjirije Mumurongo" #, fuzzy #~ msgid "redundant redeclaration of `%D' in same scope" #~ msgstr "Bya in Ingano:" #, fuzzy #~ msgid "declaration of `%F' throws different exceptions" #~ msgstr "Bya Amarengayobora" #, fuzzy #~ msgid "than previous declaration `%F'" #~ msgstr "Ibanjirije" #, fuzzy #~ msgid "explicit specialization of %D after first use" #~ msgstr "Bya Nyuma Itangira Gukoresha" #, fuzzy #~ msgid "`%#D' used prior to declaration" #~ msgstr "`%#D'Kuri" #, fuzzy #~ msgid "redeclaration of `wchar_t' as `%T'" #~ msgstr "Bya Nka" #, fuzzy #~ msgid "invalid redeclaration of `%D'" #~ msgstr "Sibyo Bya" # svx/source\dialog\backgrnd.src:RID_SVXPAGE_BACKGROUND.FT_SELECTOR.text #, fuzzy #~ msgid "as `%D'" #~ msgstr "Nka" #, fuzzy #~ msgid "previous external decl of `%#D'" #~ msgstr "Ibanjirije external Bya" #, fuzzy #~ msgid "`%D' was previously implicitly declared to return `int'" #~ msgstr "`%D'Kuri Garuka" #, fuzzy #~ msgid "extern declaration of `%#D' doesn't match" #~ msgstr "Bya BIHUYE" #, fuzzy #~ msgid "declaration of `%#D' shadows a parameter" #~ msgstr "Bya a" #, fuzzy #~ msgid "declaration of `%s' shadows a member of `this'" #~ msgstr "Bya a Bya" #, fuzzy #~ msgid "`%#D' hides constructor for `%#T'" #~ msgstr "`%#D'kugirango" #, fuzzy #~ msgid "`%#D' conflicts with previous using declaration `%#D'" #~ msgstr "`%#D'Na: Ibanjirije ikoresha" #, fuzzy #~ msgid "previous non-function declaration `%#D'" #~ msgstr "Ibanjirije Umumaro" #, fuzzy #~ msgid "conflicts with function declaration `%#D'" #~ msgstr "Na: Umumaro" #, fuzzy #~ msgid "implicit declaration of function `%#D'" #~ msgstr "Bya Umumaro" #, fuzzy #~ msgid "label `%s' referenced outside of any function" #~ msgstr "Akarango Hanze Bya Umumaro" #, fuzzy #~ msgid "jump to label `%D'" #~ msgstr "Simbuka Kuri Akarango" #, fuzzy #~ msgid "jump to case label" #~ msgstr "Simbuka Kuri Akarango" #, fuzzy #~ msgid " crosses initialization of `%#D'" #~ msgstr "Bya" #, fuzzy #~ msgid " enters scope of non-POD `%#D'" #~ msgstr "Ingano: Bya" #, fuzzy #~ msgid " enters try block" #~ msgstr "Funga" #, fuzzy #~ msgid " enters catch block" #~ msgstr "Funga" #, fuzzy #~ msgid " from here" #~ msgstr "Bivuye" #, fuzzy #~ msgid " skips initialization of `%#D'" #~ msgstr "Bya" #, fuzzy #~ msgid "label named wchar_t" #~ msgstr "Akarango" #, fuzzy #~ msgid "duplicate label `%D'" #~ msgstr "Gusubiramo Akarango" #, fuzzy #~ msgid "case label `%E' not within a switch statement" #~ msgstr "Akarango OYA muri a Hindura Inyandiko" #, fuzzy #~ msgid "`%#D' redeclared as %C" #~ msgstr "`%#D'Nka" #, fuzzy #~ msgid "invalid use of `%D'" #~ msgstr "Sibyo Gukoresha Bya" #, fuzzy #~ msgid "`%D::%D' is not a template" #~ msgstr "`%D::%D'ni OYA a Inyandikorugero" #, fuzzy #~ msgid "`%D' undeclared in namespace `%D'" #~ msgstr "`%D'in" #, fuzzy #~ msgid "`%D' used without template parameters" #~ msgstr "`%D'Inyandikorugero Ibigenga" #, fuzzy #~ msgid "no class template named `%#T' in `%#T'" #~ msgstr "Oya ishuri Inyandikorugero in" #, fuzzy #~ msgid "no type named `%#T' in `%#T'" #~ msgstr "Oya Ubwoko in" #, fuzzy #~ msgid "lookup of `%D' finds `%#D'" #~ msgstr "GUSHAKISHA Bya" #, fuzzy #~ msgid " instead of `%D' from dependent base class" #~ msgstr "Bya Bivuye SHINGIRO ishuri" #, fuzzy #~ msgid " (use `typename %T::%D' if that's what you meant)" #~ msgstr "(Gukoresha NIBA" #, fuzzy #~ msgid "name lookup of `%D' changed" #~ msgstr "Izina: GUSHAKISHA Bya Byahinduwe" #, fuzzy #~ msgid " matches this `%D' under ISO standard rules" #~ msgstr "iyi Bisanzwe" #, fuzzy #~ msgid " matches this `%D' under old rules" #~ msgstr "iyi ki/ bishaje" #, fuzzy #~ msgid "name lookup of `%D' changed for new ISO `for' scoping" #~ msgstr "Izina: GUSHAKISHA Bya Byahinduwe kugirango Gishya" #, fuzzy #~ msgid " cannot use obsolete binding at `%D' because it has a destructor" #~ msgstr "Gukoresha Bifatanya ku a" #, fuzzy #~ msgid " using obsolete binding at `%D'" #~ msgstr "ikoresha Bifatanya ku" #, fuzzy #~ msgid "lookup of `%D' in the scope of `%#T' (`%#D') does not match lookup in the current scope (`%#D')" #~ msgstr "GUSHAKISHA Bya in i Ingano: Bya OYA BIHUYE GUSHAKISHA in i KIGEZWEHO Ingano:" #, fuzzy #~ msgid "an anonymous union cannot have function members" #~ msgstr "Ihuza Umumaro" #, fuzzy #~ msgid "member %#D' with constructor not allowed in anonymous aggregate" #~ msgstr "Na: OYA in" #, fuzzy #~ msgid "member %#D' with destructor not allowed in anonymous aggregate" #~ msgstr "Na: OYA in" #, fuzzy #~ msgid "member %#D' with copy assignment operator not allowed in anonymous aggregate" #~ msgstr "Na: Gukoporora Igenera Mukoresha OYA in" #, fuzzy #~ msgid "redeclaration of C++ built-in type `%T'" #~ msgstr "Bya C in Ubwoko" #, fuzzy #~ msgid "multiple types in one declaration" #~ msgstr "Igikubo in" #, fuzzy #~ msgid "missing type-name in typedef-declaration" #~ msgstr "Ibuze Ubwoko Izina: in" #, fuzzy #~ msgid "ISO C++ prohibits anonymous structs" #~ msgstr "C" #, fuzzy #~ msgid "`%D' can only be specified for functions" #~ msgstr "`%D'kugirango Imimaro" #, fuzzy #~ msgid "`%D' can only be specified inside a class" #~ msgstr "`%D'Mo Imbere a ishuri" #, fuzzy #~ msgid "`%D' can only be specified for constructors" #~ msgstr "`%D'kugirango" #, fuzzy #~ msgid "`%D' can only be specified for objects and functions" #~ msgstr "`%D'kugirango Ibintu Na Imimaro" #, fuzzy #~ msgid "typedef `%D' is initialized (use __typeof__ instead)" #~ msgstr "ni Gukoresha" #, fuzzy #~ msgid "function `%#D' is initialized like a variable" #~ msgstr "Umumaro ni nka a IMPINDURAGACIRO" #, fuzzy #~ msgid "declaration of `%#D' has `extern' and is initialized" #~ msgstr "Bya Na ni" #, fuzzy #~ msgid "`%#D' is not a static member of `%#T'" #~ msgstr "`%#D'ni OYA a Bya" #, fuzzy #~ msgid "ISO C++ does not permit `%T::%D' to be defined as `%T::%D'" #~ msgstr "C OYA Kuri Nka" #, fuzzy #~ msgid "duplicate initialization of %D" #~ msgstr "Gusubiramo Bya" #, fuzzy #~ msgid "declaration of `%#D' outside of class is not definition" #~ msgstr "Bya Hanze Bya ishuri ni OYA Insobanuro" #, fuzzy #~ msgid "variable `%#D' has initializer but incomplete type" #~ msgstr "IMPINDURAGACIRO Ubwoko" #, fuzzy #~ msgid "elements of array `%#D' have incomplete type" #~ msgstr "Ibintu Bya Imbonerahamwe Ubwoko" #, fuzzy #~ msgid "aggregate `%#D' has incomplete type and cannot be defined" #~ msgstr "Ubwoko Na" #, fuzzy #~ msgid "`%D' declared as reference but not initialized" #~ msgstr "`%D'Nka Indango OYA" #, fuzzy #~ msgid "ISO C++ forbids use of initializer list to initialize reference `%D'" #~ msgstr "C Gukoresha Bya Urutonde Kuri gutangiza Indango" #, fuzzy #~ msgid "cannot initialize `%T' from `%T'" #~ msgstr "gutangiza Bivuye" #, fuzzy #~ msgid "initializer fails to determine size of `%D'" #~ msgstr "Kuri Ingano Bya" #, fuzzy #~ msgid "array size missing in `%D'" #~ msgstr "Imbonerahamwe Ingano Ibuze in" #, fuzzy #~ msgid "zero-size array `%D'" #~ msgstr "Zeru Ingano Imbonerahamwe" #, fuzzy #~ msgid "storage size of `%D' isn't known" #~ msgstr "Ingano Bya si" #, fuzzy #~ msgid "storage size of `%D' isn't constant" #~ msgstr "Ingano Bya si" #, fuzzy #~ msgid "sorry: semantics of inline function static data `%#D' are wrong (you'll wind up with multiple copies)" #~ msgstr "Bya Mumurongo Umumaro Ibyatanzwe Hejuru Na: Igikubo Amakopi" #, fuzzy #~ msgid " you can work around this by removing the initializer" #~ msgstr "Akazi iyi ku i" #, fuzzy #~ msgid "uninitialized const `%D'" #~ msgstr "Itatangijwe" #, fuzzy #~ msgid "brace-enclosed initializer used to initialize `%T'" #~ msgstr "Kuri gutangiza" #, fuzzy #~ msgid "initializer for `%T' must be brace-enclosed" #~ msgstr "kugirango" #, fuzzy #~ msgid "ISO C++ does not allow designated initializers" #~ msgstr "C OYA Kwemerera" #, fuzzy #~ msgid "`%T' has no non-static data member named `%D'" #~ msgstr "`%T'Oya Ibyatanzwe" #, fuzzy #~ msgid "too many initializers for `%T'" #~ msgstr "kugirango" #, fuzzy #~ msgid "variable-sized object `%D' may not be initialized" #~ msgstr "IMPINDURAGACIRO Igikoresho Gicurasi OYA" #, fuzzy #~ msgid "`%D' has incomplete type" #~ msgstr "`%D'Ubwoko" #, fuzzy #~ msgid "`%D' must be initialized by constructor, not by `{...}'" #~ msgstr "`%D'ku OYA ku" #, fuzzy #~ msgid "structure `%D' with uninitialized const members" #~ msgstr "Imiterere Na: Itatangijwe" #, fuzzy #~ msgid "structure `%D' with uninitialized reference members" #~ msgstr "Imiterere Na: Itatangijwe Indango" #, fuzzy #~ msgid "assignment (not initialization) in declaration" #~ msgstr "Igenera OYA in" #, fuzzy #~ msgid "cannot initialize `%D' to namespace `%D'" #~ msgstr "gutangiza Kuri" #, fuzzy #~ msgid "shadowing previous type declaration of `%#D'" #~ msgstr "Ishyiraho ry'igicucu Ibanjirije Ubwoko Bya" #, fuzzy #~ msgid "`%D' cannot be thread-local because it has non-POD type `%T'" #~ msgstr "`%D'Urudodo Ubwoko" #, fuzzy #~ msgid "`%D' is thread-local and so cannot be dynamically initialized" #~ msgstr "`%D'ni Urudodo Na" #, fuzzy #~ msgid "multiple initializations given for `%D'" #~ msgstr "Igikubo kugirango" #, fuzzy #~ msgid "invalid catch parameter" #~ msgstr "Sibyo" #, fuzzy #~ msgid "destructor for alien class `%T' cannot be a member" #~ msgstr "kugirango ishuri a" #, fuzzy #~ msgid "constructor for alien class `%T' cannot be a member" #~ msgstr "kugirango ishuri a" #, fuzzy #~ msgid "`%D' declared as a `virtual' %s" #~ msgstr "`%D'Nka a" #, fuzzy #~ msgid "`%D' declared as an `inline' %s" #~ msgstr "`%D'Nka" #, fuzzy #~ msgid "`const' and `volatile' function specifiers on `%D' invalid in %s declaration" #~ msgstr "`Na Umumaro ku Sibyo in" #, fuzzy #~ msgid "`%D' declared as a friend" #~ msgstr "`%D'Nka a" #, fuzzy #~ msgid "`%D' declared with an exception specification" #~ msgstr "`%D'Na: Irengayobora(-)" #, fuzzy #~ msgid "cannot declare `::main' to be a template" #~ msgstr "Kuri a Inyandikorugero" #, fuzzy #~ msgid "cannot declare `::main' to be inline" #~ msgstr "Kuri Mumurongo" #, fuzzy #~ msgid "cannot declare `::main' to be static" #~ msgstr "Kuri" #, fuzzy #~ msgid "`main' must return `int'" #~ msgstr "`Garuka" #, fuzzy #~ msgid "non-local function `%#D' uses anonymous type" #~ msgstr "Umumaro Ubwoko" #, fuzzy #~ msgid "`%#D' does not refer to the unqualified type, so it is not used for linkage" #~ msgstr "`%#D'OYA Kuri i Ubwoko ni OYA kugirango" #, fuzzy #~ msgid "non-local function `%#D' uses local type `%T'" #~ msgstr "Umumaro Ubwoko" #, fuzzy #~ msgid "%smember function `%D' cannot have `%T' method qualifier" #~ msgstr "%smemberUmumaro Uburyo" #, fuzzy #~ msgid "defining explicit specialization `%D' in friend declaration" #~ msgstr "in" #, fuzzy #~ msgid "invalid use of template-id `%D' in declaration of primary template" #~ msgstr "Sibyo Gukoresha Bya Inyandikorugero ID in Bya Inyandikorugero" #, fuzzy #~ msgid "default arguments are not allowed in declaration of friend template specialization `%D'" #~ msgstr "Mburabuzi ingingo OYA in Bya Inyandikorugero" #, fuzzy #~ msgid "`inline' is not allowed in declaration of friend template specialization `%D'" #~ msgstr "`ni OYA in Bya Inyandikorugero" #, fuzzy #~ msgid "definition of implicitly-declared `%D'" #~ msgstr "Insobanuro Bya" #, fuzzy #~ msgid "no `%#D' member function declared in class `%T'" #~ msgstr "Oya Umumaro in ishuri" #, fuzzy #~ msgid "non-local variable `%#D' uses local type `%T'" #~ msgstr "IMPINDURAGACIRO Ubwoko" #, fuzzy #~ msgid "invalid in-class initialization of static data member of non-integral type `%T'" #~ msgstr "Sibyo in ishuri Bya Ibyatanzwe Bya Umubare Wuzuye Ubwoko" #, fuzzy #~ msgid "ISO C++ forbids in-class initialization of non-const static member `%D'" #~ msgstr "C in ishuri Bya" #, fuzzy #~ msgid "ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'" #~ msgstr "C Bya Bya Umubare Wuzuye Ubwoko" #, fuzzy #~ msgid "size of array `%D' has non-integer type" #~ msgstr "Ingano Bya Imbonerahamwe Umubare wuzuye Ubwoko" #, fuzzy #~ msgid "size of array has non-integer type" #~ msgstr "Ingano Bya Imbonerahamwe Umubare wuzuye Ubwoko" #, fuzzy #~ msgid "size of array `%D' is negative" #~ msgstr "Ingano Bya Imbonerahamwe ni" #, fuzzy #~ msgid "size of array is negative" #~ msgstr "Ingano Bya Imbonerahamwe ni" #, fuzzy #~ msgid "ISO C++ forbids zero-size array `%D'" #~ msgstr "C Zeru Ingano Imbonerahamwe" #, fuzzy #~ msgid "ISO C++ forbids zero-size array" #~ msgstr "C Zeru Ingano Imbonerahamwe" #, fuzzy #~ msgid "size of array `%D' is not an integral constant-expression" #~ msgstr "Ingano Bya Imbonerahamwe ni OYA Umubare Wuzuye imvugo" #, fuzzy #~ msgid "size of array is not an integral constant-expression" #~ msgstr "Ingano Bya Imbonerahamwe ni OYA Umubare Wuzuye imvugo" #, fuzzy #~ msgid "ISO C++ forbids variable-size array `%D'" #~ msgstr "C IMPINDURAGACIRO Ingano Imbonerahamwe" #, fuzzy #~ msgid "ISO C++ forbids variable-size array" #~ msgstr "C IMPINDURAGACIRO Ingano Imbonerahamwe" #, fuzzy #~ msgid "overflow in array dimension" #~ msgstr "Byarenze urugero in Imbonerahamwe" #, fuzzy #~ msgid "declaration of `%D' as %s" #~ msgstr "Bya Nka" #, fuzzy #~ msgid "declaration of `%D' as multidimensional array must have bounds for all dimensions except the first" #~ msgstr "Bya Nka Imbonerahamwe kugirango Byose Ingero i Itangira" #, fuzzy #~ msgid "multidimensional array must have bounds for all dimensions except the first" #~ msgstr "Imbonerahamwe kugirango Byose Ingero i Itangira" #, fuzzy #~ msgid "return type specification for constructor invalid" #~ msgstr "Garuka Ubwoko kugirango Sibyo" #, fuzzy #~ msgid "return type specification for destructor invalid" #~ msgstr "Garuka Ubwoko kugirango Sibyo" #, fuzzy #~ msgid "operator `%T' declared to return `%T'" #~ msgstr "Mukoresha Kuri Garuka" #, fuzzy #~ msgid "return type specified for `operator %T'" #~ msgstr "Garuka Ubwoko kugirango Mukoresha" #, fuzzy #~ msgid "destructors must be member functions" #~ msgstr "Imimaro" #, fuzzy #~ msgid "destructor `%T' must match class name `%T'" #~ msgstr "BIHUYE ishuri Izina:" #, fuzzy #~ msgid "variable declaration is not allowed here" #~ msgstr "IMPINDURAGACIRO ni OYA" #, fuzzy #~ msgid "invalid declarator" #~ msgstr "Sibyo" #, fuzzy #~ msgid "declarator-id missing; using reserved word `%D'" #~ msgstr "ID Ibuze ikoresha ijambo" #, fuzzy #~ msgid "type `%T' is not derived from type `%T'" #~ msgstr "Ubwoko ni OYA Bivuye Ubwoko" #, fuzzy #~ msgid "`%T' specified as declarator-id" #~ msgstr "`%T'Nka ID" #, fuzzy #~ msgid " perhaps you want `%T' for a constructor" #~ msgstr "kugirango a" #, fuzzy #~ msgid "invalid use of template-name '%E' in a declarator" #~ msgstr "Sibyo Gukoresha Bya Inyandikorugero Izina: in a" #, fuzzy #~ msgid "declaration of `%D' as non-function" #~ msgstr "Bya Nka Umumaro" #, fuzzy #~ msgid "`bool' is now a keyword" #~ msgstr "`ni NONEAHA a Ijambo- banze" #, fuzzy #~ msgid "multiple declarations `%T' and `%T'" #~ msgstr "Igikubo Na" #, fuzzy #~ msgid "ISO C++ does not support `long long'" #~ msgstr "C OYA Gushigikira" #, fuzzy #~ msgid "ISO C++ forbids declaration of `%s' with no type" #~ msgstr "C Bya Na: Oya Ubwoko" #, fuzzy #~ msgid "`%T' is implicitly a typename" #~ msgstr "`%T'ni a" #, fuzzy #~ msgid "short, signed or unsigned invalid for `%s'" #~ msgstr "Cyangwa Bitashizweho umukono Sibyo kugirango" #, fuzzy #~ msgid "long and short specified together for `%s'" #~ msgstr "Na kugirango" #, fuzzy #~ msgid "signed and unsigned given together for `%s'" #~ msgstr "Na Bitashizweho umukono kugirango" #, fuzzy #~ msgid "qualifiers are not allowed on declaration of `operator %T'" #~ msgstr "OYA ku Bya Mukoresha" #, fuzzy #~ msgid "member `%D' cannot be declared both virtual and static" #~ msgstr "Byombi Kitaboneka Na" #, fuzzy #~ msgid "storage class specifiers invalid in parameter declarations" #~ msgstr "ishuri Sibyo in" #, fuzzy #~ msgid "typedef declaration invalid in parameter declaration" #~ msgstr "Sibyo in" #, fuzzy #~ msgid "virtual outside class declaration" #~ msgstr "Kitaboneka Hanze ishuri" #, fuzzy #~ msgid "storage class specified for %s `%s'" #~ msgstr "ishuri kugirango" #, fuzzy #~ msgid "storage class specifiers invalid in friend function declarations" #~ msgstr "ishuri Sibyo in Umumaro" #, fuzzy #~ msgid "destructor cannot be static member function" #~ msgstr "Umumaro" #, fuzzy #~ msgid "destructors may not be `%s'" #~ msgstr "Gicurasi OYA" #, fuzzy #~ msgid "constructor cannot be static member function" #~ msgstr "Umumaro" #, fuzzy #~ msgid "constructors cannot be declared virtual" #~ msgstr "Kitaboneka" #, fuzzy #~ msgid "constructors may not be `%s'" #~ msgstr "Gicurasi OYA" #, fuzzy #~ msgid "return value type specifier for constructor ignored" #~ msgstr "Garuka Agaciro Ubwoko kugirango" #, fuzzy #~ msgid "can't initialize friend function `%s'" #~ msgstr "gutangiza Umumaro" #, fuzzy #~ msgid "virtual functions cannot be friends" #~ msgstr "Kitaboneka Imimaro" #, fuzzy #~ msgid "friend declaration not in class definition" #~ msgstr "OYA in ishuri Insobanuro" #, fuzzy #~ msgid "can't define friend function `%s' in a local class definition" #~ msgstr "Kugaragaza... Umumaro in a ishuri Insobanuro" #, fuzzy #~ msgid "destructors may not have parameters" #~ msgstr "Gicurasi OYA Ibigenga" #, fuzzy #~ msgid "cannot declare reference to `%#T'" #~ msgstr "Indango Kuri" #, fuzzy #~ msgid "cannot declare pointer to `%#T'" #~ msgstr "Mweretsi Kuri" #, fuzzy #~ msgid "cannot declare pointer to `%#T' member" #~ msgstr "Mweretsi Kuri" #, fuzzy #~ msgid "extra qualification `%T::' on member `%s' ignored" #~ msgstr "Birenga ku" #, fuzzy #~ msgid "cannot declare member function `%T::%s' within `%T'" #~ msgstr "Umumaro muri" #, fuzzy #~ msgid "cannot declare member `%T::%s' within `%T'" #~ msgstr "muri" #, fuzzy #~ msgid "data member may not have variably modified type `%T'" #~ msgstr "Ibyatanzwe Gicurasi OYA Byahinduwe Ubwoko" #, fuzzy #~ msgid "parameter may not have variably modified type `%T'" #~ msgstr "Gicurasi OYA Byahinduwe Ubwoko" #, fuzzy #~ msgid "only declarations of constructors can be `explicit'" #~ msgstr "Bya" #, fuzzy #~ msgid "non-object member `%s' cannot be declared `mutable'" #~ msgstr "Igikoresho" #, fuzzy #~ msgid "function `%s' cannot be declared `mutable'" #~ msgstr "Umumaro" #, fuzzy #~ msgid "template-id `%D' used as a declarator" #~ msgstr "Inyandikorugero ID Nka a" #, fuzzy #~ msgid "ISO C++ forbids nested type `%D' with same name as enclosing class" #~ msgstr "C Ubwoko Na: Izina: Nka ishuri" #, fuzzy #~ msgid "typedef name may not be class-qualified" #~ msgstr "Izina: Gicurasi OYA ishuri" #, fuzzy #~ msgid "invalid type qualifier for non-member function type" #~ msgstr "Sibyo Ubwoko kugirango Umumaro Ubwoko" #, fuzzy #~ msgid "type qualifiers specified for friend class declaration" #~ msgstr "Ubwoko kugirango ishuri" #, fuzzy #~ msgid "`inline' specified for friend class declaration" #~ msgstr "`kugirango ishuri" #, fuzzy #~ msgid "template parameters cannot be friends" #~ msgstr "Inyandikorugero Ibigenga" #, fuzzy #~ msgid "friend declaration requires class-key, i.e. `friend class %T::%D'" #~ msgstr "E." #, fuzzy #~ msgid "friend declaration requires class-key, i.e. `friend %#T'" #~ msgstr "E." #, fuzzy #~ msgid "trying to make class `%T' a friend of global scope" #~ msgstr "Kuri Ubwoko ishuri a Bya Ingano:" #, fuzzy #~ msgid "invalid qualifiers on non-member function type" #~ msgstr "Sibyo ku Umumaro Ubwoko" #, fuzzy #~ msgid "abstract declarator `%T' used as declaration" #~ msgstr "Incamake Nka" #, fuzzy #~ msgid "unnamed variable or field declared void" #~ msgstr "Kitiswe IMPINDURAGACIRO Cyangwa Umwanya" #, fuzzy #~ msgid "variable or field declared void" #~ msgstr "IMPINDURAGACIRO Cyangwa Umwanya" #, fuzzy #~ msgid "cannot use `::' in parameter declaration" #~ msgstr "Gukoresha in" #, fuzzy #~ msgid "invalid use of `::'" #~ msgstr "Sibyo Gukoresha Bya" #, fuzzy #~ msgid "function `%D' cannot be declared friend" #~ msgstr "Umumaro" #, fuzzy #~ msgid "can't make `%D' into a method -- not in a class" #~ msgstr "Ubwoko a Uburyo OYA in a ishuri" #, fuzzy #~ msgid "function `%D' declared virtual inside a union" #~ msgstr "Umumaro Kitaboneka Mo Imbere a Ihuza" #, fuzzy #~ msgid "`%D' cannot be declared virtual, since it is always static" #~ msgstr "`%D'Kitaboneka guhera ni Buri gihe" #, fuzzy #~ msgid "field `%D' has incomplete type" #~ msgstr "Umwanya Ubwoko" #, fuzzy #~ msgid "name `%T' has incomplete type" #~ msgstr "Izina: Ubwoko" #, fuzzy #~ msgid " in instantiation of template `%T'" #~ msgstr "in Bya Inyandikorugero" #, fuzzy #~ msgid "`%s' is neither function nor member function; cannot be declared friend" #~ msgstr "`%s'ni Umumaro Umumaro" #, fuzzy #~ msgid "member functions are implicitly friends of their class" #~ msgstr "Imimaro Bya ishuri" #, fuzzy #~ msgid "ISO C++ forbids initialization of member `%D'" #~ msgstr "C Bya" #, fuzzy #~ msgid "ISO C++ forbids static data member `%D' with same name as enclosing class" #~ msgstr "C Ibyatanzwe Na: Izina: Nka ishuri" #, fuzzy #~ msgid "storage class `auto' invalid for function `%s'" #~ msgstr "ishuri Sibyo kugirango Umumaro" #, fuzzy #~ msgid "storage class `register' invalid for function `%s'" #~ msgstr "ishuri Sibyo kugirango Umumaro" #, fuzzy #~ msgid "storage class `__thread' invalid for function `%s'" #~ msgstr "ishuri Sibyo kugirango Umumaro" #, fuzzy #~ msgid "storage class `static' invalid for function `%s' declared out of global scope" #~ msgstr "ishuri Sibyo kugirango Umumaro Inyuma Bya Ingano:" #, fuzzy #~ msgid "storage class `inline' invalid for function `%s' declared out of global scope" #~ msgstr "ishuri Sibyo kugirango Umumaro Inyuma Bya Ingano:" #, fuzzy #~ msgid "virtual non-class function `%s'" #~ msgstr "Kitaboneka ishuri Umumaro" #, fuzzy #~ msgid "cannot declare member function `%D' to have static linkage" #~ msgstr "Umumaro Kuri" #, fuzzy #~ msgid "cannot declare static function inside another function" #~ msgstr "Umumaro Mo Imbere Umumaro" #, fuzzy #~ msgid "`static' may not be used when defining (as opposed to declaring) a static data member" #~ msgstr "`Gicurasi OYA Ryari: Nka Kuri a Ibyatanzwe" #, fuzzy #~ msgid "cannot explicitly declare member `%#D' to have extern linkage" #~ msgstr "Kuri" #, fuzzy #~ msgid "default argument for `%#D' has type `%T'" #~ msgstr "Mburabuzi kugirango Ubwoko" #, fuzzy #~ msgid "default argument for parameter of type `%T' has type `%T'" #~ msgstr "Mburabuzi kugirango Bya Ubwoko Ubwoko" #, fuzzy #~ msgid "default argument `%E' uses local variable `%D'" #~ msgstr "Mburabuzi IMPINDURAGACIRO" #, fuzzy #~ msgid "invalid string constant `%E'" #~ msgstr "Sibyo Ikurikiranyanyuguti" #, fuzzy #~ msgid "invalid integer constant in parameter list, did you forget to give parameter name?" #~ msgstr "Sibyo Umubare wuzuye in Urutonde Kuri Izina:" #, fuzzy #~ msgid "parameter `%D' invalidly declared method type" #~ msgstr "Uburyo Ubwoko" #, fuzzy #~ msgid "parameter `%D' invalidly declared offset type" #~ msgstr "Nta- boneza Ubwoko" #, fuzzy #~ msgid "parameter `%D' includes %s to array of unknown bound `%T'" #~ msgstr "Kuri Imbonerahamwe Bya Kitazwi" #, fuzzy #~ msgid "invalid constructor; you probably meant `%T (const %T&)'" #~ msgstr "Sibyo" #, fuzzy #~ msgid "`%D' must be a nonstatic member function" #~ msgstr "`%D'a Umumaro" #, fuzzy #~ msgid "`%D' must be either a non-static member function or a non-member function" #~ msgstr "`%D'a Umumaro Cyangwa a Umumaro" #, fuzzy #~ msgid "`%D' must have an argument of class or enumerated type" #~ msgstr "`%D'Bya ishuri Cyangwa Ubwoko" #, fuzzy #~ msgid "conversion to %s%s will never use a type conversion operator" #~ msgstr "Ihindurangero Kuri Nta narimwe Gukoresha a Ubwoko Ihindurangero Mukoresha" #, fuzzy #~ msgid "ISO C++ prohibits overloading operator ?:" #~ msgstr "C Mukoresha" #, fuzzy #~ msgid "postfix `%D' must take `int' as its argument" #~ msgstr "Nka" #, fuzzy #~ msgid "postfix `%D' must take `int' as its second argument" #~ msgstr "Nka ISEGONDA" #, fuzzy #~ msgid "`%D' must take either zero or one argument" #~ msgstr "`%D'Zeru Cyangwa" #, fuzzy #~ msgid "`%D' must take either one or two arguments" #~ msgstr "`%D'Cyangwa ingingo" #, fuzzy #~ msgid "prefix `%D' should return `%T'" #~ msgstr "Imbanziriza Garuka" #, fuzzy #~ msgid "postfix `%D' should return `%T'" #~ msgstr "Garuka" #, fuzzy #~ msgid "`%D' must take exactly two arguments" #~ msgstr "`%D'ingingo" #, fuzzy #~ msgid "user-defined `%D' always evaluates both arguments" #~ msgstr "Ukoresha: Buri gihe Byombi ingingo" #, fuzzy #~ msgid "`%D' should return by value" #~ msgstr "`%D'Garuka ku Agaciro" #, fuzzy #~ msgid "`%D' cannot have default arguments" #~ msgstr "`%D'Mburabuzi ingingo" #, fuzzy #~ msgid "using typedef-name `%D' after `%s'" #~ msgstr "ikoresha Izina: Nyuma" #, fuzzy #~ msgid "using template type parameter `%T' after `%s'" #~ msgstr "ikoresha Inyandikorugero Ubwoko Nyuma" #, fuzzy #~ msgid "`%s %T' declares a new type at namespace scope" #~ msgstr "`%s%T'a Gishya Ubwoko ku Ingano:" #, fuzzy #~ msgid " names from dependent base classes are not visible to unqualified name lookup - to refer to the inherited type, say `%s %T::%T'" #~ msgstr "Amazina Bivuye SHINGIRO Inzego OYA Kigaragara Kuri Izina: GUSHAKISHA Kuri Kuri i Ubwoko" #, fuzzy #~ msgid "use of enum `%#D' without previous declaration" #~ msgstr "Gukoresha Bya Ibanjirije" #, fuzzy #~ msgid "derived union `%T' invalid" #~ msgstr "Ihuza Sibyo" #, fuzzy #~ msgid "base type `%T' fails to be a struct or class type" #~ msgstr "SHINGIRO Ubwoko Kuri a Cyangwa ishuri Ubwoko" #, fuzzy #~ msgid "base class `%T' has incomplete type" #~ msgstr "SHINGIRO ishuri Ubwoko" #, fuzzy #~ msgid "recursive type `%T' undefined" #~ msgstr "Ubwoko kidasobanuye" #, fuzzy #~ msgid "duplicate base type `%T' invalid" #~ msgstr "Gusubiramo SHINGIRO Ubwoko Sibyo" #, fuzzy #~ msgid "multiple definition of `%#T'" #~ msgstr "Igikubo Insobanuro Bya" #, fuzzy #~ msgid "previous definition here" #~ msgstr "Ibanjirije Insobanuro" #, fuzzy #~ msgid "enumerator value for `%D' not integer constant" #~ msgstr "Agaciro kugirango OYA Umubare wuzuye" #, fuzzy #~ msgid "overflow in enumeration values at `%D'" #~ msgstr "Byarenze urugero in Uduciro ku" #, fuzzy #~ msgid "return type `%#T' is incomplete" #~ msgstr "Garuka Ubwoko ni" #, fuzzy #~ msgid "semicolon missing after declaration of `%#T'" #~ msgstr "Akabago n'Akitso Ibuze Nyuma Bya" #, fuzzy #~ msgid "return type for `main' changed to `int'" #~ msgstr "Garuka Ubwoko kugirango Byahinduwe Kuri" #, fuzzy #~ msgid "`%D' implicitly declared before its definition" #~ msgstr "`%D'Mbere Insobanuro" #, fuzzy #~ msgid "`operator=' should return a reference to `*this'" #~ msgstr "`Mukoresha Garuka a Indango Kuri" #, fuzzy #~ msgid "`%D' is already defined in class `%T'" #~ msgstr "`%D'ni in ishuri" #, fuzzy #~ msgid "static member function `%#D' declared with type qualifiers" #~ msgstr "Umumaro Na: Ubwoko" #, fuzzy #~ msgid "duplicate type qualifiers in %s declaration" #~ msgstr "Gusubiramo Ubwoko in" #, fuzzy #~ msgid "template `%#D' instantiated in file without #pragma interface" #~ msgstr "Inyandikorugero in IDOSIYE" #, fuzzy #~ msgid "template `%#D' defined in file without #pragma interface" #~ msgstr "Inyandikorugero in IDOSIYE" #, fuzzy #~ msgid "name missing for member function" #~ msgstr "Izina: Ibuze kugirango Umumaro" #, fuzzy #~ msgid "parser may be lost: is there a '{' missing somewhere?" #~ msgstr "Gicurasi ni a Ibuze" #, fuzzy #~ msgid "ambiguous conversion for array subscript" #~ msgstr "Ihindurangero kugirango Imbonerahamwe Inyandiko nyesi" #, fuzzy #~ msgid "invalid types `%T[%T]' for array subscript" #~ msgstr "Sibyo kugirango Imbonerahamwe Inyandiko nyesi" #, fuzzy #~ msgid "type `%#T' argument given to `delete', expected pointer" #~ msgstr "Ubwoko Kuri Ikitezwe: Mweretsi" #, fuzzy #~ msgid "anachronistic use of array size in vector delete" #~ msgstr "Gukoresha Bya Imbonerahamwe Ingano in Gusiba" #, fuzzy #~ msgid "cannot delete a function. Only pointer-to-objects are valid arguments to `delete'" #~ msgstr "Gusiba a Umumaro Mweretsi Kuri Ibintu Byemewe ingingo Kuri" #, fuzzy #~ msgid "deleting `%T' is undefined" #~ msgstr "ni kidasobanuye" #, fuzzy #~ msgid "deleting array `%#D'" #~ msgstr "Imbonerahamwe" #, fuzzy #~ msgid "invalid declaration of member template `%#D' in local class" #~ msgstr "Sibyo Bya Inyandikorugero in ishuri" #, fuzzy #~ msgid "invalid use of `virtual' in template declaration of `%#D'" #~ msgstr "Sibyo Gukoresha Bya in Inyandikorugero Bya" #, fuzzy #~ msgid "template declaration of `%#D'" #~ msgstr "Inyandikorugero Bya" #, fuzzy #~ msgid "Java method '%D' has non-Java return type `%T'" #~ msgstr "Uburyo Garuka Ubwoko" #, fuzzy #~ msgid "Java method '%D' has non-Java parameter type `%T'" #~ msgstr "Uburyo Ubwoko" #, fuzzy #~ msgid "prototype for `%#D' does not match any in class `%T'" #~ msgstr "kugirango OYA BIHUYE in ishuri" #, fuzzy #~ msgid "local class `%#T' shall not have static data member `%#D'" #~ msgstr "ishuri OYA Ibyatanzwe" #, fuzzy #~ msgid "initializer invalid for static member with constructor" #~ msgstr "Sibyo kugirango Na:" #, fuzzy #~ msgid "(an out of class initialization is required)" #~ msgstr "(Inyuma Bya ishuri ni Bya ngombwa" #, fuzzy #~ msgid "invalid data member initialization" #~ msgstr "Sibyo Ibyatanzwe" #, fuzzy #~ msgid "(use `=' to initialize static data members)" #~ msgstr "(Gukoresha Kuri gutangiza Ibyatanzwe" #, fuzzy #~ msgid "member `%D' conflicts with virtual function table field name" #~ msgstr "Na: Kitaboneka Umumaro imbonerahamwe# Umwanya Izina:" #, fuzzy #~ msgid "`%D' is already defined in `%T'" #~ msgstr "`%D'ni in" #, fuzzy #~ msgid "field initializer is not constant" #~ msgstr "Umwanya ni OYA" #, fuzzy #~ msgid "`asm' specifiers are not permitted on non-static data members" #~ msgstr "`OYA ku Ibyatanzwe" #, fuzzy #~ msgid "cannot declare `%D' to be a bit-field type" #~ msgstr "Kuri a Umwanya Ubwoko" #, fuzzy #~ msgid "cannot declare bit-field `%D' with function type" #~ msgstr "Umwanya Na: Umumaro Ubwoko" #, fuzzy #~ msgid "`%D' is already defined in the class %T" #~ msgstr "`%D'ni in i ishuri" #, fuzzy #~ msgid "static member `%D' cannot be a bit-field" #~ msgstr "a Umwanya" #, fuzzy #~ msgid "initializer specified for non-member function `%D'" #~ msgstr "kugirango Umumaro" #, fuzzy #~ msgid "invalid initializer for virtual method `%D'" #~ msgstr "Sibyo kugirango Kitaboneka Uburyo" #, fuzzy #~ msgid "anonymous struct not inside named type" #~ msgstr "OYA Mo Imbere Ubwoko" #, fuzzy #~ msgid "namespace-scope anonymous aggregates must be static" #~ msgstr "Ingano:" #, fuzzy #~ msgid "anonymous aggregate with no members" #~ msgstr "Na: Oya" #, fuzzy #~ msgid "`operator new' must return type `%T'" #~ msgstr "`Mukoresha Garuka Ubwoko" #, fuzzy #~ msgid "`operator new' takes type `size_t' (`%T') as first parameter" #~ msgstr "`Mukoresha Ubwoko Nka Itangira" #, fuzzy #~ msgid "`operator delete' must return type `%T'" #~ msgstr "`Mukoresha Garuka Ubwoko" #, fuzzy #~ msgid "`operator delete' takes type `%T' as first parameter" #~ msgstr "`Mukoresha Ubwoko Nka Itangira" #, fuzzy #~ msgid "too many initialization functions required" #~ msgstr "Imimaro Bya ngombwa" #, fuzzy #~ msgid "inline function `%D' used but never defined" #~ msgstr "Mumurongo Umumaro Nta narimwe" #, fuzzy #~ msgid "use of old-style cast" #~ msgstr "Gukoresha Bya ki/ bishaje IMISUSIRE" #, fuzzy #~ msgid "use of `%D' is ambiguous" #~ msgstr "Gukoresha Bya ni" #, fuzzy #~ msgid " first declared as `%#D' here" #~ msgstr "Itangira Nka" #, fuzzy #~ msgid " also declared as `%#D' here" #~ msgstr "Nka" #, fuzzy #~ msgid "`%D' denotes an ambiguous type" #~ msgstr "`%D'Ubwoko" #, fuzzy #~ msgid " first type here" #~ msgstr "Itangira Ubwoko" #, fuzzy #~ msgid " other type here" #~ msgstr "Ikindi Ubwoko" #, fuzzy #~ msgid "declaration of `%D' not in a namespace surrounding `%D'" #~ msgstr "Bya OYA in a" #, fuzzy #~ msgid "`%D' should have been declared inside `%D'" #~ msgstr "`%D'Mo Imbere" #, fuzzy #~ msgid "`%D' is not a function," #~ msgstr "`%D'ni OYA a Umumaro" #, fuzzy #~ msgid " conflict with `%D'" #~ msgstr "Na:" #, fuzzy #~ msgid "unknown namespace `%D'" #~ msgstr "Kitazwi" #, fuzzy #~ msgid "`%T' is not a namespace" #~ msgstr "`%T'ni OYA a" #, fuzzy #~ msgid "`%D' is not a namespace" #~ msgstr "`%D'ni OYA a" #, fuzzy #~ msgid "a using-declaration cannot specify a template-id. Try `using %D'" #~ msgstr "a ikoresha a Inyandikorugero ID ikoresha" #, fuzzy #~ msgid "namespace `%D' not allowed in using-declaration" #~ msgstr "OYA in ikoresha" #, fuzzy #~ msgid "`%D' not declared" #~ msgstr "`%D'OYA" #, fuzzy #~ msgid "`%D' is already declared in this scope" #~ msgstr "`%D'ni in iyi Ingano:" #, fuzzy #~ msgid "using declaration `%D' introduced ambiguous type `%T'" #~ msgstr "ikoresha Ubwoko" #, fuzzy #~ msgid "using-declaration for non-member at class scope" #~ msgstr "ikoresha kugirango ku ishuri Ingano:" #, fuzzy #~ msgid "using-declaration for destructor" #~ msgstr "ikoresha kugirango" #, fuzzy #~ msgid "a using-declaration cannot specify a template-id. Try `using %T::%D'" #~ msgstr "a ikoresha a Inyandikorugero ID ikoresha" #, fuzzy #~ msgid "default argument missing for parameter %P of `%+#D'" #~ msgstr "Mburabuzi Ibuze kugirango Bya" #, fuzzy #~ msgid "extra qualification `%T::' on member `%D' ignored" #~ msgstr "Birenga ku" #, fuzzy #~ msgid "`%T' does not have a class or union named `%D'" #~ msgstr "`%T'OYA a ishuri Cyangwa Ihuza" #, fuzzy #~ msgid "`%T' is not a class or union type" #~ msgstr "`%T'ni OYA a ishuri Cyangwa Ihuza Ubwoko" #, fuzzy #~ msgid "template argument is required for `%T'" #~ msgstr "Inyandikorugero ni Bya ngombwa kugirango" #, fuzzy #~ msgid "declaration of `%D' in `%D' which does not enclose `%D'" #~ msgstr "Bya in OYA" #, fuzzy #~ msgid "`%s' not supported by %s" #~ msgstr "`%s'OYA ku" #, fuzzy #~ msgid "(static %s for %s)" #~ msgstr "(kugirango" # #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-# # #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-# # #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-# #, fuzzy #~ msgid "\\x%x" #~ msgstr "\\x%x" # vcl/source\src\units.src:SV_FUNIT_STRINGS.10.text #, fuzzy #~ msgid "In %s `%s':" #~ msgstr "in" #, fuzzy #~ msgid "%s: In instantiation of `%s':\n" #~ msgstr "%s:Bya" #, fuzzy #~ msgid "%s:%d: instantiated from `%s'\n" #~ msgstr "%s:%d:Bivuye" #, fuzzy #~ msgid "%s:%d: instantiated from here\n" #~ msgstr "%s:%d:Bivuye" #, fuzzy #~ msgid "unexpected letter `%c' in locate_error\n" #~ msgstr "Ibaruwa... in" #, fuzzy #~ msgid "type `%T' is disallowed in Java `throw' or `catch'" #~ msgstr "Ubwoko ni in Cyangwa" #, fuzzy #~ msgid "call to Java `catch' or `throw' with `jthrowable' undefined" #~ msgstr "Kuri Cyangwa Na: kidasobanuye" #, fuzzy #~ msgid "type `%T' is not derived from `java::lang::Throwable'" #~ msgstr "Ubwoko ni OYA Bivuye java" #, fuzzy #~ msgid "mixing C++ and Java catches in a single translation unit" #~ msgstr "C Na in a UMWE Umwandiko wahinduwe ururimi Igice:" #, fuzzy #~ msgid "throwing NULL, which has integral, not pointer type" #~ msgstr "Umubare Wuzuye OYA Mweretsi Ubwoko" #, fuzzy #~ msgid " in thrown expression" #~ msgstr "in imvugo" #, fuzzy #~ msgid "expression '%E' of abstract class type '%T' cannot be used in throw-expression" #~ msgstr "imvugo Bya Incamake ishuri Ubwoko in imvugo" #, fuzzy #~ msgid "exception of type `%T' will be caught" #~ msgstr "Irengayobora(-) Bya Ubwoko" #, fuzzy #~ msgid " by earlier handler for `%T'" #~ msgstr "ku kugirango" #, fuzzy #~ msgid "`...' handler must be the last handler for its try block" #~ msgstr "`...'i Iheruka kugirango Funga" #, fuzzy #~ msgid "`%D' is already a friend of class `%T'" #~ msgstr "`%D'ni a Bya ishuri" #, fuzzy #~ msgid "previous friend declaration of `%D'" #~ msgstr "Ibanjirije Bya" #, fuzzy #~ msgid "invalid type `%T' declared `friend'" #~ msgstr "Sibyo Ubwoko" #, fuzzy #~ msgid "partial specialization `%T' declared `friend'" #~ msgstr "Bituzuye" #, fuzzy #~ msgid "class `%T' is implicitly friends with itself" #~ msgstr "ishuri ni Na:" #, fuzzy #~ msgid "typename type `%#T' declared `friend'" #~ msgstr "Ubwoko" #, fuzzy #~ msgid "template parameter type `%T' declared `friend'" #~ msgstr "Inyandikorugero Ubwoko" #, fuzzy #~ msgid "`%#T' is not a template" #~ msgstr "`%#T'ni OYA a Inyandikorugero" #, fuzzy #~ msgid "`%T' is already a friend of `%T'" #~ msgstr "`%T'ni a Bya" #, fuzzy #~ msgid "member `%D' declared as friend before type `%T' defined" #~ msgstr "Nka Mbere Ubwoko" #, fuzzy #~ msgid "friend declaration `%#D' declares a non-template function" #~ msgstr "a Inyandikorugero Umumaro" #, fuzzy #~ msgid "(if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning" #~ msgstr "(NIBA iyi ni OYA Ubwoko i Umumaro Inyandikorugero Na Kongeramo Nyuma i Umumaro Izina: Inyandikorugero iyi Iburira" #, fuzzy #~ msgid "argument to `%s' missing\n" #~ msgstr "Kuri" #, fuzzy #~ msgid "`%D' should be initialized in the member initialization list" #~ msgstr "`%D'in i Urutonde" #, fuzzy #~ msgid "default-initialization of `%#D', which has reference type" #~ msgstr "Mburabuzi Bya Indango Ubwoko" #, fuzzy #~ msgid "uninitialized reference member `%D'" #~ msgstr "Itatangijwe Indango" #, fuzzy #~ msgid "initializer list treated as compound expression" #~ msgstr "Urutonde Nka imvugo" #, fuzzy #~ msgid "`%D' will be initialized after" #~ msgstr "`%D'Nyuma" #, fuzzy #~ msgid "base `%T' will be initialized after" #~ msgstr "SHINGIRO Nyuma" # desktop/source\app\ssodlg.src:DLG_SSOLOGIN.text #, fuzzy #~ msgid " `%#D'" #~ msgstr "`%#D'" # sc/source\core\src\compiler.src:RID_SC_FUNCTION_NAMES.SC_OPCODE_BASE.text #, fuzzy #~ msgid " base `%T'" #~ msgstr "SHINGIRO" #, fuzzy #~ msgid "multiple initializations given for base `%T'" #~ msgstr "Igikubo kugirango SHINGIRO" #, fuzzy #~ msgid "initializations for multiple members of `%T'" #~ msgstr "kugirango Igikubo Bya" #, fuzzy #~ msgid "base class `%#T' should be explicitly initialized in the copy constructor" #~ msgstr "SHINGIRO ishuri in i Gukoporora" #, fuzzy #~ msgid "class `%T' does not have any field named `%D'" #~ msgstr "ishuri OYA Umwanya" #, fuzzy #~ msgid "field `%#D' is static; the only point of initialization is its definition" #~ msgstr "Umwanya ni i Akadomo Bya ni Insobanuro" #, fuzzy #~ msgid "unnamed initializer for `%T', which has no base classes" #~ msgstr "Kitiswe kugirango Oya SHINGIRO Inzego" #, fuzzy #~ msgid "unnamed initializer for `%T', which uses multiple inheritance" #~ msgstr "Kitiswe kugirango Igikubo" #, fuzzy #~ msgid "type `%D' is not a direct or virtual base of `%T'" #~ msgstr "Ubwoko ni OYA a Cyangwa Kitaboneka SHINGIRO Bya" #, fuzzy #~ msgid "type `%D' is not a direct base of `%T'" #~ msgstr "Ubwoko ni OYA a SHINGIRO Bya" #, fuzzy #~ msgid "bad array initializer" #~ msgstr "Imbonerahamwe" #, fuzzy #~ msgid "`%T' is not an aggregate type" #~ msgstr "`%T'ni OYA Ubwoko" #, fuzzy #~ msgid "`%T' fails to be an aggregate typedef" #~ msgstr "`%T'Kuri" #, fuzzy #~ msgid "type `%T' is of non-aggregate type" #~ msgstr "Ubwoko ni Bya Ubwoko" #, fuzzy #~ msgid "cannot call destructor `%T::~%T' without object" #~ msgstr "Igikoresho" #, fuzzy #~ msgid "invalid use of non-static field `%D'" #~ msgstr "Sibyo Gukoresha Bya Umwanya" #, fuzzy #~ msgid "invalid use of member `%D'" #~ msgstr "Sibyo Gukoresha Bya" #, fuzzy #~ msgid "no method `%T::%D'" #~ msgstr "Oya Uburyo" #, fuzzy #~ msgid "incomplete type `%T' does not have member `%D'" #~ msgstr "Ubwoko OYA" #, fuzzy #~ msgid "`%D' is not a member of type `%T'" #~ msgstr "`%D'ni OYA a Bya Ubwoko" #, fuzzy #~ msgid "invalid pointer to bit-field `%D'" #~ msgstr "Sibyo Mweretsi Kuri Umwanya" #, fuzzy #~ msgid "object missing in use of pointer-to-member construct" #~ msgstr "Igikoresho Ibuze in Gukoresha Bya Mweretsi Kuri" #, fuzzy #~ msgid "member `%D' is non-static but referenced as a static member" #~ msgstr "ni Nka a" #, fuzzy #~ msgid "at this point in file" #~ msgstr "ku iyi Akadomo in IDOSIYE" #, fuzzy #~ msgid "object missing in `%E'" #~ msgstr "Igikoresho Ibuze in" #, fuzzy #~ msgid "new of array type fails to specify size" #~ msgstr "Gishya Bya Imbonerahamwe Ubwoko Kuri Ingano" #, fuzzy #~ msgid "size in array new must have integral type" #~ msgstr "Ingano in Imbonerahamwe Gishya Umubare Wuzuye Ubwoko" #, fuzzy #~ msgid "zero size array reserves no space" #~ msgstr "Zeru Ingano Imbonerahamwe Oya Umwanya" #, fuzzy #~ msgid "new cannot be applied to a reference type" #~ msgstr "Gishya Byashyizweho Kuri a Indango Ubwoko" #, fuzzy #~ msgid "new cannot be applied to a function type" #~ msgstr "Gishya Byashyizweho Kuri a Umumaro Ubwoko" #, fuzzy #~ msgid "call to Java constructor, while `jclass' undefined" #~ msgstr "Kuri kidasobanuye" #, fuzzy #~ msgid "can't find class$" #~ msgstr "Gushaka ishuri" #, fuzzy #~ msgid "invalid type `void' for new" #~ msgstr "Sibyo Ubwoko kugirango Gishya" #, fuzzy #~ msgid "call to Java constructor with `%s' undefined" #~ msgstr "Kuri Na: kidasobanuye" #, fuzzy #~ msgid "ISO C++ forbids initialization in array new" #~ msgstr "C in Imbonerahamwe Gishya" #, fuzzy #~ msgid "initializer list being treated as compound expression" #~ msgstr "Urutonde Nka imvugo" #, fuzzy #~ msgid "ISO C++ forbids aggregate initializer to new" #~ msgstr "C Kuri Gishya" #, fuzzy #~ msgid "uninitialized const in `new' of `%#T'" #~ msgstr "Itatangijwe in Bya" #, fuzzy #~ msgid "cannot initialize multi-dimensional array with initializer" #~ msgstr "gutangiza Imbonerahamwe Na:" #, fuzzy #~ msgid "unknown array size in delete" #~ msgstr "Kitazwi Imbonerahamwe Ingano in Gusiba" #, fuzzy #~ msgid "type to vector delete is neither pointer or array type" #~ msgstr "Ubwoko Kuri Gusiba ni Mweretsi Cyangwa Imbonerahamwe Ubwoko" #, fuzzy #~ msgid "type name expected before `*'" #~ msgstr "Ubwoko Izina: Ikitezwe: Mbere" #, fuzzy #~ msgid "cannot declare references to references" #~ msgstr "Indango Kuri Indango" #, fuzzy #~ msgid "cannot declare pointers to references" #~ msgstr "Kuri Indango" #, fuzzy #~ msgid "type name expected before `&'" #~ msgstr "Ubwoko Izina: Ikitezwe: Mbere" #, fuzzy #~ msgid "semicolon missing after %s declaration" #~ msgstr "Akabago n'Akitso Ibuze Nyuma" #, fuzzy #~ msgid "semicolon missing after declaration of `%T'" #~ msgstr "Akabago n'Akitso Ibuze Nyuma Bya" #, fuzzy #~ msgid "junk at end of #pragma %s" #~ msgstr "Umwanda ku Impera Bya" #, fuzzy #~ msgid "invalid #pragma %s" #~ msgstr "Sibyo" #, fuzzy #~ msgid "#pragma vtable no longer supported" #~ msgstr "#Oya" #, fuzzy #~ msgid "#pragma implementation for %s appears after file is included" #~ msgstr "#kugirango Nyuma IDOSIYE ni" #, fuzzy #~ msgid "junk at end of #pragma GCC java_exceptions" #~ msgstr "Umwanda ku Impera Bya" #, fuzzy #~ msgid "`%D' not defined" #~ msgstr "`%D'Bitasobanutse>" #, fuzzy #~ msgid "`%D' was not declared in this scope" #~ msgstr "`%D'OYA in iyi Ingano:" #, fuzzy #~ msgid "`%D' undeclared (first use this function)" #~ msgstr "`%D'Itangira Gukoresha iyi Umumaro" #, fuzzy #~ msgid "(Each undeclared identifier is reported only once for each function it appears in.)" #~ msgstr "(Ikiranga ni Rimwe kugirango Umumaro in" #, fuzzy #~ msgid "`::%D' undeclared (first use here)" #~ msgstr "`::%D'Itangira Gukoresha" #, fuzzy #~ msgid "real-valued template parameters when cross-compiling" #~ msgstr "Inyandikorugero Ibigenga Ryari: Kwambukiranya" #, fuzzy #~ msgid "the mangled name of `%D' will change in a future version of GCC" #~ msgstr "i Izina: Bya Guhindura>> in a Verisiyo Bya" #, fuzzy #~ msgid "due to a defect in the G++ 3.2 ABI, G++ has assigned the same mangled name to two different types" #~ msgstr "Kuri a in i 3. 2. i Izina: Kuri" #, fuzzy #~ msgid "invalid use of member `%D' in static member function" #~ msgstr "Sibyo Gukoresha Bya in Umumaro" #, fuzzy #~ msgid "use of namespace `%D' as expression" #~ msgstr "Gukoresha Bya Nka imvugo" #, fuzzy #~ msgid "use of class template `%T' as expression" #~ msgstr "Gukoresha Bya ishuri Inyandikorugero Nka imvugo" #, fuzzy #~ msgid "use of %s from containing function" #~ msgstr "Gukoresha Bya Bivuye Umumaro" #, fuzzy #~ msgid "request for member `%D' is ambiguous in multiple inheritance lattice" #~ msgstr "Kubaza... kugirango ni in Igikubo" #, fuzzy #~ msgid "generic thunk code fails for method `%#D' which uses `...'" #~ msgstr "Gifitanye isano ITEGEKONGENGA kugirango Uburyo" #, fuzzy #~ msgid "non-static const member `%#D', can't use default assignment operator" #~ msgstr "Gukoresha Mburabuzi Igenera Mukoresha" #, fuzzy #~ msgid "non-static reference member `%#D', can't use default assignment operator" #~ msgstr "Indango Gukoresha Mburabuzi Igenera Mukoresha" #, fuzzy #~ msgid "`%s' tag used in naming `%#T'" #~ msgstr "`%s'Itagi: in" #, fuzzy #~ msgid "keyword `export' not implemented, and will be ignored" #~ msgstr "Ijambo- banze OYA Na" #, fuzzy #~ msgid "use of linkage spec `%D' is different from previous spec `%D'" #~ msgstr "Gukoresha Bya ni Bivuye Ibanjirije" #, fuzzy #~ msgid "no base or member initializers given following ':'" #~ msgstr "Oya SHINGIRO Cyangwa" #, fuzzy #~ msgid "anachronistic old style base class initializer" #~ msgstr "ki/ bishaje IMISUSIRE SHINGIRO ishuri" #, fuzzy #~ msgid "`>>' should be `> >' in template class name" #~ msgstr "`>>'in Inyandikorugero ishuri Izina:" #, fuzzy #~ msgid "use of template qualifier outside template" #~ msgstr "Gukoresha Bya Inyandikorugero Hanze Inyandikorugero" #, fuzzy #~ msgid "ISO C++ forbids an empty condition for `%s'" #~ msgstr "C ubusa Ibisabwa kugirango" #, fuzzy #~ msgid "definition of class `%T' in condition" #~ msgstr "Insobanuro Bya ishuri in Ibisabwa" #, fuzzy #~ msgid "definition of enum `%T' in condition" #~ msgstr "Insobanuro Bya in Ibisabwa" #, fuzzy #~ msgid "definition of array `%#D' in condition" #~ msgstr "Insobanuro Bya Imbonerahamwe in Ibisabwa" #, fuzzy #~ msgid "old style placement syntax, use () instead" #~ msgstr "ki/ bishaje IMISUSIRE Ishyira mu mwanya Gukoresha" #, fuzzy #~ msgid "`%T' is not a valid expression" #~ msgstr "`%T'ni OYA a Byemewe imvugo" #, fuzzy #~ msgid "initialization of new expression with `='" #~ msgstr "Bya Gishya imvugo Na:" #, fuzzy #~ msgid "ISO C++ forbids compound literals" #~ msgstr "C" #, fuzzy #~ msgid "ISO C++ forbids braced-groups within expressions" #~ msgstr "C Amatsinda muri" #, fuzzy #~ msgid "sigof type specifier" #~ msgstr "Ubwoko" #, fuzzy #~ msgid "`sigof' applied to non-aggregate expression" #~ msgstr "`Byashyizweho Kuri imvugo" #, fuzzy #~ msgid "`sigof' applied to non-aggregate type" #~ msgstr "`Byashyizweho Kuri Ubwoko" #, fuzzy #~ msgid "using `typename' outside of template" #~ msgstr "ikoresha Hanze Bya Inyandikorugero" #, fuzzy #~ msgid "storage class specifier `%s' not allowed after struct or class" #~ msgstr "ishuri OYA Nyuma Cyangwa ishuri" #, fuzzy #~ msgid "type specifier `%s' not allowed after struct or class" #~ msgstr "Ubwoko OYA Nyuma Cyangwa ishuri" #, fuzzy #~ msgid "type qualifier `%s' not allowed after struct or class" #~ msgstr "Ubwoko OYA Nyuma Cyangwa ishuri" #, fuzzy #~ msgid "no body nor ';' separates two class, struct or union declarations" #~ msgstr "Oya Umubiri ishuri Cyangwa Ihuza" #, fuzzy #~ msgid "no bases given following `:'" #~ msgstr "Oya" #, fuzzy #~ msgid "multiple access specifiers" #~ msgstr "Igikubo" #, fuzzy #~ msgid "multiple `virtual' specifiers" #~ msgstr "Igikubo" #, fuzzy #~ msgid "missing ';' before right brace" #~ msgstr "Ibuze Mbere Iburyo:" #, fuzzy #~ msgid "ISO C++ forbids array dimensions with parenthesized type in new" #~ msgstr "C Imbonerahamwe Ingero Na: Ubwoko in Gishya" #, fuzzy #~ msgid "`%T' is not a class or namespace" #~ msgstr "`%T'ni OYA a ishuri Cyangwa" #, fuzzy #~ msgid "ISO C++ forbids label declarations" #~ msgstr "C Akarango" #, fuzzy #~ msgid "ISO C++ forbids computed gotos" #~ msgstr "C" #, fuzzy #~ msgid "label must be followed by statement" #~ msgstr "Akarango ku Inyandiko" #, fuzzy #~ msgid "must have at least one catch per try block" #~ msgstr "ku Funga" #, fuzzy #~ msgid "ISO C++ forbids compound statements inside for initializations" #~ msgstr "C Mo Imbere kugirango" #, fuzzy #~ msgid "possibly missing ')'" #~ msgstr "Ibuze" #, fuzzy #~ msgid "type specifier omitted for parameter" #~ msgstr "Ubwoko kugirango" #, fuzzy #~ msgid "`%E' is not a type, use `typename %E' to make it one" #~ msgstr "`%E'ni OYA a Ubwoko Gukoresha Kuri Ubwoko" #, fuzzy #~ msgid "no type `%D' in `%T'" #~ msgstr "Oya Ubwoko in" #, fuzzy #~ msgid "type specifier omitted for parameter `%E'" #~ msgstr "Ubwoko kugirango" #, fuzzy #~ msgid "'%D' is used as a type, but is not defined as a type." #~ msgstr "'%D'ni Nka a Ubwoko ni OYA Nka a Ubwoko" #, fuzzy #~ msgid "data member `%D' cannot be a member template" #~ msgstr "Ibyatanzwe a Inyandikorugero" #, fuzzy #~ msgid "invalid member template declaration `%D'" #~ msgstr "Sibyo Inyandikorugero" #, fuzzy #~ msgid "explicit specialization in non-namespace scope `%D'" #~ msgstr "in Ingano:" #, fuzzy #~ msgid "enclosing class templates are not explicitly specialized" #~ msgstr "ishuri Inyandikorugero OYA cy'umwihariko/ mwihariko" #, fuzzy #~ msgid "specializing `%#T' in different namespace" #~ msgstr "in" #, fuzzy #~ msgid " from definition of `%#D'" #~ msgstr "Bivuye Insobanuro Bya" #, fuzzy #~ msgid "specialization of `%T' after instantiation" #~ msgstr "Bya Nyuma" #, fuzzy #~ msgid "specialization `%T' after instantiation `%T'" #~ msgstr "Nyuma" #, fuzzy #~ msgid "explicit specialization of non-template `%T'" #~ msgstr "Bya Inyandikorugero" #, fuzzy #~ msgid "specialization of %D after instantiation" #~ msgstr "Bya Nyuma" # #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-# # #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-# # #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-# #, fuzzy #~ msgid "%s %+#D" #~ msgstr "%s%+#D" #, fuzzy #~ msgid "`%D' is not a function template" #~ msgstr "`%D'ni OYA a Umumaro Inyandikorugero" #, fuzzy #~ msgid "template-id `%D' for `%+D' does not match any template declaration" #~ msgstr "Inyandikorugero ID kugirango OYA BIHUYE Inyandikorugero" #, fuzzy #~ msgid "ambiguous template specialization `%D' for `%+D'" #~ msgstr "Inyandikorugero kugirango" #, fuzzy #~ msgid "template-id `%D' in declaration of primary template" #~ msgstr "Inyandikorugero ID in Bya Inyandikorugero" #, fuzzy #~ msgid "template parameter list used in explicit instantiation" #~ msgstr "Inyandikorugero Urutonde in" #, fuzzy #~ msgid "definition provided for explicit instantiation" #~ msgstr "Insobanuro kugirango" #, fuzzy #~ msgid "too many template parameter lists in declaration of `%D'" #~ msgstr "Inyandikorugero Intonde in Bya" #, fuzzy #~ msgid "too few template parameter lists in declaration of `%D'" #~ msgstr "Inyandikorugero Intonde in Bya" #, fuzzy #~ msgid "explicit specialization not preceded by `template <>'" #~ msgstr "OYA ku Inyandikorugero" #, fuzzy #~ msgid "partial specialization `%D' of function template" #~ msgstr "Bituzuye Bya Umumaro Inyandikorugero" #, fuzzy #~ msgid "default argument specified in explicit specialization" #~ msgstr "Mburabuzi in" #, fuzzy #~ msgid "template specialization with C linkage" #~ msgstr "Inyandikorugero Na: C" #, fuzzy #~ msgid "specialization of implicitly-declared special member function" #~ msgstr "Bya Bidasanzwe Umumaro" #, fuzzy #~ msgid "no member function `%D' declared in `%T'" #~ msgstr "Oya Umumaro in" #, fuzzy #~ msgid "too many template parameter lists in declaration of `%T'" #~ msgstr "Inyandikorugero Intonde in Bya" #, fuzzy #~ msgid " shadows template parm `%#D'" #~ msgstr "Inyandikorugero" #, fuzzy #~ msgid "template parameters not used in partial specialization:" #~ msgstr "Inyandikorugero Ibigenga OYA in Bituzuye" # desktop/source\app\ssodlg.src:DLG_SSOLOGIN.text #, fuzzy #~ msgid " `%D'" #~ msgstr "`%D'" #, fuzzy #~ msgid "partial specialization `%T' does not specialize any template arguments" #~ msgstr "Bituzuye OYA Inyandikorugero ingingo" #, fuzzy #~ msgid "template argument `%E' involves template parameter(s)" #~ msgstr "Inyandikorugero Inyandikorugero S" #, fuzzy #~ msgid "type `%T' of template argument `%E' depends on template parameter(s)" #~ msgstr "Ubwoko Bya Inyandikorugero ku Inyandikorugero S" #, fuzzy #~ msgid "no default argument for `%D'" #~ msgstr "Oya Mburabuzi kugirango" #, fuzzy #~ msgid "template with C linkage" #~ msgstr "Inyandikorugero Na: C" #, fuzzy #~ msgid "template class without a name" #~ msgstr "Inyandikorugero ishuri a Izina:" #, fuzzy #~ msgid "`%D' does not declare a template type" #~ msgstr "`%D'OYA a Inyandikorugero Ubwoko" #, fuzzy #~ msgid "template definition of non-template `%#D'" #~ msgstr "Inyandikorugero Insobanuro Bya Inyandikorugero" #, fuzzy #~ msgid "expected %d levels of template parms for `%#D', got %d" #~ msgstr "Ikitezwe: Intera Bya Inyandikorugero kugirango" #, fuzzy #~ msgid "got %d template parameters for `%#D'" #~ msgstr "Inyandikorugero Ibigenga kugirango" #, fuzzy #~ msgid "got %d template parameters for `%#T'" #~ msgstr "Inyandikorugero Ibigenga kugirango" #, fuzzy #~ msgid " but %d required" #~ msgstr "Bya ngombwa" #, fuzzy #~ msgid "`%T' is not a template type" #~ msgstr "`%T'ni OYA a Inyandikorugero Ubwoko" #, fuzzy #~ msgid "previous declaration `%D'" #~ msgstr "Ibanjirije" #, fuzzy #~ msgid "used %d template parameter%s instead of %d" #~ msgstr "Inyandikorugero Bya" #, fuzzy #~ msgid "template parameter `%#D'" #~ msgstr "Inyandikorugero" #, fuzzy #~ msgid "redeclared here as `%#D'" #~ msgstr "Nka" #, fuzzy #~ msgid "redefinition of default argument for `%#D'" #~ msgstr "Bya Mburabuzi kugirango" #, fuzzy #~ msgid " original definition appeared here" #~ msgstr "Umwimerere Insobanuro" #, fuzzy #~ msgid "`%E' is not a valid template argument" #~ msgstr "`%E'ni OYA a Byemewe Inyandikorugero" #, fuzzy #~ msgid "it must be the address of a function with external linkage" #~ msgstr "i Aderesi Bya a Umumaro Na: external" #, fuzzy #~ msgid "it must be the address of an object with external linkage" #~ msgstr "i Aderesi Bya Igikoresho Na: external" #, fuzzy #~ msgid "it must be a pointer-to-member of the form `&X::Y'" #~ msgstr "a Mweretsi Kuri Bya i Ifishi" #, fuzzy #~ msgid "string literal %E is not a valid template argument because it is the address of an object with static linkage" #~ msgstr "Ikurikiranyanyuguti ni OYA a Byemewe Inyandikorugero ni i Aderesi Bya Igikoresho Na:" #, fuzzy #~ msgid "address of non-extern `%E' cannot be used as template argument" #~ msgstr "Aderesi Bya Nka Inyandikorugero" #, fuzzy #~ msgid "non-constant `%E' cannot be used as template argument" #~ msgstr "Nka Inyandikorugero" #, fuzzy #~ msgid "object `%E' cannot be used as template argument" #~ msgstr "Igikoresho Nka Inyandikorugero" #, fuzzy #~ msgid "to refer to a type member of a template parameter, use `typename %E'" #~ msgstr "Kuri Kuri a Ubwoko Bya a Inyandikorugero Gukoresha" #, fuzzy #~ msgid "type/value mismatch at argument %d in template parameter list for `%D'" #~ msgstr "Ubwoko Agaciro ku in Inyandikorugero Urutonde kugirango" #, fuzzy #~ msgid " expected a constant of type `%T', got `%T'" #~ msgstr "Ikitezwe: a Bya Ubwoko" #, fuzzy #~ msgid " expected a type, got `%E'" #~ msgstr "Ikitezwe: a Ubwoko" #, fuzzy #~ msgid " expected a type, got `%T'" #~ msgstr "Ikitezwe: a Ubwoko" #, fuzzy #~ msgid " expected a class template, got `%T'" #~ msgstr "Ikitezwe: a ishuri Inyandikorugero" #, fuzzy #~ msgid " expected a template of type `%D', got `%D'" #~ msgstr "Ikitezwe: a Inyandikorugero Bya Ubwoko" #, fuzzy #~ msgid "template-argument `%T' uses anonymous type" #~ msgstr "Inyandikorugero Ubwoko" #, fuzzy #~ msgid "template-argument `%T' uses local type `%T'" #~ msgstr "Inyandikorugero Ubwoko" #, fuzzy #~ msgid "template-argument `%T' is a variably modified type" #~ msgstr "Inyandikorugero ni a Byahinduwe Ubwoko" #, fuzzy #~ msgid "could not convert template argument `%E' to `%T'" #~ msgstr "OYA GUHINDURA Inyandikorugero Kuri" #, fuzzy #~ msgid "wrong number of template arguments (%d, should be %d)" #~ msgstr "Umubare Bya Inyandikorugero ingingo" #, fuzzy #~ msgid "provided for `%D'" #~ msgstr "kugirango" #, fuzzy #~ msgid "template argument %d is invalid" #~ msgstr "Inyandikorugero ni Sibyo" #, fuzzy #~ msgid "non-template used as template" #~ msgstr "Inyandikorugero Nka Inyandikorugero" #, fuzzy #~ msgid "`%T' is not a template" #~ msgstr "`%T'ni OYA a Inyandikorugero" #, fuzzy #~ msgid "non-template type `%T' used as a template" #~ msgstr "Inyandikorugero Ubwoko Nka a Inyandikorugero" #, fuzzy #~ msgid "for template declaration `%D'" #~ msgstr "kugirango Inyandikorugero" #, fuzzy #~ msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'" #~ msgstr "Inyandikorugero Ubujyakuzimu Kinini Bya Gukoresha Ubujyakuzimu Kuri i Kinini" #, fuzzy #~ msgid "ambiguous class template instantiation for `%#T'" #~ msgstr "ishuri Inyandikorugero kugirango" # #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-# # #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-# # #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-# #, fuzzy #~ msgid "%s %+#T" #~ msgstr "%s%+#T" #, fuzzy #~ msgid "instantiation of `%D' as type `%T'" #~ msgstr "Bya Nka Ubwoko" #, fuzzy #~ msgid "invalid parameter type `%T'" #~ msgstr "Sibyo Ubwoko" #, fuzzy #~ msgid "in declaration `%D'" #~ msgstr "in" #, fuzzy #~ msgid "creating pointer to member function of non-class type `%T'" #~ msgstr "Mweretsi Kuri Umumaro Bya ishuri Ubwoko" #, fuzzy #~ msgid "creating array with size zero" #~ msgstr "Imbonerahamwe Na: Ingano Zeru" #, fuzzy #~ msgid "creating array with size zero (`%E')" #~ msgstr "Imbonerahamwe Na: Ingano Zeru" #, fuzzy #~ msgid "forming reference to void" #~ msgstr "Indango Kuri" #, fuzzy #~ msgid "forming %s to reference type `%T'" #~ msgstr "Kuri Indango Ubwoko" #, fuzzy #~ msgid "creating pointer to member of non-class type `%T'" #~ msgstr "Mweretsi Kuri Bya ishuri Ubwoko" #, fuzzy #~ msgid "creating pointer to member reference type `%T'" #~ msgstr "Mweretsi Kuri Indango Ubwoko" #, fuzzy #~ msgid "creating array of `%T'" #~ msgstr "Imbonerahamwe Bya" #, fuzzy #~ msgid "`%T' is not a class, struct, or union type" #~ msgstr "`%T'ni OYA a ishuri Cyangwa Ihuza Ubwoko" #, fuzzy #~ msgid "use of `%s' in template" #~ msgstr "Gukoresha Bya in Inyandikorugero" #, fuzzy #~ msgid "type `%T' composed from a local class is not a valid template-argument" #~ msgstr "Ubwoko Bivuye a ishuri ni OYA a Byemewe Inyandikorugero" #, fuzzy #~ msgid " trying to instantiate `%D'" #~ msgstr "Kuri" #, fuzzy #~ msgid "incomplete type unification" #~ msgstr "Ubwoko" #, fuzzy #~ msgid "use of `%s' in template type unification" #~ msgstr "Gukoresha Bya in Inyandikorugero Ubwoko" #, fuzzy #~ msgid "explicit instantiation of non-template `%#D'" #~ msgstr "Bya Inyandikorugero" #, fuzzy #~ msgid "no matching template for `%D' found" #~ msgstr "Oya Inyandikorugero kugirango Byabonetse" #, fuzzy #~ msgid "explicit instantiation of `%#D'" #~ msgstr "Bya" #, fuzzy #~ msgid "duplicate explicit instantiation of `%#D'" #~ msgstr "Gusubiramo Bya" #, fuzzy #~ msgid "ISO C++ forbids the use of `extern' on explicit instantiations" #~ msgstr "C i Gukoresha Bya ku" #, fuzzy #~ msgid "storage class `%D' applied to template instantiation" #~ msgstr "ishuri Byashyizweho Kuri Inyandikorugero" #, fuzzy #~ msgid "explicit instantiation of non-template type `%T'" #~ msgstr "Bya Inyandikorugero Ubwoko" #, fuzzy #~ msgid "explicit instantiation of `%#T' before definition of template" #~ msgstr "Bya Mbere Insobanuro Bya Inyandikorugero" #, fuzzy #~ msgid "ISO C++ forbids the use of `%s' on explicit instantiations" #~ msgstr "C i Gukoresha Bya ku" #, fuzzy #~ msgid "duplicate explicit instantiation of `%#T'" #~ msgstr "Gusubiramo Bya" #, fuzzy #~ msgid "explicit instantiation of `%D' but no definition available" #~ msgstr "Bya Oya Insobanuro Bihari" #, fuzzy #~ msgid "`%#T' is not a valid type for a template constant parameter" #~ msgstr "`%#T'ni OYA a Byemewe Ubwoko kugirango a Inyandikorugero" #, fuzzy #~ msgid "-frepo must be used with -c" #~ msgstr "-Na: C" #, fuzzy #~ msgid "mysterious repository information in %s" #~ msgstr "Ibisobanuro in" #, fuzzy #~ msgid "can't create repository information file `%s'" #~ msgstr "Kurema Ibisobanuro IDOSIYE" #, fuzzy #~ msgid "cannot use typeid with -fno-rtti" #~ msgstr "Gukoresha Na:" #, fuzzy #~ msgid "must #include before using typeid" #~ msgstr "Gushyiramo Mbere ikoresha" #, fuzzy #~ msgid "cannot create type information for type `%T' because its size is variable" #~ msgstr "Kurema Ubwoko Ibisobanuro kugirango Ubwoko Ingano ni IMPINDURAGACIRO" #, fuzzy #~ msgid "dynamic_cast of `%#D' to `%#T' can never succeed" #~ msgstr "Bya Kuri Nta narimwe" #, fuzzy #~ msgid "cannot dynamic_cast `%E' (of type `%#T') to type `%#T' (%s)" #~ msgstr "Bya Ubwoko Kuri Ubwoko" #, fuzzy #~ msgid "`%T' is an inaccessible base of `%T'" #~ msgstr "`%T'ni SHINGIRO Bya" #, fuzzy #~ msgid "`%T' is an ambiguous base of `%T'" #~ msgstr "`%T'ni SHINGIRO Bya" #, fuzzy #~ msgid "assignment to non-static member `%D' of enclosing class `%T'" #~ msgstr "Igenera Kuri Bya ishuri" #, fuzzy #~ msgid "adjusting pointers for covariant returns" #~ msgstr "kugirango" #, fuzzy #~ msgid "invalid covariant return type for `%#D'" #~ msgstr "Sibyo Garuka Ubwoko kugirango" #, fuzzy #~ msgid " overriding `%#D' (must be pointer or reference to class)" #~ msgstr "Mweretsi Cyangwa Indango Kuri ishuri" #, fuzzy #~ msgid " overriding `%#D' (must use pointer or reference)" #~ msgstr "Gukoresha Mweretsi Cyangwa Indango" #, fuzzy #~ msgid "conflicting return type specified for `%#D'" #~ msgstr "Garuka Ubwoko kugirango" #, fuzzy #~ msgid "looser throw specifier for `%#F'" #~ msgstr "kugirango" #, fuzzy #~ msgid " since `%#D' declared in base class" #~ msgstr "guhera in SHINGIRO ishuri" #, fuzzy #~ msgid "`%#D' needs a final overrider" #~ msgstr "`%#D'a" #, fuzzy #~ msgid "type of asm operand `%E' could not be determined" #~ msgstr "Ubwoko Bya OYA" #, fuzzy #~ msgid "ISO C++ does not permit named return values" #~ msgstr "C OYA Garuka Uduciro" #, fuzzy #~ msgid "return identifier `%D' already in place" #~ msgstr "Garuka Ikiranga in" #, fuzzy #~ msgid "can't redefine default return value for constructors" #~ msgstr "Mburabuzi Garuka Agaciro kugirango" #, fuzzy #~ msgid "only constructors take base initializers" #~ msgstr "SHINGIRO" #, fuzzy #~ msgid "`this' is unavailable for static member functions" #~ msgstr "`ni kugirango Imimaro" #, fuzzy #~ msgid "invalid use of `this' in non-member function" #~ msgstr "Sibyo Gukoresha Bya in Umumaro" #, fuzzy #~ msgid "invalid use of `this' at top level" #~ msgstr "Sibyo Gukoresha Bya ku Hejuru: urwego" #, fuzzy #~ msgid "calling type `%T' like a method" #~ msgstr "Ubwoko nka a Uburyo" #, fuzzy #~ msgid "destructor specifier `%T::~%T()' must have matching names" #~ msgstr "Amazina" #, fuzzy #~ msgid "`%E' is not of type `%T'" #~ msgstr "`%E'ni OYA Bya Ubwoko" #, fuzzy #~ msgid "template type parameters must use the keyword `class' or `typename'" #~ msgstr "Inyandikorugero Ubwoko Ibigenga Gukoresha i Ijambo- banze Cyangwa" #, fuzzy #~ msgid "invalid default template argument" #~ msgstr "Sibyo Mburabuzi Inyandikorugero" #, fuzzy #~ msgid "definition of `%#T' inside template parameter list" #~ msgstr "Insobanuro Bya Mo Imbere Inyandikorugero Urutonde" #, fuzzy #~ msgid "invalid definition of qualified type `%T'" #~ msgstr "Sibyo Insobanuro Bya Ubwoko" #, fuzzy #~ msgid "invalid base-class specification" #~ msgstr "Sibyo SHINGIRO ishuri" #, fuzzy #~ msgid "base class `%T' has cv qualifiers" #~ msgstr "SHINGIRO ishuri" #, fuzzy #~ msgid "multiple declarators in template declaration" #~ msgstr "Igikubo in Inyandikorugero" #, fuzzy #~ msgid "type of `%E' is unknown" #~ msgstr "Ubwoko Bya ni Kitazwi" #, fuzzy #~ msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy" #~ msgstr "Ikiranga Izina: Na: C By'imbere" #, fuzzy #~ msgid "parse error at end of saved function text" #~ msgstr "Ikosa ku Impera Bya Umumaro Umwandiko" #, fuzzy #~ msgid "%Hend of file read inside definition" #~ msgstr "%HendBya IDOSIYE Gusoma Mo Imbere Insobanuro" #, fuzzy #~ msgid "parse error in method specification" #~ msgstr "Ikosa in Uburyo" #, fuzzy #~ msgid "function body for constructor missing" #~ msgstr "Umumaro Umubiri kugirango Ibuze" #, fuzzy #~ msgid "%Hend of file read inside default argument" #~ msgstr "%HendBya IDOSIYE Gusoma Mo Imbere Mburabuzi" #, fuzzy #~ msgid "circular dependency in default args of `%#D'" #~ msgstr "Cy'uruziga in Mburabuzi Bya" #, fuzzy #~ msgid "invalid type `%T' for default argument to `%T'" #~ msgstr "Sibyo Ubwoko kugirango Mburabuzi Kuri" #, fuzzy #~ msgid "%s before `%s'" #~ msgstr "%sMbere" #, fuzzy #~ msgid "%s before `%c'" #~ msgstr "%sMbere" #, fuzzy #~ msgid "%s before `\\%o'" #~ msgstr "%sMbere" #, fuzzy #~ msgid "%s before `%s' token" #~ msgstr "%sMbere" #, fuzzy #~ msgid "non-lvalue in %s" #~ msgstr "in" #, fuzzy #~ msgid "`%V' qualifiers cannot be applied to `%T'" #~ msgstr "`%V'Byashyizweho Kuri" #, fuzzy #~ msgid "`%s' attribute can only be applied to Java class definitions" #~ msgstr "`%s'Ikiranga Byashyizweho Kuri ishuri" #, fuzzy #~ msgid "`%s' attribute can only be applied to class definitions" #~ msgstr "`%s'Ikiranga Byashyizweho Kuri ishuri" #, fuzzy #~ msgid "`%s' is obsolete; g++ vtables are now COM-compatible by default" #~ msgstr "`%s'ni g NONEAHA ku Mburabuzi" #, fuzzy #~ msgid "requested init_priority is not an integer constant" #~ msgstr "ni OYA Umubare wuzuye" #, fuzzy #~ msgid "can only use `%s' attribute on file-scope definitions of objects of class type" #~ msgstr "Gukoresha Ikiranga ku IDOSIYE Ingano: Bya Ibintu Bya ishuri Ubwoko" #, fuzzy #~ msgid "requested init_priority is out of range" #~ msgstr "ni Inyuma Bya Urutonde" #, fuzzy #~ msgid "requested init_priority is reserved for internal use" #~ msgstr "ni kugirango By'imbere Gukoresha" #, fuzzy #~ msgid "`%s' attribute is not supported on this platform" #~ msgstr "`%s'Ikiranga ni OYA ku iyi" #, fuzzy #~ msgid "lang_* check: failed in %s, at %s:%d" #~ msgstr "Kugenzura... Byanze in ku" #, fuzzy #~ msgid "ISO C++ forbids %s between pointer of type `void *' and pointer-to-function" #~ msgstr "C hagati Mweretsi Bya Ubwoko Na Mweretsi Kuri Umumaro" #, fuzzy #~ msgid "%s between distinct pointer types `%T' and `%T' lacks a cast" #~ msgstr "%shagati Mweretsi Na a" #, fuzzy #~ msgid "ISO C++ prohibits conversion from `%#T' to `(...)'" #~ msgstr "C Ihindurangero Bivuye Kuri" #, fuzzy #~ msgid "invalid application of `%s' to a member function" #~ msgstr "Sibyo Porogaramu Bya Kuri a Umumaro" #, fuzzy #~ msgid "invalid application of `%s' to non-static member" #~ msgstr "Sibyo Porogaramu Bya Kuri" #, fuzzy #~ msgid "sizeof applied to a bit-field" #~ msgstr "Byashyizweho Kuri a Umwanya" #, fuzzy #~ msgid "ISO C++ forbids applying `sizeof' to an expression of function type" #~ msgstr "C Kuri imvugo Bya Umumaro Ubwoko" #, fuzzy #~ msgid "invalid use of non-lvalue array" #~ msgstr "Sibyo Gukoresha Bya Imbonerahamwe" #, fuzzy #~ msgid "deprecated conversion from string constant to `%T'" #~ msgstr "Bitemewe. Ihindurangero Bivuye Ikurikiranyanyuguti Kuri" #, fuzzy #~ msgid "request for member `%D' in `%E', which is of non-class type `%T'" #~ msgstr "Kubaza... kugirango in ni Bya ishuri Ubwoko" #, fuzzy #~ msgid "`%D' is not a member of `%T'" #~ msgstr "`%D'ni OYA a Bya" #, fuzzy #~ msgid "invalid access to non-static data member `%D' of NULL object" #~ msgstr "Sibyo Kuri Ibyatanzwe Bya Igikoresho" #, fuzzy #~ msgid "(perhaps the `offsetof' macro was used incorrectly)" #~ msgstr "(i Makoro" #, fuzzy #~ msgid "`%D::%D' is not a member of `%T'" #~ msgstr "`%D::%D'ni OYA a Bya" #, fuzzy #~ msgid "destructor specifier `%T::~%T' must have matching names" #~ msgstr "Amazina" #, fuzzy #~ msgid "type `%T' has no destructor" #~ msgstr "Ubwoko Oya" #, fuzzy #~ msgid "`%D' is not a member template function" #~ msgstr "`%D'ni OYA a Inyandikorugero Umumaro" #, fuzzy #~ msgid "`%T' is not a pointer-to-object type" #~ msgstr "`%T'ni OYA a Mweretsi Kuri Igikoresho Ubwoko" #, fuzzy #~ msgid "invalid use of `%s' on pointer to member" #~ msgstr "Sibyo Gukoresha Bya ku Mweretsi Kuri" #, fuzzy #~ msgid "invalid type argument" #~ msgstr "Sibyo Ubwoko" #, fuzzy #~ msgid "ISO C++ forbids subscripting non-lvalue array" #~ msgstr "C Imbonerahamwe" #, fuzzy #~ msgid "subscripting array declared `register'" #~ msgstr "Imbonerahamwe" #, fuzzy #~ msgid "object missing in use of `%E'" #~ msgstr "Igikoresho Ibuze in Gukoresha Bya" #, fuzzy #~ msgid "ISO C++ forbids calling `::main' from within program" #~ msgstr "C Bivuye muri Porogaramu" #, fuzzy #~ msgid "must use .* or ->* to call pointer-to-member function in `%E (...)'" #~ msgstr "Gukoresha Cyangwa Kuri Mweretsi Kuri Umumaro in" #, fuzzy #~ msgid "`%E' cannot be used as a function" #~ msgstr "`%E'Nka a Umumaro" #, fuzzy #~ msgid "too many arguments to %s `%+#D'" #~ msgstr "ingingo Kuri" #, fuzzy #~ msgid "parameter type of called function is incomplete" #~ msgstr "Ubwoko Bya Umumaro ni" #, fuzzy #~ msgid "too few arguments to %s `%+#D'" #~ msgstr "ingingo Kuri" #, fuzzy #~ msgid "assuming cast to type `%T' from overloaded function" #~ msgstr "Kuri Ubwoko Bivuye Umumaro" #, fuzzy #~ msgid "division by zero in `%E / 0'" #~ msgstr "ku Zeru in" #, fuzzy #~ msgid "division by zero in `%E / 0.'" #~ msgstr "ku Zeru in 0" #, fuzzy #~ msgid "division by zero in `%E %% 0'" #~ msgstr "ku Zeru in" #, fuzzy #~ msgid "division by zero in `%E %% 0.'" #~ msgstr "ku Zeru in 0" #, fuzzy #~ msgid "%s rotate count is negative" #~ msgstr "%sKuzerutsa IBARA ni" #, fuzzy #~ msgid "%s rotate count >= width of type" #~ msgstr "%sKuzerutsa IBARA Ubugari Bya Ubwoko" #, fuzzy #~ msgid "ISO C++ forbids comparison between pointer and integer" #~ msgstr "C hagati Mweretsi Na Umubare wuzuye" #, fuzzy #~ msgid "comparison between types `%#T' and `%#T'" #~ msgstr "hagati Na" #, fuzzy #~ msgid "comparison between signed and unsigned integer expressions" #~ msgstr "hagati Na Bitashizweho umukono Umubare wuzuye" #, fuzzy #~ msgid "invalid operands of types `%T' and `%T' to binary `%O'" #~ msgstr "Sibyo Bya Na Kuri Nyabibiri" #, fuzzy #~ msgid "NULL used in arithmetic" #~ msgstr "in" #, fuzzy #~ msgid "ISO C++ forbids using pointer of type `void *' in subtraction" #~ msgstr "C ikoresha Mweretsi Bya Ubwoko in Gukuramo" #, fuzzy #~ msgid "ISO C++ forbids using pointer to a function in subtraction" #~ msgstr "C ikoresha Mweretsi Kuri a Umumaro in Gukuramo" #, fuzzy #~ msgid "ISO C++ forbids using pointer to a method in subtraction" #~ msgstr "C ikoresha Mweretsi Kuri a Uburyo in Gukuramo" #, fuzzy #~ msgid "ISO C++ forbids using pointer to a member in subtraction" #~ msgstr "C ikoresha Mweretsi Kuri a in Gukuramo" #, fuzzy #~ msgid "invalid use of a pointer to an incomplete type in pointer arithmetic" #~ msgstr "Sibyo Gukoresha Bya a Mweretsi Kuri Ubwoko in Mweretsi" #, fuzzy #~ msgid "invalid use of '%E' to form a pointer-to-member-function. Use a qualified-id." #~ msgstr "Sibyo Gukoresha Bya Kuri Ifishi a Mweretsi Kuri Umumaro a ID" #, fuzzy #~ msgid "parenthesis around '%E' cannot be used to form a pointer-to-member-function" #~ msgstr "Kuri Ifishi a Mweretsi Kuri Umumaro" #, fuzzy #~ msgid "taking address of temporary" #~ msgstr "Aderesi Bya By'igihe gito" #, fuzzy #~ msgid "ISO C++ forbids %sing an enum" #~ msgstr "C" #, fuzzy #~ msgid "cannot %s a pointer to incomplete type `%T'" #~ msgstr "a Mweretsi Kuri Ubwoko" #, fuzzy #~ msgid "ISO C++ forbids %sing a pointer of type `%T'" #~ msgstr "C a Mweretsi Bya Ubwoko" #, fuzzy #~ msgid "cast to non-reference type used as lvalue" #~ msgstr "Kuri Indango Ubwoko Nka" #, fuzzy #~ msgid "invalid use of `--' on bool variable `%D'" #~ msgstr "Sibyo Gukoresha Bya ku IMPINDURAGACIRO" #, fuzzy #~ msgid "ISO C++ forbids taking address of function `::main'" #~ msgstr "C Aderesi Bya Umumaro" #, fuzzy #~ msgid "ISO C++ forbids taking the address of an unqualified non-static member function to form a pointer to member function. Say `&%T::%D'" #~ msgstr "C i Aderesi Bya Umumaro Kuri Ifishi a Mweretsi Kuri Umumaro" #, fuzzy #~ msgid "ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say `&%T::%D'" #~ msgstr "C i Aderesi Bya a Umumaro Kuri Ifishi a Mweretsi Kuri Umumaro" #, fuzzy #~ msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression" #~ msgstr "C i Aderesi Bya a Kuri a imvugo" #, fuzzy #~ msgid "attempt to take address of bit-field structure member `%D'" #~ msgstr "Kuri Aderesi Bya Umwanya Imiterere" #, fuzzy #~ msgid "taking address of destructor" #~ msgstr "Aderesi Bya" #, fuzzy #~ msgid "taking address of bound pointer-to-member expression" #~ msgstr "Aderesi Bya Mweretsi Kuri imvugo" #, fuzzy #~ msgid "cannot create pointer to reference member `%D'" #~ msgstr "Kurema Mweretsi Kuri Indango" #, fuzzy #~ msgid "cannot take the address of `this', which is an rvalue expression" #~ msgstr "i Aderesi Bya ni imvugo" #, fuzzy #~ msgid "address requested for `%D', which is declared `register'" #~ msgstr "Aderesi kugirango ni" #, fuzzy #~ msgid "static_cast from type `%T' to type `%T' casts away constness" #~ msgstr "Bivuye Ubwoko Kuri Ubwoko" #, fuzzy #~ msgid "invalid static_cast from type `%T' to type `%T'" #~ msgstr "Sibyo Bivuye Ubwoko Kuri Ubwoko" #, fuzzy #~ msgid "invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'" #~ msgstr "Sibyo Bya imvugo Bya Ubwoko Kuri Ubwoko" #, fuzzy #~ msgid "reinterpret_cast from `%T' to `%T' loses precision" #~ msgstr "Bivuye Kuri" #, fuzzy #~ msgid "reinterpret_cast from `%T' to `%T' casts away const (or volatile)" #~ msgstr "Bivuye Kuri Cyangwa" #, fuzzy #~ msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object" #~ msgstr "C hagati Mweretsi Kuri Umumaro Na Mweretsi Kuri Igikoresho" #, fuzzy #~ msgid "invalid reinterpret_cast from type `%T' to type `%T'" #~ msgstr "Sibyo Bivuye Ubwoko Kuri Ubwoko" #, fuzzy #~ msgid "invalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member type" #~ msgstr "Sibyo Gukoresha Bya Na: Ubwoko ni OYA a Mweretsi Indango a Mweretsi Kuri Ibyatanzwe Ubwoko" #, fuzzy #~ msgid "invalid use of const_cast with type `%T', which is a pointer or reference to a function type" #~ msgstr "Sibyo Gukoresha Bya Na: Ubwoko ni a Mweretsi Cyangwa Indango Kuri a Umumaro Ubwoko" #, fuzzy #~ msgid "invalid const_cast of an rvalue of type `%T' to type `%T'" #~ msgstr "Sibyo Bya Bya Ubwoko Kuri Ubwoko" #, fuzzy #~ msgid "invalid const_cast from type `%T' to type `%T'" #~ msgstr "Sibyo Bivuye Ubwoko Kuri Ubwoko" #, fuzzy #~ msgid "ISO C++ forbids casting to an array type `%T'" #~ msgstr "C Kuri Imbonerahamwe Ubwoko" #, fuzzy #~ msgid "invalid cast to function type `%T'" #~ msgstr "Sibyo Kuri Umumaro Ubwoko" #, fuzzy #~ msgid "cast from `%T' to `%T' discards qualifiers from pointer target type" #~ msgstr "Bivuye Kuri Bivuye Mweretsi Intego Ubwoko" #, fuzzy #~ msgid "cast from `%T' to `%T' increases required alignment of target type" #~ msgstr "Bivuye Kuri Bya ngombwa Itunganya Bya Intego Ubwoko" #, fuzzy #~ msgid " in evaluation of `%Q(%#T, %#T)'" #~ msgstr "in Bya" #, fuzzy #~ msgid "ISO C++ forbids cast to non-reference type used as lvalue" #~ msgstr "C Kuri Indango Ubwoko Nka" #, fuzzy #~ msgid "incompatible types in assignment of `%T' to `%T'" #~ msgstr "in Igenera Bya Kuri" #, fuzzy #~ msgid "ISO C++ forbids assignment of arrays" #~ msgstr "C Igenera Bya" #, fuzzy #~ msgid " in pointer to member function conversion" #~ msgstr "in Mweretsi Kuri Umumaro Ihindurangero" #, fuzzy #~ msgid " in pointer to member conversion" #~ msgstr "in Mweretsi Kuri Ihindurangero" #, fuzzy #~ msgid "pointer to member cast via virtual base `%T' of `%T'" #~ msgstr "Mweretsi Kuri Biturutse Kitaboneka SHINGIRO Bya" #, fuzzy #~ msgid "pointer to member conversion via virtual base `%T' of `%T'" #~ msgstr "Mweretsi Kuri Ihindurangero Biturutse Kitaboneka SHINGIRO Bya" #, fuzzy #~ msgid "invalid conversion to type `%T' from type `%T'" #~ msgstr "Sibyo Ihindurangero Kuri Ubwoko Bivuye Ubwoko" #, fuzzy #~ msgid "passing NULL used for non-pointer %s %P of `%D'" #~ msgstr "kugirango Mweretsi Bya" #, fuzzy #~ msgid "%s to non-pointer type `%T' from NULL" #~ msgstr "%sKuri Mweretsi Ubwoko Bivuye" #, fuzzy #~ msgid "passing `%T' for %s %P of `%D'" #~ msgstr "kugirango Bya" #, fuzzy #~ msgid "%s to `%T' from `%T'" #~ msgstr "%sKuri Bivuye" #, fuzzy #~ msgid "passing negative value `%E' for %s %P of `%D'" #~ msgstr "Agaciro kugirango Bya" #, fuzzy #~ msgid "%s of negative value `%E' to `%T'" #~ msgstr "%sBya Agaciro Kuri" #, fuzzy #~ msgid "cannot convert `%T' to `%T' for argument `%P' to `%D'" #~ msgstr "GUHINDURA Kuri kugirango Kuri" #, fuzzy #~ msgid "cannot convert `%T' to `%T' in %s" #~ msgstr "GUHINDURA Kuri in" #, fuzzy #~ msgid "in passing argument %P of `%+D'" #~ msgstr "in Bya" #, fuzzy #~ msgid "returning reference to temporary" #~ msgstr "Indango Kuri By'igihe gito" #, fuzzy #~ msgid "reference to non-lvalue returned" #~ msgstr "Indango Kuri" #, fuzzy #~ msgid "reference to local variable `%D' returned" #~ msgstr "Indango Kuri IMPINDURAGACIRO" #, fuzzy #~ msgid "address of local variable `%D' returned" #~ msgstr "Aderesi Bya IMPINDURAGACIRO" #, fuzzy #~ msgid "returning a value from a destructor" #~ msgstr "a Agaciro Bivuye a" #, fuzzy #~ msgid "cannot return from a handler of a function-try-block of a constructor" #~ msgstr "Garuka Bivuye a Bya a Umumaro Funga Bya a" #, fuzzy #~ msgid "returning a value from a constructor" #~ msgstr "a Agaciro Bivuye a" #, fuzzy #~ msgid "return-statement with no value, in function declared with a non-void return type" #~ msgstr "Garuka Inyandiko Na: Oya Agaciro in Umumaro Na: a Garuka Ubwoko" #, fuzzy #~ msgid "return-statement with a value, in function declared with a void return type" #~ msgstr "Garuka Inyandiko Na: a Agaciro in Umumaro Na: a Garuka Ubwoko" #, fuzzy #~ msgid "`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)" #~ msgstr "`Mukoresha OYA Garuka ni Cyangwa Gishya ni in INGARUKA" #, fuzzy #~ msgid "type `%T' is not a base type for type `%T'" #~ msgstr "Ubwoko ni OYA a SHINGIRO Ubwoko kugirango Ubwoko" #, fuzzy #~ msgid "cannot declare variable `%D' to be of type `%T'" #~ msgstr "IMPINDURAGACIRO Kuri Bya Ubwoko" #, fuzzy #~ msgid "cannot declare parameter `%D' to be of type `%T'" #~ msgstr "Kuri Bya Ubwoko" #, fuzzy #~ msgid "cannot declare field `%D' to be of type `%T'" #~ msgstr "Umwanya Kuri Bya Ubwoko" #, fuzzy #~ msgid "invalid return type for member function `%#D'" #~ msgstr "Sibyo Garuka Ubwoko kugirango Umumaro" #, fuzzy #~ msgid "invalid return type for function `%#D'" #~ msgstr "Sibyo Garuka Ubwoko kugirango Umumaro" #, fuzzy #~ msgid "cannot allocate an object of type `%T'" #~ msgstr "Igikoresho Bya Ubwoko" #, fuzzy #~ msgid " because the following virtual functions are abstract:" #~ msgstr "i Kitaboneka Imimaro Incamake" # basctl/source\basicide\basidesh.src:RID_IMGBTN_REMOVEWATCH.text #, fuzzy #~ msgid "\t%#D" #~ msgstr "%#D" #, fuzzy #~ msgid " since type `%T' has abstract virtual functions" #~ msgstr "guhera Ubwoko Incamake Kitaboneka Imimaro" #, fuzzy #~ msgid "constructor syntax used, but no constructor declared for type `%T'" #~ msgstr "Oya kugirango Ubwoko" #, fuzzy #~ msgid "comma expression used to initialize return value" #~ msgstr "Akitso imvugo Kuri gutangiza Garuka Agaciro" #, fuzzy #~ msgid "cannot initialize arrays using this syntax" #~ msgstr "gutangiza ikoresha iyi" #, fuzzy #~ msgid "initializing array with parameter list" #~ msgstr "Gutangiza Imbonerahamwe Na: Urutonde" #, fuzzy #~ msgid "initializer for scalar variable requires one element" #~ msgstr "kugirango IMPINDURAGACIRO Ikigize:" #, fuzzy #~ msgid "braces around scalar initializer for `%T'" #~ msgstr "Ingirwadusodeko kugirango" #, fuzzy #~ msgid "ignoring extra initializers for `%T'" #~ msgstr "Birenga kugirango" #, fuzzy #~ msgid "variable-sized object of type `%T' may not be initialized" #~ msgstr "IMPINDURAGACIRO Igikoresho Bya Ubwoko Gicurasi OYA" #, fuzzy #~ msgid "subobject of type `%T' must be initialized by constructor, not by `%E'" #~ msgstr "Bya Ubwoko ku OYA ku" #, fuzzy #~ msgid "aggregate has a partly bracketed initializer" #~ msgstr "a" #, fuzzy #~ msgid "non-empty initializer for array of empty elements" #~ msgstr "ubusa kugirango Imbonerahamwe Bya ubusa Ibintu" #, fuzzy #~ msgid "initializer list for object of class with virtual base classes" #~ msgstr "Urutonde kugirango Igikoresho Bya ishuri Na: Kitaboneka SHINGIRO Inzego" #, fuzzy #~ msgid "initializer list for object of class with base classes" #~ msgstr "Urutonde kugirango Igikoresho Bya ishuri Na: SHINGIRO Inzego" #, fuzzy #~ msgid "initializer list for object using virtual functions" #~ msgstr "Urutonde kugirango Igikoresho ikoresha Kitaboneka Imimaro" #, fuzzy #~ msgid "missing initializer for member `%D'" #~ msgstr "Ibuze kugirango" #, fuzzy #~ msgid "uninitialized const member `%D'" #~ msgstr "Itatangijwe" #, fuzzy #~ msgid "member `%D' with uninitialized const fields" #~ msgstr "Na: Itatangijwe Imyanya" #, fuzzy #~ msgid "member `%D' is uninitialized reference" #~ msgstr "ni Itatangijwe Indango" #, fuzzy #~ msgid "index value instead of field name in union initializer" #~ msgstr "Umubarendanga Agaciro Bya Umwanya Izina: in Ihuza" #, fuzzy #~ msgid "no field `%D' in union being initialized" #~ msgstr "Oya Umwanya in Ihuza" #, fuzzy #~ msgid "union `%T' with no named members cannot be initialized" #~ msgstr "Ihuza Na: Oya" #, fuzzy #~ msgid "excess elements in aggregate initializer" #~ msgstr "Ibintu in" #, fuzzy #~ msgid "circular pointer delegation detected" #~ msgstr "Cy'uruziga Mweretsi" #, fuzzy #~ msgid "base operand of `->' has non-pointer type `%T'" #~ msgstr "SHINGIRO Bya Mweretsi Ubwoko" #, fuzzy #~ msgid "result of `operator->()' yields non-pointer result" #~ msgstr "Igisubizo Bya Mukoresha Mweretsi Igisubizo" #, fuzzy #~ msgid "base operand of `->' is not a pointer" #~ msgstr "SHINGIRO Bya ni OYA a Mweretsi" #, fuzzy #~ msgid "`%E' cannot be used as a member pointer, since it is of type `%T'" #~ msgstr "`%E'Nka a Mweretsi guhera ni Bya Ubwoko" #, fuzzy #~ msgid "cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'" #~ msgstr "Gukurikiza Mweretsi Kuri ni Bya Ubwoko" #, fuzzy #~ msgid "member type `%T::' incompatible with object type `%T'" #~ msgstr "Ubwoko Na: Igikoresho Ubwoko" #, fuzzy #~ msgid "`%T' fails to be a typedef or built-in type" #~ msgstr "`%T'Kuri a Cyangwa in Ubwoko" #, fuzzy #~ msgid "ISO C++ forbids defining types within %s" #~ msgstr "C muri" #, fuzzy #~ msgid "call to function `%D' which throws incomplete type `%#T'" #~ msgstr "Kuri Umumaro Ubwoko" #, fuzzy #~ msgid "call to function which throws incomplete type `%#T'" #~ msgstr "Kuri Umumaro Ubwoko" #, fuzzy #~ msgid "%s is deprecated, please see the documentation for details" #~ msgstr "%sni Bitemewe. i kugirango Birambuye" #, fuzzy #~ msgid "Do not obey access control semantics" #~ msgstr "OYA Igenzura" #, fuzzy #~ msgid "Change when template instances are emitted" #~ msgstr "Ryari: Inyandikorugero Ingero" #, fuzzy #~ msgid "Check the return value of new" #~ msgstr "i Garuka Agaciro Bya Gishya" #, fuzzy #~ msgid "Reduce size of object files" #~ msgstr "Ingano Bya Igikoresho Idosiye" #, fuzzy #~ msgid "Make string literals `char[]' instead of `const char[]'" #~ msgstr "Ikurikiranyanyuguti INYUGUTI Bya INYUGUTI" #, fuzzy #~ msgid "Dump the entire translation unit to a file" #~ msgstr "i Umwandiko wahinduwe ururimi Igice: Kuri a IDOSIYE" #, fuzzy #~ msgid "Do not inline member functions by default" #~ msgstr "OYA Mumurongo Imimaro ku Mburabuzi" #, fuzzy #~ msgid "Do not generate run time type descriptor information" #~ msgstr "OYA Gukoresha Igihe Ubwoko Ibisobanuro" #, fuzzy #~ msgid "Do not generate code to check exception specifications" #~ msgstr "OYA ITEGEKONGENGA Kuri Kugenzura... Irengayobora(-)" #, fuzzy #~ msgid "Scope of for-init-statement vars extends outside" #~ msgstr "Bya kugirango Inyandiko Hanze" #, fuzzy #~ msgid "Do not recognize GNU defined keywords" #~ msgstr "OYA Amagambo fatizo" #, fuzzy #~ msgid "Enable support for huge objects" #~ msgstr "Gushigikira kugirango Ibintu" #, fuzzy #~ msgid "Export functions even if they can be inlined" #~ msgstr "Imimaro ATARIIGIHARWE NIBA" #, fuzzy #~ msgid "Only emit explicit template instantiations" #~ msgstr "Inyandikorugero" #, fuzzy #~ msgid "Only emit explicit instantiations of inline templates" #~ msgstr "Bya Mumurongo Inyandikorugero" #, fuzzy #~ msgid "Don't pedwarn about uses of Microsoft extensions" #~ msgstr "Ibyerekeye Bya Umigereka" #, fuzzy #~ msgid "Recognize and/bitand/bitor/compl/not/or/xor" #~ msgstr "Na OYA Cyangwa" #, fuzzy #~ msgid "Disable optional diagnostics" #~ msgstr "Bitari ngombwa" #, fuzzy #~ msgid "Downgrade conformance errors to warnings" #~ msgstr "Amakosa Kuri Iburira" #, fuzzy #~ msgid "Enable automatic template instantiation" #~ msgstr "Byikoresha Inyandikorugero" #, fuzzy #~ msgid "Display statistics accumulated during compilation" #~ msgstr "Sitatisitiki" #, fuzzy #~ msgid "Specify maximum template instantiation depth" #~ msgstr "Kinini Inyandikorugero Ubujyakuzimu" #, fuzzy #~ msgid "Use __cxa_atexit to register destructors" #~ msgstr "Kuri Kwiyandikisha" #, fuzzy #~ msgid "Discard unused virtual functions" #~ msgstr "Kidakoreshwa Kitaboneka Imimaro" #, fuzzy #~ msgid "Implement vtables using thunks" #~ msgstr "ikoresha" #, fuzzy #~ msgid "Emit common-like symbols as weak symbols" #~ msgstr "nka Ibimenyetso Nka Ibimenyetso" #, fuzzy #~ msgid "Emit cross referencing information" #~ msgstr "Kwambukiranya Ibisobanuro" #, fuzzy #~ msgid "Warn about inconsistent return types" #~ msgstr "Ibyerekeye Garuka" #, fuzzy #~ msgid "Warn about overloaded virtual function names" #~ msgstr "Ibyerekeye Kitaboneka Umumaro Amazina" #, fuzzy #~ msgid "Don't warn when all ctors/dtors are private" #~ msgstr "Ryari: Byose By'umwihariko" #, fuzzy #~ msgid "Warn about non virtual destructors" #~ msgstr "Ibyerekeye Kitaboneka" #, fuzzy #~ msgid "Warn when a function is declared extern, then inline" #~ msgstr "Ryari: a Umumaro ni Hanyuma Mumurongo" #, fuzzy #~ msgid "Warn when the compiler reorders code" #~ msgstr "Ryari: i ITEGEKONGENGA" #, fuzzy #~ msgid "Warn when synthesis behavior differs from Cfront" #~ msgstr "Ryari: imyitwarire Bivuye" #, fuzzy #~ msgid "Don't warn when type converting pointers to member functions" #~ msgstr "Ryari: Ubwoko Guhindura.... Kuri Imimaro" #, fuzzy #~ msgid "Warn about violations of Effective C++ style rules" #~ msgstr "Ibyerekeye Bya C IMISUSIRE" #, fuzzy #~ msgid "Warn when overload promotes from unsigned to signed" #~ msgstr "Ryari: Bivuye Bitashizweho umukono Kuri" #, fuzzy #~ msgid "Warn if a C style cast is used in a program" #~ msgstr "NIBA a C IMISUSIRE ni in a Porogaramu" #, fuzzy #~ msgid "Don't warn when non-templatized friend functions are declared within a template" #~ msgstr "Ryari: Imimaro muri a Inyandikorugero" #, fuzzy #~ msgid "Don't announce deprecation of compiler features" #~ msgstr "Bya Ibiranga" # scp/source\cde\unxbasic_cde.lng:STR_BASIC_CDEINT_NETWORK_STRING2.text #, fuzzy #~ msgid "note:" #~ msgstr "Ibisobanuro:" #, fuzzy #~ msgid "warning:" #~ msgstr "Iburira!" #, fuzzy #~ msgid "ASSIGN'ed label cannot fit into `%A' at %0 -- using wider sibling" #~ msgstr "Akarango ku ikoresha" #, fuzzy #~ msgid "no INTEGER type can hold a pointer on this configuration" #~ msgstr "Oya Ubwoko a Mweretsi ku iyi Iboneza" #, fuzzy #~ msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide," #~ msgstr "Iboneza Na" #, fuzzy #~ msgid "and pointers are %d bits wide, but g77 doesn't yet work" #~ msgstr "Na Akazi" #, fuzzy #~ msgid "properly unless they all are 32 bits wide" #~ msgstr "Byose" #, fuzzy #~ msgid "Please keep this in mind before you report bugs." #~ msgstr "Gumana: iyi in Mbere Icyegeranyo" #, fuzzy #~ msgid "configuration: char * holds %d bits, but ftnlen only %d" #~ msgstr "Iboneza INYUGUTI" #, fuzzy #~ msgid "" #~ "configuration: char * holds %d bits, but INTEGER only %d --\n" #~ " ASSIGN statement might fail" #~ msgstr "Iboneza INYUGUTI Inyandiko" #, fuzzy #~ msgid "In statement function" #~ msgstr "Inyandiko Umumaro" #, fuzzy #~ msgid "Outside of any program unit:\n" #~ msgstr "Bya Porogaramu Igice:" #, fuzzy #~ msgid "%A from %B at %0%C" #~ msgstr "%ABivuye ku" #, fuzzy #~ msgid "directory name must immediately follow -I" #~ msgstr "bushyinguro Izina: Ako kanya" #, fuzzy #~ msgid "At %0, INCLUDE file %A exists, but is not readable" #~ msgstr "IDOSIYE ni OYA" #, fuzzy #~ msgid "At %0, INCLUDE nesting too deep" #~ msgstr "Njyakuzimu" #, fuzzy #~ msgid "Two arithmetic operators in a row at %0 and %1 -- use parentheses" #~ msgstr "Mukoresha in a Urubariro ku Na Gukoresha %1" #, fuzzy #~ msgid "Operator at %0 has lower precedence than that at %1 -- use parentheses" #~ msgstr "ku Ntoya ku Gukoresha %1" #, fuzzy #~ msgid "Use .EQV./.NEQV. instead of .EQ./.NE. at %0 for LOGICAL operands at %1 and %2" #~ msgstr "" #~ "Project- Id- Version: basctl\n" #~ "POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n" #~ "PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n" #~ "Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n" #~ "Content- Type: text/ plain; charset= UTF- 8\n" #~ "Content- Transfer- Encoding: 8bit\n" #~ "X- Generator: KBabel 1. 0\n" #~ ". Project- Id- Version: basctl\n" #~ "POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n" #~ "PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n" #~ "Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n" #~ "Content- Type: text/ plain; charset= UTF- 8\n" #~ "Content- Transfer- Encoding: 8bit\n" #~ "X- Generator: KBabel 1. 0\n" #~ "." #, fuzzy #~ msgid "Unsupported operand for ** at %1 -- converting to default INTEGER" #~ msgstr "kugirango ku Guhindura.... Kuri Mburabuzi" #, fuzzy #~ msgid "overflowed output arg list for `%s'" #~ msgstr "Ibisohoka Urutonde kugirango" #, fuzzy #~ msgid "--driver no longer supported" #~ msgstr "--Musomyi: Oya" #, fuzzy #~ msgid "argument to `%s' missing" #~ msgstr "Kuri Ibuze" #, fuzzy #~ msgid "no input files; unwilling to write output files" #~ msgstr "Oya Iyinjiza Idosiye Kuri Kwandika Ibisohoka Idosiye" #, fuzzy #~ msgid "Implicit declaration of `%A' at %0" #~ msgstr "Bya ku" #, fuzzy #~ msgid "Non-ISO-C-standard escape sequence `\\%A' at %0" #~ msgstr "C Bisanzwe ku" #, fuzzy #~ msgid "Unknown escape sequence `\\%A' at %0" #~ msgstr "ku" #, fuzzy #~ msgid "Unterminated escape sequence `\\' at %0" #~ msgstr "ku" #, fuzzy #~ msgid "Unknown escape sequence `\\' followed by char code 0x%A at %0" #~ msgstr "ku INYUGUTI ITEGEKONGENGA ku" #, fuzzy #~ msgid "\\x used at %0 with no following hex digits" #~ msgstr "\\xku Na: Oya" #, fuzzy #~ msgid "Hex escape at %0 out of range" #~ msgstr "ku Inyuma Bya Urutonde" #, fuzzy #~ msgid "Escape sequence at %0 out of range for character" #~ msgstr "ku Inyuma Bya Urutonde kugirango Inyuguti" #, fuzzy #~ msgid "hex escape out of range" #~ msgstr "Inyuma Bya Urutonde" #, fuzzy #~ msgid "non-ANSI-standard escape sequence, `\\%c'" #~ msgstr "Bisanzwe" #, fuzzy #~ msgid "unknown escape sequence `\\%c'" #~ msgstr "Kitazwi" #, fuzzy #~ msgid "unknown escape sequence: `\\' followed by char code 0x%x" #~ msgstr "Kitazwi ku INYUGUTI ITEGEKONGENGA" #, fuzzy #~ msgid "badly formed directive -- no closing quote" #~ msgstr "Oya Gushyiraho akugarizo" #, fuzzy #~ msgid "#-lines for entering and leaving files don't match" #~ msgstr "#-Imirongo kugirango Na Idosiye BIHUYE" #, fuzzy #~ msgid "bad directive -- missing close-quote" #~ msgstr "Ibuze Gufunga Gushyiraho akugarizo" #, fuzzy #~ msgid "invalid #ident" #~ msgstr "Sibyo" #, fuzzy #~ msgid "undefined or invalid # directive" #~ msgstr "kidasobanuye Cyangwa Sibyo" #, fuzzy #~ msgid "invalid #line" #~ msgstr "Sibyo Umurongo" #, fuzzy #~ msgid "use `#line ...' instead of `# ...' in first line" #~ msgstr "Gukoresha Umurongo Bya in Itangira Umurongo" #, fuzzy #~ msgid "invalid #-line" #~ msgstr "Sibyo Umurongo" #, fuzzy #~ msgid "Null character at %0 -- line ignored" #~ msgstr "Inyuguti ku Umurongo" #, fuzzy #~ msgid "INCLUDE at %0 not the only statement on the source line" #~ msgstr "ku OYA i Inyandiko ku i Inkomoko Umurongo" #, fuzzy #~ msgid "ASSIGNed FORMAT specifier is too small" #~ msgstr "ni Gitoya" #, fuzzy #~ msgid "SELECT CASE on CHARACTER type (at %0) not supported -- sorry" #~ msgstr "ku Ubwoko ku OYA" #, fuzzy #~ msgid "SELECT (at %0) has duplicate cases -- check integer overflow of CASE(s)" #~ msgstr "ku Gusubiramo Kugenzura... Umubare wuzuye Byarenze urugero Bya S" #, fuzzy #~ msgid "ASSIGN to variable that is too small" #~ msgstr "Kuri IMPINDURAGACIRO ni Gitoya" #, fuzzy #~ msgid "ASSIGNed GOTO target variable is too small" #~ msgstr "Intego IMPINDURAGACIRO ni Gitoya" #, fuzzy #~ msgid "Local adjustable symbol `%A' at %0" #~ msgstr "IKIMENYETSO ku" #, fuzzy #~ msgid "data initializer on host with different endianness" #~ msgstr "Ibyatanzwe ku Ubuturo Na:" #, fuzzy #~ msgid "%s no longer supported -- try -fvxt" #~ msgstr "%sOya" #, fuzzy #~ msgid "%s no longer supported -- try -fno-vxt -ff90" #~ msgstr "%sOya" #, fuzzy #~ msgid "%s disabled, use normal debugging flags" #~ msgstr "%sYahagaritswe Gukoresha Bisanzwe Amabendera" #, fuzzy #~ msgid "Print g77-specific compiler version info, run internal tests" #~ msgstr "Verisiyo Ibisobanuro Gukoresha By'imbere" #, fuzzy #~ msgid "Program is written in typical FORTRAN 66 dialect" #~ msgstr "ni in" #, fuzzy #~ msgid "Program is written in typical Unix f77 dialect" #~ msgstr "ni in" #, fuzzy #~ msgid "Program does not use Unix-f77 dialectal features" #~ msgstr "OYA Gukoresha Ibiranga" #, fuzzy #~ msgid "Program is written in Fortran-90-ish dialect" #~ msgstr "ni in" #, fuzzy #~ msgid "Treat local vars and COMMON blocks as if they were named in SAVE statements" #~ msgstr "Na Nka NIBA in" #, fuzzy #~ msgid "Allow $ in symbol names" #~ msgstr "in IKIMENYETSO Amazina" #, fuzzy #~ msgid "f2c-compatible code need not be generated" #~ msgstr "ITEGEKONGENGA OYA" #, fuzzy #~ msgid "Unsupported; do not generate libf2c-calling code" #~ msgstr "OYA ITEGEKONGENGA" #, fuzzy #~ msgid "Unsupported; affects code-generation of arrays" #~ msgstr "ITEGEKONGENGA Bya" #, fuzzy #~ msgid "Program is written in Fortran-90-ish free form" #~ msgstr "ni in Kigenga Ifishi" #, fuzzy #~ msgid "Warn about use of (only a few for now) Fortran extensions" #~ msgstr "Ibyerekeye Gukoresha Bya a kugirango NONEAHA Umigereka" #, fuzzy #~ msgid "Program is written in VXT (Digital-like) FORTRAN" #~ msgstr "ni in nka" #, fuzzy #~ msgid "Disallow all ugly features" #~ msgstr "Byose Ibiranga" #, fuzzy #~ msgid "Hollerith and typeless constants not passed as arguments" #~ msgstr "Na OYA Nka ingingo" #, fuzzy #~ msgid "Allow ordinary copying of ASSIGN'ed vars" #~ msgstr "Bya" #, fuzzy #~ msgid "Dummy array dimensioned to (1) is assumed-size" #~ msgstr "Imbonerahamwe Kuri 1. ni Ingano" #, fuzzy #~ msgid "Trailing comma in procedure call denotes null argument" #~ msgstr "Akitso in NTAGIHARI" #, fuzzy #~ msgid "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z" #~ msgstr "Na" #, fuzzy #~ msgid "Initialization via DATA and PARAMETER is type-compatible" #~ msgstr "Biturutse Na ni Ubwoko" #, fuzzy #~ msgid "Allow INTEGER and LOGICAL interchangeability" #~ msgstr "Na" #, fuzzy #~ msgid "Print internal debugging-related info" #~ msgstr "By'imbere Ibisobanuro" #, fuzzy #~ msgid "Initialize local vars and arrays to zero" #~ msgstr "Na Kuri Zeru" #, fuzzy #~ msgid "Backslashes in character/hollerith constants not special (C-style)" #~ msgstr "in Inyuguti OYA Bidasanzwe C IMISUSIRE" #, fuzzy #~ msgid "Have front end emulate COMPLEX arithmetic to avoid bugs" #~ msgstr "Imbere Impera Kuri" #, fuzzy #~ msgid "Disable the appending of underscores to externals" #~ msgstr "i Bya Kuri" #, fuzzy #~ msgid "Never append a second underscore to externals" #~ msgstr "Kongeraho... a ISEGONDA Kuri" #, fuzzy #~ msgid "Intrinsics spelled as e.g. SqRt" #~ msgstr "g." #, fuzzy #~ msgid "Intrinsics in uppercase" #~ msgstr "in Inyuguti nkuru" #, fuzzy #~ msgid "Intrinsics letters in arbitrary cases" #~ msgstr "in" #, fuzzy #~ msgid "Language keywords spelled as e.g. IOStat" #~ msgstr "g." #, fuzzy #~ msgid "Language keywords in uppercase" #~ msgstr "Amagambo fatizo in Inyuguti nkuru" #, fuzzy #~ msgid "Language keyword letters in arbitrary cases" #~ msgstr "Ijambo- banze in" #, fuzzy #~ msgid "Internally convert most source to uppercase" #~ msgstr "GUHINDURA Inkomoko Kuri Inyuguti nkuru" #, fuzzy #~ msgid "Internally preserve source case" #~ msgstr "Inkomoko" #, fuzzy #~ msgid "Symbol names spelled in mixed case" #~ msgstr "Amazina in Bivanze" #, fuzzy #~ msgid "Symbol names in uppercase" #~ msgstr "Amazina in Inyuguti nkuru" #, fuzzy #~ msgid "Symbol names in lowercase" #~ msgstr "Amazina in Inyuguti nto" #, fuzzy #~ msgid "Program written in uppercase" #~ msgstr "in Inyuguti nkuru" #, fuzzy #~ msgid "Program written in lowercase" #~ msgstr "in Inyuguti nto" #, fuzzy #~ msgid "Program written in strict mixed-case" #~ msgstr "in Bivanze" #, fuzzy #~ msgid "Compile as if program written in uppercase" #~ msgstr "Nka NIBA Porogaramu in Inyuguti nkuru" #, fuzzy #~ msgid "Compile as if program written in lowercase" #~ msgstr "Nka NIBA Porogaramu in Inyuguti nto" #, fuzzy #~ msgid "Preserve all spelling (case) used in program" #~ msgstr "Byose Ivuganyuguti in Porogaramu" #, fuzzy #~ msgid "Delete libU77 intrinsics with bad interfaces" #~ msgstr "Na:" #, fuzzy #~ msgid "Disable libU77 intrinsics with bad interfaces" #~ msgstr "Na:" #, fuzzy #~ msgid "Hide libU77 intrinsics with bad interfaces" #~ msgstr "Na:" #, fuzzy #~ msgid "Treat initial values of 0 like non-zero values" #~ msgstr "Uduciro Bya 0 nka Zeru Uduciro" #, fuzzy #~ msgid "Emit special debugging information for COMMON and EQUIVALENCE (disabled)" #~ msgstr "Bidasanzwe Ibisobanuro kugirango Na Yahagaritswe" #, fuzzy #~ msgid "Take at least one trip through each iterative DO loop" #~ msgstr "ku Gihinguranya" #, fuzzy #~ msgid "Print names of program units as they are compiled" #~ msgstr "Amazina Bya Porogaramu Nka" #, fuzzy #~ msgid "Disable fatal diagnostics about inter-procedural problems" #~ msgstr "Ibyerekeye" #, fuzzy #~ msgid "Make prefix-radix non-decimal constants be typeless" #~ msgstr "Imbanziriza radix NYACUMI" #, fuzzy #~ msgid "Generate code to check subscript and substring bounds" #~ msgstr "ITEGEKONGENGA Kuri Kugenzura... Inyandiko nyesi Na" #, fuzzy #~ msgid "Fortran-specific form of -fbounds-check" #~ msgstr "Ifishi Bya Kugenzura..." #, fuzzy #~ msgid "Disable warnings about inter-procedural problems" #~ msgstr "Iburira Ibyerekeye" #, fuzzy #~ msgid "Warn about constructs with surprising meanings" #~ msgstr "Ibyerekeye Na:" #, fuzzy #~ msgid "Add a directory for INCLUDE searching" #~ msgstr "a bushyinguro kugirango Ishakisha" #, fuzzy #~ msgid "Set the maximum line length" #~ msgstr "i Kinini Umurongo Uburebure" #, fuzzy #~ msgid "Missing first operand for binary operator at %0" #~ msgstr "Itangira kugirango Nyabibiri Mukoresha ku" #, fuzzy #~ msgid "Zero-length character constant at %0" #~ msgstr "Uburebure Inyuguti ku" #, fuzzy #~ msgid "Invalid token at %0 in expression or subexpression at %1" #~ msgstr "ku in imvugo Cyangwa ku" #, fuzzy #~ msgid "Missing operand for operator at %1 at end of expression at %0" #~ msgstr "kugirango Mukoresha ku ku Impera Bya imvugo ku" #, fuzzy #~ msgid "Label %A already defined at %1 when redefined at %0" #~ msgstr "ku Ryari: ku" #, fuzzy #~ msgid "Unrecognized character at %0 [info -f g77 M LEX]" #~ msgstr "Inyuguti ku Ibisobanuro F" #, fuzzy #~ msgid "Label definition %A at %0 on empty statement (as of %1)" #~ msgstr "Insobanuro ku ku ubusa Inyandiko Nka Bya" #, fuzzy #~ msgid "Invalid first character at %0 [info -f g77 M LEX]" #~ msgstr "Itangira Inyuguti ku Ibisobanuro F" #, fuzzy #~ msgid "Line too long as of %0 [info -f g77 M LEX]" #~ msgstr "Nka Bya Ibisobanuro F" #, fuzzy #~ msgid "Non-numeric character at %0 in label field [info -f g77 M LEX]" #~ msgstr "Bikurikije umubare Inyuguti ku in Akarango Umwanya Ibisobanuro F" #, fuzzy #~ msgid "Label number at %0 not in range 1-99999" #~ msgstr "Umubare ku OYA in Urutonde 1." #, fuzzy #~ msgid "At %0, '!' and '/*' are not valid comment delimiters" #~ msgstr "Na OYA Byemewe Icyo wongeraho" #, fuzzy #~ msgid "Continuation indicator at %0 must appear in column 6 [info -f g77 M LEX]" #~ msgstr "ku Kugaragara in Inkingi 6 Ibisobanuro F" #, fuzzy #~ msgid "Label at %0 invalid with continuation line indicator at %1 [info -f g77 M LEX]" #~ msgstr "ku Sibyo Na: Umurongo ku Ibisobanuro F" #, fuzzy #~ msgid "Character constant at %0 has no closing apostrophe at %1" #~ msgstr "ku Oya ku" #, fuzzy #~ msgid "Hollerith constant at %0 specified %A more characters than are present as of %1" #~ msgstr "ku Birenzeho Inyuguti Nka Bya" #, fuzzy #~ msgid "Missing close parenthese at %0 needed to match open parenthese at %1" #~ msgstr "Gufunga ku Kuri BIHUYE Gufungura ku" #, fuzzy #~ msgid "Integer at %0 too large" #~ msgstr "ku Binini" #, fuzzy #~ msgid "Period at %0 not followed by digits for floating-point number or by `NOT.', `TRUE.', or `FALSE.'" #~ msgstr "Igihe ku OYA ku kugirango Bihindagurika Akadomo Umubare Cyangwa ku Cyangwa" #, fuzzy #~ msgid "Missing close-period between `.%A' at %0 and %1" #~ msgstr "Gufunga Igihe hagati ku Na" #, fuzzy #~ msgid "Invalid exponent at %0 for real constant at %1; nondigit `%A' in exponent field" #~ msgstr "ku kugirango ku in Umwanya" #, fuzzy #~ msgid "Missing value at %1 for real-number exponent at %0" #~ msgstr "Agaciro ku kugirango Umubare ku" #, fuzzy #~ msgid "Expected binary operator between expressions at %0 and at %1" #~ msgstr "Itegerejwe Nyabibiri Mukoresha hagati ku Na ku" #, fuzzy #~ msgid "Semicolon at %0 is an invalid token" #~ msgstr "ku ni Sibyo" #, fuzzy #~ msgid "Extraneous comma in FORMAT statement at %0" #~ msgstr "Akitso in Inyandiko ku" #, fuzzy #~ msgid "Missing comma in FORMAT statement at %0" #~ msgstr "Akitso in Inyandiko ku" #, fuzzy #~ msgid "Spurious sign in FORMAT statement at %0" #~ msgstr "IKIMENYETSO in Inyandiko ku" #, fuzzy #~ msgid "Spurious number in FORMAT statement at %0" #~ msgstr "Umubare in Inyandiko ku" #, fuzzy #~ msgid "Spurious text trailing number in FORMAT statement at %0" #~ msgstr "Umwandiko Umubare in Inyandiko ku" #, fuzzy #~ msgid "Unrecognized FORMAT specifier at %0" #~ msgstr "ku" #, fuzzy #~ msgid "Missing close-parenthese(s) in FORMAT statement at %0" #~ msgstr "Gufunga S in Inyandiko ku" #, fuzzy #~ msgid "Missing number following period in FORMAT statement at %0" #~ msgstr "Umubare Igihe in Inyandiko ku" #, fuzzy #~ msgid "Missing number following `E' in FORMAT statement at %0" #~ msgstr "Umubare in Inyandiko ku" #, fuzzy #~ msgid "Spurious trailing comma preceding terminator at %0" #~ msgstr "Akitso ku" #, fuzzy #~ msgid "At %0, specify OPERATOR instead of ASSIGNMENT for INTERFACE statement not specifying the assignment operator (=)" #~ msgstr "Bya kugirango Inyandiko OYA i Igenera Mukoresha" #, fuzzy #~ msgid "At %0, specify ASSIGNMENT instead of OPERATOR for INTERFACE statement specifying the assignment operator (=)" #~ msgstr "Bya kugirango Inyandiko i Igenera Mukoresha" #, fuzzy #~ msgid "Cannot specify =initialization-expr at %0 unless `::' appears before list of objects" #~ msgstr "ku Mbere Urutonde Bya Ibintu" #, fuzzy #~ msgid "Reference to label at %1 inconsistent with its definition at %0" #~ msgstr "Kuri Akarango ku Na: Insobanuro ku" #, fuzzy #~ msgid "Reference to label at %1 inconsistent with earlier reference at %0" #~ msgstr "Kuri Akarango ku Na: Indango ku" #, fuzzy #~ msgid "DO-statement reference to label at %1 follows its definition at %0" #~ msgstr "Inyandiko Indango Kuri Akarango ku Insobanuro ku" #, fuzzy #~ msgid "Reference to label at %1 is outside block containing definition at %0" #~ msgstr "Kuri Akarango ku ni Hanze Funga Insobanuro ku" #, fuzzy #~ msgid "DO-statement references to label at %0 and %2 separated by unterminated block starting at %1" #~ msgstr "Inyandiko Indango Kuri Akarango ku Na ku Funga ku" #, fuzzy #~ msgid "DO-statement reference to label at %0 and label definition at %2 separated by unterminated block starting at %1" #~ msgstr "Inyandiko Indango Kuri Akarango ku Na Akarango Insobanuro ku ku Funga ku" #, fuzzy #~ msgid "Label definition at %0 invalid on this kind of statement" #~ msgstr "Insobanuro ku Sibyo ku iyi Bya Inyandiko" #, fuzzy #~ msgid "Statement at %0 invalid in this context" #~ msgstr "ku Sibyo in iyi Imvugiro" #, fuzzy #~ msgid "Statement at %0 invalid in context established by statement at %1" #~ msgstr "ku Sibyo in Imvugiro ku Inyandiko ku" #, fuzzy #~ msgid "Statement at %0 must specify construct name specified at %1" #~ msgstr "ku Izina: ku" #, fuzzy #~ msgid "Construct name at %0 superfluous, no construct name specified at %1" #~ msgstr "Izina: ku Oya Izina: ku" #, fuzzy #~ msgid "Construct name at %0 not the same as construct name at %1" #~ msgstr "Izina: ku OYA i Nka Izina: ku" #, fuzzy #~ msgid "Construct name at %0 does not match construct name for any containing DO constructs" #~ msgstr "Izina: ku OYA BIHUYE Izina: kugirango" #, fuzzy #~ msgid "Label definition missing at %0 for DO construct specifying label at %1" #~ msgstr "Insobanuro Ibuze ku kugirango Akarango ku" #, fuzzy #~ msgid "Statement at %0 follows ELSE block for IF construct at %1" #~ msgstr "ku Funga kugirango ku" #, fuzzy #~ msgid "No label definition for FORMAT statement at %0" #~ msgstr "Akarango Insobanuro kugirango Inyandiko ku" #, fuzzy #~ msgid "Second occurrence of ELSE WHERE at %0 within WHERE at %1" #~ msgstr "ukugaragara Bya ku muri ku" #, fuzzy #~ msgid "END statement at %0 missing `%A' keyword required for internal or module procedure(s) bounded by %1" #~ msgstr "Inyandiko ku Ibuze Ijambo- banze Bya ngombwa kugirango By'imbere Cyangwa Modire S ku" #, fuzzy #~ msgid "MODULE PROCEDURE statement at %0 disallowed because INTERFACE at %1 specifies no generic name, operator, or assignment" #~ msgstr "Inyandiko ku ku Oya Gifitanye isano Izina: Mukoresha Cyangwa Igenera" #, fuzzy #~ msgid "BLOCK DATA name at %0 superfluous, no name specified at %1" #~ msgstr "Izina: ku Oya Izina: ku" #, fuzzy #~ msgid "Program name at %0 superfluous, no PROGRAM statement specified at %1" #~ msgstr "Izina: ku Oya Inyandiko ku" #, fuzzy #~ msgid "Program unit name at %0 not the same as name at %1" #~ msgstr "Igice: Izina: ku OYA i Nka Izina: ku" #, fuzzy #~ msgid "Type name at %0 not the same as name at %1" #~ msgstr "Izina: ku OYA i Nka Izina: ku" #, fuzzy #~ msgid "End of source file before end of block started at %0" #~ msgstr "Impera Bya Inkomoko IDOSIYE Mbere Impera Bya Funga ku" #, fuzzy #~ msgid "Undefined label, first referenced at %0" #~ msgstr "Akarango Itangira ku" #, fuzzy #~ msgid "SAVE statement or attribute at %1 cannot be specified along with SAVE statement or attribute at %0" #~ msgstr "Inyandiko Cyangwa Ikiranga ku Na: Inyandiko Cyangwa Ikiranga ku" #, fuzzy #~ msgid "PUBLIC or PRIVATE statement at %1 cannot be specified along with PUBLIC or PRIVATE statement at %0" #~ msgstr "Cyangwa Inyandiko ku Na: Cyangwa Inyandiko ku" #, fuzzy #~ msgid "RETURN statement at %0 invalid within a main program unit" #~ msgstr "Inyandiko ku Sibyo muri a Porogaramu Igice:" #, fuzzy #~ msgid "Alternate return specifier at %0 invalid within a main program unit" #~ msgstr "Garuka ku Sibyo muri a Porogaramu Igice:" #, fuzzy #~ msgid "Alternate return specifier at %0 invalid within a function" #~ msgstr "Garuka ku Sibyo muri a Umumaro" #, fuzzy #~ msgid "Access specifier or PRIVATE statement at %0 invalid for derived-type definition within other than the specification part of a module" #~ msgstr "Cyangwa Inyandiko ku Sibyo kugirango Ubwoko Insobanuro muri Ikindi i Bya a Modire" #, fuzzy #~ msgid "Access specifier at %0 must immediately follow derived-type statement at %1 with no intervening statements" #~ msgstr "ku Ako kanya Ubwoko Inyandiko ku Na: Oya" #, fuzzy #~ msgid "No components specified as of %0 for derived-type definition beginning at %1" #~ msgstr "Nka Bya kugirango Ubwoko Insobanuro Itangiriro ku" #, fuzzy #~ msgid "No components specified as of %0 for structure definition beginning at %1" #~ msgstr "Nka Bya kugirango Imiterere Insobanuro Itangiriro ku" #, fuzzy #~ msgid "Missing structure name for outer structure definition at %0" #~ msgstr "Imiterere Izina: kugirango hanze Imiterere Insobanuro ku" #, fuzzy #~ msgid "Field names at %0 for outer structure definition -- specify them in a subsequent RECORD statement instead" #~ msgstr "Amazina ku kugirango hanze Imiterere Insobanuro in a Inyandiko" #, fuzzy #~ msgid "Missing field name(s) for structure definition at %0 within structure definition at %1" #~ msgstr "Umwanya Izina: S kugirango Imiterere Insobanuro ku muri Imiterere Insobanuro ku" #, fuzzy #~ msgid "No components specified as of %0 for map beginning at %1" #~ msgstr "Nka Bya kugirango Itangiriro ku" #, fuzzy #~ msgid "Zero or one maps specified as of %0 for union beginning at %1 -- at least two are required" #~ msgstr "Cyangwa Amakarita Nka Bya kugirango Ihuza Itangiriro ku ku Bya ngombwa" #, fuzzy #~ msgid "Missing %A specifier in statement at %0" #~ msgstr "in Inyandiko ku" #, fuzzy #~ msgid "Items in I/O list starting at %0 invalid for namelist-directed I/O" #~ msgstr "in Urutonde ku Sibyo kugirango" #, fuzzy #~ msgid "Conflicting I/O control specifications at %0 and %1" #~ msgstr "Igenzura ku Na" #, fuzzy #~ msgid "No UNIT= specifier in I/O control list at %0" #~ msgstr "URUGERO in Igenzura Urutonde ku" #, fuzzy #~ msgid "Specification at %0 requires ADVANCE=`NO' specification in same I/O control list" #~ msgstr "ku in Igenzura Urutonde" #, fuzzy #~ msgid "Specification at %0 requires explicit FMT= specification in same I/O control list" #~ msgstr "ku in Igenzura Urutonde" #, fuzzy #~ msgid "Second occurrence of CASE DEFAULT at %0 within SELECT CASE at %1" #~ msgstr "ukugaragara Bya ku muri ku" #, fuzzy #~ msgid "Duplicate or overlapping case values/ranges at %0 and %1" #~ msgstr "Cyangwa iyorosa Uduciro Ibice ku Na" #, fuzzy #~ msgid "Type and/or kind-type parameter disagreement between CASE value or value within range at %0 and SELECT CASE at %1" #~ msgstr "Na Cyangwa Ubwoko hagati Agaciro Cyangwa Agaciro muri Urutonde ku Na ku" #, fuzzy #~ msgid "Range specification at %0 invalid for CASE statement within logical-type SELECT CASE statement" #~ msgstr "ku Sibyo kugirango Inyandiko muri Bijyanye n'inyurabwenge Ubwoko Inyandiko" #, fuzzy #~ msgid "Fortran 90 feature at %0 unsupported" #~ msgstr "ku" #, fuzzy #~ msgid "Invalid declaration of or reference to symbol `%A' at %0 [initially seen at %1]" #~ msgstr "Bya Cyangwa Indango Kuri IKIMENYETSO ku ku" #, fuzzy #~ msgid "Null element at %0 for array reference at %1" #~ msgstr "Ikigize: ku kugirango Imbonerahamwe Indango ku" #, fuzzy #~ msgid "Too few elements (%A missing) as of %0 for array reference at %1" #~ msgstr "Ibintu Ibuze Nka Bya kugirango Imbonerahamwe Indango ku" #, fuzzy #~ msgid "Too many elements as of %0 for array reference at %1" #~ msgstr "Ibintu Nka Bya kugirango Imbonerahamwe Indango ku" #, fuzzy #~ msgid "Missing colon as of %0 in substring reference for %1" #~ msgstr "Nka Bya in Indango kugirango" #, fuzzy #~ msgid "Invalid use at %0 of substring operator on %1" #~ msgstr "Gukoresha %1 ku Bya Mukoresha ku" #, fuzzy #~ msgid "Substring begin/end point at %0 out of defined range" #~ msgstr "Impera Akadomo ku Inyuma Bya Urutonde" #, fuzzy #~ msgid "Array element value at %0 out of defined range" #~ msgstr "Ikigize: Agaciro ku Inyuma Bya Urutonde" #, fuzzy #~ msgid "Expression at %0 has incorrect data type or rank for its context" #~ msgstr "ku Ibyatanzwe Ubwoko Cyangwa IGICE kugirango Imvugiro" #, fuzzy #~ msgid "Division by 0 (zero) at %0 (IEEE not yet supported)" #~ msgstr "ku 0 Zeru ku OYA" #, fuzzy #~ msgid "%A step count known to be 0 (zero) at %0" #~ msgstr "%AIntera IBARA Kuri 0 Zeru ku" #, fuzzy #~ msgid "%A end value plus step count known to overflow at %0" #~ msgstr "%AImpera Agaciro Guteranya Intera IBARA Kuri Byarenze urugero ku" #, fuzzy #~ msgid "%A begin, end, and step-count values known to result in implementation-dependent behavior due to overflow(s) in intermediate calculations at %0" #~ msgstr "%AImpera Na Intera IBARA Uduciro Kuri Igisubizo in imyitwarire Kuri Byarenze urugero S in ku" #, fuzzy #~ msgid "%A begin, end, and step-count values known to result in no iterations at %0" #~ msgstr "%AImpera Na Intera IBARA Uduciro Kuri Igisubizo in Oya Amasubiramo ku" #, fuzzy #~ msgid "Type disagreement between expressions at %0 and %1" #~ msgstr "hagati ku Na" #, fuzzy #~ msgid "No specification for implied-DO iterator `%A' at %0" #~ msgstr "kugirango ku" #, fuzzy #~ msgid "Gratuitous parentheses surround implied-DO construct at %0" #~ msgstr "ku" #, fuzzy #~ msgid "Zero-size specification invalid at %0" #~ msgstr "Ingano Sibyo ku" #, fuzzy #~ msgid "Zero-size array at %0" #~ msgstr "Ingano Imbonerahamwe ku" #, fuzzy #~ msgid "Target machine does not support complex entity of kind specified at %0" #~ msgstr "OYA Gushigikira ITSINDA RY'IMIBARE C Bya ku" #, fuzzy #~ msgid "Target machine does not support DOUBLE COMPLEX, specified at %0" #~ msgstr "OYA Gushigikira ku" #, fuzzy #~ msgid "Attempt to raise constant zero to a power at %0" #~ msgstr "Kuri Zeru Kuri a UMWIKUBE ku" #, fuzzy #~ msgid "Reference to generic intrinsic `%A' at %0 could be to form %B or %C" #~ msgstr "Kuri Gifitanye isano ku Kuri Ifishi Cyangwa" #, fuzzy #~ msgid "Ambiguous use of intrinsic `%A' at %0 [info -f g77 M CMPAMBIG]" #~ msgstr "Gukoresha Bya ku Ibisobanuro F" #, fuzzy #~ msgid "Intrinsic `%A' referenced %Bly at %0, %Cly at %1 [info -f g77 M EXPIMP]" #~ msgstr "ku ku Ibisobanuro F" #, fuzzy #~ msgid "Same name `%A' used for %B at %0 and %C at %1 [info -f g77 M INTGLOB]" #~ msgstr "Izina: kugirango ku Na ku Ibisobanuro F" #, fuzzy #~ msgid "Explicit type declaration for intrinsic `%A' disagrees with invocation at %0" #~ msgstr "Ubwoko kugirango Na: ku" #, fuzzy #~ msgid "Unable to open INCLUDE file `%A' at %0" #~ msgstr "Kuri Gufungura IDOSIYE ku" #, fuzzy #~ msgid "Null argument at %0 for statement function reference at %1" #~ msgstr "ku kugirango Inyandiko Umumaro Indango ku" #, fuzzy #~ msgid "Null argument at %0 for procedure invocation at %1" #~ msgstr "ku kugirango ku" #, fuzzy #~ msgid "%A too few arguments (starting with dummy argument `%B') as of %0 for statement function reference at %1" #~ msgstr "%Aingingo Na: Ishusho Nka Bya kugirango Inyandiko Umumaro Indango ku" #, fuzzy #~ msgid "%A too many arguments as of %0 for statement function reference at %1" #~ msgstr "%Aingingo Nka Bya kugirango Inyandiko Umumaro Indango ku" #, fuzzy #~ msgid "Array supplied at %1 for dummy argument `%A' in statement function reference at %0" #~ msgstr "ku kugirango Ishusho in Inyandiko Umumaro Indango ku" #, fuzzy #~ msgid "Unsupported FORMAT specifier at %0" #~ msgstr "ku" #, fuzzy #~ msgid "Variable-expression FORMAT specifier at %0 -- unsupported" #~ msgstr "imvugo ku" #, fuzzy #~ msgid "Unsupported VXT statement at %0" #~ msgstr "Inyandiko ku" #, fuzzy #~ msgid "Attempt to specify second initial value for `%A' at %0" #~ msgstr "Kuri ISEGONDA Agaciro kugirango ku" #, fuzzy #~ msgid "Too few initial values in list of initializers for `%A' at %0" #~ msgstr "Uduciro in Urutonde Bya kugirango ku" #, fuzzy #~ msgid "Too many initial values in list of initializers starting at %0" #~ msgstr "Uduciro in Urutonde Bya ku" #, fuzzy #~ msgid "Array or substring specification for `%A' out of range in statement at %0" #~ msgstr "Cyangwa kugirango Inyuma Bya Urutonde in Inyandiko ku" #, fuzzy #~ msgid "Array subscript #%B out of range for initialization of `%A' in statement at %0" #~ msgstr "Inyandiko nyesi Inyuma Bya Urutonde kugirango Bya in Inyandiko ku" #, fuzzy #~ msgid "Implied do-loop step count of 0 (zero) for iteration variable `%A' in statement at %0" #~ msgstr "Intera IBARA Bya 0 Zeru kugirango IMPINDURAGACIRO in Inyandiko ku" #, fuzzy #~ msgid "Implied do-loop iteration count of 0 (zero) for iteration variable `%A' in statement at %0" #~ msgstr "IBARA Bya 0 Zeru kugirango IMPINDURAGACIRO in Inyandiko ku" #, fuzzy #~ msgid "Not an integer constant expression in implied do-loop in statement at %0" #~ msgstr "Umubare wuzuye imvugo in in Inyandiko ku" #, fuzzy #~ msgid "Attempt to specify second initial value for element of `%A' at %0" #~ msgstr "Kuri ISEGONDA Agaciro kugirango Ikigize: Bya ku" #, fuzzy #~ msgid "Attempt to EQUIVALENCE common areas `%A' and `%B' at %0" #~ msgstr "Kuri Ubuso Na ku" #, fuzzy #~ msgid "Can't place `%A' as directed by EQUIVALENCE due to alignment restrictions" #~ msgstr "Nka ku Kuri Itunganya Amabwiriza" #, fuzzy #~ msgid "Mismatched EQUIVALENCE requirements for placement of `%A' at both %C and %D bytes offset from `%B'" #~ msgstr "kugirango Ishyira mu mwanya Bya ku Byombi Na Bayite Nta- boneza Bivuye" #, fuzzy #~ msgid "Array or substring specification for `%A' out of range in EQUIVALENCE statement" #~ msgstr "Cyangwa kugirango Inyuma Bya Urutonde in Inyandiko" #, fuzzy #~ msgid "Substring of non-CHARACTER entity `%A' in EQUIVALENCE statement" #~ msgstr "Bya in Inyandiko" #, fuzzy #~ msgid "Array reference to scalar variable `%A' in EQUIVALENCE statement" #~ msgstr "Indango Kuri IMPINDURAGACIRO in Inyandiko" #, fuzzy #~ msgid "Array subscript #%B out of range for EQUIVALENCE of `%A'" #~ msgstr "Inyandiko nyesi Inyuma Bya Urutonde kugirango Bya" #, fuzzy #~ msgid "Attempt to extend COMMON area beyond its starting point via EQUIVALENCE of `%A'" #~ msgstr "Kuri Ubuso Akadomo Biturutse Bya" #, fuzzy #~ msgid "Too few elements in reference to array `%A' in EQUIVALENCE statement" #~ msgstr "Ibintu in Indango Kuri Imbonerahamwe in Inyandiko" #, fuzzy #~ msgid "Too many elements in reference to array `%A' in EQUIVALENCE statement" #~ msgstr "Ibintu in Indango Kuri Imbonerahamwe in Inyandiko" #, fuzzy #~ msgid "Mixed CHARACTER and non-CHARACTER types via COMMON/EQUIVALENCE -- for example, `%A' and `%B'" #~ msgstr "Na Biturutse kugirango Urugero Na" #, fuzzy #~ msgid "Return value `%A' for FUNCTION at %0 not referenced in subprogram" #~ msgstr "Agaciro kugirango ku OYA in" #, fuzzy #~ msgid "Common block `%A' is SAVEd, explicitly or implicitly, at %0 but not SAVEd at %1" #~ msgstr "Funga ni Cyangwa ku OYA ku" #, fuzzy #~ msgid "Common block `%A' is %B %D in length at %0 but %C %E at %1" #~ msgstr "Funga ni in Uburebure ku ku" #, fuzzy #~ msgid "Blank common initialized at %0" #~ msgstr "ku" #, fuzzy #~ msgid "Intrinsic `%A' is passed as actual argument at %0 but not explicitly declared INTRINSIC" #~ msgstr "ni Nka ku OYA" #, fuzzy #~ msgid "External procedure `%A' is passed as actual argument at %0 but not explicitly declared EXTERNAL" #~ msgstr "ni Nka ku OYA" #, fuzzy #~ msgid "Character `%A' (for example) is upper-case in symbol name at %0" #~ msgstr "kugirango Urugero ni Nkuru in IKIMENYETSO Izina: ku" #, fuzzy #~ msgid "Character `%A' (for example) is lower-case in symbol name at %0" #~ msgstr "kugirango Urugero ni Ntoya in IKIMENYETSO Izina: ku" #, fuzzy #~ msgid "Character `%A' not followed at some point by lower-case character in symbol name at %0" #~ msgstr "OYA ku Akadomo ku Ntoya Inyuguti in IKIMENYETSO Izina: ku" #, fuzzy #~ msgid "Initial character `%A' is lower-case in symbol name at %0" #~ msgstr "Inyuguti ni Ntoya in IKIMENYETSO Izina: ku" #, fuzzy #~ msgid "NAMELIST not adequately supported by run-time library for source files with case preserved" #~ msgstr "OYA ku Gukoresha Igihe Isomero kugirango Inkomoko Idosiye Na:" #, fuzzy #~ msgid "Nested %% construct (%%VAL, %%REF, or %%DESCR) at %0" #~ msgstr "Cyangwa ku" #, fuzzy #~ msgid "Statement at %0 invalid in BLOCK DATA program unit at %1" #~ msgstr "ku Sibyo in Porogaramu Igice: ku" #, fuzzy #~ msgid "Truncating characters on right side of character constant at %0" #~ msgstr "Inyuguti ku Iburyo: Bya Inyuguti ku" #, fuzzy #~ msgid "Truncating characters on right side of hollerith constant at %0" #~ msgstr "Inyuguti ku Iburyo: Bya ku" #, fuzzy #~ msgid "Truncating non-zero data on left side of numeric constant at %0" #~ msgstr "Zeru Ibyatanzwe ku Ibumoso: Bya Bikurikije umubare ku" #, fuzzy #~ msgid "Truncating non-zero data on left side of typeless constant at %0" #~ msgstr "Zeru Ibyatanzwe ku Ibumoso: Bya ku" #, fuzzy #~ msgid "Typeless constant at %0 too large" #~ msgstr "ku Binini" #, fuzzy #~ msgid "First-column ampersand continuation at %0" #~ msgstr "Inkingi ku" #, fuzzy #~ msgid "Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]" #~ msgstr "Izina: ku ku Ibisobanuro F" #, fuzzy #~ msgid "Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]" #~ msgstr "Izina: ni ku ni ku Ibisobanuro F" #, fuzzy #~ msgid "Global name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]" #~ msgstr "Izina: ku Ubwoko ku Ibisobanuro F" #, fuzzy #~ msgid "Too %B arguments passed to `%A' at %0 versus definition at %1 [info -f g77 M GLOBALS]" #~ msgstr "ingingo Kuri ku Insobanuro ku Ibisobanuro F" #, fuzzy #~ msgid "Too %B arguments for `%A' at %0 versus invocation at %1 [info -f g77 M GLOBALS]" #~ msgstr "ingingo kugirango ku ku Ibisobanuro F" #, fuzzy #~ msgid "Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]" #~ msgstr "Bya ni ku ni ku Ibisobanuro F" #, fuzzy #~ msgid "Array `%A' at %0 is too large to handle" #~ msgstr "ku ni Binini Kuri" #, fuzzy #~ msgid "Statement function `%A' defined at %0 is not used" #~ msgstr "Umumaro ku ni OYA" #, fuzzy #~ msgid "Intrinsic `%A', invoked at %0, known to be non-Y2K-compliant [info -f g77 M Y2KBAD]" #~ msgstr "ku Kuri Ibisobanuro F" #, fuzzy #~ msgid "Internal compiler error -- cannot perform operation" #~ msgstr "Ikosa" #, fuzzy #~ msgid "In unknown kind" #~ msgstr "Kitazwi" #, fuzzy #~ msgid "In function" #~ msgstr "Umumaro" #, fuzzy #~ msgid "In program" #~ msgstr "Porogaramu" #, fuzzy #~ msgid "In block-data unit" #~ msgstr "Funga Ibyatanzwe Igice:" #, fuzzy #~ msgid "In common block" #~ msgstr "Funga" #, fuzzy #~ msgid "internal error in check-init: tree code not implemented: %s" #~ msgstr "By'imbere Ikosa in Kugenzura... ITEGEKONGENGA OYA" #, fuzzy #~ msgid "final field '%s' may not have been initialized" #~ msgstr "Umwanya Gicurasi OYA" #, fuzzy #~ msgid "internal error - too many interface type" #~ msgstr "By'imbere Ikosa Ubwoko" #, fuzzy #~ msgid "bad method signature" #~ msgstr "Uburyo Isinya" #, fuzzy #~ msgid "misplaced ConstantValue attribute (not in any field)" #~ msgstr "Ikiranga OYA in Umwanya" #, fuzzy #~ msgid "duplicate ConstantValue attribute for field '%s'" #~ msgstr "Gusubiramo Ikiranga kugirango Umwanya" #, fuzzy #~ msgid "ConstantValue attribute of field '%s' has wrong type" #~ msgstr "Ikiranga Bya Umwanya Ubwoko" #, fuzzy #~ msgid "field '%s' not found in class" #~ msgstr "Umwanya OYA Byabonetse in ishuri" #, fuzzy #~ msgid "abstract method in non-abstract class" #~ msgstr "Incamake Uburyo in Incamake ishuri" #, fuzzy #~ msgid "non-static method '%s' overrides static method" #~ msgstr "Uburyo Uburyo" #, fuzzy #~ msgid "In %s: overlapped variable and exception ranges at %d" #~ msgstr "IMPINDURAGACIRO Na Irengayobora(-) Ibice ku" #, fuzzy #~ msgid "bad type in parameter debug info" #~ msgstr "Ubwoko in Kosora amakosa Ibisobanuro" #, fuzzy #~ msgid "bad PC range for debug info for local `%s'" #~ msgstr "Urutonde kugirango Kosora amakosa Ibisobanuro kugirango" #, fuzzy #~ msgid "reference `%s' is ambiguous: appears in interface `%s' and interface `%s'" #~ msgstr "Indango ni in Na" #, fuzzy #~ msgid "field `%s' not found" #~ msgstr "Umwanya OYA Byabonetse" #, fuzzy #~ msgid "ret instruction not implemented" #~ msgstr "OYA" #, fuzzy #~ msgid "method '%s' not found in class" #~ msgstr "Uburyo OYA Byabonetse in ishuri" #, fuzzy #~ msgid "failed to find class '%s'" #~ msgstr "Byanze Kuri Gushaka ishuri" #, fuzzy #~ msgid "class '%s' has no method named '%s' matching signature '%s'" #~ msgstr "ishuri Oya Uburyo Isinya" #, fuzzy #~ msgid "invokestatic on non static method" #~ msgstr "ku Uburyo" #, fuzzy #~ msgid "invokestatic on abstract method" #~ msgstr "ku Incamake Uburyo" #, fuzzy #~ msgid "invoke[non-static] on static method" #~ msgstr "ku Uburyo" #, fuzzy #~ msgid "missing field '%s' in '%s'" #~ msgstr "Ibuze Umwanya in" #, fuzzy #~ msgid "mismatching signature for field '%s' in '%s'" #~ msgstr "Isinya kugirango Umwanya in" #, fuzzy #~ msgid "assignment to final field `%s' not in field's class" #~ msgstr "Igenera Kuri Umwanya OYA in ishuri" #, fuzzy #~ msgid "assignment to final static field `%s' not in class initializer" #~ msgstr "Igenera Kuri Umwanya OYA in ishuri" #, fuzzy #~ msgid "assignment to final field `%s' not in constructor" #~ msgstr "Igenera Kuri Umwanya OYA in" #, fuzzy #~ msgid "can't expand %s" #~ msgstr "Kwagura" #, fuzzy #~ msgid "invalid PC in line number table" #~ msgstr "Sibyo in Umurongo Umubare imbonerahamwe#" #, fuzzy #~ msgid "unreachable bytecode from %d to before %d" #~ msgstr "Bivuye Kuri Mbere" #, fuzzy #~ msgid "unreachable bytecode from %d to the end of the method" #~ msgstr "Bivuye Kuri i Impera Bya i Uburyo" #, fuzzy #~ msgid "source file for class `%s' is newer than its matching class file. Source file `%s' used instead" #~ msgstr "Inkomoko IDOSIYE kugirango ishuri ni ishuri IDOSIYE IDOSIYE" #, fuzzy #~ msgid "bad string constant" #~ msgstr "Ikurikiranyanyuguti" #, fuzzy #~ msgid "bad value constant type %d, index %d" #~ msgstr "Agaciro Ubwoko Umubarendanga" #, fuzzy #~ msgid "can't close %s" #~ msgstr "Gufunga" #, fuzzy #~ msgid "cannot find file for class %s" #~ msgstr "Gushaka IDOSIYE kugirango ishuri" #, fuzzy #~ msgid "not a valid Java .class file" #~ msgstr "OYA a Byemewe ishuri IDOSIYE" #, fuzzy #~ msgid "error while parsing constant pool" #~ msgstr "Ikosa Itsinda" #, fuzzy #~ msgid "error in constant pool entry #%d\n" #~ msgstr "Ikosa in Itsinda Icyinjijwe" #, fuzzy #~ msgid "reading class %s for the second time from %s" #~ msgstr "ishuri kugirango i ISEGONDA Igihe Bivuye" #, fuzzy #~ msgid "error while parsing fields" #~ msgstr "Ikosa Imyanya" #, fuzzy #~ msgid "error while parsing methods" #~ msgstr "Ikosa" #, fuzzy #~ msgid "error while parsing final attributes" #~ msgstr "Ikosa Ibiranga" #, fuzzy #~ msgid "the `java.lang.Object' that was found in `%s' didn't have the special zero-length `gnu.gcj.gcj-compiled' attribute. This generally means that your classpath is incorrectly set. Use `info gcj \"Input Options\"' to see the info page describing how to set the classpath" #~ msgstr "i java Byabonetse in i Bidasanzwe Zeru Uburebure Ikiranga Inzirashuri ni Gushyiraho Ibisobanuro Kuri i Ibisobanuro Ipaji Kuri Gushyiraho i Inzirashuri" #, fuzzy #~ msgid "missing Code attribute" #~ msgstr "Ibuze Ikiranga" #, fuzzy #~ msgid "source file seen twice on command line and will be compiled only once" #~ msgstr "Inkomoko IDOSIYE ku Komandi: Umurongo Na Rimwe" #, fuzzy #~ msgid "no input file specified" #~ msgstr "Oya Iyinjiza IDOSIYE" #, fuzzy #~ msgid "can't close input file %s" #~ msgstr "Gufunga Iyinjiza IDOSIYE" #, fuzzy #~ msgid "bad zip/jar file %s" #~ msgstr "Zipu IDOSIYE" #, fuzzy #~ msgid "internal error in generate_bytecode_insn - tree code not implemented: %s" #~ msgstr "By'imbere Ikosa in ITEGEKONGENGA OYA" #, fuzzy #~ msgid "field initializer type mismatch" #~ msgstr "Umwanya Ubwoko" #, fuzzy #~ msgid "can't create directory %s" #~ msgstr "Kurema bushyinguro" #, fuzzy #~ msgid "can't create %s" #~ msgstr "Kurema" #, fuzzy #~ msgid "only one of `--print-main', `--list-class', and `--complexity' allowed" #~ msgstr "Bya Gucapa Urutonde Na" #, fuzzy #~ msgid "can't open output file `%s'" #~ msgstr "Gufungura Ibisohoka IDOSIYE" #, fuzzy #~ msgid "file not found `%s'" #~ msgstr "Dosiye ntibonetse" #, fuzzy #~ msgid "`%s' is not a valid class name" #~ msgstr "`%s'ni OYA a Byemewe ishuri Izina:" #, fuzzy #~ msgid "--resource requires -o" #~ msgstr "--o" #, fuzzy #~ msgid "warning: already-compiled .class files ignored with -C" #~ msgstr "Iburira ishuri Idosiye Na: C" #, fuzzy #~ msgid "cannot specify both -C and -o" #~ msgstr "Byombi C Na o" #, fuzzy #~ msgid "cannot create temporary file" #~ msgstr "Kurema By'igihe gito IDOSIYE" #, fuzzy #~ msgid "using both @FILE with multiple files not implemented" #~ msgstr "ikoresha Byombi Na: Igikubo Idosiye OYA" #, fuzzy #~ msgid "cannot specify `main' class when not linking" #~ msgstr "ishuri Ryari: OYA Impuza" #, fuzzy #~ msgid "can't do dependency tracking with input from stdin" #~ msgstr "Na: Iyinjiza Bivuye" #, fuzzy #~ msgid "couldn't determine target name for dependency tracking" #~ msgstr "Intego Izina: kugirango" #, fuzzy #~ msgid "" #~ "unknown encoding: `%s'\n" #~ "This might mean that your locale's encoding is not supported\n" #~ "by your system's iconv(3) implementation. If you aren't trying\n" #~ "to use a particular encoding for your input file, try the\n" #~ "`--encoding=UTF-8' option" #~ msgstr "Kitazwi Imisobekere: Impuzandengo- Imisobekere: ni OYA 3. Gukoresha a Imisobekere: kugirango Iyinjiza IDOSIYE Imisobekere: Ihitamo" #, fuzzy #~ msgid "internal error - invalid Utf8 name" #~ msgstr "By'imbere Ikosa Sibyo Izina:" #, fuzzy #~ msgid "Missing term" #~ msgstr "Ijambo" # starmath/source\smres.src:RID_ERR_LGROUPEXPECTED.text #, fuzzy #~ msgid "';' expected" #~ msgstr "';'ntigatunguranye" #, fuzzy #~ msgid "Missing name" #~ msgstr "Izina:" # starmath/source\smres.src:RID_ERR_LGROUPEXPECTED.text #, fuzzy #~ msgid "'*' expected" #~ msgstr "'*'ntigatunguranye" #, fuzzy #~ msgid "Class or interface declaration expected" #~ msgstr "Cyangwa Ikitezwe:" #, fuzzy #~ msgid "Missing class name" #~ msgstr "ishuri Izina:" #~ msgid "'{' expected" #~ msgstr "'{' ntigatunguranye" #, fuzzy #~ msgid "Missing super class name" #~ msgstr "hejuru ishuri Izina:" #, fuzzy #~ msgid "Missing interface name" #~ msgstr "Izina:" #, fuzzy #~ msgid "Missing variable initializer" #~ msgstr "IMPINDURAGACIRO" # starmath/source\smres.src:RID_ERR_LGROUPEXPECTED.text #, fuzzy #~ msgid "']' expected" #~ msgstr "']'ntigatunguranye" #, fuzzy #~ msgid "Invalid method declaration, method name required" #~ msgstr "Uburyo Uburyo Izina: Bya ngombwa" #~ msgid "Identifier expected" #~ msgstr "Ikiranga ntigitunguranye" #, fuzzy #~ msgid "Invalid method declaration, return type required" #~ msgstr "Uburyo Garuka Ubwoko Bya ngombwa" #~ msgid "')' expected" #~ msgstr "')' ntigatunguranye" #, fuzzy #~ msgid "Missing formal parameter term" #~ msgstr "Ijambo" #, fuzzy #~ msgid "Missing identifier" #~ msgstr "Ikiranga" #, fuzzy #~ msgid "Missing class type term" #~ msgstr "ishuri Ubwoko Ijambo" #, fuzzy #~ msgid "Invalid interface type" #~ msgstr "Ubwoko" # starmath/source\smres.src:RID_ERR_LGROUPEXPECTED.text #, fuzzy #~ msgid "':' expected" #~ msgstr "':'ntigatunguranye" #, fuzzy #~ msgid "Invalid expression statement" #~ msgstr "imvugo Inyandiko" #~ msgid "'(' expected" #~ msgstr "'(' ntigatunguranye" #, fuzzy #~ msgid "Missing term or ')'" #~ msgstr "Ijambo Cyangwa" #, fuzzy #~ msgid "Missing or invalid constant expression" #~ msgstr "Cyangwa Sibyo imvugo" #, fuzzy #~ msgid "Missing term and ')' expected" #~ msgstr "Ijambo Na Ikitezwe:" #, fuzzy #~ msgid "Invalid control expression" #~ msgstr "Igenzura imvugo" #, fuzzy #~ msgid "Invalid update expression" #~ msgstr "Kuvugurura imvugo" #, fuzzy #~ msgid "Invalid init statement" #~ msgstr "Inyandiko" #, fuzzy #~ msgid "Missing term or ')' expected" #~ msgstr "Ijambo Cyangwa Ikitezwe:" #, fuzzy #~ msgid "'class' or 'this' expected" #~ msgstr "'Cyangwa Ikitezwe:" #, fuzzy #~ msgid "'class' expected" #~ msgstr "'Ikitezwe:" #, fuzzy #~ msgid "')' or term expected" #~ msgstr "')'Cyangwa Ijambo Ikitezwe:" # starmath/source\smres.src:RID_ERR_LGROUPEXPECTED.text #, fuzzy #~ msgid "'[' expected" #~ msgstr "'['ntigatunguranye" #, fuzzy #~ msgid "Field expected" #~ msgstr "Ikitezwe:" #, fuzzy #~ msgid "Missing term and ']' expected" #~ msgstr "Ijambo Na Ikitezwe:" #, fuzzy #~ msgid "']' expected, invalid type expression" #~ msgstr "']'Ikitezwe: Sibyo Ubwoko imvugo" #, fuzzy #~ msgid "Invalid type expression" #~ msgstr "Ubwoko imvugo" #, fuzzy #~ msgid "Invalid reference type" #~ msgstr "Indango Ubwoko" #, fuzzy #~ msgid "Constructor invocation must be first thing in a constructor" #~ msgstr "Itangira in a" #, fuzzy #~ msgid ": `%s' JDK1.1(TM) feature" #~ msgstr ":`%s'1." # desktop/source\app\ssodlg.src:DLG_SSOLOGIN.text #, fuzzy #~ msgid "" #~ "%s.\n" #~ "%s" #~ msgstr "%s.%s" #, fuzzy #~ msgid "malformed .zip archive in CLASSPATH: %s" #~ msgstr "Zipu in" #, fuzzy #~ msgid "Can't find default package `%s'. Check the CLASSPATH environment variable and the access to the archives" #~ msgstr "Gushaka Mburabuzi i IMPINDURAGACIRO Na i Kuri i Ubushyinguro" #, fuzzy #~ msgid "missing static field `%s'" #~ msgstr "Ibuze Umwanya" #, fuzzy #~ msgid "not a static field `%s'" #~ msgstr "OYA a Umwanya" #, fuzzy #~ msgid "No case for %s" #~ msgstr "kugirango" #, fuzzy #~ msgid "unregistered operator %s" #~ msgstr "Mukoresha" #, fuzzy #~ msgid "junk at end of signature string" #~ msgstr "Umwanda ku Impera Bya Isinya Ikurikiranyanyuguti" #, fuzzy #~ msgid "bad pc in exception_table" #~ msgstr "in" #, fuzzy #~ msgid "exception handler inside code that is being protected" #~ msgstr "Irengayobora(-) Mo Imbere ITEGEKONGENGA ni Birinzwe" #, fuzzy #~ msgid "unknown opcode %d@pc=%d during verification" #~ msgstr "Kitazwi" #, fuzzy #~ msgid "verification error at PC=%d" #~ msgstr "Ikosa ku" #, fuzzy #~ msgid "Disable automatic array bounds checking" #~ msgstr "Byikoresha Imbonerahamwe" #, fuzzy #~ msgid "Disable assignability checks for stores into object arrays" #~ msgstr "kugirango Igikoresho" #, fuzzy #~ msgid "Assume native functions are implemented using JNI" #~ msgstr "Imimaro ikoresha" #, fuzzy #~ msgid "Replace system path" #~ msgstr "Sisitemu Inzira" #, fuzzy #~ msgid "Set class path" #~ msgstr "ishuri Inzira" #, fuzzy #~ msgid "Set class path (deprecated: use --classpath instead)" #~ msgstr "ishuri Inzira Bitemewe. Gukoresha Inzirashuri" #, fuzzy #~ msgid "Choose class whose main method should be used" #~ msgstr "ishuri bya Uburyo" #, fuzzy #~ msgid "Choose input encoding (default comes from locale)" #~ msgstr "Iyinjiza Imisobekere: Mburabuzi Bivuye Umwanya" #, fuzzy #~ msgid "Add directory to class path" #~ msgstr "bushyinguro Kuri ishuri Inzira" #, fuzzy #~ msgid "Directory where class files should be written" #~ msgstr "ishuri Idosiye" #, fuzzy #~ msgid "Warn if modifiers are specified when not necessary" #~ msgstr "NIBA Ryari: OYA" #, fuzzy #~ msgid "Warn if deprecated empty statements are found" #~ msgstr "NIBA Bitemewe. ubusa Byabonetse" #, fuzzy #~ msgid "Warn if .class files are out of date" #~ msgstr "NIBA ishuri Idosiye Inyuma Bya Itariki" #, fuzzy #~ msgid "Always check for non gcj generated classes archives" #~ msgstr "Kugenzura... kugirango Inzego Ubushyinguro" #, fuzzy #~ msgid "Never optimize static class initialization code" #~ msgstr "Kugeza ku ndunduro ishuri ITEGEKONGENGA" #, fuzzy #~ msgid "Use offset tables for virtual method calls" #~ msgstr "Nta- boneza Imbonerahamwe kugirango Kitaboneka Uburyo Amahamagara:" #, fuzzy #~ msgid "object does not conform to the `%s' protocol" #~ msgstr "Igikoresho OYA Kuri i Porotokole" #, fuzzy #~ msgid "class `%s' does not implement the `%s' protocol" #~ msgstr "ishuri OYA i Porotokole" #, fuzzy #~ msgid "unexpected type for `id' (%s)" #~ msgstr "Ubwoko kugirango" #, fuzzy #~ msgid "undefined type `id', please import " #~ msgstr "kidasobanuye Ubwoko Kuzana h" #, fuzzy #~ msgid "protocol `%s' has circular dependency" #~ msgstr "Porotokole Cy'uruziga" #, fuzzy #~ msgid "cannot find protocol declaration for `%s'" #~ msgstr "Gushaka Porotokole kugirango" #, fuzzy #~ msgid "cannot find interface declaration for `%s'" #~ msgstr "Gushaka kugirango" #, fuzzy #~ msgid "cannot find reference tag for class `%s'" #~ msgstr "Gushaka Indango Itagi: kugirango ishuri" #, fuzzy #~ msgid "creating selector for non existant method %s" #~ msgstr "kugirango Uburyo" #, fuzzy #~ msgid "cannot find class `%s'" #~ msgstr "Gushaka ishuri" #, fuzzy #~ msgid "class `%s' already exists" #~ msgstr "ishuri" #, fuzzy #~ msgid "cannot find interface declaration for `%s', superclass of `%s'" #~ msgstr "Gushaka kugirango Bya" #, fuzzy #~ msgid "circular inheritance in interface declaration for `%s'" #~ msgstr "Cy'uruziga in kugirango" #, fuzzy #~ msgid "inconsistent instance variable specification" #~ msgstr "Urugero IMPINDURAGACIRO" #, fuzzy #~ msgid "can not use an object as parameter to a method\n" #~ msgstr "OYA Gukoresha Igikoresho Nka Kuri a" #, fuzzy #~ msgid "multiple declarations for method `%s'" #~ msgstr "Igikubo kugirango Uburyo" #, fuzzy #~ msgid "invalid receiver type `%s'" #~ msgstr "Sibyo Mwakirizi Ubwoko" #, fuzzy #~ msgid "`%s' does not respond to `%s'" #~ msgstr "`%s'OYA Kuri" #, fuzzy #~ msgid "no super class declared in interface for `%s'" #~ msgstr "Oya hejuru ishuri in kugirango" #, fuzzy #~ msgid "cannot find class (factory) method" #~ msgstr "Gushaka ishuri Uburyo" #, fuzzy #~ msgid "return type for `%s' defaults to id" #~ msgstr "Garuka Ubwoko kugirango Kuri ID" #, fuzzy #~ msgid "method `%s' not implemented by protocol" #~ msgstr "Uburyo OYA ku Porotokole" #, fuzzy #~ msgid "return type defaults to id" #~ msgstr "Garuka Ubwoko Kuri ID" #, fuzzy #~ msgid "cannot find method" #~ msgstr "Gushaka Uburyo" #, fuzzy #~ msgid "instance variable `%s' accessed in class method" #~ msgstr "Urugero IMPINDURAGACIRO birabonetse in ishuri Uburyo" #, fuzzy #~ msgid "duplicate definition of class method `%s'" #~ msgstr "Gusubiramo Insobanuro Bya ishuri Uburyo" #, fuzzy #~ msgid "duplicate declaration of class method `%s'" #~ msgstr "Gusubiramo Bya ishuri Uburyo" #, fuzzy #~ msgid "duplicate definition of instance method `%s'" #~ msgstr "Gusubiramo Insobanuro Bya Urugero Uburyo" #, fuzzy #~ msgid "duplicate declaration of instance method `%s'" #~ msgstr "Gusubiramo Bya Urugero Uburyo" #, fuzzy #~ msgid "duplicate interface declaration for category `%s(%s)'" #~ msgstr "Gusubiramo kugirango Icyiciro" #, fuzzy #~ msgid "instance variable `%s' is declared private" #~ msgstr "Urugero IMPINDURAGACIRO ni By'umwihariko" #, fuzzy #~ msgid "instance variable `%s' is declared %s" #~ msgstr "Urugero IMPINDURAGACIRO ni" #, fuzzy #~ msgid "static access to object of type `id'" #~ msgstr "Kuri Igikoresho Bya Ubwoko" #, fuzzy #~ msgid "incomplete implementation of class `%s'" #~ msgstr "Bya ishuri" #, fuzzy #~ msgid "incomplete implementation of category `%s'" #~ msgstr "Bya Icyiciro" #, fuzzy #~ msgid "method definition for `%c%s' not found" #~ msgstr "Uburyo Insobanuro kugirango OYA Byabonetse" #, fuzzy #~ msgid "%s `%s' does not fully implement the `%s' protocol" #~ msgstr "%s`%s'OYA i Porotokole" #, fuzzy #~ msgid "`@end' missing in implementation context" #~ msgstr "`@Ibuze in Imvugiro" #, fuzzy #~ msgid "reimplementation of class `%s'" #~ msgstr "Bya ishuri" #, fuzzy #~ msgid "conflicting super class name `%s'" #~ msgstr "hejuru ishuri Izina:" #, fuzzy #~ msgid "duplicate interface declaration for class `%s'" #~ msgstr "Gusubiramo kugirango ishuri" #, fuzzy #~ msgid "duplicate declaration for protocol `%s'" #~ msgstr "Gusubiramo kugirango Porotokole" #, fuzzy #~ msgid "[super ...] must appear in a method context" #~ msgstr "[hejuru Kugaragara in a Uburyo Imvugiro" #, fuzzy #~ msgid "potential selector conflict for method `%s'" #~ msgstr "kugirango Uburyo" #, fuzzy #~ msgid "`@end' must appear in an implementation context" #~ msgstr "`@Kugaragara in Imvugiro" #, fuzzy #~ msgid "method definition not in class context" #~ msgstr "Uburyo Insobanuro OYA in ishuri Imvugiro" #, fuzzy #~ msgid "Dump decls to a .decl file" #~ msgstr "Kuri a IDOSIYE" #, fuzzy #~ msgid "Generate code for GNU runtime environment" #~ msgstr "ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Generate code for NeXT runtime environment" #~ msgstr "ITEGEKONGENGA kugirango" #, fuzzy #~ msgid "Warn if a selector has multiple methods" #~ msgstr "NIBA a Igikubo" #, fuzzy #~ msgid "Do not warn if inherited methods are unimplemented" #~ msgstr "OYA NIBA" #, fuzzy #~ msgid "Generate C header of platform specific features" #~ msgstr "C Umutwempangano Bya Ibiranga" #, fuzzy #~ msgid "Specify the name of the class for constant strings" #~ msgstr "i Izina: Bya i ishuri kugirango Ikurikiranyanyuguti" #, fuzzy #~ msgid "(debug) trace parsing process" #~ msgstr "(Kosora amakosa" #, fuzzy #~ msgid "(debug) trace lexical analysis" #~ msgstr "(Kosora amakosa" #, fuzzy #~ msgid "-current_version only allowed with -dynamiclib" #~ msgstr "-Na:" #, fuzzy #~ msgid "-install_name only allowed with -dynamiclib" #~ msgstr "-Na:" #, fuzzy #~ msgid "-bundle not allowed with -dynamiclib" #~ msgstr "-OYA Na:" #, fuzzy #~ msgid "-bundle_loader not allowed with -dynamiclib" #~ msgstr "-OYA Na:" #, fuzzy #~ msgid "-client_name not allowed with -dynamiclib" #~ msgstr "-OYA Na:" #, fuzzy #~ msgid "-force_cpusubtype_ALL not allowed with -dynamiclib" #~ msgstr "-OYA Na:" #, fuzzy #~ msgid "-force_flat_namespace not allowed with -dynamiclib" #~ msgstr "-OYA Na:" #, fuzzy #~ msgid "-keep_private_externs not allowed with -dynamiclib" #~ msgstr "-OYA Na:" #, fuzzy #~ msgid "-private_bundle not allowed with -dynamiclib" #~ msgstr "-OYA Na:" #, fuzzy #~ msgid "GNU C does not support -C without using -E" #~ msgstr "C OYA Gushigikira C ikoresha E" #, fuzzy #~ msgid "GNU C does not support -CC without using -E" #~ msgstr "C OYA Gushigikira ikoresha E" #, fuzzy #~ msgid "`-p' not supported; use `-pg' and gprof(1)" #~ msgstr "`-OYA Gukoresha Na 1." #, fuzzy #~ msgid "may not use both -m32 and -m64" #~ msgstr "Gicurasi OYA Gukoresha Byombi Na" #, fuzzy #~ msgid "The -shared option is not currently supported for VAX ELF." #~ msgstr "Ihitamo ni OYA kugirango" #, fuzzy #~ msgid "profiling not supported with -mg\n" #~ msgstr "OYA Na:" #, fuzzy #~ msgid "-pipe is not supported" #~ msgstr "-ni OYA" #, fuzzy #~ msgid "may not use both -EB and -EL" #~ msgstr "Gicurasi OYA Gukoresha Byombi Na" #, fuzzy #~ msgid "-pg and -fomit-frame-pointer are incompatible" #~ msgstr "-Na Ikadiri Mweretsi" #, fuzzy #~ msgid "mno-cygwin and mno-win32 are not compatible" #~ msgstr "Na OYA" #, fuzzy #~ msgid "shared and mdll are not compatible" #~ msgstr "Na OYA" #, fuzzy #~ msgid "-E required when input is from standard input" #~ msgstr "-E Bya ngombwa Ryari: Iyinjiza ni Bivuye Bisanzwe Iyinjiza" #, fuzzy #~ msgid "compilation of header file requested" #~ msgstr "Bya Umutwempangano IDOSIYE" #, fuzzy #~ msgid " conflicting code gen style switches are used" #~ msgstr "ITEGEKONGENGA IMISUSIRE" #, fuzzy #~ msgid "-pg or -p and -fomit-frame-pointer are incompatible" #~ msgstr "-Cyangwa P Na Ikadiri Mweretsi" #, fuzzy #~ msgid "choose either big or little endian, not both" #~ msgstr "Guhitamo Cyangwa OYA Byombi" #, fuzzy #~ msgid "choose either m340 or m210 not both" #~ msgstr "Guhitamo Cyangwa OYA Byombi" #, fuzzy #~ msgid "the m210 does not have little endian support" #~ msgstr "i OYA Gushigikira" #, fuzzy #~ msgid "-mapcs-26 and -mapcs-32 may not be used together" #~ msgstr "-Na Gicurasi OYA" #, fuzzy #~ msgid "-msoft-float and -mhard_float may not be used together" #~ msgstr "-Kureremba Na Gicurasi OYA" #, fuzzy #~ msgid "-mbig-endian and -mlittle-endian may not be used together" #~ msgstr "-Na Gicurasi OYA" #, fuzzy #~ msgid "-mhard-float not supported" #~ msgstr "-Kureremba OYA" #, fuzzy #~ msgid "-msingle-float and -msoft-float can not both be specified" #~ msgstr "-Kureremba Na Kureremba OYA Byombi" #, fuzzy #~ msgid "-c or -S required for Ada" #~ msgstr "-C Cyangwa Bya ngombwa kugirango" #, fuzzy #~ msgid "-fjni and -femit-class-files are incompatible" #~ msgstr "-Na ishuri Idosiye" #, fuzzy #~ msgid "-fjni and -femit-class-file are incompatible" #~ msgstr "-Na ishuri IDOSIYE" #, fuzzy #~ msgid "-femit-class-file should used along with -fsyntax-only" #~ msgstr "-ishuri IDOSIYE Na:" #, fuzzy #~ msgid "-static not valid with -mcoff" #~ msgstr "-OYA Byemewe Na:" #, fuzzy #~ msgid "-shared not valid with -mcoff" #~ msgstr "-OYA Byemewe Na:" #, fuzzy #~ msgid "-symbolic not valid with -mcoff" #~ msgstr "-OYA Byemewe Na:" #, fuzzy #~ msgid "-fpic is not valid with -mcoff" #~ msgstr "-ni OYA Byemewe Na:" #, fuzzy #~ msgid "-fPIC is not valid with -mcoff" #~ msgstr "-ni OYA Byemewe Na:" #, fuzzy #~ msgid "-fpic not valid with -mcoff" #~ msgstr "-OYA Byemewe Na:" #, fuzzy #~ msgid "-fPIC not valid with -mcoff" #~ msgstr "-OYA Byemewe Na:" nescc-1.3.4/libcpp/po/sv.po000066400000000000000000000577301177770303300155150ustar00rootroot00000000000000# Swedish messages for cpplib. # Copyright 2000, 2005, 2006, 2007 Free Software Foundation, Inc. # Dennis Bjrklund , 2000, 2001, 2002. # Gran Uddeborg , 2005, 2006, 2007. # # Remember: GCC team does not want RCS keywords in the header! # msgid "" msgstr "" "Project-Id-Version: cpplib 4.2.1\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2007-11-08 21:08+0000\n" "PO-Revision-Date: 2007-09-01 12:51+0200\n" "Last-Translator: Gran Uddeborg \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8-bit\n" #: charset.c:654 #, c-format msgid "conversion from %s to %s not supported by iconv" msgstr "konveretering frn %s till %s stds inte av iconv" #: charset.c:657 msgid "iconv_open" msgstr "iconv_open" #: charset.c:665 #, c-format msgid "no iconv implementation, cannot convert from %s to %s" msgstr "ingen iconv-implementation, kan inte konvertera frn %s till %s" #: charset.c:742 #, c-format msgid "character 0x%lx is not in the basic source character set\n" msgstr "tecken 0x%lx finns inte i kllkodens grundteckenuppsttning\n" #: charset.c:759 charset.c:1352 msgid "converting to execution character set" msgstr "konverterar till teckenuppsttning fr krning" #: charset.c:765 #, c-format msgid "character 0x%lx is not unibyte in execution character set" msgstr "tecken 0x%lx r inte en byte i teckenupsttning fr krning" #: charset.c:889 #, c-format msgid "Character %x might not be NFKC" msgstr "Tecknet %x r kanske inte NFKC" #: charset.c:949 msgid "universal character names are only valid in C++ and C99" msgstr "universella teckennamn r endast giltiga i C++ och C99" #: charset.c:952 #, c-format msgid "the meaning of '\\%c' is different in traditional C" msgstr "betydelsen av \"\\%c\" r annorlunda i traditionell C" #: charset.c:961 msgid "In _cpp_valid_ucn but not a UCN" msgstr "I _cpp_valid_ucn men inte en UCN" #: charset.c:986 #, c-format msgid "incomplete universal character name %.*s" msgstr "ofullstndigt unversellt teckennamn %.*s" #: charset.c:998 #, c-format msgid "%.*s is not a valid universal character" msgstr "%.*s r inte ett giltigt universellt tecken" #: charset.c:1008 lex.c:484 msgid "'$' in identifier or number" msgstr "\"$\" i identifierare eller tal" #: charset.c:1018 #, c-format msgid "universal character %.*s is not valid in an identifier" msgstr "universellt tecken %.*s r inte giltigt i en identifierare" #: charset.c:1022 #, c-format msgid "universal character %.*s is not valid at the start of an identifier" msgstr "universellt tecken %.*s r inte giltigt vid brjan av en identifierare" #: charset.c:1056 charset.c:1571 msgid "converting UCN to source character set" msgstr "vid konvertering av UCN kllteckenuppsttning" #: charset.c:1060 msgid "converting UCN to execution character set" msgstr "vid konverting av UCN till teckenuppsttning fr krning" #: charset.c:1132 msgid "the meaning of '\\x' is different in traditional C" msgstr "betydelsen av \"\\x\" r annorlunda i traditionell C" #: charset.c:1149 msgid "\\x used with no following hex digits" msgstr "\\x anvnt utan ngra fljande hexadecimala siffror" #: charset.c:1156 msgid "hex escape sequence out of range" msgstr "hexadecimal specialsekvens utanfr intervallet" #: charset.c:1195 msgid "octal escape sequence out of range" msgstr "oktal specialsekvens utanfr intervallet" #: charset.c:1263 msgid "the meaning of '\\a' is different in traditional C" msgstr "betydelsen av \"\\a\" r annorlunda i traditionell C" #: charset.c:1270 #, c-format msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "icke-ISO-standardspecialsekvens, \"\\%c\"" #: charset.c:1278 #, c-format msgid "unknown escape sequence '\\%c'" msgstr "oknd escape-sekvens \"\\%c\"" #: charset.c:1286 #, c-format msgid "unknown escape sequence: '\\%s'" msgstr "oknd escape-sekvens: \"\\%s\"" #: charset.c:1293 msgid "converting escape sequence to execution character set" msgstr "vid konvertering av specialsekvens till teckenuppsttning fr krning" #: charset.c:1415 charset.c:1478 msgid "character constant too long for its type" msgstr "teckenkonstant fr lng fr sin typ" #: charset.c:1418 msgid "multi-character character constant" msgstr "flerteckens teckenkonstant" #: charset.c:1510 msgid "empty character constant" msgstr "tom teckenkonstant" #: charset.c:1612 #, c-format msgid "failure to convert %s to %s" msgstr "misslyckades att konvertera %s till %s" #: directives.c:215 directives.c:241 #, c-format msgid "extra tokens at end of #%s directive" msgstr "extra symboler vid slutet av direktivet #%s" #: directives.c:344 #, c-format msgid "#%s is a GCC extension" msgstr "#%s r en GCC-utvidgning" #: directives.c:356 msgid "suggest not using #elif in traditional C" msgstr "freslr att inte anvnda #elif i traditionell C" #: directives.c:359 #, c-format msgid "traditional C ignores #%s with the # indented" msgstr "traditionell C ignorerar #%s dr tecknet # r indenterat" #: directives.c:363 #, c-format msgid "suggest hiding #%s from traditional C with an indented #" msgstr "freslr att dlja #%s frn traditionell C med en indenterad #" #: directives.c:389 msgid "embedding a directive within macro arguments is not portable" msgstr "att bdda in ett direktiv i makroargument r inte portabelt" #: directives.c:409 msgid "style of line directive is a GCC extension" msgstr "stil p raddirektiv r en GCC-utvidgning" #: directives.c:464 #, c-format msgid "invalid preprocessing directive #%s" msgstr "ogiltigt preprocessordirektiv #%s" #: directives.c:532 msgid "\"defined\" cannot be used as a macro name" msgstr "\"defined\" kan inte anvndas som ett makronamn" #: directives.c:538 #, c-format msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "\"%s\" kan inte anvndas som ett makronamn eftersom det r en operator i C++" #: directives.c:541 #, c-format msgid "no macro name given in #%s directive" msgstr "inget makronamn angivet i direktivet #%s" #: directives.c:544 msgid "macro names must be identifiers" msgstr "makronamn mste vara identifierare" #: directives.c:585 #, c-format msgid "undefining \"%s\"" msgstr "avdefinierar \"%s\"" #: directives.c:640 msgid "missing terminating > character" msgstr "saknar avslutande tecken >" #: directives.c:695 #, c-format msgid "#%s expects \"FILENAME\" or " msgstr "#%s frvntar \"FILNAMN\" eller " #: directives.c:739 #, c-format msgid "empty filename in #%s" msgstr "tomt filnamn i #%s" #: directives.c:749 msgid "#include nested too deeply" msgstr "#include nstlad fr djupt" #: directives.c:790 msgid "#include_next in primary source file" msgstr "#include_next i primr kllkodsfil" #: directives.c:816 #, c-format msgid "invalid flag \"%s\" in line directive" msgstr "ogiltigt flagga \"%s\" i line-direktiv" #: directives.c:868 #, c-format msgid "\"%s\" after #line is not a positive integer" msgstr "\"%s\" efter #line r inte ett positivt heltal" #: directives.c:874 msgid "line number out of range" msgstr "radnummer utanfr mjligt intervall" #: directives.c:887 directives.c:964 #, c-format msgid "\"%s\" is not a valid filename" msgstr "\"%s\" r inte ett giltigt filnamn" #: directives.c:924 #, c-format msgid "\"%s\" after # is not a positive integer" msgstr "\"%s\" efter # r inte ett positivt heltal" #: directives.c:1026 #, c-format msgid "invalid #%s directive" msgstr "ogiltigt #%s-direktiv" #: directives.c:1089 #, c-format msgid "registering pragmas in namespace \"%s\" with mismatched name expansion" msgstr "registrerar pragman i namnrymden \"%s\" med namnexpansion som inte passar ihop" #: directives.c:1098 #, c-format msgid "registering pragma \"%s\" with name expansion and no namespace" msgstr "registrerar pragma \"%s\" med namnexpansion och utan namnrymd" #: directives.c:1116 #, c-format msgid "registering \"%s\" as both a pragma and a pragma namespace" msgstr "registrerar \"%s\" bde som ett pragma och ett pragma namespace" #: directives.c:1119 #, c-format msgid "#pragma %s %s is already registered" msgstr "#pragma %s %s r redan registrerat" #: directives.c:1122 #, c-format msgid "#pragma %s is already registered" msgstr "#pragma %s r redan registrerat" #: directives.c:1152 msgid "registering pragma with NULL handler" msgstr "registrerar pragma med NULL-hanterare" #: directives.c:1362 msgid "#pragma once in main file" msgstr "#pragma once i huvudfil" #: directives.c:1385 msgid "invalid #pragma GCC poison directive" msgstr "ogiltigt GCC-direktiv #pragma poison" #: directives.c:1394 #, c-format msgid "poisoning existing macro \"%s\"" msgstr "frgiftar existerande makro \"%s\"" #: directives.c:1413 msgid "#pragma system_header ignored outside include file" msgstr "#pragma system_header ignorerat utanfr huvudfil" #: directives.c:1437 #, c-format msgid "cannot find source file %s" msgstr "kan inte hitta kllfil %s" #: directives.c:1441 #, c-format msgid "current file is older than %s" msgstr "aktuell fil r ldre n %s" #: directives.c:1620 msgid "_Pragma takes a parenthesized string literal" msgstr "_Pragma tar en strngkonstant inom parenteser" #: directives.c:1693 msgid "#else without #if" msgstr "#else utan #if" #: directives.c:1698 msgid "#else after #else" msgstr "#else efter #else" #: directives.c:1700 directives.c:1733 msgid "the conditional began here" msgstr "villkorssatsen brjade hr" #: directives.c:1726 msgid "#elif without #if" msgstr "#elif utan #if" #: directives.c:1731 msgid "#elif after #else" msgstr "#elif efter #else" #: directives.c:1761 msgid "#endif without #if" msgstr "#endif utan #if" #: directives.c:1838 msgid "missing '(' after predicate" msgstr "saknas '(' efter predikat" #: directives.c:1853 msgid "missing ')' to complete answer" msgstr "saknas ')' fr att avsluta svaret" #: directives.c:1873 msgid "predicate's answer is empty" msgstr "predikatets svar r tomt" #: directives.c:1900 msgid "assertion without predicate" msgstr "frskran utan predikat" #: directives.c:1902 msgid "predicate must be an identifier" msgstr "predikat mste vara en identifierare" #: directives.c:1988 #, c-format msgid "\"%s\" re-asserted" msgstr "\"%s\" omfrskrat" #: directives.c:2271 #, c-format msgid "unterminated #%s" msgstr "oavslutad #%s" #: directives-only.c:221 lex.c:1016 traditional.c:162 msgid "unterminated comment" msgstr "ej avslutad kommentar" #: errors.c:118 msgid "warning: " msgstr "varning: " #: errors.c:120 msgid "internal error: " msgstr "internt fel: " #: errors.c:122 msgid "error: " msgstr "fel: " #: errors.c:186 msgid "stdout" msgstr "standard ut" #: errors.c:188 #, c-format msgid "%s: %s" msgstr "%s: %s" #: expr.c:261 msgid "too many decimal points in number" msgstr "fr mnga decimalpunker i tal" #: expr.c:290 expr.c:365 #, fuzzy msgid "fixed-point constants are a GCC extension" msgstr "imaginra konstanter r en GCC-utvidgning" #: expr.c:303 #, fuzzy, c-format msgid "invalid digit \"%c\" in binary constant" msgstr "ogiltigt siffra \"%c\" i oktal konstant" #: expr.c:305 #, c-format msgid "invalid digit \"%c\" in octal constant" msgstr "ogiltigt siffra \"%c\" i oktal konstant" #: expr.c:313 #, fuzzy msgid "invalid prefix \"0b\" for floating constant" msgstr "ogiltigt suffix \"%.*s\" p flyttalskonstant" #: expr.c:319 msgid "use of C99 hexadecimal floating constant" msgstr "anvndning av hexadecimal flyttalskonstant enligt C99" #: expr.c:328 msgid "exponent has no digits" msgstr "exponenten har inga siffror" #: expr.c:335 msgid "hexadecimal floating constants require an exponent" msgstr "hexadecimala flyttalskonstanter mste ha en exponent" #: expr.c:341 #, c-format msgid "invalid suffix \"%.*s\" on floating constant" msgstr "ogiltigt suffix \"%.*s\" p flyttalskonstant" #: expr.c:351 expr.c:393 #, c-format msgid "traditional C rejects the \"%.*s\" suffix" msgstr "traditionell C tillter inte suffixet \"%.*s\"" #: expr.c:358 #, c-format msgid "invalid suffix \"%.*s\" with hexadecimal floating constant" msgstr "ogiltigt suffix \"%.*s\" p hexadecimal flyttalskonstant" #: expr.c:369 #, fuzzy msgid "decimal float constants are a GCC extension" msgstr "imaginra konstanter r en GCC-utvidgning" #: expr.c:379 #, c-format msgid "invalid suffix \"%.*s\" on integer constant" msgstr "ogiltig ndelse \"%.*s\" p heltalskonstant" #: expr.c:401 msgid "use of C99 long long integer constant" msgstr "anvndning av long long heltalskonstant enligt C99" #: expr.c:409 msgid "imaginary constants are a GCC extension" msgstr "imaginra konstanter r en GCC-utvidgning" #: expr.c:412 #, fuzzy msgid "binary constants are a GCC extension" msgstr "imaginra konstanter r en GCC-utvidgning" #: expr.c:505 msgid "integer constant is too large for its type" msgstr "heltalskonstant r fr stor fr sin typ" #: expr.c:517 msgid "integer constant is so large that it is unsigned" msgstr "heltalskonstant r s stor att den r teckenls" #: expr.c:612 msgid "missing ')' after \"defined\"" msgstr "saknar ')' efter \"defined\"" #: expr.c:619 msgid "operator \"defined\" requires an identifier" msgstr "operatorn \"defined\" mste ha en identiferare" #: expr.c:627 #, c-format msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "(\"%s\" r en alternativ symbol fr \"%s\" i C++)" #: expr.c:637 msgid "this use of \"defined\" may not be portable" msgstr "denna anvndning av \"defined\" r kanske inte portabel" #: expr.c:676 msgid "floating constant in preprocessor expression" msgstr "flyttalskonstant i preprocessoruttryck" #: expr.c:682 msgid "imaginary number in preprocessor expression" msgstr "imaginrt tal i preprocessoruttryck" #: expr.c:727 #, c-format msgid "\"%s\" is not defined" msgstr "\"%s\" r inte definierad" #: expr.c:855 expr.c:884 #, c-format msgid "missing binary operator before token \"%s\"" msgstr "saknad binr operator fre symbolen \"%s\"" #: expr.c:875 #, c-format msgid "token \"%s\" is not valid in preprocessor expressions" msgstr "symbolen \"%s\" r inte ett giltigt preprocessoruttryck" #: expr.c:892 msgid "missing expression between '(' and ')'" msgstr "saknat uttryck mellan \"(\" och \")\"" #: expr.c:895 msgid "#if with no expression" msgstr "#if utan uttryck" #: expr.c:898 #, c-format msgid "operator '%s' has no right operand" msgstr "operatorn \"%s\" har ingen hgra operand" #: expr.c:903 #, c-format msgid "operator '%s' has no left operand" msgstr "operatorn \"%s\" har ingen vnstra operand" #: expr.c:929 msgid " ':' without preceding '?'" msgstr "\":\" utan fregende \"?\"" #: expr.c:956 msgid "unbalanced stack in #if" msgstr "obalanserad stack i #if" #: expr.c:975 #, c-format msgid "impossible operator '%u'" msgstr "omjlig operator \"%u\"" #: expr.c:1065 msgid "missing ')' in expression" msgstr "saknad \")\" i uttryck" #: expr.c:1086 msgid "'?' without following ':'" msgstr "\"?\" utan fljande \":\"" #: expr.c:1096 msgid "integer overflow in preprocessor expression" msgstr "heltalsspill i preprocessoruttryck" #: expr.c:1101 msgid "missing '(' in expression" msgstr "saknad \"(\" i uttryck" #: expr.c:1133 #, c-format msgid "the left operand of \"%s\" changes sign when promoted" msgstr "vnsteroperanden till \"%s\" byter tecken vid befodran" #: expr.c:1138 #, c-format msgid "the right operand of \"%s\" changes sign when promoted" msgstr "hgeroperanden till \"%s\" byter tecken vid befodran" #: expr.c:1397 msgid "traditional C rejects the unary plus operator" msgstr "traditionell C hanterar inte operatorn unrt plus" #: expr.c:1480 msgid "comma operator in operand of #if" msgstr "kommaoperator i operand till #if" #: expr.c:1612 msgid "division by zero in #if" msgstr "division med noll i #if" #: files.c:442 msgid "NULL directory in find_file" msgstr "NOLL-katalog i find_file" #: files.c:480 msgid "one or more PCH files were found, but they were invalid" msgstr "en eller flera PCH-filer hittades, men de var inte korrekta" #: files.c:483 msgid "use -Winvalid-pch for more information" msgstr "anvnd -Winvalid-pch fr mer information" #: files.c:570 #, c-format msgid "%s is a block device" msgstr "%s r en blockenhet" #: files.c:587 #, c-format msgid "%s is too large" msgstr "%s r fr stor" #: files.c:622 #, c-format msgid "%s is shorter than expected" msgstr "%s r kortare n frvntat" #: files.c:852 #, c-format msgid "no include path in which to search for %s" msgstr "ingen huvudfilsskvg att leta efter %s i" #: files.c:1157 msgid "Multiple include guards may be useful for:\n" msgstr "Multipla inkluderingsvakter kan vara anvndbart fr:\n" #: init.c:426 msgid "cppchar_t must be an unsigned type" msgstr "cppchar_t mste vare en teckenls typ" #: init.c:430 #, c-format msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits" msgstr "preprocessoraretmetik har en hgsta precision p %lu bitar; mlet krver %lu bitar" #: init.c:437 msgid "CPP arithmetic must be at least as precise as a target int" msgstr "CPP-aritmetik mste vara tminstone s precis som mlets int" #: init.c:440 msgid "target char is less than 8 bits wide" msgstr "mlets char r mindre n 8 bitar bred" #: init.c:444 msgid "target wchar_t is narrower than target char" msgstr "mlets wchar_t r smalare n mlets char" #: init.c:448 msgid "target int is narrower than target char" msgstr "mlets int r smalare n mlets char" #: init.c:453 msgid "CPP half-integer narrower than CPP character" msgstr "CPP:s halva heltal r smalare n CPP:s tecken" #: init.c:457 #, c-format msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits" msgstr "CPP p denna vrd kan inte hantera breda teckenkonstanter ver %lu bitar, men mlet krver %lu bitar" #: lex.c:283 msgid "backslash and newline separated by space" msgstr "baktstreck och nyrad skiljda av mellanrum" #: lex.c:288 msgid "backslash-newline at end of file" msgstr "baktstreck-nyrad vid filslut" #: lex.c:303 #, c-format msgid "trigraph ??%c converted to %c" msgstr "trigraph ??%c konverterad till %c" #: lex.c:310 #, c-format msgid "trigraph ??%c ignored, use -trigraphs to enable" msgstr "trigraph ??%c ingorerad, anvnd -trigraphs fr att aktivera" #: lex.c:356 msgid "\"/*\" within comment" msgstr "\"/*\" i kommentar" #: lex.c:414 #, c-format msgid "%s in preprocessing directive" msgstr "%s i preprocessordirektiv" #: lex.c:423 msgid "null character(s) ignored" msgstr "nolltecken ignorerat" #: lex.c:460 #, c-format msgid "`%.*s' is not in NFKC" msgstr "\"%.*s\" r inte i NFKC" #: lex.c:463 #, c-format msgid "`%.*s' is not in NFC" msgstr "\"%.*s\" r inte i NFC" #: lex.c:551 #, c-format msgid "attempt to use poisoned \"%s\"" msgstr "frsk att anvnda frgiftad \"%s\"" #: lex.c:559 msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "__VA_ARGS__ kan endast dyka upp i expansionen av ett C99-makro med variabelt argumentantal" #: lex.c:659 msgid "null character(s) preserved in literal" msgstr "nolltecken bevarade i konstant" #: lex.c:662 #, c-format msgid "missing terminating %c character" msgstr "avslutande %c-tecken saknas" #: lex.c:1027 msgid "C++ style comments are not allowed in ISO C90" msgstr "C++ kommentarer tillts inte i ISO C90" #: lex.c:1029 msgid "(this will be reported only once per input file)" msgstr "(detta rapporteras bara en gng per infil)" #: lex.c:1034 msgid "multi-line comment" msgstr "flerradskommentar" #: lex.c:1347 #, c-format msgid "unspellable token %s" msgstr "ostavbar symbol %s" #: line-map.c:320 #, c-format msgid "In file included from %s:%u" msgstr "I fil inkluderad frn %s:%u" #: line-map.c:338 #, c-format msgid "" ",\n" " from %s:%u" msgstr "" ",\n" " frn %s:%u" #: macro.c:84 #, c-format msgid "macro \"%s\" is not used" msgstr "makrot \"%s\" r inte anvnt" #: macro.c:123 macro.c:319 #, c-format msgid "invalid built-in macro \"%s\"" msgstr "ogiltigt inbyggt makro \"%s\"" #: macro.c:157 msgid "could not determine file timestamp" msgstr "det gick inte att avgra fils tidsstmpel" #: macro.c:254 msgid "could not determine date and time" msgstr "det gick inte att avgra datum och tid" #: macro.c:270 msgid "__COUNTER__ expanded inside directive with -fdirectives-only" msgstr "" #: macro.c:423 msgid "invalid string literal, ignoring final '\\'" msgstr "ogiltig strngkonstant, inorerar avslutande \"\\\"" #: macro.c:483 #, c-format msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "att stta ihop \"%s\" och \"%s\" ger inte en giltigt preprocessorsymbol" #: macro.c:558 msgid "ISO C99 requires rest arguments to be used" msgstr "ISO C99 krver att restargument anvnds" #: macro.c:563 #, c-format msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "makrot \"%s\" krver %u argument, men endast %u anges" #: macro.c:568 #, c-format msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "makro \"%s\" skickade %u argument, men det tar bara %u" #: macro.c:679 traditional.c:680 #, c-format msgid "unterminated argument list invoking macro \"%s\"" msgstr "oavslutad argumentlista vid anrop av makrot \"%s\"" #: macro.c:782 #, c-format msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "funktionsliknande makrot \"%s\" mste anvndas med ett argument i traditionell C" #: macro.c:1325 #, c-format msgid "duplicate macro parameter \"%s\"" msgstr "dubblerad makroparameter \"%s\"" #: macro.c:1371 #, c-format msgid "\"%s\" may not appear in macro parameter list" msgstr "\"%s\" fr inte frekomma i en makroparameterlista" #: macro.c:1379 msgid "macro parameters must be comma-separated" msgstr "makroparametrar mste avdelas av komman" #: macro.c:1396 msgid "parameter name missing" msgstr "parameternamn saknas" #: macro.c:1413 msgid "anonymous variadic macros were introduced in C99" msgstr "anonyma variabla makron introducerades i C99" #: macro.c:1418 msgid "ISO C does not permit named variadic macros" msgstr "ISO C tillter inte namngivna variabla makron" #: macro.c:1427 msgid "missing ')' in macro parameter list" msgstr "saknad \")\" i makroparameterlista" #: macro.c:1476 msgid "'##' cannot appear at either end of a macro expansion" msgstr "\"##\" kan inte frekomma vid ngon av ndarna av makroexpansionen" #: macro.c:1510 msgid "ISO C99 requires whitespace after the macro name" msgstr "ISO C99 krver mellanrum efter makronamnet" #: macro.c:1534 msgid "missing whitespace after the macro name" msgstr "mellanrum saknas efter makronamn" #: macro.c:1564 msgid "'#' is not followed by a macro parameter" msgstr "\"#\" fljs inte av en makroparameter" #: macro.c:1683 #, c-format msgid "\"%s\" redefined" msgstr "\"%s\" omdefinierad" #: macro.c:1688 msgid "this is the location of the previous definition" msgstr "detta r platsen fr den tidigare definitionen" #: macro.c:1738 #, c-format msgid "macro argument \"%s\" would be stringified in traditional C" msgstr "makroargumentet \"%s\" skulle bli gjort till strng i traditionell C" #: macro.c:1761 #, c-format msgid "invalid hash type %d in cpp_macro_definition" msgstr "ogiltig hash-typ %d i cpp_macro_definition" #: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377 msgid "while writing precompiled header" msgstr "vid skrivning av frkompilerat huvud" #: pch.c:485 #, c-format msgid "%s: not used because `%.*s' not defined" msgstr "%s: inte anvnd fr att \"%.*s\" inte r definierad" #: pch.c:497 #, c-format msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'" msgstr "%s: anvnds inte fr att \"%.*s\" definieras som \"%s\" inte \"%.*s\"" #: pch.c:538 #, c-format msgid "%s: not used because `%s' is defined" msgstr "%s: inte anvnd fr att \"%s\" r definierad" #: pch.c:558 #, fuzzy, c-format msgid "%s: not used because `__COUNTER__' is invalid" msgstr "%s: inte anvnd fr att \"%s\" r definierad" #: pch.c:567 pch.c:737 msgid "while reading precompiled header" msgstr "vid lsning av frkompilerat huvud" #: traditional.c:750 #, c-format msgid "detected recursion whilst expanding macro \"%s\"" msgstr "upptckte rekursion vid under expansion av makrot \"%s\"" #: traditional.c:917 msgid "syntax error in macro parameter list" msgstr "syntaxfel i makroparameterlista" #~ msgid "no newline at end of file" #~ msgstr "inget nyradstecken vid slutet av filen" nescc-1.3.4/libcpp/po/tr.po000066400000000000000000000611021177770303300154760ustar00rootroot00000000000000# Turkish translations for cpplib messages. # Copyright (C) 2007 Free Software Foundation, Inc. # # Nilgün Belma Bugüner , 2001, ..., 2007. msgid "" msgstr "" "Project-Id-Version: cpplib 4.2.0\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2007-11-08 21:08+0000\n" "PO-Revision-Date: 2007-05-23 01:17+0300\n" "Last-Translator: Nilgün Belma Bugüner \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: charset.c:654 #, c-format msgid "conversion from %s to %s not supported by iconv" msgstr "%s ile %s arasında dönüşüm iconv tarafından desteklenmiyor" #: charset.c:657 msgid "iconv_open" msgstr "iconv_open" #: charset.c:665 #, c-format msgid "no iconv implementation, cannot convert from %s to %s" msgstr "iconv bulunamadığından %s ile %s karakter kümeleri arasında dönüşüm yapılamıyor" #: charset.c:742 #, c-format msgid "character 0x%lx is not in the basic source character set\n" msgstr "0x%lx karakteri temel kaynak karakter kümesinde değil\n" #: charset.c:759 charset.c:1352 msgid "converting to execution character set" msgstr "çalışma karakter kümesine dönüştürülüyor" #: charset.c:765 #, c-format msgid "character 0x%lx is not unibyte in execution character set" msgstr "0x%lx karakteri icra karakter kümesindeki tek baytlık karakterlerden değil" #: charset.c:889 #, c-format msgid "Character %x might not be NFKC" msgstr "%x karakteri NFKC olmayabilir" #: charset.c:949 msgid "universal character names are only valid in C++ and C99" msgstr "evrensel karakter isimleri sadece C++ ve C99 için geçerlidir" #: charset.c:952 #, c-format msgid "the meaning of '\\%c' is different in traditional C" msgstr "`\\%c'nin anlamı geleneksel C'de farklıdır" #: charset.c:961 msgid "In _cpp_valid_ucn but not a UCN" msgstr "Bir UCN içinde değil, _cpp_valid_ucn içinde" #: charset.c:986 #, c-format msgid "incomplete universal character name %.*s" msgstr "evrensel karakter ismi %.*s tamamlanmamış" #: charset.c:998 #, c-format msgid "%.*s is not a valid universal character" msgstr "%.*s geçerli bir evrensel karakter değil" #: charset.c:1008 lex.c:484 msgid "'$' in identifier or number" msgstr "belirteç ya da sayı içinde '$'" #: charset.c:1018 #, c-format msgid "universal character %.*s is not valid in an identifier" msgstr "evrensel karakter %.*s bir belirteç içinde geçerli değil" #: charset.c:1022 #, c-format msgid "universal character %.*s is not valid at the start of an identifier" msgstr "evrensel karakter %.*s bir belirtecin başında geçerli değil" #: charset.c:1056 charset.c:1571 msgid "converting UCN to source character set" msgstr "UCN'den kaynak karakter kümesine dönüşüm" #: charset.c:1060 msgid "converting UCN to execution character set" msgstr "UCN'den icra karakter kümesine dönüşüm" #: charset.c:1132 msgid "the meaning of '\\x' is different in traditional C" msgstr "'\\x'in anlamı geleneksel C'de farklıdır" #: charset.c:1149 msgid "\\x used with no following hex digits" msgstr "\\x izleyen onaltılık rakamlar olmaksızın kullanılmış" #: charset.c:1156 msgid "hex escape sequence out of range" msgstr "onaltılık önceleme dizgesi kapsamdışı" #: charset.c:1195 msgid "octal escape sequence out of range" msgstr "sekizlik önceleme dizgesi kapsamdışı" #: charset.c:1263 msgid "the meaning of '\\a' is different in traditional C" msgstr "`\\a'nın anlamı geleneksel C'de farklıdır" #: charset.c:1270 #, c-format msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "ISO standardı olmayan önceleme dizgesi, '\\%c'" #: charset.c:1278 #, c-format msgid "unknown escape sequence '\\%c'" msgstr "bilinmeyen önceleme dizgesi '\\%c'" #: charset.c:1286 #, c-format msgid "unknown escape sequence: '\\%s'" msgstr "bilinmeyen önceleme dizgesi '\\%s'" #: charset.c:1293 msgid "converting escape sequence to execution character set" msgstr "önceleme diziliminden icra karakter kümesine dönüşüm" #: charset.c:1415 charset.c:1478 msgid "character constant too long for its type" msgstr "karakter sabiti, türü için çok uzun" #: charset.c:1418 msgid "multi-character character constant" msgstr "çoklu-karakter karakter sabiti" #: charset.c:1510 msgid "empty character constant" msgstr "karakter sabit boş" #: charset.c:1612 #, c-format msgid "failure to convert %s to %s" msgstr "`%s' ile `%s' arasında dönüşüm başarısız" #: directives.c:215 directives.c:241 #, c-format msgid "extra tokens at end of #%s directive" msgstr "#%s yönergesinin sonunda fazladan dizgecikler" #: directives.c:344 #, c-format msgid "#%s is a GCC extension" msgstr "#%s bir GCC uzantısıdır" #: directives.c:356 msgid "suggest not using #elif in traditional C" msgstr "geleneksel C'de #elif kullanılmıyor varsayılır" #: directives.c:359 #, c-format msgid "traditional C ignores #%s with the # indented" msgstr "geleneksel C'de girintili # ile #%s yoksayılır" #: directives.c:363 #, c-format msgid "suggest hiding #%s from traditional C with an indented #" msgstr "geleneksel C'den #%s in saklanması için bir girintili # kullanılmış farzedilir" #: directives.c:389 msgid "embedding a directive within macro arguments is not portable" msgstr "bir yönergenin makro argümanlarla gömülmesi uyarlanabilir değil" #: directives.c:409 msgid "style of line directive is a GCC extension" msgstr "satır yönergesinin tarzı bir GCC özelliğidir" #: directives.c:464 #, c-format msgid "invalid preprocessing directive #%s" msgstr "önişlem yönergesi #%s geçersiz" #: directives.c:532 msgid "\"defined\" cannot be used as a macro name" msgstr "\"defined\" makro ismi olarak kullanılamaz" #: directives.c:538 #, c-format msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "\"%s\" C++'da bir işleç olduğundan makro ismi olarak kullanılamaz" #: directives.c:541 #, c-format msgid "no macro name given in #%s directive" msgstr "#%s yönergesinde makro ismi verilmemiş" #: directives.c:544 msgid "macro names must be identifiers" msgstr "makro isimleri tanımlayıcılar olmalı" #: directives.c:585 #, c-format msgid "undefining \"%s\"" msgstr "tanımsız yapılan \"%s\"" #: directives.c:640 msgid "missing terminating > character" msgstr "sonlandıran > karakteri eksik" #: directives.c:695 #, c-format msgid "#%s expects \"FILENAME\" or " msgstr "#%s \"DOSYA\" ya da gerektirir" #: directives.c:739 #, c-format msgid "empty filename in #%s" msgstr "#%s ile belirtilen dosya boş" #: directives.c:749 msgid "#include nested too deeply" msgstr "#include iç içeliği çok derin" #: directives.c:790 msgid "#include_next in primary source file" msgstr "birncil kaynak dosyasında #include_next" #: directives.c:816 #, c-format msgid "invalid flag \"%s\" in line directive" msgstr "satır yönergesinde geçersiz \"%s\" seçeneği" #: directives.c:868 #, c-format msgid "\"%s\" after #line is not a positive integer" msgstr "#line'dan sonraki \"%s\" bir pozitif tamsayı değil" #: directives.c:874 msgid "line number out of range" msgstr "satır numarası kapsam dışı" #: directives.c:887 directives.c:964 #, c-format msgid "\"%s\" is not a valid filename" msgstr "\"%s\" geçerli bir dosya ismi değil" #: directives.c:924 #, c-format msgid "\"%s\" after # is not a positive integer" msgstr "#'dan sonraki \"%s\" bir pozitif tamsayı değil" #: directives.c:1026 #, c-format msgid "invalid #%s directive" msgstr "#%s yönergesi geçersiz" #: directives.c:1089 #, c-format msgid "registering pragmas in namespace \"%s\" with mismatched name expansion" msgstr "\"%s\" isim-alanındaki pragmalar uyumsuz isim yorumlaması ile kaydediliyor" #: directives.c:1098 #, c-format msgid "registering pragma \"%s\" with name expansion and no namespace" msgstr "pragma \"%s\" isim alansız olarak isim yorumlamasıyla kaydediliyor" #: directives.c:1116 #, c-format msgid "registering \"%s\" as both a pragma and a pragma namespace" msgstr "\"%s\" hem pragma hem de pragma isim alanı olarak kaydediliyor" #: directives.c:1119 #, c-format msgid "#pragma %s %s is already registered" msgstr "#pragma %s %s zaten kayıtlı" #: directives.c:1122 #, c-format msgid "#pragma %s is already registered" msgstr "#pragma %s zaten kayıtlı" #: directives.c:1152 msgid "registering pragma with NULL handler" msgstr "pragma NULL eylemci ile kaydediliyor" #: directives.c:1362 msgid "#pragma once in main file" msgstr "main dosyasında '#pragma once'" #: directives.c:1385 msgid "invalid #pragma GCC poison directive" msgstr "geçersiz #pragma GCC poison yönergesi" #: directives.c:1394 #, c-format msgid "poisoning existing macro \"%s\"" msgstr "zehirlenen mevcut makro \"%s\"" #: directives.c:1413 msgid "#pragma system_header ignored outside include file" msgstr "başlık dosyasının dışındaki '#pragma system_header' yoksayıldı" #: directives.c:1437 #, c-format msgid "cannot find source file %s" msgstr "%s kaynak dosyası bulunamıyor" #: directives.c:1441 #, c-format msgid "current file is older than %s" msgstr "mevcut dosya %s den daha eski" #: directives.c:1620 msgid "_Pragma takes a parenthesized string literal" msgstr "_Pragma bir parantezli dizge sabiti alır" #: directives.c:1693 msgid "#else without #if" msgstr "#if siz #else" #: directives.c:1698 msgid "#else after #else" msgstr "#else den sonra #else" #: directives.c:1700 directives.c:1733 msgid "the conditional began here" msgstr "koşul başlangıcı burası" #: directives.c:1726 msgid "#elif without #if" msgstr "#if siz #elif " #: directives.c:1731 msgid "#elif after #else" msgstr "#else den sonra #elif" #: directives.c:1761 msgid "#endif without #if" msgstr "#if siz #endif" #: directives.c:1838 msgid "missing '(' after predicate" msgstr "dayanaktan sonra '(' eksik" #: directives.c:1853 msgid "missing ')' to complete answer" msgstr "yanıtı tamamlayacak ')' eksik" #: directives.c:1873 msgid "predicate's answer is empty" msgstr "dayanakların cevabı boş" #: directives.c:1900 msgid "assertion without predicate" msgstr "dayanaksız olumlama" #: directives.c:1902 msgid "predicate must be an identifier" msgstr "dayanak bir tanımlayıcı olmalı" #: directives.c:1988 #, c-format msgid "\"%s\" re-asserted" msgstr "\"%s\" tekrar olumlanmış" #: directives.c:2271 #, c-format msgid "unterminated #%s" msgstr "sonlandırılmamış #%s" #: directives-only.c:221 lex.c:1016 traditional.c:162 msgid "unterminated comment" msgstr "sonlandırılmamış açıklama" #: errors.c:118 msgid "warning: " msgstr "uyarı: " #: errors.c:120 msgid "internal error: " msgstr "iç hata: " #: errors.c:122 msgid "error: " msgstr "hata: " #: errors.c:186 msgid "stdout" msgstr "stdÇ" #: errors.c:188 #, c-format msgid "%s: %s" msgstr "%s: %s" #: expr.c:261 msgid "too many decimal points in number" msgstr "sayı içindeki ondalık nokta sayısı çok fazla" #: expr.c:290 expr.c:365 #, fuzzy msgid "fixed-point constants are a GCC extension" msgstr "sanal sabitler bir GCC genişletmesidir" #: expr.c:303 #, fuzzy, c-format msgid "invalid digit \"%c\" in binary constant" msgstr "sekizlik sabit içindeki \"%c\" geçersiz" #: expr.c:305 #, c-format msgid "invalid digit \"%c\" in octal constant" msgstr "sekizlik sabit içindeki \"%c\" geçersiz" #: expr.c:313 #, fuzzy msgid "invalid prefix \"0b\" for floating constant" msgstr "gerçel sabitin \"%.*s\" soneki geçersiz" #: expr.c:319 msgid "use of C99 hexadecimal floating constant" msgstr "C99 onaltılık gerçel sayı sabit kullanımı" #: expr.c:328 msgid "exponent has no digits" msgstr "üs rakam içermiyor" #: expr.c:335 msgid "hexadecimal floating constants require an exponent" msgstr "onaltılık gerçel sabitler bir üs gerektirir" #: expr.c:341 #, c-format msgid "invalid suffix \"%.*s\" on floating constant" msgstr "gerçel sabitin \"%.*s\" soneki geçersiz" #: expr.c:351 expr.c:393 #, c-format msgid "traditional C rejects the \"%.*s\" suffix" msgstr "geleneksel C \"%.*s\" sonekini kullanmaz" #: expr.c:358 #, c-format msgid "invalid suffix \"%.*s\" with hexadecimal floating constant" msgstr "onaltılık kayan sabitli \"%.*s\" soneki geçersiz" #: expr.c:369 #, fuzzy msgid "decimal float constants are a GCC extension" msgstr "sanal sabitler bir GCC genişletmesidir" #: expr.c:379 #, c-format msgid "invalid suffix \"%.*s\" on integer constant" msgstr "tamsayı sabitte sonek \"%.*s\" soneki geçersiz" #: expr.c:401 msgid "use of C99 long long integer constant" msgstr "ISO C99 long long tamsayı sabitleri yasaklar" #: expr.c:409 msgid "imaginary constants are a GCC extension" msgstr "sanal sabitler bir GCC genişletmesidir" #: expr.c:412 #, fuzzy msgid "binary constants are a GCC extension" msgstr "sanal sabitler bir GCC genişletmesidir" #: expr.c:505 msgid "integer constant is too large for its type" msgstr "tamsayı sabit, türü için oldukça büyük" #: expr.c:517 msgid "integer constant is so large that it is unsigned" msgstr "tamsayı sabit unsigned olarak oldukça büyük" #: expr.c:612 msgid "missing ')' after \"defined\"" msgstr "\"defined\" dan sonra ')' eksik" #: expr.c:619 msgid "operator \"defined\" requires an identifier" msgstr "\"defined\" işleci bir tanımlayıcı gerektirir" #: expr.c:627 #, c-format msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "(C++'da \"%s\" \"%s\" için bir alternatif dizgeciktir)" #: expr.c:637 msgid "this use of \"defined\" may not be portable" msgstr "\"defined\" bu kullanımıyla uyarlanabilir olmayabilir" #: expr.c:676 msgid "floating constant in preprocessor expression" msgstr "önişlemci ifadesinde gerçel sayı taşması" #: expr.c:682 msgid "imaginary number in preprocessor expression" msgstr "önişlemci ifadesinde sanal sayı" #: expr.c:727 #, c-format msgid "\"%s\" is not defined" msgstr "\"%s\" tanımlı değil" #: expr.c:855 expr.c:884 #, c-format msgid "missing binary operator before token \"%s\"" msgstr "\"%s\" dizgeciğinden önceki iki terimli işleç eksik" #: expr.c:875 #, c-format msgid "token \"%s\" is not valid in preprocessor expressions" msgstr "\"%s\" dizgeciği önişlemci ifadelerinde geçersizdir" #: expr.c:892 msgid "missing expression between '(' and ')'" msgstr "'(' ve ')' arasında ifade eksik" #: expr.c:895 msgid "#if with no expression" msgstr "#if ifadesiz" #: expr.c:898 #, c-format msgid "operator '%s' has no right operand" msgstr "`%s' işlecinin sağ tarafı yok" #: expr.c:903 #, c-format msgid "operator '%s' has no left operand" msgstr "`%s' işlecinin sol terimi yok" #: expr.c:929 msgid " ':' without preceding '?'" msgstr "':' den önce '?' yok" #: expr.c:956 msgid "unbalanced stack in #if" msgstr "#if ifadesinde karşılıksız yığın" #: expr.c:975 #, c-format msgid "impossible operator '%u'" msgstr "işleç '%u' imkansız" #: expr.c:1065 msgid "missing ')' in expression" msgstr "ifadede ')' eksik" #: expr.c:1086 msgid "'?' without following ':'" msgstr "'?' dan sonra ':' yok" #: expr.c:1096 msgid "integer overflow in preprocessor expression" msgstr "önişlemci ifadesinde tamsayı taşması" #: expr.c:1101 msgid "missing '(' in expression" msgstr "ifadede '(' eksik" #: expr.c:1133 #, c-format msgid "the left operand of \"%s\" changes sign when promoted" msgstr "\"%s\"in soldaki terimi yükseltgenirken işaret değiştiriyor" #: expr.c:1138 #, c-format msgid "the right operand of \"%s\" changes sign when promoted" msgstr "\"%s\"in sağdaki terimi yükseltgenirken işaret değiştiriyor" #: expr.c:1397 msgid "traditional C rejects the unary plus operator" msgstr "geleneksel C tekil artı işlecini dışlar" #: expr.c:1480 msgid "comma operator in operand of #if" msgstr "#if'in teriminde virgül" #: expr.c:1612 msgid "division by zero in #if" msgstr "#if içinde sıfırla bölme" #: files.c:442 msgid "NULL directory in find_file" msgstr "find_file içinde boş dizin" #: files.c:480 msgid "one or more PCH files were found, but they were invalid" msgstr "bir veya daha fazla PCH dosyası bulundu ama bunlar geçersiz" #: files.c:483 msgid "use -Winvalid-pch for more information" msgstr "daha fazla bilgi almak için -Winvalid-pch kullanın" #: files.c:570 #, c-format msgid "%s is a block device" msgstr "%s bir blok aygıtıdır" #: files.c:587 #, c-format msgid "%s is too large" msgstr "%s çok büyük" #: files.c:622 #, c-format msgid "%s is shorter than expected" msgstr "%s beklenenden daha kısa" #: files.c:852 #, c-format msgid "no include path in which to search for %s" msgstr "%s için aranacaklar içinde başlık dosyaları yolu yok" #: files.c:1157 msgid "Multiple include guards may be useful for:\n" msgstr "Çoklu include önlemleri aşağıdakiler için kullanışlı olabilir:\n" #: init.c:426 msgid "cppchar_t must be an unsigned type" msgstr "cppchar_t bir usigned tür olmalı" #: init.c:430 #, c-format msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits" msgstr "önişlemci aritmetiği %lu bitlik maksimum genişliğe sahip; hedef için %lu bit gerekiyor" #: init.c:437 msgid "CPP arithmetic must be at least as precise as a target int" msgstr "CPP aritmetiği en azından bir hedef int kadar genişlikte olmalı " #: init.c:440 msgid "target char is less than 8 bits wide" msgstr "hedef char 8bitlik genişlikten küçük" #: init.c:444 msgid "target wchar_t is narrower than target char" msgstr "hedef wchar_t hedef char'dan daha dar" #: init.c:448 msgid "target int is narrower than target char" msgstr "hedef int hedef char'dan daha dar" #: init.c:453 msgid "CPP half-integer narrower than CPP character" msgstr "CPP half-integer'ı CPP character'dan daha dar" #: init.c:457 #, c-format msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits" msgstr "Bu konaktaki CPP %lu bitten büyük karakter sabitleriyle çalışamaz, hedef ise %lu bit gerektiriyor" #: lex.c:283 msgid "backslash and newline separated by space" msgstr "ters bölü ve satırsonu arasında boşluk var" #: lex.c:288 msgid "backslash-newline at end of file" msgstr "dosyanın sonunda tersbölülü satırsonu" #: lex.c:303 #, c-format msgid "trigraph ??%c converted to %c" msgstr "??%c üçlü harfi %c olarak dönüştürüldü" #: lex.c:310 #, c-format msgid "trigraph ??%c ignored, use -trigraphs to enable" msgstr "??%c üçlü harfi yoksayıldı, yoksayılmaması için -trigraphs kullanın" #: lex.c:356 msgid "\"/*\" within comment" msgstr "açıklama içinde \"/*\" bulundu" #: lex.c:414 #, c-format msgid "%s in preprocessing directive" msgstr "önişlem yönergesi içinde %s" #: lex.c:423 msgid "null character(s) ignored" msgstr "null karakter(ler) yoksayıldı" #: lex.c:460 #, c-format msgid "`%.*s' is not in NFKC" msgstr "`%.*s' NFKC'de yok" #: lex.c:463 #, c-format msgid "`%.*s' is not in NFC" msgstr "`%.*s' NFC'de yok" #: lex.c:551 #, c-format msgid "attempt to use poisoned \"%s\"" msgstr "zehirli \"%s\" kullanılmaya çalışılıyor" #: lex.c:559 msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "__VA_ARGS__ sadece argümanlarının sayısı değişebilen bir C99 makrosunun genişleme alanında görünebilir" #: lex.c:659 msgid "null character(s) preserved in literal" msgstr "null karakter(ler) sabit içinde saklanmış" #: lex.c:662 #, c-format msgid "missing terminating %c character" msgstr "sonlandıran %c karakteri eksik" #: lex.c:1027 msgid "C++ style comments are not allowed in ISO C90" msgstr "C++ tarzı açıklamalara ISO C90'da izin verilmez" #: lex.c:1029 msgid "(this will be reported only once per input file)" msgstr "(her girdi dosyasında sadece bir kere raporlanacaktır)" #: lex.c:1034 msgid "multi-line comment" msgstr "çok satırlı açıklama" #: lex.c:1347 #, c-format msgid "unspellable token %s" msgstr "dizgecik %s okunabilir değil" #: line-map.c:320 #, c-format msgid "In file included from %s:%u" msgstr "" "Sırayla bir altındaki dosyada içerilerek:\n" "\t\t%s:%u" #: line-map.c:338 #, c-format msgid "" ",\n" " from %s:%u" msgstr "" ",\n" "\t\t%s:%u" #: macro.c:84 #, c-format msgid "macro \"%s\" is not used" msgstr "\"%s\" makrosu kullanılmadı" #: macro.c:123 macro.c:319 #, c-format msgid "invalid built-in macro \"%s\"" msgstr "geçersiz yerleşik makro \"%s\"" #: macro.c:157 msgid "could not determine file timestamp" msgstr "dosya tarih damgası saptanamadı" #: macro.c:254 msgid "could not determine date and time" msgstr "tarih ve saat saptanamadı" #: macro.c:270 msgid "__COUNTER__ expanded inside directive with -fdirectives-only" msgstr "" #: macro.c:423 msgid "invalid string literal, ignoring final '\\'" msgstr "geçersiz dizge sabit, son '\\' yoksayılıyor" #: macro.c:483 #, c-format msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "\"%s\" ve \"%s\" geçişi geçerli bir önişlem dizgeciği vermez" #: macro.c:558 msgid "ISO C99 requires rest arguments to be used" msgstr "ISO C kalan argümanların kullanılmış olmasını gerektirir" #: macro.c:563 #, c-format msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "makro \"%s\" %u argüman gerektiriyor ama sadece %u argüman verilmiş" #: macro.c:568 #, c-format msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "makro \"%s\" için %u argüman verilmiş ama tam %u argüman alıyor" #: macro.c:679 traditional.c:680 #, c-format msgid "unterminated argument list invoking macro \"%s\"" msgstr "sonlandırılmamış argüman listesi çağıran makro \"%s\"" #: macro.c:782 #, c-format msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "işlev benzeri makro \"%s\" geleneksel C'de argümanlarla kullanılmalıdır" #: macro.c:1325 #, c-format msgid "duplicate macro parameter \"%s\"" msgstr "yinelenmiş makro parametresi \"%s\"" #: macro.c:1371 #, c-format msgid "\"%s\" may not appear in macro parameter list" msgstr "\"%s\" makro parametre listesinde görünmeyebilir" #: macro.c:1379 msgid "macro parameters must be comma-separated" msgstr "makro parametreleri virgüllerle ayrılmış olmalı" #: macro.c:1396 msgid "parameter name missing" msgstr "parametre ismi eksik" #: macro.c:1413 msgid "anonymous variadic macros were introduced in C99" msgstr "argümanlarının sayısı değişebilen anonim makrolar C99 da tanıtıldı" #: macro.c:1418 msgid "ISO C does not permit named variadic macros" msgstr "ISO C argümanlarının sayısı değişebilen isimli makrolara izin vermez" #: macro.c:1427 msgid "missing ')' in macro parameter list" msgstr "makro parametre listesinde ')' eksik" #: macro.c:1476 msgid "'##' cannot appear at either end of a macro expansion" msgstr "'##' bir makronun her iki ucunda da görünemez" #: macro.c:1510 msgid "ISO C99 requires whitespace after the macro name" msgstr "ISO C99 makro isminden sonra boşluk gerektirir" #: macro.c:1534 msgid "missing whitespace after the macro name" msgstr "makro isminden sonra boşluk gerekir" #: macro.c:1564 msgid "'#' is not followed by a macro parameter" msgstr "'#' işaretinden sonra bir makro parametresi yok" #: macro.c:1683 #, c-format msgid "\"%s\" redefined" msgstr "\"%s\" yeniden tanımlanmış" #: macro.c:1688 msgid "this is the location of the previous definition" msgstr "burası evvelki tanımın yapıldığı yer" #: macro.c:1738 #, c-format msgid "macro argument \"%s\" would be stringified in traditional C" msgstr "makro argümanı \"%s\" geleneksel C'de dizgelenmiş olmalıydı" #: macro.c:1761 #, c-format msgid "invalid hash type %d in cpp_macro_definition" msgstr "cpp_macro_definition içindeki isimli yapı türü %d geçersiz" #: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377 msgid "while writing precompiled header" msgstr "önderlemeli başlık yazılırken" #: pch.c:485 #, c-format msgid "%s: not used because `%.*s' not defined" msgstr "%s: `%.*s' tanımlı olmadığından kullanılmadı" #: pch.c:497 #, c-format msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'" msgstr "%s: `%.*s' kullanılmadı çünkü `%s' olarak tanımlı, `%.*s' değil" #: pch.c:538 #, c-format msgid "%s: not used because `%s' is defined" msgstr "%s: `%s' tanımlı olduğundan kullanılmadı" #: pch.c:558 #, fuzzy, c-format msgid "%s: not used because `__COUNTER__' is invalid" msgstr "%s: `%s' tanımlı olduğundan kullanılmadı" #: pch.c:567 pch.c:737 msgid "while reading precompiled header" msgstr "önderlemeli başlık okunurken" #: traditional.c:750 #, c-format msgid "detected recursion whilst expanding macro \"%s\"" msgstr "makro \"%s\" genişletilirken iç içelik saptandı" #: traditional.c:917 msgid "syntax error in macro parameter list" msgstr "makro parametre listesinde sözdizimi hatası" #~ msgid "no newline at end of file" #~ msgstr "dosya sonunda satırsonu karakteri yok" nescc-1.3.4/libcpp/po/uk.po000066400000000000000000000747671177770303300155150ustar00rootroot00000000000000# Ukrainian translation of cpplib. # Copyright (C) 2007 Free Software Foundation, Inc. # Maxim V. Dziumanenko , 2007. # msgid "" msgstr "" "Project-Id-Version: cpplib 4.2.1\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2007-11-08 21:08+0000\n" "PO-Revision-Date: 2007-08-17 11:23+0300\n" "Last-Translator: Maxim V. Dziumanenko \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: charset.c:654 #, c-format msgid "conversion from %s to %s not supported by iconv" msgstr "перетворення з %s у %s не підтримується iconv" #: charset.c:657 msgid "iconv_open" msgstr "iconv_open" #: charset.c:665 #, c-format msgid "no iconv implementation, cannot convert from %s to %s" msgstr "відсутня реалізація iconv, не вдається перетворити з %s на %s" #: charset.c:742 #, c-format msgid "character 0x%lx is not in the basic source character set\n" msgstr "символ 0x%lx відсутній у базовому первинному наборі символів\n" #: charset.c:759 charset.c:1352 msgid "converting to execution character set" msgstr "перетворення на виконуваний набір символів" #: charset.c:765 #, c-format msgid "character 0x%lx is not unibyte in execution character set" msgstr "символ 0x%lx не однобайтовий у виконуваному наборі символів" #: charset.c:889 #, c-format msgid "Character %x might not be NFKC" msgstr "Символ %x може не бути NFKC" #: charset.c:949 msgid "universal character names are only valid in C++ and C99" msgstr "універсальні назви символів допустимі лише у C++ та C99" #: charset.c:952 #, c-format msgid "the meaning of '\\%c' is different in traditional C" msgstr "сенс '\\%c' відрізняється від традиційної мови C" #: charset.c:961 msgid "In _cpp_valid_ucn but not a UCN" msgstr "У _cpp_valid_ucn але не UCN" #: charset.c:986 #, c-format msgid "incomplete universal character name %.*s" msgstr "неповна універсальна назва символу %.*s" #: charset.c:998 #, c-format msgid "%.*s is not a valid universal character" msgstr "%.*s не є допустимим універсальним символом" #: charset.c:1008 lex.c:484 msgid "'$' in identifier or number" msgstr "'$' у ідентифікаторі чи числі" #: charset.c:1018 #, c-format msgid "universal character %.*s is not valid in an identifier" msgstr "універсальний символ %.*s не є допустимим у ідентифікаторі" #: charset.c:1022 #, c-format msgid "universal character %.*s is not valid at the start of an identifier" msgstr "універсальний символ %.*s не є допустимим на початку ідентифікатора" #: charset.c:1056 charset.c:1571 msgid "converting UCN to source character set" msgstr "перетворення UCN на первинний набір символів" #: charset.c:1060 msgid "converting UCN to execution character set" msgstr "перетворення UCN на виконуваний набір символів" #: charset.c:1132 msgid "the meaning of '\\x' is different in traditional C" msgstr "сенс '\\x' відрізняється від традиційної мови C" #: charset.c:1149 msgid "\\x used with no following hex digits" msgstr "\\x використовується з наступними шістнадцятковими цифрами" #: charset.c:1156 msgid "hex escape sequence out of range" msgstr "шістнадцяткова escape-послідовність поза межами діапазону" #: charset.c:1195 msgid "octal escape sequence out of range" msgstr "вісімкова escape-послідовність поза межами діапазону" #: charset.c:1263 msgid "the meaning of '\\a' is different in traditional C" msgstr "сенс '\\a' відрізняється від традиційної мови C" #: charset.c:1270 #, c-format msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "escape-послідовність не за стандартом ISO, '\\%c'" #: charset.c:1278 #, c-format msgid "unknown escape sequence '\\%c'" msgstr "Невідома escape-послідовність '\\%c'" #: charset.c:1286 #, c-format msgid "unknown escape sequence: '\\%s'" msgstr "Невідома escape-послідовність: '\\%s'" #: charset.c:1293 msgid "converting escape sequence to execution character set" msgstr "escape-послідовність перетворюється на виконуваний набір символів" #: charset.c:1415 charset.c:1478 msgid "character constant too long for its type" msgstr "символьна константа надто довга для вказаного типу" #: charset.c:1418 msgid "multi-character character constant" msgstr "багатосимвольна символьна константа" #: charset.c:1510 msgid "empty character constant" msgstr "порожня символьна константа" #: charset.c:1612 #, c-format msgid "failure to convert %s to %s" msgstr "помилка при перетворені %s на %s" #: directives.c:215 directives.c:241 #, c-format msgid "extra tokens at end of #%s directive" msgstr "зайві лексеми наприкінці директиви #%s" #: directives.c:344 #, c-format msgid "#%s is a GCC extension" msgstr "#%s є розширенням GCC" #: directives.c:356 msgid "suggest not using #elif in traditional C" msgstr "рекомендується не використовувати #elif у традиційній мові C" #: directives.c:359 #, c-format msgid "traditional C ignores #%s with the # indented" msgstr "у традиційній мові C ігноруються #%s, якщо # з відступом" #: directives.c:363 #, c-format msgid "suggest hiding #%s from traditional C with an indented #" msgstr "рекомендується приховувати #%s у традиційній мові C використовуючи відступ перед #" #: directives.c:389 msgid "embedding a directive within macro arguments is not portable" msgstr "вбудована директива з макро-аргументами не є переносимою" #: directives.c:409 msgid "style of line directive is a GCC extension" msgstr "стиль директиви line є розширенням GCC" #: directives.c:464 #, c-format msgid "invalid preprocessing directive #%s" msgstr "неправильна директива препроцесора #%s" #: directives.c:532 msgid "\"defined\" cannot be used as a macro name" msgstr "\"defined\" не може використовуватись як назва макросу" #: directives.c:538 #, c-format msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "\"%s\" не може використовуватись як назва макросу, оскільки це - оператор у C++" #: directives.c:541 #, c-format msgid "no macro name given in #%s directive" msgstr "не вказаний макрос у директиві #%s" #: directives.c:544 msgid "macro names must be identifiers" msgstr "назви макросів повинні бути ідентифікаторами" #: directives.c:585 #, c-format msgid "undefining \"%s\"" msgstr "скасовується визначення \"%s\"" #: directives.c:640 msgid "missing terminating > character" msgstr "відсутній завершальний символ >" #: directives.c:695 #, c-format msgid "#%s expects \"FILENAME\" or " msgstr "#%s очікує \"FILENAME\" або " #: directives.c:739 #, c-format msgid "empty filename in #%s" msgstr "порожня назва файлу у #%s" #: directives.c:749 msgid "#include nested too deeply" msgstr "надто глибоке вкладання #include" #: directives.c:790 msgid "#include_next in primary source file" msgstr "#include_next у первинному файлі тексту програми" #: directives.c:816 #, c-format msgid "invalid flag \"%s\" in line directive" msgstr "некоректна ознака \"%s\" у директиві line" #: directives.c:868 #, c-format msgid "\"%s\" after #line is not a positive integer" msgstr "\"%s\" після #line не є додатнім цілим числом" #: directives.c:874 msgid "line number out of range" msgstr "номер рядка за межами діапазону" #: directives.c:887 directives.c:964 #, c-format msgid "\"%s\" is not a valid filename" msgstr "\"%s\" не є коректною назвою файлу" #: directives.c:924 #, c-format msgid "\"%s\" after # is not a positive integer" msgstr "\"%s\" після # не є додатнім цілим числом" #: directives.c:1026 #, c-format msgid "invalid #%s directive" msgstr "некоректна директива #%s" #: directives.c:1089 #, c-format msgid "registering pragmas in namespace \"%s\" with mismatched name expansion" msgstr "прагми реєструються у просторі назв \"%s\" за відсутності розширення назв" #: directives.c:1098 #, c-format msgid "registering pragma \"%s\" with name expansion and no namespace" msgstr "прагма \"%s\" реєструється з розширенням назви але без простору назви" #: directives.c:1116 #, c-format msgid "registering \"%s\" as both a pragma and a pragma namespace" msgstr "\"%s\" реєструється як прагма та як прострі назв прагм" #: directives.c:1119 #, c-format msgid "#pragma %s %s is already registered" msgstr "#pragma %s %s вже зареєстровано" #: directives.c:1122 #, c-format msgid "#pragma %s is already registered" msgstr "#pragma %s вже зареєстровано" #: directives.c:1152 msgid "registering pragma with NULL handler" msgstr "реєструється pragma з NULL-обробником" #: directives.c:1362 msgid "#pragma once in main file" msgstr "#pragma один раз у головному файлі" #: directives.c:1385 msgid "invalid #pragma GCC poison directive" msgstr "некоректна #pragma GCC poison директива" #: directives.c:1394 #, c-format msgid "poisoning existing macro \"%s\"" msgstr "poisoning існуючих макросів \"%s\"" #: directives.c:1413 msgid "#pragma system_header ignored outside include file" msgstr "#pragma system_header проігноровано за межами включеного файлу" #: directives.c:1437 #, c-format msgid "cannot find source file %s" msgstr "не вдається знайти первинний файл %s" #: directives.c:1441 #, c-format msgid "current file is older than %s" msgstr "поточний файл старіший ніж %s" #: directives.c:1620 msgid "_Pragma takes a parenthesized string literal" msgstr "_Pragma охоплює дужками символьний літерал" #: directives.c:1693 msgid "#else without #if" msgstr "#else без #if" #: directives.c:1698 msgid "#else after #else" msgstr "#else після #else" #: directives.c:1700 directives.c:1733 msgid "the conditional began here" msgstr "умова починається тут" #: directives.c:1726 msgid "#elif without #if" msgstr "#elif без #if" #: directives.c:1731 msgid "#elif after #else" msgstr "#elif після #else" #: directives.c:1761 msgid "#endif without #if" msgstr "#endif беp #if" #: directives.c:1838 msgid "missing '(' after predicate" msgstr "відсутня '(' після предикату" #: directives.c:1853 msgid "missing ')' to complete answer" msgstr "відсутня ')' для завершення відповіді" #: directives.c:1873 msgid "predicate's answer is empty" msgstr "відповідь предиката порожня" #: directives.c:1900 msgid "assertion without predicate" msgstr "твердження без предикату" #: directives.c:1902 msgid "predicate must be an identifier" msgstr "предикат має бути ідентифікатором" #: directives.c:1988 #, c-format msgid "\"%s\" re-asserted" msgstr "\"%s\" повторне ствердження" #: directives.c:2271 #, c-format msgid "unterminated #%s" msgstr "незавершене #%s" #: directives-only.c:221 lex.c:1016 traditional.c:162 msgid "unterminated comment" msgstr "незавершений коментар" #: errors.c:118 msgid "warning: " msgstr "попередження: " #: errors.c:120 msgid "internal error: " msgstr "внутрішня помилка: " #: errors.c:122 msgid "error: " msgstr "error: " #: errors.c:186 msgid "stdout" msgstr "stdout" #: errors.c:188 #, c-format msgid "%s: %s" msgstr "%s: %s" #: expr.c:261 msgid "too many decimal points in number" msgstr "надто багато десяткових точок у числі" #: expr.c:290 expr.c:365 #, fuzzy msgid "fixed-point constants are a GCC extension" msgstr "уявні константи є розширенням GCC" #: expr.c:303 #, fuzzy, c-format msgid "invalid digit \"%c\" in binary constant" msgstr "некоректна цифра \"%c\" у вісімковій константі" #: expr.c:305 #, c-format msgid "invalid digit \"%c\" in octal constant" msgstr "некоректна цифра \"%c\" у вісімковій константі" #: expr.c:313 #, fuzzy msgid "invalid prefix \"0b\" for floating constant" msgstr "некоректний суфікс \"%.*s\" у константі з плаваючою комою" #: expr.c:319 msgid "use of C99 hexadecimal floating constant" msgstr "використовуйте десятково-шістнадцяткову константу з плаваючою комою мови C99" #: expr.c:328 msgid "exponent has no digits" msgstr "експонента не має цифр" #: expr.c:335 msgid "hexadecimal floating constants require an exponent" msgstr "для десятково-шістнадцяткової константи з плаваючою комою потрібна експонента" #: expr.c:341 #, c-format msgid "invalid suffix \"%.*s\" on floating constant" msgstr "некоректний суфікс \"%.*s\" у константі з плаваючою комою" #: expr.c:351 expr.c:393 #, c-format msgid "traditional C rejects the \"%.*s\" suffix" msgstr "традиційною мовою C не сприймається суфікс \"%.*s\"" #: expr.c:358 #, c-format msgid "invalid suffix \"%.*s\" with hexadecimal floating constant" msgstr "некоректний суфікс \"%.*s\" з десятково-шістнадцятковою константою з плаваючою комою" #: expr.c:369 #, fuzzy msgid "decimal float constants are a GCC extension" msgstr "уявні константи є розширенням GCC" #: expr.c:379 #, c-format msgid "invalid suffix \"%.*s\" on integer constant" msgstr "некоректний суфікс \"%.*s\" у цілій константі" #: expr.c:401 msgid "use of C99 long long integer constant" msgstr "використовуйте цілу константу long long з C99" #: expr.c:409 msgid "imaginary constants are a GCC extension" msgstr "уявні константи є розширенням GCC" #: expr.c:412 #, fuzzy msgid "binary constants are a GCC extension" msgstr "уявні константи є розширенням GCC" #: expr.c:505 msgid "integer constant is too large for its type" msgstr "ціла константа надто велика для вказаного типу" #: expr.c:517 msgid "integer constant is so large that it is unsigned" msgstr "ціла константа така велика, що вона не матиме знаку" #: expr.c:612 msgid "missing ')' after \"defined\"" msgstr "відсутня ')' після \"defined\"" #: expr.c:619 msgid "operator \"defined\" requires an identifier" msgstr "для оператора \"defined\" потрібен ідентифікатор" #: expr.c:627 #, c-format msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "(\"%s\" - альтернативна лексема для \"%s\" у C++)" #: expr.c:637 msgid "this use of \"defined\" may not be portable" msgstr "використання \"defined\" може бути непереносимим" #: expr.c:676 msgid "floating constant in preprocessor expression" msgstr "константа з плаваючою комою у виразі препроцесора" #: expr.c:682 msgid "imaginary number in preprocessor expression" msgstr "уявне число у виразі препроцесора" #: expr.c:727 #, c-format msgid "\"%s\" is not defined" msgstr "\"%s\" не визначено" #: expr.c:855 expr.c:884 #, c-format msgid "missing binary operator before token \"%s\"" msgstr "відсутній двійковий оператор перед лексемою \"%s\"" #: expr.c:875 #, c-format msgid "token \"%s\" is not valid in preprocessor expressions" msgstr "лексема \"%s\" не є допустимим у виразі препроцесора" #: expr.c:892 msgid "missing expression between '(' and ')'" msgstr "відсутній вираз між '(' та ')'" #: expr.c:895 msgid "#if with no expression" msgstr "відсутній вираз після #if" #: expr.c:898 #, c-format msgid "operator '%s' has no right operand" msgstr "оператор '%s' не містить коректного операнду" #: expr.c:903 #, c-format msgid "operator '%s' has no left operand" msgstr "оператор '%s' не містить лівого операнду" #: expr.c:929 msgid " ':' without preceding '?'" msgstr " ':' без подовження '?'" #: expr.c:956 msgid "unbalanced stack in #if" msgstr "незбалансований стек у #if" #: expr.c:975 #, c-format msgid "impossible operator '%u'" msgstr "неможливий оператор '%u'" #: expr.c:1065 msgid "missing ')' in expression" msgstr "відсутня ')' у виразі" #: expr.c:1086 msgid "'?' without following ':'" msgstr "'?' без наступного ':'" #: expr.c:1096 msgid "integer overflow in preprocessor expression" msgstr "переповнення цілого числа у виразі препроцесора" #: expr.c:1101 msgid "missing '(' in expression" msgstr "відсутня '(' у виразі" #: expr.c:1133 #, c-format msgid "the left operand of \"%s\" changes sign when promoted" msgstr "лівий операнд \"%s\" змінює знак при підвищенні" #: expr.c:1138 #, c-format msgid "the right operand of \"%s\" changes sign when promoted" msgstr "правий оператор \"%s\" змінює знак при підвищенні" #: expr.c:1397 msgid "traditional C rejects the unary plus operator" msgstr "у традиційній мові C не допускається унарний оператор плюс" #: expr.c:1480 msgid "comma operator in operand of #if" msgstr "оператор кома у операнді #if" #: expr.c:1612 msgid "division by zero in #if" msgstr "ділення на нуль у #if" #: files.c:442 msgid "NULL directory in find_file" msgstr "значення каталогу NULL у find_file" #: files.c:480 msgid "one or more PCH files were found, but they were invalid" msgstr "знайдено один або більше файлів PCH, але вони некоректні" #: files.c:483 msgid "use -Winvalid-pch for more information" msgstr "докладніша інформація виводиться, якщо вказати -Winvalid-pch" #: files.c:570 #, c-format msgid "%s is a block device" msgstr "%s є блочним пристроєм" #: files.c:587 #, c-format msgid "%s is too large" msgstr "%s надто великий" #: files.c:622 #, c-format msgid "%s is shorter than expected" msgstr "%s коротший ніж очікувалося" #: files.c:852 #, c-format msgid "no include path in which to search for %s" msgstr "відсутні шлях включення у якому ведеться пошук для %s" #: files.c:1157 msgid "Multiple include guards may be useful for:\n" msgstr "Декілька include guards можуть бути корисні для:\n" #: init.c:426 msgid "cppchar_t must be an unsigned type" msgstr "cppchar_t має бути беззнакового типу" #: init.c:430 #, c-format msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits" msgstr "арифметика препроцесора має максимальну точність %lu біт; ціль вимагає %lu біт" #: init.c:437 msgid "CPP arithmetic must be at least as precise as a target int" msgstr "арифметика CPP повинна мати принаймні таку ж точність я у цільового цілого числа" #: init.c:440 msgid "target char is less than 8 bits wide" msgstr "ширина цільового типу char менша за 8 біт" #: init.c:444 msgid "target wchar_t is narrower than target char" msgstr "цільовий wchar_t є вужчим за цільовий char" #: init.c:448 msgid "target int is narrower than target char" msgstr "цільовий тип int є вужчим ніж цільовий char" #: init.c:453 msgid "CPP half-integer narrower than CPP character" msgstr "CPP half-integer є вужчим за CPP character" #: init.c:457 #, c-format msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits" msgstr "CPP на цьому вузлі не може обробляти константи з символів шириною понад %lu біт, але для цілі вимагається %lu біт" #: lex.c:283 msgid "backslash and newline separated by space" msgstr "зворотна коса риска та символ нового рядка відділяються пробілом" #: lex.c:288 msgid "backslash-newline at end of file" msgstr "зворотна коса риска та символ нового рядка наприкінці файлу" #: lex.c:303 #, c-format msgid "trigraph ??%c converted to %c" msgstr "тристоронній ??%c перетворено на %c" #: lex.c:310 #, c-format msgid "trigraph ??%c ignored, use -trigraphs to enable" msgstr "тристоронній ??%c проігноровано, використовуйте -trigraphs, щоб увімкнути" #: lex.c:356 msgid "\"/*\" within comment" msgstr "\"/*\" всередині коментаря" #: lex.c:414 #, c-format msgid "%s in preprocessing directive" msgstr "%s в директиві препроцесора" #: lex.c:423 msgid "null character(s) ignored" msgstr "null-символи проігноровані" #: lex.c:460 #, c-format msgid "`%.*s' is not in NFKC" msgstr "`%.*s' не у NFKC" #: lex.c:463 #, c-format msgid "`%.*s' is not in NFC" msgstr "`%.*s' не у NFC" #: lex.c:551 #, c-format msgid "attempt to use poisoned \"%s\"" msgstr "спроба використати poisoned \"%s\"" #: lex.c:559 msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "__VA_ARGS__ може з'являтися лише у розширенні макросу variadic з мови C99" #: lex.c:659 msgid "null character(s) preserved in literal" msgstr "null-символи збережені буквально" #: lex.c:662 #, c-format msgid "missing terminating %c character" msgstr "відсутній завершальний символ %c" #: lex.c:1027 msgid "C++ style comments are not allowed in ISO C90" msgstr "Коментарі у стилі C++ неприпустимі згідно ISO C90" #: lex.c:1029 msgid "(this will be reported only once per input file)" msgstr "(повідомлення про це з'явиться лише один для вхідного файлу)" #: lex.c:1034 msgid "multi-line comment" msgstr "багаторядковий коментар" #: lex.c:1347 #, c-format msgid "unspellable token %s" msgstr "неможливо розібрати лексему %s" #: line-map.c:320 #, c-format msgid "In file included from %s:%u" msgstr "У файлі включеному з %s:%u" #: line-map.c:338 #, c-format msgid "" ",\n" " from %s:%u" msgstr "" ",\n" " з %s:%u" #: macro.c:84 #, c-format msgid "macro \"%s\" is not used" msgstr "макрос \"%s\" не використовується" #: macro.c:123 macro.c:319 #, c-format msgid "invalid built-in macro \"%s\"" msgstr "некоректний вбудований макрос \"%s\"" #: macro.c:157 msgid "could not determine file timestamp" msgstr "не вдається визначити часову мітку файлу" #: macro.c:254 msgid "could not determine date and time" msgstr "не вдається визначити дату та час" #: macro.c:270 msgid "__COUNTER__ expanded inside directive with -fdirectives-only" msgstr "" #: macro.c:423 msgid "invalid string literal, ignoring final '\\'" msgstr "некоректний символьний літерал, ігнорується завершальний символ '\\'" #: macro.c:483 #, c-format msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "вставка \"%s\" та \"%s\" не призводить до коректної лексеми препроцесора" #: macro.c:558 msgid "ISO C99 requires rest arguments to be used" msgstr "ISO C99 вимагає, щоб використовувались решта аргументів" #: macro.c:563 #, c-format msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "для макросу \"%s\" потрібно вказати %u аргументів, але вказано лише %u" #: macro.c:568 #, c-format msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "макросу \"%s\" передано %u аргументів, але з них використано лише %u" #: macro.c:679 traditional.c:680 #, c-format msgid "unterminated argument list invoking macro \"%s\"" msgstr "незавершений список аргументів у виклику макросу \"%s\"" #: macro.c:782 #, c-format msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "подібний до функції макрос \"%s\" має використовуватися з аргументами у традиційній мові C" #: macro.c:1325 #, c-format msgid "duplicate macro parameter \"%s\"" msgstr "дублікат параметра макросу \"%s\"" #: macro.c:1371 #, c-format msgid "\"%s\" may not appear in macro parameter list" msgstr "\"%s\" не може з'являтися у списку параметрів макросу" #: macro.c:1379 msgid "macro parameters must be comma-separated" msgstr "параметри макросу мають бути розділені комами" #: macro.c:1396 msgid "parameter name missing" msgstr "відсутня назва параметра" #: macro.c:1413 msgid "anonymous variadic macros were introduced in C99" msgstr "анонімні макроси variadic започатковані у C99" #: macro.c:1418 msgid "ISO C does not permit named variadic macros" msgstr "ISO C не припускає іменовані макроси variadic" #: macro.c:1427 msgid "missing ')' in macro parameter list" msgstr "відсутня ')' у списку параметрів макросу" #: macro.c:1476 msgid "'##' cannot appear at either end of a macro expansion" msgstr "'##' не може з'являтися з обох кінців макро-розширення" #: macro.c:1510 msgid "ISO C99 requires whitespace after the macro name" msgstr "у ISO C99 має бути пробіл після назви маросу" #: macro.c:1534 msgid "missing whitespace after the macro name" msgstr "відсутні пробіл після назви макросу" #: macro.c:1564 msgid "'#' is not followed by a macro parameter" msgstr "'#' не супроводжується параметром макросу" #: macro.c:1683 #, c-format msgid "\"%s\" redefined" msgstr "повторне визначення \"%s\"" #: macro.c:1688 msgid "this is the location of the previous definition" msgstr "...це місце першого визначення" #: macro.c:1738 #, c-format msgid "macro argument \"%s\" would be stringified in traditional C" msgstr "аргумент макросу \"%s\" був би перетворений на рядок у традиційній мові C" #: macro.c:1761 #, c-format msgid "invalid hash type %d in cpp_macro_definition" msgstr "некоректний типу хешу %d у cpp_macro_definition" #: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377 msgid "while writing precompiled header" msgstr "при записі попередньо скомпільованих заголовків" #: pch.c:485 #, c-format msgid "%s: not used because `%.*s' not defined" msgstr "%s: не використовується оскільки `%.*s' не визначено" #: pch.c:497 #, c-format msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'" msgstr "%s: не використовується, оскільки `%.*s' визначено як `%s' не `%.*s'" #: pch.c:538 #, c-format msgid "%s: not used because `%s' is defined" msgstr "%s: не використовується, оскільки визначено `%s'" #: pch.c:558 #, fuzzy, c-format msgid "%s: not used because `__COUNTER__' is invalid" msgstr "%s: не використовується, оскільки визначено `%s'" #: pch.c:567 pch.c:737 msgid "while reading precompiled header" msgstr "при читанні попередньо скомпільованого заголовка" #: traditional.c:750 #, c-format msgid "detected recursion whilst expanding macro \"%s\"" msgstr "при розширенні макросу \"%s\" виявлено рекурсію" #: traditional.c:917 msgid "syntax error in macro parameter list" msgstr "синтаксична помилка у списку параметрів макросу" #~ msgid "no newline at end of file" #~ msgstr "відсутній символ нового рядка наприкінці файлу" nescc-1.3.4/libcpp/po/vi.po000066400000000000000000000673331177770303300155030ustar00rootroot00000000000000# Vietnamese translation for CPPlib. # Copyright © 2007 Free Software Foundation, Inc. # Clytie Siddall , 2005-2007. msgid "" msgstr "" "Project-Id-Version: cpplib 4.3-b20071109\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2007-11-08 21:08+0000\n" "PO-Revision-Date: 2007-11-30 23:15+1030\n" "Last-Translator: Clytie Siddall \n" "Language-Team: Vietnamese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0\n" "X-Generator: LocFactoryEditor 1.7b1\n" #: charset.c:654 #, c-format msgid "conversion from %s to %s not supported by iconv" msgstr "iconv không hỗ trợ khả năng chuyển đổi từ %s sang %s" #: charset.c:657 msgid "iconv_open" msgstr "iconv_open (mở)" #: charset.c:665 #, c-format msgid "no iconv implementation, cannot convert from %s to %s" msgstr "chưa thi hành iconv nên không thể chuyển đổi từ %s sang %s" #: charset.c:742 #, c-format msgid "character 0x%lx is not in the basic source character set\n" msgstr "ký tự 0x%lx không phải nằm trong bộ ký tự nguồn cơ bản\n" #: charset.c:759 charset.c:1352 msgid "converting to execution character set" msgstr "đang chuyển đổi sang bộ ký tự thi hành" #: charset.c:765 #, c-format msgid "character 0x%lx is not unibyte in execution character set" msgstr "ký tự 0x%lx không có dạng byte đơn trong bộ ký tự thi hành" #: charset.c:889 #, c-format msgid "Character %x might not be NFKC" msgstr "Ký tự %x có lẽ không phải có kiểu NFKC" #: charset.c:949 msgid "universal character names are only valid in C++ and C99" msgstr "tên ký tự chung là hợp lệ chỉ trong ngôn ngữ C++ và C99" #: charset.c:952 #, c-format msgid "the meaning of '\\%c' is different in traditional C" msgstr "« \\%c » có nghĩa khác trong ngôn ngữ C truyền thống" #: charset.c:961 msgid "In _cpp_valid_ucn but not a UCN" msgstr "Trong « _cpp_valid_ucn » nhưng mà không phải lả một UCN" #: charset.c:986 #, c-format msgid "incomplete universal character name %.*s" msgstr "tên ký tự chung %.*s chưa hoàn thành" #: charset.c:998 #, c-format msgid "%.*s is not a valid universal character" msgstr "%.*s không phải là ký tự chung hợp lệ" #: charset.c:1008 lex.c:484 msgid "'$' in identifier or number" msgstr "gặp « $ » trong bộ nhận hiện hay con số" #: charset.c:1018 #, c-format msgid "universal character %.*s is not valid in an identifier" msgstr "ký tự chung %.*s không phải là hợp lệ trong bộ nhận diện" #: charset.c:1022 #, c-format msgid "universal character %.*s is not valid at the start of an identifier" msgstr "ký tự chung %.*s không phải hợp lệ tại đầu của bộ nhận diện" #: charset.c:1056 charset.c:1571 msgid "converting UCN to source character set" msgstr "đang chuyển đổi UCN sang bộ ký tự nguồn" #: charset.c:1060 msgid "converting UCN to execution character set" msgstr "đang chuyển đổi UCN sang bộ ký tự thi hành" #: charset.c:1132 msgid "the meaning of '\\x' is different in traditional C" msgstr "« \\x » có nghĩa khác trong ngôn ngữ C truyền thống" #: charset.c:1149 msgid "\\x used with no following hex digits" msgstr "\\x được dùng còn không có chữ số thâp lục theo sau" #: charset.c:1156 msgid "hex escape sequence out of range" msgstr "dãy thoát thập lục ở ngoài phạm vi" #: charset.c:1195 msgid "octal escape sequence out of range" msgstr "dãy thoát bát phân ở ngoài phạm vi" #: charset.c:1263 msgid "the meaning of '\\a' is different in traditional C" msgstr "« \\a » có nghĩa khác trong ngôn ngữ C truyền thống" #: charset.c:1270 #, c-format msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "dãy thoát khác ISO chuẩn: « \\%c »" #: charset.c:1278 #, c-format msgid "unknown escape sequence '\\%c'" msgstr "không biết dãy thoát: « \\%c »" #: charset.c:1286 #, c-format msgid "unknown escape sequence: '\\%s'" msgstr "không biết dãy thoát « \\%s »" #: charset.c:1293 msgid "converting escape sequence to execution character set" msgstr "đang chuyển đổi dãy thoát sang bộ ký tự thi hành" #: charset.c:1415 charset.c:1478 msgid "character constant too long for its type" msgstr "hằng ký tự quá dài cho kiểu nó" #: charset.c:1418 msgid "multi-character character constant" msgstr "hằng ký tự đa ký tự" #: charset.c:1510 msgid "empty character constant" msgstr "hằng ký tự trống" #: charset.c:1612 #, c-format msgid "failure to convert %s to %s" msgstr "lỗi chuyển đổi %s sang %s" #: directives.c:215 directives.c:241 #, c-format msgid "extra tokens at end of #%s directive" msgstr "gặp hiệu bài thêm tại kết thúc của chỉ thị #%s" #: directives.c:344 #, c-format msgid "#%s is a GCC extension" msgstr "#%s là phần mở rộng kiểu GCC" #: directives.c:356 msgid "suggest not using #elif in traditional C" msgstr "khuyên bạn không dùng #elif trong ngôn ngữ C truyền thống" #: directives.c:359 #, c-format msgid "traditional C ignores #%s with the # indented" msgstr "ngôn ngữ C truyền thống bỏ qua #%s với # được thụt lề" #: directives.c:363 #, c-format msgid "suggest hiding #%s from traditional C with an indented #" msgstr "khuyên bạn ẩn #%s ra ngôn ngữ C truyền thống bằng # được thụt lề" #: directives.c:389 msgid "embedding a directive within macro arguments is not portable" msgstr "khả năng nhúng chỉ thị vào đối số vĩ lệnh không thể mạng theo" #: directives.c:409 msgid "style of line directive is a GCC extension" msgstr "kiểu chỉ thị dòng là phần mở rộng GCC" #: directives.c:464 #, c-format msgid "invalid preprocessing directive #%s" msgstr "chỉ thị tiền xử lý không hợp lệ #%s" #: directives.c:532 msgid "\"defined\" cannot be used as a macro name" msgstr "không thể dùng « defined » (đã xác định) như là tên vĩ lệnh" #: directives.c:538 #, c-format msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "không thể dùng « %s » như là tên vĩ lệnh vì nó là toán tử trong ngôn ngữ C++" #: directives.c:541 #, c-format msgid "no macro name given in #%s directive" msgstr "chỉ thị #%s không chứa tên vĩ lệnh" #: directives.c:544 msgid "macro names must be identifiers" msgstr "mọi tên vĩ lệnh phải là bộ nhận diện" #: directives.c:585 #, c-format msgid "undefining \"%s\"" msgstr "đang hủy xác định « %s »" #: directives.c:640 msgid "missing terminating > character" msgstr "thiếu ký tự « > » chấm dứt" #: directives.c:695 #, c-format msgid "#%s expects \"FILENAME\" or " msgstr "#%s ngờ \"TÊN_TẬP_TIN\" hoặc " #: directives.c:739 #, c-format msgid "empty filename in #%s" msgstr "#%s chứa tên tập tin trống" #: directives.c:749 msgid "#include nested too deeply" msgstr "« #include » (bao gồm) lồng nhau quá sâu" #: directives.c:790 msgid "#include_next in primary source file" msgstr "gặp « #include_next » (bao gồm kế tiếp) nằm trong tập tin nguồn chính" #: directives.c:816 #, c-format msgid "invalid flag \"%s\" in line directive" msgstr "gặp cờ không hợp lệ « %s » nằm trong chỉ thị dòng" #: directives.c:868 #, c-format msgid "\"%s\" after #line is not a positive integer" msgstr "« %s » nằm sau « #line » (dòng) không phải là số nguyên dương" #: directives.c:874 msgid "line number out of range" msgstr "số hiệu dòng ở ngoài phạm vi" #: directives.c:887 directives.c:964 #, c-format msgid "\"%s\" is not a valid filename" msgstr "« %s » không phải là tên tập tin hợp lệ" #: directives.c:924 #, c-format msgid "\"%s\" after # is not a positive integer" msgstr "« %s » nằm sau « # » không phải là số nguyên dương" #: directives.c:1026 #, c-format msgid "invalid #%s directive" msgstr "chỉ thị #%s không hợp lệ" #: directives.c:1089 #, c-format msgid "registering pragmas in namespace \"%s\" with mismatched name expansion" msgstr "việc đăng ký các lệnh mã nguồn điều khiển trình biên dịch (pragma) trong miền tên « %s » sai mở rộng tên " #: directives.c:1098 #, c-format msgid "registering pragma \"%s\" with name expansion and no namespace" msgstr "việc đăng ký lệnh mã nguồn điều khiển trình biên dịch (pragma) « %s » có mở rộng tên nhưng không có miền tên" #: directives.c:1116 #, c-format msgid "registering \"%s\" as both a pragma and a pragma namespace" msgstr "đang đăng ký « %s » là cả lệnh nguồn điều khiển trình biện dịch (pragma), lẫn miền tên của lệnh nguồn điều khiển trình biên dịch." #: directives.c:1119 #, c-format msgid "#pragma %s %s is already registered" msgstr "« #pragma %s %s » đã được đăng ký" #: directives.c:1122 #, c-format msgid "#pragma %s is already registered" msgstr "« #pragma %s » đã được đăng ký" #: directives.c:1152 msgid "registering pragma with NULL handler" msgstr "việc đăng ký lệnh mã nguồn điều khiển trình biên dịch (pragma) có bộ quản lý vô giá trị (NULL)" #: directives.c:1362 msgid "#pragma once in main file" msgstr "Có « #pragma » một lần trong tập tin chính" #: directives.c:1385 msgid "invalid #pragma GCC poison directive" msgstr "gặp chỉ thị vộ hiệu hóa (poison) GCC « #pragma » không hợp lệ" #: directives.c:1394 #, c-format msgid "poisoning existing macro \"%s\"" msgstr "đang vô hiệu hóa vĩ lệnh tồn tại « %s »" #: directives.c:1413 msgid "#pragma system_header ignored outside include file" msgstr "« #pragma system_header » (đầu trang hệ thống) bị bỏ qua ở ngoài tập tin bao gồm" #: directives.c:1437 #, c-format msgid "cannot find source file %s" msgstr "không tìm thấy tập tin nguồn %s" #: directives.c:1441 #, c-format msgid "current file is older than %s" msgstr "tập tin hiện thời là cũ hơn %s" #: directives.c:1620 msgid "_Pragma takes a parenthesized string literal" msgstr "« _Pragma » nhận một hằng chuỗi được đặt trong ngoặc đơn" #: directives.c:1693 msgid "#else without #if" msgstr "#else (nếu không) không có #if (nếu)" #: directives.c:1698 msgid "#else after #else" msgstr "#else (nếu không) nằm sau #else" #: directives.c:1700 directives.c:1733 msgid "the conditional began here" msgstr "bộ điều kiện đã bắt đầu ở đây" #: directives.c:1726 msgid "#elif without #if" msgstr "#elif (nếu không thì nếu) không có #if (nếu)" #: directives.c:1731 msgid "#elif after #else" msgstr "#elif (nếu không thì nếu) nằm sau #else (nếu không)" #: directives.c:1761 msgid "#endif without #if" msgstr "#endif (thôi nếu) không có #if (nếu)" #: directives.c:1838 msgid "missing '(' after predicate" msgstr "thiếu « ( » nằm sau vị ngữ" #: directives.c:1853 msgid "missing ')' to complete answer" msgstr "thiếu « ) » để xong trả lời" #: directives.c:1873 msgid "predicate's answer is empty" msgstr "vị ngữ chứa trả lời trống" #: directives.c:1900 msgid "assertion without predicate" msgstr "sự khẳng định không có vị ngữ" #: directives.c:1902 msgid "predicate must be an identifier" msgstr "vị ngữ phải là bộ nhận diện" #: directives.c:1988 #, c-format msgid "\"%s\" re-asserted" msgstr "« %s » được khẳng định lại" #: directives.c:2271 #, c-format msgid "unterminated #%s" msgstr "#%s chưa chấm dứt" #: directives-only.c:221 lex.c:1016 traditional.c:162 msgid "unterminated comment" msgstr "gặp chú thích chưa được chấm dứt" #: errors.c:118 msgid "warning: " msgstr "cảnh báo : " #: errors.c:120 msgid "internal error: " msgstr "lỗi nôi bộ : " #: errors.c:122 msgid "error: " msgstr "lỗi: " #: errors.c:186 msgid "stdout" msgstr "thiết bị xuất chuẩn" #: errors.c:188 #, c-format msgid "%s: %s" msgstr "%s: %s" #: expr.c:261 msgid "too many decimal points in number" msgstr "con số chứa quá nhiều dấu thập phân" #: expr.c:290 expr.c:365 msgid "fixed-point constants are a GCC extension" msgstr "hằng định điểm là phần mở rộng GCC" #: expr.c:303 #, c-format msgid "invalid digit \"%c\" in binary constant" msgstr "gặp chữ số không hợp lệ « %c » trong hằng nhị phân" #: expr.c:305 #, c-format msgid "invalid digit \"%c\" in octal constant" msgstr "gặp chữ số không hợp lệ « %c » trong hằng bát phân" #: expr.c:313 msgid "invalid prefix \"0b\" for floating constant" msgstr "gặp tiền tố không hợp lệ « 0b » cho hằng trôi nổi" #: expr.c:319 msgid "use of C99 hexadecimal floating constant" msgstr "dùng hằng trôi nổi thập lục C99" #: expr.c:328 msgid "exponent has no digits" msgstr "số mũ không co chữ số nào" #: expr.c:335 msgid "hexadecimal floating constants require an exponent" msgstr "mỗi hằng trôi nổi thập lục cần đến một số mũ" #: expr.c:341 #, c-format msgid "invalid suffix \"%.*s\" on floating constant" msgstr "gặp hậu tố không hợp lệ « %.*s » nằm trên hằng trôi nổi" #: expr.c:351 expr.c:393 #, c-format msgid "traditional C rejects the \"%.*s\" suffix" msgstr "ngôn ngữ C truyền thống từ chối hậu tố « %.*s »" #: expr.c:358 #, c-format msgid "invalid suffix \"%.*s\" with hexadecimal floating constant" msgstr "gặp hậu tố không hợp lệ « %.*s » có hằng trôi nổi thập lục" #: expr.c:369 msgid "decimal float constants are a GCC extension" msgstr "hằng trôi nổi thập lục là phần mở rộng GCC" #: expr.c:379 #, c-format msgid "invalid suffix \"%.*s\" on integer constant" msgstr "gặp hậu tố không hợp lệ « %.*s » nằm trên hằng số nguyên" #: expr.c:401 msgid "use of C99 long long integer constant" msgstr "dùng hằng số nguyên dài dài C99" #: expr.c:409 msgid "imaginary constants are a GCC extension" msgstr "hằng ảo là phần mở rộng GCC" #: expr.c:412 msgid "binary constants are a GCC extension" msgstr "hằng nhị phân là phần mở rộng GCC" #: expr.c:505 msgid "integer constant is too large for its type" msgstr "hằng số nguyên quá lớn cho kiểu nó" #: expr.c:517 msgid "integer constant is so large that it is unsigned" msgstr "hằng số nguyên quá lớn thì không có dấu" #: expr.c:612 msgid "missing ')' after \"defined\"" msgstr "thiếu « ) » nằm sau « defined » (đã xác định)" #: expr.c:619 msgid "operator \"defined\" requires an identifier" msgstr "toán tử « defined » (đã xác định) cần đến bộ nhận diện" #: expr.c:627 #, c-format msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "(« %s » là một hiệu bài thay thế cho « %s » trong ngôn ngữ C++)" #: expr.c:637 msgid "this use of \"defined\" may not be portable" msgstr "khả năng dùng « defined » (đã xác định) có lẽ không thể mạng theo" #: expr.c:676 msgid "floating constant in preprocessor expression" msgstr "gặp hằng trôi nổi nằm trong biểu thức tiền xử lý" #: expr.c:682 msgid "imaginary number in preprocessor expression" msgstr "gặp số ảo nằm trong biểu thức tiền xử lý" #: expr.c:727 #, c-format msgid "\"%s\" is not defined" msgstr "chưa xác định « %s »" #: expr.c:855 expr.c:884 #, c-format msgid "missing binary operator before token \"%s\"" msgstr "thiếu toán từ nhị phân nằm trước hiệu bài « %s »" #: expr.c:875 #, c-format msgid "token \"%s\" is not valid in preprocessor expressions" msgstr "hiệu bài « %s » không hợp lệ trong biểu thức tiền xử lý" #: expr.c:892 msgid "missing expression between '(' and ')'" msgstr "thiếu biểu thức nằm giữa « ( » và « ) »" #: expr.c:895 msgid "#if with no expression" msgstr "#if (nếu) không có biểu thức" #: expr.c:898 #, c-format msgid "operator '%s' has no right operand" msgstr "toán tử « %s » không có tác tử bên phải" #: expr.c:903 #, c-format msgid "operator '%s' has no left operand" msgstr "toán tử « %s » không có tác từ bên trái" #: expr.c:929 msgid " ':' without preceding '?'" msgstr " Dấu hai chấm « : » không có dấu hỏi « ? » đi trước" #: expr.c:956 msgid "unbalanced stack in #if" msgstr "có đống không cân bằng trong #if (nếu)" #: expr.c:975 #, c-format msgid "impossible operator '%u'" msgstr "toán từ không thể « %u »" #: expr.c:1065 msgid "missing ')' in expression" msgstr "thiếu « ) » nằm trong biểu thức" #: expr.c:1086 msgid "'?' without following ':'" msgstr "Dấu hỏi « ? » không có dấu hai chấm « : » đi sau" #: expr.c:1096 msgid "integer overflow in preprocessor expression" msgstr "tràn số nguyên trong biểu thức tiền xử lý" #: expr.c:1101 msgid "missing '(' in expression" msgstr "thiếu « ( » nằm trong biểu thức" #: expr.c:1133 #, c-format msgid "the left operand of \"%s\" changes sign when promoted" msgstr "tác tử bên trái của « %s » thay đổi dấu (dương/âm) khi được tăng cấp" #: expr.c:1138 #, c-format msgid "the right operand of \"%s\" changes sign when promoted" msgstr "tác tử bên phai của « %s » thay đổi dấu (dương/âm) khi đươc tăng cấp" #: expr.c:1397 msgid "traditional C rejects the unary plus operator" msgstr "ngôn ngữ C truyền thống từ chối toán tử cộng chỉ có một tác tử" #: expr.c:1480 msgid "comma operator in operand of #if" msgstr "toán tử dấu phẩy nằm trong tác tử của #if (nếu)" #: expr.c:1612 msgid "division by zero in #if" msgstr "chia số không trong #if (nếu)" #: files.c:442 msgid "NULL directory in find_file" msgstr "thư mục RỖNG trong « find_file » (tìm tập tin)" #: files.c:480 msgid "one or more PCH files were found, but they were invalid" msgstr "tìm thấy một hay nhiều tập tin PCH, nhưng chúng không hợp lệ" #: files.c:483 msgid "use -Winvalid-pch for more information" msgstr "hãy thử lệnh « -Winvalid-pch » để tìm thấy thông tin thêm" #: files.c:570 #, c-format msgid "%s is a block device" msgstr "%s là một thiết bị khối" #: files.c:587 #, c-format msgid "%s is too large" msgstr "%s quá lớn" #: files.c:622 #, c-format msgid "%s is shorter than expected" msgstr "ngờ %s dài hơn" #: files.c:852 #, c-format msgid "no include path in which to search for %s" msgstr "không có đường dẫn bao gồm trong đó có thể tìm kíếm %s" #: files.c:1157 msgid "Multiple include guards may be useful for:\n" msgstr "Nhiều điều bảo vệ bao gồm có lẽ hiệu ích cho :\n" #: init.c:426 msgid "cppchar_t must be an unsigned type" msgstr "« cppchar_t » phải là kiểu không có dấu dương/âm" #: init.c:430 #, c-format msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits" msgstr "toán thuật của trình tiền xử lý có độ chính xác tối đa là %lu bit còn đích cần đến %lu bit" #: init.c:437 msgid "CPP arithmetic must be at least as precise as a target int" msgstr "toán thuật CPP phải là ít nhất cùng chính xác với « int » đích" #: init.c:440 msgid "target char is less than 8 bits wide" msgstr "« char » đích có độ rộng ít hơn 8 bit" #: init.c:444 msgid "target wchar_t is narrower than target char" msgstr "« wchar_t » đích có độ rộng ít hơn « char » đích" #: init.c:448 msgid "target int is narrower than target char" msgstr "« int » đích có độ rộng ít hơn « char » đích" #: init.c:453 msgid "CPP half-integer narrower than CPP character" msgstr "nữa số nguyên CPP có độ rộng ít hơn ký tự CPP" #: init.c:457 #, c-format msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits" msgstr "Trên máy này, CPP không thể xử lý hằng ký tự rộng hơn %lu bit, còn đích cần thiết %lu bit" #: lex.c:283 msgid "backslash and newline separated by space" msgstr "xuyệc ngược và ký tự dòng mới phân cách nhau bởi dấu cách" #: lex.c:288 msgid "backslash-newline at end of file" msgstr "gặp xuyệc ngược-ký tự dòng mới tại kết thúc của tập tin" #: lex.c:303 #, c-format msgid "trigraph ??%c converted to %c" msgstr "chữ ba « ??%c » đã được chuyển đổi thành « %c »" #: lex.c:310 #, c-format msgid "trigraph ??%c ignored, use -trigraphs to enable" msgstr "chữ ba « ??%c » bị bỏ qua nên hãy sư dụng tùy chon « -trigraphs » (chữ ba) để hiệu lực nó" #: lex.c:356 msgid "\"/*\" within comment" msgstr "gặp « /* » nằm trong chú thích" #: lex.c:414 #, c-format msgid "%s in preprocessing directive" msgstr "gặp %s nằm trong chỉ thị tiền xử lý" #: lex.c:423 msgid "null character(s) ignored" msgstr "(mọi) ký tự rỗng bị bỏ qua" #: lex.c:460 #, c-format msgid "`%.*s' is not in NFKC" msgstr "« %.*s » không phải nằm trong NFKC" #: lex.c:463 #, c-format msgid "`%.*s' is not in NFC" msgstr "« %.*s » không phải nằm trong NFC" #: lex.c:551 #, c-format msgid "attempt to use poisoned \"%s\"" msgstr "đã cố gắng dùng « %s » bị vô hiệu hóa" #: lex.c:559 msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "« __VA_ARGS__ » chỉ có thể xuất hiện trong sự mở rộng của vĩ lệnh biến thiên C99" #: lex.c:659 msgid "null character(s) preserved in literal" msgstr "(các) ký tự rỗng được giữ lại trong điều nghĩa chữ" #: lex.c:662 #, c-format msgid "missing terminating %c character" msgstr "thiếu ký tự « %c » chấm dứt" #: lex.c:1027 msgid "C++ style comments are not allowed in ISO C90" msgstr "không cho phép chú thích kiểu C++ nằm trong ISO C90" #: lex.c:1029 msgid "(this will be reported only once per input file)" msgstr "(điều này sẽ được thông báo chỉ một lần cho mỗi tập tin nhập)" #: lex.c:1034 msgid "multi-line comment" msgstr "gặp chú thích đa dòng" #: lex.c:1347 #, c-format msgid "unspellable token %s" msgstr "gặp hiệu bài không thể chính tả %s" #: line-map.c:320 #, c-format msgid "In file included from %s:%u" msgstr "Trong tập tin được bao gồm từ %s:%u" #: line-map.c:338 #, c-format msgid "" ",\n" " from %s:%u" msgstr "" ",\n" " từ %s:%u" #: macro.c:84 #, c-format msgid "macro \"%s\" is not used" msgstr "bộ đối số « %s » không được dùng" #: macro.c:123 macro.c:319 #, c-format msgid "invalid built-in macro \"%s\"" msgstr "vĩ lệnh có sẳn không hợp lệ « %s »" #: macro.c:157 msgid "could not determine file timestamp" msgstr "không thể quyết định nhãn giờ của tập tin" #: macro.c:254 msgid "could not determine date and time" msgstr "không thể quyết định ngày và giờ" #: macro.c:270 msgid "__COUNTER__ expanded inside directive with -fdirectives-only" msgstr "__COUNTER__ đã mở rộng bên trong chỉ thị với « -fdirectives-only »" #: macro.c:423 msgid "invalid string literal, ignoring final '\\'" msgstr "điều nghĩa chữ chuỗi không hợp lệ nên bỏ qua « \\ » cuối cùng" #: macro.c:483 #, c-format msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "việc dán « %s » và « %s » không đưa ra hiệu bài tiền xử lý hợp lệ" #: macro.c:558 msgid "ISO C99 requires rest arguments to be used" msgstr "ISO C99 cần đến đối số còn lại trong khối được dùng" #: macro.c:563 #, c-format msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "vĩ lệnh « %s » cần đến %u đối số, nhưng chỉ đưa ra %u thôi" #: macro.c:568 #, c-format msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "vĩ lệnh « %s » đã gởi %u đối số, nhưng nhận chỉ %u thôi" #: macro.c:679 traditional.c:680 #, c-format msgid "unterminated argument list invoking macro \"%s\"" msgstr "danh sách đối số không được chấm dứt có gọi vĩ lệnh « %s »" #: macro.c:782 #, c-format msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "vĩ lệnh giống hàm số « %s » phải được dùng với đối số trong ngôn ngữ C truyền thống" #: macro.c:1325 #, c-format msgid "duplicate macro parameter \"%s\"" msgstr "tham số vĩ lệnh trùng « %s »" #: macro.c:1371 #, c-format msgid "\"%s\" may not appear in macro parameter list" msgstr "không cho phép « %s » xuất hiện trong danh sách tham số vĩ lệnh" #: macro.c:1379 msgid "macro parameters must be comma-separated" msgstr "các tham số bộ đối số phải được ngăn cách bởi dấu phẩy" #: macro.c:1396 msgid "parameter name missing" msgstr "thiếu tên tham số" #: macro.c:1413 msgid "anonymous variadic macros were introduced in C99" msgstr "vĩ lệnh biến thiên vô danh đã được giới thiệu trong C99" #: macro.c:1418 msgid "ISO C does not permit named variadic macros" msgstr "ISO C không cho phép vĩ lệnh biến thiên có tên" #: macro.c:1427 msgid "missing ')' in macro parameter list" msgstr "thiếu « ) » trong danh sách tham số bộ đối số" #: macro.c:1476 msgid "'##' cannot appear at either end of a macro expansion" msgstr "không cho phép « ## » nằm hoặc trước hoặc sau sự mở rộng vĩ lệnh" #: macro.c:1510 msgid "ISO C99 requires whitespace after the macro name" msgstr "ISO C99 cần đến khoảng trắng nằm sau tên vĩ lệnh" #: macro.c:1534 msgid "missing whitespace after the macro name" msgstr "thiếu khoảng trắng nằm sau tên vĩ lệnh" #: macro.c:1564 msgid "'#' is not followed by a macro parameter" msgstr "« # » không có tham số vĩ lệnh đi theo" #: macro.c:1683 #, c-format msgid "\"%s\" redefined" msgstr "« %s » đã được xác định lại" #: macro.c:1688 msgid "this is the location of the previous definition" msgstr "đây là vị trí của lời xác định trước" #: macro.c:1738 #, c-format msgid "macro argument \"%s\" would be stringified in traditional C" msgstr "đối số vĩ lệnh « %s » nên được chuyển đổi thành chuỗi trong ngôn ngữ C truyền thống" #: macro.c:1761 #, c-format msgid "invalid hash type %d in cpp_macro_definition" msgstr "gặp kiểu băm không hợp lệ %d trong « cpp_macro_definition » (lời xác định vĩ lệnh)" #: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377 msgid "while writing precompiled header" msgstr "trong khi ghi đầu trang biên dịch sẵn" #: pch.c:485 #, c-format msgid "%s: not used because `%.*s' not defined" msgstr "%s: không được dùng vì chưa xác định « %.*s »" #: pch.c:497 #, c-format msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'" msgstr "%s: không được dùng vì « %.*s » đã được xác định là « %s » không phải « %.*s »" #: pch.c:538 #, c-format msgid "%s: not used because `%s' is defined" msgstr "%s: không được dùng vì « %s » đã được xác định" #: pch.c:558 #, c-format msgid "%s: not used because `__COUNTER__' is invalid" msgstr "%s: không được dùng vì « __COUNTER__ » không hợp lệ" #: pch.c:567 pch.c:737 msgid "while reading precompiled header" msgstr "trong khi đọc đầu trang biên dịch sẵn" #: traditional.c:750 #, c-format msgid "detected recursion whilst expanding macro \"%s\"" msgstr "đã phát hiện sự đệ qui trong khi mở rộng vĩ lệnh « %s »" #: traditional.c:917 msgid "syntax error in macro parameter list" msgstr "gặp lỗi cú pháp trong danh sách tham số vĩ lệnh" nescc-1.3.4/libcpp/po/zh_CN.po000066400000000000000000000560511177770303300160610ustar00rootroot00000000000000# Simplified Chinese translation for cpplib. # Copyright (C) 2005 Free Software Foundation, Inc. # This file is distributed under the same license as the cpplib package. # Meng Jie , 2005. # msgid "" msgstr "" "Project-Id-Version: cpplib 4.3-b20071109\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2007-11-08 21:08+0000\n" "PO-Revision-Date: 2007-11-11 17:29+0800\n" "Last-Translator: Meng Jie \n" "Language-Team: Chinese (simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: charset.c:654 #, c-format msgid "conversion from %s to %s not supported by iconv" msgstr "iconv 不支持从 %s 到 %s 的转换" #: charset.c:657 msgid "iconv_open" msgstr "iconv_open" #: charset.c:665 #, c-format msgid "no iconv implementation, cannot convert from %s to %s" msgstr "没有 iconv 的实现,无法从 %s 转换到 %s" #: charset.c:742 #, c-format msgid "character 0x%lx is not in the basic source character set\n" msgstr "字符 0x%lx 不在基本源字符集中\n" #: charset.c:759 charset.c:1352 msgid "converting to execution character set" msgstr "转换到可执行文件的字符集" #: charset.c:765 #, c-format msgid "character 0x%lx is not unibyte in execution character set" msgstr "字符 0x%lx 在执行字符集中不是单字节的" #: charset.c:889 #, c-format msgid "Character %x might not be NFKC" msgstr "字符 %x 可能不是 NFKC" #: charset.c:949 msgid "universal character names are only valid in C++ and C99" msgstr "Unicode 字符名只在 C++ 和 C99 中有效" #: charset.c:952 #, c-format msgid "the meaning of '\\%c' is different in traditional C" msgstr "‘\\%c’的意义与在传统 C 中不同" #: charset.c:961 msgid "In _cpp_valid_ucn but not a UCN" msgstr "在 _cpp_valid_ucn 中但不是一个 UCN" #: charset.c:986 #, c-format msgid "incomplete universal character name %.*s" msgstr "不完全的 Unicode 字符名 %.*s" #: charset.c:998 #, c-format msgid "%.*s is not a valid universal character" msgstr "%.*s 不是一个有效的 Unicode 字符" #: charset.c:1008 lex.c:484 msgid "'$' in identifier or number" msgstr "‘$’出现在标识符或数字中" #: charset.c:1018 #, c-format msgid "universal character %.*s is not valid in an identifier" msgstr "Unicode 字符 %.*s 在标识符中无效" #: charset.c:1022 #, c-format msgid "universal character %.*s is not valid at the start of an identifier" msgstr "Unicode 字符 %.*s 在标识符开头无效" #: charset.c:1056 charset.c:1571 msgid "converting UCN to source character set" msgstr "将 UCN 转换到源字符集" #: charset.c:1060 msgid "converting UCN to execution character set" msgstr "将 UCN 转换到执行字符集" #: charset.c:1132 msgid "the meaning of '\\x' is different in traditional C" msgstr "‘\\x’的意义与在传统 C 中不同" #: charset.c:1149 msgid "\\x used with no following hex digits" msgstr "\\x 后没有 16 进制数字" #: charset.c:1156 msgid "hex escape sequence out of range" msgstr "16 进制转义序列越界" #: charset.c:1195 msgid "octal escape sequence out of range" msgstr "8 进制转义序列越界" #: charset.c:1263 msgid "the meaning of '\\a' is different in traditional C" msgstr "‘\\a’的意义与在传统 C 中不同" #: charset.c:1270 #, c-format msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "非 ISO 标准的转义序列,‘\\%c’" #: charset.c:1278 #, c-format msgid "unknown escape sequence '\\%c'" msgstr "未知的转义序列:‘\\%c’" #: charset.c:1286 #, c-format msgid "unknown escape sequence: '\\%s'" msgstr "未知的转义序列:‘\\%s’" #: charset.c:1293 msgid "converting escape sequence to execution character set" msgstr "将转义序列转换到执行字符集" #: charset.c:1415 charset.c:1478 msgid "character constant too long for its type" msgstr "字符常量大小超出其类型" #: charset.c:1418 msgid "multi-character character constant" msgstr "多字节字符常量" #: charset.c:1510 msgid "empty character constant" msgstr "空的字符常量" #: charset.c:1612 #, c-format msgid "failure to convert %s to %s" msgstr "无法从 %s 转换到 %s" #: directives.c:215 directives.c:241 #, c-format msgid "extra tokens at end of #%s directive" msgstr "#%s 指示的末尾有多余的标识符" #: directives.c:344 #, c-format msgid "#%s is a GCC extension" msgstr "#%s 是一个 GCC 扩展" #: directives.c:356 msgid "suggest not using #elif in traditional C" msgstr "建议在传统 C 中不使用 #elif" #: directives.c:359 #, c-format msgid "traditional C ignores #%s with the # indented" msgstr "当 # 有缩进时传统 C 忽略 #%s" #: directives.c:363 #, c-format msgid "suggest hiding #%s from traditional C with an indented #" msgstr "建议使用缩进的 # 以让 #%s 对传统 C 不可见" #: directives.c:389 msgid "embedding a directive within macro arguments is not portable" msgstr "将一个指示嵌入宏参数中是不可移植的" #: directives.c:409 msgid "style of line directive is a GCC extension" msgstr "line 指示的风格是一个 GCC 扩展" #: directives.c:464 #, c-format msgid "invalid preprocessing directive #%s" msgstr "无效的预处理指示 #%s" #: directives.c:532 msgid "\"defined\" cannot be used as a macro name" msgstr "“defined”不能被用作宏名" #: directives.c:538 #, c-format msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "“%s”不能被用作宏名,因为它是 C++ 中的一个操作符" #: directives.c:541 #, c-format msgid "no macro name given in #%s directive" msgstr "#%s 指示中未给出宏名" #: directives.c:544 msgid "macro names must be identifiers" msgstr "宏名必须是标识符" #: directives.c:585 #, c-format msgid "undefining \"%s\"" msgstr "取消对“%s”的定义" #: directives.c:640 msgid "missing terminating > character" msgstr "缺少结尾的 > 字符" #: directives.c:695 #, c-format msgid "#%s expects \"FILENAME\" or " msgstr "#%s 需要 \"FILENAME\" 或 " #: directives.c:739 #, c-format msgid "empty filename in #%s" msgstr "#%s 中文件名为空" #: directives.c:749 msgid "#include nested too deeply" msgstr "#include 嵌套过深" #: directives.c:790 msgid "#include_next in primary source file" msgstr "#include_next 出现在主源文件中" #: directives.c:816 #, c-format msgid "invalid flag \"%s\" in line directive" msgstr "line 指示中有无效的标记“%s”" #: directives.c:868 #, c-format msgid "\"%s\" after #line is not a positive integer" msgstr "#line 后的“%s”不是一个正整数" #: directives.c:874 msgid "line number out of range" msgstr "行号超出范围" #: directives.c:887 directives.c:964 #, c-format msgid "\"%s\" is not a valid filename" msgstr "“%s”不是一个有效的文件名" #: directives.c:924 #, c-format msgid "\"%s\" after # is not a positive integer" msgstr "# 后的“%s”不是一个正整数" #: directives.c:1026 #, c-format msgid "invalid #%s directive" msgstr "无效的 #%s 指示" #: directives.c:1089 #, c-format msgid "registering pragmas in namespace \"%s\" with mismatched name expansion" msgstr "在命名空间“%s”中注册 pragma 时名称扩展不匹配" #: directives.c:1098 #, c-format msgid "registering pragma \"%s\" with name expansion and no namespace" msgstr "pragma “%s”被注册为一个命名扩展,而没有命名空间" #: directives.c:1116 #, c-format msgid "registering \"%s\" as both a pragma and a pragma namespace" msgstr "“%s”既被注册为一个pragma 又被注册为一个 pragma 命名空间" #: directives.c:1119 #, c-format msgid "#pragma %s %s is already registered" msgstr "#pragma %s %s 已经被注册" #: directives.c:1122 #, c-format msgid "#pragma %s is already registered" msgstr "#pragma %s 已经被注册" #: directives.c:1152 msgid "registering pragma with NULL handler" msgstr "pragma 注册为被 NULL 处理" #: directives.c:1362 msgid "#pragma once in main file" msgstr "#pragma once 出现在主文件中" #: directives.c:1385 msgid "invalid #pragma GCC poison directive" msgstr "无效的 #pragma GCC poison 指示" #: directives.c:1394 #, c-format msgid "poisoning existing macro \"%s\"" msgstr "对已存在的宏“%s”投毒" #: directives.c:1413 msgid "#pragma system_header ignored outside include file" msgstr "#pragma system_heade 在包含文件外被忽略" #: directives.c:1437 #, c-format msgid "cannot find source file %s" msgstr "找不到源文件 %s" #: directives.c:1441 #, c-format msgid "current file is older than %s" msgstr "当前文件早于 %s" #: directives.c:1620 msgid "_Pragma takes a parenthesized string literal" msgstr "_Pragma 需要一个括起的字符串字面常量" #: directives.c:1693 msgid "#else without #if" msgstr "#else 没有匹配的 #if" #: directives.c:1698 msgid "#else after #else" msgstr "#else 出现在 #else 后" #: directives.c:1700 directives.c:1733 msgid "the conditional began here" msgstr "条件自此开始" #: directives.c:1726 msgid "#elif without #if" msgstr "#elif 没有匹配的 #if" #: directives.c:1731 msgid "#elif after #else" msgstr "#elif 出现在 #else 后" #: directives.c:1761 msgid "#endif without #if" msgstr "#endif 没有匹配的 #if" #: directives.c:1838 msgid "missing '(' after predicate" msgstr "谓词后缺少‘(’" #: directives.c:1853 msgid "missing ')' to complete answer" msgstr "完整的答案缺少‘)’" #: directives.c:1873 msgid "predicate's answer is empty" msgstr "谓词的答案为空" #: directives.c:1900 msgid "assertion without predicate" msgstr "断言后没有谓词" #: directives.c:1902 msgid "predicate must be an identifier" msgstr "谓词必须是一个标识符" #: directives.c:1988 #, c-format msgid "\"%s\" re-asserted" msgstr "重断言“%s”" #: directives.c:2271 #, c-format msgid "unterminated #%s" msgstr "未终止的 #%s" #: directives-only.c:221 lex.c:1016 traditional.c:162 msgid "unterminated comment" msgstr "未结束的注释" #: errors.c:118 msgid "warning: " msgstr "警告:" #: errors.c:120 msgid "internal error: " msgstr "内部错误:" #: errors.c:122 msgid "error: " msgstr "错误:" #: errors.c:186 msgid "stdout" msgstr "stdout" #: errors.c:188 #, c-format msgid "%s: %s" msgstr "%s:%s" #: expr.c:261 msgid "too many decimal points in number" msgstr "数字中有太多小数点" #: expr.c:290 expr.c:365 msgid "fixed-point constants are a GCC extension" msgstr "定点常量是一个 GCC 扩展" #: expr.c:303 #, c-format msgid "invalid digit \"%c\" in binary constant" msgstr "二进制常量中有无效数字“%c”" #: expr.c:305 #, c-format msgid "invalid digit \"%c\" in octal constant" msgstr "8 进制常量中有非法字符“%c”" #: expr.c:313 msgid "invalid prefix \"0b\" for floating constant" msgstr "浮点常量的“0b”前缀无效" #: expr.c:319 msgid "use of C99 hexadecimal floating constant" msgstr "使用 C99 式的 16 进制浮点常量" #: expr.c:328 msgid "exponent has no digits" msgstr "指数部分没有数字" #: expr.c:335 msgid "hexadecimal floating constants require an exponent" msgstr "16 进制浮点常量需要指数部分" #: expr.c:341 #, c-format msgid "invalid suffix \"%.*s\" on floating constant" msgstr "浮点常量的“%.*s”后缀无效" #: expr.c:351 expr.c:393 #, c-format msgid "traditional C rejects the \"%.*s\" suffix" msgstr "传统 C 不接受“%.*s”后缀" #: expr.c:358 #, c-format msgid "invalid suffix \"%.*s\" with hexadecimal floating constant" msgstr "十六进制浮点常量的“%.*s”后缀无效" #: expr.c:369 msgid "decimal float constants are a GCC extension" msgstr "十进制浮点常量是一个 GCC 扩展" #: expr.c:379 #, c-format msgid "invalid suffix \"%.*s\" on integer constant" msgstr "整数常量的“%.*s”后缀无效" #: expr.c:401 msgid "use of C99 long long integer constant" msgstr "使用 C99 long long 整数常量" #: expr.c:409 msgid "imaginary constants are a GCC extension" msgstr "虚数常量是一个 GCC 扩展" #: expr.c:412 msgid "binary constants are a GCC extension" msgstr "二进制常量是一个 GCC 扩展" #: expr.c:505 msgid "integer constant is too large for its type" msgstr "整数常量值超出其类型" #: expr.c:517 msgid "integer constant is so large that it is unsigned" msgstr "整数常量太大,认定为 unsigned" #: expr.c:612 msgid "missing ')' after \"defined\"" msgstr "“defined” 后出现‘)’" #: expr.c:619 msgid "operator \"defined\" requires an identifier" msgstr "操作符“defined”需要一个标识符" #: expr.c:627 #, c-format msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "(在 C++ 中“%s”会是“%s”的替代标识符)" #: expr.c:637 msgid "this use of \"defined\" may not be portable" msgstr "使用“defined”可能不利于移植" #: expr.c:676 msgid "floating constant in preprocessor expression" msgstr "浮点常量出现在预处理表达式中" #: expr.c:682 msgid "imaginary number in preprocessor expression" msgstr "预处理表达式中出现虚数" #: expr.c:727 #, c-format msgid "\"%s\" is not defined" msgstr "“%s”未定义" #: expr.c:855 expr.c:884 #, c-format msgid "missing binary operator before token \"%s\"" msgstr "标识符“%s”前缺少二元运算符" #: expr.c:875 #, c-format msgid "token \"%s\" is not valid in preprocessor expressions" msgstr "标识符“%s”在预处理表达式中无效" #: expr.c:892 msgid "missing expression between '(' and ')'" msgstr "‘(’与‘)’之间缺少表达式" #: expr.c:895 msgid "#if with no expression" msgstr "#if 后没有表达式" #: expr.c:898 #, c-format msgid "operator '%s' has no right operand" msgstr "操作符‘%s’没有右操作数" #: expr.c:903 #, c-format msgid "operator '%s' has no left operand" msgstr "操作符‘%s’没有左操作数" #: expr.c:929 msgid " ':' without preceding '?'" msgstr "‘:’前没有‘?’" #: expr.c:956 msgid "unbalanced stack in #if" msgstr "#if 中不平衡的堆栈" #: expr.c:975 #, c-format msgid "impossible operator '%u'" msgstr "不可能的操作‘%u’" #: expr.c:1065 msgid "missing ')' in expression" msgstr "表达式中缺少‘)’" #: expr.c:1086 msgid "'?' without following ':'" msgstr "‘?’后没有‘:’" #: expr.c:1096 msgid "integer overflow in preprocessor expression" msgstr "预处理表达式中整数溢出" #: expr.c:1101 msgid "missing '(' in expression" msgstr "表达式中缺少‘(’" #: expr.c:1133 #, c-format msgid "the left operand of \"%s\" changes sign when promoted" msgstr "“%s”的左操作数在提升时变换了符号" #: expr.c:1138 #, c-format msgid "the right operand of \"%s\" changes sign when promoted" msgstr "“%s”的右操作数在提升时变换了符号" #: expr.c:1397 msgid "traditional C rejects the unary plus operator" msgstr "传统 C 不接受单目 + 运算符" #: expr.c:1480 msgid "comma operator in operand of #if" msgstr "#if 操作数中出现逗号" #: expr.c:1612 msgid "division by zero in #if" msgstr "#if 中用零做除数" #: files.c:442 msgid "NULL directory in find_file" msgstr "find_file 中有 NULL 目录" #: files.c:480 msgid "one or more PCH files were found, but they were invalid" msgstr "找到一个或多个 PCH 文件,但它们是无效的" #: files.c:483 msgid "use -Winvalid-pch for more information" msgstr "使用 -Winvalid-pch 以获得更多信息" #: files.c:570 #, c-format msgid "%s is a block device" msgstr "%s 是一个块设备" #: files.c:587 #, c-format msgid "%s is too large" msgstr "%s 过大" #: files.c:622 #, c-format msgid "%s is shorter than expected" msgstr "%s 短于预期" #: files.c:852 #, c-format msgid "no include path in which to search for %s" msgstr "没有包含路径可供搜索 %s" #: files.c:1157 msgid "Multiple include guards may be useful for:\n" msgstr "多个防止重包含可能对其有用:\n" #: init.c:426 msgid "cppchar_t must be an unsigned type" msgstr "cppchar_t 必须是无符号型" #: init.c:430 #, c-format msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits" msgstr "预处理算术的最高精度为 %lu 位;目标需要 %lu 位" #: init.c:437 msgid "CPP arithmetic must be at least as precise as a target int" msgstr "CPP 算术必须至少具有目标 int 的精度" #: init.c:440 msgid "target char is less than 8 bits wide" msgstr "目标 char 短于 8 位" #: init.c:444 msgid "target wchar_t is narrower than target char" msgstr "目录 wchar_t 短于目标 char" #: init.c:448 msgid "target int is narrower than target char" msgstr "目标 int 短于目标 char" #: init.c:453 msgid "CPP half-integer narrower than CPP character" msgstr "CPP 半整数短于 CPP 字符" #: init.c:457 #, c-format msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits" msgstr "在此宿主机上,CPP 不能处理长于 %lu 位的宽字符常量,但目标需要 %lu 位" #: lex.c:283 msgid "backslash and newline separated by space" msgstr "反斜杠和换行为空格所分隔" #: lex.c:288 msgid "backslash-newline at end of file" msgstr "反斜杠续行出现在文件末尾" #: lex.c:303 #, c-format msgid "trigraph ??%c converted to %c" msgstr "三元符 ??%c 转换为 %c" #: lex.c:310 #, c-format msgid "trigraph ??%c ignored, use -trigraphs to enable" msgstr "三元符 ??%c 被忽略,请使用 -trigraphs 来启用" #: lex.c:356 msgid "\"/*\" within comment" msgstr "“/*”出现在注释中" #: lex.c:414 #, c-format msgid "%s in preprocessing directive" msgstr "预处理指示中出现 %s" #: lex.c:423 msgid "null character(s) ignored" msgstr "忽略空字符" #: lex.c:460 #, c-format msgid "`%.*s' is not in NFKC" msgstr "‘%.*s’不在 NFKC 中" #: lex.c:463 #, c-format msgid "`%.*s' is not in NFC" msgstr "‘%.*s’不在 NFC 中" #: lex.c:551 #, c-format msgid "attempt to use poisoned \"%s\"" msgstr "试图使用有毒的“%s”" #: lex.c:559 msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "__VA_ARGS__ 只能出现在 C99 可变参数宏的展开中" #: lex.c:659 msgid "null character(s) preserved in literal" msgstr "空字符将保留在字面字符串中" #: lex.c:662 #, c-format msgid "missing terminating %c character" msgstr "缺少结尾的 %c 字符" #: lex.c:1027 msgid "C++ style comments are not allowed in ISO C90" msgstr "C++ 风格的注释在 ISO C90 中不被允许" #: lex.c:1029 msgid "(this will be reported only once per input file)" msgstr "(此警告为每个输入文件只报告一次)" #: lex.c:1034 msgid "multi-line comment" msgstr "多行注释" #: lex.c:1347 #, c-format msgid "unspellable token %s" msgstr "无法拼出的标识符 %s" #: line-map.c:320 #, c-format msgid "In file included from %s:%u" msgstr "在包含自 %s:%u 的文件中" #: line-map.c:338 #, c-format msgid "" ",\n" " from %s:%u" msgstr "" ",\n" " 从 %s:%u" #: macro.c:84 #, c-format msgid "macro \"%s\" is not used" msgstr "宏“%s”未被使用" #: macro.c:123 macro.c:319 #, c-format msgid "invalid built-in macro \"%s\"" msgstr "无效的内建宏“%s”" #: macro.c:157 msgid "could not determine file timestamp" msgstr "无法决定文件的时间戳" #: macro.c:254 msgid "could not determine date and time" msgstr "无法决定日期与时间" #: macro.c:270 msgid "__COUNTER__ expanded inside directive with -fdirectives-only" msgstr "带 -fdirectives-only 时 __COUNTER__ 在指示中扩展" #: macro.c:423 msgid "invalid string literal, ignoring final '\\'" msgstr "无效的字面字符串,忽略最后的‘\\’" #: macro.c:483 #, c-format msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "毗连“%s”和“%s”不能给出一个有效的预处理标识符" #: macro.c:558 msgid "ISO C99 requires rest arguments to be used" msgstr "ISO C99 需要使用剩余的参数" #: macro.c:563 #, c-format msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "宏“%s”需要 %u 个参数,但只给出了 %u 个" #: macro.c:568 #, c-format msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "宏“%s”传递了 %u 个参数,但只需要 %u 个" #: macro.c:679 traditional.c:680 #, c-format msgid "unterminated argument list invoking macro \"%s\"" msgstr "调用宏“%s”时参数列表未终止" #: macro.c:782 #, c-format msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "类似函数的宏“%s”在传统 C 中必须与参数一起使用" #: macro.c:1325 #, c-format msgid "duplicate macro parameter \"%s\"" msgstr "重复的宏参数“%s”" #: macro.c:1371 #, c-format msgid "\"%s\" may not appear in macro parameter list" msgstr "“%s”不能出现在宏参数列表中" #: macro.c:1379 msgid "macro parameters must be comma-separated" msgstr "宏参数必须由逗号隔开" #: macro.c:1396 msgid "parameter name missing" msgstr "缺少形参名" #: macro.c:1413 msgid "anonymous variadic macros were introduced in C99" msgstr "匿名可变参数宏在 C99 中被引入" #: macro.c:1418 msgid "ISO C does not permit named variadic macros" msgstr "ISO C 不允许有名的可变参数宏" #: macro.c:1427 msgid "missing ')' in macro parameter list" msgstr "在宏参数表中缺少‘)’" #: macro.c:1476 msgid "'##' cannot appear at either end of a macro expansion" msgstr "‘##’不能出现在宏展开的两端" #: macro.c:1510 msgid "ISO C99 requires whitespace after the macro name" msgstr "ISO C99 要求宏名后必须有空白" #: macro.c:1534 msgid "missing whitespace after the macro name" msgstr "宏名后缺少空白" #: macro.c:1564 msgid "'#' is not followed by a macro parameter" msgstr "‘#’后没有宏参数" #: macro.c:1683 #, c-format msgid "\"%s\" redefined" msgstr "“%s”重定义" #: macro.c:1688 msgid "this is the location of the previous definition" msgstr "这是先前定义的位置" #: macro.c:1738 #, c-format msgid "macro argument \"%s\" would be stringified in traditional C" msgstr "宏参数“%s”将在传统 C 中被字符串化" #: macro.c:1761 #, c-format msgid "invalid hash type %d in cpp_macro_definition" msgstr "cpp_macro_definition 中有无效的散列类型 %d" #: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377 msgid "while writing precompiled header" msgstr "在写入预编译头时" #: pch.c:485 #, c-format msgid "%s: not used because `%.*s' not defined" msgstr "%s:未使用因为‘%.*s’未定义" #: pch.c:497 #, c-format msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'" msgstr "%s:未使用因为‘%.*s’被定义为‘%s’而非‘%*.s’" #: pch.c:538 #, c-format msgid "%s: not used because `%s' is defined" msgstr "%s:未使用因为‘%s’已定义" #: pch.c:558 #, c-format msgid "%s: not used because `__COUNTER__' is invalid" msgstr "%s:未使用因为‘__COUNTER__’无效" #: pch.c:567 pch.c:737 msgid "while reading precompiled header" msgstr "在读取预编译头时" #: traditional.c:750 #, c-format msgid "detected recursion whilst expanding macro \"%s\"" msgstr "展开宏“%s”时检测到递归" #: traditional.c:917 msgid "syntax error in macro parameter list" msgstr "宏参数列表语法错误" #~ msgid "no newline at end of file" #~ msgstr "文件未以空白行结束" nescc-1.3.4/libcpp/po/zh_TW.po000066400000000000000000000563051177770303300161150ustar00rootroot00000000000000# Traditional Chinese translation for cpplib. # Copyright (C) 2005 Free Software Foundation, Inc. # This file is distributed under the same license as the cpplib package. # Meng Jie , 2005. # Wei-Lun Chao , 2006. # msgid "" msgstr "" "Project-Id-Version: cpplib 4.1.0\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" "POT-Creation-Date: 2007-11-08 21:08+0000\n" "PO-Revision-Date: 2006-03-09 12:37+0800\n" "Last-Translator: Wei-Lun Chao \n" "Language-Team: Chinese (traditional) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: charset.c:654 #, c-format msgid "conversion from %s to %s not supported by iconv" msgstr "iconv 不支援從 %s 到 %s 的轉換" #: charset.c:657 msgid "iconv_open" msgstr "iconv_open" #: charset.c:665 #, c-format msgid "no iconv implementation, cannot convert from %s to %s" msgstr "沒有實作 iconv,無法從 %s 轉換到 %s" #: charset.c:742 #, c-format msgid "character 0x%lx is not in the basic source character set\n" msgstr "字元 0x%lx 不在基本來源字元集中\n" #: charset.c:759 charset.c:1352 msgid "converting to execution character set" msgstr "轉換到可執行檔案的字元集" #: charset.c:765 #, c-format msgid "character 0x%lx is not unibyte in execution character set" msgstr "字元 0x%lx 在執行字元集中不是單位元組的" #: charset.c:889 #, c-format msgid "Character %x might not be NFKC" msgstr "字元 %x 可能不是 NFKC" #: charset.c:949 msgid "universal character names are only valid in C++ and C99" msgstr "萬國碼字元名稱只在 C++ 和 C99 中有效" #: charset.c:952 #, c-format msgid "the meaning of '\\%c' is different in traditional C" msgstr "「\\%c」的意義與在傳統 C 中不同" #: charset.c:961 msgid "In _cpp_valid_ucn but not a UCN" msgstr "在 _cpp_valid_ucn 中並不是一個 UCN" #: charset.c:986 #, c-format msgid "incomplete universal character name %.*s" msgstr "不完整的萬國碼字元名稱 %.*s" #: charset.c:998 #, c-format msgid "%.*s is not a valid universal character" msgstr "%.*s 不是一個有效的萬國碼字元" #: charset.c:1008 lex.c:484 msgid "'$' in identifier or number" msgstr "「$」出現在識別字或數字中" #: charset.c:1018 #, c-format msgid "universal character %.*s is not valid in an identifier" msgstr "萬國碼字元 %.*s 在識別字中無效" #: charset.c:1022 #, c-format msgid "universal character %.*s is not valid at the start of an identifier" msgstr "萬國碼字元 %.*s 在識別字開頭無效" #: charset.c:1056 charset.c:1571 msgid "converting UCN to source character set" msgstr "將 UCN 轉換到來源字元集" #: charset.c:1060 msgid "converting UCN to execution character set" msgstr "將 UCN 轉換到執行字元集" #: charset.c:1132 msgid "the meaning of '\\x' is different in traditional C" msgstr "「\\x」的意義與在傳統 C 中不同" #: charset.c:1149 msgid "\\x used with no following hex digits" msgstr "\\x 後沒有十六進位數字" #: charset.c:1156 msgid "hex escape sequence out of range" msgstr "十六進位逸出序列越界" #: charset.c:1195 msgid "octal escape sequence out of range" msgstr "八進位逸出序列越界" #: charset.c:1263 msgid "the meaning of '\\a' is different in traditional C" msgstr "「\\a」的意義與在傳統 C 中不同" #: charset.c:1270 #, c-format msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "非 ISO 標準的逸出序列,「\\%c」" #: charset.c:1278 #, c-format msgid "unknown escape sequence '\\%c'" msgstr "不明的逸出序列:「\\%c」" #: charset.c:1286 #, c-format msgid "unknown escape sequence: '\\%s'" msgstr "不明的逸出序列:「\\%s」" #: charset.c:1293 msgid "converting escape sequence to execution character set" msgstr "將逸出序列轉換到執行字元集" #: charset.c:1415 charset.c:1478 msgid "character constant too long for its type" msgstr "字元常數大小超出其類型" #: charset.c:1418 msgid "multi-character character constant" msgstr "多位元組字元常數" #: charset.c:1510 msgid "empty character constant" msgstr "空的字元常數" #: charset.c:1612 #, c-format msgid "failure to convert %s to %s" msgstr "無法從 %s 轉換到 %s" #: directives.c:215 directives.c:241 #, c-format msgid "extra tokens at end of #%s directive" msgstr "#%s 指令的末尾有多餘的符記" #: directives.c:344 #, c-format msgid "#%s is a GCC extension" msgstr "#%s 是 GCC 擴充功能" #: directives.c:356 msgid "suggest not using #elif in traditional C" msgstr "建議在傳統 C 中不要使用 #elif" #: directives.c:359 #, c-format msgid "traditional C ignores #%s with the # indented" msgstr "當 # 有縮排時傳統 C 忽略 #%s" #: directives.c:363 #, c-format msgid "suggest hiding #%s from traditional C with an indented #" msgstr "建議使用縮排的 # 以讓 #%s 對傳統 C 不可見" #: directives.c:389 msgid "embedding a directive within macro arguments is not portable" msgstr "將一個指令內嵌於巨集參數中是不可移植的" #: directives.c:409 msgid "style of line directive is a GCC extension" msgstr "line 指令的風格是 GCC 擴充功能" #: directives.c:464 #, c-format msgid "invalid preprocessing directive #%s" msgstr "無效的預先處理指令 #%s" #: directives.c:532 msgid "\"defined\" cannot be used as a macro name" msgstr "「defined」不能做為巨集名" #: directives.c:538 #, c-format msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "「%s」不能做為巨集名,因為它是 C++ 中的一個運算子" #: directives.c:541 #, c-format msgid "no macro name given in #%s directive" msgstr "#%s 指令中未給出巨集名" #: directives.c:544 msgid "macro names must be identifiers" msgstr "巨集名必須是識別字" #: directives.c:585 #, c-format msgid "undefining \"%s\"" msgstr "取消對「%s」的定義" #: directives.c:640 msgid "missing terminating > character" msgstr "缺少結尾的 > 字元" #: directives.c:695 #, c-format msgid "#%s expects \"FILENAME\" or " msgstr "#%s 需要 \"FILENAME\" 或 " #: directives.c:739 #, c-format msgid "empty filename in #%s" msgstr "#%s 中檔案名稱為空" #: directives.c:749 msgid "#include nested too deeply" msgstr "#include 巢狀過深" #: directives.c:790 msgid "#include_next in primary source file" msgstr "#include_next 出現在主來源檔案中" #: directives.c:816 #, c-format msgid "invalid flag \"%s\" in line directive" msgstr "line 指令中有無效的標記「%s」" #: directives.c:868 #, c-format msgid "\"%s\" after #line is not a positive integer" msgstr "#line 後的「%s」不是一個正整數" #: directives.c:874 msgid "line number out of range" msgstr "列號超出範圍" #: directives.c:887 directives.c:964 #, c-format msgid "\"%s\" is not a valid filename" msgstr "「%s」不是一個有效的檔案名稱" #: directives.c:924 #, c-format msgid "\"%s\" after # is not a positive integer" msgstr "# 後的「%s」不是一個正整數" #: directives.c:1026 #, c-format msgid "invalid #%s directive" msgstr "無效的 #%s 指令" #: directives.c:1089 #, c-format msgid "registering pragmas in namespace \"%s\" with mismatched name expansion" msgstr "" #: directives.c:1098 #, fuzzy, c-format msgid "registering pragma \"%s\" with name expansion and no namespace" msgstr "「%s」既被註冊為一個 pragma 又被註冊為一個 pragma 命名空間" #: directives.c:1116 #, c-format msgid "registering \"%s\" as both a pragma and a pragma namespace" msgstr "「%s」既被註冊為一個 pragma 又被註冊為一個 pragma 命名空間" #: directives.c:1119 #, c-format msgid "#pragma %s %s is already registered" msgstr "#pragma %s %s 已經被註冊" #: directives.c:1122 #, c-format msgid "#pragma %s is already registered" msgstr "#pragma %s 已經被註冊" #: directives.c:1152 msgid "registering pragma with NULL handler" msgstr "" #: directives.c:1362 msgid "#pragma once in main file" msgstr "#pragma once 出現在主檔案中" #: directives.c:1385 msgid "invalid #pragma GCC poison directive" msgstr "無效的 #pragma GCC poison 指令" #: directives.c:1394 #, c-format msgid "poisoning existing macro \"%s\"" msgstr "對已存在的巨集「%s」加料" #: directives.c:1413 msgid "#pragma system_header ignored outside include file" msgstr "#pragma system_header 在包含檔案外被忽略" #: directives.c:1437 #, c-format msgid "cannot find source file %s" msgstr "找不到來源檔案 %s" #: directives.c:1441 #, c-format msgid "current file is older than %s" msgstr "目前檔案早於 %s" #: directives.c:1620 msgid "_Pragma takes a parenthesized string literal" msgstr "_Pragma 需要一個括起的字串原文" #: directives.c:1693 msgid "#else without #if" msgstr "#else 沒有匹配的 #if" #: directives.c:1698 msgid "#else after #else" msgstr "#else 出現在 #else 後" #: directives.c:1700 directives.c:1733 msgid "the conditional began here" msgstr "條件自此開始" #: directives.c:1726 msgid "#elif without #if" msgstr "#elif 沒有匹配的 #if" #: directives.c:1731 msgid "#elif after #else" msgstr "#elif 出現在 #else 後" #: directives.c:1761 msgid "#endif without #if" msgstr "#endif 沒有匹配的 #if" #: directives.c:1838 msgid "missing '(' after predicate" msgstr "述語後缺少「(」" #: directives.c:1853 msgid "missing ')' to complete answer" msgstr "完整的答案缺少「)」" #: directives.c:1873 msgid "predicate's answer is empty" msgstr "述語的答案為空" #: directives.c:1900 msgid "assertion without predicate" msgstr "判定語後沒有述語" #: directives.c:1902 msgid "predicate must be an identifier" msgstr "述語必須是一個識別字" #: directives.c:1988 #, c-format msgid "\"%s\" re-asserted" msgstr "已再判定「%s」" #: directives.c:2271 #, c-format msgid "unterminated #%s" msgstr "未終止的 #%s" #: directives-only.c:221 lex.c:1016 traditional.c:162 msgid "unterminated comment" msgstr "未終結的註釋" #: errors.c:118 msgid "warning: " msgstr "警告:" #: errors.c:120 msgid "internal error: " msgstr "內部錯誤:" #: errors.c:122 msgid "error: " msgstr "錯誤:" #: errors.c:186 msgid "stdout" msgstr "stdout" #: errors.c:188 #, c-format msgid "%s: %s" msgstr "%s:%s" #: expr.c:261 msgid "too many decimal points in number" msgstr "數字中有太多小數點" #: expr.c:290 expr.c:365 #, fuzzy msgid "fixed-point constants are a GCC extension" msgstr "虛數常數是一個 GCC 擴充功能" #: expr.c:303 #, fuzzy, c-format msgid "invalid digit \"%c\" in binary constant" msgstr "八進位常數中有無效字元「%c」" #: expr.c:305 #, c-format msgid "invalid digit \"%c\" in octal constant" msgstr "八進位常數中有無效字元「%c」" #: expr.c:313 #, fuzzy msgid "invalid prefix \"0b\" for floating constant" msgstr "浮點常數的「%.*s」字尾無效" #: expr.c:319 msgid "use of C99 hexadecimal floating constant" msgstr "使用 C99 式的十六進位浮點常數" #: expr.c:328 msgid "exponent has no digits" msgstr "指數部分沒有數字" #: expr.c:335 msgid "hexadecimal floating constants require an exponent" msgstr "十六進位浮點常數需要指數部分" #: expr.c:341 #, c-format msgid "invalid suffix \"%.*s\" on floating constant" msgstr "浮點常數的「%.*s」字尾無效" #: expr.c:351 expr.c:393 #, c-format msgid "traditional C rejects the \"%.*s\" suffix" msgstr "傳統 C 不接受「%.*s」字尾" #: expr.c:358 #, fuzzy, c-format msgid "invalid suffix \"%.*s\" with hexadecimal floating constant" msgstr "浮點常數的「%.*s」字尾無效" #: expr.c:369 #, fuzzy msgid "decimal float constants are a GCC extension" msgstr "虛數常數是一個 GCC 擴充功能" #: expr.c:379 #, c-format msgid "invalid suffix \"%.*s\" on integer constant" msgstr "整數常數的「%.*s」字尾無效" #: expr.c:401 msgid "use of C99 long long integer constant" msgstr "使用 C99 long long 整數常數" #: expr.c:409 msgid "imaginary constants are a GCC extension" msgstr "虛數常數是一個 GCC 擴充功能" #: expr.c:412 #, fuzzy msgid "binary constants are a GCC extension" msgstr "虛數常數是一個 GCC 擴充功能" #: expr.c:505 msgid "integer constant is too large for its type" msgstr "整數常數值超出其類型" #: expr.c:517 msgid "integer constant is so large that it is unsigned" msgstr "整數常數太大,認定為 unsigned" #: expr.c:612 msgid "missing ')' after \"defined\"" msgstr "「defined」 後缺少「)」" #: expr.c:619 msgid "operator \"defined\" requires an identifier" msgstr "運算子「defined」需要一個識別字" #: expr.c:627 #, c-format msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "(在 C++ 中「%s」會是「%s」的替代識別字)" #: expr.c:637 msgid "this use of \"defined\" may not be portable" msgstr "使用「defined」可能不利於移植" #: expr.c:676 msgid "floating constant in preprocessor expression" msgstr "浮點常數出現在預先處理運算式中" #: expr.c:682 msgid "imaginary number in preprocessor expression" msgstr "預先處理運算式中出現虛數" #: expr.c:727 #, c-format msgid "\"%s\" is not defined" msgstr "「%s」未定義" #: expr.c:855 expr.c:884 #, c-format msgid "missing binary operator before token \"%s\"" msgstr "識別字「%s」前缺少二元運算子" #: expr.c:875 #, c-format msgid "token \"%s\" is not valid in preprocessor expressions" msgstr "識別字「%s」在預先處理運算式中無效" #: expr.c:892 msgid "missing expression between '(' and ')'" msgstr "「(」與「)」之間缺少運算式" #: expr.c:895 msgid "#if with no expression" msgstr "#if 後沒有運算式" #: expr.c:898 #, c-format msgid "operator '%s' has no right operand" msgstr "運算子「%s」沒有右運算元" #: expr.c:903 #, c-format msgid "operator '%s' has no left operand" msgstr "運算子「%s」沒有左運算元" #: expr.c:929 msgid " ':' without preceding '?'" msgstr "「:」前沒有「?」" #: expr.c:956 msgid "unbalanced stack in #if" msgstr "#if 中不平衡的堆疊" #: expr.c:975 #, c-format msgid "impossible operator '%u'" msgstr "不可能的運算子「%u」" #: expr.c:1065 msgid "missing ')' in expression" msgstr "運算式中缺少「)」" #: expr.c:1086 msgid "'?' without following ':'" msgstr "「?」後沒有「:」" #: expr.c:1096 msgid "integer overflow in preprocessor expression" msgstr "預先處理運算式中整數溢出" #: expr.c:1101 msgid "missing '(' in expression" msgstr "運算式中缺少「(」" #: expr.c:1133 #, c-format msgid "the left operand of \"%s\" changes sign when promoted" msgstr "「%s」的左運算元在提升時變換了符號" #: expr.c:1138 #, c-format msgid "the right operand of \"%s\" changes sign when promoted" msgstr "「%s」的右運算元在提升時變換了符號" #: expr.c:1397 msgid "traditional C rejects the unary plus operator" msgstr "傳統 C 不接受單元 + 運算子" #: expr.c:1480 msgid "comma operator in operand of #if" msgstr "#if 運算元中出現逗號" #: expr.c:1612 msgid "division by zero in #if" msgstr "#if 中用零做除數" #: files.c:442 msgid "NULL directory in find_file" msgstr "find_file 中有 NULL 目錄" #: files.c:480 msgid "one or more PCH files were found, but they were invalid" msgstr "找到一個或多個 PCH 檔案,但它們是無效的" #: files.c:483 msgid "use -Winvalid-pch for more information" msgstr "使用 -Winvalid-pch 以獲得更多資訊" #: files.c:570 #, c-format msgid "%s is a block device" msgstr "%s 是一個區塊裝置" #: files.c:587 #, c-format msgid "%s is too large" msgstr "%s 過大" #: files.c:622 #, c-format msgid "%s is shorter than expected" msgstr "%s 短於預期" #: files.c:852 #, c-format msgid "no include path in which to search for %s" msgstr "沒有包含路徑可供搜尋 %s" #: files.c:1157 msgid "Multiple include guards may be useful for:\n" msgstr "多個防止重包含可能對其有用:\n" #: init.c:426 msgid "cppchar_t must be an unsigned type" msgstr "cppchar_t 必須是無號類型" #: init.c:430 #, c-format msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits" msgstr "預先處理算術的最高精度為 %lu 位;目標需要 %lu 位" #: init.c:437 msgid "CPP arithmetic must be at least as precise as a target int" msgstr "CPP 算術必須至少具有目標 int 的精度" #: init.c:440 msgid "target char is less than 8 bits wide" msgstr "目標 char 短於 8 位" #: init.c:444 msgid "target wchar_t is narrower than target char" msgstr "目標 wchar_t 短於目標 char" #: init.c:448 msgid "target int is narrower than target char" msgstr "目標 int 短於目標 char" #: init.c:453 msgid "CPP half-integer narrower than CPP character" msgstr "CPP 半整數短於 CPP 字元" #: init.c:457 #, c-format msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits" msgstr "在此宿主機上,CPP 不能處理長於 %lu 位的寬字元常數,但目標需要 %lu 位" #: lex.c:283 msgid "backslash and newline separated by space" msgstr "反斜線和換列為空格所分隔" #: lex.c:288 msgid "backslash-newline at end of file" msgstr "反斜線-換列出現在檔案末尾" #: lex.c:303 #, c-format msgid "trigraph ??%c converted to %c" msgstr "三元符 ??%c 轉換為 %c" #: lex.c:310 #, c-format msgid "trigraph ??%c ignored, use -trigraphs to enable" msgstr "三元符 ??%c 被忽略,請使用 -trigraphs 來啟用" #: lex.c:356 msgid "\"/*\" within comment" msgstr "「/*」出現在註釋中" #: lex.c:414 #, c-format msgid "%s in preprocessing directive" msgstr "預先處理指令中出現 %s" #: lex.c:423 msgid "null character(s) ignored" msgstr "忽略空字元" #: lex.c:460 #, c-format msgid "`%.*s' is not in NFKC" msgstr "「%.*s」不在 NFKC 中" #: lex.c:463 #, c-format msgid "`%.*s' is not in NFC" msgstr "「%.*s」不在 NFC 中" #: lex.c:551 #, c-format msgid "attempt to use poisoned \"%s\"" msgstr "試圖使用已加料的「%s」" #: lex.c:559 msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "__VA_ARGS__ 只能出現在 C99 可變參數巨集的展開中" #: lex.c:659 msgid "null character(s) preserved in literal" msgstr "空字元將保留在原文中" #: lex.c:662 #, fuzzy, c-format msgid "missing terminating %c character" msgstr "缺少結尾的 > 字元" #: lex.c:1027 msgid "C++ style comments are not allowed in ISO C90" msgstr "C++ 風格的註釋在 ISO C90 中不被允許" #: lex.c:1029 msgid "(this will be reported only once per input file)" msgstr "(此警告為每個輸入檔案只報告一次)" #: lex.c:1034 msgid "multi-line comment" msgstr "多列註釋" #: lex.c:1347 #, c-format msgid "unspellable token %s" msgstr "無法拼出的識別字 %s" #: line-map.c:320 #, c-format msgid "In file included from %s:%u" msgstr "在包含自 %s:%u 的檔案中" #: line-map.c:338 #, c-format msgid "" ",\n" " from %s:%u" msgstr "" ",\n" " 從 %s:%u" #: macro.c:84 #, c-format msgid "macro \"%s\" is not used" msgstr "巨集「%s」未被使用" #: macro.c:123 macro.c:319 #, c-format msgid "invalid built-in macro \"%s\"" msgstr "無效的內建巨集「%s」" #: macro.c:157 #, fuzzy msgid "could not determine file timestamp" msgstr "無法決定日期與時間" #: macro.c:254 msgid "could not determine date and time" msgstr "無法決定日期與時間" #: macro.c:270 msgid "__COUNTER__ expanded inside directive with -fdirectives-only" msgstr "" #: macro.c:423 msgid "invalid string literal, ignoring final '\\'" msgstr "無效的原文字串,忽略最後的「\\」" #: macro.c:483 #, c-format msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token" msgstr "粘貼「%s」和「%s」不能給出一個有效的預先處理識別字" #: macro.c:558 msgid "ISO C99 requires rest arguments to be used" msgstr "ISO C99 需要使用剩餘的引數" #: macro.c:563 #, c-format msgid "macro \"%s\" requires %u arguments, but only %u given" msgstr "巨集「%s」需要 %u 個引數,但只給出了 %u 個" #: macro.c:568 #, c-format msgid "macro \"%s\" passed %u arguments, but takes just %u" msgstr "巨集「%s」傳遞了 %u 個引數,但只需要 %u 個" #: macro.c:679 traditional.c:680 #, c-format msgid "unterminated argument list invoking macro \"%s\"" msgstr "呼叫巨集「%s」時引數清單未終止" #: macro.c:782 #, c-format msgid "function-like macro \"%s\" must be used with arguments in traditional C" msgstr "類似函式的巨集「%s」在傳統 C 中必須與引數一起使用" #: macro.c:1325 #, c-format msgid "duplicate macro parameter \"%s\"" msgstr "重複的巨集參數「%s」" #: macro.c:1371 #, c-format msgid "\"%s\" may not appear in macro parameter list" msgstr "「%s」不能出現在巨集參數清單中" #: macro.c:1379 msgid "macro parameters must be comma-separated" msgstr "巨集參數必須由逗號隔開" #: macro.c:1396 msgid "parameter name missing" msgstr "缺少參數名" #: macro.c:1413 msgid "anonymous variadic macros were introduced in C99" msgstr "匿名可變參數巨集在 C99 中被引入" #: macro.c:1418 msgid "ISO C does not permit named variadic macros" msgstr "ISO C 不允許具名的可變參數巨集" #: macro.c:1427 msgid "missing ')' in macro parameter list" msgstr "在巨集參數表中缺少「)」" #: macro.c:1476 msgid "'##' cannot appear at either end of a macro expansion" msgstr "「##」不能出現在巨集展開的兩端" #: macro.c:1510 msgid "ISO C99 requires whitespace after the macro name" msgstr "ISO C99 要求巨集名後必須有空白" #: macro.c:1534 msgid "missing whitespace after the macro name" msgstr "巨集名後缺少空白" #: macro.c:1564 msgid "'#' is not followed by a macro parameter" msgstr "「#」後沒有巨集參數" #: macro.c:1683 #, c-format msgid "\"%s\" redefined" msgstr "「%s」重定義" #: macro.c:1688 msgid "this is the location of the previous definition" msgstr "這是先前定義的位置" #: macro.c:1738 #, c-format msgid "macro argument \"%s\" would be stringified in traditional C" msgstr "巨集引數「%s」將在傳統 C 中被字串化" #: macro.c:1761 #, c-format msgid "invalid hash type %d in cpp_macro_definition" msgstr "cpp_macro_definition 中有無效的雜湊類型 %d" #: pch.c:84 pch.c:332 pch.c:344 pch.c:362 pch.c:368 pch.c:377 msgid "while writing precompiled header" msgstr "在寫入預先編譯標頭時" #: pch.c:485 #, c-format msgid "%s: not used because `%.*s' not defined" msgstr "%s:未使用,因為「%.*s」未定義" #: pch.c:497 #, c-format msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'" msgstr "%s:未使用,因為「%.*s」被定義為「%s」而非「%*.s」" #: pch.c:538 #, c-format msgid "%s: not used because `%s' is defined" msgstr "%s:未使用,因為「%s」已定義" #: pch.c:558 #, fuzzy, c-format msgid "%s: not used because `__COUNTER__' is invalid" msgstr "%s:未使用,因為「%s」已定義" #: pch.c:567 pch.c:737 msgid "while reading precompiled header" msgstr "在讀取預先編譯標頭時" #: traditional.c:750 #, c-format msgid "detected recursion whilst expanding macro \"%s\"" msgstr "展開巨集「%s」時偵測到遞迴" #: traditional.c:917 msgid "syntax error in macro parameter list" msgstr "巨集參數清單語法錯誤" #~ msgid "no newline at end of file" #~ msgstr "檔案未以空白列結束" nescc-1.3.4/libcpp/symtab.c000066400000000000000000000210261177770303300155370ustar00rootroot00000000000000/* Hash tables. Copyright (C) 2000, 2001, 2003, 2004 Free Software Foundation, Inc. This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. In other words, you are welcome to use, share and improve this program. You are forbidden to forbid anyone else to use, share and improve what you give them. Help stamp out software-hoarding! */ #include "config.h" #include "system.h" #include "symtab.h" /* The code below is a specialization of Vladimir Makarov's expandable hash tables (see libiberty/hashtab.c). The abstraction penalty was too high to continue using the generic form. This code knows intrinsically how to calculate a hash value, and how to compare an existing entry with a potential new one. Also, the ability to delete members from the table has been removed. */ static unsigned int calc_hash (const unsigned char *, size_t); static void ht_expand (hash_table *); static double approx_sqrt (double); /* Calculate the hash of the string STR of length LEN. */ static unsigned int calc_hash (const unsigned char *str, size_t len) { size_t n = len; unsigned int r = 0; while (n--) r = HT_HASHSTEP (r, *str++); return HT_HASHFINISH (r, len); } /* Initialize an identifier hashtable. */ hash_table * ht_create (unsigned int order) { unsigned int nslots = 1 << order; hash_table *table; table = XCNEW (hash_table); /* Strings need no alignment. */ _obstack_begin (&table->stack, 0, 0, (void *(*) (long)) xmalloc, (void (*) (void *)) free); obstack_alignment_mask (&table->stack) = 0; table->entries = XCNEWVEC (hashnode, nslots); table->entries_owned = true; table->nslots = nslots; return table; } /* Frees all memory associated with a hash table. */ void ht_destroy (hash_table *table) { obstack_free (&table->stack, NULL); if (table->entries_owned) free (table->entries); free (table); } /* Returns the hash entry for the a STR of length LEN. If that string already exists in the table, returns the existing entry, and, if INSERT is CPP_ALLOCED, frees the last obstack object. If the identifier hasn't been seen before, and INSERT is CPP_NO_INSERT, returns NULL. Otherwise insert and returns a new entry. A new string is alloced if INSERT is CPP_ALLOC, otherwise INSERT is CPP_ALLOCED and the item is assumed to be at the top of the obstack. */ hashnode ht_lookup (hash_table *table, const unsigned char *str, size_t len, enum ht_lookup_option insert) { return ht_lookup_with_hash (table, str, len, calc_hash (str, len), insert); } hashnode ht_lookup_with_hash (hash_table *table, const unsigned char *str, size_t len, unsigned int hash, enum ht_lookup_option insert) { unsigned int hash2; unsigned int index; size_t sizemask; hashnode node; sizemask = table->nslots - 1; index = hash & sizemask; table->searches++; node = table->entries[index]; if (node != NULL) { if (node->hash_value == hash && HT_LEN (node) == (unsigned int) len && !memcmp (HT_STR (node), str, len)) { if (insert == HT_ALLOCED) /* The string we search for was placed at the end of the obstack. Release it. */ obstack_free (&table->stack, (void *) str); return node; } /* hash2 must be odd, so we're guaranteed to visit every possible location in the table during rehashing. */ hash2 = ((hash * 17) & sizemask) | 1; for (;;) { table->collisions++; index = (index + hash2) & sizemask; node = table->entries[index]; if (node == NULL) break; if (node->hash_value == hash && HT_LEN (node) == (unsigned int) len && !memcmp (HT_STR (node), str, len)) { if (insert == HT_ALLOCED) /* The string we search for was placed at the end of the obstack. Release it. */ obstack_free (&table->stack, (void *) str); return node; } } } if (insert == HT_NO_INSERT) return NULL; node = (*table->alloc_node) (table); table->entries[index] = node; HT_LEN (node) = (unsigned int) len; node->hash_value = hash; if (insert == HT_ALLOC) HT_STR (node) = (const unsigned char *) obstack_copy0 (&table->stack, str, len); else HT_STR (node) = str; if (++table->nelements * 4 >= table->nslots * 3) /* Must expand the string table. */ ht_expand (table); return node; } /* Double the size of a hash table, re-hashing existing entries. */ static void ht_expand (hash_table *table) { hashnode *nentries, *p, *limit; unsigned int size, sizemask; size = table->nslots * 2; nentries = XCNEWVEC (hashnode, size); sizemask = size - 1; p = table->entries; limit = p + table->nslots; do if (*p) { unsigned int index, hash, hash2; hash = (*p)->hash_value; index = hash & sizemask; if (nentries[index]) { hash2 = ((hash * 17) & sizemask) | 1; do { index = (index + hash2) & sizemask; } while (nentries[index]); } nentries[index] = *p; } while (++p < limit); if (table->entries_owned) free (table->entries); table->entries_owned = true; table->entries = nentries; table->nslots = size; } /* For all nodes in TABLE, callback CB with parameters TABLE->PFILE, the node, and V. */ void ht_forall (hash_table *table, ht_cb cb, const void *v) { hashnode *p, *limit; p = table->entries; limit = p + table->nslots; do if (*p) { if ((*cb) (table->pfile, *p, v) == 0) break; } while (++p < limit); } /* Restore the hash table. */ void ht_load (hash_table *ht, hashnode *entries, unsigned int nslots, unsigned int nelements, bool own) { if (ht->entries_owned) free (ht->entries); ht->entries = entries; ht->nslots = nslots; ht->nelements = nelements; ht->entries_owned = own; } /* Dump allocation statistics to stderr. */ void ht_dump_statistics (hash_table *table) { size_t nelts, nids, overhead, headers; size_t total_bytes, longest; double sum_of_squares, exp_len, exp_len2, exp2_len; hashnode *p, *limit; #define SCALE(x) ((unsigned long) ((x) < 1024*10 \ ? (x) \ : ((x) < 1024*1024*10 \ ? (x) / 1024 \ : (x) / (1024*1024)))) #define LABEL(x) ((x) < 1024*10 ? ' ' : ((x) < 1024*1024*10 ? 'k' : 'M')) total_bytes = longest = sum_of_squares = nids = 0; p = table->entries; limit = p + table->nslots; do if (*p) { size_t n = HT_LEN (*p); total_bytes += n; sum_of_squares += (double) n * n; if (n > longest) longest = n; nids++; } while (++p < limit); nelts = table->nelements; overhead = obstack_memory_used (&table->stack) - total_bytes; headers = table->nslots * sizeof (hashnode); fprintf (stderr, "\nString pool\nentries\t\t%lu\n", (unsigned long) nelts); fprintf (stderr, "identifiers\t%lu (%.2f%%)\n", (unsigned long) nids, nids * 100.0 / nelts); fprintf (stderr, "slots\t\t%lu\n", (unsigned long) table->nslots); fprintf (stderr, "bytes\t\t%lu%c (%lu%c overhead)\n", SCALE (total_bytes), LABEL (total_bytes), SCALE (overhead), LABEL (overhead)); fprintf (stderr, "table size\t%lu%c\n", SCALE (headers), LABEL (headers)); exp_len = (double)total_bytes / (double)nelts; exp2_len = exp_len * exp_len; exp_len2 = (double) sum_of_squares / (double) nelts; fprintf (stderr, "coll/search\t%.4f\n", (double) table->collisions / (double) table->searches); fprintf (stderr, "ins/search\t%.4f\n", (double) nelts / (double) table->searches); fprintf (stderr, "avg. entry\t%.2f bytes (+/- %.2f)\n", exp_len, approx_sqrt (exp_len2 - exp2_len)); fprintf (stderr, "longest entry\t%lu\n", (unsigned long) longest); #undef SCALE #undef LABEL } /* Return the approximate positive square root of a number N. This is for statistical reports, not code generation. */ static double approx_sqrt (double x) { double s, d; if (x < 0) abort (); if (x == 0) return 0; s = x; do { d = (s * s - x) / (2 * s); s -= d; } while (d > .0001); return s; } nescc-1.3.4/libcpp/system.h000066400000000000000000000264731177770303300156040ustar00rootroot00000000000000/* Get common system includes and various definitions and declarations based on autoconf macros. Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of libcpp (aka cpplib). GCC 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. GCC 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 GCC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef LIBCPP_SYSTEM_H #define LIBCPP_SYSTEM_H /* We must include stdarg.h before stdio.h. */ #include #ifdef HAVE_STDDEF_H # include #endif #include /* Define a generic NULL if one hasn't already been defined. */ #ifndef NULL #define NULL 0 #endif /* Use the unlocked open routines from libiberty. */ #define fopen(PATH,MODE) fopen_unlocked(PATH,MODE) #define fdopen(FILDES,MODE) fdopen_unlocked(FILDES,MODE) #define freopen(PATH,MODE,STREAM) freopen_unlocked(PATH,MODE,STREAM) /* The compiler is not a multi-threaded application and therefore we do not have to use the locking functions. In fact, using the locking functions can cause the compiler to be significantly slower under I/O bound conditions (such as -g -O0 on very large source files). HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio code is multi-thread safe by default. If it is set to 0, then do not worry about using the _unlocked functions. fputs_unlocked, fwrite_unlocked, and fprintf_unlocked are extensions and need to be prototyped by hand (since we do not define _GNU_SOURCE). */ #if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED # ifdef HAVE_PUTC_UNLOCKED # undef putc # define putc(C, Stream) putc_unlocked (C, Stream) # endif # ifdef HAVE_PUTCHAR_UNLOCKED # undef putchar # define putchar(C) putchar_unlocked (C) # endif # ifdef HAVE_GETC_UNLOCKED # undef getc # define getc(Stream) getc_unlocked (Stream) # endif # ifdef HAVE_GETCHAR_UNLOCKED # undef getchar # define getchar() getchar_unlocked () # endif # ifdef HAVE_FPUTC_UNLOCKED # undef fputc # define fputc(C, Stream) fputc_unlocked (C, Stream) # endif # ifdef HAVE_CLEARERR_UNLOCKED # undef clearerr # define clearerr(Stream) clearerr_unlocked (Stream) # if defined (HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKED extern void clearerr_unlocked (FILE *); # endif # endif # ifdef HAVE_FEOF_UNLOCKED # undef feof # define feof(Stream) feof_unlocked (Stream) # if defined (HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKED extern int feof_unlocked (FILE *); # endif # endif # ifdef HAVE_FILENO_UNLOCKED # undef fileno # define fileno(Stream) fileno_unlocked (Stream) # if defined (HAVE_DECL_FILENO_UNLOCKED) && !HAVE_DECL_FILENO_UNLOCKED extern int fileno_unlocked (FILE *); # endif # endif # ifdef HAVE_FFLUSH_UNLOCKED # undef fflush # define fflush(Stream) fflush_unlocked (Stream) # if defined (HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKED extern int fflush_unlocked (FILE *); # endif # endif # ifdef HAVE_FGETC_UNLOCKED # undef fgetc # define fgetc(Stream) fgetc_unlocked (Stream) # if defined (HAVE_DECL_FGETC_UNLOCKED) && !HAVE_DECL_FGETC_UNLOCKED extern int fgetc_unlocked (FILE *); # endif # endif # ifdef HAVE_FGETS_UNLOCKED # undef fgets # define fgets(S, n, Stream) fgets_unlocked (S, n, Stream) # if defined (HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKED extern char *fgets_unlocked (char *, int, FILE *); # endif # endif # ifdef HAVE_FPUTS_UNLOCKED # undef fputs # define fputs(String, Stream) fputs_unlocked (String, Stream) # if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED extern int fputs_unlocked (const char *, FILE *); # endif # endif # ifdef HAVE_FERROR_UNLOCKED # undef ferror # define ferror(Stream) ferror_unlocked (Stream) # if defined (HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKED extern int ferror_unlocked (FILE *); # endif # endif # ifdef HAVE_FREAD_UNLOCKED # undef fread # define fread(Ptr, Size, N, Stream) fread_unlocked (Ptr, Size, N, Stream) # if defined (HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_FREAD_UNLOCKED extern size_t fread_unlocked (void *, size_t, size_t, FILE *); # endif # endif # ifdef HAVE_FWRITE_UNLOCKED # undef fwrite # define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream) # if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED extern size_t fwrite_unlocked (const void *, size_t, size_t, FILE *); # endif # endif # ifdef HAVE_FPRINTF_UNLOCKED # undef fprintf /* We can't use a function-like macro here because we don't know if we have varargs macros. */ # define fprintf fprintf_unlocked # if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKED extern int fprintf_unlocked (FILE *, const char *, ...); # endif # endif #endif /* ??? Glibc's fwrite/fread_unlocked macros cause "warning: signed and unsigned type in conditional expression". */ #undef fread_unlocked #undef fwrite_unlocked #include #include #if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO extern int errno; #endif /* Some of glibc's string inlines cause warnings. Plus we'd rather rely on (and therefore test) GCC's string builtins. */ #define __NO_STRING_INLINES #ifdef STRING_WITH_STRINGS # include # include #else # ifdef HAVE_STRING_H # include # else # ifdef HAVE_STRINGS_H # include # endif # endif #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_UNISTD_H # include #endif #if HAVE_LIMITS_H # include #endif /* Infrastructure for defining missing _MAX and _MIN macros. Note that macros defined with these cannot be used in #if. */ /* The extra casts work around common compiler bugs. */ #define INTTYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* The outer cast is needed to work around a bug in Cray C 5.0.3.0. It is necessary at least when t == time_t. */ #define INTTYPE_MINIMUM(t) ((t) (INTTYPE_SIGNED (t) \ ? ~ (t) 0 << (sizeof(t) * CHAR_BIT - 1) : (t) 0)) #define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM (t))) /* Use that infrastructure to provide a few constants. */ #ifndef UCHAR_MAX # define UCHAR_MAX INTTYPE_MAXIMUM (unsigned char) #endif #ifdef TIME_WITH_SYS_TIME # include # include #else # if HAVE_SYS_TIME_H # include # else # ifdef HAVE_TIME_H # include # endif # endif #endif #ifdef HAVE_FCNTL_H # include #else # ifdef HAVE_SYS_FILE_H # include # endif #endif #ifdef HAVE_LOCALE_H # include #endif #ifdef HAVE_LANGINFO_CODESET # include #endif #ifndef HAVE_SETLOCALE # define setlocale(category, locale) (locale) #endif #ifdef ENABLE_NLS #include #else /* Stubs. */ # undef dgettext # define dgettext(package, msgid) (msgid) #endif #ifndef _ # define _(msgid) dgettext (PACKAGE, msgid) #endif #ifndef N_ # define N_(msgid) msgid #endif /* Some systems define these in, e.g., param.h. We undefine these names here to avoid the warnings. We prefer to use our definitions since we know they are correct. */ #undef MIN #undef MAX #define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) #define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) /* The HAVE_DECL_* macros are three-state, undefined, 0 or 1. If they are defined to 0 then we must provide the relevant declaration here. These checks will be in the undefined state while configure is running so be careful to test "defined (HAVE_DECL_*)". */ #if defined (HAVE_DECL_ABORT) && !HAVE_DECL_ABORT extern void abort (void); #endif #if HAVE_SYS_STAT_H # include #endif /* Test if something is a normal file. */ #ifndef S_ISREG #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) #endif /* Test if something is a directory. */ #ifndef S_ISDIR #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) #endif /* Test if something is a character special file. */ #ifndef S_ISCHR #define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) #endif /* Test if something is a block special file. */ #ifndef S_ISBLK #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) #endif /* Test if something is a socket. */ #ifndef S_ISSOCK # ifdef S_IFSOCK # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) # else # define S_ISSOCK(m) 0 # endif #endif /* Test if something is a FIFO. */ #ifndef S_ISFIFO # ifdef S_IFIFO # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) # else # define S_ISFIFO(m) 0 # endif #endif /* Approximate O_NOCTTY and O_BINARY. */ #ifndef O_NOCTTY #define O_NOCTTY 0 #endif #ifndef O_BINARY # define O_BINARY 0 #endif /* Filename handling macros. */ #include "filenames.h" /* Get libiberty declarations. */ #include "libiberty.h" #include "safe-ctype.h" /* 1 if we have C99 designated initializers. ??? C99 designated initializers are not supported by most C++ compilers, including G++. -- gdr, 2005-05-18 */ #if !defined(HAVE_DESIGNATED_INITIALIZERS) #define HAVE_DESIGNATED_INITIALIZERS \ ((!defined(__cplusplus) && (GCC_VERSION >= 2007)) \ || (__STDC_VERSION__ >= 199901L)) #endif /* Be conservative and only use enum bitfields with GCC. FIXME: provide a complete autoconf test for buggy enum bitfields. */ #if (GCC_VERSION > 2000) #define ENUM_BITFIELD(TYPE) __extension__ enum TYPE #else #define ENUM_BITFIELD(TYPE) unsigned int #endif #ifndef offsetof #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER) #endif /* __builtin_expect(A, B) evaluates to A, but notifies the compiler that the most likely value of A is B. This feature was added at some point between 2.95 and 3.0. Let's use 3.0 as the lower bound for now. */ #if (GCC_VERSION < 3000) #define __builtin_expect(a, b) (a) #endif /* Provide a fake boolean type. We make no attempt to use the C99 _Bool, as it may not be available in the bootstrap compiler, and even if it is, it is liable to be buggy. This must be after all inclusion of system headers, as some of them will mess us up. */ #undef bool #undef true #undef false #undef TRUE #undef FALSE #ifndef __cplusplus #define bool unsigned char #endif #define true 1 #define false 0 /* Some compilers do not allow the use of unsigned char in bitfields. */ #define BOOL_BITFIELD unsigned int /* Poison identifiers we do not want to use. */ #if (GCC_VERSION >= 3000) #undef calloc #undef strdup #undef malloc #undef realloc #pragma GCC poison calloc strdup #pragma GCC poison malloc realloc /* Libiberty macros that are no longer used in GCC. */ #undef ANSI_PROTOTYPES #undef PTR_CONST #undef LONG_DOUBLE #undef VPARAMS #undef VA_OPEN #undef VA_FIXEDARG #undef VA_CLOSE #undef VA_START #pragma GCC poison ANSI_PROTOTYPES PTR_CONST LONG_DOUBLE VPARAMS VA_OPEN \ VA_FIXEDARG VA_CLOSE VA_START /* Note: not all uses of the `index' token (e.g. variable names and structure members) have been eliminated. */ #undef bcopy #undef bzero #undef bcmp #undef rindex #pragma GCC poison bcopy bzero bcmp rindex #endif /* GCC >= 3.0 */ #endif /* ! LIBCPP_SYSTEM_H */ nescc-1.3.4/libcpp/traditional.c000066400000000000000000000775121177770303300165650ustar00rootroot00000000000000/* CPP Library - traditional lexical analysis and macro expansion. Copyright (C) 2002, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. Contributed by Neil Booth, May 2002 This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "system.h" #include "cpplib.h" #include "internal.h" /* The replacement text of a function-like macro is stored as a contiguous sequence of aligned blocks, each representing the text between subsequent parameters. Each block comprises the text between its surrounding parameters, the length of that text, and the one-based index of the following parameter. The final block in the replacement text is easily recognizable as it has an argument index of zero. */ struct block { unsigned int text_len; unsigned short arg_index; uchar text[1]; }; #define BLOCK_HEADER_LEN offsetof (struct block, text) #define BLOCK_LEN(TEXT_LEN) CPP_ALIGN (BLOCK_HEADER_LEN + (TEXT_LEN)) /* Structure holding information about a function-like macro invocation. */ struct fun_macro { /* Memory buffer holding the trad_arg array. */ _cpp_buff *buff; /* An array of size the number of macro parameters + 1, containing the offsets of the start of each macro argument in the output buffer. The argument continues until the character before the start of the next one. */ size_t *args; /* The hashnode of the macro. */ cpp_hashnode *node; /* The offset of the macro name in the output buffer. */ size_t offset; /* The line the macro name appeared on. */ unsigned int line; /* Zero-based index of argument being currently lexed. */ unsigned int argc; }; /* Lexing state. It is mostly used to prevent macro expansion. */ enum ls {ls_none = 0, /* Normal state. */ ls_fun_open, /* When looking for '('. */ ls_fun_close, /* When looking for ')'. */ ls_defined, /* After defined. */ ls_defined_close, /* Looking for ')' of defined(). */ ls_hash, /* After # in preprocessor conditional. */ ls_predicate, /* After the predicate, maybe paren? */ ls_answer}; /* In answer to predicate. */ /* Lexing TODO: Maybe handle space in escaped newlines. Stop lex.c from recognizing comments and directives during its lexing pass. */ static const uchar *skip_whitespace (cpp_reader *, const uchar *, int); static cpp_hashnode *lex_identifier (cpp_reader *, const uchar *); static const uchar *copy_comment (cpp_reader *, const uchar *, int); static void check_output_buffer (cpp_reader *, size_t); static void push_replacement_text (cpp_reader *, cpp_hashnode *); static bool scan_parameters (cpp_reader *, cpp_macro *); static bool recursive_macro (cpp_reader *, cpp_hashnode *); static void save_replacement_text (cpp_reader *, cpp_macro *, unsigned int); static void maybe_start_funlike (cpp_reader *, cpp_hashnode *, const uchar *, struct fun_macro *); static void save_argument (struct fun_macro *, size_t); static void replace_args_and_push (cpp_reader *, struct fun_macro *); static size_t canonicalize_text (uchar *, const uchar *, size_t, uchar *); /* Ensures we have N bytes' space in the output buffer, and reallocates it if not. */ static void check_output_buffer (cpp_reader *pfile, size_t n) { /* We might need two bytes to terminate an unterminated comment, and one more to terminate the line with a NUL. */ n += 2 + 1; if (n > (size_t) (pfile->out.limit - pfile->out.cur)) { size_t size = pfile->out.cur - pfile->out.base; size_t new_size = (size + n) * 3 / 2; pfile->out.base = XRESIZEVEC (unsigned char, pfile->out.base, new_size); pfile->out.limit = pfile->out.base + new_size; pfile->out.cur = pfile->out.base + size; } } /* Skip a C-style block comment in a macro as a result of -CC. Buffer->cur points to the initial asterisk of the comment. */ static void skip_macro_block_comment (cpp_reader *pfile) { const uchar *cur = pfile->buffer->cur; cur++; if (*cur == '/') cur++; /* People like decorating comments with '*', so check for '/' instead for efficiency. */ while(! (*cur++ == '/' && cur[-2] == '*') ) ; pfile->buffer->cur = cur; } /* CUR points to the asterisk introducing a comment in the current context. IN_DEFINE is true if we are in the replacement text of a macro. The asterisk and following comment is copied to the buffer pointed to by pfile->out.cur, which must be of sufficient size. Unterminated comments are diagnosed, and correctly terminated in the output. pfile->out.cur is updated depending upon IN_DEFINE, -C, -CC and pfile->state.in_directive. Returns a pointer to the first character after the comment in the input buffer. */ static const uchar * copy_comment (cpp_reader *pfile, const uchar *cur, int in_define) { bool unterminated, copy = false; source_location src_loc = pfile->line_table->highest_line; cpp_buffer *buffer = pfile->buffer; buffer->cur = cur; if (pfile->context->prev) unterminated = false, skip_macro_block_comment (pfile); else unterminated = _cpp_skip_block_comment (pfile); if (unterminated) cpp_error_with_line (pfile, CPP_DL_ERROR, src_loc, 0, "unterminated comment"); /* Comments in directives become spaces so that tokens are properly separated when the ISO preprocessor re-lexes the line. The exception is #define. */ if (pfile->state.in_directive) { if (in_define) { if (CPP_OPTION (pfile, discard_comments_in_macro_exp)) pfile->out.cur--; else copy = true; } else pfile->out.cur[-1] = ' '; } else if (CPP_OPTION (pfile, discard_comments)) pfile->out.cur--; else copy = true; if (copy) { size_t len = (size_t) (buffer->cur - cur); memcpy (pfile->out.cur, cur, len); pfile->out.cur += len; if (unterminated) { *pfile->out.cur++ = '*'; *pfile->out.cur++ = '/'; } } return buffer->cur; } /* CUR points to any character in the input buffer. Skips over all contiguous horizontal white space and NULs, including comments if SKIP_COMMENTS, until reaching the first non-horizontal-whitespace character or the end of the current context. Escaped newlines are removed. The whitespace is copied verbatim to the output buffer, except that comments are handled as described in copy_comment(). pfile->out.cur is updated. Returns a pointer to the first character after the whitespace in the input buffer. */ static const uchar * skip_whitespace (cpp_reader *pfile, const uchar *cur, int skip_comments) { uchar *out = pfile->out.cur; for (;;) { unsigned int c = *cur++; *out++ = c; if (is_nvspace (c)) continue; if (c == '/' && *cur == '*' && skip_comments) { pfile->out.cur = out; cur = copy_comment (pfile, cur, false /* in_define */); out = pfile->out.cur; continue; } out--; break; } pfile->out.cur = out; return cur - 1; } /* Lexes and outputs an identifier starting at CUR, which is assumed to point to a valid first character of an identifier. Returns the hashnode, and updates out.cur. */ static cpp_hashnode * lex_identifier (cpp_reader *pfile, const uchar *cur) { size_t len; uchar *out = pfile->out.cur; cpp_hashnode *result; do *out++ = *cur++; while (is_numchar (*cur)); CUR (pfile->context) = cur; len = out - pfile->out.cur; result = (cpp_hashnode *) ht_lookup (pfile->hash_table, pfile->out.cur, len, HT_ALLOC); pfile->out.cur = out; return result; } /* Overlays the true file buffer temporarily with text of length LEN starting at START. The true buffer is restored upon calling restore_buff(). */ void _cpp_overlay_buffer (cpp_reader *pfile, const uchar *start, size_t len) { cpp_buffer *buffer = pfile->buffer; pfile->overlaid_buffer = buffer; pfile->saved_cur = buffer->cur; pfile->saved_rlimit = buffer->rlimit; pfile->saved_line_base = buffer->next_line; buffer->need_line = false; buffer->cur = start; buffer->line_base = start; buffer->rlimit = start + len; } /* Restores a buffer overlaid by _cpp_overlay_buffer(). */ void _cpp_remove_overlay (cpp_reader *pfile) { cpp_buffer *buffer = pfile->overlaid_buffer; buffer->cur = pfile->saved_cur; buffer->rlimit = pfile->saved_rlimit; buffer->line_base = pfile->saved_line_base; buffer->need_line = true; pfile->overlaid_buffer = NULL; } /* Reads a logical line into the output buffer. Returns TRUE if there is more text left in the buffer. */ bool _cpp_read_logical_line_trad (cpp_reader *pfile) { do { if (pfile->buffer->need_line && !_cpp_get_fresh_line (pfile)) return false; } while (!_cpp_scan_out_logical_line (pfile, NULL) || pfile->state.skipping); return pfile->buffer != NULL; } /* Set up state for finding the opening '(' of a function-like macro. */ static void maybe_start_funlike (cpp_reader *pfile, cpp_hashnode *node, const uchar *start, struct fun_macro *macro) { unsigned int n = node->value.macro->paramc + 1; if (macro->buff) _cpp_release_buff (pfile, macro->buff); macro->buff = _cpp_get_buff (pfile, n * sizeof (size_t)); macro->args = (size_t *) BUFF_FRONT (macro->buff); macro->node = node; macro->offset = start - pfile->out.base; macro->argc = 0; } /* Save the OFFSET of the start of the next argument to MACRO. */ static void save_argument (struct fun_macro *macro, size_t offset) { macro->argc++; if (macro->argc <= macro->node->value.macro->paramc) macro->args[macro->argc] = offset; } /* Copies the next logical line in the current buffer (starting at buffer->cur) to the output buffer. The output is guaranteed to terminate with a NUL character. buffer->cur is updated. If MACRO is non-NULL, then we are scanning the replacement list of MACRO, and we call save_replacement_text() every time we meet an argument. */ bool _cpp_scan_out_logical_line (cpp_reader *pfile, cpp_macro *macro) { bool result = true; cpp_context *context; const uchar *cur; uchar *out; struct fun_macro fmacro; unsigned int c, paren_depth = 0, quote; enum ls lex_state = ls_none; bool header_ok; const uchar *start_of_input_line; fmacro.buff = NULL; fmacro.args = NULL; fmacro.node = NULL; fmacro.offset = 0; fmacro.line = 0; fmacro.argc = 0; quote = 0; header_ok = pfile->state.angled_headers; CUR (pfile->context) = pfile->buffer->cur; RLIMIT (pfile->context) = pfile->buffer->rlimit; pfile->out.cur = pfile->out.base; pfile->out.first_line = pfile->line_table->highest_line; /* start_of_input_line is needed to make sure that directives really, really start at the first character of the line. */ start_of_input_line = pfile->buffer->cur; new_context: context = pfile->context; cur = CUR (context); check_output_buffer (pfile, RLIMIT (context) - cur); out = pfile->out.cur; for (;;) { if (!context->prev && cur >= pfile->buffer->notes[pfile->buffer->cur_note].pos) { pfile->buffer->cur = cur; _cpp_process_line_notes (pfile, false); } c = *cur++; *out++ = c; /* Whitespace should "continue" out of the switch, non-whitespace should "break" out of it. */ switch (c) { case ' ': case '\t': case '\f': case '\v': case '\0': continue; case '\n': /* If this is a macro's expansion, pop it. */ if (context->prev) { pfile->out.cur = out - 1; _cpp_pop_context (pfile); goto new_context; } /* Omit the newline from the output buffer. */ pfile->out.cur = out - 1; pfile->buffer->cur = cur; pfile->buffer->need_line = true; CPP_INCREMENT_LINE (pfile, 0); if ((lex_state == ls_fun_open || lex_state == ls_fun_close) && !pfile->state.in_directive && _cpp_get_fresh_line (pfile)) { /* Newlines in arguments become a space, but we don't clear any in-progress quote. */ if (lex_state == ls_fun_close) out[-1] = ' '; cur = pfile->buffer->cur; continue; } goto done; case '<': if (header_ok) quote = '>'; break; case '>': if (c == quote) quote = 0; break; case '"': case '\'': if (c == quote) quote = 0; else if (!quote) quote = c; break; case '\\': /* Skip escaped quotes here, it's easier than above. */ if (*cur == '\\' || *cur == '"' || *cur == '\'') *out++ = *cur++; break; case '/': /* Traditional CPP does not recognize comments within literals. */ if (!quote && *cur == '*') { pfile->out.cur = out; cur = copy_comment (pfile, cur, macro != 0); out = pfile->out.cur; continue; } break; case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': if (!pfile->state.skipping && (quote == 0 || macro)) { cpp_hashnode *node; uchar *out_start = out - 1; pfile->out.cur = out_start; node = lex_identifier (pfile, cur - 1); out = pfile->out.cur; cur = CUR (context); if (node->type == NT_MACRO /* Should we expand for ls_answer? */ && (lex_state == ls_none || lex_state == ls_fun_open) && !pfile->state.prevent_expansion) { /* Macros invalidate MI optimization. */ pfile->mi_valid = false; if (! (node->flags & NODE_BUILTIN) && node->value.macro->fun_like) { maybe_start_funlike (pfile, node, out_start, &fmacro); lex_state = ls_fun_open; fmacro.line = pfile->line_table->highest_line; continue; } else if (!recursive_macro (pfile, node)) { /* Remove the object-like macro's name from the output, and push its replacement text. */ pfile->out.cur = out_start; push_replacement_text (pfile, node); lex_state = ls_none; goto new_context; } } else if (macro && (node->flags & NODE_MACRO_ARG) != 0) { /* Found a parameter in the replacement text of a #define. Remove its name from the output. */ pfile->out.cur = out_start; save_replacement_text (pfile, macro, node->value.arg_index); out = pfile->out.base; } else if (lex_state == ls_hash) { lex_state = ls_predicate; continue; } else if (pfile->state.in_expression && node == pfile->spec_nodes.n_defined) { lex_state = ls_defined; continue; } } break; case '(': if (quote == 0) { paren_depth++; if (lex_state == ls_fun_open) { if (recursive_macro (pfile, fmacro.node)) lex_state = ls_none; else { lex_state = ls_fun_close; paren_depth = 1; out = pfile->out.base + fmacro.offset; fmacro.args[0] = fmacro.offset; } } else if (lex_state == ls_predicate) lex_state = ls_answer; else if (lex_state == ls_defined) lex_state = ls_defined_close; } break; case ',': if (quote == 0 && lex_state == ls_fun_close && paren_depth == 1) save_argument (&fmacro, out - pfile->out.base); break; case ')': if (quote == 0) { paren_depth--; if (lex_state == ls_fun_close && paren_depth == 0) { cpp_macro *m = fmacro.node->value.macro; m->used = 1; lex_state = ls_none; save_argument (&fmacro, out - pfile->out.base); /* A single zero-length argument is no argument. */ if (fmacro.argc == 1 && m->paramc == 0 && out == pfile->out.base + fmacro.offset + 1) fmacro.argc = 0; if (_cpp_arguments_ok (pfile, m, fmacro.node, fmacro.argc)) { /* Remove the macro's invocation from the output, and push its replacement text. */ pfile->out.cur = (pfile->out.base + fmacro.offset); CUR (context) = cur; replace_args_and_push (pfile, &fmacro); goto new_context; } } else if (lex_state == ls_answer || lex_state == ls_defined_close) lex_state = ls_none; } break; case '#': if (cur - 1 == start_of_input_line /* A '#' from a macro doesn't start a directive. */ && !pfile->context->prev && !pfile->state.in_directive) { /* A directive. With the way _cpp_handle_directive currently works, we only want to call it if either we know the directive is OK, or we want it to fail and be removed from the output. If we want it to be passed through (the assembler case) then we must not call _cpp_handle_directive. */ pfile->out.cur = out; cur = skip_whitespace (pfile, cur, true /* skip_comments */); out = pfile->out.cur; if (*cur == '\n') { /* Null directive. Ignore it and don't invalidate the MI optimization. */ pfile->buffer->need_line = true; CPP_INCREMENT_LINE (pfile, 0); result = false; goto done; } else { bool do_it = false; if (is_numstart (*cur) && CPP_OPTION (pfile, lang) != CLK_ASM) do_it = true; else if (is_idstart (*cur)) /* Check whether we know this directive, but don't advance. */ do_it = lex_identifier (pfile, cur)->is_directive; if (do_it || CPP_OPTION (pfile, lang) != CLK_ASM) { /* This is a kludge. We want to have the ISO preprocessor lex the next token. */ pfile->buffer->cur = cur; _cpp_handle_directive (pfile, false /* indented */); result = false; goto done; } } } if (pfile->state.in_expression) { lex_state = ls_hash; continue; } break; default: break; } /* Non-whitespace disables MI optimization and stops treating '<' as a quote in #include. */ header_ok = false; if (!pfile->state.in_directive) pfile->mi_valid = false; if (lex_state == ls_none) continue; /* Some of these transitions of state are syntax errors. The ISO preprocessor will issue errors later. */ if (lex_state == ls_fun_open) /* Missing '('. */ lex_state = ls_none; else if (lex_state == ls_hash || lex_state == ls_predicate || lex_state == ls_defined) lex_state = ls_none; /* ls_answer and ls_defined_close keep going until ')'. */ } done: if (fmacro.buff) _cpp_release_buff (pfile, fmacro.buff); if (lex_state == ls_fun_close) cpp_error_with_line (pfile, CPP_DL_ERROR, fmacro.line, 0, "unterminated argument list invoking macro \"%s\"", NODE_NAME (fmacro.node)); return result; } /* Push a context holding the replacement text of the macro NODE on the context stack. NODE is either object-like, or a function-like macro with no arguments. */ static void push_replacement_text (cpp_reader *pfile, cpp_hashnode *node) { size_t len; const uchar *text; uchar *buf; if (node->flags & NODE_BUILTIN) { text = _cpp_builtin_macro_text (pfile, node); len = ustrlen (text); buf = _cpp_unaligned_alloc (pfile, len + 1); memcpy (buf, text, len); buf[len]='\n'; text = buf; } else { cpp_macro *macro = node->value.macro; macro->used = 1; text = macro->exp.text; macro->traditional = 1; len = macro->count; } _cpp_push_text_context (pfile, node, text, len); } /* Returns TRUE if traditional macro recursion is detected. */ static bool recursive_macro (cpp_reader *pfile, cpp_hashnode *node) { bool recursing = !!(node->flags & NODE_DISABLED); /* Object-like macros that are already expanding are necessarily recursive. However, it is possible to have traditional function-like macros that are not infinitely recursive but recurse to any given depth. Further, it is easy to construct examples that get ever longer until the point they stop recursing. So there is no easy way to detect true recursion; instead we assume any expansion more than 20 deep since the first invocation of this macro must be recursing. */ if (recursing && node->value.macro->fun_like) { size_t depth = 0; cpp_context *context = pfile->context; do { depth++; if (context->macro == node && depth > 20) break; context = context->prev; } while (context); recursing = context != NULL; } if (recursing) cpp_error (pfile, CPP_DL_ERROR, "detected recursion whilst expanding macro \"%s\"", NODE_NAME (node)); return recursing; } /* Return the length of the replacement text of a function-like or object-like non-builtin macro. */ size_t _cpp_replacement_text_len (const cpp_macro *macro) { size_t len; if (macro->fun_like && (macro->paramc != 0)) { const uchar *exp; len = 0; for (exp = macro->exp.text;;) { struct block *b = (struct block *) exp; len += b->text_len; if (b->arg_index == 0) break; len += NODE_LEN (macro->params[b->arg_index - 1]); exp += BLOCK_LEN (b->text_len); } } else len = macro->count; return len; } /* Copy the replacement text of MACRO to DEST, which must be of sufficient size. It is not NUL-terminated. The next character is returned. */ uchar * _cpp_copy_replacement_text (const cpp_macro *macro, uchar *dest) { if (macro->fun_like && (macro->paramc != 0)) { const uchar *exp; for (exp = macro->exp.text;;) { struct block *b = (struct block *) exp; cpp_hashnode *param; memcpy (dest, b->text, b->text_len); dest += b->text_len; if (b->arg_index == 0) break; param = macro->params[b->arg_index - 1]; memcpy (dest, NODE_NAME (param), NODE_LEN (param)); dest += NODE_LEN (param); exp += BLOCK_LEN (b->text_len); } } else { memcpy (dest, macro->exp.text, macro->count); dest += macro->count; } return dest; } /* Push a context holding the replacement text of the macro NODE on the context stack. NODE is either object-like, or a function-like macro with no arguments. */ static void replace_args_and_push (cpp_reader *pfile, struct fun_macro *fmacro) { cpp_macro *macro = fmacro->node->value.macro; if (macro->paramc == 0) push_replacement_text (pfile, fmacro->node); else { const uchar *exp; uchar *p; _cpp_buff *buff; size_t len = 0; int cxtquote = 0; /* Get an estimate of the length of the argument-replaced text. This is a worst case estimate, assuming that every replacement text character needs quoting. */ for (exp = macro->exp.text;;) { struct block *b = (struct block *) exp; len += b->text_len; if (b->arg_index == 0) break; len += 2 * (fmacro->args[b->arg_index] - fmacro->args[b->arg_index - 1] - 1); exp += BLOCK_LEN (b->text_len); } /* Allocate room for the expansion plus \n. */ buff = _cpp_get_buff (pfile, len + 1); /* Copy the expansion and replace arguments. */ /* Accumulate actual length, including quoting as necessary */ p = BUFF_FRONT (buff); len = 0; for (exp = macro->exp.text;;) { struct block *b = (struct block *) exp; size_t arglen; int argquote; uchar *base; uchar *in; len += b->text_len; /* Copy the non-argument text literally, keeping track of whether matching quotes have been seen. */ for (arglen = b->text_len, in = b->text; arglen > 0; arglen--) { if (*in == '"') cxtquote = ! cxtquote; *p++ = *in++; } /* Done if no more arguments */ if (b->arg_index == 0) break; arglen = (fmacro->args[b->arg_index] - fmacro->args[b->arg_index - 1] - 1); base = pfile->out.base + fmacro->args[b->arg_index - 1]; in = base; #if 0 /* Skip leading whitespace in the text for the argument to be substituted. To be compatible with gcc 2.95, we would also need to trim trailing whitespace. Gcc 2.95 trims leading and trailing whitespace, which may be a bug. The current gcc testsuite explicitly checks that this leading and trailing whitespace in actual arguments is preserved. */ while (arglen > 0 && is_space (*in)) { in++; arglen--; } #endif for (argquote = 0; arglen > 0; arglen--) { if (cxtquote && *in == '"') { if (in > base && *(in-1) != '\\') argquote = ! argquote; /* Always add backslash before double quote if argument is expanded in a quoted context */ *p++ = '\\'; len++; } else if (cxtquote && argquote && *in == '\\') { /* Always add backslash before a backslash in an argument that is expanded in a quoted context and also in the range of a quoted context in the argument itself. */ *p++ = '\\'; len++; } *p++ = *in++; len++; } exp += BLOCK_LEN (b->text_len); } /* \n-terminate. */ *p = '\n'; _cpp_push_text_context (pfile, fmacro->node, BUFF_FRONT (buff), len); /* So we free buffer allocation when macro is left. */ pfile->context->buff = buff; } } /* Read and record the parameters, if any, of a function-like macro definition. Destroys pfile->out.cur. Returns true on success, false on failure (syntax error or a duplicate parameter). On success, CUR (pfile->context) is just past the closing parenthesis. */ static bool scan_parameters (cpp_reader *pfile, cpp_macro *macro) { const uchar *cur = CUR (pfile->context) + 1; bool ok; for (;;) { cur = skip_whitespace (pfile, cur, true /* skip_comments */); if (is_idstart (*cur)) { ok = false; if (_cpp_save_parameter (pfile, macro, lex_identifier (pfile, cur))) break; cur = skip_whitespace (pfile, CUR (pfile->context), true /* skip_comments */); if (*cur == ',') { cur++; continue; } ok = (*cur == ')'); break; } ok = (*cur == ')' && macro->paramc == 0); break; } if (!ok) cpp_error (pfile, CPP_DL_ERROR, "syntax error in macro parameter list"); CUR (pfile->context) = cur + (*cur == ')'); return ok; } /* Save the text from pfile->out.base to pfile->out.cur as the replacement text for the current macro, followed by argument ARG_INDEX, with zero indicating the end of the replacement text. */ static void save_replacement_text (cpp_reader *pfile, cpp_macro *macro, unsigned int arg_index) { size_t len = pfile->out.cur - pfile->out.base; uchar *exp; if (macro->paramc == 0) { /* Object-like and function-like macros without parameters simply store their \n-terminated replacement text. */ exp = _cpp_unaligned_alloc (pfile, len + 1); memcpy (exp, pfile->out.base, len); exp[len] = '\n'; macro->exp.text = exp; macro->traditional = 1; macro->count = len; } else { /* Store the text's length (unsigned int), the argument index (unsigned short, base 1) and then the text. */ size_t blen = BLOCK_LEN (len); struct block *block; if (macro->count + blen > BUFF_ROOM (pfile->a_buff)) _cpp_extend_buff (pfile, &pfile->a_buff, macro->count + blen); exp = BUFF_FRONT (pfile->a_buff); block = (struct block *) (exp + macro->count); macro->exp.text = exp; macro->traditional = 1; /* Write out the block information. */ block->text_len = len; block->arg_index = arg_index; memcpy (block->text, pfile->out.base, len); /* Lex the rest into the start of the output buffer. */ pfile->out.cur = pfile->out.base; macro->count += blen; /* If we've finished, commit the memory. */ if (arg_index == 0) BUFF_FRONT (pfile->a_buff) += macro->count; } } /* Analyze and save the replacement text of a macro. Returns true on success. */ bool _cpp_create_trad_definition (cpp_reader *pfile, cpp_macro *macro) { const uchar *cur; uchar *limit; cpp_context *context = pfile->context; /* The context has not been set up for command line defines, and CUR has not been updated for the macro name for in-file defines. */ pfile->out.cur = pfile->out.base; CUR (context) = pfile->buffer->cur; RLIMIT (context) = pfile->buffer->rlimit; check_output_buffer (pfile, RLIMIT (context) - CUR (context)); /* Is this a function-like macro? */ if (* CUR (context) == '(') { bool ok = scan_parameters (pfile, macro); /* Remember the params so we can clear NODE_MACRO_ARG flags. */ macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff); /* Setting macro to NULL indicates an error occurred, and prevents unnecessary work in _cpp_scan_out_logical_line. */ if (!ok) macro = NULL; else { BUFF_FRONT (pfile->a_buff) = (uchar *) ¯o->params[macro->paramc]; macro->fun_like = 1; } } /* Skip leading whitespace in the replacement text. */ pfile->buffer->cur = skip_whitespace (pfile, CUR (context), CPP_OPTION (pfile, discard_comments_in_macro_exp)); pfile->state.prevent_expansion++; _cpp_scan_out_logical_line (pfile, macro); pfile->state.prevent_expansion--; if (!macro) return false; /* Skip trailing white space. */ cur = pfile->out.base; limit = pfile->out.cur; while (limit > cur && is_space (limit[-1])) limit--; pfile->out.cur = limit; save_replacement_text (pfile, macro, 0); return true; } /* Copy SRC of length LEN to DEST, but convert all contiguous whitespace to a single space, provided it is not in quotes. The quote currently in effect is pointed to by PQUOTE, and is updated by the function. Returns the number of bytes copied. */ static size_t canonicalize_text (uchar *dest, const uchar *src, size_t len, uchar *pquote) { uchar *orig_dest = dest; uchar quote = *pquote; while (len) { if (is_space (*src) && !quote) { do src++, len--; while (len && is_space (*src)); *dest++ = ' '; } else { if (*src == '\'' || *src == '"') { if (!quote) quote = *src; else if (quote == *src) quote = 0; } *dest++ = *src++, len--; } } *pquote = quote; return dest - orig_dest; } /* Returns true if MACRO1 and MACRO2 have expansions different other than in the form of their whitespace. */ bool _cpp_expansions_different_trad (const cpp_macro *macro1, const cpp_macro *macro2) { uchar *p1 = XNEWVEC (uchar, macro1->count + macro2->count); uchar *p2 = p1 + macro1->count; uchar quote1 = 0, quote2 = 0; bool mismatch; size_t len1, len2; if (macro1->paramc > 0) { const uchar *exp1 = macro1->exp.text, *exp2 = macro2->exp.text; mismatch = true; for (;;) { struct block *b1 = (struct block *) exp1; struct block *b2 = (struct block *) exp2; if (b1->arg_index != b2->arg_index) break; len1 = canonicalize_text (p1, b1->text, b1->text_len, "e1); len2 = canonicalize_text (p2, b2->text, b2->text_len, "e2); if (len1 != len2 || memcmp (p1, p2, len1)) break; if (b1->arg_index == 0) { mismatch = false; break; } exp1 += BLOCK_LEN (b1->text_len); exp2 += BLOCK_LEN (b2->text_len); } } else { len1 = canonicalize_text (p1, macro1->exp.text, macro1->count, "e1); len2 = canonicalize_text (p2, macro2->exp.text, macro2->count, "e2); mismatch = (len1 != len2 || memcmp (p1, p2, len1)); } free (p1); return mismatch; } nescc-1.3.4/libcpp/ucnid.h000066400000000000000000001105311177770303300153470ustar00rootroot00000000000000/* Unicode characters and various properties. Copyright (C) 2003, 2005 Free Software Foundation, Inc. This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Copyright (C) 1991-2005 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html. Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any associated documentation (the "Data Files") or Unicode software and any associated documentation (the "Software") to deal in the Data Files or Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software, and to permit persons to whom the Data Files or Software are furnished to do so, provided that (a) the above copyright notice(s) and this permission notice appear with all copies of the Data Files or Software, (b) both the above copyright notice(s) and this permission notice appear in associated documentation, and (c) there is clear notice in each modified Data File or in the Software as well as in the documentation associated with the Data File(s) or Software that the data or software has been modified. THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE. Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder. */ { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x00a9 }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x00aa }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x00b4 }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x00b5 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x00b6 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x00b7 }, { 0| 0| 0|CID|NFC| 0| 0, 0, 0x00b9 }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x00ba }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x00bf }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x00d6 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x00d7 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x00f6 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x00f7 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0131 }, { C99| 0|CXX|CID|NFC| 0| 0, 0, 0x0133 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x013e }, { C99| 0|CXX|CID|NFC| 0| 0, 0, 0x0140 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0148 }, { C99| 0|CXX|CID|NFC| 0| 0, 0, 0x0149 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x017e }, { C99| 0|CXX|CID|NFC| 0| 0, 0, 0x017f }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x01c3 }, { C99| 0|CXX|CID|NFC| 0| 0, 0, 0x01cc }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x01f0 }, { C99| 0|CXX|CID|NFC| 0| 0, 0, 0x01f3 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x01f5 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x01f9 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0217 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x024f }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x02a8 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x02af }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x02b8 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x02ba }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x02bb }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x02bc }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x02c1 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x02cf }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x02d1 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x02df }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x02e4 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0379 }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x037a }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0383 }, { 0| 0|CXX|CID|NFC| 0| 0, 0, 0x0384 }, { 0| 0| 0|CID|NFC| 0| 0, 0, 0x0385 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0386 }, { 0| 0| 0|CID| 0| 0| 0, 0, 0x0387 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x038a }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x038b }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x038c }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x038d }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x03a1 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x03a2 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x03ce }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x03cf }, { C99| 0|CXX|CID|NFC| 0| 0, 0, 0x03d6 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x03d9 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x03da }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x03db }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x03dc }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x03dd }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x03de }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x03df }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x03e0 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x03e1 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x03ef }, { C99| 0|CXX|CID|NFC| 0| 0, 0, 0x03f2 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x03f3 }, { 0| 0| 0|CID|NFC| 0| 0, 0, 0x0400 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x040c }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0x040d }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x040e }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x044f }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0450 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x045c }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x045d }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0481 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x048f }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x04c4 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x04c6 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x04c8 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x04ca }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x04cc }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x04cf }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x04eb }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x04ed }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x04f5 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x04f7 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x04f9 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0530 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0556 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0558 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0559 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0560 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0586 }, { C99| 0|CXX|CID|NFC| 0| 0, 0, 0x0587 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x05af }, { C99| 0| 0|CID|NFC|NKC| 0, 10, 0x05b0 }, { C99| 0| 0|CID|NFC|NKC| 0, 11, 0x05b1 }, { C99| 0| 0|CID|NFC|NKC| 0, 12, 0x05b2 }, { C99| 0| 0|CID|NFC|NKC| 0, 13, 0x05b3 }, { C99| 0| 0|CID|NFC|NKC| 0, 14, 0x05b4 }, { C99| 0| 0|CID|NFC|NKC| 0, 15, 0x05b5 }, { C99| 0| 0|CID|NFC|NKC| 0, 16, 0x05b6 }, { C99| 0| 0|CID|NFC|NKC| 0, 17, 0x05b7 }, { C99| 0| 0|CID|NFC|NKC| 0, 18, 0x05b8 }, { C99| 0| 0|CID|NFC|NKC| 0, 19, 0x05b9 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x05ba }, { C99| 0| 0|CID|NFC|NKC| 0, 20, 0x05bb }, { C99| 0| 0|CID|NFC|NKC| 0, 21, 0x05bc }, { C99| 0| 0|CID|NFC|NKC| 0, 22, 0x05bd }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x05be }, { C99| 0| 0|CID|NFC|NKC| 0, 23, 0x05bf }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x05c0 }, { C99| 0| 0|CID|NFC|NKC| 0, 24, 0x05c1 }, { C99| 0| 0|CID|NFC|NKC| 0, 25, 0x05c2 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x05cf }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x05ea }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x05ef }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x05f2 }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0x05f4 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0620 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x063a }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x063f }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x064a }, { C99| 0|CXX|CID|NFC|NKC| 0, 27, 0x064b }, { C99| 0|CXX|CID|NFC|NKC| 0, 28, 0x064c }, { C99| 0|CXX|CID|NFC|NKC| 0, 29, 0x064d }, { C99| 0|CXX|CID|NFC|NKC| 0, 30, 0x064e }, { C99| 0|CXX|CID|NFC|NKC| 0, 31, 0x064f }, { C99| 0|CXX|CID|NFC|NKC| 0, 32, 0x0650 }, { C99| 0|CXX|CID|NFC|NKC| 0, 33, 0x0651 }, { C99| 0|CXX|CID|NFC|NKC| 0, 34, 0x0652 }, { 0| 0| 0|CID|NFC|NKC|CTX, 0, 0x065f }, { C99|DIG| 0|CID|NFC|NKC| 0, 0, 0x0669 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x066f }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0674 }, { C99| 0|CXX|CID|NFC| 0| 0, 0, 0x0678 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x06b7 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x06b9 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x06be }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x06bf }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x06ce }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x06cf }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x06d5 }, { C99| 0| 0|CID|NFC|NKC| 0, 230, 0x06d6 }, { C99| 0| 0|CID|NFC|NKC| 0, 230, 0x06d7 }, { C99| 0| 0|CID|NFC|NKC| 0, 230, 0x06d8 }, { C99| 0| 0|CID|NFC|NKC| 0, 230, 0x06d9 }, { C99| 0| 0|CID|NFC|NKC| 0, 230, 0x06da }, { C99| 0| 0|CID|NFC|NKC| 0, 230, 0x06db }, { C99| 0| 0|CID|NFC|NKC| 0, 230, 0x06dc }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x06e4 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x06e6 }, { C99| 0|CXX|CID|NFC|NKC| 0, 230, 0x06e7 }, { C99| 0| 0|CID|NFC|NKC| 0, 230, 0x06e8 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x06e9 }, { C99| 0| 0|CID|NFC|NKC| 0, 220, 0x06ea }, { C99| 0| 0|CID|NFC|NKC| 0, 230, 0x06eb }, { C99| 0| 0|CID|NFC|NKC| 0, 230, 0x06ec }, { C99| 0| 0|CID|NFC|NKC| 0, 220, 0x06ed }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x06ef }, { C99|DIG| 0|CID|NFC|NKC| 0, 0, 0x06f9 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0900 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0903 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0904 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0939 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x093c }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x094c }, { C99| 0| 0|CID|NFC|NKC| 0, 9, 0x094d }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x094f }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0950 }, { C99| 0| 0|CID|NFC|NKC| 0, 230, 0x0951 }, { C99| 0| 0|CID|NFC|NKC| 0, 220, 0x0952 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0957 }, { C99| 0|CXX|CID| 0| 0| 0, 0, 0x095f }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0962 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0963 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0965 }, { C99|DIG| 0|CID|NFC|NKC| 0, 0, 0x096f }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0980 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0983 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0984 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x098c }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x098e }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0990 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0992 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x09a8 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x09a9 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x09b0 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x09b1 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x09b2 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x09b5 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x09b9 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x09bd }, { C99| 0| 0|CID|NFC|NKC|CTX, 0, 0x09be }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x09c4 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x09c6 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x09c8 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x09ca }, { C99| 0| 0| 0|NFC|NKC| 0, 0, 0x09cb }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x09cc }, { C99| 0| 0|CID|NFC|NKC| 0, 9, 0x09cd }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x09db }, { C99| 0|CXX|CID| 0| 0| 0, 0, 0x09dd }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x09de }, { C99| 0|CXX|CID| 0| 0| 0, 0, 0x09df }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x09e1 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x09e3 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x09e5 }, { C99|DIG| 0|CID|NFC|NKC| 0, 0, 0x09ef }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x09f1 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a01 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0a02 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a04 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0a0a }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a0e }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0a10 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a12 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0a28 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a29 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0a30 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a31 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0a32 }, { C99| 0|CXX|CID| 0| 0| 0, 0, 0x0a33 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a34 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0a35 }, { C99| 0|CXX|CID| 0| 0| 0, 0, 0x0a36 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a37 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0a39 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a3d }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0a42 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a46 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0a48 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a4a }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0a4c }, { C99| 0| 0|CID|NFC|NKC| 0, 9, 0x0a4d }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a58 }, { C99| 0|CXX|CID| 0| 0| 0, 0, 0x0a5b }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0a5c }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a5d }, { C99| 0|CXX|CID| 0| 0| 0, 0, 0x0a5e }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a65 }, { C99|DIG| 0|CID|NFC|NKC| 0, 0, 0x0a6f }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a73 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0a74 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a80 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0a83 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a84 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0a8b }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a8c }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0a8d }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a8e }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0a91 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0a92 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0aa8 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0aa9 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0ab0 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0ab1 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0ab3 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0ab4 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0ab9 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0abc }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0ac5 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0ac6 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0ac9 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0aca }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0acc }, { C99| 0| 0|CID|NFC|NKC| 0, 9, 0x0acd }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0acf }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0ad0 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0adf }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0ae0 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0ae5 }, { C99|DIG| 0|CID|NFC|NKC| 0, 0, 0x0aef }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b00 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0b03 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b04 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0b0c }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b0e }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0b10 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b12 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0b28 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b29 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0b30 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b31 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0b33 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b35 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0b39 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b3c }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0b3d }, { C99| 0| 0|CID|NFC|NKC|CTX, 0, 0x0b3e }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0b43 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b46 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0b48 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b4a }, { C99| 0| 0| 0|NFC|NKC| 0, 0, 0x0b4b }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0b4c }, { C99| 0| 0|CID|NFC|NKC| 0, 9, 0x0b4d }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b5b }, { C99| 0|CXX|CID| 0| 0| 0, 0, 0x0b5d }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b5e }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0b61 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b65 }, { C99|DIG| 0|CID|NFC|NKC| 0, 0, 0x0b6f }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b81 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0b83 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b84 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0b8a }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b8d }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0b90 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b91 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0b95 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b98 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0b9a }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b9b }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0b9c }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0b9d }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0b9f }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0ba2 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0ba4 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0ba7 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0baa }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0bad }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0bb5 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0bb6 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0bb9 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0bbd }, { C99| 0| 0|CID|NFC|NKC|CTX, 0, 0x0bbe }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0bc2 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0bc5 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0bc8 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0bc9 }, { C99| 0| 0| 0|NFC|NKC| 0, 0, 0x0bcb }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0bcc }, { C99| 0| 0|CID|NFC|NKC| 0, 9, 0x0bcd }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0be6 }, { C99|DIG| 0|CID|NFC|NKC| 0, 0, 0x0bef }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c00 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0c03 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c04 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0c0c }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c0d }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0c10 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c11 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0c28 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c29 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0c33 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c34 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0c39 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c3d }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0c44 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c45 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0c48 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c49 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0c4c }, { C99| 0| 0|CID|NFC|NKC| 0, 9, 0x0c4d }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c5f }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0c61 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c65 }, { C99|DIG| 0|CID|NFC|NKC| 0, 0, 0x0c6f }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c81 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0c83 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c84 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0c8c }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c8d }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0c90 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c91 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0ca8 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0ca9 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0cb3 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0cb4 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0cb9 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0cbd }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0cc1 }, { C99| 0| 0|CID|NFC|NKC|CTX, 0, 0x0cc2 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0cc4 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0cc5 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0cc8 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0cc9 }, { C99| 0| 0| 0|NFC|NKC| 0, 0, 0x0cca }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0ccc }, { C99| 0| 0|CID|NFC|NKC| 0, 9, 0x0ccd }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0cdd }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0cde }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0cdf }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0ce1 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0ce5 }, { C99|DIG| 0|CID|NFC|NKC| 0, 0, 0x0cef }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0d01 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0d03 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0d04 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0d0c }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0d0d }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0d10 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0d11 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0d28 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0d29 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0d39 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0d3d }, { C99| 0| 0|CID|NFC|NKC|CTX, 0, 0x0d3e }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0d43 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0d45 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0d48 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0d49 }, { C99| 0| 0| 0|NFC|NKC| 0, 0, 0x0d4b }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0d4c }, { C99| 0| 0|CID|NFC|NKC| 0, 9, 0x0d4d }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0d5f }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0d61 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0d65 }, { C99|DIG| 0|CID|NFC|NKC| 0, 0, 0x0d6f }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0e00 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0e30 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0e31 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0e32 }, { C99| 0|CXX|CID|NFC| 0| 0, 0, 0x0e33 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0e37 }, { C99| 0| 0|CID|NFC|NKC| 0, 103, 0x0e38 }, { C99| 0| 0|CID|NFC|NKC| 0, 103, 0x0e39 }, { C99| 0| 0|CID|NFC|NKC| 0, 9, 0x0e3a }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0e3f }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0e46 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0e47 }, { C99| 0| 0|CID|NFC|NKC| 0, 107, 0x0e48 }, { C99| 0| 0|CID|NFC|NKC| 0, 107, 0x0e49 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0e4e }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0x0e4f }, { C99|DIG|CXX|CID|NFC|NKC| 0, 0, 0x0e59 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0e5b }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0e80 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0e82 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0e83 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0e84 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0e86 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0e88 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0e89 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0e8a }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0e8c }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0e8d }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0e93 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0e97 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0e98 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0e9f }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0ea0 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0ea3 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0ea4 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0ea5 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0ea6 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0ea7 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0ea9 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0eab }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0eac }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0eae }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0x0eaf }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0eb0 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0eb1 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0eb2 }, { C99| 0|CXX|CID|NFC| 0| 0, 0, 0x0eb3 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0eb7 }, { C99| 0| 0|CID|NFC|NKC| 0, 118, 0x0eb8 }, { C99| 0| 0|CID|NFC|NKC| 0, 118, 0x0eb9 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0eba }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0ebc }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0ebd }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0ebf }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0ec4 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0ec5 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x0ec6 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0ec7 }, { C99| 0| 0|CID|NFC|NKC| 0, 122, 0x0ec8 }, { C99| 0| 0|CID|NFC|NKC| 0, 122, 0x0ec9 }, { C99| 0| 0|CID|NFC|NKC| 0, 122, 0x0eca }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0ecd }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0ecf }, { C99|DIG| 0|CID|NFC|NKC| 0, 0, 0x0ed9 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0edb }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x0edd }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0eff }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0f00 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0f17 }, { C99| 0| 0|CID|NFC|NKC| 0, 220, 0x0f18 }, { C99| 0| 0|CID|NFC|NKC| 0, 220, 0x0f19 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0f1f }, { C99|DIG| 0|CID|NFC|NKC| 0, 0, 0x0f33 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0f34 }, { C99| 0| 0|CID|NFC|NKC| 0, 220, 0x0f35 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0f36 }, { C99| 0| 0|CID|NFC|NKC| 0, 220, 0x0f37 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0f38 }, { C99| 0| 0|CID|NFC|NKC| 0, 216, 0x0f39 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0f3d }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0f42 }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x0f43 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0f47 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0f48 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0f4c }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x0f4d }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0f51 }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x0f52 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0f56 }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x0f57 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0f5b }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x0f5c }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0f68 }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x0f69 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0f70 }, { C99| 0| 0|CID|NFC|NKC| 0, 129, 0x0f71 }, { C99| 0| 0|CID|NFC|NKC| 0, 130, 0x0f72 }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x0f73 }, { C99| 0| 0|CID|NFC|NKC| 0, 132, 0x0f74 }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x0f76 }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x0f77 }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x0f78 }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x0f79 }, { C99| 0| 0|CID|NFC|NKC| 0, 130, 0x0f7a }, { C99| 0| 0|CID|NFC|NKC| 0, 130, 0x0f7b }, { C99| 0| 0|CID|NFC|NKC| 0, 130, 0x0f7c }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0f7f }, { C99| 0| 0|CID|NFC|NKC| 0, 130, 0x0f80 }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x0f81 }, { C99| 0| 0|CID|NFC|NKC| 0, 230, 0x0f82 }, { C99| 0| 0|CID|NFC|NKC| 0, 230, 0x0f83 }, { C99| 0| 0|CID|NFC|NKC| 0, 9, 0x0f84 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0f85 }, { C99| 0| 0|CID|NFC|NKC| 0, 230, 0x0f86 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0f8b }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0f8f }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0f92 }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x0f93 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0f95 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0f96 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0f97 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0f98 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0f9c }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x0f9d }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0fa1 }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x0fa2 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0fa6 }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x0fa7 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0fab }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x0fac }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0fad }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0fb0 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x0fb7 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0fb8 }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x0fb9 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x109f }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x10c5 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x10cf }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x10f6 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x10ff }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0x1159 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1160 }, { 0| 0|CXX|CID|NFC|NKC|CTX, 0, 0x1175 }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0x11a2 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11a7 }, { 0| 0|CXX|CID|NFC|NKC|CTX, 0, 0x11c2 }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0x11f9 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1dff }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1e99 }, { C99| 0|CXX|CID|NFC| 0| 0, 0, 0x1e9a }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x1e9b }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e9f }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1ef9 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1eff }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1f15 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1f17 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1f1d }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1f1f }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1f45 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1f47 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1f4d }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1f4f }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1f57 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1f58 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1f59 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1f5a }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1f5b }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1f5c }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1f5d }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1f5e }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1f70 }, { C99| 0|CXX| 0| 0| 0| 0, 0, 0x1f71 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1f72 }, { C99| 0|CXX| 0| 0| 0| 0, 0, 0x1f73 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1f74 }, { C99| 0|CXX| 0| 0| 0| 0, 0, 0x1f75 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1f76 }, { C99| 0|CXX| 0| 0| 0| 0, 0, 0x1f77 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1f78 }, { C99| 0|CXX| 0| 0| 0| 0, 0, 0x1f79 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1f7a }, { C99| 0|CXX| 0| 0| 0| 0, 0, 0x1f7b }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1f7c }, { C99| 0|CXX| 0| 0| 0| 0, 0, 0x1f7d }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1f7f }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1fb4 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1fb5 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1fba }, { C99| 0|CXX| 0| 0| 0| 0, 0, 0x1fbb }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1fbc }, { 0| 0| 0|CID|NFC| 0| 0, 0, 0x1fbd }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x1fbe }, { 0| 0| 0|CID|NFC| 0| 0, 0, 0x1fc1 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1fc4 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1fc5 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1fc8 }, { C99| 0|CXX| 0| 0| 0| 0, 0, 0x1fc9 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1fca }, { C99| 0|CXX| 0| 0| 0| 0, 0, 0x1fcb }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1fcc }, { 0| 0| 0|CID|NFC| 0| 0, 0, 0x1fcf }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1fd2 }, { C99| 0|CXX| 0| 0| 0| 0, 0, 0x1fd3 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1fd5 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1fda }, { C99| 0|CXX| 0| 0| 0| 0, 0, 0x1fdb }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1fdf }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1fe2 }, { C99| 0|CXX| 0| 0| 0| 0, 0, 0x1fe3 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1fea }, { C99| 0|CXX| 0| 0| 0| 0, 0, 0x1feb }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1fec }, { 0| 0| 0|CID|NFC| 0| 0, 0, 0x1ff1 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1ff4 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1ff5 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1ff8 }, { C99| 0|CXX| 0| 0| 0| 0, 0, 0x1ff9 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1ffa }, { C99| 0|CXX| 0| 0| 0| 0, 0, 0x1ffb }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x1ffc }, { 0| 0| 0|CID| 0| 0| 0, 0, 0x203e }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x2040 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x207e }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x207f }, { 0| 0| 0|CID|NFC| 0| 0, 0, 0x2101 }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x2102 }, { 0| 0| 0|CID|NFC| 0| 0, 0, 0x2106 }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x2107 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2109 }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x2113 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2114 }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x2115 }, { 0| 0| 0|CID|NFC| 0| 0, 0, 0x2117 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x2118 }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x211d }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2123 }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x2124 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2125 }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x2126 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2127 }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x2128 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2129 }, { C99| 0| 0|CID| 0| 0| 0, 0, 0x212a }, { C99| 0| 0| 0| 0| 0| 0, 0, 0x212b }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x212d }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x212e }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x2131 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2132 }, { C99| 0| 0|CID|NFC| 0| 0, 0, 0x2138 }, { 0| 0| 0|CID|NFC| 0| 0, 0, 0x215f }, { C99|DIG| 0|CID|NFC| 0| 0, 0, 0x217f }, { C99|DIG| 0|CID|NFC|NKC| 0, 0, 0x2182 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x3004 }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0x3006 }, { C99|DIG| 0|CID|NFC|NKC| 0, 0, 0x3007 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x3020 }, { C99|DIG| 0|CID|NFC|NKC| 0, 0, 0x3029 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x3040 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x3093 }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0x3094 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x309a }, { C99| 0|CXX|CID|NFC| 0| 0, 0, 0x309c }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0x309e }, { 0| 0| 0|CID|NFC| 0| 0, 0, 0x30a0 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x30f6 }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0x30fa }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x30fc }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0x30fe }, { 0| 0| 0|CID|NFC| 0| 0, 0, 0x3104 }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x312c }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0x4dff }, { C99| 0|CXX|CID|NFC|NKC| 0, 0, 0x9fa5 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xabff }, { C99| 0| 0|CID|NFC|NKC| 0, 0, 0xd7a3 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xf8ff }, { 0| 0|CXX| 0| 0| 0| 0, 0, 0xfa0d }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0xfa0f }, { 0| 0|CXX| 0| 0| 0| 0, 0, 0xfa10 }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0xfa11 }, { 0| 0|CXX| 0| 0| 0| 0, 0, 0xfa12 }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0xfa14 }, { 0| 0|CXX| 0| 0| 0| 0, 0, 0xfa1e }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0xfa1f }, { 0| 0|CXX| 0| 0| 0| 0, 0, 0xfa20 }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0xfa21 }, { 0| 0|CXX| 0| 0| 0| 0, 0, 0xfa22 }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0xfa24 }, { 0| 0|CXX| 0| 0| 0| 0, 0, 0xfa26 }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0xfa29 }, { 0| 0|CXX| 0| 0| 0| 0, 0, 0xfa2d }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xfb1e }, { 0| 0|CXX|CID| 0| 0| 0, 0, 0xfb1f }, { 0| 0|CXX|CID|NFC| 0| 0, 0, 0xfb29 }, { 0| 0|CXX|CID| 0| 0| 0, 0, 0xfb36 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xfb37 }, { 0| 0|CXX|CID| 0| 0| 0, 0, 0xfb3c }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xfb3d }, { 0| 0|CXX|CID| 0| 0| 0, 0, 0xfb3e }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xfb3f }, { 0| 0|CXX|CID| 0| 0| 0, 0, 0xfb41 }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0xfb42 }, { 0| 0|CXX|CID| 0| 0| 0, 0, 0xfb44 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xfb45 }, { 0| 0|CXX|CID| 0| 0| 0, 0, 0xfb4e }, { 0| 0|CXX|CID|NFC| 0| 0, 0, 0xfbb1 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xfbd2 }, { 0| 0|CXX|CID|NFC| 0| 0, 0, 0xfd3d }, { 0| 0|CXX|CID|NFC|NKC| 0, 0, 0xfd3f }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xfd4f }, { 0| 0|CXX|CID|NFC| 0| 0, 0, 0xfd8f }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xfd91 }, { 0| 0|CXX|CID|NFC| 0| 0, 0, 0xfdc7 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xfdef }, { 0| 0|CXX|CID|NFC| 0| 0, 0, 0xfdfb }, { 0| 0| 0|CID|NFC| 0| 0, 0, 0xfe6f }, { 0| 0|CXX|CID|NFC| 0| 0, 0, 0xfe72 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xfe73 }, { 0| 0|CXX|CID|NFC| 0| 0, 0, 0xfe74 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xfe75 }, { 0| 0|CXX|CID|NFC| 0| 0, 0, 0xfefc }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xff20 }, { 0| 0|CXX|CID|NFC| 0| 0, 0, 0xff3a }, { 0| 0| 0|CID|NFC| 0| 0, 0, 0xff40 }, { 0| 0|CXX|CID|NFC| 0| 0, 0, 0xff5a }, { 0| 0| 0|CID|NFC| 0| 0, 0, 0xff65 }, { 0| 0|CXX|CID|NFC| 0| 0, 0, 0xffbe }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xffc1 }, { 0| 0|CXX|CID|NFC| 0| 0, 0, 0xffc7 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xffc9 }, { 0| 0|CXX|CID|NFC| 0| 0, 0, 0xffcf }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xffd1 }, { 0| 0|CXX|CID|NFC| 0| 0, 0, 0xffd7 }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xffd9 }, { 0| 0|CXX|CID|NFC| 0| 0, 0, 0xffdc }, { 0| 0| 0|CID|NFC|NKC| 0, 0, 0xffff }, nescc-1.3.4/libcpp/ucnid.tab000066400000000000000000000130121177770303300156620ustar00rootroot00000000000000; Table of UCNs which are valid in identifiers. ; Copyright (C) 2003, 2005 Free Software Foundation, Inc. ; ; This program 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. ; ; This program 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 this program; if not, write to the Free Software ; Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ; ; This file reproduces the table in ISO/IEC 9899:1999 (C99) Annex ; D, which is itself a reproduction from ISO/IEC TR 10176:1998, and ; the similar table from ISO/IEC 14882:1988 (C++98) Annex E, which is ; a reproduction of ISO/IEC PDTR 10176. Unfortunately these tables ; are not identical. [C99] ; Latin 00aa 00ba 00c0-00d6 00d8-00f6 00f8-01f5 01fa-0217 0250-02a8 1e00-1e9b 1ea0-1ef9 207f ; Greek 0386 0388-038a 038c 038e-03a1 03a3-03ce 03d0-03d6 03da 03dc 03de 03e0 03e2-03f3 1f00-1f15 1f18-1f1d 1f20-1f45 1f48-1f4d 1f50-1f57 1f59 1f5b 1f5d 1f5f-1f7d 1f80-1fb4 1fb6-1fbc 1fc2-1fc4 1fc6-1fcc 1fd0-1fd3 1fd6-1fdb 1fe0-1fec 1ff2-1ff4 1ff6-1ffc ; Cyrillic 0401-040c 040e-044f 0451-045c 045e-0481 0490-04c4 04c7-04c8 04cb-04cc 04d0-04eb 04ee-04f5 04f8-04f9 ; Armenian 0531-0556 0561-0587 ; Hebrew 05b0-05b9 05bb-05bd 05bf 05c1-05c2 05d0-05ea 05f0-05f2 ; Arabic 0621-063a 0640-0652 0670-06b7 06ba-06be 06c0-06ce 06d0-06dc 06e5-06e8 06ea-06ed ; Devanagari 0901-0903 0905-0939 093e-094d 0950-0952 0958-0963 ; Bengali 0981-0983 0985-098c 098f-0990 0993-09a8 09aa-09b0 09b2 09b6-09b9 09be-09c4 09c7-09c8 09cb-09cd 09dc-09dd 09df-09e3 09f0-09f1 ; Gurmukhi 0a02 0a05-0a0a 0a0f-0a10 0a13-0a28 0a2a-0a30 0a32-0a33 0a35-0a36 0a38-0a39 0a3e-0a42 0a47-0a48 0a4b-0a4d 0a59-0a5c 0a5e 0a74 ; Gujarati 0a81-0a83 0a85-0a8b 0a8d 0a8f-0a91 0a93-0aa8 0aaa-0ab0 0ab2-0ab3 0ab5-0ab9 0abd-0ac5 0ac7-0ac9 0acb-0acd 0ad0 0ae0 ; Oriya 0b01-0b03 0b05-0b0c 0b0f-0b10 0b13-0b28 0b2a-0b30 0b32-0b33 0b36-0b39 0b3e-0b43 0b47-0b48 0b4b-0b4d 0b5c-0b5d 0b5f-0b61 ; Tamil 0b82-0b83 0b85-0b8a 0b8e-0b90 0b92-0b95 0b99-0b9a 0b9c 0b9e-0b9f 0ba3-0ba4 0ba8-0baa 0bae-0bb5 0bb7-0bb9 0bbe-0bc2 0bc6-0bc8 0bca-0bcd ; Telugu 0c01-0c03 0c05-0c0c 0c0e-0c10 0c12-0c28 0c2a-0c33 0c35-0c39 0c3e-0c44 0c46-0c48 0c4a-0c4d 0c60-0c61 ; Kannada 0c82-0c83 0c85-0c8c 0c8e-0c90 0c92-0ca8 0caa-0cb3 0cb5-0cb9 0cbe-0cc4 0cc6-0cc8 0cca-0ccd 0cde 0ce0-0ce1 ; Malayalam 0d02-0d03 0d05-0d0c 0d0e-0d10 0d12-0d28 0d2a-0d39 0d3e-0d43 0d46-0d48 0d4a-0d4d 0d60-0d61 # CORRECTION: exclude 0e50-0e59 from the Thai range as it also appears # in the Digits range below. ; Thai 0e01-0e3a 0e40-0e49 0e5a-0e5b ; Lao 0e81-0e82 0e84 0e87-0e88 0e8a 0e8d 0e94-0e97 0e99-0e9f 0ea1-0ea3 0ea5 0ea7 0eaa-0eab 0ead-0eae 0eb0-0eb9 0ebb-0ebd 0ec0-0ec4 0ec6 0ec8-0ecd 0edc-0edd ; Tibetan 0f00 0f18-0f19 0f35 0f37 0f39 0f3e-0f47 0f49-0f69 0f71-0f84 0f86-0f8b 0f90-0f95 0f97 0f99-0fad 0fb1-0fb7 0fb9 ; Georgian 10a0-10c5 10d0-10f6 ; Hiragana 3041-3093 309b-309c ; Katakana 30a1-30f6 30fb-30fc ; Bopomofo 3105-312c ; CJK Unified Ideographs 4e00-9fa5 ; Hangul ac00-d7a3 ; Special characters 00b5 00b7 02b0-02b8 02bb 02bd-02c1 02d0-02d1 02e0-02e4 037a 0559 093d 0b3d 1fbe 203f-2040 2102 2107 210a-2113 2115 2118-211d 2124 2126 2128 212a-2131 2133-2138 2160-2182 3005-3007 3021-3029 ; Digits 0660-0669 06f0-06f9 0966-096f 09e6-09ef 0a66-0a6f 0ae6-0aef 0b66-0b6f 0be7-0bef 0c66-0c6f 0ce6-0cef 0d66-0d6f 0e50-0e59 0ed0-0ed9 0f20-0f33 [CXX] ; Latin 00c0-00d6 00d8-00f6 00f8-01f5 01fa-0217 0250-02a8 1e00-1e9a 1ea0-1ef9 ; Greek 0384 0388-038a 038c 038e-03a1 03a3-03ce 03d0-03d6 03da 03dc 03de 03e0 03e2-03f3 1f00-1f15 1f18-1f1d 1f20-1f45 1f48-1f4d 1f50-1f57 1f59 1f5b 1f5d 1f5f-1f7d 1f80-1fb4 1fb6-1fbc 1fc2-1fc4 1fc6-1fcc 1fd0-1fd3 1fd6-1fdb 1fe0-1fec 1ff2-1ff4 1ff6-1ffc ; Cyrillic 0401-040d 040f-044f 0451-045c 045e-0481 0490-04c4 04c7-04c8 04cb-04cc 04d0-04eb 04ee-04f5 04f8-04f9 ; Armenian 0531-0556 0561-0587 ; Hebrew 05d0-05ea 05f0-05f4 ; Arabic 0621-063a 0640-0652 0670-06b7 06ba-06be 06c0-06ce 06e5-06e7 ; Devanagari 0905-0939 0958-0962 ; Bengali 0985-098c 098f-0990 0993-09a8 09aa-09b0 09b2 09b6-09b9 09dc-09dd 09df-09e1 09f0-09f1 ; Gurmukhi 0a05-0a0a 0a0f-0a10 0a13-0a28 0a2a-0a30 0a32-0a33 0a35-0a36 0a38-0a39 0a59-0a5c 0a5e ; Gujarati 0a85-0a8b 0a8d 0a8f-0a91 0a93-0aa8 0aaa-0ab0 0ab2-0ab3 0ab5-0ab9 0ae0 ; Oriya 0b05-0b0c 0b0f-0b10 0b13-0b28 0b2a-0b30 0b32-0b33 0b36-0b39 0b5c-0b5d 0b5f-0b61 ; Tamil 0b85-0b8a 0b8e-0b90 0b92-0b95 0b99-0b9a 0b9c 0b9e-0b9f 0ba3-0ba4 0ba8-0baa 0bae-0bb5 0bb7-0bb9 ; Telugu 0c05-0c0c 0c0e-0c10 0c12-0c28 0c2a-0c33 0c35-0c39 0c60-0c61 ; Kannada 0c85-0c8c 0c8e-0c90 0c92-0ca8 0caa-0cb3 0cb5-0cb9 0ce0-0ce1 ; Malayalam 0d05-0d0c 0d0e-0d10 0d12-0d28 0d2a-0d39 0d60-0d61 ; Thai 0e01-0e30 0e32-0e33 0e40-0e46 0e4f-0e5b ; Digits 0e50-0e59 ; Lao 0e81-0e82 0e84 0e87-0e88 0e8a 0e8d 0e94-0e97 0e99-0e9f 0ea1-0ea3 0ea5 0ea7 0eaa-0eab 0ead-0eb0 0eb2 0eb3 0ebd 0ec0-0ec4 0ec6 ; Georgian 10a0-10c5 10d0-10f6 ; Hiragana 3041-3094 309b-309e ; Katakana 30a1-30fe ; Bopomofo 3105-312c ; Hangul 1100-1159 1161-11a2 11a8-11f9 ; CJK Unified Ideographs f900-fa2d fb1f-fb36 fb38-fb3c fb3e fb40-fb41 fb42-fb44 fb46-fbb1 fbd3-fd3f fd50-fd8f fd92-fdc7 fdf0-fdfb fe70-fe72 fe74 fe76-fefc ff21-ff3a ff41-ff5a ff66-ffbe ffc2-ffc7 ffca-ffcf ffd2-ffd7 ffda-ffdc 4e00-9fa5 nescc-1.3.4/libiberty/000077500000000000000000000000001177770303300146075ustar00rootroot00000000000000nescc-1.3.4/libiberty/COPYING.LIB000066400000000000000000000635101177770303300162540ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! nescc-1.3.4/libiberty/ChangeLog000066400000000000000000007734601177770303300164020ustar00rootroot000000000000002007-11-12 Joseph Myers * floatformat.c (floatformat_ibm_long_double_is_valid): Fix compiler warnings. (floatformat_ibm_long_double): Use floatformat_ibm_long_double_is_valid. 2007-11-07 Joseph Myers Daniel Jacobowitz * floatformat.c (mant_bits_set): New. (floatformat_to_double): Use it. Note no special handling of split formats. (floatformat_from_double): Note no special handing of split formats. (floatformat_ibm_long_double_is_valid, floatformat_ibm_long_double): New. (floatformat_ieee_single_big, floatformat_ieee_single_little, floatformat_ieee_double_big, floatformat_ieee_double_little, floatformat_ieee_double_littlebyte_bigword, floatformat_vax_f, floatformat_vax_d, floatformat_vax_g, floatformat_i387_ext, floatformat_m68881_ext, floatformat_i960_ext, floatformat_m88110_ext, floatformat_m88110_harris_ext, floatformat_arm_ext_big, floatformat_arm_ext_littlebyte_bigword, floatformat_ia64_spill_big, floatformat_ia64_spill_little, floatformat_ia64_quad_big, floatformat_ia64_quad_little): Update for addition of split_half field. 2007-09-06 Tom Tromey * pexecute.txh (pex_free): Document process killing. 2007-08-31 Douglas Gregor * cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_RVALUE_REFERENCE. (d_make_comp): Ditto. (cplus_demangle_type): Ditto. (d_print_comp): Ditto. (d_print_mod): Ditto. (d_print_function_type): Ditto. 2007-08-24 Kai Tietz * pex-common.h: (pex_funcs): Retyped wait and exec_child to pid_t. * pex-djgpp.c: Likewise. * pex-msdos.c: Likewise. * pex-unix.c: Likewise. * pex-win32.c: Likewise. 2007-08-17 Michael Snyder * make-relative-prefix.c (make_relative_prefix_1): Resource leaks. 2007-08-03 Michael Snyder * make-relative-prefix.c (make_relative_prefix_1): Fix resource leak. 2007-07-31 Michael Snyder * cp-demangle.c (d_print_comp): Guard against null. 2007-07-25 Ben Elliston * Makefile.in (CFILES): Remove ternary.c. (REQUIRED_OFILES): Remove ./ternary.o. (INSTALLED_HEADERS): Remove ternary.h. (ternary.o): Remove. * ternary.c: Remove. 2007-07-23 DJ Delorie * argv.c (writeargv): Fix typo in inline documentation. * functions.texi: Regenerate. 2007-07-17 DJ Delorie * configure.ac (target_header_dir, msdosdjgpp): Remove duplicate gettimeofday entry. * configure: Likewise. 2007-07-11 Alexandre Oliva * maint-tool (deps): Output stamp-h instead of config.h. * Makefile.in: Rebuild deps. (maintainer-clean-subdir): Depend on stamp-h rather than config.h. 2007-07-02 Simon Baldwin * argv.c (writeargv): Removed declaration of unused variable. 2007-06-14 Paolo Bonzini * configure.ac: Use ACX_PROG_CC_ALMOST_PEDANTIC too. * configure: Regenerate. 2007-06-14 Paolo Bonzini * aclocal.m4: Include config/warnings.m4. * configure.ac: Use ACX_PROG_CC_WARNING_OPTS. * configure: Regenerate. 2007-06-07 Geoffrey Keating * configure.ac: Non-default multilibs can be cross compilations. * configure: Regenerate 2007-05-07 Nathan Froyd * argv.c (writeargv): New function. 2007-05-05 Geoffrey Keating * cp-demangle.c (d_name): Detect local-source-name. (d_prefix): Likewise. (d_unqualified_name): Implement local-source-name. 2007-05-03 Joel Brobecker * filename_cmp.c: Replace include of ctype.h by include of safe-ctype.h. (filename_cmp): Use TOLOWER instead of tolower for conversions that are locale-independent. * Makefile.in (filename_cmp.o): Add dependency on safe-ctype.h. 2007-04-11 Thomas Neumann tneumann@users.sourceforge.net * argv.c: Use ANSI C declarations. * make-relative-prefix.c: Likewise. 2007-04-06 Joel Brobecker * filename_cmp.c (filename_cmp): Improve documentation. 2007-04-02 Andreas Schwab * filename_cmp.c: Include "config.h". 2007-03-29 Joel Brobecker * filename_cmp.c: New file. * Makefile.in (CFILES): Add filename_cmp.c. (REQUIRED_OFILES): Add filename_cmp.o (filename_cmp.o): New rule. * functions.texi: Regenerate. 2007-03-15 Geoffrey Keating * cp-demangle.c (d_encoding): Exit early on error. (d_pointer_to_member_type): Exit early if cplus_demangle_type returns NULL. (cplus_demangle_type): Likewise. * testsuite/demangle-expected: New testcase. 2007-03-01 Brooks Moses * Makefile.in: Add install-pdf target as copied from automake v1.10 rules. * testsuite/Makefile.in: Add dummy install-pdf target. 2007-03-01 Peter Breitenlohner Eric Botcazou PR other/16513 * Makefile.in: Install library under $(MULTIOSDIR), not $(MULTISUBDIR). Install headers in multilib independent location. 2007-02-26 DJ Delorie * configure.ac: add djgpp-specific results, so we don't have to link during a cross compilation. * configure: Regenerated. 2007-01-31 Ralf Wildenhues * hex.c: Fix typo. * choose-temp.c: Likewise. * functions.texi: Regenerate. 2007-01-31 Vladimir Prus * pex-common.h (struct pex_obj): New fields stderr_pipe and read_err. * pex-common.c (pex_init_common): Initialize stderr_pipe. (pex_run_in_environment): Add error checking for PEX_STDERR_TO_PIPE. Create a pipe for stderr if necessary. (pex_read_err): New. (pex_free): Close read_err. * pexecute.txh: Document changes. * functions.texi: Regenerated. 2007-01-31 Ben Elliston * strsignal.c (psignal): Change type of signo to int. * functions.texi: Regenerate. 2007-01-29 Simon Baldwin * cp-demangle.h (cplus_demangle_operators): External definition suppressed if not building for libstdc++. * cp-demangle.c (__gcclibcxx_demangle_callback): Augmented interface to demangling, provides a malloc-less version of __cxa_demangle. (cplus_demangle_print_callback): Public callback version of cplus_demangle_print. (struct d_growable_string): New growable string structure. (d_growable_string_init): New function, provides support for growable strings separate from print info. (d_growable_string_resize): Likewise. (d_growable_string_append_buffer): Likewise. (d_growable_string_callback_adapter):): Likewise. (d_print_init): New print info initialization function. (d_print_error): Macro replace by inline function. (d_print_saw_error): Likewise. (d_append_char): Likewise. (d_append_buffer): Likewise. (d_append_string): New inline function, replaces the d_append_string_constant macro. (d_flush_buffer): New function, flushes buffer to callback. (d_demangle_callback, is_ctor_or_dtor): Malloc-based fallback for unsupported dynamic arrays replaced by alloca(). (d_demangle): Return string length estimating removed. (d_dump): Moved error case handling from call site into function. (d_print_resize): Function removed. (d_print_append_char): Likewise. (d_print_append_buffer): Likewise. (d_print_error): Likewise. (d_print_comp): Added special case handling for Java arrays. (java_demangle_v3): Removed string post-processing for Java arrays, now replaced by special case handling in d_print_comp. (cplus_demangle_v3_callback): Augmented interface to demangling, provides a malloc-less version of cplus_demangle_v3. (java_demangle_v3_callback): Augmented interface to demangling, provides a malloc-less version of java_demangle_v3. 2007-01-12 Ben Elliston * pex-unix.c (writeerr): Cast write result to void. * choose-temp.c (choose_temp_base): Check the result of the call to mktemp rather than testing the length of the modified string. 2006-12-20 Geoffrey Keating * cp-demangle.h: Add comment explaining what to do to avoid overrunning string. (d_check_char): New. (d_next_char): Don't advance past trailing '\0'. * cp-demangle.c (cplus_demangle_mangled_name): Use d_check_char. (d_nested_name): Likewise. (d_special_name): Likewise. (d_call_offset): Likewise. (d_function_type): Likewise. (d_array_type): Likewise. (d_pointer_to_member_type): Likewise. (d_template_param): Likewise. (d_template_args): Likewise. (d_template_arg): Likewise. (d_expr_primary): Likewise. (d_local_name): Likewise. (d_substitution): Likewise. (d_ctor_dtor_name): Use d_advance rather than d_next_char. * testsuite/test-demangle.c: Include sys/mman.h. (MAP_ANONYMOUS): Define. (protect_end): New. (main): Use protect_end. * testsuite/demangle-expected: Add testcases for overrunning the end of the string. 2006-11-30 Andrew Stubbs J"orn Rennecke PR driver/29931 * make-relative-prefix.c (make_relative_prefix_1): New function, broken out of make_relative_prefix. Make link resolution dependent on new parameter. (make_relative_prefix): Use make_relative_prefix_1. (make_relative_prefix_ignore_links): New function. 2006-11-08 Vladimir Prus * pex-win32.c (no_suffixes): Remove. (std_suffixes): Add "" as first element. (find_executable): Remove detection of already-present extension. Try all suffixes in std_suffixes. 2006-11-07 Julian Brown * floatformat.c (get_field): Fix segfault with little-endian word order on 64-bit hosts. (put_field): Likewise. (min): Move definition. 2006-10-26 Danny Smith pex-win32.c (argv_to_cmdline): Replace xmalloc with XNEWVEC. (find_executable): Likewise. (win32_spawn): Cast alloca return to (char**). Replace malloc with XNEWVEC. bcopy.c (bcopy): Add explict casts in assignments. 2006-10-25 Ben Elliston * pexecute.txh: Wrap pexecute's "flag" argument with @var {..}. 2006-10-10 Brooks Moses * Makefile.in: Added "pdf", "libiberty.pdf" target support. * testsuite/Makefile.in: Added empty "pdf" target. 2006-09-22 Ian Lance Taylor PR other/29176 * cp-demangle.c (d_substitution): Check for overflow when computing substitution index. 2006-08-30 Corinna Vinschen * configure.ac: Add case for Mingw as host. * configure: Regenerate. 2006-08-27 Ian Lance Taylor PR driver/27622 * pex-common.h (struct pex_funcs): Add toclose parameter to exec_child field. * pex-common.c (pex_run_in_environment): Pass toclose to exec_child. * pex-djgpp.c (pex_djgpp_exec_child): Add toclose parameter. * pex-unix.c (pex_unix_exec_child): Likewise. * pex-msdos.c (pex_msdos_exec_child): Likewise. * pex-win32.c (pex_win32_exec_child): Likewise. PR other/28797 * cp-demangle.c (d_pointer_to_member_type): Do add a substitution for a qualified member which is not a function. * testsuite/demangle-expected: Add test case. 2006-07-27 Jan Hubicka PR rtl-optimization/28071 * hashtab.c (htab_empty): Clear out n_deleted/n_elements; downsize the hashtable. 2006-07-04 Peter O'Gorman * Makefile.in: chmod 644 before ranlib during install. 2006-06-02 Mark Shinwell * pex-unix.c (pex_unix_exec_child): Insert cast when assigning to environ. 2006-06-01 Mark Shinwell * pex-common.c: New function pex_run_in_environment. * pex-common.h: Add environment parameter to exec_child. * pex-msdos.c: Add environment parameter to pex_msdos_exec_child. * pex-djgpp.c: Add environment parameter to pex_djgpp_exec_child. (pex_djgpp_exec_child): Pass environment to child process. * pex-unix.c: Add environment parameter to pex_unix_exec_child. (pex_unix_exec_child): Pass environment to child process. * pex-win32.c: Add environment parameter to pex_win32_exec_child. New function env_compare for comparing VAR=VALUE pairs. (win32_spawn): Assemble environment block and pass to CreateProcess. (spawn_script): Pass environment through to win32_spawn. (pex_win32_exec_child): Pass environment through to spawn_script and win32_spawn. * functions.texi: Regenerate. * pexecute.txh: Document pex_run_in_environment. 2006-05-28 Mark Shinwell * mkstemps.c: Open temporary files in binary mode. 2006-05-12 Anton Blanchard * cplus-dem.c (demangle_fund_type): Ensure buf is large enough to hold "int%u_t". 2006-04-24 Julian Brown * floatformat.c (floatformat_to_double): Fix (biased) exponent=0 case. 2006-03-29 Jim Blandy * pex-common.c (pex_input_file, pex_input_pipe): New functions. (pex_init_common): Initialize obj->input_file. (pex_run): Close any file opened by pex_input_file. * pexecute.txh (pex_input_file, pex_input_pipe): New docs. * pex-common.h (struct pex_obj): New field input_file. (struct pex_funcs): New function ptr fdopenw. * pex-unix.c (pex_unix_fdopenw): New function. (funcs): List it as our fdopenw function. * pex-win32.c (pex_win32_fdopenw): New function. (funcs): List it as our fdopenw function. * pex-djgpp.c (funcs): Leave fdopenw null. * pex-msdos (funcs): Same. * functions.texi: Regenerated. 2006-04-10 Jim Blandy * pex-common.c (temp_file): New function, containing guts of pex-style temporary file name generation. (pex_run): Use it. 2006-04-06 Carlos O'Donell * Makefile.in: Add install-html, install-html-am, and install-html-recursive targets. Define mkdir_p and NORMAL_INSTALL. * configure.ac: AC_SUBST datarootdir, docdir, htmldir. * configure: Regenerate. * testsuite/Makefile.in: Add install-html and html targets. 2006-03-31 Mark Mitchell * pex-win32.c (): Include. (fix_argv): Remove. (argv_to_cmdline): New function. (std_suffixes): New variable. (no_suffixes): Likewise. (find_executable): New function. (win32_spawn): Likewise. (spawn_script): Use win32_spawn instead of _spawnv[p]. (pex_win32_exec_child): Replace MSVCRT calls with Win32 API calls. (pex_win32_wait): Likewise. 2006-03-24 Jim Blandy * pex-common.c (pex_run): Simplify output name handling. 2006-03-12 Jim Blandy * pex-common.h (struct pex_obj): Doc fixes. 2006-03-11 Jim Blandy * functions.texi: Regenerate. 2006-02-21 Ben Elliston * pexecute.c (pwait): Syntax fix for previous change. 2006-02-17 Uttam Pawar * pexecute.c (pwait): Free vector pointer. * partition.c (partition_print): Free class_elements pointer. 2006-02-11 Roger Sayle R. Scott Bailey Bill Northcott PR bootstrap/16787 * floatformat.c: Include where available. (NAN): Use value of DBL_QNAN if defined, and NAN isn't. 2006-01-29 Gabriel Dos Reis * configure.ac: Add -Wc++-compat to ac_libibety_warn_cflags where supported. * configure: Regenerated. 2006-01-20 Carlos O'Donell * testsuite/Makefile.in: Add test-expandargv test. * testsuite/test-expandargv.c: New test. * argv.c (expandargv): Check for errors with ferror, rather than just by looking at return value from fread. 2005-12-17 Gabriel Dos Reis * floatformat.c (floatformat_i387_ext_is_valid): Use explicit cast to convert from "from". (floatformat_to_double): Likewise. (floatformat_from_double): Use explicit cast to convert from "to". 2005-12-10 Terry Laurenzo PR java/9861 * cp-demangle.c (d_bare_function_type): Recognize new 'J' qualifer and include return type when found. (d_print_comp)[DEMANGLE_COMPONENT_FUNCTION_TYPE]: Add conditional logic to change printing order of return type.when the DMGL_RET_POSTFIX option is present. (java_demangle_v3): Add DMGL_RET_POSTFIX option to d_demangle call. * testsuite/test-demangle.c (main): Recognize option --ret-postfix * testsuite/demangle-expected: Test cases to verify extended encoding. Updated comment to document --ret-postfix option. 2005-11-06 Richard Guenther * splay-tree.c (rotate_left): New function. (rotate_right): Likewise. (splay_tree_splay_helper): Remove. (splay_tree_splay): Re-implement. 2005-10-31 Mark Kettenis * floatformat.c (floatformat_vax_aingle, floatformat_vax_double): New variables. 2005-10-07 Mark Mitchell * at-file.texi: Fix typo. 2005-10-03 Mark Mitchell * at-file.texi: New file. 2005-09-27 Mark Mitchell * argv.c (expandargv): Do not use xmalloc_failed. 2005-09-26 Mark Mitchell * argv.c (safe-ctype.h): Include it. (ISBLANK): Remove. (stdio.h): Include. (buildargv): Use ISSPACE instead of ISBLANK. (expandargv): New function. * Makefile.in: Regenerated. 2005-09-14 Christopher Faylor * pex-win32.c: Include "windows.h". (backslashify): New function. (fix_argv): Use backslashify to convert path to windows format. Allocate one more place in new argv for potential executable from '#!' parsing. (tack_on_executable): New function. Conditional on USE_MINGW_MSYS (openkey): Ditto. (mingw_rootify): Ditto. (msys_rootify): Ditto. (spawn_script): New function. (pex_win32_exec_child): Save translated argv in newargv. Pass to spawn_script if spawnv* fails. (main): New function. Conditional on MAIN. Useful for testing. 2005-08-17 Mark Kettenis * floatformat.c (floatformat_always_valid): Change type of last argument to `void *'. (floatformat_i387_ext_is_valid): Likewise. (floatformat_to_double): Change type of second argument to `const void *'. (floatformat_from_double): Change type of last argument to `void *'. (floatformat_is_valid): Change type of last argument to `const void *'. (ieee_test): Remove redundant casts. 2005-08-17 Kelley Cook * strverscmp.c: Update FSF address. * testsuite/Makefile.in: Likewise. * testsuite/test-demangle.c: Likewise. * testsuite/test-pexecute.c: Likewise. 2005-07-23 Kaveh R. Ghazi * getopt.c: Include ansidecl.h before system headers. 2005-07-22 Ben Elliston * getopt.c: Include "ansidecl.h". (_getopt_initialize): Mark argc and argv parameters as unused. 2005-07-22 Ben Elliston * regex.c (regcomp): Change type of `i' from unsigned to int. 2005-07-22 Ben Elliston Recover patch lost in the sourceware repository: 2005-07-09 Ben Elliston * memcpy.c: Remove ANSI_PROTOTYPES conditional code. * memmove.c: Likewise. * objalloc.c: Likewise. 2005-07-22 Ben Elliston * configure.ac: Check for a getopt(3) declaration. * configure, config.in: Regenerate. 2005-07-15 Ben Elliston * regex.c (TRANSLATE): Cast rhs of ternary expression to char. 2005-07-12 Ben Elliston * floatformat.c (floatformat_to_double): Add a comment about a potential source of warnings when compiling this file. 2005-07-12 Ben Elliston * pexecute.c (pexecute): Cast string litrals to char *. * regex.c (re_comp): Cast a call to gettext() to char *. 2005-07-07 Kelley Cook * config.table: Delete file. Move former contents into ... * configure.ac: ... here and escape any brackets for m4. * Makefile.in (config.status): Remove dependency on config.table. * configure: Regenerate. 2005-07-07 Kelley Cook * config.in: Regenerate for 6/20 change. 2005-07-03 Steve Ellcey PR other/13906 * md5.c (md5_process_bytes): Check alignment. 2005-07-01 Ian Lance Taylor PR other/22268 * cp-demangle.c (d_expr_primary): Don't run off the end of the string while looking for the end of a literal value. * testsuite/demangle-expected: Add test case. 2005-06-30 Daniel Berlin * hashtab.c (EMPTY_ENTRY): Moved and renamed. (DELETED_ENTRY): Ditto. 2005-06-20 Geoffrey Keating * strverscmp.c: New. * Makefile.in (CFILES): Add strverscmp.c. (CONFIGURED_OFILES): Add strverscmp.o. (strverscmp.o): New rule. (stamp-functions): Add $(srcdir) to files in source directory. * configure.ac (funcs): Add strverscmp. (AC_CHECK_FUNCS): Add strverscmp. * configure: Regenerate. * functions.texi: Regenerate. 2005-05-28 Eli Zaretskii * configure.ac: Add snprintf and vsnprintf to AC_CHEK_DECLS. * config.in, configure: Regenerate. 2005-05-25 Richard Henderson * cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_HIDDEN_ALIAS. (d_make_comp, d_print_comp): Likewise. (d_special_name): Generate one. * testsuite/demangle-expected: Add a hidden alias test. 2005-05-24 Gabriel Dos Reis * configure.ac: Check declarations for calloc(), getenv(), malloc(), realloc() and sbrk(). * config.in: Regenerate. * configure: Likewise. * alloca.c (C_alloca): Change "new" to "new_storage". Use XNEWVEC instead of xmalloc. * choose-temp.c (choose_temp_base): Use XNEWVEC instea od xmalloc. * concat.c (liiberty_concat_ptr): Surround definition with an extern "C" block, if __cplusplus. (concat): Use XNEWVEC instead of xmalloc. (reconcat): Likewise. * cp-demangle.c (struct d_print_template): Rename member "template" to "template_decl". Adjust use throughout the file. (d_print_resize): Properly cast return value of realloc(). (cplus_demangle_print): Same for malloc(). (d_demangle): Likewise. * cp-demint.c (cplus_demangle_fill_builtin_type): Rename parameter "typename" to "type_name". * cplus-dem.c (grow_vect): Use XRESIZEVEC instead of xrealloc(). (work_stuff_copy_to_from): Use XNEWVEC insteand of xmalloc(). (demangle_template_value_parm): Likewise. (demangle_template): Likewise. (recursively_demangle): Likewise. (do_hpacc_template_literal): Likewise. (do_arg): Likewise. (remember_type): Likewise. (remember_Ktype): Likewise. (register_Btype): Likewise. (string_need): Use XRESIZEVEC instead of xrealloc(). * dyn-string.c (dyn_string_init): Use XNEWVEC. (dyn_string_new): Use XNEW. (dyn_string_resize): Use XRESIZEVEC. * fnmatch.c (fnmatch): Rename local variable "not" to "negate". * getopt.c (getenv): Declare only if !__cplusplus and !getenv. Otherwise include . (exchange): Cast return value of malloc(). * hashtab.c (htab_size): Define as both macro and non-inline function. (htab_elements): Likewise. * getpwd.c (getpwd): Use XNEWVEC. (htab_create_alloc_ex): Use C90 prototype-style. * lrealpath.c (lrealpath): Appropriately cast return value of malloc(). * make-relative-prefix.c (save_string): Likewise. * make-temp-file.c (try_dir): Rename from "try". Adjust use in the file. (choose_tmpdir): Use XNEWVEC. * mkstemps.c (mkstemps): Rename parameter "template" to "pattern". * pex-common.c (pex_init_common): Use XNEW. (pex_add_remove): Use XRESIZEVEC. (pex_run): Likewise. (pex_get_status_and_time): Likewise. * pex-djgpp.c (pex_djgpp_exec_child): Likewise. * pex-msdos.c (pex_init): Use XNEW. (pex_msdos_exec_child): Likewise. (pex_msdos_exec_child): Use XRESIZEVEC. * pex-unix.c (pex_wait): Use XNEW. * pex-win32.c (fix_argv): Use XNEWVEC. * pexecute.c (pwait): Likewise. * setenv.c (setenv): Properly cast return value of malloc(). * sigsetmask.c (sigsetmask): Rename local variables "old" and "new" to "old_sig" and "new_sig". * sort.c (main): Use XNEWVEC. * spaces.c (spaces): Cast return value of malloc(). * strndup.c (strndup): Likewise. * ternary.c (ternary_insert): Use XNEW. * xmalloc.c (malloc, realloc, calloc, sbrk): Surround declaration with an extern "C" block if __cplusplus. * xstrdup.c (xstrdup): Cast return value of memcpy(). * xstrerror.c (strerror): Enclose declaration in an extern "C" block if __cplusplus. * xstrndup.c (xstrndup): Use XNEW. Cast return value of memcpy(). 2005-05-16 Andreas Jaeger * getpwd.c: Remove unneeded prototype getcwd and move getwd so that it's only declared if needed. * getopt1.c: Change order of includes so that __GNU_LIBRARY__ is defined. 2005-05-15 Andreas Jaeger * functions.texi: Regenerated. 2005-05-15 Eli Zaretskii * pexecute.txh: Enclose multi-word data types in @deftypefn in braces. Minor wording fixes. Use --- for em-dash. Use @enumerate in enumerated lists. * fopen_unlocked.c: Enclose multi-word data types in @deftypefn in braces. 2005-05-11 Eli Zaretskii * pex-djgpp.c: Include string.h, fcntl.h, unistd.h, and sys/stat.h. (pex_init): Fix last argument to pex_init_common. (pex_djgpp_exec_child): Remove leading underscore from _open, _dup, _dup2, _close, and _spawnv/_spawnvp. Replace `program', which is undeclared, with `executable', which was unused. Remove unused variable `e'. Fix casting of last arg to spawnv/spawnvp. (pex_djgpp_wait): Declare arguments with ATTRIBUTE_UNUSED. 2005-05-11 Paul Brook * Makefile.in: Regenerate dependencies. 2005-05-10 Nick Clifton * Update the address and phone number of the FSF organization in the GPL notices in the following files: COPYING.LIB, Makefile.in, _doprnt.c, argv.c, asprintf.c, choose-temp.c, clock.c, concat.c, copying-lib.texi, cp-demangle.c, cp-demangle.h, cp-demint.c, cplus-dem.c, dyn-string.c, fdmatch.c, fibheap.c, floatformat.c, fnmatch.c, fopen_unlocked.c, gather-docs, getopt.c, getopt1.c, getruntime.c, hashtab.c, hex.c, lbasename.c, lrealpath.c, maint-tool, make-relative-prefix.c, make-temp-file.c, md5.c, mempcpy.c, mkstemps.c, objalloc.c, obstack.c, partition.c, pex-common.c, pex-common.h, pex-djgpp.c, pex-msdos.c, pex-one.c, pex-unix.c, pex-win32.c, pexecute.c, physmem.c, putenv.c, regex.c, safe-ctype.c, setenv.c, snprintf.c, sort.c, spaces.c, splay-tree.c, stpcpy.c, stpncpy.c, strndup.c, strtod.c, ternary.c, unlink-if-ordinary.c, vasprintf.c, vsnprintf.c, vsprintf.c, xexit.c, xmalloc.c, xstrndup.c 2005-05-06 Kelley Cook * aclocal.m4 (AC_DEFINE_NOAUTOHEADER): Remove. * configure.ac: Replace any AC_DEFINE_NOAUTOHEADER with AC_DEFINE. * configure: Regenerate. 2005-05-06 Kelley Cook * configure.ac: Use AC_C_BIGENDIAN instead of AC_C_BIGENDIAN_CROSS. Use AC_CHECK_SIZEOF instead of AC_COMPILE_CHECK_SIZEOF. * aclocal.m4: Don't include accross.m4. * configure, config.in: Regenerate. 2005-04-25 Kaveh R. Ghazi * fopen_unlocked.c (unlock_std_streams): New. * functions.texi: Regenerate. 2005-04-16 Kaveh R. Ghazi * fopen_unlocked.c (unlock_stream): New. Consolidate unlocking code into a helper function. * functions.texi: Regenerate. 2005-04-13 Gabriel Dos Reis * asprintf.c: Include config.h. * basename.c: Likewise. * fdmatch.c: Likewise. * hex.c: Likewise. * lbasename.c: Likewise. * spaces.c: Likewise. * xatexit.c:Likewise. * configure.ac: Do check declarations for basename, ffs, asprintf and vasprintf for real. * configure: Regenerate. 2005-04-13 Gabriel Dos Reis * argv.c (dupargv): Allocate space of argv[argc], not sizeof(char *) of that amount. Cast result to char *. 2005-04-12 Gabriel Dos Reis * regex.c (wcs_re_match_2_internal, byte_re_match_2_internal): Replace not with negate. 2005-04-12 Gabriel Dos Reis * configure.ac: Check declarations for basename, ffs, asprintf, vasprintf. * configure: Regenerate. * config.in: Likewise. 2005-04-11 Kaveh R. Ghazi * Makefile.in (CFILES): Add fopen_unlocked.c. (REQUIRED_OFILES): Add ./fopen_unlocked.o. Regenerate dependencies. * configure.ac: Check for stdio_ext.h and __fsetlocking. * fopen_unlocked.c: New file. * functions.texi, configure, config.in: Regenerate. 2005-04-04 Ian Lance Taylor * testsuite/test-pexecute.c (TEST_PEX_RUN): Move variable declaration before statement. 2005-04-02 Kaveh R. Ghazi * bcmp.c: Fix warnings and implement using memcmp. * bcopy.c: Fix warnings. * bzero.c: Fix warnings and implement using memset. * configure.ac (ac_libiberty_warn_cflags): Add -Wwrite-strings -Wstrict-prototypes. * configure, config.in: Regenerate. * bsearch.c, index.c, rindex.c, strstr.c, strtol.c, waitpid.c: Fix warnings and reconcile interfaces with relevant standards. 2005-04-02 Ian Lance Taylor * cp-demangle.c: Update copyright. 2005-03-31 Joseph S. Myers * gettimeofday.c: Add "Supplemental" to @deftypefn. * functions.texi: Regenerate. 2005-03-28 Ian Lance Taylor * pex-common.c: New file. * pex-one.c: New file. * pexecute.c: New file. * pex-common.h: Include . (struct pex_obj): Define. (struct pex_funcs): Define. (pex_init_common): Declare. * pex-unix.c: Rewrite. * pex-win32.c: Rewrite. * pex-djgpp.c: Rewrite. * pex-msdos.c: Rewrite. * testsuite/text-pexecute.c: New file. * pexecute.txh: Rewrite. * configure.ac: Check for wait3 and wait4. Set CHECK to really-check rather than check-cplus-dem. * functions.texi: Rebuild. * Makefile.in: Rebuild dependencies. (CFILES): Add pexecute.c, pex-common.c, pex-one.c. (REQUIRED_OFILES): Add pexecute.o, pex-common.o, pex-one.o. * testsuite/Makefile.in (really-check): New target. (check-pexecute, test-pexecute): New targets. * configure: Rebuild. 2005-03-28 Mark Kettenis * unlink-if-ordinary.c: Include . 2005-03-27 Gabriel Dos Reis Convert libiberty to use ISO C prototype style 7/n. * regex.c (PARAMS): Remove definition. (PREFIX): Unconditionaly define using ISO C ## operator. (init_syntax_once, extract_number, extract_number_and_incr, print_fastmap, print_partial_compiled_pattern, print_compiled_pattern, print_double_string, printchar, convert_mbs_to_wcs, re_set_syntax, regex_grow_registers, regex_compile, store_op1, store_op2, insert_op1, insert_op2, at_begline_loc_p, at_endline_p, group_in_compile_stack, insert_space, wcs_compile_range, byte_compile_range, truncate_wchar, re_compile_fastmap, re_compile_fastmap, re_set_registers, re_search, re_search_2, re_search_3, re_match, re_match_2, count_mbs_length, wcs_re_match_2_internal, byte_re_match_2_internal, group_match_null_string_p, alt_match_null_string_p, common_op_match_null_string_p, bcmp_translate, re_compile_pattern, re_comp, re_exec, regcomp, regexec, regerror, regfree): Use ISO C prototype style. * partition.c: (elem_compare): Likewise. * cp-demangle.c (print_usage): Likewise. 2005-03-27 Gabriel Dos Reis Convert libiberty to use ISO C prototype style 5/n. * random.c (srandom, initstate, setstate, random): Use ISO C prototypes. * putenv.c (putenv): Likewise. * physmem.c (physmem_available, physmem_total, main): Likewise. * pex-win32.c (fix_argv, pexecute, pwait): Likewise. * pex-unix.c (pexecute, pwait): Likewise. * pex-msdos.c (pexecute, pwait): Likewise. * pex-djgpp.c (pexecute, pwait): Likewise. * partition.c (partition_new, partition_delete, partition_union) (elem_compare, partition_print): Likewise. * obstack.c (_obstack_begin, _obstack_begin_1, _obstack_newchunk, _obstack_allocated_p, _obstack_free, obstack_free, _obstack_memory_used, print_and_abort, obstack_next_free, obstack_object_size, obstack_base): Likewise. Remove codes predicated on !defined(__STDC__). * objalloc.c (objalloc_create, _objalloc_alloc, objalloc_free, objalloc_free_block): Use ISO C prototypes. * mkstemps.c (mkstemps): Likewise. * memset.c (memset): Likewise. * mempcpy.c (mempcpy): Likewise. * rename.c (rename): Likewise. * rindex.c (rindex): Likewise. * setenv.c (setenv, unsetenv): Likewise. * sigsetmask.c (sigsetmask): Likewise. * snprintf.c (snprintf): Likewise. * sort.c (sort_pointers, xmalloc): Likewise. * spaces.c (spaces): Likewise. * splay-tree.c (splay_tree_delete_helper, splay_tree_splay_helper, splay_tree_splay, splay_tree_foreach_helper, splay_tree_xmalloc_allocate, splay_tree_new, splay_tree_xmalloc_allocate, splay_tree_new_with_allocator, splay_tree_delete, splay_tree_insert, splay_tree_remove, splay_tree_lookup, splay_tree_max, splay_tree_min, splay_tree_predecessor, splay_tree_successor, splay_tree_foreach, splay_tree_compare_ints, splay_tree_compare_pointers): Likewise. * stpcpy.c (stpcpy): Likewise. * stpncpy.c (stpncpy): Likewise. * strcasecmp.c (strcasecmp): Likewise. * strchr.c (strchr): Likewise. * strdup.c (strdup): Likewise. 2005-03-27 Gabriel Dos Reis Convert libiberty to use ISO C prototype style 6/n. * strerror.c (init_error_tables, errno_max, strerror, strerrno, strtoerrno, main): Use ISO C prototype style. * strncasecmp.c (strncasecmp): Likewise. * strncmp.c (strncmp): Likewise. * strndup.c (strndup): Likewise. * strrchr.c (strrchr): Likewise. * strsignal.c (init_signal_tables, signo_max, strsignal, strsigno, strtosigno, psignal, main): Likewise. * strstr.c (strstr): Likewise. * strtod.c (strtod, atof): Likewise. * strtol.c (strtol): Likewise. * strtoul.c (strtoul): Likewise. * ternary.c (ternary_insert, ternary_cleanup, ternary_search, ternary_recursivesearch): Likewise. * tmpnam.c (tmpnam): Likewise. * unlink-if-ordinary.c (unlink_if_ordinary): Likewise. * vasprintf.c (int_vasprintf, vasprintf, checkit, main): Likewise. * vfork.c (vfork): Likewise. * vfprintf.c (vfprintf): Likewise. * vprintf.c (vprintf): Likewise. * vsnprintf.c (vsnprintf, checkit, main): Likewise. * vsprintf.c (vsprintf): Likewise. * waitpid.c (waitpid): Likewise. * xatexit.c (xatexit, xatexit_cleanup): Likewise. * xexit.c (xexit): Likewise. * xmalloc.c (xmalloc_set_program_name, xmalloc_failed, xmalloc, xcalloc, xrealloc): Likewise. * xmemdup.c (xmemdup): Likewise. * xstrdup.c (xstrdup): Likewise. * xstrerror.c (xstrerror): Likewise. * xstrndup.c (xstrndup): Likewise. 2005-03-27 Andreas Jaeger * configure.ac (ac_c_preproc_warn_flag): Remove -Wtraditional flags. * configure: Regenerated. 2005-03-27 Gabriel Dos Reis * getopt1.c (getopt_long_only): Fix thinko. 2005-03-27 Gabriel Dos Reis Convert libiberty to use ISO C prototype style 4/n. * hashtab.c (higher_prime_index, hash_pointer, eq_pointer, htab_size, htab_elements, htab_mod_1, htab_mod, htab_mod_m2, htab_create_alloc, htab_set_functions_ex, htab_create, htab_try_create, htab_delete, htab_empty, find_empty_slot_for_expand, htab_expand, htab_find_with_hash, htab_find, htab_find_slot_with_hash, htab_find_slot, htab_remove_elt, htab_remove_elt_with_hash, htab_clear_slot, htab_traverse_noresize, htab_traverse, htab_collisions, htab_hash_string, iterative_hash): Use ISO C prototype. * hex.c (hex_init): Likewise. * index.c (index): Likewise. * insque.c (insque, remque): Likewise. * lbasename.c (lbasename): Likewise. * lrealpath.c (lrealpath): Likewise. * make-relative-prefix.c (save_string, split_directories, free_split_directories, make_relative_prefix): Likewise. * make-temp-file.c (try, choose_tmpdir, make_temp_file): Likewise. * md5.c (md5_init_ctx, md5_read_ctx, md5_finish_ctx, md5_stream, md5_buffer, md5_process_bytes, md5_process_block): Likewise. * memchr.c (memchr): Likewise. * memcpy.c (memcpy): Likewise. * memmove.c (memmove): Likewise. * gettimeofday.c (gettimeofday): Likewise. * getruntime.c (get_run_time): Likewise. * getpwd.c (getpwd, getpwd): Likewise. * getpagesize.c (getpagesize): Likewise. * getopt1.c (getopt_long, getopt_long_only, main): Likewise. * getopt.c (my_index, exchange, _getopt_initialize, _getopt_internal, getopt, main): Likewise. * getcwd.c (getcwd): Likewise. * fnmatch.c (fnmatch): Likewise. * floatformat.c (floatformat_always_valid, floatformat_i387_ext_is_valid, get_field, floatformat_to_double, put_field, floatformat_from_double, floatformat_is_valid, ieee_test, main): Likewise. * fibheap.c (fibheap_new, fibnode_new, fibheap_compare, fibheap_comp_data, fibheap_insert, fibheap_min, fibheap_min_key, fibheap_union, fibheap_extract_min, fibheap_replace_key_data, fibheap_replace_key, fibheap_replace_data, fibheap_delete_node, fibheap_delete, fibheap_empty, fibheap_extr_min_node, fibheap_ins_root, fibheap_rem_root, fibheap_consolidate, fibheap_link, fibheap_cut, fibheap_cascading_cut, fibnode_insert_after, fibnode_remove): Likewise. * ffs.c (ffs): Likewise. * fdmatch.c (fdmatch): Likewise. * dyn-string.c (dyn_string_init, dyn_string_new, dyn_string_delete, dyn_string_release, dyn_string_resize, dyn_string_clear, dyn_string_copy, dyn_string_copy_cstr, dyn_string_prepend, dyn_string_prepend_cstr, dyn_string_insert, dyn_string_insert_cstr, dyn_string_insert_char, dyn_string_append, dyn_string_append_cstr, dyn_string_append_char, dyn_string_substring, dyn_string_eq): Likewise. 2005-03-27 Gabriel Dos Reis Convert libiberty to use ISO C prototype style 3/n. * cplus-dem.c (set_cplus_marker_for_demangling, consume_count, consume_count_with_underscores, code_for_qualifier, qualifier_string, demangle_qualifier, cplus_demangle_opname, cplus_mangle_opname, cplus_demangle_set_style, cplus_demangle_name_to_style, cplus_demangle, grow_vect, ada_demangle, internal_cplus_demangle, squangle_mop_up, work_stuff_copy_to_from, delete_non_B_K_work_stuff, delete_work_stuff, mop_up, demangle_signature, demangle_method_args, demangle_template_template_parm, demangle_expression, demangle_integral_value, demangle_real_value, demangle_template_value_parm, demangle_template, arm_pt, demangle_arm_hp_template, demangle_class_name, demangle_class, iterate_demangle_function, demangle_prefix, gnu_special, recursively_demangle, arm_special, demangle_qualified, get_count, do_type, demangle_fund_type, do_hpacc_template_const_value, do_hpacc_template_literal, snarf_numeric_literal, do_arg, remember_type, remember_Ktype, register_Btype, remember_Btype, forget_B_and_K_types, forget_types, demangle_args, demangle_nested_args, demangle_function_name, string_need, string_delete, string_init, string_clear, string_empty, string_append, string_appends, string_appendn, string_prepend, string_prepends, string_prependn, string_append_template_idx): Use ISO C prootype style. * cp-demint.c (cplus_demangle_fill_component, cplus_demangle_fill_builtin_type, cplus_demangle_fill_operator, cplus_demangle_v3_components): Likewise. 2005-03-26 Gabriel Dos Reis Convert libiberty to use ISO C prototype style 2/n. * cp-demangle.h: Remove uses of PARAMS. * cp-demangle.c: Likewise. (d_dump, cplus_demangle_fill_name, cplus_demangle_fill_extended_operator, cplus_demangle_fill_ctor, cplus_demangle_fill_dtor, d_make_empty, d_make_comp, d_make_name, d_make_builtin_type, d_make_operator, d_make_extended_operator, d_make_ctor, d_make_dtor, d_make_template_param, d_make_sub, cplus_demangle_mangled_name, has_return_type, is_ctor_dtor_or_conversion, d_encoding, d_name, d_nested_name, d_prefix, d_unqualified_name, d_source_name, d_number, d_identifier, d_operator_name, d_special_name, d_call_offset, d_ctor_dtor_name, cplus_demangle_type, d_cv_qualifiers, d_function_type, d_bare_function_type, d_class_enum_type, d_array_type, d_pointer_to_member_type, d_template_param, d_template_args, d_template_arg, d_expression, d_expr_primary, d_local_name, d_discriminator, d_add_substitution, d_substitution, d_print_resize, d_print_append_char, d_print_append_buffer, d_print_error, cplus_demangle_print, d_print_comp, d_print_java_identifier, d_print_mod_list, d_print_mod, d_print_function_type, d_print_array_type, d_print_expr_op, d_print_cast, cplus_demangle_init_info, d_demangle, __cxa_demangle, cplus_demangle_v3, java_demangle_v3, is_ctor_or_dtor, is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_dtor, print_usage, main): 2005-03-26 Gabriel Dos Reis Convert libiberty to ISO C prototype style 1/n. * _doprnt.c: Remove conditional #include on ANSI_PROTOTYPES as the latter is always assumed. (_doprnt, checkit, main): Use ISO C prototype. * alloca.c (find_stack_direction, C_alloca): Use ISO C prototype. * argv.c: Remove conditional #includes on ANSI_PROTOTYPES. (dupargv, freeargv, buildargv, main): Use ISO C prototype. * atexit.c (atexit): Likewise * asprintf.c: Remove conditional include on ANSI_PROTOTYPES. (asprintf): Use ISO C prototype. * basename.c (basename): Likewise * bcmp.c (bcmp): Likewise. * bcopy.c (bcopy): Likewise. * bzero.c (bzero): Likewise. * bsearch.c (bsearch): Likewise. Improve const-correctness. * choose-temp.c (choose_temp_base): Likewise. * calloc.c: Remove conditional #include on ANSI_PROTOTYPES. (calloc): Use ISO C prototype. * clock.c (clock): Likewise. * concat.c: Remove conditional #include on ANSI_PROTOTYPES. (vconcat_length, vconcat_copy, concat_length, concat_copy, concat_copy2, concat, reconcat, main): Use ISO C prototype. * copysign.c (copysign): Likewise. 2005-03-24 Kaveh R. Ghazi * Makefile.in (CFILES): Add strndup.c and xstrndup.c. (REQUIRED_OFILES): Add xstrndup.o. (CONFIGURED_OFILES): Add strndup.o. Regenerate dependencies. * configure.ac (funcs, AC_CHECK_FUNCS): Add strndup. * strndup.c, xstrndup.c: New. * config.in, configure, functions.texi: Regenerate. 2005-03-24 Kaveh R. Ghazi * xmemdup.c, xstrdup.c: Expose the tail call. 2005-03-09 Mark Mitchell * configure.ac (funcs): Add gettimeofday. * configure: Regenerated. * gettimeofday.c: New file. * Makefile.in (CFILES): Add gettimeofday. (CONFIGURED_OFILES): Add gettimeofday.o. (./gettimeofday.o): New rule. 2005-03-09 Ian Lance Taylor * pex-os2.c: Remove. * configure.ac: Remove *-*-os2-emx* case when setting pexecute. * Makefile.in (CFILES): Remove pex-os2.c. (CONFIGURED_OFILES): Remove pex-os2.o. (pex-os2.o): Remove target. * configure: Rebuild. 2005-03-07 Ian Lance Taylor * mpw-config.in: Remove. * mpw-make.sed: Remove. * mpw.c: Remove. * Makefile.in (CFILES): Remove pex-mpw.c. (CONFIGURED_OFILES): Remove pex-mpw.o. (mpw.o, pex-mpw.o): Remove targets. * maint-tool (undoc): Remove reference to mpw.c. 2005-03-06 DJ Delorie * configure.ac (target_header_dir): vfork is a stub under djgpp. * configure: Regenerated. 2005-03-01 Jan Beulich * Makefile.in (CFILES): Add unlink-if-ordinary.c (REQUIRED_OFILES): Add unlink-if-ordinary.o. Add dependencies and rule for unlink-if-ordinary.o. * unlink-if-ordinary.c: New. 2005-03-01 Ben Elliston * hashtab.c (htab_find_slot_with_hash): Make function documentation clearer. 2005-02-13 Jason Merrill * cp-demangle.c (__cxa_demangle): Change resolution of ambiguous arguments. 2005-01-11 Tobias Schl"uter * hex.c (hex_value): Group 'unsigned int' together to get correct markup. * functions.texi: Regenerated. 2004-12-27 H.J. Lu * Makefile.in: Undo to 2004-12-17. * aclocal.m4: Likewise. * config.table: Likewise. * configure.ac: Likewise. * maint-tool: Likewise. * configure: Likewise. 2004-12-19 H.J. Lu PR bootstrap/19072 * Makefile.in (enable_shared): New substitute. (LTTARGETLIB): New. (PREFIXTARGETLIB): New. (LTTESTLIB): New. (PREFIXTESTLIB): New. (CCLD): New. (LINK): New. ($(TARGETLIB)): Use $(LINK) to create libraries and create targets by hand. ($(TESTLIB)): Likewise. (mostlyclean): Don't remove .libs. Remove the libtool object directory. * config.table (enable_shared): Removed. * configure.ac (enable_static): Set to yes. (AC_PROG_LIBTOOL): Removed. (AM_DISABLE_SHARED): Uncommented. (AM_PROG_LIBTOOL): Likewise. (LIBOBJS): Add `./' to avoid VPATH. (LTLIBOBJS): Likewise. (enable_shared): Substitute. * configure: Regenerated. 2004-12-18 H.J. Lu * Makefile.in (top_builddir): Set to `.'. (OUTPUT_OPTION): Removed. (LIBTOOL): New. (LTLIBOBJS): New. (EXTRA_LTOFILES): New. (FLAGS_TO_PASS): Add EXTRA_LTOFILES. (all): Remove stamp-picdir. (LTCOMPILE): New. (.c.lo): New rule. (REQUIRED_LTOFILES): New. (CONFIGURED_LTOFILES): New. ($(TARGETLIB)): Check .libs for PIC object files. Depend on $(REQUIRED_LTOFILES) $(EXTRA_LTOFILES) $(LTLIBOBJS). (stamp-picdir): Completely removed. (maint-missing): Pass $(REQUIRED_LTOFILES) $(CONFIGURED_LTOFILES) instead of (REQUIRED_OFILES) $(CONFIGURED_OFILES) (maint-buildall): Depend on $(REQUIRED_LTOFILES) $(CONFIGURED_LTOFILES). (mostlyclean): Also remove *.lo .libs. Run "make maint-deps". * aclocal.m4: Include ../libtool.m4. * config.table: Don't check --enable-shared. * configure.ac (AC_PROG_LIBTOOL): Add. (AC_PROG_CC_C_O): Removed. (OUTPUT_OPTION): Removed. (NO_MINUS_C_MINUS_O): Removed. (ltpexecute): New substitute. (LIBOBJS): Cleanup. * configure: Regenerated. * maint-tool: Updated for .lo/libtool. 2004-12-11 Ben Elliston * configure.ac: Invoke AC_CHECK_SIZEOF for sizeof (int). * configure: Regenerate. * config.in: Likewise. 2004-12-07 DJ Delorie * splay-tree.c (splay_tree_delete_helper): Redesign the logic so that recursion (and thus large stack space) is not needed. 2004-11-29 Matt Kraai * pex-unix.c: Fix the spelling of longjmp. 2004-11-23 Ian Lance Taylor PR other/18623 * cp-demangle.c (d_call_offset): Remove useless local variables offset and virtual_offset. * cplus-dem.c (ada_demangle): Remove useless local variable at_start_name. (demangle_template): Remove useless local variable start. 2004-11-19 Roger Sayle * objalloc.c, strsignal.c, xstrerror.c: Include "config.h" before "ansidecl.h" to avoid redeclaration errors with native compilers. * regex.c: Protect config.h from multiple inclusion. 2004-11-12 Mike Stump * Makefile.in (libiberty.html): Fix html generation. 2004-09-08 Adam Nemet * vasprintf.c: Accept __va_copy in addition to va_copy. 2004-09-03 Paolo Bonzini * configure: Regenerate. 2004-09-02 Paolo Bonzini * configure.ac: Do not enable multilibs for build-side libiberty. 2004-06-29 Danny Smith * lrealpath.c (lrealpath): Add _WIN32 support. 2004-06-28 Zack Weinberg * cp-demangle.h: Declare cplus_demangle_operators, cplus_demangle_builtin_types, cplus_demangle_mangled_name, and cplus_demangle_type as static if IN_GLIBCPP_V3. 2004-06-28 Ian Lance Taylor PR other/16240 * cp-demangle.c (d_expr_primary): Check for a failure return from cplus_demangle_type. * testsuite/demangle-expected: Add test case. 2004-05-31 Danny Smith * pex-win32.c (fix_argv): Expand comment. 2004-05-25 Daniel Jacobowitz * Makefile.in: Add .NOEXPORT. 2004-04-29 Douglas B Rupp * mkstemps.c (mkstemps) [VMS]: Remove special open option. Update copyright. 2004-04-26 Maciej W. Rozycki * configure.ac (UNSIGNED_64BIT_TYPE): Unquote the definition. * configure: Regenerate. 2004-04-22 Richard Henderson * hashtab.c: Include limits.h, stdint.h, ansidecl.h. (CHAR_BIT): Provide default. (struct prime_ent, prime_tab): New. (higher_prime_index): Rename from higher_prime_number, return index. (htab_mod_1): New. (htab_mod, htab_mod_m2): Use it. (htab_create_alloc, htab_create_alloc_ex): Store prime index. (htab_expand): Likewise. * configure.ac: Check for stdint.h. (UNSIGNED_64BIT_TYPE): New define and checks to fill it in. * config.in, configure: Rebuild. 2004-04-13 Ian Lance Taylor * strerror.c: Include config.h, and redefine sys_nerr and sys_errlist, before including ansidecl.h and libiberty.h. 2004-04-13 Jeff Law * hashtab.c (htab_remove_elt_with_hash): New function. (htab_remove_elt): Implement in terms of htab_remove_elt_with_hash. 2004-03-31 Richard Henderson * hashtab.c (htab_size): Move to top of file; mark inline. (htab_elements): Likewise. (htab_mod, htab_mod_m2): New. (htab_delete): Refactor htab->size and htab->entries. (htab_empty): Likewise. (find_empty_slot_for_expand): Use htab_size, htab_mod, htab_mod_m2. (htab_find_with_hash, htab_find_slot_with_hash): Likewise. (htab_clear_slot): Use htab_size, htab_elements. (htab_traverse_noresize, htab_traverse): Likewise. 2004-03-17 Ian Lance Taylor * pex-unix.c (pexecute): Use vfork instead of fork, with appropriate changes to make this safe. * pex-common.h (STDERR_FILE_NO): Define. * Makefile.in: Clean up REQUIRED_OFILES and CONFIGURED_OFILES for an 80 column screen. Run maint-deps. 2004-03-09 Kelley Cook * configure.ac: Bump version to 2.59. Apply suggested autoupdates. * acconfig.h: Delete redundant file. * config.in: Regenerate. * configure: Regenerate. 2004-03-09 Hans-Peter Nilsson * configure: Regenerate for config/accross.m4 correction. 2004-03-07 Andreas Jaeger * testsuite/test-demangle.c: Include and for prototypes. (main): Initialize style. 2004-02-24 Ian Lance Taylor * cp-demangle.h (enum d_builtin_type_print): Add D_PRINT_UNSIGNED, D_PRINT_UNSIGNED_LONG, D_PRINT_LONG_LONG, D_PRINT_UNSIGNED_LONG_LONG, D_PRINT_FLOAT. * cp-demangle.c (cplus_demangle_builtin_types): Change char and short types to D_PRINT_DEFAULT. Change other integer types to use new D_PRINT_* values where appropriate. Change float types to D_PRINT_FLOAT. (d_print_comp) [LITERAL, LITERAL_NEG]: Handle new D_PRINT_* values. * testsuite/demangle-expected: Adjust two test cases. * cp-demangle.c (d_print_function_type): Print a space before the parenthesis around the function type in more cases. * testsuite/demangle-expected: Adjust one test case. * cp-demangle.c (d_print_comp) [UNARY]: Don't emit extra parentheses around a cast. * testsuite/demangle-expected: Adjust two test cases to match new output. * cp-demangle.c (__cxa_demangle): Pass DMGL_PARAMS to d_demangle. * cp-demangle.c (d_print_comp) [RESTRICT, VOLATILE, CONST]: Don't push more than one of the same CV-qualifier on the top of the stack. (d_print_comp) [ARRAY_TYPE]: If the array itself is CV-qualified, move the CV-qualifiers to apply to the element type instead. (d_print_array_type): When checking the modifiers, keep looking past ones which have been printed already. * testsuite/demangle-expected: Add three test cases. 2004-02-23 Ian Lance Taylor * cp-demangle.c (__cxa_demangle): Adjust last patch to handle empty string correctly. * cp-demangle.c (__cxa_demangle): It is not an error if status is not NULL. It is an error if the mangled name is the same as a built-in type name. (main): If IN_GLIBCPP_V3 is defined, test __cxa_demangle rather than cplus_demangle_v3. * dyn-string.c: Remove test of IN_LIBGCC2 and IN_GLIBCPP_V3 and the associated #define of RETURN_ON_ALLOCATION_FAILURE. 2004-02-16 Matt Kraai * regex.c: Include . (regcomp): Cast i to int. (regerror): Add ATTRIBUTE_UNUSED to parameter preg. 2004-01-25 Ian Lance Taylor * configure.ac: Add m4_pattern_allow(LIBOBJS). * configure: Regenerate. 2004-01-22 DJ Delorie * Makefile.in: Convert to ./ throughout. Rebuild dependencies with explicit build rules. (VPATH): Remove. (.c.o): Poison. * configure.ac (pexecute, LIBOBJS): Add ./ . * maint-tool: Build dependencies with explicit rules. 2004-01-15 Kazu Hirata * strdup.c (strdup): Constify the argument. 2004-01-14 Loren J. Rittle * Makefile.in (distclean): Remove config.cache. 2004-01-13 Daniel Jacobowitz * cp-demangle.c (d_make_comp): DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE takes two parameters. * cp-demint.c (cplus_demangle_fill_component): Likewise. 2004-01-12 Ian Lance Taylor * cp-demangle.c: Include "cp-demangle.h". If IN_GLIBCPP_V3 is defined, rename some functions which are to become static via #define. (CP_STATIC_IF_GLIBCPP_V3): Define. (struct d_operator_info): Move definition to cp-demangle.h, and rename to demangle_operator_info. Change all uses. (enum d_builtin_type_print): Move definition to cp-demangle.h. (struct d_builtin_type_info): Move definition to cp-demangle.h, and rename to demangle_builtin_type_info. Change all uses. (enum d_comp_type): Move definition to include/demangle.h, and rename to demangle_component_type, and change all enums to start with DEMANGLE_COMPONENT_ instead of D_. Change all uses. (struct d_comp): Move definition to include/demangle.h, and rename to demangle_component. Change all uses. (struct d_info): Move definition to cp-demangle.h. (cplus_demangle_fill_name): New function. (cplus_demangle_fill_extended_operator): New function. (cplus_demangle_fill_ctor): New function. (cplus_demangle_fill_dtor): New function. (d_make_empty): Remove type parameter. Change all callers. (d_make_name): Use cplus_demangle_fill_name. (d_make_extended_operator): Use cplus_demangle_fill_extended_operator. (d_make_ctor): Use cplus_demangle_fill_ctor. (d_make_dtor): Use cplus_demangle_fill_dtor. (cplus_demangle_mangled_name): Rename from d_mangled_name. Make non-static by default. Change all callers. (cplus_demangle_operators): Rename from d_operators. Change all uses. Make non-static by default. Add sentinel at end of array. (d_operator_name): Adjust initialization of high for new sentinel in cplus_demangle_operators. (cplus_demangle_builtin_types): Rename from d_builtin_types. Change all uses. Make non-static by default. Change initializer to use D_BUILTIN_TYPE_COUNT instead of magic number 26. (cplus_demangle_type): Rename from d_type. Make non-static by default. Change all callers. (cplus_demangle_init_info): Rename from d_init_info. Make non-static by default. Change all callers. * cp-demangle.h: New file. * cp-demint.c: New file. * Makefile.in: Rebuild dependencies. (CFILES): Add cp-demint.c. (REQUIRED_OFILES): Add cp-demint.o. 2004-01-09 Kelley Cook * configure.in: Rename file to ... * configure.ac: ... this. * Makefile.in: Update a comment for above change. * README: Likewise. * config.in: Regenerate. 2004-01-02 Ian Lance Taylor * cp-demangle.c (d_encoding): When DMGL_PARAMS is not set, strip CV-qualifiers from D_COMP_LOCAL_NAME right subtree. * cplus-dem.c (demangle_arm_hp_template): Set DMGL_PARAMS when demangling template parameters. * testsuite/test-demangle.c (fail): New static function. (main): Support new options in input file: --no-params, --is-v3-ctor, and --is-v3-dtor. * testsuite/demangle-expected: Add --no-params to most tests, and add the correct result when parameters are not demangled. Add some simple tests for V3 constructor/destructor recognition. 2003-12-25 Kaveh R. Ghazi * cp-demangle.c (is_ctor_or_dtor): Fix error in last change. 2003-12-22 Daniel Jacobowitz PR debug/13272 * Makefile.in (lbasename.o): Depend on filenames.h. * lbasename.c: Include "filenames.h" instead of defining its macros locally. 2003-12-22 Ian Lance Taylor * cp-demangle.c (CP_DYNAMIC_ARRAYS): Define if compiler supports dynamic arrays. (struct d_operator_info): Add len field. (struct d_builtin_type_info): Add len and java_len fields. (struct d_standard_sub_info): Add simple_len, full_len, and set_last_name_len fields. (struct d_comp): Add len field to s_string. (struct d_info): Add send, did_subs, and expansion fields. (d_append_string_constant): Define. (d_append_string): Remove. Change all users to use d_append_string_constant or d_append_buffer instead. (d_make_sub): Add len parameter. Change all callers. (d_name): Increase expansion when substituting std::. (d_unqualified_name): Increase expansion for an operator. (d_number): Don't use multiplication for negative numbers. (d_identifier): Make sure there are enough characters in the string for the specified length. Adjust expansion for an anonymous namespace. (d_operators): Initialize len field. (d_special_name, d_ctor_dtor_name): Increase expansion. (d_builtin_types): Initialize len and java_len fields. (d_type): Increase expansion for a builtin type. (d_cv_qualifiers): Increase expansion for each qualifier. (d_bare_function_type): Decrease expansion when removing single void parameter. (d_template_param): Increment did_subs. (d_expression): Increase expansion for an operator. (d_expr_primary): Decrease expansion for a type we will print specially. (standard_subs): Initialize new fields. (d_substitution): Increment did_subs when doing a normal substitution. Increase expansion for a special substitution. (d_print): Add estimate parameter. Change all callers. (d_print_comp) [D_COMP_NAME]: Handle C++ case inline. (d_print_comp) [D_COMP_BINARY]: Use length to avoid strcmp call. (d_print_java_identifier): Rename from d_print_identifier. Handle only Java case. Change caller. (d_init_info): Change return type to void. Change all callers. Initialize send, did_subs, and expansion fields. Do not initialize comps and subs fields. (d_demangle): Ifdef CP_DYNAMIC_ARRAYS, allocate comps and subs arrays on stack. Make an estimate of the length of the demangled name. Ifdef CP_DEMANGLE_DEBUG, print estimation failures. (is_ctor_or_dtor): Ifdef CP_DYNAMIC_ARRAYS, allocate comps and subs arrays on stack. 2003-12-20 Ian Lance Taylor * cp-demangle.c (d_identifier): In Java mode, skip an optional '$' after the identifier. * testsuite/demangle-expected: Add test case. 2003-12-19 Ian Lance Taylor Fix for PR c++/13447: * cp-demangle.c (enum d_comp_type): Add D_COMP_LOCAL_NAME. (d_dump, d_make_comp): Handle D_COMP_LOCAL_NAME. (is_ctor_dtor_or_conversion): Handle D_COMP_LOCAL_NAME like D_COMP_QUAL_NAME. (is_ctor_or_dtor): Likewise. (d_local_name): Use D_COMP_LOCAL_NAME rather than D_COMP_QUAL_NAME. (d_print_comp) [D_COMP_LOCAL_NAME]: New. (d_prinT_comp) [D_COMP_TYPED_NAME]: If the left tree is D_COMP_LOCAL_NAME, pull any qualifiers off its right subtree. (d_print_mod_list): Handle D_COMP_LOCAL_NAME. * testsuite/demangle-expected: Add two test cases. * cp-demangle.c (d_print_function_type): Clear the global modifier list when printing the modifiers, not just when printing the function parameters. * testsuite/demangle-expected: Add two test cases. 2003-12-15 Ian Lance Taylor * cp-demangle.c (d_print_function_type): Print the function parameters with no modifiers. * testsuite/demangle-expected: Add test case. * cp-demangle.c (d_demangle): If DMGL_PARAMS is not set, don't expect that we've read the entire string. (is_ctor_or_dtor): Don't expect that we've read the entire string--reverse patch of 2003-11-29. 2003-12-15 Brendan Kehoe * libiberty/Makefile.in (floatformat.o): Add dependency on config.h to accompany change of 2003-12-03. 2003-12-15 Ian Lance Taylor Fix handling of constructor/destructor of standard substitution: * cp-demangle.c (struct d_standard_sub_info): Define. (d_substitution): Add prefix argument. Change all callers. Rework handling of standard substitutions to print full name when qualifying a constructor/destructor, or when DMGL_VERBOSE is set. * testsuite/demangle-expected: Add test case. Fix handling of negative literal constants: * cp-demangle.c (enum d_comp_type): Add D_COMP_LITERAL_NEG. (d_dump, d_make_comp): Handle D_COMP_LITERAL_NEG. (d_expr_primary): Use D_COMP_LITERAL_NEG for a negative number. (d_print_comp): Handle D_COMP_LITERAL_NEG. * testsuite/demangle-expected: Add test case. 2003-12-04 Ian Lance Taylor * cp-demangle.c (IS_UPPER, IS_LOWER): Define. (d_last_char): Define new macro. (d_make_name): Reject an empty name. (d_prefix, d_unqualified_name, d_type): Use new IS_* macros. (d_substitution, d_print_identifier): Likewise. (d_print_comp) [D_COMP_OPERATOR]: Likewise. (d_print_comp) [D_COMP_TEMPLATE]: Use new d_last_char macro. (d_print_mod) Use new d_last_char macro. (d_print_cast): Use new d_last_char macro. (is_ctor_or_dtor): Don't leak memory. Fix handling of member function modifiers: * cp-demangle.c (enum d_comp_type): Add D_COMP_RESTRICT_THIS, D_COMP_VOLATILE_THIS, and D_COMP_CONST_THIS. (d_dump): Dump new d_comp_type values. (d_make_comp): Accept new d_comp_type values. (has_return_type): Only accept _THIS variants of qualifiers. (d_encoding): Without DMGL_PARAMS, only remove _THIS variants of qualifiers. (d_cv_qualifiers): Add member_fn parameter. Change all callers. (d_print_comp) [D_COMP_TYPED_NAME]: Rather than removing qualifiers and printing them at the end, add _THIS qualifiers to the modifier list. (d_print_comp) [D_COMP_*_THIS]: New cases. (d_print_comp) [D_COMP_PTRMEM_TYPE]: Remove special handling of qualifiers. (d_print_mod_list): Add suffix parameter. Change all callers. Keep walking the list even if the current modifier has been printed. (d_print_mod): Handle new _THIS qualifiers. (d_print_function_type): Handle new _THIS qualifiers when deciding whether to print a parenthesis. Put a space before the parenthesis in some cases. Call d_print_mod_list again at the end, passing suffix as 1. (is_ctor_or_dtor): Look for new _THIS qualifiers. * testsuite/demangle-expected: Add test case. Fix for PR gcc/13304: * cp-demangle.c (d_print_comp) [D_COMP_TEMPLATE]: If the character before the '<' is itself a '<', insert a space. (d_print_cast): Likewise. * testsuite/demangle-expected: Add test case. Fix for PR gcc/13244: * cp-demangle.c (d_print_comp) [D_COMP_BINARY]: Wrap an expression which uses the '>' operator in an extra layer of parens. * testsuite/demangle-expected: Add test case. 2003-12-03 Ian Lance Taylor * floatformat.c: Include "config.h" and if available. (INFINITY, NAN): Define if not defined by . (floatformat_to_double): Handle NaN, infinity, and denormalized numbers. (floatformat_from_double): Likewise. (ieee_test): In debugging code, use little endian rather than big endian. Correct tests to handle NaN and to check correct sign of zero. Omit m68k extended test. (main): Add more debugging cases. 2003-11-29 Ian Lance Taylor * cp-demangle.c (d_demangle): Only return success if we consumed the entire demangled string. (is_ctor_or_dtor): Likewise. * testsuite/demangle-expected: Revert one part of 2003-06-26 patch to restore expected result of EDG test case to original expected result. 2003-11-26 Ian Lance Taylor * cp-demangle.c (struct d_print_mod): Add templates field. (d_make_builtin_type): Check for NULL type. (d_make_extended_operator): Check for NULL name. (d_make_ctor, d_make_dtor): Likewise. (d_mangled_name): Add top_level parameter. Change all callers. (d_encoding): If DMGL_PARAMS is not set, strip off initial CV-qualifiers. (d_type): Check some return values we rely on. (d_bare_function_type, d_array_type): Likewise. (d_pointer_to_member_type, d_template_args): Likewise. (d_add_substitution): Fail if argument is NULL. (d_print_resize): Check whether buf is NULL. (d_print_comp): Save current templates list with each modifier. Don't pass the modifier list down when printing a template. (d_print_cast): Don't pass the modifier list down when printing a template. (d_print_mod_list): Temporarily set templates list while printing a modifier. (d_print_mod): Check that buf is not NULL before using it. (d_print_function_type): Print parens if there is no modifier. (d_init_info): Permit as many substitutions as there are characters in the mangled name. * testsuite/demangle-expected: Add two new test cases. 2003-11-25 Ian Lance Taylor * cp-demangle.c (java_demangle_v3): Pass DMGL_PARAMS to d_demangle. 2003-11-22 Ian Lance Taylor * cp-demangle.c (d_encoding): Add top_level parameter. Change all callers. (print_usage): Display new -p option. (long_options): Add --no-params. (main): Accept and handle -p. 2003-11-21 Ian Lance Taylor * cp-demangle.c (has_return_type): Skip qualifiers when checking whether we have a template. * testsuite/demangle-expected: Add four new tests. 2003-11-20 Ian Lance Taylor * testsuite/demangle-expected: Minor changes to match output of new demangler: adjust whitespace in four tests, and change order of qualifiers in one test. * cp-demangle.c: Complete rewrite. 2003-11-19 Mark Mitchell * cp-demangle.c (demangle_type): Correct thinko in substitution processing. 2003-11-18 Ian Lance Taylor * cp-demangle.c (demangle_operator_name): Remove space before "sizeof". (demangle_type_ptr): Put qualifiers in the right place. Handle qualifiers in pointer to member specially. (demangle_type): Handle qualifiers for pointer or reference specially. Handle function type. (demangle_local_name): Save and restore caret around demangling of initial encoding. * testsuite/test-demangle.c (main): Don't pass DMGL_VERBOSE to cplus_demangle. * testsuite/Makefile.in (test-demangle): Depend upon libiberty.a. 2003-10-31 Andreas Jaeger * floatformat.c (floatformat_always_valid): Add unused attribute. 2003-10-30 Josef Zlomek Jan Hubicka * vasprintf.c (int_vasprintf): Pass va_list by value. Use va_copy for copying va_list. (vasprintf): Pass va_list by value. 2003-10-30 Josef Zlomek * hashtab.c (htab_find_slot_with_hash): Decrease n_deleted instead of increasing n_elements when inserting to deleted slot. 2003-10-20 J. Brobecker * cplus-dem.c (demangle_template): Register a new Btype only when needed. * testsuite/demangle-expected: Add a new test. 2003-10-16 H.J. Lu * testsuite/demangle-expected: Update the expected output of _GLOBAL__I__Z2fnv. 2003-10-02 Daniel Jacobowitz * strerror.c: Revert last change. Declare static sys_nerr and sys_errlist using different names. 2003-10-01 Daniel Jacobowitz * strerror.c: Don't provide or reference sys_errlist if strerror is available. 2003-10-01 H.J. Lu * configure.in: Check if $MAKEINFO is missing. * configure: Regenerated. 2003-09-24 Daniel Jacobowitz * configure.in: Use AC_PROG_CPP_WERROR. * configure: Regenerated. 2003-09-22 Andrew Cagney * floatformat.c (floatformat_i387_ext_is_valid): New function. (floatformat_always_valid): New function. (floatformat_i387_ext): Initialize new "is_valid" field to "floatformat_i387_ext_is_valid". (floatformat_ieee_single_little): Initialize "is_valid" field to floatformat_always_valid. (floatformat_ieee_double_big): Ditto. (floatformat_ieee_double_little): Ditto. (floatformat_ieee_double_little): Ditto. (floatformat_ieee_double_littlebyte_bigword): Ditto. (floatformat_i960_ext): Ditto. (floatformat_m88110_ext): Ditto. (floatformat_m88110_harris_ext): Ditto. (floatformat_arm_ext_big): Ditto. (floatformat_arm_ext_littlebyte_bigword): Ditto. (floatformat_ia64_spill_big): Ditto. (floatformat_ia64_spill_little): Ditto. (floatformat_ia64_quad_big): Ditto. (floatformat_ia64_quad_little): Ditto. (floatformat_ia64_quad_little): Ditto. (floatformat_is_valid): Call "is_valid". 2003-09-15 Andrew Cagney * floatformat.c (get_field): Make "data" constant. (floatformat_is_valid, floatformat_to_double): Make "from" constant, fix casts. (floatformat_from_double): Make "from" constant. 2003-09-15 Daniel Jacobowitz * floatformat.c (floatformat_is_valid): New function. (get_field, put_field): Correct comments. 2003-09-06 Josef Zlomek * fibheap.c (fibheap_replace_key_data): Change type of OKEY to FIBHEAPKEY_T. 2003-09-02 John David Anglin PR bootstrap/12100 * aclocal.m4 (AC_LANG_FUNC_LINK_TRY): Define. * configure: Rebuilt. 2003-08-27 Daniel Jacobowitz * aclocal.m4: Include acx.m4 and no-executables.m4. (libiberty_AC_FUNC_STRNCMP): Use AC_LIBOBJ. (LIB_AC_PROG_CC): Remove. * configure.in: Update AC_PREREQ to 2.57. Use GCC_NO_EXECUTABLES. Use AC_PROG_CC and set ac_libiberty_warn_cflags instead of using LIB_AC_PROG_CC. Use AC_LIBOBJ. Call AC_ISC_POSIX later, only if performing link tests. * configure: Regenerated. 2003-08-12 Nathanael Nerode * cp-demangle.c: Clarify what package(s) this is part of. 2003-07-05 Danny Smith * pex-win32.c (pexecute): Mark parameters this_pname and temp_base as unused. Remove unused variables retries, sleep_interval. Initialize org_stdin, org_stdout. (pwait): Mark parameter flags as unused. 2003-07-02 Danny Smith * pex-win32.c (fix_argv): Ensure that the executable pathname uses Win32 backslashes. (pexecute): Cast away constness when assigning *errmsg_arg. 2003-06-26 H.J. Lu * testsuite/demangle-expected: Add more GNU V3 testcases. 2003-06-22 Zack Weinberg * safe-ctype.c: Use HOST_CHARSET_ASCII and HOST_CHARSET_EBCDIC, not HC_ASCII and HC_EBCDIC. Add documentation in form expected by gather-docs. * hex.c: Use HOST_CHARSET, not hand-coded check of character set. * Makefile.in, functions.texi: Regenerate. 2003-06-21 Zack Weinberg * safe-ctype.c: Separate out EOF==-1 check. Use HOST_CHARSET for charset determination. 2003-06-19 Dara Hazeghi * configure.in: Add check for malloc.h needed by m68k for function free(). * configure: Regenerated. * config.in: Add HAVE_MALLOC_H. * hashtab.c: include malloc.h were available for free(). 2003-06-09 Albert Chin-A-Young PR bootstrap/10974 * physmem.c: Update comment. * configure.in: Modify test for _system_configuration for older AIX systems. * config.in, configure: Regenerated. 2003-06-05 John David Anglin PR other/10810 * test-demangle.c (getline): Fix fence-post error. 2003-06-03 Nick Clifton * asprintf.c: Change comment to note that -1 is returned upon error. * vasprintf.c: Likewise. (vasprintf): Return -1 upon error. * functions.texi: Document changes to asprintf and vasprintf. 2003-05-19 Kelley Cook * config.table: Accept i[345867]86 variant. 2003-05-15 Jim Blandy * hex.c (_hex_value): Make this unsigned. (hex_value): Update documentation for new return type. hex_value now expands to an unsigned int expression, to avoid unexpected sign extension when we store it in a bfd_vma, which is larger than int on some platforms. * functions.texi: Regenerated. 2003-05-07 Josef Zlomek * splay-tree.c (splay_tree_predecessor): Fix comment. (splay_tree_successor): Fix comment. 2003-05-07 Jason Merrill * hashtab.c (iterative_hash): New fn. * configure.in: Add AC_C_BIGENDIAN_CROSS. * aclocal.m4: Include accross.m4. * configure, config.in: Regenerate. 2003-05-04 Kaveh R. Ghazi * configure.in (AC_CHECK_FUNCS): Don't make multiple calls. * configure: Regenerate. 2003-05-03 Carlo Wood * cp-demangle.c: Fix typo in "char_traints" string-literal. 2003-04-22 Kaveh R. Ghazi * vsnprintf.c (vsnprintf): Don't pad string with extra nulls. (main): Test that we don't write too much data. 2003-04-16 Kaveh R. Ghazi * configure.in (funcs, AC_CHECK_FUNCS): Add snprintf and vsnprintf. * snprintf.c, vsnprintf.c: New files. * Makefile.in (CFILES): Add snprintf.c and vsnprintf.c. (CONFIGURED_OFILES): Add snprintf.o and vsnprintf.o. Regenerate dependencies. * functions.texi, configure, config.in: Regenerated. 2003-04-15 Kaveh R. Ghazi * mempcpy.c, stpcpy.c, stpncpy.c: New files. * configure.in (funcs, AC_CHECK_FUNCS): Add mempcpy, stpcpy and stpncpy. * Makefile.in (CFILES): Add mempcpy.c, stpcpy.c and stpncpy.c. (CONFIGURED_OFILES): Add mempcpy.o, stpcpy.o and stpncpy.o. Regenerate dependencies. * functions.texi, configure, config.in: Regenerated. 2003-04-15 Kaveh R. Ghazi * argv.c: Fix comments. * calloc.c: Don't unnecessarily include "libiberty.h". (bzero): Add prototype. * floatformat.c: Include "ansidecl.h", rely on ANSI_PROTOTYPES. * getcwd.c (getcwd): Use standard definition to avoid conflicts with system headers. * hashtab.c (htab_traverse): Delete unused variables. * rename.c: Include "ansidecl.h". (rename): Use standard definition to avoid conflicts with system headers. * strsignal.c: Rely on ANSI_PROTOTYPES. * strstr.c: Check GNUC >= 2, not GNUC == 2. * vfprintf.c: Include "ansidecl.h", rely on ANSI_PROTOTYPES. * vprintf.c: Include "ansidecl.h" earlier, rely on ANSI_PROTOTYPES. * vsprintf.c: Include "ansidecl.h" earlier, rely on ANSI_PROTOTYPES and possibly include . * Makefile.in: Regenerate dependencies. 2003-04-15 DJ Delorie * maint-tool (deps): Scan for headers in $srcdir also. 2003-04-15 Kaveh R. Ghazi PR target/10338 PR bootstrap/10198 PR bootstrap/10140 * getopt.c (exchange, _getopt_initialize): Use mempcpy not __mempcpy. * regex.c (regerror): Likewise. 2003-04-14 Roger Sayle * argv.c: Use ANSI_PROTOTYPES instead of __STDC__. * memchr.c: Likewise. * strcasecmp.c: Likewise. * strncasecmp.c: Likewise. * strncmp.c: Likewise. * xatexit.c: Likewise. * xmalloc.c: Likewise. * copysign.c: Use traditional function declaration instead of DEFUN. * sigsetmask.c: Likewise. * memcmp.c: Both of the above, ANSI_PROTOTYPES and DEFUN. * memset.c: Likewise. * memcpy.c: ANSI_PROTOTYPES, DEFUN and prototype bcopy. * memmove.c: Likewise. 2003-04-14 Roger Sayle * strdup.c (strdup): Tweak implementation to use memcpy. 2003-04-14 Kaveh R. Ghazi * configure.in (HAVE_UINTPTR_T): Always define. * configure: Regenerated. 2003-03-23 Alexandre Oliva * Makefile.in (MULTIOSDIR): New macro. Use $(CC) $(LIBCFLAGS) instead of $$CC alone. (install_to_tooldir): Use it. 2003-17-03 Jan Hubicka * hashtab.c (htab_traverse_noresize): Break out from ... * hashtab.c (htab_traverse): ... here. 2003-12-03 Jan Hubicka * hashtab.c (htab_expand): Fix warning. * hashtab.c (htab_expand): Compute the size of hashtable based on the number of elements actually used. (htab_traverse): Call htab_expand when table is too empty. 2003-03-11 Carlo Wood * cplus-dem.c (demangle_integral_value): Correction to reflect patch of 2002-01-10 in order to also make negative multi-digits without leading underscore work. 2003-03-03 Mark Mitchell * cplus-dem.c: Add license exception to copyright notice. 2003-02-27 Kaveh R. Ghazi * physmem.c: Formatting changes from upstream. 2003-02-24 Danny Smith * physmem.c (physmem_total): Add _WIN32 support. (physmem_available): Likewise. 2003-02-24 Rainer Orth * physmem.c (physmem_total) [HAVE_GETSYSINFO]: Test for GSI_PHYSMEM. (physmem_available) [HAVE_TABLE]: Test for TBL_VMSTATS. 2003-02-22 Kaveh R. Ghazi * configure.in: Check for sys/systemcfg.h and _system_configuration. * physmem.c: Add support for AIX. Tweek formatting as per upstream coreutils beta. 2003-02-22 Kaveh R. Ghazi Richard Earnshaw Geoffrey Keating * configure.in: Check for sys/sysctl.h and sysctl. * physmem.c: Add support for *bsd and darwin. * Makefile.in: Generate depedency for physmem.o. 2003-02-21 Rainer Orth * physmem.c (physmem_total) [HAVE_GETSYSINFO]: Use getsysinfo on Tru64 UNIX. (physmem_available) [HAVE_TABLE && HAVE_SYS_TABLE_H]: Use table on Tru64 UNIX. * configure.in (AC_CHECK_HEADERS): Check for sys/sysinfo.h, machine/hal_sysinfo.h, sys/table.h. (checkfuncs, AC_CHECKFUNCS): Check for getsysinfo, table. * configure, config.in: Regenerate. 2003-02-21 Kaveh R. Ghazi * configure.in: Check for sys/sysmp.h and sysmp. * physmem.c: Pull upstream copy, add support for irix6. * config.in, configure: Regenerated. 2003-02-21 Kaveh R. Ghazi * physmem.c (physmem_total, physmem_available): De-ANSI-fy. * configure.in (AC_CHECK_FUNCS): Add pstat_getstatic and pstat_getdynamic. 2003-02-20 Kaveh R. Ghazi * Makefile.in (CFILES): Add physmem.c. (REQUIRED_OFILES): Add physmem.o. * configure.in: Check for sys/pstat.h. (checkfuncs): Add pstat_getstatic and pstat_getdynamic. * physmem.c: New file, copied from textutils. * config.in, configure: Regenerated. 2003-02-20 Daniel Jacobowitz * Makefile.in (CFILES): Add lrealpath.c. (REQUIRED_OFILES): Add lrealpath.o. (lrealpath.o): Add rule. * aclocal.m4 (libiberty_NEED_DECLARATION): Add. * configure.in: Add realpath and canonicalize_file_name to checkfuncs and AC_CHECK_FUNCS. Use libiberty_NEED_DECLARATION for canonicalize_file_name. * lrealpath.c: New file. * make-relative-prefix.c: Update documentation. (make_relative_prefix): Simplify. Use lbasename and lrealpath. * config.in: Regenerated. * configure: Regenerated. * functions.texi: Regenerated. 2003-02-20 jmc * cplus_dem.c: Fix typo: intializes -> initializes. 2003-02-20 Alexandre Oliva * configure.in: Propagate ORIGINAL_LD_FOR_MULTILIBS to config.status. * configure: Rebuilt. 2003-02-13 Daniel Jacobowitz Fix PR c++/7612. * cplus-dem.c (demangle_signature): Call string_delete. Remove extra string_init. (demangle_arm_hp_template): Call string_delete instead of string_clear. Add missing string_delete call. (demangle_qualified): Add missing string_delete call. (do_type): Remove unused variable btype. Add missing string_delete call. Call string_delete instead of string_clear. (demangle_fund_type): Move variable btype inside of the switch statement. Add missing string_delete call. (do_arg): Call string_delete instead of string_clear. Remove extra string_init. (demangle_nested_args): Free work->previous_argument. 2003-02-12 Kaveh R. Ghazi * acconfig.h: New file. Add uintptr_t. * config.in: Regenerated. 2003-02-04 Joseph S. Myers * libiberty.texi: Update to GFDL 1.2. 2003-01-30 Christian Cornelssen * Makefile.in (libiberty_topdir): New subst. (mkinstalldirs): Redefine in terms of the above. * configure.in: AC_SUBST it. * configure: Regenerate. 2003-01-28 Christian Cornelssen * Makefile.in (all-subdir, check-subdir, installcheck-subdir) (info-subdir, install-info-subdir, clean-info-subdir) (dvi-subdir, install-subdir, etags-subdir, mostlyclean-subdir) (clean-subdir, distclean-subdir, maintainer-clean-subdir): Pass $(FLAGS_TO_PASS). 2003-01-27 Alexandre Oliva * Makefile.in (install_to_tooldir): Instead of $(MULTISUBDIR), use /`$$CC -print-multi-os-directory`. 2003-01-26 Daniel Jacobowitz * hashtab.c (htab_create_alloc_ex): New function. (hatab_set_functions_ex): New function. (htab_delete, htab_expand): Support alternate allocation functions. 2003-01-24 Christopher Faylor * configure.in: Remove special pex-cygwin consideration. * configure: Regenerate. * pex-cygwin.c: Remove. * Makefile.in: Remove pex-cygwin.[co] lines. 2003-01-24 Zack Weinberg * Makefile.in (CFILES): Add pex-*.c. (REQUIRED_OFILES): Change pexecute.o to @pexecute@ (CONFIGURED_OFILES): Add pex-*.o. (TEXIFILES): Add pexecute.txh. (pexecute.o): Delete rule. (pex-cygwin.o, pex-djgpp.o, pex-mpw.o, pex-msdos.o, pex-os2.o, pex-unix.o, pex-win32.o): New rules. * configure.in: Change AC_INIT argument to xmalloc.c. Compute appropriate pexecute implementation and substitute it as @pexecute@. * pexecute.c: Split up into... * pex-cygwin.c, pex-djgpp.c, pex-mpw.c, pex-msdos.c, pex-os2.c, pex-unix.c, pex-win32.c, pex-common.h, pexecute.txh: ... these new files. * functions.texi: Regenerate. * configure: Regenerate. 2003-01-20 Josef Zlomek * hashtab.c (htab_expand): Fix allocation of new entries. 2003-01-09 Christian Cornelssen * Makefile.in (FLAGS_TO_PASS): Also pass DESTDIR. * Makefile.in (install_to_libdir, install_to_tooldir): Add a mkinstalldirs command. 2002-12-04 Danny Smith * make-relative-prefix.c (HAVE_HOST_EXECUTABLE_SUFFIX): Define for hosts with HOST_EXECUTABLE_SUFFIX. 2002-11-24 Nick Clifton * make-relative-prefix.c (make_relative_prefix): Ensure return string is empty before using strcat to construct it. 2002-11-22 Daniel Jacobowitz * Makefile.in: Add make-relative-prefix.c. * make-relative-prefix.c: New file. * functions.texi: Rebuilt. 2002-11-16 Jakub Jelinek * md5.c (md5_process_block): Avoid `function-like macro "F{G,H,I}" must be used with arguments in traditional C' warnings. 2002-10-16 Jakub Jelinek * config.table: Use mh-s390pic for s390x too. 2002-10-06 Andreas Jaeger * libiberty/cplus-dem.c (ada_demangle): Get rid of unneeded variable and of strict-aliasing warning. (grow_vect): Use char as first parameter. 2002-09-22 Kaveh R. Ghazi * Makefile.in (all): Fix multilib parallel build. 2002-09-19 John David Anglin * cp-demangle.c (demangling_new): Cast 0 to enum. (demangle_char): Cast return of strdup to char *. (is_gnu_v3_mangled_ctor): Cast 0 to enum. (is_gnu_v3_mangled_dtor): Likewise. * cplus-dem.c (grow_vect): Cast return of xrealloc to void *. (work_stuff_copy_to_from): Cast return of xmalloc to char **. * fibheap.c (fibnode_new): Cast return of xcalloc to fibnode_t. * md5.c (md5_process_bytes): Cast results back to const void *. (md5_process_block): Add cast to const md5_uint32 *. * regex.c (re_compile_fastmap): Cast enum to UCHAR_T. * safe-ctype.c (L, XL, U, XU, D, P, _, C, Z, M, V, T, S): Add cast to unsigned short. * splay-tree.c (splay_tree_xmalloc_allocate): Cast return of xmalloc to void *. * vasprintf.c (int_vasprintf): Cast return of malloc to char *. 2002-09-19 Nick Clifton * README: Update email addresses for bugs and patches. 2002-09-10 Mike Stump * splay-tree.c (splay_tree_successor): Fix comments. 2002-09-11 Zack Weinberg * cplus-dem.c: Code under #ifdef MAIN moved to gcc/cp/cxxfilt.c. * testsuite/Makefile.in: Adjust for test-demangle. * testsuite/regress-demangle: Deleted. * testsuite/test-demangle.c: New file. * testsuite/demangle-expected: Change \$ to $ throughout, now that this file is not being read by a shell script. 2002-09-05 Roger Sayle * regex.c: Only use "#pragma alloca" on AIX when not using gcc. 2002-08-07 DJ Delorie * regex.c (re_error_msgid): Just use a simple array of strings. (re_compile_pattern): Compensate. (re_comp): Likewise. (re_comp): Likewise. (regerror): Likewise. 2002-07-29 Neil Booth * cplus-dem.c (PREPEND_BLANK): Remove. 2002-07-10 Jason Merrill * cp-demangle.c (demangle_identifier): Support extended Unicode characters. 2002-07-08 Kaveh R. Ghazi * cp-demangle.c (demangle_v3_with_details): Wrap in !defined IN_GLIBCPP_V3. 2002-07-01 Mark Mitchell * cp-demangle.c (demangle_operator_name): Add type_arg parameter. Set it for the "st" operator. (demangle_expression): Handle expressions with types as arguments. 2002-06-30 Douglas Rupp * configure.in (OUTPUT_OPTION,NO_MINUS_C_MINUS_O): Configure. * Makefile.in (OUTPUT_OPTION): Use. 2002-06-22 Peter Breitenlohner * Makefile.in (install_to_libdir): Add $(DESTDIR). (install_to_tooldir): Likewise. 2002-06-17 Douglas Rupp * lbasename.c: Add 2002 to copyright. (IS_DIR_SEPARATOR): Remove VMS junk. 2002-06-05 Geoffrey Keating * hashtab.c (htab_create): New stub function for backward compatibility. (htab_try_create): Likewise. 2002-06-03 Geoffrey Keating * hashtab.c (htab_create): Delete. (htab_try_create): Delete. (htab_create_alloc): New. (htab_delete): Support user-specified memory allocation. (htab_expand): Likewise. 2002-05-22 Roman Lechtchinsky * configure.in: Fix typo in the code checking for sys_errlist. * configure: Regenerated. 2002-05-13 Andreas Schwab * config.table: Use mh-x86pic also for x86-64. 2002-05-08 Alexandre Oliva * configure.in (ORIGINAL_LD_FOR_MULTILIBS): Preserve LD at script entry, and set LD to it when configuring multilibs. * configure: Rebuilt. 2002-05-07 Mark Mitchell * configure.in (AC_TYPE_PID_T): Use it. * configure: Regenerated. * getruntime.c: Include . * waitpid.c: Likewise. Use pid_t, not int, as the type of "pid". 2002-04-09 Richard Henderson * hashtab.c (higher_prime_number): Use 7 as minimum. (find_empty_slot_for_expand): Don't compute hash2 unless needed. (htab_find_slot_with_hash): Likewise. 2002-04-01 Phil Edwards * cp-demangle.c (__cxa_demangle): Also protect with IN_GLIBCPP_V3. (is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_ctor): Conditionally not compile if IN_GLIBCPP_V3 defined. * dyn-string.c: Also allow IN_GLIBCPP_V3 to change allocation scheme. 2002-03-30 Bryce McKinlay * cp-demangle.c (java_demangle_v3): Don't try to release "demangled" if it is NULL. 2002-03-27 DJ Delorie * hex.c: Add documentation. (_hex_value): Provide non-ASCII empty table. (hex_init): Initialize the non-ASCII table. * functions.texi: Regenerate. 2002-03-27 Mark Mitchell * dyn-string.c: Add libgcc exception to copyright notice. 2002-03-26 H.J. Lu (hjl@gnu.org) * config.table: Support --with-build-subdir. * configure.in: Likewise. * configure: Rebuild. 2002-03-18 Stuart Griffith * strtod.c (strtod): Increment 8 chars, not 7, when `infinity' seen. 2002-03-12 Mark Mitchell * cp-demangle.c: Add libgcc exception to cp-demangle.c copyright notice. 2002-03-11 Douglas B Rupp * xatexit.c [VMS]: Include stdlib.h and unixlib.h. 2002-03-06 Jim Blandy * splay-tree.c (splay_tree_xmalloc_allocate, splay_tree_xmalloc_deallocate): Use K&R-style definitions, not prototyped definitions. Mark `data' arguments as unused. 2002-03-06 Andrew Cagney * floatformat.c (floatformat_arm_ext_big): Delete definition. 2002-03-04 Phil Edwards * configure.in: Add --enable-install-libiberty option. * Makefile.in (INSTALLED_HEADERS): New variable. (install_to_libdir): Possibly also copy headers. * configure: Regenerated. 2002-03-04 Neil Booth * xmalloc.c (xmalloc_fail): Clarify error message further. 2002-03-03 Neil Booth * xmalloc.c (xmalloc_fail): Clarify error message. 2002-02-22 Jim Blandy * splay-tree.c (splay_tree_xmalloc_allocate, splay_tree_xmalloc_deallocate): New functions. (splay_tree_new): Call splay_tree_new_with_allocator, passing the above functions and a dummy data pointer. (splay_tree_new_with_allocator): New function. (splay_tree_delete_helper, splay_tree_delete, splay_tree_insert, splay_tree_remove): Use the splay tree's allocation and deallocation functions. 2002-02-19 Scott Snyder * testsuite/demangle-expected: Add test case for infinite loop in demangler. * cplus-dem.c (demangle_arm_hp_template): Stop trying to demangle if do_type() doesn't make any progress --- prevents an infinite loop. 2002-02-18 Carlo Wood PR c++/5390 * cplus-dem.c (demangle_integral_value): Accept multi-digit numbers that do not start with an underscore; This is needed for integer template parameters. This doesn't break anything because multi-digit numbers are never followed by a digit. * testsuite/demangle-expected: Corrected all mangled test cases with multi-digit template parameters: g++ 2.95.x does not generate underscores around these parameters. 2002-02-05 Jason Merrill * cplus-dem.c (flags): Add DMGL_VERBOSE (cplus_demangle_v3_p): Remove. (demangle_it): Add DMGL_TYPES to passed flags. * cp-demangle.c (cplus_demangle_v3_all): Remove. (cplus_demangle_v3_type): Remove. (cplus_demangle_v3): Add options parm. 2002-02-02 H.J. Lu (hjl@gnu.org) * cp-demangle.c (cp_demangle_type): Do not protect with IN_LIBGCC2. (cplus_demangle_v3_all): New. (cplus_demangle_v3): Call cplus_demangle_v3_all. (cplus_demangle_v3_type): Call cplus_demangle_v3_all. * cplus-dem.c (cplus_demangle_v3_p): New function pointer. Initialized to cplus_demangle_v3. (cplus_demangle_with_style): Call cplus_demangle_v3_p instead of cplus_demangle_v3. (main): Set cplus_demangle_v3_p to cplus_demangle_v3_type for command line symbol. * testsuite/regress-demangle: Pass the mangled name at the command line. 2002-02-01 H.J. Lu * cp-demangle.c (cp_demangle_type): Call demangling_new with DMGL_GNU_V3. 2002-01-31 Phil Edwards * cp-demangle.c: Revert yesterday's change. 2002-01-31 Adam Megacz * gcc/libiberty/configure.in: Treat mingw the same as cywin wrt HAVE_SYS_ERRLIST. 2002-01-30 Phil Edwards * cp-demangle.c (cp_demangle_type): Do not protect with IN_LIBGCC2. (cplus_demangle_v3): Mimic __cxa_demangle and fall back on cp_demangle_type. * testsuite/demangle-expected: New gnu-v3 test. 2002-01-22 Momchil Velikov * configure.in (variable detection): Use arrays of unspecified size instead of plain integers. 2002-01-18 DJ Delorie * Makefile.in (TESTLIB): New. This library is for future testsuites. (CFILES, REQUIRED_OFILES, CONFIGURED_OFILES): Re-alphabetize, break down by letter. (REQUIRED_OFILES): List long-to-compile files first. (maint-deps): New, target for updating dependencies. (dependencies): Update. * maint-tool: Add dependency-generating option. * configure.in: Check for _doprnt even if we're not providing it. * configure: Regenerate. * _doprnt.c: Modifications to allow compiling on any platform. * copysign.c: Likewise. * putenv.c: Likewise. * setenv.c: Likewise. * vsprintf.c: Likewise. 2002-01-15 Douglas B Rupp * mkstemps.c (mkstemps): On VMS, open temp file with option that causes it to be deleted when closed. 2002-01-02 Kaveh R. Ghazi * cp-demangle.c (long_options): Const-ify. * cplus-dem.c (long_options): Likewise. * cplus-dem.c (mystrstr): Delete. All callers changed to use strstr instead. 2001-12-31 Ira Ruben * aclocal.m4 (libiberty_AC_FUNC_STRNCMP): Use anon mmap as 2nd try. * configure: Regenerated. 2001-12-24 Douglas B. Rupp * configure.in (uintptr_t): Use AC_CHECK_TYPE. * configure: Regenerated. 2001-12-12 Craig Rodrigues PR other/2719 * cplus-dem.c (consume_count): Treat negative count as an error. * testsuite/demangle-expected: Added testcase. Tue Dec 11 07:08:57 2001 Douglas B. Rupp * configure.in: Hardcode that vfork works on VMS host. * configure: Regenerated. 2001-12-06 Richard Henderson * cplus-dem.c (libiberty_demanglers): Add no_demangling case. (cplus_demangle): Support no_demangling. 2001-11-27 Zack Weinberg * _doprnt.c: Moved here from gcc/doprint.c. Adjust to build in libiberty context. Fix typo in leading comment. * configure.in: Fix various AC_DEFINEs so autoheader works. If any of vprintf, vsprintf, vfprintf is missing from libc, then AC_REPLACE_FUNCS(_doprnt). 2001-11-26 DJ Delorie Daniel Jacobowitz * Makefile.in (stamp-h): Depend on Makefile for proper serialization. (*-subdir): Depend on config.h for proper serialization. 2001-11-26 DJ Delorie * configure.in: Check for alloca.h (for regex.c and putenv.c). * configure: Regenerate. * config.h: Add HAVE_ALLOCA_H. 2001-11-16 Kaveh R. Ghazi * regex.c: Check defined(__STDC__) || defined(ALMOST_STDC) || defined(HAVE_STRINGIZE) to determine whether ISO CPP token pasting is available. Thu Nov 15 11:06:25 2001 Jeffrey A Law (law@cygnus.com) * config.in (HAVE_UINTPTR_T): Provide autoconf stub. * configure.in (HAVE_UINTPTR_T): Test for system defining uintptr_t and define HAVE_UINTPTR_T appropriately. * regex.c (uintptr_t): Do not provide a definition if the system provided one. * regex.c (PREFIX): Provide an alternate definition for non-ANSI/ISO compilers. (ARG_PREFIX): Likewise. 2001-11-12 Jim Meyering * obstack.c (_): Honor the setting of ENABLE_NLS. Otherwise, this code would end up calling gettext even in packages built with --disable-nls. * getopt.c (_): Likewise. * regex.c (_): Likewise. 2001-11-03 Alan Modra * configure.in: Cope with missing makeinfo. * configure: Regenerate. 2001-10-22 Kaveh R. Ghazi * hex.c (hex_init): Provide empty stub. * hex.c (hex_init): Delete. (_hex_value): Const-ify and initialize at compile-time. 2001-10-19 H.J. Lu * Makefile.in ($(TARGETLIB)): Also generate pic/$(TARGETLIB) if necessary. 2001-10-17 DJ Delorie * argv.c, asprintf.c, choose-temp.c, concat.c, cplus-dem.c, ffs.c, fnmatch.txh, getruntime.c, make-temp-file.c, mkstemps.c, pexecute.c, random.c, strsignal.c, vasprintf.c: Improve manual formatting. * functions.texi: Regenerate. 2001-10-15 DJ Delorie * Makefile.in (TEXIFILES): Add fnmatch.txh. (maint-undoc): New. maint-tool: Add "undoc" tool. * alloca.c, argv.c, asprintf.c, choose-temp.c, concat.c, fdmatch.c, ffs.c, getruntime.c, insque.c, lbasename.c, make-temp-file.c, mkstemps.c, pexecute.c, random.c, spaces.c, strerror.s, strsignal.c, strtol.c, vasprintf.c: Add or update documentation. * fnmatch.txh: New. * functions.texi: Regenerate. 2001-10-10 Joseph S. Myers * bcmp.c, setenv.c: Use "nonzero" instead of "non-zero". * strtod.c: Use "ISO C" instead of "ANSI C". * functions.texi: Regenerate. 2001-10-07 Joseph S. Myers * alloca.c, clock.c, getcwd.c, getpagesize.c, getpwd.c, index.c, libiberty.texi, memchr.c, putenv.c, rindex.c, strchr.c, strdup.c, strerror.c, strrchr.c, strstr.c, strtod.c, tmpnam.c, vfork.c, xatexit.c, xmalloc.c, xstrerror.c: Improve manual formatting. Fix spelling. Give names to function arguments in documentation. Use (void) prototypes in documentation. * functions.texi: Regenerate. 2001-10-07 Kaveh R. Ghazi * argv.c (buildargv, tests, main): Const-ify. * cp-demangle.c (operator_code): Likewise. * cplus-dem.c (optable, libiberty_demanglers, cplus_demangle_set_style, cplus_demangle_name_to_style, print_demangler_list): Likewise. * hashtab.c (higher_prime_number): Likewise. * strcasecmp.c (charmap): Likewise. * strerror.c (error_info, strerror, main): Likewise. * strncasecmp.c (charmap): Likewise. * strsignal.c (signal_info): Likewise. 2001-09-29 DJ Delorie * configure: Regenerate. 2001-09-28 Kaveh R. Ghazi * concat.c: Include stdlib.h. 2001-09-27 Eli Zaretskii * libiberty.texi: (Top level): Add syncodeindex pg. Add @dircategory and @direntry directives. Add @finalout. (many nodes): Lose the next,prev,up pointers on the @nide line. (Using, Supplemental Functions, Replacement Functions): Fix markup. (Functions): Move around, to allow makeinfo to build the manual without next,prev,up pointers in thye node lines. (Licenses): Fix typos. * index.c, rindex.c, strchr.c, strerror.c, strrchr.c, strstr.c, strtol.c, xatexit.c, xexit.c, xmalloc.c: Fix spelling and markup. * functions.texi: Regenerate. * copying-lib.texi: Lose the next,prev,up pointers on the @node line. 2001-09-27 DJ Delorie * configure.in: Don't use in-tree texinfo, because libiberty must be built before it. Check for makeinfo version 4 or higher. * functions.texi: Regenerate. 2001-09-20 DJ Delorie Phil Edwards * configure.in (MAKEINFO, PERL): Detect these. (--enable-maintainer-mode): Add. * configure: Regenerate. * Makefile.in (MAKEINFO, PERL): Define. (libiberty.info, libiberty.dvi, libiberty.html): New. (CFILES): Add bsearch.c. (CONFIGURED_OFILES): New, list of objects configure might add. (maint-missing, maint-buildall): New, for maintainers only. (clean, mostlyclean): Add info/dvi/html files. * libiberty.texi, copying-lib.texi, obstacks.texi, functions.texi: New. * gather-docs: New, for maintainers. * maint-tool: New, for maintainers. * alloca.c, atexit.c, basename.c, bcmp.c, bcopy.c, bsearch.c, bzero.c, calloc.c, clock.c, configure.in, configure, getcwd.c, getpagesize.c, getpwd.c, index.c, memchr.c, memcmp.c, memcpy.c, memmove.c, memset.c, putenv.c, rename.c, rindex.c, setenv.c, sigsetmask.c, strcasecmp.c, strchr.c, strdup.c, strerror.c, strncasecmp.c, strncmp.c, strrchr.c, strstr.c, strtod.c, strtol.c, tmpnam.c, vfork.c, vprintf.c, waitpid.c, xatexit.c, xexit.c, xmalloc.c, xmemdup.c, xstrdup.c, xstrerror.c: Add or update documentation. 2001-09-25 Kaveh R. Ghazi * concat.c (reconcat): Fix for traditional C. 2001-09-24 Kaveh R. Ghazi * concat.c (reconcat): New function. 2001-09-17 Kaveh R. Ghazi * concat.c (vconcat_length, vconcat_copy, concat_length, concat_copy, concat_copy2): New functions. (concat): Use vconcat_length/vconcat_copy. * alloca.c (libiberty_optr, libiberty_nptr, libiberty_len): Define. 2001-09-04 Kaveh R. Ghazi * asprintf.c: Don't define USE_STDARG. Use VPARAMS, VA_OPEN, VA_FIXEDARG & VA_CLOSE. * vasprintf.c: Check HAVE_STRING_H when including string.h. (checkit): Delete redundant prototype. Add ATTRIBUTE_PRINTF_1. Use VA_OPEN, VA_FIXEDARG & VA_CLOSE. Free allocated string. 2001-08-27 Kaveh R. Ghazi * concat.c (concat): Use VPARAMS, VA_OPEN, VA_FIXEDARG & VA_CLOSE. 2001-08-23 Ulrich Drepper * regex.c (truncate_wchar): Use wcrtomb not wctomb. 2001-08-23 Ulrich Drepper * posix/regex.c [_LIBC] (convert_mbs_to_wcs): Use __mbrtowc instead of mbrtowc. [_LIBC]: Use __iswctype instead of iswctype, __wcslen instead of wcslen, and __wcscoll instead of wcscoll. 2001-08-22 Matt Kraai * fibheap.c (fibheap_init, fibnode_init): Remove. (fibheap_new, fibnode_new): Use xcalloc to allocate and initialize memory. (fibheap_insert): Remove check for node allocation failure. 2001-08-21 Richard Henderson * Makefile.in (fibheap.o): Depend on config.h. * fibheap.c: Tidy formatting. Use config.h.` Rearrange some functions for inlining. Tue Aug 21 12:35:04 2001 Christopher Faylor * configure.in: Need to set HAVE_SYS_ERRLIST and HAVE_SYS_NERR whenever hosting on cygwin. * configure: Regenerate. 2001-08-20 Andrew Cagney * floatformat.c (floatformat_m88110_ext): Remove #ifdef HARRIS_FLOAT_FORMAT. (floatformat_ia64_spill_little, floatformat_ia64_quad_little) (floatformat_ia64_spill_big, floatformat_ia64_quad_big) (floatformat_arm_ext_big, floatformat_arm_ext_littlebyte_bigword) (floatformat_m88110_harris_ext): New float formats. 2001-08-20 Daniel Berlin * fibheap.c: New file. Fibonacci heap. * Makefile.in (CFILES): Add fibheap.c. (REQUIRED_OFILES): Add fibheap.o. (fibheap.o): Add dependencies for fibheap.o. 2001-08-17 Christopher Faylor * configure.in: Always set HAVE_SYS_ERRLIST when targetting cygwin. * configure: Regenerate. 2001-08-16 Richard Henderson * hashtab.c (htab_hash_string): New. 2001-08-13 Andrew Cagney * floatformat.c (floatformat_ieee_double_littlebyte_bigword): Fix name. 2001-08-12 Isamu Hasegawa * regex.c (wcs_regex_compile): Use appropriate string to compare with collating element. Fix the padding for the alignment. 2001-08-10 Andrew Cagney * lbasename.c (lbasename): Change function definition to return a const char pointer. 2001-08-07 Jason Merrill * cp-demangle.c (demangle_special_name): "GR" -> "reference temporary for". 2001-08-03 Richard Henderson * Makefile.in (concat.o): Depend on config.h. 2001-07-30 Andreas Jaeger * concat.c: Include "config.h". 2001-07-30 Andreas Jaeger * regex.c: Declare wcs functions only if compiling with MBS_SUPPORT. Don't use #elif for traditional C. 2001-07-23 Ulrich Drepper * regex.c: Revamp memory allocation for WCHAR functions to not use too much stack. 2001-07-30 Andreas Jaeger * regex.c: Declare wcs functions only if compiling with MBS_SUPPORT. Don't use #elif for traditional C. 2001-07-25 Daniel Jacobowitz * Makefile.in (regex.o): Add dependency on config.h. 2001-07-18 Andreas Schwab * regex.c (WORDCHAR_P) [WCHAR]: Also return true for the underscore character. 2001-07-18 Ulrich Drepper * regex.c: Limit string length printed in debug messages to 100 chars. 2001-07-18 Andreas Jaeger * regex.c: Place under LGPL version 2.1. 2001-07-10 Jeff Johnston * Makefile.in: Add support for regex code. * regex.c: New file. 2001-07-05 Mark Klein * Makefile.in: Add ffs.c dependency. * configure.in: Add ffs.c. * ffs.c: New file. 2001-06-18 Richard Henderson * concat.c: Include . 2001-06-11 Loren J. Rittle bootstrap/3106 * strerror.c (sys_nerr): Hide the OS header version. * strsignal.c (sys_nsig): Likewise. 2001-06-10 Richard Henderson * concat.c: Include string.h. Fix int vs size_t usage. Simplify the iteration loops. Use memcpy. 2001-05-16 Matt Kraai * partition.c: Fix misspelling of `implementation'. 2001-05-09 Thiemo Seufer * md5.c (md5_init_ctx): Declare constants as unsigned. (md5_process_block): Likewise. 2001-05-07 Zack Weinberg * cp-demangle.c (demangle_v3_with_details, is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_dtor): Use K+R style function definition. * ternary.c: Use K+R style function definitions. Use PTR, not void *. Make arguments constant where possible. 2001-05-07 Mark Mitchell * splay-tree.h (splay_tree_max): New function. (splay_tree_min): Likewise. 2001-04-15 Daniel Berlin * ternary.c: New file - Ternary search tree implementation. * Makefile.in: Add ternary.o, and ternary.c dependencies. 2001-04-03 Zack Weinberg * make-temp-file.c (try): Inline. 2001-02-28 Richard Henderson * Makefile.in (make-temp-file.o): Depend on config.h. 2001-03-27 Kaveh R. Ghazi * memchr.c (memchr): Adjust condition to avoid infinite loop. 2001-03-23 Jakub Jelinek * cp-demangle.c (demangle_discriminator): `_0' is discriminator #1, `_' not followed by a digit is invalid. 2001-03-22 Jim Blandy * cp-demangle.c (string_list_delete): Use dyn_string_delete instead of free, to free the contents as well as the string structure. 2001-03-21 Zack Weinberg * make-temp-file.c: Always default DIR_SEPARATOR to '/'. Don't default P_tmpdir to anything. Try /var/tmp before /usr/tmp. 2001-03-20 Zack Weinberg * choose-temp.c: Split off make_temp_file, and the code duplicated between it and choose_temp_base, into... * make-temp-file.c: ... here; new file. * Makefile.in (CFILES): Add make-temp-file.c. (REQUIRED_OFILES): Add make-temp-file.o. 2001-03-20 Jim Blandy * cp-demangle.c (struct demangling_def): New fields: is_constructor and is_destructor. (demangling_new): Initialize them. (demangle_ctor_dtor_name): Set them, if we detect a constructor or destructor. (demangle_v3_with_details, is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_dtor): New functions. 2001-03-20 Jason Merrill * cplus-dem.c (main): Skip initial $. 2001-03-15 Michael Meissner * hashtab.c (higher_prime_number): Silence warning that 4294967291 might be a signed integer under pre-ISO C systems. 2001-03-10 Neil Booth John David Anglin * libiberty/lbasename.c: New file. * libiberty/Makefile.in: Update for lbasename. 2001-03-06 Zack Weinberg * aclocal.m4 (libiberty_AC_FUNC_C_ALLOCA): New. * configure.in: Replace all alloca logic with a simple use of the above new macro. * config.table: Kill *-*-beos* entry. * config/mh-beos: Delete. * configure, config.in: Regenerate. * Makefile.in (ALLOCA, HFILES): Kill. (REQUIRED_OFILES): Add alloca.o. (alloca.o): Depend on libiberty.h. (argv.o): Don't depend on alloca-conf.h. * alloca-conf.h: Delete. * alloca.c: Include libiberty.h. Kill all #ifdef emacs blocks. Provide the C alloca unconditionally. Use PTR where appropriate. Make i00afunc static. * argv.c: Don't include alloca-conf.h. 2001-03-04 John David Anglin * cplus-dem.c (main): Cast enum style to int. 2001-02-16 Loren J. Rittle * cplus-dem.c (main): Initialize style. 2001-02-02 Phil Edwards * COPYING.LIB: Update to LGPL 2.1 from the FSF. 2001-01-31 Bryce McKinlay Add support for Java demangling under the v3 ABI: * cp-demangle.c (NAMESPACE_SEPARATOR): New define. (struct demangling_def): Add `style' field. (demangling_new): New parameter `style'. Set it in demangling_t. (demangle_prefix): Use NAMESPACE_SEPARATOR. (demangle_type_ptr): Don't emit pointer symbol if doing Java output. (cp_demangle): New parameter `style'. Pass it to demangling_new(). (main): Call cp_demangle with extra parameter. (java_demangle_v3): New function. (java_builtin_type_names): New. Table of primitive type names used for Java demangling. (demangle_builtin_type): Look up in java_builtin_type_names if doing Java output. * cplus-dem.c (cplus_demangle): Use java_demangle_v3 to do Java demangling. (long_options): Remove obsolete `java' option. (main): Remove explicit handling of `java' option. Instead, pass style parameter in cplus_demangle flags as gdb does. * testsuite/demangle.expected: Add some Java test cases. 2000-12-29 DJ Delorie * fnmatch.c: Make the note about the origins of this file more accurate, at least until we can sync with glibc. * getopt.c: Ditto. * getopt1.c: Ditto. * md5.c: Ditto. * obstack.c: Ditto. 2000-12-26 Michael Sokolov * bsearch.c: New file. * configure.in (funcs): Add bsearch. (AC_CHECK_FUNCS): Likewise. * configure, config.in: Regenerate. 2000-12-13 Michael Sokolov * safe-ctype.c: #include "ansidecl.h". * strtod.c: Likewise. 2000-12-13 Michael Sokolov * strtoul.c: Include safe-ctype.h, not ctype.h. 2000-12-07 Zack Weinberg * safe-ctype.c: New file. * Makefile.in (CFILES): Add safe-ctype.c. (REQUIRED_OFILES): Add safe-ctype.o. * argv.c: Define ISBLANK and use it, not isspace. * basename.c, cplus-dem.c, fnmatch.c, pexecute.c, strtod.c, strtol.c, strtoul.c: Include safe-ctype.h, not ctype.h. Use uppercase ctype macros. Don't test ISUPPER(c)/ISLOWER(c) before calling TOLOWER(c)/TOUPPER(c). 2000-12-07 Mike Stump * Makefile.in (distclean): When cleaning, remove testsuite. 2000-12-05 Jason Merrill * cp-demangle.c (cplus_demangle_v3): Check that it's a v3 mangled name before allocating the dyn_string. 2000-12-04 Jason Merrill * cp-demangle.c: s/new_abi/v3/. * cplus-dem.c: Likewise. (current_demangling_style): Now auto_demangling. (cplus_demangle): Try v3 demangling if AUTO_DEMANGLING. (main): Use standard symbol chars for auto_demangling. 2000-11-26 Mark Mitchell * hashtab.c (higher_prime_number): Use a table, rather than a seive, to find the next prime. 2000-11-22 H.J. Lu * cplus-dem.c (main): Handle gnat_demangling. 2000-11-22 Zack Weinberg * aclocal.m4 (LIB_AC_PROG_CC): Moved here from configure.in. (AC_DEFINE_NOAUTOHEADER): New - work around bug in autoheader. * configure.in: Call AC_C_INLINE and AC_C_CONST. Use three argument form of AC_DEFINE in dummy definitions block. Use AC_DEFINE_NOAUTOHEADER for real definitions of things defined in dummy block. Preload cache variables instead of bypassing tests, where possible. * acconfig.h: Removed. * xmalloc.c (xmalloc_failed): New function, does error reporting on failed allocation. (xmalloc, xcalloc, xrealloc): Use it. 2000-11-21 Hans-Peter Nilsson * cplus-dem.c (cplus_demangle): Fix formatting. (grow_vect): Ditto. (ada_demangle): Ditto. (internal_cplus_demangle): Ditto. (mop_up): Ditto. 2000-11-21 H.J. Lu * cplus-dem.c (main): Handle java_demangling. 2000-11-19 Kaveh R. Ghazi * cplus-dem.c (grow_vect): Prototype. (ada_demangle): Cast the arg of ctype macros to unsigned char. 2000-11-15 Hans-Peter Nilsson * cplus-dem.c (ada_demangle): Add back ATTRIBUTE_UNUSED for parameter `option'. 2000-11-15 Kenneth Block * cplus-dem.c: Eliminate use of DEFUN, it is obsolete and cannot be used in GCC. 2000-11-15 Kenneth Block * cplus-dem.c: Add gnat demangler. Add java to demangle style list. 2000-11-04 Hans-Peter Nilsson * hashtab.c (htab_expand): Change to return int. Use calloc or xcalloc depending on htab->return_allocation_failure. Return zero if calloc fails. (htab_create): Update comment to cover memory allocation. (htab_try_create): New. (htab_find_slot_with_hash): Return NULL if htab_expand fails. Update comment to cover this. 2000-11-03 Hans-Peter Nilsson * hashtab.c: Change void * to PTR where necessary. (htab_create, htab_expand): Correct formatting of comment before function. 2000-10-22 Alex Samuel * cp-demangle.c (string_list_def): Add caret_position and comments. (result_caret_pos): New macro. (result_append_string): Rename to... (result_add_string): ... this, and insert at caret position. Rename throughout. (result_append): Rename to... (result_add): ... this, and insert at caret position. Rename throughout. (result_append_char): Rename to... (result_add_char): ... this, and insert at caret position. Rename throughout. (result_append_space): Remove. (string_list_new): Initialize caret position. (result_add_separated_char): Use caret position. (result_get_caret): New funtion. (result_set_caret): Likewise. (result_shift_caret): Likewise. (result_previous_char_is_space): Likewise. (substitution_start): Use caret position. (substitution_add): Likewise. (demangling_new): Initialize caret position. (demangle_encoding): Use caret position. (demanglin_nested_name): Put CV qualifiers after name. (demangle_type_ptr): Use switch statement. Handle pointers to arrays. Don't use result_append_space. Use caret position. (demangle_type): Emit CV qualifiers after underlying type. Adjust call to demangle_array_type. (demangle_array_type): Add parameter to handle pointers to arrays. 2000-10-01 Mark Mitchell * splay-tree.c (splay_tree_insert): Fix formatting. 2000-09-16 Mark Mitchell * splay-tree.c (splay_tree_predecessor): Fix typo in comment. 2000-09-14 Michael Sokolov * splay-tree.c: #include . 2000-09-14 Hans-Peter Nilsson * testsuite/demangle-expected: Add two tests for anonymous namespaces. * cplus-dem.c (gnu_special): Handle anonymous namespaces. 2000-09-10 Mark Mitchell * splay-tree.c (splay_tree_predecessor): New function. (splay_tree_successor): Likewise. 2000-09-10 Hans-Peter Nilsson * testsuite/demangle-expected: Add four tests for type_info mangling. * cplus-dem.c (gnu_special): Use do_type, not demangle_fund_type, for a non-template non-qualified type_info function or node. 2000-09-08 Alex Samuel * cp-demangle.c: Fix copyright banner. 2000-09-07 Michael Sokolov * md5.c: #include "ansidecl.h". 2000-09-06 Alex Samuel * cp-demangle.c (status_allocation_failed): Rearrange whitespace. (demangle_type): Handle substitution candidates correctly in the face of special substitutions. 2000-09-05 Alex Samuel * cp-demangle.c (demangle_encoding): Rename variable. (demangle_name): Rename parameter. Handle return type suppression. (demangle_nested_name): Rename parameter. (demangle_prefix): Likewise. Change return type suppression. (demangle_unqualified_name): Add parameter. Flag constructors and conversion operators. (demangle_special_name): Fix comment. (demangle_type): Rename variable. (demangle_bare_function_type): Check for missing return type and parameter. (demangle_class_enum_type): Rename parameter. (demangle_discriminator): Fix misspelling in comment. 2000-08-31 DJ Delorie * configure.in (Cygwin): special case cygwin only when we're building cygwin, not when we're hosting cygwin. 2000-09-04 Alex Samuel * cp-demangle.c (demangle_template_arg): Eat an `E' after an . 2000-09-04 Alex Samuel * cp-demangle.c (demangle_type_ptr): Increment position past pointer and reference characters. 2000-09-04 Alex Samuel * cp-demangle.c (demangle_nv_offset): New function. (demangle_v_offset): Likewise. (demangle_call_offset): Likewise. (demangle_special_name): Update thunk demangling to comply with ABI changes. 2000-09-03 Alex Samuel * cp-demangle.c (ANONYMOUS_NAMESPACE_PREFIX): New macro. (substitution_def): Remove template_parm_number. (NOT_TEMPLATE_PARM): Remove. (result_insert_string): New macro. (result_insert): Likewise. (result_insert_char): Likewise. (substitution_add): Remove last parameter. Don't store template parm number. (BFT_NO_RETURN_TYPE): Define as NULL. (demangle_encoding): Adjust call to demangle_bare_function_type. (demangle_name): Adjust substitution. Adjust call to substitution_add. (demangle_prefix): Adjust call to substitution_add. (demangle_identifier): Handle anonymous namespaces. (demangle_operator_name): Change demangling of vendor-extended operator to match ABI changes. (demangle_type_ptr): Change parameters. Make recursive. Handle substitutions here. (demangle_type): Adjust calls to demangle_template_param, substitution_add, and demangle_type_ptr. Fix substitution of templated types. (demangle_function_type): Change parameter to a pointer. (demangle_bare_function_type): Likewise. Adjust insertion point. (demangle_template_param): Remove last parameter. (demangle_expr_primary): Remove unused variable. Adjust call to demangle_template_param. (is_mangled_char): Accept `$' and `.'. * cplus-dem.c (gnu_new_abi_symbol_characters): Add '$' and '.'. * dyn-string.c (dyn_string_insert_char): New function. 2000-08-31 Hans-Peter Nilsson * testsuite/demangle-expected: Add nine tests for underscore-after-number followed by five tests for name-signature delimiter. 2000-08-28 Richard Henderson * Makefile.in (md5.o): Depend on config.h. 2000-08-28 Jason Merrill * Makefile.in (REQUIRED_OFILES): Add md5.o. (CFILES): Add md5.c. * md5.c: New file. 2000-08-27 Alex Samuel * cp-demangle.c (demangle_name): Initialize template_p in local name case. Don't re-add substitutions as candidates. (demangle_nested_name): Use . (demangle_prefix): Likewise. Don't add template names as substitution candidates twice, or re-add a substitution or the last prefix component. (demangle_local_name): Adjust output format. 2000-08-25 Alex Samuel * cp-demangle.c (result_add_separated_char): Change parameter to int. (substitution_add): Don't check for duplicates. Check if previously allocated size is zero. (demangle_name): Remove duplicate check for std substitution. Clear template flag appropriately. (demangle_prefix): Remove argument to demangle_substitution. Don't check that template flag is already set. (demangle_operator_name): Add pt operator. (demangle_type): Don't treat r as built-in type. Remove argument to demangle_substitution. Fix substitution candidate mechanics. Handle s. Improve comments. (demangle_template_param): Don't handle template arg lists here. (demangle_substitution): Remove parameter. (print_usage): Remove extra fprintf option. 2000-08-24 Greg McGary * libiberty/random.c (end_ptr): Revert previous change. 2000-08-24 Greg McGary * libiberty/cplus-dem.c (cplus_demangle_opname, cplus_mangle_opname, demangle_expression, demangle_function_name): Use ARRAY_SIZE. * libiberty/random.c (end_ptr): Likewise. 2000-08-23 Alex Samuel * cp-demangle.c (result_close_template_list): Remove function. (result_add_separated_char): New function. (result_open_template_list): New macro. (result_close_template_list): Likewise. (demangle_prefix): Don't set template_p if the prefix ends with a ctor name. (demangle_type_ptr): Remove duplicate RETURN_IF_ERROR. (demangle_type): Check for template args after substitution. (demangle_template_args): Use result_open_template_list. 2000-08-02 Zack Weinberg * pexecute.c: Don't use vfork. Initialize 'pid' before retry loop. 2000-07-26 Dave Pitts * config/mh-openedition.h: Added -DLE370 definition. 2000-07-26 Mark Elbrecht * pexecute.c (pexecute) [__MSDOS__]: Change __GO32__ to __DJGPP__. Use P_WAIT instead of constant in the spawnv* call. Cast program to 'char *' in errmsg_arg assignment. (PWAIT_ERROR): Define. (pwait): Use PWAIT_ERROR. Adjust DJGPP's status code to conform to DJGPP's WIF* macros. 2000-07-27 RodneyBrown Jeff Law * getcwd.c: Include string.h, stdlib.h for prototypes * Makefile.in (rename.o, waitpid.o): Depend on config.h * rename.c: Include config.h, unistd.h * waitpid.c: Include config.h, sys/wait.h 2000-07-24 Hans-Peter Nilsson * cplus-dem.c (work_stuff_copy_to_from): New. (delete_non_B_K_work_stuff): New. (delete_work_stuff): New. (mop_up): Break out work_stuff partly destruction to delete_non_B_K_work_stuff. (iterate_demangle_function): New. (demangle_prefix): Call iterate_demangle_function instead of demangle_function_name. Leave handling of name-signature __-delimiters to iterate_demangle_function. (demangle_integral_value): Strip an optional following underscore cautiously. Handle negative numbers. 2000-07-24 Daniel Berlin * cplus-dem.c (demangle_signature): Change if (GNU_DEMANGLING) to if (AUTO_DEMANGLING || GNU_DEMANGLING) 2000-07-21 Alex Samuel * cp-demangle.c (demangle_ctor_dtor_name): Remove not-in-charge allocating ctor mangling. (demangle_array_type): Handle empty and non-constant array length. 2000-07-23 Michael Sokolov Jeff Law * configure.in (AC_CHECK_HEADERS): Add time.h. (AC_HEADER_TIME): Add check. * configure, config.in: Regenerate. * getruntime.c: Portably #include and/or . * configure.in (AC_CHECK_HEADERS): Add limits.h. * configure, config.in: Regenerate. * sort.c: Portably #include and/or . * strtol.c, strtoul.c: #include "config.h". Portably #include and/or . * Makefile.in (strtol.o, strtoul.o): Update dependencies. * aclocal.m4 (libiberty_AC_DECLARE_ERRNO): New macro. * configure.in (libiberty_AC_DECLARE_ERRNO): Add check. * configure, config.in: Regenerate. * pexecute.c, strtol.c, strtoul.c: Declare errno if necessary. * cp-demangle.c, mkstemps.c: #include . 2000-07-21 Mike Stump * Makefile.in (xexit.o): Add dependency for config.h in xexit.c. * (vasprintf.o): Add dependency for config.h in vasprintf.c. 2000-07-21 Kaveh R. Ghazi * cp-demangle.c (cp_demangle_type): Wrap in IN_LIBGCC2. * setenv.c (setenv): Initialize variable `ep'. * sigsetmask.c (abort): Prototype. * vasprintf.c: Include config.h. Check ANSI_PROTOTYPES, not __STDC__ for stdarg.h include. (int_vasprintf): Prototype. (checkit): Prototype. Use VPARAMS/ANSI_PROTOTYPES/VA_START in definition. Cast `global_total_width' in comparison. (main): Prototype. Return a value. * vfork.c (fork): Prototype. * xexit.c: Include config.h. 2000-07-20 Joseph S. Myers * cplus-dem.c (demangle_fund_type): Make 'dec' an unsigned int, and print it with %u. 2000-07-17 Hans-Peter Nilsson * testsuite/regress-demangle (failed test): Show result and expected output. 2000-07-07 Andrew Haley * cplus-dem.c (main): fflush() after emitting last char before waiting for input. 2000-06-28 Alex Samuel * cp-demangle.c (demangle_encoding): Accept no substitutions. (demangle_name): Handle followed by . (demangle_type): Follow special substitutions with (demangle_subtitution): Set template_p for special substitutions. (main): Fix typos. 2000-06-27 Alex Samuel * cp-demangle.c (demangle_special_name): Swap base and derived class when demangling construction vtables. 2000-06-21 Alex Samuel * cp-demangle.c: Don't include ctype.h. (IS_DIGIT): New macro. (IS_ALPHA): Likewise. Use IS_DIGIT and IS_ALPHA throughout instead of isdigit and isalpanum. (demangling_def): Make name and next const pointers. (STATUS_ALLOCATION_FAILED): New status code. (dyn_string_append_space): Handle failure in dyn_string_append_char. (int_to_dyn_string): Likewise. Change return value to status_t. (string_list_new): Handle failure of dyn_string_init. (result_close_template_list): Change return type to status_t. Handle failure in dyn_string_append. (result_push): Change return value to status_t. Handle failure in string_list_new. Handle failure of result_push throughout. (substitution_add): Change return value to status_t. Handle dyn_string failures. Handle failure of substitution_add throughout. (template_arg_list_new): Return NULL on allocation failure. (result_append_string): Return STATUS_ALLOCATION_FAILED on error. Handle error result throughout. (result_append): Likewise. (result_append_char): Likewise. (result_append_space): Likewise. (demangling_new): Make argument a const pointer. Handle allocation failures. (demangle_template_args): Handle failure in template_arg_list_new and result_close_template_list. (demangle_discriminator): Return if int_to_dyn_string fails. (cp_demangle): Likewise. (cp_demangle_type): New function. (cplus_demangle_new_abi): Don't call dyn_string_delete. Abort on memory allocation failure. (main): Likewise. * dyn-string.c (RETURN_ON_ALLOCATION_FAILURE): Define if IN_LIBGCC2. (dyn_string_init): Change return value to int. Handle RETURN_ON_ALLOCATION_FAILURE case. (dyn_string_new): Handle RETURN_ON_ALLOCATION_FAILURE case. (dyn_string_release): Delete the dyn_string. (dyn_string_resize): Handle RETURN_ON_ALLOCATION_FAILURE case. (dyn_string_copy): Change return type to int. (dyn_string_copy_cstr): Likewise. (dyn_string_prepend): Likewise. (dyn_string_prepend_cstr): Likewise. (dyn_string_insert): Likewise. (dyn_string_insert_cstr): Likewise. (dyn_string_append): Likewise. (dyn_string_append_cstr): Likewise. (dyn_string_append_char): Likewise. (dyn_string_substring): Likewise. 2000-06-09 Zack Weinberg * cp-demangle.c (demangle_operator_name): Add spaces before names beginning with a letter: delete, delete[], new, new[], sizeof. (demangle_special_name): Handle TF and TJ . Thu Jun 8 18:52:24 2000 Philippe De Muyter * cp-demangle.c (template_arg_list_new): Revert previous PARAMS patch. Thu Jun 8 09:25:54 2000 Philippe De Muyter * cp-demangle.c (stdio.h): File included unconditionaly. (template_arg_list_new): Parameter list is PARAMS ((void)), not (). * dyn-string.c (stdio.h): File included. * partition.c (partition_print): No `&' needed to take the address of a function. 2000-06-07 Kaveh R. Ghazi * configure.in (ac_libiberty_warn_cflags): Add -pedantic. * choose-temp.c (try, choose_temp_base, make_temp_file): Constify. * cp-demangle.c (demangle_char): Change parameter from char to int. (demangle_expression, demangle_expr_primary): Remove extra semi-colon in prototype. * dyn-string.c (dyn_string_append_char): Change parameter from char to int. * memcmp.c (memcmp): Constify. * mkstemps.c (gcc_uint64_t): Mark GNUC `long long' case with __extension__. * partition.c (elem_compare): Prototype. Don't cast away const-ness. * setenv.c (setenv): Use braces to avoid ambiguous `else'. 2000-06-07 Kaveh R. Ghazi * Makefile.in (cp-demangle.o): Depend on $(INCDIR)/demangle.h. * cp-demangle.c: Include demangle.h. (template_arg_list_new): DeANSIfy. (cp_demangle): Make static and add prototype. (operator_code, operators): Constify. (demangle_operator_name): Likewise for variables `p1', `p2' and `p'. 2000-06-05 Alex Samuel * cp-demangle.c (demangle_prefix): Cast argument to isdigit to unsigned char. (demangle_unqualified_name): Likewise. (demangle_number_literally): Likewise. (demangle_type): Likewise. (demangle_substitution): Likewise. (is_mangled_char): Likewise, for isalnum. 2000-06-04 Alex Samuel * Makefile.in (CFILES): Add cp-demangle.c and dyn-string.c. (REQUIRED_OFILES): Add cp-demangle.o and dyn-string.o. (cp-demangle.o): New dependency. (dyn-string.o): Likewise. * dyn-string.c: Move here from gcc/dyn-string.c. Add new functions. * cplus-dem.c (libiberty_demanglers): Add initializer for new-ABI demangler. (cplus_demangle): Call cplus_demangle_new_abi if in new-ABI demangling mode. (gnu_new_abi_symbol_characters): New function. (main): Use gnu_new_abi_symbol_characters. * cp-demangle.c: New file. * cp-demangle.c: New file. Tue May 30 16:45:25 2000 Andrew Cagney * floatformat.c: Add name to each floatformat field. Tue May 30 15:07:52 2000 Jeffrey A Law (law@cygnus.com) * Makefile.in (objalloc.o): Depend on config.h 2000-05-29 Zack Weinberg * hashtab.c, partition.c, sort.c, xmemdup.c: Include string.h if HAVE_STRING_H. * pexecute.c, xexit.c: Include stdlib.h if HAVE_STDLIB_H. * objalloc.c: Include config.h. Include stdlib.h and don't declare malloc or free if HAVE_STDLIB_H. * strerror.c, strsignal.c: Include stdlib.h if HAVE_STDLIB_H, else declare malloc without prototype. Include string.h if HAVE_STRING_H, else declare memset without prototype. Don't include stddef.h. 2000-05-23 Mike Stump * Makefile.in (xmalloc.o): Add dependency for config.h, fixes make -j3. 2000-05-18 J. David Anglin * xmalloc.c: Include config.h for HAVE_SBRK definition. 2000-05-16 Horst von Brand * hashtab.c (hash_pointer): Delete low-order bits which are probably zero, also eliminate a warning on alpha. 2000-05-15 David Edelsohn * Makefile.in: Change "pic" to depend on $(PICFLAG), not on $(enable_shared). 2000-05-10 Jakub Jelinek * config.table: Use mh-sparcpic for sparc*-*-*. 2000-05-08 Nick Clifton * Makefile.in (CFILES): Add strncmp.c. (NEEDED): Add strncmp. 2000-05-04 Kaveh R. Ghazi * cplus-dem.c (cplus_demangle_opname, demangle_function_name): Cast the arguments to `islower' to `unsigned char'. (print_demangler_list): Prototype. Thu May 4 17:14:41 2000 Philippe De Muyter * sort.c (UCHAR_MAX): Provide fallback definition. 2000-04-29 Alexandre Oliva * Makefile.in (maintainer-clean-subdir): Fix handling of empty SUBDIRS. 2000-04-28 Kenneth Block Jason Merrill * cplus-dem.c (libiberty_demanglers): New table for demangle styles. (cplus_demangle_set_style): New function for setting style. (cplus_demangle_name_to_style): New function to translate name. 2000-04-27 Kaveh R. Ghazi * aclocal.m4: New file with new test libiberty_AC_FUNC_STRNCMP. * configure.in (AC_CHECK_HEADERS): Add sys/mman.h fcntl.h. (libiberty_AC_FUNC_STRNCMP): Invoke. * strncmp.c: New file. Thu Apr 27 16:58:43 MET DST 2000 Jan Hubicka * hashtab.c (htab_expand): Add prototype. (find_empty_slot_for_expand): Likewise. 2000-04-24 Kaveh R. Ghazi * hashtab.c (hash_pointer, eq_pointer): Make definition static to match prototype. (htab_expand): Cast the return value of xcalloc. 2000-04-24 Mark Mitchell * hashtab.c (hash_pointer): New function. (eq_pointer): Likewise. (htab_hash_pointer): New variable. (htab_eq_pointer): Likewise. 2000-04-23 Mark Mitchell * sort.c (sort_pointers): Fix endianness bugs. * sort.c: New file. * Makefile.in (CFILES): Add sort.c (REQUIRED_OFILES): Add sort.o. (sort.o): New target. 2000-04-21 Michael Sokolov * Makefile.in (*-subdir): Revamp slightly to avoid losing on 4.3BSD systems. Tue Apr 18 16:23:31 2000 Richard Kenner * hashtab.c: Various minor cleanups. (htab_find_slot_with_hash): INSERT is now enum insert_option. (htab_find_slot): Likewise. 2000-04-16 Dave Pitts * cplus-dem.c (cplus_demangle_opname): Changed to use islower. 2000-04-05 Richard Henderson * splay-tree.c (splay_tree_remove): New. 2000-03-30 Mark Mitchell * hashtab.c (find_empty_slot_for_expand): Use hashval_t for hash codes. (htab_find_with_hash): Likewise. (htab_find_slot_with_hash): Likewise. 2000-03-29 Zack Weinberg * hashtab.c (htab_find_with_hash): Avoid calculating hash2 unless it will be used. Rearrange loop for better optimization. (higher_prime_number): Add static prototype. Thu Mar 16 01:33:58 2000 Jeffrey A Law (law@cygnus.com) * Makefile.in (partition.o): Depend on config.h 2000-03-14 Bernd Schmidt * hashtab.c (find_empty_slot_for_expand): New function. (htab_expand): Use it instead of htab_find_slot. (htab_find_with_hash): Renamed from htab_find; now accepts extra argument HASH. (htab_find_slot_with_hash): Likewise for htab_find_slot. (htab_find): New wrapper function. (htab_find_slot): Likewise. (htab_traverse): Pass slot, not entry, to called function. 2000-03-09 Alex Samuel * Makefile.in (CFILES): Add partition.c. (REQUIRED_OFILES): Add partition.o. (partition.o): New rule. * partition.c: New file. 2000-03-09 Zack Weinberg * hashtab.c (htab_create): Set del_f. (htab_delete, htab_empty, htab_remove_elt, htab_clear_slot): Use it. 2000-03-08 Zack Weinberg * hashtab.c: Remove debugging variables (all_searches, all_collisions, all_expansions). Delete all_hash_table_collisions. (create_hash_table, delete_hash_table, empty_hash_table, find_hash_table_entry, remove_element_from_hash_table_entry, clear_hash_table_slot, traverse_hash_table, hash_table_size, hash_table_elements_number, hash_table_collisions): Rename to: htab_create, htab_delete, htab_empty, htab_find_slot, htab_remove_elt, htab_clear_slot, htab_traverse, htab_size, htab_elements, htab_collisions. (htab_find): New function, handles common case where you don't plan to add or delete an entry. (htab_expand): Don't create a whole new table, just a new entry vector. (htab_find_slot): Simplify logic. 1999-08-03 Ian Lance Taylor * floatformat.c: Add casts to avoid signed/unsigned warnings. * pexecute.c: Add ATTRIBUTE_UNUSED as needed on Unix. * Makefile.in (install_to_libdir): Change $(TARGETLIB).n to $(TARGETLIB)n so it works on MSDOS. (install_to_tooldir): Likewise. 1999-07-21 Ian Lance Taylor From Mark Elbrecht: * makefile.dos: Remove; obsolete. * configure.bat: Remove; obsolete. 1999-07-11 Ian Lance Taylor * splay-tree.c (splay_tree_insert): Add initialization to avoid warning. 2000-01-04 Mumit Khan * pexecute.c: Conditionally include string.h. (fix_argv): Handle embedded whitespace in args for Mingw32. 2000-01-04 Kaveh R. Ghazi * configure.in (ac_libiberty_warn_cflags): Turn on warnings if we're using gcc. * Makefile.in (COMPILE.c): Add @ac_libiberty_warn_cflags@ 1999-12-27 Geoff Keating * vasprintf.c (int_vasprintf): Don't re-read the format character as this mishandles strings like '%%s'. 1999-12-05 Mark Mitchell * splay-tree.c (splay_tree_new): Use struct splay_tree_node_s rather than struct splay_tree_node. (splay_tree_insert): Use struct splay_tree_s rather than struct splay_tree. Sun Nov 28 00:59:39 1999 Philippe De Muyter * hashtab.c (sys/types.h): File included. 1999-11-22 Jason Merrill * strtoul.c, strtol.c, random.c: Remove advertising clause from BSD license, pursuant with ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change Wed Nov 10 09:42:39 1999 Jeffrey A Law (law@cygnus.com) * hashtab.c: Include stdio.h. Mon Nov 8 09:23:41 1999 Jeffrey A Law (law@cygnus.com) * hashtab.c (traverse_hash_table): Protect prototype with PARAMS. Tue Nov 2 03:23:13 1999 Philippe De Muyter * xstrdup (sys/types.h): Include this file. 1999-10-28 Nathan Sidwell * Makefile.in (SUBDIRS): New macro. (mostlyclean, clean, distclean, maintainer-clean): Adjust to avoid multiple subdirectory cleaning. (*-subdir): Use SUBDIRS. 1999-10-25 Jim Kingdon * cplus-dem.c: Move declarations of standard_symbol_characters and hp_symbol_characters inside #ifdef MAIN to avoid compiler warnings. 1999-10-23 08:51 -0700 Zack Weinberg * hashtab.c (find_hash_table_entry): When returning a DELETED_ENTRY slot, change it to EMPTY_ENTRY first. (clear_hash_table_slot): New function which deletes an entry by its position in the table, not its value. (traverse_hash_table): New function which calls a hook function for every live entry in the table. 1999-10-19 Mark Mitchell * cplus-dem.c (INTBUF_SIZE): New macro. (string_append_template_idx): New function. (demangle_expression): Likewise. (demangle_integral_value): Use it. (demangle_real_value): New function, split out from ... (demangle_template_value_parm): ... here. Use string_append_template_idx. Use demangle_real_value. (demangle_template): Use string_append_template_idx. (demangle_qualified): Use consume_count_with_underscores. (get_count): Tweak formatting. (do_type): Use string_append_template_idx. 1999-10-18 Kaveh R. Ghazi * calloc.c: Add a public domain notice. Mon Oct 18 02:30:47 1999 Philippe De Muyter * setenv.c (sys/types.h, stdio.h): Include those files unconditionaly. Fri Oct 15 01:47:51 1999 Vladimir Makarov * Makefile.in (CFILES): Add hashtab.c (REQUIRED_OFILES): Add hashtab.o (hashtab.o): Add dependencies. * hashtab.c: New file Wed Oct 13 01:16:47 1999 Mumit Khan * basename.c (DIR_SEPARATOR): New macro. (DIR_SEPARATOR_2): Likewise. (HAVE_DOS_BASED_FILESYSTEM): Likewise. (IS_DIR_SEPARATOR): Likewise. (main): Handle MSDOS style pathname. 1999-10-11 Mark Mitchell * cplus-dem.c (do_type): Handle pointer to member types whose enclosing classes have namespace scope. Sun Oct 10 01:23:50 1999 Marc Espie * config.table: Provide a backup shell for executing move-if-change. 1999-10-02 Mark Mitchell * xmalloc.c (xmalloc): Fix spelling error. (xcalloc, xrealloc): Likewise. 1999-10-02 Kaveh R. Ghazi * cplus-dem.c (fancy_abort, demangle_integral_value, demangle_arm_hp_template, recursively_demangle, standard_symbol_characters, hp_symbol_characters, main): Add prototype. (program_name, program_version, fatal): Constify a char*. (usage, fatal): Mark with ATTRIBUTE_NORETURN. (main): Call return, not exit. 1999-09-25 Kaveh R. Ghazi * choose-temp.c: Remove obsolete comment about gcc. (make_temp_file): Constify a char*. Wed Sep 8 20:03:28 1999 Kaveh R. Ghazi * xmemdup.c: Include sys/types.h. 1999-09-07 Jeff Garzik * xmemdup.c: New xmemdup function. * Makefile.in, makefile.vms, vmsbuild.com: Use xmemdup.[co]. Tue Sep 7 23:32:18 1999 Linas Vepstas * config.table: Add openedition target. * config/mh-openedition: New file. Thu Sep 2 01:36:12 1999 Marc Espie * pexecute.c (pexecute): Fill in temp_base when needed. 1999-08-31 Richard Henderson * getpwd.c: Check HAVE_GETCWD before defining it away. 1999-08-30 Kaveh R. Ghazi * Makefile.in (CFILES): Add calloc.c and getpwd.c. (REQUIRED_OFILES): Add getpwd.o. (getpwd.o): Add target. * configure.in (AC_PREREQ): Bump to 2.13. (AC_CHECK_HEADERS): Add check for . * getpwd.c: New file, moved here from gcc. 1999-08-25 Kaveh R. Ghazi * cplus-dem.c (gnu_special): Cast a `size_t' to `long' when comparing against a signed quantity. (arm_special): Likewise. (demangle_fund_type): Likewise. (do_hpacc_template_const_value): Mark parameter `work' with ATTRIBUTE_UNUSED. (main): Constify variable `valid_symbols'. Tue Aug 24 02:50:45 1999 Philippe De Muyter * strtoul.c (strtoul): Add parentheses around && within ||. Fri Aug 6 23:32:29 1999 Daniel Jacobowitz * Makefile.in (FLAGS_TO_PASS): Include prefix, exec_prefix, libdir, libsubdir and tooldir. 1999-08-01 Mark Mitchell * splay-tree.c (splay_tree_insert): Return the new node. 1999-07-14 Richard Henderson * argv.c: Include stdlib.h and string.h instead of prototyping directly. * choose-temp.c: Conditionally include string.h. 1999-07-12 Jason Merrill * Makefile.in (NEEDED): Add bcmp, bcopy, bzero. 1999-07-11 Ian Lance Taylor * splay-tree.c (splay_tree_insert): Add initialization to avoid warning. 1999-07-07 Jason Merrill * Makefile.in (needed-list): Only include stuff we actually need for libstdc++. 1999-06-21 Andreas Schwab * configure.in (checkfuncs): Add gettimeofday. * config.in, configure: Regenerated. Mon Jun 21 05:56:01 1999 Mumit Khan * configure.in (*-*-uwin*): UWIN has sys_{errlist,nerr} even if the test fails. * configure: Regenerate. 1999-06-10 Mike Stump * Makefile.in (setenv.o): Add config.h dep for setenv.o to fix parallel builds. 1999-05-28 Kaveh R. Ghazi * putenv.c: Include ansidecl.h to define `const'. * setenv.c: Likewise. Wed May 26 03:58:20 1999 "Melissa O'Neill" * Makefile.in (CFILES): Add putenv.c and setenv.c. * configure.in (funcs): Add putenv and setenv. (AC_CHECK_FUNCS): Check for putenv and setenv. * configure: Rebuilt. * putenv.c setenv.c: New files. * getcwd.c (getcwd): If pathname is NULL, then obtain SIZE bytes of space using malloc. Mon May 17 01:42:34 1999 Stu Grossman * cplus-dem.c (demangle_fund_type (near 'I' case)): Don't advance the *mangled pointer beyond the end of the string. Clean up code to match prevailing coding style. 1999-05-13 Michael Hayes * tmpnam.c (L_tmpnam): Fix typo. Thu May 13 01:14:46 1999 Marc Espie * cplus-dem.c (standard_symbol_characters): Renamed from standard_symbol_alphabet. No longer modify TABLE. (hp_symbol_characters): Renamed from hp_symbol_alphabet. No longer modify TABLE. (main): Corresponding changes. Use strchr to determine if a character is valid. 1999-05-11 Jim Blandy * cplus-dem.c (main): Use table lookup to distinguish identifier characters from non-identifier characters. (standard_symbol_alphabet, hp_symbol_alphabet): New functions. Thu May 6 20:34:42 1999 Fred Fish * configure.in (sys/resource.h): Add to AC_CHECK_HEADERS list. * getruntime.c: Only attempt to include sys/resource.h and use getrusage if both HAVE_GETRUSAGE and HAVE_SYS_RESOURCE_H are defined. Mon Apr 26 01:36:06 1999 Donn Terry (donn@interix.com) * configure.in (alloca detection): Handle alloca directly for interix. * configure: Rebuilt. Sun Apr 25 01:18:21 1999 Mumit Khan * choose-temp.c (DIR_SEPARATOR): Use '\\' only for native windows32. 1999-04-20 Jim Blandy Fix from Dale Hawkins: * cplus-dem.c (mop_up): Set typevec_size to zero, so it'll be reallocated properly if we use it again. * cplus-dem.c (demangle_fund_type): Check for buffer overrun. Be stricter about syntax. Always null-terminate string. Thu Apr 15 23:00:55 1999 Mumit Khan * configure.in (checkfuncs): Check for sbrk. * config.in: Rebuilt. * configure: Likewise. * xmalloc.c: Use HAVE_SBRK instead of the host specific definitions. 1999-04-12 Jim Blandy Fix from Marcus Daniels: * cplus-dem.c (demangle_fund_type): Don't run off the end of the identifier looking for another underscore. Sun Apr 11 23:20:59 1999 Mumit Khan * pexecute.c: Change all references to __UWIN__ to _UWIN. * xmalloc.c: Likewise. (xcalloc): UWIN has sbrk. (xrealloc): Fix guard macro. 1999-04-11 Richard Henderson * alloca-conf.h (alloca) [C_ALLOCA]: Don't use Gcc builtin or . * clock.c (GNU_HZ): New definition. (clock): Use it. * getruntime.c: Likewise. * config.table: Use mh-beos. * config/mh-beos: New file. 1999-04-11 Mark Mitchell * cplus-dem.c (demangle_template_value_parm): Handle pointers-to-members. (do_type): Handle template parameters as qualifiers. 1999-04-01 Jim Blandy * cplus-dem.c: Attempt to handle overflows in counts with some semblance of grace. (consume_count): Detect overflows. Return -1 to indicate errors, instead of zero. (demangle_template_value_parm, demangle_template): Handle change to consume_count's return convention. 1999-04-05 Tom Tromey * testsuite/regress-demangle: New file. * testsuite/demangle-expected: New file. * Makefile.in (all, check, installcheck, info, install-info, clean-info, dvi, install, etags, tags, mostlyclean, clean, distclean, maintainer-clean, realclean): Depend on corresponding `-subdir' target. (all-subdir check-subdir installcheck-subdir info-subdir install-info-subdir clean-info-subdir dvi-subdir install-info-subdir etags-subdir mostlyclean-subdir clean-subdir distclean-subdir maintainer-clean-subdir): New target. * testsuite/Makefile.in: New file. * configure: Rebuilt. * configure.in: Create testsuite/Makefile. 1999-04-02 Mark Mitchell * splay-tree.h (splay_tree_compare_pointers): Define. 1999-03-30 Mark Mitchell * splay-tree.c (splay_tree_compare_ints): Define. 1999-03-30 Tom Tromey * cplus-dem.c (consume_count): If `count' wraps, return 0 and don't advance input pointer. (demangle_class_name): If consume_count didn't find a count, do nothing. Don't bother with `strlen' sanity check; consume_count does it for us. 1999-03-16 Stan Shebs From Art Haas : * cplus-dem.c (demangle_prefix): Don't grab all the '__' strings when doing arm or hp style. (demangle_nested_args): Decr forgetting_types field when done. Thu Mar 11 01:22:58 1999 Mumit Khan * pexecute.c (__CYGWIN32__): Rename to (__CYGWIN__): this. * xmalloc.c: Likewise. Changes to support i386-pc-uwin. * configure.in (*-*-uwin*): Workaround for vfork bug. * configure: Regenerate. * pexecute.c (pexecute): Be like standard Unix. (pwait): Likewise. * xmalloc.c (first_break): Define. (xmalloc_set_program_name): Use. (xmalloc): Use. Thu Mar 11 01:07:55 1999 Franz Sirl * config.table: Cleanup and add mh-*pic handling for alpha, arm, powerpc Sun Feb 28 22:30:44 1999 Geoffrey Noer * config.table: Check cygwin*, not cygwin32*. Tue Feb 9 16:39:01 1999 Dave Brolley * Makefile.in: Change mkstemp -> mkstemps. Tue Feb 9 01:12:27 1999 Marc Espie * Makefile.in (REQUIRED_OFILES): remove mkstemp.o * configure.in (funcs): Check for and conditionally add mkstemps to the list of functions libiberty will provide. * configure: Rebuilt. Wed Feb 3 00:01:15 1999 Mumit Khan * clock.c (HZ): Define in terms of (ISO C) CLOCKS_PER_SEC on platforms that don't have HZ. * getruntime.c (HZ): Likewise. Sat Jan 30 13:28:04 1999 Richard Henderson * Makefile.in (xstrdup.o): Depend on config.h. Wed Jan 13 07:26:44 1999 H.J. Lu (hjl@gnu.org) * cplus-dem.c (mop_up): Set work->previous_argument to NULL after freeing it. Wed Jan 13 14:16:36 1999 Kaveh R. Ghazi * xstrdup.c (xstrdup): Switch from strcpy to memcpy for speed. Tue Jan 5 15:58:29 1999 Elena Zannoni * Makefile.in (CFILES): fix typo, splay-tree.c instead of splay-tree.o. 1999-01-04 Jason Molenda (jsm@bugshack.cygnus.com) * configure.in: Require autoconf 2.12.1 or higher. 1998-12-30 Michael Meissner * random.c (NULL): Don't redefine NULL if it is already defined. Tue Dec 22 09:43:35 1998 Kaveh R. Ghazi * argv.c (buildargv): Cast the result of alloca in assignment. * choose-temp.c: Include stdlib.h. * cplus-dem.c (demangle_arm_pt): Remove unused prototype. (snarf_numeric_literal): Constify first parameter. (code_for_qualifier): Avoid a gcc extension, make the parameter an int, not a char. (demangle_qualifier): Likewise. (demangle_signature): Cast the argument of a ctype function to unsigned char. (arm_pt): Add parens around assignment used as truth value. (demangle_arm_hp_template): Constify variable `args'. (do_hpacc_template_const_value): Cast the argument of a ctype function to unsigned char. (do_hpacc_template_literal): Remove unused variable `i'. (snarf_numeric_literal): Constify parameter `args'. Cast the argument of a ctype function to unsigned char. * floatformat.c (floatformat_to_double): Add explicit braces to avoid ambiguous `else'. * fnmatch.c (fnmatch): Change type of variables `c', `c1', `cstart' and `cend' to unsigned char. Cast the argument of macro `FOLD', which uses ctype functions, to unsigned char. * objalloc.c (free): Add prototype. Sun Dec 20 16:03:46 1998 Hans-Peter Nilsson * Makefile.in (CFILES): Fix typo: splay-tree.c, not splay-tree.o Fri Dec 18 17:50:18 1998 David Taylor * cplus-dem.c (demangle_arm_pt): remove declaration -- function doesn't exist. (do_hpacc_template_literal): remove unused variable `i'. Fri Dec 18 16:11:43 EST 1998 Andrew MacLeod * cplus-dem.c (demangle_fund_type): Process CV and u codes before bumping the pointer we read from. Also prepend these codes, as we do in other places. 1998-12-18 Nick Clifton * cplus-dem.c (demangle_arm_hp_template): Make variable 'args' be 'const char *' in order to match its usage when calling siblings. (snarf_numeric_literal): Make first arg 'const char **' in order to match usage. Mon Dec 14 09:55:50 1998 Kaveh R. Ghazi * choose-temp.c: Don't check IN_GCC anymore. * floatformat.c (floatformat_from_double): Use `const', not `CONST'. * memchr.c (memchr): Likewise. * memcpy.c (memcpy): Likewise. * memmove.c (memmove): Likewise. * mkstemp.c: Don't check IN_GCC anymore. * pexecute.c: Likewise. * splay-tree.c: Likewise. * strchr.c (strchr): Use `const', not `CONST'. * strrchr.c (strrchr): Likewise. * strtol.c (strtol): Likewise. * strtoul.c (strtoul): Likewise. Fri Dec 4 13:51:04 1998 David Taylor Elena Zannoni Stan Shebs Edith Epstein Andres MacLeod Satish Pai * HP aCC demangling support. * cplus-dem.c (main): Remove default to HP style demangling, set to EDG demangling correctly when -edg specified; set the demangling style when user specifies 'edg'. Set strip_underscore to prepends_underscore, if not HPUXHPPA. Set current_demangling_style to hp_demangling if HPUXHPPA. Set current demangling style correctly if the switch is hp. Read label correctly also in the HP style case. (work_stuff): add temp_start field; add field for volatile member function. (arm_pt): handle ARM_DEMANGLING and EDG_DEMANGLING styles; HP style for this case is the same as ARM. (demangle_args): handle EDG_DEMANGLING style; support HP style. (demangle_arm_hp_template): new function. (It was demangle_arm_pt.); check and set value of temp_start field in multiple places. Also, when ceching for end of template args, check to see if at end of static member of template class. (demangle_class): new local variable : save_class_name_end Don't include template args in string defining class. (demangle_class_name): use demangel_arm_hp_template. (demangle_function_name): handle case where demangling style is HP_DEMANGLING and currently point at an 'X' in the mangled name. Handle EDG_DEMANGLING style. Handle constructor and destructor ops for HP style. (demangle_prefix): handle EDG_DEMANGLING and ARM_DEMANGLING styles. global destructor and constructor for HP style are same as for ARM style. Same for local variables. (demangle_qualified): handle EDG_DEMANGLING style. (demangle_signature): add case for volatile member function. For cases '1' - '9' : initialize the temp_start field to -1 and handle the EDG_DEMANGLING style. for case 'F' : handle EDG_DEMANGLING and AUTO_DEMANGLING styles. If expecting a function and managed to demangle the funct args, then handle the LUCID_DEMANGLING, ARM_DEMANGLING, and EDG_DEMANGLING styles. Add case for local class name after "Lnnn_ in HP style case. HP style too needs to forget types. _nnn is OK for HP style, so don't report failure. (do_hpacc_template_const_value): new function. Handle template's value param for HP/aCC. (do_hpacc_template_literal): new function. Handle a template's literal parameter for HP aCC. (recursively_demangle): new function (snarf_numeric_literal): new function. (usage): add 'edg' to the list of demangling styles; add hp switch to message. Sat Nov 28 17:25:22 1998 Christopher Faylor * pexecute.c: Remove obsolete ifdefed cygwin code. Fri Nov 27 13:26:06 1998 Kaveh R. Ghazi * choose-temp.c: Always include libiberty.h. Avoid redundancies. * cplus-dem.c: Likewise. Conform to libiberty.h. * pexecute.c: Likewise. * splay-tree.c: Likewise. 1998-11-25 Mike Stump * Makefile.in (splay-tree.o): Add config.h dependency. Mon Nov 23 16:59:49 1998 Kaveh R. Ghazi * configure.in: Use AC_PREREQ(2.12.1). 1998-11-16 Benjamin Kosnik * cplus-dem.c (demangle_fund_type): Add demangling for C9x types. Thu Nov 19 22:15:50 1998 Jeffrey A Law (law@cygnus.com) * mpw.c (mpw_access): Add missing parens. Thu Nov 19 12:59:21 1998 Kaveh R. Ghazi * configure.in: Call AC_HEADER_SYS_WAIT. * pexecute.c: Include sys/wait.h when !IN_GCC. Thu Nov 19 14:38:20 1998 Geoffrey Noer * pexecute.c: revert back to checking old Cygwin preprocessor symbol until some time has passed. Wed Nov 18 08:52:26 1998 Christopher Faylor * pexecute.c: Reorganize WIN32 case to accomodate Cygwin since it will now support similar constructs. Fri Nov 13 19:18:05 1998 Kaveh R. Ghazi * configure.in: Check for calloc. * calloc.c: New file. * xmalloc.c (xcalloc): New function. Fri Nov 13 08:51:46 EST 1998 Andrew MacLeod *cplus-dem.c (demangle_prefix): Use the last "__" in the mangled name when looking for the signature. This allows template names to begin with "__". 1998-11-08 Mark Mitchell * cplus-dem.c (type_kind_t): Add tk_reference. (demangle_template_value_parm): Handle it. (do_type): Use it for references, instead of tk_pointer. * cplus-dem.c (demangle_template_value_parm): Use cplus_demangle, not internal_cplus_demangle. Sat Nov 7 16:02:10 1998 Kaveh R. Ghazi * choose-temp.c: Don't include gansidecl.h. * mkstemp.c: Likewise. * pexecute.c: Likewise. Mon Nov 2 15:05:33 1998 Geoffrey Noer * configure.in: detect cygwin* instead of cygwin32* * configure: regenerate Mon Nov 2 10:22:01 1998 Kaveh R. Ghazi * pexecute.c: Check HAVE_CONFIG_H, not IN_GCC, when determining whether to include config.h. Possibly include unistd.h in the !IN_GCC case. Define VFORK_STRING as a printable function call for error messages (either "vfork" or "fork".) If HAVE_VFORK_H is defined, include vfork.h. If VMS is defined, define vfork() appropriately. Remove vfork check on USG, we're using autoconf. (pexecute): Set `errmsg_fmt' to VFORK_STRING instead of checking locally what string to use. 1998-10-26 Mark Mitchell * splay-tree.c: Tweak include directives to make sure declarations of xmalloc and free are available. 1998-10-25 Mark Mitchell * cplus-dem.c (gnu_special): Fix handling of virtual tables in anonymous namespaces. 1998-10-23 Mark Mitchell * cplus-dem.c (work_stuff): Replace const_type and volatile_type with type_quals. (TYPE_UNQUALIFIED): New macro. (TYPE_QUAL_CONST): Likewise. (TYPE_QUAL_VOLATILE): Likewise. (TYPE_QUAL_RESTRICT): Likewise. (code_for_qualifier): New function. (qualifier_string): Likewise. (demangle_qualifier): Likewise. (internal_cplus_demangle): Use them. (demangle_signature): Likewise. (demangle_template_value_parm): Likewise. (do_type): Likewise. (demangle_fund_type)): Likewise. Thu Oct 22 19:58:43 1998 Kaveh R. Ghazi * splay-tree.c (splay_tree_foreach_helper): Make definition static to match prototype. 1998-10-21 Mark Mitchell * splay-tree.c: New file. * Makefile.in (CFILES): Add it. (REQUIRED_OFILES): Likewise. (splay-tree.o): Add dependencies. Tue Oct 20 12:29:02 1998 Andreas Schwab * cplus-dem.c (demangle_qualified): Fix off-by-one when checking range of 'K' index. Thu Oct 15 18:51:12 1998 Kaveh R. Ghazi * choose-temp.c: Prototype mkstemps() when IN_GCC. * cplus-dem.c (consume_count): Cast argument of ctype macro to `unsigned char'. (cplus_demangle_opname): Cast the result of `strlen' to (int) when comparing against one. (cplus_mangle_opname): Likewise. (demangle_integral_value): Cast argument of ctype macro to `unsigned char'. (demangle_template_value_parm): Likewise. (demangle_template): Initialize variable `bindex'. Cast the result of `strlen' to (int) when comparing against one. Remove unused variable `start_of_value_parm'. (demangle_class_name): Cast the result of `strlen' to (int) when comparing against one. (demangle_prefix): Cast argument of ctype macro to `unsigned char'. (gnu_special): Likewise. Cast the result of `strlen' to (int) when comparing against one. (demangle_qualified): Cast argument of ctype macro to `unsigned char'. (get_count): Likewise. (do_type): Likewise. Cast the result of `strlen' to (int) when comparing against one. (demangle_fund_type): Cast argument of ctype macro to `unsigned char'. (demangle_function_name): Cast the result of `strlen' to (int) when comparing against one. * mkstemp.c (mkstemps): Cast variable `len' to (int) when comparing against one. Tue Oct 13 23:51:51 1998 Jeffrey A Law (law@cygnus.com) * mkstemp.c: Check HAVE_SYS_TIME_H before including sys/time.h * configure.in (AC_CHECK_HEADERS): Check for sys/time.h too. * config.in, configure: Rebuilt. * getopt.c: Check HAVE_STRINGS_H before including strings.h. * configure.in (AC_CHECK_HEADERS): Check for strings.h too. * config.in, configure: Rebuilt. Mon Oct 12 19:15:59 1998 Geoffrey Noer * configure.in: in comment, call AC_EXEEXT instead of AM_EXEEXT Sun Oct 11 17:36:06 1998 Michael Tiemann * Makefile.in (cplus-dem.o, obstack.o): Depend upon config.h. Thu Oct 8 23:42:08 1998 Jeffrey A Law (law@cygnus.com) * Merge egcs & devo libiberty. 1998-09-08 Martin von Lwis * cplus-dem.c (demangle_arm_pt): Demangle anonymous namespaces. Mon Sep 7 23:29:01 1998 Kaveh R. Ghazi * mkstemp.c: Include config.h even when not IN_GCC. Wrap header inclusions inside HAVE_*_H macros. Include ansidecl.h when not IN_GCC. * vasprintf.c: Include stdarg.h/varargs.h first. * vprintf.c: Likewise. Sat Sep 5 03:24:49 1998 Jeffrey A Law (law@cygnus.com) * pexecute.c: Updates from gcc. Copy in gcc has been removed. This is the canonical copy. Define ISSPACE if !IN_GCC. * alloca.c, vfprintf.c, choose-temp.c, mkstemp.c, getopt.c: Similarly. * getopt1.c, obstack.c: Similarly. * Makefile.in: Build mkstemp.o Tue Sep 1 23:12:47 1998 Christopher Faylor * configure.in: Include asprintf in list of functions known not to be in newlib. * configure: Rebuild. Wed Aug 19 14:05:01 1998 Mumit Khan * cplus-dem.c (work_stuff): Add dllimported. (demangled_prefix): Mark symbols imported from PE DLL. (internal_cplus_demangled): Handle. 1998-08-17 Jason Merrill * cplus-dem.c (do_type): Fix simple array handling. If we fail, stay failed. Mon Aug 17 10:40:34 1998 Kaveh R. Ghazi * cplus-dem.c: Include config.h if it exists. Also, only prototype malloc/realloc if we can't get stdlib.h. Sat Aug 15 16:15:01 1998 Ian Lance Taylor * configure.in: Switch back to checking --with-target-subdir when deciding whether to check for newlib, undoing part of July 15 change. * configure: Rebuild. Thu Aug 13 16:47:38 1998 Mark Mitchell * cplus-dem.c (type_kind_t): New type. (demangle_template_value_parm): Add type_kind_t parameter. Rely on this paramter, rather than demangling the type again. (demangle_integral_value): Pass tk_integral. (demangle_template_: Pass the value returned from do_type. (do_type): Return a type_kind_t. Pass tk_integral to demangle_template_value_parm for array bounds. (demangle_fund_type): Likewise. Also incorporate from GCC version: Tue Jul 21 13:28:19 1998 Jason Merrill * cplus-dem.c (do_type): Use demangle_template_value_parm for arrays. Thu Aug 13 16:47:38 1998 Kaveh R. Ghazi * cplus-dem.c (demangle_nested_args): Make function definition static to match the prototype. Tue Jul 28 11:33:09 1998 Mark Mitchell * cplus-dem.c (type_kind_t): New type. (demangle_template_value_parm): Add type_kind_t parameter. Rely on this paramter, rather than demangling the type again. (demangle_integral_value): Pass tk_integral. (demangle_template_: Pass the value returned from do_type. (do_type): Return a type_kind_t. Pass tk_integral to demangle_template_value_parm for array bounds. (demangle_fund_type): Likewise. Also incorporate from GCC version: Tue Jul 21 13:28:19 1998 Jason Merrill * cplus-dem.c (do_type): Use demangle_template_value_parm for arrays. Mon Jul 27 12:16:08 1998 Ian Lance Taylor * Makefile.in (ALLOCA): New variable. ($(TARGETLIB)): Add $(ALLOCA) to library. (needed-list): Add $(ALLOCA). ($(ALLOCA)): Depend upon stamp-picdir. Sun Jul 19 08:23:17 1998 Kaveh R. Ghazi * cplus-dem.c (demangle_nested_args): Make function definition static to match the prototype. Wed Jul 15 00:12:58 1998 Ian Lance Taylor * configure.in: Check --with-cross-host rather than --with-target-subdir when deciding whether build uses a cross compiler, and when deciding where to install the library. * configure: Rebuild. Sun Jul 12 01:27:05 1998 Jason Merrill * cplus-dem.c (demangle_nested_args): Return a value. Sat Jul 11 16:19:48 1998 Mark Mitchell * cplus-dem.c (string): Move definition before work_stuff. (work_stuff): Add volatile_type, forgetting_types, previous_argument, and nrepeats fields. (SCOPE_STRING): New macro. (demangle_template): Add `remember' parameter. Add comment. Register the `B' code type here, if remembering. Tidy. Fix crash on NULL tmpl_argvec. Be consistent with use of tname/trawname. (demangle_nested_args): New function. (internal_cplus_demangle): Handle volatile-qualified member functions. (mop_up): Delete the previous_argument string if present. (demangle_signature): Tidy. Handle volatile-qualified member functions. Handle back-references using the `B' code. Use extra parameter to demangle_template and SCOPE_STRING where appropriate. (demangle_template_value_parm): Fix thinko; 'B' is not an integral code. (demangle_class): Use SCOPE_STRING. (gnu_special): Pass additional argument to demangle_template. Use SCOPE_STRING. (demangle_qualified): Save qualified types for later back-references. Handle constructors and destructors for template types correctly. (do_type): Tidy. Use SCOPE_STRING. Pass extra argument to demangle_template. Use demangled_nested_args. Don't remember qualified types here; that's now done in demangle_qualified. Similarly for templates. (do_arg): Improve commment. Handle 'n' repeat code. (remember_type): Check forgetting_types. (demangle_args): Deal with 'n' repeat codes. Tidy. Thu Jul 2 16:26:24 1998 Ian Lance Taylor * config.table: Only use mh-fbsd21 on *-*-freebsd2.2.[012], not on *-*-freebsd2.2.*. From Dmitrij Tejblum . Mon Jun 15 16:29:01 1998 Ian Lance Taylor * configure.in (setobjs): Correct quoting error in cygwin32 case. From Chris Faylor . Mon Jun 1 13:47:55 1998 Jason Molenda (crash@bugshack.cygnus.com) * obstack.c: Update to latest FSF version. Mon Jun 1 14:17:36 1998 Mike Stump * Makefile.in: Add a dependency on stamp-picdir for the objects, so that we can do a parallel build. Sat May 30 22:17:13 1998 Mumit Khan * configure.in (checkfuncs): Add missing "'". Fri May 29 12:40:41 1998 Jason Molenda (crash@bugshack.cygnus.com) * obstack.c (_obstack_memory_used): Elide this function if we're on a system with GNU libc. Tue May 26 18:28:43 1998 Ian Lance Taylor * Makefile.in (distclean): Remove config.log. Tue May 26 15:01:52 1998 Andreas Schwab * Makefile.in (distclean): Don't remove alloca-conf.h. Fri May 22 01:38:07 1998 Hans-Peter Nilsson * cplus-dem.c (MBUF_SIZE): Bumped from 512 to 32767. 1998-05-21 Mark Mitchell * cplus-dem.c (do_type): Handle volatile qualification. 1998-05-21 Manfred Hollstein * configure.in: Check for unistd.h as well. * configure: Rebuild. * config.in: Rebuild. * getpagesize.c (GNU_OUR_PAGESIZE): Use sysconf only if _SC_PAGESIZE is defined in unistd.h. Reformat conditional block for easier reading. * config.table (shared): Default to no if ${enable_shared} is unset or empty; this logic is used by the toplevel configure scripts, too. Sat May 16 14:01:26 1998 Jeffrey A Law (law@cygnus.com) * config.table: Add line to set enable_shared in the Makefile as needed. Wed May 13 14:24:38 1998 Kaveh R. Ghazi * cplus-dem.c (squangle_mop_up): Change return type to void. (internal_cplus_demangle): Remove unused parameter `options'. All callers changed. (cplus_demangle_opname): Remove function wide variable `int i' and replace with `size_t i' at each location where it is used. (cplus_mangle_opname): change type of `i' from int to size_t. Wed May 13 13:39:38 1998 Ian Lance Taylor * alloca-conf.h: Include config.h. Check HAVE_ALLOCA_H rather than sparc or sun. * Makefile.in (argv.o): Depend upon config.h and alloca-conf.h. Fri May 8 00:23:51 1998 Ian Lance Taylor * configure.in: Set libiberty_topdir correctly when srcdir is "." and with_target_subdir is not set. * configure: Rebuild. Thu May 7 13:01:44 1998 Ian Lance Taylor * configure.in: Add *-*-mingw32* case. * configure: Rebuild. Wed May 6 11:33:51 1998 Ian Lance Taylor * config.table: Never use a PIC file for *-*-cygwin32*. * Makefile.in (config.status): Depend upon config.table. * configure.in: On a cygwin32 host, always compile random, and don't test for sys_siglist, strsignal, or psignal. * configure: Rebuild. * clock.c: Check HAVE_SYS_PARAM_H rather than NO_SYS_PARAM_H. * getcwd.c: Likewise. * getpagesize.c: Likewise. * getruntime.c: Likewise. Tue May 5 18:08:32 1998 Ian Lance Taylor Use autoconf tests rather than the old dummy.c test: * configure.in: Add AC_ARG_WITH calls for --with-target-subdir and --with-newlib. Add AC_CONFIG_HEADER. Use AC_REPLACE_FUNCS for most functions. Add special cases to handle newlib and VxWorks. Remove target_makefile_frag. Create stamp-h in AC_OUTPUT if CONFIG_HEADERS is set. Only call config-ml.in in AC_OUTPUT if CONFIG_FILES is set; set ac_file before calling it. * config.table (arm-*-riscix*, *-*-cygwin32): Remove. (*-*-hpux*, *-*-hiux*, *-*-irix4*, *-*-solaris2*): Remove. (*-*-sysv4*, *-*-go32, *-*-vxworks5*, *-*-vxworks): Remove (i[3456]-*-mingw32*): Remove. * Makefile.in (ERRORS_CC, CONFIG_H, NEEDED_LIST): Remove. (LIBOBJS): New variable. (HOST_OFILES, DO_ALSO, STAGESTUFF): Remove. (all): Depend upon needed-list. Don't check RULE1. (@target_makefile_frag@): Remove. (COMPILE.c): Include @DEFS@. (HFILES): Add alloca-conf.h. (REQUIRED_OFILES): Remove basename.o. ($(TARGETLIB)): New target. (stamp-needed, lneeded-list, needed.awk, stamp-config): Remove. (lconfig.h, needed2.awk, dummy.o, errors): Remove. (needed-list, config.h): Rewrite. (RULE1, $(RULE1), RULE2, $(RULE2)): Remove. (.always.): Remove. (Makefile): Set CONFIG_FILES and CONFIG_HEADERS. (stamp-h): New target. (atexit.o, clock.o, getcwd.o, getpagesize.o): New targets. (basename.o): Don't depend upon config.h. (getruntime.o): Depend upon config.h. * atexit.c: Include config.h. Check HAVE_ON_EXIT rather than NEED_on_exit. * basename.c: Don't include config.h. Don't check NEED_basename. * clock.c: Include config.h. * getcwd.c: Likewise. * getpagesize.c: Likewise. * getruntime.c: Likewise. Fix checks which set HAVE_GETRUSAGE and HAVE_TIMES. * strerror.c: Change uses of NEED_sys_errlist to HAVE_SYS_ERRLIST. Likewise for NEED_strerror and HAVE_STRERROR. * strsignal.c: Likewise for NEED_sys_siglist and HAVE_SYS_SIGLIST, and for NEED_strsignal and HAVE_STRSIGNAL and for NEED_psignal and HAVE_PSIGNAL. * acconfig.h: New file. * dummy.c: Remove. * functions.def: Remove. * config/mh-cxux7 (HDEFINES): Remove -DHAVE_SYSCONF. * config/mh-windows (HDEFINES): Remove. * config/mh-cygwin32: Remove. * config/mh-go32: Remove. * config/mh-irix4: Remove. * config/mh-riscix: Remove. * config/mh-sysv4: Remove. * config/mt-mingw32: Remove. * config/mt-vxworks5: Remove. * config.in: New file, generated using autoheader. * configure: Rebuild. Mon May 4 13:00:28 1998 Ian Lance Taylor * configure.in: Rewrite to use autoconf. * configure: Generate using autoconf. * config/mh-a68bsd: Remove. * config/mh-apollo68: Remove. * config/mh-hpbsd: Remove. * config/mh-ncr3000: Remove. * config/mh-sysv: Remove. * config/mh-aix (RANLIB, INSTALL): Don't define. * config/mh-cxux7 (RANLIB, INSTALL): Don't define. * config/mh-irix4 (CC, RANLIB, INSTALL): Don't define. * config/mh-sysv4 (RANLIB, INSTALL): Don't define. * config.table: Change config_shell to CONFIG_SHELL, and use libiberty_topdir to find move-if-change. (m68k-apollo-bsd*, m68k-apollo-sysv*): Remove. (i[3456]86-ncr-sysv4*, *-*-dgux*, hppa*-hp-bsd*): Remove. (*-*-irix*, *-*-m88kbcs*, *-*-sysv*): Remove. * Makefile.in (srcdir): Set to @srcdir@. (VPATH): Likewise. (prefix, exec_prefix, bindir, libdir): Set to autoconf variables. (SHELL, INSTALL, INSTALL_PROGRAM, INSTALL_DATA): Likewise. (CC, CFLAGS, RANLIB)): Likewise. (datadir, man*dir, infodir, includedir, MAKEINFO): Remove. (target_makefile_frag, host_makefile_frag): Add substitutions. (INSTALL_DEST): Set to @INSTALL_DEST@. (Makefile): Depend upon config.status. Don't depend upon $(host_makefile_frag) or $(target_makefile_frag). (config.status): New target. Sun May 3 17:58:49 1998 Ian Lance Taylor * config/mt-sunos4: Remove. Should be handled by --with-headers and --with-libraries options at top level. * config.table: Never use mt-sunos4. * alloca-conf.h: New file, combining alloca-norm.h and alloca-botch.h. * alloca-norm.h: Remove. * alloca-botch.h: Remove. * configure.in: Set shell variables files and links to empty. * config.table: Don't set shell variable files. * configure.bat: Don't create alloca-conf.h. * makefile.vms: Likewise. * mpw-config.in: Likewise. * vmsbuild.com: Likewise. Fri May 1 11:41:42 1998 Ian Lance Taylor * Makefile.in ($(HOST_OFILES) $(REQUIRED_OFILES)): Remove old target depending upon config.h. (alloca.o): Add target depending upon config.h (basename.o, choose-temp.o, fnmatch.o): Likewise. (getopt.o, getopt1.o, pexecute.o, strerror.o): Likewise. (strsignal.o, xstrerror.o): Likewise. Fri May 1 04:26:25 1998 Peter Schauer * cplus-dem.c (cplus_demangle_opname): Initialize work. Mon Apr 27 15:53:30 EDT 1998 Andrew MacLeod * cplus-dem.c (demangle_qualified): Replace missing else. Sun Apr 26 15:38:50 1998 Andreas Schwab * cplus-dem.c (gnu_special): Fix off-by-one bug when checking the length in the name of a virtual table. Wed Apr 22 10:53:49 EDT 1998 Andrew MacLeod * cplus-dem.c (struct work stuff): Add field for B and K mangle codes. (cplus_demangle_opname): Call mop_up_squangle. (cplus_demangle): Initialize squangle info, then call internal_cplus_demangle. (Most code moved there as well) (internal_cplus_demangle): New function, performs most of what use to be done in cplus_demangle, but is only called with this file. (squangle_mop_up): New function to clean up B and K code data. (mop_up): set pointers to NULL after freeing. (demangle_signature, demangle_template, demangle_class): Add switch elements to handle K and B codes. (demangle_prefix, gnu_special, demangle_qualified): Add code to handle K and B codes. (do_type, demangle_fund_type): Handle B and K codes. (remember_Ktype): New function to store K info. (register_Btype, remember_Btype): New functions for B codes. (forget_B_and_K_types): New function to destroy B and K info. Fri Apr 10 01:49:10 1998 Jeffrey A Law (law@cygnus.com) * COPYING.LIB, choose-temp.c, cplus-dem.c: Sync with egcs & gcc. Thu Mar 5 09:23:28 1998 Manfred Hollstein * config.table: Make locating frag files failsafe even for the special case if configuring and building in srcdir. Mon Feb 23 14:33:15 1998 Ian Lance Taylor * choose-temp.c: Fix handling of sys/file.h to work in libiberty. Sun Feb 22 18:03:23 1998 Jeffrey A Law (law@cygnus.com) * choose-temp.c: Sync with copy in gcc. Thu Feb 12 16:29:49 1998 Ian Lance Taylor * getopt.c: Update to latest FSF version. * getopt1.c: Likewise. Tue Feb 10 16:58:33 1998 Stan Shebs * cplus-dem.c (gnu_special): Don't get confused by . strings that are not actually lengths. Fri Feb 6 01:35:17 1998 Manfred Hollstein * Makefile.in (FLAGS_TO_PASS): Don't pass PICFLAG. (.c.o): Check value of enable_shared, not PICFLAG. (stamp-picdir): Dito. Thu Feb 5 18:48:56 1998 Geoffrey Noer * config/mh-cygwin32: remove vasprintf.o from EXTRA_OFILES since it gets built automatically Sun Feb 1 02:52:32 1998 Mike Stump * config.table (vxworks configs): Default to VxWorks 5.x, as that is the currently shipping OS. Tue Jan 27 16:08:20 1998 Pat Rankin * vmsbuild.com [REQUIRE_OFILES]: Synchronized with Makefile.in: Add fnmatch.o and objalloc.o; remove vasprintf.o. [config.h]: Define NEED_strsignal. Mon Jan 19 12:20:01 1998 Ian Lance Taylor * functions.def: Correct argument types for strerror and strsignal. Reported by Alex Gutman . Sun Jan 18 15:57:28 1998 Michael Snyder * vasprintf.c (int_vasprintf): Increase buffer size for float/double values. Sat Jan 17 22:28:38 1998 Mumit Khan J.J. VanderHeijden Add mingw32 support. * pexecute.c (pexecute): New function for mingw32. Supports pipes. (pwait): New function for mingw32. * config.table (i[3456]86-*-mingw32*): Support for i386-mingw32. * config/mt-mingw32: New file. * xmalloc.c (first_break): Not used for mingw32. (xmalloc_set_program_name): Don't use sbrk on mingw32. (xmalloc): Likewise. (xrealloc): Likewise. Sat Jan 17 22:28:05 1998 Jeffrey A Law (law@cygnus.com) * choose-temp.c: Sync with gcc version. Tue Jan 13 18:34:39 1998 Jim Wilson * Makefile.in (install_to_libdir, install_to_tooldir): Add MULTISUBDIR to all filenames in libdir and tooldir. (distclean): Do MULTICLEAN before deleting Makefile. (stamp-needed, stamp-config): Add MULTISRCTOP to pathname for move-if-change. Thu Dec 4 17:25:19 1997 Jeffrey A Law (law@cygnus.com) * strsignal.c (sys_nsig): Try NSIG and _NSIG. Wed Nov 19 13:37:06 1997 Michael Meissner * alloca-norm.h (alloca, GCC case): Don't redefine alloca if it was already defined previously. Mon Nov 10 12:48:03 1997 Philippe De Muyter * Makefile.in (INSTALL): Use ../install-sh, not install. Tue Oct 28 23:41:15 1997 Judy Goldberg * Makefile.in (CFILES): Add pexecute.c. Wed Oct 15 19:13:48 1997 Ian Lance Taylor * asprintf.c: Consistently use either stdarg or varargs. Tue Oct 14 12:01:00 1997 Mark Mitchell * cplus-dem.c (demangle_signature): Don't look for return types on constructors. Handle member template constructors. Fri Oct 3 17:53:30 1997 Ian Lance Taylor * README: Fix configuration instructions. Mon Sep 29 12:28:41 1997 Ian Lance Taylor * pexecute.c: Update to current version from /gd/gnu/lib: Mon Sep 29 12:27:59 1997 Ian Lance Taylor * pexecute.c: Use spawn if __CYGWIN32__. 1997-08-08 Paul Eggert * pexecute.c: Include "config.h" first, as per autoconf manual. Fri Jun 27 15:20:29 1997 Scott Christley * pexecute.c (fix_argv): New function. (pexecute): Win32 but not Cygwin32 needs its arguments fixed. Add underscore to cwait function call. Sun Sep 28 12:00:52 1997 Mark Mitchell * cplus-dem.c (demangle_template): Add new parameter. Handle new template-function mangling. (consume_count_with_underscores): New function. (demangle_signature): Handle new name-mangling scheme. Wed Sep 24 00:31:59 1997 Felix Lee * asprintf.c: stdarg.h when ALMOST_STDC * config/mh-windows (EXTRA_OFILES): add asprintf.o and strncasecmp.o. Thu Aug 28 14:27:15 1997 Andrew Cagney * vasprintf.c (vasprintf): Allow for _BSD_VA_LIST_. * config.table: Add case for FreeBSD 2.1 and 2.2, needs mh-fbsd21. * config/mh-fbsd21 (EXTRA_OFILES): Force vasprintf.o Wed Sep 10 12:43:10 1997 Jason Merrill * cplus-dem.c (demangle_fund_type): Change "complex" to "__complex". Fri Sep 5 16:34:42 1997 Andrew Cagney * asprintf.c (asprintf): New file. * Makefile.in (CFILES): Add asprintf.c * functions.def: Ditto. Thu Aug 28 18:53:34 1997 Andrew Cagney * argv.c (dupargv): New function, duplicate an argument vector. Tue Aug 19 20:28:45 1997 Geoffrey Noer * config/mh-cygwin32: also build random.o Tue Aug 19 17:10:56 1997 Jason Merrill * cplus-dem.c: Add 'extern' to prepends_underscore. Wed Jul 30 11:42:19 1997 Per Bothner * cplus-dem.c: Various changes to produce Java output when passed DMGL_JAVA. Thus "::" becomes "." and "JArray" becomes "Foo[]". (main): Support --java and -j flags to set DMGL_JAVA. Tue Jul 22 19:05:23 1997 Robert Hoehne * config/mh-go32 (CC, AR, RANLIB): Don't define. Tue Jul 22 17:49:54 1997 Ian Lance Taylor * Makefile.in (REQUIRED_OFILES): Add pexecute.o. (pexecute.o): New target. * Makefile.in (stamp-needed): New target, replacing needed-list. (needed-list): Just depend upon stamp-needed. (stamp-config): New target, replacing config.h. (config.h): Just depend upon stamp-config. (mostlyclean): Remove stamp-*. Thu Jun 12 11:00:18 1997 Angela Marie Thomas (angela@cygnus.com) * Makefile.in (FLAGS_TO_PASS): pass INSTALL, INSTALL_PROGRAM and INSTALL_DATA for multilibbed installs Tue Jun 3 13:21:05 1997 Doug Evans Tue Dec 10 09:44:57 1996 Paul Eggert * choose-temp.c (choose_temp_base): Don't dump core if TMPDIR is empty. * choose-temp.c (try): Insist that temp dir be searchable. Wed Oct 23 17:36:39 1996 Doug Rupp (rupp@gnat.com) * choose-temp.c (choose_temp_base): On VMS, use proper syntax for current directory. Sat Feb 15 19:03:48 1997 Geoffrey Noer (noer@cygnus.com) * pexecute.c: Remove special cases for cygwin32. (pwait): Remove local definition of `pid'. Tue Nov 12 18:26:15 1996 Doug Rupp (rupp@gnat.com) * pexecute.c (vfork): Supply new definition for VMS. (pwait): Use waitpid instead of wait for VMS. Tue May 20 14:02:20 1997 Brendan Kehoe * cplus-dem.c (do_type): Handle `J'. (demangle_fund_type): Print "complex" for it. Wed Apr 30 12:15:45 1997 Jason Merrill * configure.in: Don't turn on multilib here. Mon Apr 28 19:04:31 1997 Michael Snyder * obstack.c: move _obstack_memory_used outside of ifdef. Cannot be elided; needed by gdb and not present in libc. Thu Apr 24 19:33:47 1997 Ian Lance Taylor * Makefile.in (clean): Remove tmpmulti.out. Tue Apr 22 10:25:15 1997 Fred Fish * floatformat.c (floatformat_ieee_double_littlebyte_bigword): Add new floatformat, mainly for ARM doubles. Mon Apr 14 12:11:16 1997 Ian Lance Taylor * config.table: Use ${config_shell} with ${moveifchange}. From Thomas Graichen . Fri Apr 4 03:09:24 1997 Ulrich Drepper * configure.in: Enable multilibing by default. Update multilib template to read config-ml.in. Tue Apr 1 16:26:39 1997 Klaus Kaempf * makefile.vms: Add objalloc. Mon Mar 31 23:57:51 1997 H.J. Lu * cplus-dem.c (demangle_it): Add prototype declaration. (usage, fatal): Likewise. * xexit.c (_xexit_cleanup): Add prototype. * strerror.c (init_error_tables): Declare. Fri Mar 28 11:43:20 1997 H.J. Lu * functions.def: Add DEF of vasprintf, and DEFFUNC of strsignal. * strsignal.c: Only define strsignal if NEED_strsignal. * Makefile.in (REQUIRED_OFILES): Remove vasprintf.o. * configure.in: Add NEED_strsignal to xconfig.h. Add vasprintf.o to xneeded-list. * config/mh-cygwin32 (HDEFINES): Add -DNEED_strsignal. (EXTRA_OFILES): Define to vasprintf.o. * config/mh-windows (HDEFINES): Add -DNEED_strsignal. (EXTRA_OFILES): Add vasprintf.o. * config/mt-vxworks5 (vxconfig.h): Define NEED_strsignal. (vxneeded-list): Add vasprintf.o. Thu Mar 20 17:02:09 1997 Ian Lance Taylor * objalloc.c: Include . Mon Mar 17 19:23:11 1997 Ian Lance Taylor * objalloc.c: New file. * Makefile.in (CFILES): Add objalloc.c (REQUIRED_OFILES): Add objalloc.o. (objalloc.o): New target. Sat Mar 15 18:49:41 1997 Ian Lance Taylor * obstack.c: Update to current FSF version. Fri Mar 14 14:18:47 1997 Ian Lance Taylor * cplus-dem.c: Add prototypes for all static functions. (mystrstr): Make static. Make arguments and result const. (cplus_match): Remove; not used. Tue Mar 11 14:20:31 1997 Brendan Kehoe * cplus-dem.c (gnu_special): Call demangled_fund_type for other __t* symbols. Tue Mar 11 15:41:21 1997 H.J. Lu * spaces.c: Declare malloc and free properly. * strsignal.c (init_signal_tables): Add prototype. * xatexit.c (_xexit_cleanup): Add parameter declarations. Wed Feb 19 15:43:24 1997 Brendan Kehoe * Makefile.in (lneeded-list): If alloca.o is needed, xexit.o is also required because of xmalloc.o. Fri Feb 14 13:43:38 1997 Ian Lance Taylor * strsignal.c: Unconditionally redefine sys_siglist around the inclusion of the system header files. Thu Feb 13 22:01:04 1997 Klaus Kaempf * makefile.vms: Remove 8 bit characters. Update to latest gcc release. Tue Feb 4 11:52:19 1997 Ian Lance Taylor * strsignal.c: Use NEED_sys_siglist instead of LOSING_SYS_SIGLIST. * config.table: Don't use mh-lynxos. * config/mh-lynxos: Remove. Thu Jan 16 14:51:03 1997 Bob Manson * cplus-dem.c: Fix indenting; make identical to the copy in GCC. (do_type, case 'M'): Check for a template as well as a class. Thu Dec 19 13:51:33 1996 Brendan Kehoe * config/mt-vxworks5 (vxneeded-list): Remove sigsetmask.o, since vxworks 5.[0-3] all have sigsetmask in them; the one provided by libiberty is incorrect, as well. Mon Dec 2 15:03:42 1996 Michael Meissner * alloca.c (alloca): When compiled with an ANSI/ISO compiler, alloca takes a size_t argument, not just unsigned. Mon Nov 18 15:42:08 1996 Jason Merrill * cplus-dem.c: Note that this file also lives in GCC. Mon Nov 18 15:19:00 1996 Dawn Perchik * alloca.c: Remove include of libiberty.h for hpux. * argv.c: Replace defs from libiberty.h. * spaces.c: Put back externs from removed from libiberty.h. * vasprintf.c: Remove include of libiberty.h for hpux. Mon Nov 18 14:08:00 1996 Dawn Perchik * cplus-dem.c: Checking in again; last checkin filed due to sticky tag. Wed Nov 13 08:22:00 1996 Dawn Perchik * cplus-dem.c: Revert last two commits due to conflicts with hpux system headers. Wed Nov 13 08:22:00 1996 Dawn Perchik * alloca.c, argv.c, spaces.c, strcasecmp.c, vasprintf.c, vprintf.c: Revert last commit due to conflicts with hpux system headers. Wed Nov 13 10:36:50 1996 Michael Meissner * cplus-dem.c (x{m,re}alloc): Make declarations compatibile with libiberty.h when compiled with a standard compiler. Tue Nov 12 16:31:00 1996 Dawn Perchik * alloca.c: Include libiberty.h for definition of xmalloc. Don't redefine NULL. * argv.c: Move prototypes to libiberty.h. * cplus-dem.c: Include libiberty.h for definition of xmalloc. Don't redefine NULL. Use casts to eliminate compiler warnings. * spaces.c: Remove prototypes for malloc and free which are already in libibrty.h. * strcasecmp.c: Use casts to eliminate compiler warnings. * vasprintf.c: Include libiberty.h for definition of malloc. Don't redefine NULL. * vprintf.c: Include stdarg.h if __STDC__. Fri Oct 11 15:42:12 1996 Stu Grossman (grossman@critters.cygnus.com) * config/mh-windows: Add strcasecmp.o to EXTRA_OFILES. Fri Oct 11 11:16:31 1996 Stan Shebs * mpw.c (mpwify_filename): Rewrite to simplify, and to handle upward components correctly. Tue Oct 8 08:55:34 1996 Stu Grossman (grossman@critters.cygnus.com) * config.table, config/mh-windows: Add support for building under MSVC (the Microsoft build environment). Mon Oct 7 10:50:27 1996 Ian Lance Taylor * fnmatch.c: Undef const if not __STDC__. Thu Oct 3 13:46:39 1996 Ian Lance Taylor * fnmatch.c: New file. * Makefile.in (CFILES): Add fnmatch.c. (REQUIRED_OFILES): Add fnmatch.o. (fnmatch.o): New target. Wed Sep 18 14:49:13 1996 Jason Merrill * cplus-dem.c (demangle_template): Fix handling of address args. (gnu_special): Handle type_info stuff. Fri Sep 13 17:52:55 1996 Stan Shebs * mpw.c (DebugPI): Make settable from the env var DEBUG_PATHNAMES. (mpwify_filename): Handle "::/" case. Thu Sep 12 13:30:40 1996 Geoffrey Noer * config/mh-cygwin32: new file (need -DNEED_basename and -DNEED_sys_siglist for native NT rebuilding) * config.table (*-*-cygwin32): new entry * choose-temp.c: bring in sync with gcc (revert Aug 17 change) Thu Aug 29 16:48:45 1996 Michael Meissner * config.table (i[345]86-*-*): Recognize i686 for pentium pro. Tue Aug 27 13:47:58 1996 Stan Shebs * pexecute.c (pexecute) [MPW]: Remove old bogus code that messed with arguments that included a '/', add escape chars to double quotes, remove const decl from arg that Mac compilers don't seem to like. Sat Aug 17 04:44:27 1996 Geoffrey Noer * pexecute.c: Update test for win32 (&& ! cygwin32). * choose-temp.c: fix WIN32 preprocessor defines Thu Aug 15 12:26:48 1996 Stan Shebs * mpw-make.sed: Add @DASH_C_FLAG@ and @SEGMENT_FLAG({Default})@ to editing of default makefile rule. Sun Aug 11 21:03:27 1996 Stu Grossman (grossman@critters.cygnus.com) * alloca-norm.h: Include if _WIN32. * argv.c: Include non-prototyped decls for malloc and string functions if ! _WIN32 or if __GNUC__. Thu Aug 8 12:42:40 1996 Klaus Kaempf * config.h-vms: New file. * makefile.vms: Use it. Wed Aug 7 17:16:12 1996 Stu Grossman (grossman@critters.cygnus.com) * getopt.c (_getopt_internal): If argc is 0, just return (before we reference *argv and segfault). Mon Aug 5 01:29:08 1996 Jason Merrill * Makefile.in (distclean): Add multilib.out. Thu Jul 18 17:40:55 1996 Ian Lance Taylor * alloca-norm.h: Change #ifdef sparc to #if defined (sparc) && defined (sun). From Andrew Gierth . Mon Jul 1 13:40:44 1996 Ken Raeburn Tue May 28 15:29:03 1996 Pat Rankin * vmsbuild.com (REQUIRD_OFILES): Add choose-temp.o and xstrdup.o. Thu Jan 25 18:20:04 1996 Pat Rankin * vmsbuild.com: Changes to handle DEFFUNC(on_exit). (do_ofiles): Allow nonexistent source file in pass 3. (chk_deffunc): New routine. Tue Jun 25 19:24:43 1996 Doug Evans * pexecute.c (PEXECUTE_VERBOSE): Define. (MPW pexecute): Check flags & PEXECUTE_VERBOSE instead of verbose_flag. Tue Jun 25 23:11:48 1996 Jason Molenda (crash@godzilla.cygnus.co.jp) * Makefile.in (docdir): Removed. Tue Jun 25 23:01:07 1996 Jason Molenda (crash@godzilla.cygnus.co.jp) * Makefile.in (oldincludedir): Removed. Tue Jun 25 22:50:07 1996 Jason Molenda (crash@godzilla.cygnus.co.jp) * Makefile.in (datadir): Set to $(prefix)/share. Thu Jun 20 21:17:52 1996 Ian Lance Taylor * cplus-dem.c (demangle_arm_pt): Reindent. Avoid endless loop by checking for errors from do_type. Tue Jun 18 14:36:19 1996 Klaus Kaempf * makefile.vms: New file. * xmalloc.c: If VMS, include and rather than declaring malloc, realloc, and sbrk. Mon Jun 10 13:17:17 1996 Doug Evans * pexecute.c: New file. Wed Jun 5 16:57:45 1996 Richard Henderson * xmalloc.c: Declare sbrk. Sat May 4 05:08:45 1996 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) * alloca-norm.h: Add SPARCworks cc compatible __builtin_alloca declaration. Mon Apr 22 18:41:49 1996 Ian Lance Taylor * xstrerror.c: Include . Sun Apr 21 11:55:12 1996 Doug Evans * Makefile.in (CFILES): Add atexit.c. Sun Apr 21 09:50:09 1996 Stephen L Moshier (moshier@world.std.com) * choose-temp.c: Include sys/types.h before sys/file.h for sco3.2v5. Wed Apr 17 11:17:55 1996 Doug Evans * choose-temp.c: Don't #include sys/file.h ifdef NO_SYS_FILE_H. #include * config/mt-vxworks5 (HDEFINES): Define NO_SYS_FILE_H. Tue Apr 16 11:27:16 1996 Jeffrey A Law (law@cygnus.com) * Makefile.in (lneeded-list): If alloca.o is needed, so is xmalloc.o. Reverts Feb 8, 1995 change. Mon Apr 15 12:53:26 1996 Doug Evans * choose-temp.c: New file. * Makefile.in (CFILES): Add choose-temp.c. (REQUIRED_OFILES): Add choose-temp.o. Sat Apr 13 14:19:30 1996 Stu Grossman (grossman@critters.cygnus.com) * floatformat.c (floatformat_to_double): Don't bias exponent when handling zero's, denorms or NaNs. Thu Apr 11 13:36:56 1996 Stu Grossman (grossman@critters.cygnus.com) * floatformat.c (floatformat_to_double): Fix bugs with handling numbers with fractions < 32 bits. Mon Apr 8 14:48:34 1996 Ian Lance Taylor * config.table: Permit --enable-shared to specify a list of directories. Tue Mar 19 22:02:07 1996 Jason Merrill * cplus-dem.c (demangle_template): Fix for non-mangled pointer arguments. Fri Mar 8 17:24:18 1996 Ian Lance Taylor * configure.in: If srcdir is `.' and with_target_subdir is not `.', then set MULTISRCTOP before calling config-ml.in. Thu Mar 7 13:37:10 1996 Stan Shebs * mpw.c (mpw_open): Add debugging output option. Wed Mar 6 17:36:03 1996 Jason Merrill * cplus-dem.c (demangle_template): Fix for address-of-extern arguments. Tue Feb 27 12:00:50 1996 Raymond Jou * mpw.c (mpwify_filename): Change 6 to 5 in strncmp (unixname, "/tmp/", 5). Tue Feb 20 10:55:53 1996 Ian Lance Taylor * cplus-dem.c (demangle_template): Initialize is_bool. Correctly handle 0 as a pointer value parameter. Mon Feb 5 16:41:44 1996 Ian Lance Taylor * Makefile.in (all): Depend upon required-list. (required-list): New target. (clean): Remove required-list. Wed Jan 31 10:19:41 1996 Steve Chamberlain * win32.c: Deleted. * config.table (i386-*-win32): Deleted. * config/mh-i386win32: Deleted. Thu Jan 18 11:34:17 1996 Ian Lance Taylor * cplus-dem.c (cplus_demangle_opname): Change opname parameter to const char *. (cplus_mangle_opname): Change return type and opname parameter to const char *. Don't cast return value. Tue Jan 16 12:13:11 1996 Stan Shebs * mpw.c: Include Timer.h, in order to get m68k Microseconds trap definition. Wed Jan 3 13:15:04 1996 Fred Fish * obstack.c: Update copyright to 1996. (_obstack_memory_used): Define new function. Called via obstack_memory_used macro. Thu Dec 28 11:39:40 1995 Ian Lance Taylor * xstrdup.c: New file. * Makefile.in (CFILES): Add xstrdup.c. (REQUIRED_OFILES): Add xstrdup.o. (xstrdup.o): New target. Mon Dec 11 18:18:52 1995 Mike Stump * atexit.c: New stub to provide atexit on systems that have on_exit, like SunOS 4.1.x systems. * functions.def (on_exit, atexit): Ditto. Mon Dec 11 15:42:14 1995 Stan Shebs * mpw.c (mpw_abort): Remove decl. (mpw_access): Move debugging printf. Sat Dec 2 01:25:23 1995 Ian Lance Taylor * config.table: Consistently use ${host} rather than ${xhost} or ${target}. * configure.in: Don't bother to set ${xhost} before calling config.table. Tue Nov 28 14:16:57 1995 Brendan Kehoe * Makefile.in (.c.o): Use test instead of the left bracket, to avoid problems with some versions of make. Tue Nov 28 11:45:17 1995 Stan Shebs * mpw-make.sed: Fix INCDIR edit to work with Nov 14 change. Tue Nov 21 11:26:34 1995 Fred Fish * config/mh-hpux: Remove. It was only used to define EXTRA_OFILES, which was set to just alloca.o, which is now automatically marked as needed by the autoconfiguration process. Tue Nov 21 14:15:06 1995 Ian Lance Taylor * config.table: Check ${with_cross_host} rather than comparing ${host} and ${target}. Thu Nov 16 14:34:42 1995 Ian Lance Taylor * configure.in: If with_target_subdir is empty, set xhost to ${host} rather than ${target} before calling config.table. Tue Nov 14 01:38:30 1995 Doug Evans * Makefile.in (MULTITOP): Deleted. (MULTISRCTOP, MULTIBUILDTOP): New. (FLAGS_TO_PASS): Delete INCDIR. (INCDIR): Add $(MULTISRCTOP). (install_to_libdir): Add $(MULTISUBDIR). Call $(MULTIDO). * configure.in: Delete call to cfg-ml-com.in. Call config-ml.in instead of cfg-ml-pos.in. (cross-compile check): Change to test for with_target_subdir. (EXTRA_LINKS): Delete. Sun Nov 12 12:13:04 1995 Stan Shebs * mpw-make.sed: Add getpagesize.c.o to needed-list. * mpw.c [USE_MW_HEADERS]: Conditionalize compiling of functions that are supplied by Metrowerks libraries. (fstat): Clean up descriptor->pointer conversion code. (InstallConsole, etc): Empty definitions, for when linking with SIOUX. Sun Nov 5 19:25:27 1995 Per Bothner * Makefile.in (FLAGS_TO_PASS): Also pass PICFLAGS. (.c.o): Stylistic change. Thu Nov 2 12:06:29 1995 Ian Lance Taylor * strtol.c, strtoul.c: Don't include . From phdm@info.ucl.ac.be (Philippe De Muyter). Wed Nov 1 11:59:36 1995 Ian Lance Taylor * configure.in: Correct sed call. Mon Oct 30 13:03:45 1995 Per Bothner * configure.in: Clean up / simplify for native. * configure.in: Merge in stuff from ../xiberty/configure.in. * Makefile.in (CC): Add definition (so it can be overrridden by ../configure). Tue Oct 24 17:57:27 1995 Stan Shebs * mpw-make.sed: Leave strerror.c.o in standard list of functions. * mpw.c (R_OK, ENOENT, EACCESS, ENOSYS): Remove. (link): Remove useless definition with error return. (last_microseconds, warn_if_spin_delay, record_for_spin_delay): Use UnsignedWide type for microsecond counts. Thu Oct 19 10:52:07 1995 Michael Meissner * memcmp.c (memcmp): Argument types are const void *, not void *const. * strncasecmp.c (strncasecmp): Include ansidecl.h/stdarg.h, not sys/types.h. * strcasecmp.c (strcasecmp): Ditto. Tue Oct 10 11:03:24 1995 Fred Fish * Makefile.in (BISON): Remove macro. Tue Sep 26 15:06:46 1995 Stan Shebs * Makefile.in (HFILES): Add default empty definition. * mpw-config.in (config.h): Only update if changed. * mpw-make.in: Remove. * mpw-make.sed: New file, edits Makefile.in into MPW makefile. * mpw.c: Remove semi-clone of strerror code. (sys_nerr, sys_errlist): Define here. (Microseconds): Only define as A-line trap if m68k Mac. Wed Sep 20 12:53:32 1995 Ian Lance Taylor * Makefile.in (maintainer-clean): New synonym for distclean. Mon Aug 28 19:47:52 1995 Per Bothner * config.table: For host, generalize rs6000-ibm-aix* to *-ibm-aix* so we also include powerpc. Tue Aug 22 03:18:05 1995 Ken Raeburn Fri Jun 16 18:35:40 1995 Pat Rankin (rankin@eql.caltech.edu) * xstrerror.c: New file. * Makefile.in, vmsbuild.com: Compile it. Mon Jul 31 12:16:32 1995 steve chamberlain * config.table (i386-*-win32): New. Fri Jul 21 11:35:52 1995 Doug Evans * Makefile.in (MULTITOP): New variable. (MULTIDIRS, MULTISUBDIR, MULTIDO, MULTICLEAN): Likewise. (all): Add multilib support. (install_to_tooldir, *clean): Likewise. Mon Jul 10 11:47:27 1995 Ken Raeburn * makefile.dos (OBJS): Add hex.o. From DJ Delorie. Fri Jun 30 17:28:59 1995 Pat Rankin (rankin@eql.caltech.edu) * vmsbuild.com: create "new-lib.olb", build libiberty under that name, and then make it become "liberty.olb" when done, so that an incomplete build attempt never leaves behind something which looks like a complete library. Thu Jun 29 00:22:02 1995 Steve Chamberlain * config/mh-i386pe: New file for PE hosts. * config.table: Understand PE hosts. Wed Jun 28 19:13:23 1995 Jason Merrill * cplus-dem.c: Update from gcc. * argv.c, dummy.c: If __STDC__, #include "alloca-conf.h" after . * alloca-norm.h: If __STDC__, declare alloca with its parameter. Thu Jun 22 18:57:47 1995 Stan Shebs * mpw-make.in (ALL_CFLAGS): Define NEED_basename. * mpw.c: Only test DebugPI once whenever printing debug info. (mpwify_filename): If filename is /tmp/foo, change it into :_foo, also fix to not write on input filename buffer. (mpw_access): Use stat() instead of open(), works for directories as well as files. Mon Jun 19 00:33:22 1995 Jason Merrill * Makefile.in: Massage broken shells that require 'else true'. Sat Jun 17 23:21:58 1995 Fred Fish * alloca-norm.h: Declare alloca as type "PTR" to match functions.def. Declare __builtin_alloca in the sparc case, as argv.c did. * argv.c: Replace inline version of alloca-norm.h at start of file with a #include of alloca-conf.h. Precede it with an include of ansidecl.h because alloca-norm.h needs to declare alloca as "PTR". Mon Jun 12 14:24:26 1995 Steve Chamberlain * win32.c: New file. Fri Jun 9 15:16:14 1995 Jason Merrill * dummy.c: #include "alloca-conf.h". Wed Jun 7 11:46:23 1995 Jason Merrill * Makefile.in (mostlyclean): Remove stamp-picdir. (clean): Don't. Mon Jun 5 18:46:06 1995 Jason Merrill * config.table (frags): Use toplevel pic frags. * Makefile.in (PICFLAG): New macro. (all): Depend on stamp-picdir. (needed-list): Ditto. (.c.o): Also build pic object. (stamp-picdir): New rule. (mostlyclean): Remove pic. (clean): Remove stamp-picdir. Fri Mar 24 16:55:48 1995 Pat Rankin (rankin@eql.caltech.edu) * vmsbuild.com (config.h): Add `#define NEED_basename'. Tue May 23 10:12:46 1995 Per Bothner * clock.c, getopt.c, strtod.c, vsprintf.c: Change from using LGPL to libio-style copyright. * getpagesize.c: Remove FSF copyright. Sat May 20 12:30:23 1995 Ken Raeburn Added improved VMS support from Pat Rankin: Fri Mar 17 18:40:36 1995 Pat Rankin (rankin@eql.caltech.edu) * vmsbuild.com: new file. * getpagesize.c (getpagesize): implement for VMS; * strerror.c (strerror, strerrno, strtoerrno): add rudimentary support for EVMSERR. Thu May 18 17:01:42 1995 Ken Raeburn Wed May 10 14:28:16 1995 Richard Earnshaw (rearnsha@armltd.co.uk) * floatformat.c (floatformat_arm_ext): Define. Tue May 16 13:30:59 1995 Per Bothner * basename.c, bcmp.c, getcwd.c, insque.c, rename.c, sigsetmask.c, strerror.c, strsignal.c: Remove FSF copyright. * sigsetmask.c: #include - seems to be needed by ISC. Mon May 15 19:53:17 1995 Per Bothner * bcopy.c, bzero.c, memcmp.c, memcpy.c, memset.c, strchr.c, strrchr.c, strstr.c, vfork.c: Remove FSF Copyright, because this might contaminate libstdc++ with the LGPL. (OK'd by RMS 11 Oct 94.) * strchr.c, strrchr.c: Add cast to suppress const warning. Thu May 4 14:36:42 1995 Jason Merrill * cplus-dem.c: Use const instead of CONST. Don't include ansidecl.h directly. Wed Apr 19 01:30:27 1995 Jason Merrill * cplus-dem.c: Don't include libiberty.h. Do declare xmalloc and xrealloc. (-DMAIN): Don't rely on an externally-defined version number; instead, require the version number to be defined as a preprocessor macro. Handle the RS/6000 leading dot. Define xmalloc, xrealloc and fatal. Don't strip a leading underscore if we couldn't demangle the word. Tue Apr 4 13:03:51 1995 Stan Shebs (Old mpw.c change descriptions retained for informational value.) * mpw.c (warning_threshold): Default to .4 sec. (overflow_count, current_progress): New globals. (warn_if_spin_delay): Include current progress type, such as program name, in message. (mpw_start_progress): Set current_progress variable from arg. (mpw_end_progress): Report spin delays by power-of-two-size buckets instead of constant-size buckets. * mpw.c: Clean up formatting, types, returns, etc. (ENOSYS): Define. (mpw_fread, mpw_fwrite): Define. (sleep): Define correctly. * mpw.c: New code to implement cursor spinning support. (umask): New function. (mpw_fopen, mpw_fseek, stat, fstat): Call PROGRESS. * mpw.c (mpw_basename, mpw_mixed_basename): New functions, find basenames for MPW and MPW/Unix filenames. (mpw_special_init): New function, calls Macsbug if desired. * mpw.c: Add GPL notice. (mpwify_filename): Add more transformations. (mpw_fopen): Call mpwify_filename on file names. (rename): Remove. (chdir, getcwd): Add simple definitions. * mpw.c: Random cleanups, remove unused code bits. Added copy of strerror.c for gcc's use. (stat, fstat, _stat): New versions based on Guido van Rossum code. * mpw.c (mpw_fseek): Make it work correctly when doing SEEK_CUR. * mpw.c (stat): Remove hack definition, get from sys/stat.h. (fork, vfork, etc): Print error messages if called. (getrusage, sbrk, environ, isatty, link, utime, mkdir, rmdir, rename, chown): Define. * mpw-config.in: New file, MPW version of configure.in. * mpw-make.in: New file, MPW version of Makefile.in. * mpw.c: New file, MPW compatibility routines. Fri Mar 24 14:10:30 1995 Jim Kingdon (kingdon@lioth.cygnus.com) * basename.c: Include config.h before checking for NEED_basename. Thu Mar 23 19:09:54 1995 Jason Merrill * functions.def: Add DEFFUNC for basename. * basename.c: Only define basename if NEED_basename. Thu Mar 16 13:36:05 1995 Jason Merrill * config.table: Fix --enable-shared logic for native builds. Mon Mar 13 11:05:11 1995 Jason Merrill * cplus-dem.c (demangle_template): Demangle bool literals properly. Mon Mar 6 23:57:28 1995 Stu Grossman (grossman@cygnus.com) * strtol.c strtoul.c: Replace these with less buggy versions from NetBSD. (strtoul in particular couldn't handle base 16.) Wed Mar 1 15:59:01 1995 Ian Lance Taylor * config/mt-vxworks5 (HDEFINES): Define NO_SYS_PARAM_H. * clock.c: If NO_SYS_PARAM_H is defined, don't include . * getcwd.c, getpagesize.c, getruntime.c: Likewise. Fri Feb 17 15:40:55 1995 Ian Lance Taylor * getruntime.c (get_run_time): Don't assume that CLOCKS_PER_SEC is a number; ANSI appears to permit any expression, including a function call. * config.table (*-*-vxworks5*): Use mt-vxworks5 when configuring xiberty. * config/mt-vxworks5: New file. Thu Feb 9 14:19:45 1995 Ian Lance Taylor * basename.c (basename): Change argument to be const. Wed Feb 8 18:06:52 1995 Jason Merrill * Makefile.in (lneeded-list): Don't worry about xmalloc. Sun Jan 15 00:40:36 1995 Jeff Law (law@snake.cs.utah.edu) * Makefile.in (distclean): Delete xhost-mkfrag. Thu Jan 12 16:54:18 1995 Jason Merrill * Makefile.in (lneeded-list): If alloca.o is needed, so is xmalloc.o. Wed Jan 11 22:39:56 1995 Ken Raeburn * hex.c: New file. * Makefile.in (REQUIRED_OFILES, CFILES): List it. (hex.o): Add dependencies. * cplus-dem.c (demangle_prefix): For GNU style constructor and destructor names, try demangling the remainder of the string. Wed Dec 28 00:49:15 1994 Ian Lance Taylor * vasprintf.c (int_vasprintf): New static function. (vasprintf): Use int_vasprintf. Removes assumption that va_list is assignment compatible. Sat Nov 5 19:29:12 1994 Jason Merrill (jason@phydeaux.cygnus.com) * Makefile.in (LIBCFLAGS): New variable. (FLAGS_TO_PASS): Pass it. (.c.o): Use it. Thu Nov 3 19:09:47 1994 Ken Raeburn * getopt.c, getopt1.c: Do compile these functions under Linux, since many native versions are based on glibc but are buggy. Mon Oct 24 15:16:46 1994 Per Bothner * vasprintf.c: Make 'format' arg be const, to avoid a mismatch with prototype in GNU libc. Support stdarg.h as well as varargs.h. Tue Oct 11 17:48:27 1994 Jason Merrill (jason@phydeaux.cygnus.com) * Makefile.in (REQUIRED_OFILES): Add vasprintf.o. * functions.def: Remove vasprintf. Wed Sep 14 17:04:55 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) * xmalloc.c (first_break): New static variable. (xmalloc_set_program_name): Record sbrk (0) in first_break. (xmalloc): If memory allocation fails, try to report how much memory was allocated by the program up to this point. (xrealloc): Likewise. Sun Sep 04 17:58:10 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org) * Makefile.in (ERRORS_CC): New variable, defaulted to $(CC). Use it when linking dummy. * config.table: Add host RISCiX Makefile frag. * config/mh-riscix: New file. Thu Aug 25 17:29:44 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) * Makefile.in (FLAGS_TO_PASS): Define. ($(RULE1)): Use $(FLAGS_TO_PASS). Wed Aug 24 17:08:47 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) * vasprintf.c: Include . (vasprintf): Add casts to void for va_arg to avoid gcc warnings. * xatexit.c: Declare malloc. Fri Aug 19 15:29:12 1994 Kung Hsu (kung@mexican.cygnus.com) * cplus-dem.c (demangle_args): Fix a bug in previous patch (the one below). Thu Aug 18 14:37:14 1994 Kung Hsu (kung@mexican.cygnus.com) * cplus-dem.c (demangle args): Handle ARM repeat encoding where the type index is greater than 9. Wed Aug 17 16:13:49 1994 Kung Hsu (kung@mexican.cygnus.com) * cplus-dem.c (demangle_qualified): accept optional '_' between qualified name. This is baecause the template name may end with numeric and can mixed up with the length of next qualified name. Wed Aug 3 05:52:14 1994 D. V. Henkel-Wallace (gumby@cygnus.com) * config/mt-sunos4: Use our standard location for cross-includes and cross-libs when the target is also a "host" environment (ie no newlib; includes and such don't belong to us). This is specific to the Cygnus Support environment. Tue Aug 2 15:25:12 1994 Kung Hsu (kung@mexican.cygnus.com) * cplus-dem.c (demangle_template): demangle as xxx<'Q'> not xxx. Mon Aug 1 17:02:48 1994 Kung Hsu (kung@mexican.cygnus.com) * cplus-dem.c (main): flush stdout to make pipe work. Sat Jul 16 12:56:32 1994 Stan Shebs (shebs@andros.cygnus.com) * config.table (*-*-cxux7*): Recognize. * floatformat.c (floatformat_m88110_ext) [HARRIS_FLOAT_FORMAT]: Harris-specific float format. * config/mh-cxux7: New file. Wed Jun 29 00:26:17 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) * cplus-dem.c (demangle_template): Make sure that the result of consume_count doesn't index beyond the end of the string. Mon Jun 20 23:54:37 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) * cplus-dem.c (gnu_special): Handle vtable mangling of gcc-2.4.5 and earlier. Improve test for new vtable mangling. Change output back to `virtual table'. Mon Jun 20 11:37:30 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) * obstack.c: Always compile this code, even if using the GNU library. Avoids problems with relatively recent binary incompatibility. Thu Jun 16 17:54:01 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * cplus-dem.c: Include libiberty.h. (xmalloc, xrealloc, free): Don't declare. (strstr): Don't declare parameters. (xmalloc, xrealloc): Don't define. (long_options): Add no-strip-underscores. (main): Call xmalloc_set_program_name. Pass n in short options to getopt_long. Handle option 'n' to not strip underscores. (usage): Mention -n and --no-strip-underscores. Sun Jun 12 01:37:09 1994 Jason Merrill (jason@deneb.cygnus.com) * cplus-dem.c (demangle_template): Separate consecutive >'s with a space. (gnu_special): Demangle template and qualified names in a vtable name. Fri May 27 12:27:52 1994 Ken Raeburn (raeburn@cujo.cygnus.com) From gas-2.3 and binutils-2.4 net releases: Wed May 11 22:32:00 1994 DJ Delorie (dj@ctron.com) * makefile.dos: [new] Makefile for dos/go32 * configure.bat: update for latest files * msdos.c: remove some functions now in libc.a Fri May 20 18:53:32 1994 Per Bothner (bothner@kalessin.cygnus.com) * cplus-dem.c (gnu_special): Recognize thunks, as well as the new naming style for vtables (when -fvtable-thunks). Wed May 18 13:34:06 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * Makefile.in (XTRAFLAGS): Don't define. (.c.o, dummy.o): Don't use XTRAFLAGS. ($(RULE1)): Don't pass XTRAFLAGS down in recursive call. Fri May 13 16:02:12 1994 Jim Kingdon (kingdon@lioth.cygnus.com) * vasprintf.c: New file. * Makefile.in, functions.def: Add it. Fri May 13 16:20:28 1994 Jason Merrill (jason@deneb.cygnus.com) * cplus-dem.c (demangle_fund_type): Grok bool. Fri May 6 14:44:21 1994 Steve Chamberlain (sac@cygnus.com) * config.table: Add go32 * config/mh-go32: New template. Fri May 6 11:01:59 1994 D. V. Henkel-Wallace (gumby@rtl.cygnus.com) * config.table, config/mt-sunos4: config for when sun4 is cross target. Mon Apr 11 00:54:33 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) * getopt.c [not __GNU_LIBRARY__] [__GCC__] [not __STDC__]: Declare strlen to return int. Don't include stddef.h. Fri Apr 1 00:38:17 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu) * getopt.c: Delete use of IN_GCC to control whether stddef.h or gstddef.h is included. Thu Apr 14 14:00:56 1994 Kung Hsu (kung@mexican.cygnus.com) * cplus-dem.c (demangle_signature): Fix a bug in template function type numbering. Wed Apr 13 17:23:03 1994 Kung Hsu (kung@mexican.cygnus.com) * cplus-dem.c (demangle_signature): Fix template function with arm style argument type number, Tn. Wed Apr 13 17:11:15 1994 Jason Merrill (jason@deneb.cygnus.com) * cplus-dem.c (optable): Add new[] and delete[]. Fri Apr 8 11:21:42 1994 Jim Kingdon (kingdon@deneb.cygnus.com) * argv.c (buildargv): Don't produce empty argument just because there is trailing whitespace. Wed Apr 6 11:42:14 1994 Kung Hsu (kung@mexican.cygnus.com) * cplus-dem.c (demangle_template): fix 'Q' qualified name bug. Handle 'p' same as 'P'. * cplus-dem.c (do_type): Handle 'p' same as 'P'. Sat Mar 26 12:00:13 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) * floatformat.c (get_field, put_field): Fix off by one error in little endian case. Thu Mar 24 10:40:19 1994 Jim Kingdon (kingdon@lioth.cygnus.com) * floatformat.c (floatformat_from_double): Pass unsigned char *, not char *, to put_field. Fri Mar 18 12:34:33 1994 Per Bothner (bothner@kalessin.cygnus.com) * memmove.c: Re-wrote; placed in public domain. Wed Mar 16 10:33:07 1994 Jim Kingdon (kingdon@lioth.cygnus.com) * cplus-dem.c (demangle_prefix): If ARM demangling, don't treat __Q* as a constructor. Mon Mar 14 12:26:02 1994 Ian Lance Taylor (ian@cygnus.com) * ieee-float.c: Removed; no longer used. * Makefile.in: Changed accordingly. Mon Mar 7 12:28:17 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * floatformat.c (get_field): Removed unused local variable i. (put_field): Removed unused local variable i. Sun Feb 27 21:50:11 1994 Jim Kingdon (kingdon@deneb.cygnus.com) * floatformat.c: New file, intended to replace ieee-float.c. * Makefile.in: Change accordingly. Thu Feb 24 11:51:12 1994 David J. Mackenzie (djm@rtl.cygnus.com) * getopt.c: Remove #ifdef GETOPT_COMPAT and #if 0 code. (_getopt_initialize): New function, broken out of _getopt_internal. (_getopt_internal): If long_only and the ARGV-element has the form "-f", where f is a valid short option, don't consider it an abbreviated form of a long option that starts with f. Otherwise there would be no way to give the -f short option. Thu Feb 10 14:44:16 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) * getopt.c [not __GNU_LIBRARY__] [__GNUC__] [not IN_GCC]: Test just __STDC__, not emacs. Wed Feb 9 00:14:00 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu) * getopt.c [not __GNU_LIBRARY__] [__GNUC__] [not IN_GCC] [emacs] [not __STDC__]: Don't include stddef.h. Don't declare strlen. Fri Dec 24 19:43:00 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu) * getopt.c (_NO_PROTO): Define before config.h is included. Mon Sep 20 15:59:03 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) * getopt.c, getopt1.c [emacs || CONFIG_BROKETS]: Include only under these, else "config.h". Thu Aug 12 18:16:49 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu) * getopt.c, getopt1.c [HAVE_CONFIG_H]: Include instead of "config.h". Sun Feb 20 17:17:01 1994 Ian Lance Taylor (ian@lisa.cygnus.com) * concat.c: Check ANSI_PROTOTYPES rather than __STDC__ to decide whether to use prototypes or not. * strerror.c (const): Never undefine; let ansidecl.h handle it. * strsignal.c (const): Likewise. Thu Feb 17 13:27:35 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * xatexit.c (_xexit_cleanup): Declare as extern; don't initialize. Merging common and initialized variables need not be supported by ANSI C compilers. (xatexit): Initialize _xexit_cleanup if not already set. * xexit.c: Comment fix. Wed Feb 16 01:15:36 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * xmalloc.c: Don't declare xexit; it's declared in libiberty.h. (xrealloc): If oldmem is NULL, allocate with malloc, rather than assuming that realloc works correctly. Tue Feb 15 09:26:16 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) * concat.c, ieee-float.c: Replace inclusion of with explicit function declarations, as recommended by Ian Taylor. Sat Feb 12 10:31:11 1994 David J. Mackenzie (djm@rtl.cygnus.com) * xmalloc.c (xmalloc, xrealloc): Use PTR and size_t throughout. (malloc, realloc): Declare. Thu Feb 10 17:08:19 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * argv.c, basename.c: Include ansidecl.h and libiberty.h. * concat.c, fdmatch.c, getruntime.c, spaces.c: Likewise. * strerror.c, strsignal.c, xatexit.c, xexit.c: Likewise. * xmalloc.c: Likewise. * concat.c: Don't declare xmalloc. If __STDC__, use macros, not macros. * spaces.c (spaces): Make return type const. Don't crash if malloc returns NULL. * strerror.c (struct error_info): Make name and msg fields const. (error_names): Make const. (strerrno): Make const. (strtoerrno): Make argument const. * strsignal.c (struct signal_info): Make name and msg fields const. (signal_names, sys_siglist): Make const. (strsignal, strsigno): Make const. (strtosigno): Make argument const. * xatexit.c: Declare parameter types. * xmalloc.c (name): Make const. (xmalloc_set_program_name): Make argument const. * Makefile.in (INCDIR): Define. (.c.o): Use $(INCDIR). (dummy.o): Likewise. (argv.o, basename.o): New targets; depend on libiberty.h. (concat.o, fdmatch.o, getruntime.o, spaces.o): Likewise. (strerror.o, strsignal.o, xatexit.o, xexit.o): Likewise. (xmalloc.o): Likewise. (cplus-dem.o): New target; depend on demangle.h. (getopt.o, getopt1.o): New targets; depend on getopt.h. (ieee-float.o): New target; depend on ieee-float.h. (obstack.o): New target; depend on obstack.h. Tue Feb 8 05:29:08 1994 David J. Mackenzie (djm@thepub.cygnus.com) Handle obstack_chunk_alloc returning NULL. This allows obstacks to be used by libraries, without forcing them to call exit or longjmp. * obstack.c (_obstack_begin, _obstack_begin_1, _obstack_newchunk): If CALL_CHUNKFUN returns NULL, set alloc_failed, else clear it. (_obstack_begin, _obstack_begin_1): Return 1 if successful, 0 if not. Tue Feb 8 00:32:28 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) * concat.c, ieee-float.c: Include . Sun Feb 6 21:28:46 1994 David J. Mackenzie (djm@thepub.cygnus.com) * xmalloc.c (xmalloc_set_program_name): New function. (xmalloc, xrealloc): Include the name in the error message, if set. * Replace atexit.c with xatexit.c. * Makefile.in (CFILES), functions.def: Change references. Sat Feb 5 14:02:32 1994 Stan Shebs (shebs@andros.cygnus.com) * getruntime.c (get_run_time): Use getrusage or times if HAVE_GETRUSAGE or HAVE_TIMES are defined. Fri Feb 4 15:49:38 1994 David J. Mackenzie (djm@thepub.cygnus.com) * atexit.c: New file. * Makefile.in (CFILES), functions.def: Add it. * xexit.c: New file. * Makefile.in (CFILES, REQUIRED_OFILES): Add it. * xmalloc.c (xmalloc, xrealloc): Call xexit instead of exit. Change request for 0 bytes into request for 1 byte. Wed Feb 2 11:36:49 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * xmalloc.c (xmalloc, xrealloc): Print size using %lu, and cast to unsigned long, to avoid warnings. Fri Jan 28 17:49:06 1994 Ken Raeburn (raeburn@cujo.cygnus.com) * dummy.c: Don't include time.h ever; always define clock_t as "unsigned long". Until gcc/fixincludes ensures that clock_t exists, __STDC__ isn't a sufficient test. And if clock() doesn't exist, clock_t probably doesn't either. Mon Jan 24 11:52:31 1994 Stan Shebs (shebs@andros.cygnus.com) * clock.c, getruntime.c: New files. * Makefile.in: Add to file lists. * functions.def (clock): Add to list. * dummy.c (time.h): Add if __STDC__. (clock_t): #define as "unsigned long" if not __STDC__. Tue Jan 11 11:27:44 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * strtod.c: Declare atof. From edler@jan.ultra.nyu.edu (Jan Edler). Tue Dec 28 14:17:30 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * Makefile.in (errors): Use CFLAGS as well as LDFLAGS when linking. Fri Dec 17 12:26:07 1993 Kung Hsu (kung@cirdan.cygnus.com) * cplus-dem.c (demangle_arm_pt): New function. Common code for ARM template demangling. * cplus-dem.c (demangle_class_name): Use demangle_arm_pt. * cplus-dem.c (demangle_prefix): Likewise. Tue Nov 30 15:47:48 1993 Jason Merrill (jason@deneb.cygnus.com) * cplus-dem.c (cplus_demangle_opname): Add CONST to please gcc. Sat Nov 27 11:05:50 1993 Fred Fish (fnf@cygnus.com) Merge changes from tom@basil.icce.rug.nl (Tom R.Hageman) * strerror.c, strsignal.c: As a small space optimization, don't include messages when they aren't actually used. Merge changes from takefive.co.at!joe (Josef Leherbauer) * cplus-dem.c (demangle_prefix, demangle_function_name, cplus_demangle_opname): Fixes for systems where cplus_marker is something other than '$'. Fri Nov 26 13:51:11 1993 Per Bothner (bothner@kalessin.cygnus.com) * waitpid.c: Simple-minded approcimation to waitpid using vanilla wait. * functions.def, Makefile.in: Update accordingly, Thu Nov 18 18:01:15 1993 Kung Hsu (kung@cirdan.cygnus.com) * cplus-dem.c(demangle_template): fix bug template instantiation with value of user defined type. Wed Nov 17 18:30:21 1993 Kung Hsu (kung@cirdan.cygnus.com) * cplus-dem.c(cplus_demangle_opname): add the subject new function to support unified search of operator in class. Wed Nov 10 09:47:22 1993 Jim Kingdon (kingdon@lioth.cygnus.com) gcc -Wall lint: * strtoul.c (strtoul): use "(digit = *s) != '\0'" not just "digit = *s" as condition in while loop. Tue Nov 9 15:52:22 1993 Mark Eichin (eichin@cygnus.com) * Makefile.in: pass SHELL to recursive make Thu Nov 4 12:09:26 1993 Per Bothner (bothner@kalessin.cygnus.com) * vfprintf.c, vprintf.c, vsprintf.c: Make format arg be (const char*), for ANSI (and gcc w/fixproto) consistency. Thu Nov 4 08:29:04 1993 Jim Kingdon (kingdon@lioth.cygnus.com) * config.table: Make *-*-hiux* use mh-hpux. Fri Oct 22 07:53:15 1993 Jim Kingdon (kingdon@lioth.cygnus.com) * config.table: Add * to end of all OS names. Tue Oct 19 17:12:01 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com) * Makefile.in (lneeded-list): ensure that object file names are not duplicated, as multiple instances of the same object file in a library causes problems on some machines Mon Oct 18 21:59:28 1993 Jim Kingdon (kingdon@lioth.cygnus.com) * strcasecmp.c, strncasecmp.c: Change u_char to unsigned char. Fri Oct 15 22:17:11 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com) * strncasecmp.c: new file, implements strncasecmp * strcasecmp.c: new file, implement strcasecmp * Makefile.in (CFILES): list these two new source files * functions.def: add strcasecmp and strncasecmp entries Fri Oct 15 14:53:05 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * strtoul.c (strtoul), strtol.c (strtol): Handle overflow according to ANSI C. Thu Oct 14 16:34:19 1993 Kung Hsu (kung@cirdan.cygnus.com) * cplus-dem.c: add support of ARM global constructor/destructor, and 'G' for passing record or union in parameter. Wed Oct 13 13:36:19 1993 Jim Kingdon (kingdon@lioth.cygnus.com) * Makefile.in: Fix comment to clarify that stuff in REQUIRED_OFILES should not be in functions.def. Wed Oct 13 13:13:38 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * functions.def: Removed xmalloc. Stuff in REQUIRED_OFILES should not be in functions.def. Mon Oct 4 18:26:39 1993 Kung Hsu (kung@cirdan.cygnus.com) * cplus-dem.c: change globl constructor/destructor to proper name Tue Sep 28 18:11:07 1993 Kung Hsu (kung@cirdan.cygnus.com) * cplus-dem.c: fix bug in constructor/destructor Tue Sep 28 16:20:49 1993 Kung Hsu (kung@cirdan.cygnus.com) * cplus-dem.c: support both old and new _vt$... vtbl mangled names Fri Sep 24 19:07:16 1993 Jason Merrill (jason@deneb.cygnus.com) * cplus-dem.c: Fix demangle_template prototype Fri Sep 24 17:32:55 1993 Kung Hsu (kung@cirdan.cygnus.com) * cplus-dem.c: fix template demangling * cplus-dem.c: fix const type demangling * cplus-dem.c: fix constructor/destructor, virtual table, qualifier, global constructor/destructor demangling Wed Sep 1 23:13:11 1993 Jim Kingdon (kingdon@lioth.cygnus.com) * strsignal.c, strerror.c: Use fully-bracketed initializer to keep gcc -Wall happy. Fri Aug 27 10:30:09 1993 Jason Merrill (jason@deneb.cygnus.com) * cplus-dem.c (do_type): Add CONSTS to make gcc happy with last patch. Fri Aug 27 11:24:54 1993 Jim Kingdon (kingdon@lioth.cygnus.com) Patch from Paul Flinders: * cplus-dem.c (do_type): Deal with arrays. Tue Aug 24 14:23:50 1993 Jim Kingdon (kingdon@lioth.cygnus.com) * cplus-dem.c (demangle_qualified: Deal with GNU format for more than 9 classes. Wed Aug 18 19:50:29 1993 Jason Merrill (jason@deneb.cygnus.com) * Makefile.in (dummy.o): Redirect to /dev/null to avoid "variable not initialized" warnings under HP/UX Sun Aug 15 20:42:40 1993 Jim Kingdon (kingdon@lioth.cygnus.com) * strerror.c: Move include of stdio.h after sys_errlist #define. Also remove NULL definition (stdio.h always defines NULL, so it never did anything but clutter up the code). Sat Aug 14 14:21:49 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com) * Makefile.in, functions.def: handle xmalloc.c * xmalloc.c: provide xmalloc and xrealloc functions Thu Aug 12 17:38:57 1993 David J. Mackenzie (djm@thepub.cygnus.com) * cplus-dem.c: Fix a comment. Sat Aug 7 13:56:35 1993 David J. Mackenzie (djm@thepub.cygnus.com) * getopt1.c: Declare const the way getopt.c does. Fri Aug 6 17:03:13 1993 David J. Mackenzie (djm@thepub.cygnus.com) * obstack.c, alloca.c: Update from FSF. * getopt.c, getopt1.c: Update to current FSF version, which doesn't use alloca. Tue Jul 27 14:03:57 1993 Brendan Kehoe (brendan@lisa.cygnus.com) * Makefile.in (demangle): Add the target with a message saying where demangle went. Mon Jul 26 15:49:54 1993 Jim Kingdon (kingdon@lioth.cygnus.com) * Makefile.in: Remove obsolete `demangle' target. Thu Jul 22 08:31:01 1993 Fred Fish (fnf@deneb.cygnus.com) * cplus-dem.c (arm_special): Apply patch from arg@lucid.com to avoid infinite loop on vtbl symbols with disambiguating "junk" tacked on the end. Mon Jul 19 14:10:37 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com) * strsignal.c: work around some systems losing definitions of sys_siglist * config/mh-lynxos: this system has a losing definition of sys_siglist * config.table: use mh-lynxos for *-*-lynxos Mon Jul 19 17:08:52 1993 Ken Raeburn (raeburn@rtl.cygnus.com) * config.table: Add support for HPPA BSD hosts. * config/mh-hpbsd: New file. Mon Jul 12 18:00:40 1993 K. Richard Pixley (rich@cygnus.com) * Makefile.in (TAGS): make work when srcdir != objdir. Sun Jun 27 15:35:31 1993 David J. Mackenzie (djm@thepub.cygnus.com) * cplus-dem.c (main): Add long options, including --help and --version. (usage): New function from code in main. Tue Jun 22 11:37:38 1993 Per Bothner (bothner@deneb.cygnus.com) * config.table: New shell scipt, sourced by both ./configure,in and ../xiberty/configure.in, to avoid maintainance lossages. * configure.in and ../xiberty/configure.in: Use config.table. * configure.in: Don't use mh-aix for AIX 3.2, only for 3.1. * configure.in: Map *-*-irix* (except irix4) to mh-sysv. * ../xiberty/configure.in: Update from ./configure.in. Tue Jun 15 17:05:31 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com) * Makefile.in: remove parentdir support Wed May 26 12:59:09 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) * cplus-dem.c (xrealloc): Match definition with prototype. Tue May 25 14:27:51 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) * cplus-dem.c (demangle_prefix): Demangle cfront local variables as an extension to ARM demangling. Fri May 21 09:53:57 1993 Jim Kingdon (kingdon@lioth.cygnus.com) * ieee-float.c: Don't require pointers to double to be aligned. Tue May 18 17:12:10 1993 Fred Fish (fnf@cygnus.com) (merge changes from dlong@cse.ucsc.edu) * cplus-dem.c (consume_count): Simplify. * cplus-dem.c (arm_pt, demangle_class_name): New functions. * cplus-dem.c (various): Calls to arm_pt, demangle_class_name. * cplus-dem.c (xmalloc, xrealloc, strstr): Make extern decls into full prototypes. * cplus-dem.c (free): Add prototype. * cplus-dem.c (optable): Fully bracketize initializer. Fri May 14 17:13:05 1993 Per Bothner (bothner@cygnus.com) * cplus-dem.c: Whether initial underscores are stripped depends on the external variable prepends_underscore (which is generated by the binutils Makefile). Fri May 14 07:32:20 1993 Ken Raeburn (raeburn@deneb.cygnus.com) * cplus-dem.c (mop_up, arm_special): Remove some unused variables. Tue May 4 20:31:59 1993 Fred Fish (fnf@cygnus.com) * cplus-dem.c (consume_count): Return zero if arg does not start with digit, and don't consume any input. Tue May 4 08:10:28 1993 Jim Kingdon (kingdon@cygnus.com) * Makefile.in (demangle): Use ${srcdir} not $^. * strtod.c: New file, needed at least for BSD 4.3. Sun May 2 11:30:42 1993 Fred Fish (fnf@cygnus.com) * strsignal.c (sys_siglist): For ANSI compilations, type is "const char *const". Also remove conditionalization on __STDC__ since const is defined away for non-ANSI. Wed Apr 28 19:29:55 1993 Ken Raeburn (raeburn@deneb.cygnus.com) * configure.in: Recognize *-*-hpux. * config/mh-hpux: New file. Tue Apr 27 15:22:19 1993 Per Bothner (bothner@cygnus.com) * tmpnam.c: Added ANSI tmpnam() function. * functions.def, Makefile.in: Update accordingly. Tue Apr 27 13:38:38 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) * cplus-dem.c (demangle_function_name): Get the demangling of stop__1A right. Fri Apr 16 23:48:24 1993 Jim Kingdon (kingdon at calvin) * cplus-dem.c: Declare strstr return type. Fri Mar 26 12:01:26 1993 Jim Kingdon (kingdon@cygnus.com) * strsignal.c: Add some AIX signals. Thu Mar 25 15:17:23 1993 Ian Lance Taylor (ian@cygnus.com) * Makefile.in (MAKEOVERRIDES): Define to be empty. Wed Mar 24 01:59:25 1993 david d `zoo' zuhn (zoo at poseidon.cygnus.com) * Makefile.in: add installcheck & dvi targets Thu Mar 18 14:05:44 1993 Per Bothner (bothner@rtl.cygnus.com) * ieee-float.c: New file, moved from ../gdb (since it is needed by ../opcode/m68k-dis.c). Tue Mar 2 17:47:31 1993 Fred Fish (fnf@cygnus.com) * cplus-dem.c: Replace all references to cfront with ARM. Fri Feb 26 00:17:07 1993 Per Bothner (bothner@rtl.cygnus.com) * cplus-dem.c: Fix main program (when compiled with -DMAIN) to be more useful as a filter. Sat Feb 20 21:41:39 1993 Brendan Kehoe (brendan@lisa.cygnus.com) * Makefile.in (install_to_libdir, install_to_tooldir): Go into the destination directory before running $(RANLIB), in case that program tries to create a file in the current directory as part of its work. Thu Feb 18 23:00:19 1993 John Gilmore (gnu@cygnus.com) * strsignal.c (sys_siglist): Remove yet another *%^&%&$# "const" because BSD 4.4 lacks one. Isn't this fun? Thu Feb 18 11:24:25 1993 Fred Fish (fnf@cygnus.com) * cplus-dem.c (demangle_signature): Set func_done after demangling a template. * cplus-dem.c (demangle_template): Fix several small bugs in demangling GNU style templates. * cplus-dem.c (demangle_prefix): Fix for templates in GNU style constructors. * cplus-dem.c (gnu_special): Fix for templates in GNU style static data members. Tue Feb 16 17:28:35 1993 Fred Fish (fnf@cygnus.com) * cplus-dem.c (demangle_signature): Modify to include type modifiers like static and const in remembered types. Thu Feb 11 22:20:47 1993 Fred Fish (fnf@cygnus.com) * cplus-dem.c (demangled_qualified): Add new parameter that tells whether to prepend or append the qualifiers. * cplus-dem.c (string_prepends): Used now, remove #if 0. * cplus-dem.c (demangle_signature): Call demangle_qualified with prepending. * cplus-dem.c (gnu_special): Recognize static data members that use qualified names. * cplus-dem.c (demangle_qualified): Accumulate qualifiers in a temporary buffer and the prepend or append them to the result, as specified by the new "append" flag. * cplus-dem.c (do_type): Call demangled_qualified with appending. Mon Dec 28 10:47:19 1992 Ken Raeburn (raeburn@cygnus.com) * strsignal.c (signal_table): Now const. (init_signal_tables): Variable eip now points to const. * strerror.c (error_table): Now const. (init_error_tables): Variable eip now points to const. Tue Dec 15 15:36:50 1992 Per Bothner (bothner@cygnus.com) * memchr.c (memchr): New (ANSI standard) function. * Makefile.in, functions.def: Added memchr. * Makefile.in (AR_FLAGS): Use rc instad of non-standard cq. Wed Dec 2 22:49:10 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) * getopt.c: remove use of USG around , which never meant anything anyway * config/mh-{aix,apollo68,ncr3000,sysv,sysv4}: removed definitions of USG and USGr4 Thu Nov 19 03:09:33 1992 Brendan Kehoe (brendan@lisa.cygnus.com) * cplus-dem.c (demangle_fund_type): Recognize `w', a wide character; it's now a type according to the ANSI X3J16 working paper; output "wchar_t" for it. (demangle_template): Accept `w' as an integral type. (xmalloc, xrealloc): Use `char *', not `PTR'. Cast calls to their counterparts malloc and realloc to `char *'. (main): Exit with a 0 status. * Makefile.in (demangle): Don't expect the user to define DEMANGLE, instead force to be cplus-dem.c. Look in $(srcdir)/../include for demangle.h. Pass it any HDEFINES or XTRAFLAGS. Wed Nov 18 18:56:20 1992 John Gilmore (gnu@cygnus.com) * Makefile.in (AR_FLAGS): Avoid verbosity. * config/mh-sysv4: Remove AR_FLAGS override, use INSTALL=cp, replace USGr4 with HAVE_SYSCONF. * config/mh-solaris: Remove; mh-sysv4 works now. * getpagesize.c: Replace USGr4 with HAVE_SYSCONF. * configure.in: Simplify host matching table, remove separate solaris config file. Sun Nov 15 09:35:16 1992 Fred Fish (fnf@cygnus.com) * configure.in (i[34]86-*-solaris2*): Add, use mh-sysv4. Tue Nov 3 21:27:03 1992 Brendan Kehoe (brendan@cygnus.com) * cplus-dem.c (xmalloc, xrealloc): Add decls. (remember_type): Don't cast xmalloc. (string_need): Likewise; don't cast xrealloc either. Fri Oct 23 08:52:01 1992 Ian Lance Taylor (ian@cygnus.com) * Makefile.in, functions.defs, rename.c: added simple implementation of rename, since some binutils programs use it. Thu Oct 15 15:18:22 1992 Per Bothner (bothner@cygnus.com) * strsignal.c: Add appropriate 'const' to sys_siglist extern declaration (if __STDC__). (Needed for Linux.) * strsignal.c (strsignal): Add cast to remove const-ness. Fri Oct 9 03:22:55 1992 John Gilmore (gnu@cygnus.com) * Makefile.in (needed.awk, needed2.awk): Remove erroneous \'s before "'s, diagnosed by BSD 4.4 awk. Thu Oct 8 15:25:12 1992 Ian Lance Taylor (ian@cygnus.com) * Makefile.in: create config.h and needed-list through $(CONFIG_H) and $(NEEDED_LIST), to give some hooks for xiberty. Thu Oct 1 23:31:42 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) * configure.in: use cpu-vendor-triple instead of nested cases Wed Sep 30 11:26:59 1992 Per Bothner (bothner@rtl.cygnus.com) * Makefile.in, argv.c, basename.c, bcmp.c, bcopy.c, bzero.c, concat.c, cplus-dem.c, fdmatch.c, getcwd.c, getopt.c, getopt1.c, getpagesize.c, insque.c, memcmp.c, memcpy.c, memmove.c, memset.c, obstack.c, sigsetmask.c, spaces.c, strchr.c, strerror.c, strrchr.c, strsignal.c, strstr.c, vfork.c, vsprintf.c: Convert from using GPL to LGPL. Sat Sep 26 04:01:30 1992 John Gilmore (gnu@cygnus.com) * Makefile.in (errors): Leave dummy.o and dummy around so that we can see how the needed list was generated (it's sometimes wrong). (mostlyclean): Remove them. Mon Sep 21 14:50:42 1992 Ian Lance Taylor (ian@cygnus.com) * getcwd.c: supply a default if MAXPATHLEN is not defined. * config/mh-irix4: set EXTRA_OFILES to alloca.o, from WRS. Wed Sep 9 12:41:48 1992 Ian Lance Taylor (ian@cygnus.com) * Makefile.in: Use XTRAFLAGS when compiling, so that xiberty works when cross-compiling. Thu Sep 3 13:29:39 1992 K. Richard Pixley (rich@sendai.cygnus.com) * cplus-dem.c: (demangle_prefix): reduction in strength of strstr as a time optimization. * cplus-dem.c (cplus_demangle): remove strpbrk test. Appears to be more expensive than simply demangling. * cplus-dem.c (cplus_match): new function. Tue Sep 1 15:24:04 1992 Per Bothner (bothner@rtl.cygnus.com) * cplus-dem.c: #include , to define NULL. Define current_demangling_style. Sun Aug 30 17:58:19 1992 Per Bothner (bothner@rtl.cygnus.com) * cplus-dem.c: New file, moved from ../gdb. * cplus-dem.c (set_cplus_marker_for_demangling): New exported function, to avoid compiling in target-dependency for CPLUS_MARKER. * cplus-dem.c (cplus_demangle): Allow demangling style option to be passed as a parameter, but using the global variable current_demangling_style as a default. * Makefile.in: Update for cplus-dem.c Sat Aug 29 10:44:09 1992 Fred Fish (fnf@cygnus.com) * obstack.c: Merge in comment changes from FSF version. Now matches the FSF version exactly. Fri Aug 28 18:39:08 1992 John Gilmore (gnu@cygnus.com) * obstack.c (CALL_FREEFUN): Can't use ?: with void values (at least on losing DECstations!); use if-then-else instead. Wed Aug 19 14:40:34 1992 Ian Lance Taylor (ian@cygnus.com) * Makefile.in: always create installation directories. Mon Aug 10 17:33:40 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com) * Makefile.in: clean up definition of CFILES, more comments Sat Aug 8 23:10:59 1992 Fred Fish (fnf@cygnus.com) * getopt.c (my_index): Make first arg const to match strchr, which it sometimes is remapped to. Sat Aug 1 13:48:50 1992 Fred Fish (fnf@cygnus.com) * obstack.c (DEFAULT_ALIGNMENT): Update to match FSF version. * obstack.c (_obstack_begin): Initialize use_extra_arg. * obstack.c (_obstack_begin_1): New, from FSF version. Mon Jul 20 21:07:58 1992 Fred Fish (fnf@cygnus.com) * obstack.c (CALL_CHECKFUN, CALL_FREEFUN): Use use_extra_arg and extra_arg. * obstack.c (_obstack_begin): Remove area_id and flags arguments (previously added for mmalloc support, interface has changed). Also convert flags usage to use use_extra_arg and maybe_empty_object. Fri Jul 10 00:41:53 1992 Fred Fish (fnf@cygnus.com) * argv.c: Move expandargv inline and eliminate static variables. Rewrite to always allocate in powers of two. Fix to return an argv with a single null string arg if passed a null string. Fri Jul 3 20:27:29 1992 Fred Fish (fnf@cygnus.com) * random.c, sigsetmask.c, strerror.c, strsignal.c: Remove "(void)" casts from function calls where the return value is ignored, in accordance with GNU coding standards. Mon Jun 29 10:54:19 1992 Fred Fish (fnf at cygnus.com) * bcopy.c, strerror.c, strsignal.c: Lint. Thu Jun 25 09:18:41 1992 K. Richard Pixley (rich@rtl.cygnus.com) * getopt.c: merge changes from make. Thu Jun 25 04:43:22 1992 John Gilmore (gnu at cygnus.com) * alloca.c: Incorporate fixes from gdb/alloca.c. FIXME: Eventually move gdb's alloca configuration files here, and remove gdb/alloca.c and its Makefile.in support. Tue Jun 23 21:56:30 1992 Fred Fish (fnf@cygnus.com) * dummy.c: Define NOTHING to /*nothing*/, change return type of main to int and return zero. * functions.def: Supply NOTHING as the fourth arg to macros that don't have an explicit arg, to satisfy picky preprocessors. Wed Jun 17 18:13:58 1992 Per Bothner (bothner@rtl.cygnus.com) * Makefile.in: Clean up *clean rules, as per standards.texi. Tue Jun 16 16:11:59 1992 K. Richard Pixley (rich@rtl.cygnus.com) * getopt.c, getopt1.c: merged largely gratuitous, mostly whitespace diffs from other prep distributions. Mon Jun 15 12:25:46 1992 Fred Fish (fnf@cygnus.com) * config/mh-ncr3000 (INSTALL): Don't use /usr/ucb/install, it is broken on ncr 3000's. Mon Jun 15 01:03:26 1992 John Gilmore (gnu at cygnus.com) * sigsetmask.c: Rewrite. Old one was very confused about its arguments and result. New one can't do much, but at least knows what it can't do, and it's good enough for GDB's use. Sun Jun 14 15:17:40 1992 Stu Grossman (grossman at cygnus.com) * functions.def: Use proper prototype for strtoul. Fri Jun 12 19:22:40 1992 John Gilmore (gnu at cygnus.com) * Makefile.in: Add random.c. * config/mh-*: Use "true" rather than "echo >/dev/null" for ranlib. * configure.in: update solaris2 config. Wed Jun 10 16:31:29 1992 Fred Fish (fnf@cygnus.com) * random.c: Add for random() and srandom(). * functions.def: Add random Tue Jun 9 17:27:18 1992 Fred Fish (fnf@cygnus.com) * config/{mh-ncr3000, mh-sysv4}: Add definition for INSTALL using /usr/ucb/install. Mon Jun 1 13:20:17 1992 Per Bothner (bothner@rtl.cygnus.com) * strerror.c: Kludge to guard against a conflict with possible declaration of sys_errlist in errno.h. Sun May 31 15:07:47 1992 Mark Eichin (eichin at cygnus.com) * configure.in, config/mh-solaris: add solaris2 config support. Fri May 29 17:23:23 1992 Per Bothner (bothner@rtl.cygnus.com) * sigsetmask.c: #ifdef out sigsetmask if SIG_SETMASK is not defined (should be defined in signal.h, says Posix.). Mon May 18 17:35:04 1992 K. Richard Pixley (rich@cygnus.com) * getopt.c: merged changes from make-3.62.11. Fri May 8 14:53:07 1992 K. Richard Pixley (rich@cygnus.com) * getopt.c: merged changes from bison-1.18. Tue May 5 11:51:40 1992 Per Bothner (bothner@rtl.cygnus.com) * Makefile.in: Don't have $(EXTRA_OFILES) depend on config.h, since that introduces a circular dependency. ($(EXTRA_OFILES) are used to build config.h.) * strtoul.c: Fixes to handle non-decimal bases better. Wed Apr 22 09:27:51 1992 Fred Fish (fnf@cygnus.com) * config/mh-ncr3000: Replace MINUS_G with CFLAGS. * Makefile.dos: Finish MINUS_G eradication. * Makefile.in (CFILES): Add strsignal.c. * Makefile.in (REQUIRED_OFILES): Add strerror.o strsignal.o * Makefile.in (needed-list): Split creation of errors file to separate make target. * Makefile.in (config.h, needed2.awk, errors): New targets. * Makefile.in (clean): Split to multiple lines, add needed2.awk and config.h. * dummy.c (DEFFUNC, DEFVAR): Add defines and undefs. * functions.def (strerror): Remove from optional list. * functions.def (sys_nerr, sys_errlist, sys_siglist): DEFVAR's * functions.def (strerror, psignal): DEFFUNC's * strerror.c: Rewrite from scratch to use sys_errlist only if available, add errno_max(), add strerrno(), add strtoerrno(), add test driver. * strsignal.c: New file, signal equivalent to strerror.c. Uses sys_siglist if available, defines signo_max(), strsignal(), strsigno(), strtosigno(), psignal(), and test driver. Mon Apr 20 20:49:32 1992 K. Richard Pixley (rich@cygnus.com) * Makefile.in: do not print recursion line. * Makefile.in: allow CFLAGS to be passed in from command line. Removed MINUS_G. Default CFLAGS to -g. Mon Apr 20 12:57:46 1992 Per Bothner (bothner@rtl.cygnus.com) * config/mh-aix: New. EXTRA_OFILES lists copysign.o, so libg++ users don't have to be inconvenienced by a libc.a bug (libc.a needs copysign, but doesn't define it!). * configure.in: Use config/mh-aix. * strtoul.c: Handle '-' as required by ANSI. Clean up radix handling. * strstr.c: Fix buggy algorithm. * Makefile.in: Change so that ${EXTRA_OFILES} is appended to needed-list (which is used by libg++). Fri Apr 10 22:51:41 1992 Fred Fish (fnf@cygnus.com) * configure.in: Recognize new ncr3000 config. * config/mh-ncr3000: New config file. Wed Apr 1 23:31:43 1992 John Gilmore (gnu at cygnus.com) * argv.c, dummy.c: Lint. Tue Mar 31 18:46:44 1992 Fred Fish (fnf@cygnus.com) * config/mh-sysv4: New config file. * configure.in (host_makefile_frag): Set to config/mh-sysv4 for host_os == sysv4. * getpagesize.c: For SVR4, use sysconf(_SC_PAGESIZE) to get pagesize. Sun Mar 29 12:26:42 1992 John Gilmore (gnu at cygnus.com) * getopt.c: Lint. Fri Mar 27 08:32:55 1992 Fred Fish (fnf@cygnus.com) * functions.def (alloca): Fix return type and args to avoid type clash with gcc's builtin alloca. Tue Mar 24 23:33:42 1992 K. Richard Pixley (rich@cygnus.com) * configure.in, config/mh-irix4: irix4 support. * Makefile.in, functions.def, alloca.c: added alloca. Tue Mar 24 17:34:46 1992 Stu Grossman (grossman at cygnus.com) * obstack.c (CALL_FREEFUN): Make it compile on DECstations. Thu Mar 19 13:57:42 1992 Fred Fish (fnf@cygnus.com) * argv.c: Fix various external function definitions to be correct in an ANSI compilation environment. Sat Mar 14 17:28:17 1992 Fred Fish (fnf@cygnus.com) * obstack.c: Changes to support calling mmalloc functions, which take an additional argument over malloc functions. Fri Mar 6 22:01:10 1992 K. Richard Pixley (rich@cygnus.com) * added check target. Thu Feb 27 22:19:39 1992 Per Bothner (bothner@cygnus.com) * argv.c: #include alloca-conf.h (needed by AIX). Wed Feb 26 18:04:40 1992 K. Richard Pixley (rich@cygnus.com) * Makefile.in, configure.in: removed traces of namesubdir, -subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced copyrights to '92, changed some from Cygnus to FSF. Sat Feb 22 01:09:21 1992 Stu Grossman (grossman at cygnus.com) * argv.c: Check in Fred's version which fixes problems with alloca(). Fri Feb 7 21:46:08 1992 Stu Grossman (grossman at cygnus.com) * makefile.dos: Remove NUL to keep patch from failing. Thu Jan 30 22:48:41 1992 Stu Grossman (grossman at cygnus.com) * getopt.c (_getopt_internal): Fix usage of enum has_arg. Mon Jan 20 18:53:23 1992 Stu Grossman (grossman at cygnus.com) * getopt.c, getopt1.c, ../include/getopt.h: Get latest versions. Sat Jan 18 16:53:01 1992 Fred Fish (fnf at cygnus.com) * argv.c: New file to build and destroy standard argument vectors from a command string. * Makefile.in: Add argv.c and argv.o to appropriate macros. Fri Dec 20 12:12:57 1991 Fred Fish (fnf at cygnus.com) * configure.in: Change svr4 references to sysv4. * rindex.c: Declare return type of externally used function strrchr(). Thu Dec 19 18:35:03 1991 John Gilmore (gnu at cygnus.com) * Makefile.in: Remove "***" in normal output, since Make produces this on errors, and it's convenient to search for. Tue Dec 17 23:21:30 1991 Per Bothner (bothner at cygnus.com) * memcmp.c, memcpy.c, memmove.c, memset.c, strchr.c, strrchr.c: New ANSI functions. The old non-ANSI functions (such as bcopy) should be avoided. * bcopy.c: Fix to correctly handle overlapping regions. * index.c, rindex.c: Re-write in terms of strchr() and strrchr(). * functions.def: Add the new functions. * functions.def: Add 4th parameter to DEF macro, an ansidecl.h-style prototype. * dummy.c: Use expanded DEF macro to create a dummy function call, with correct parameter types. (This avoids some complaints from gcc about predefined builtins.) Move the functionality of config/mh-default into Makefile.in. This avoid duplication, and simplifies things slightly. * Makefile.in: Tweak so we don't need config/mh-default. * README: Update. * configure.in: No longer need config/mh-default. * config/mh-default: Deleted. * config/mh-sysv: Remove lines copied from old mh-default. Tue Dec 17 05:46:46 1991 John Gilmore (gnu at cygnus.com) * fdmatch.c (fdmatch): Don't compare st_rdev, which is for 'mknod' device numbers. Mon Dec 16 12:25:34 1991 Fred Fish (fnf at cygnus.com) * fdmatch.c, Makefile.in: Add new function that takes two open file descriptors and returns nonzero if they refer to the same file, zero otherwise. (used in gdb) Wed Dec 11 17:40:39 1991 Steve Chamberlain (sac at rtl.cygnus.com) From DJ: * msdos.c: stub functions for dos. * makefile.dos, configdj.bat: new. * getopt.c: Don't include alloca-conf.h in a GO32 world. Tue Dec 10 04:14:49 1991 K. Richard Pixley (rich at rtl.cygnus.com) * Makefile.in: infodir belongs in datadir. Fri Dec 6 23:26:45 1991 K. Richard Pixley (rich at rtl.cygnus.com) * Makefile.in: remove spaces following hyphens because bsd make can't cope. added standards.text support. install using INSTALL_DATA. * configure.in: remove commontargets as it is no longer a recognized hook. Thu Dec 5 22:46:46 1991 K. Richard Pixley (rich at rtl.cygnus.com) * Makefile.in: idestdir and ddestdir go away. Added copyrights and shift gpl to v2. Added ChangeLog if it didn't exist. docdir and mandir now keyed off datadir by default. Fri Nov 22 19:15:29 1991 John Gilmore (gnu at cygnus.com) * Makefile.in: find-needed.awk does not fit in 14 chars. * Makefile.in: Suppress error checking when compiling the test program, because Ultrix make/sh aborts there due to a bug. Fri Nov 22 12:23:17 1991 Per Bothner (bothner at cygnus.com) * Makefile.in: Re-did how EXTRA_OFILES is used to be more useful. * README: Explained how the auto-configuration works, and how to add new files and/or configurations. Fri Nov 22 09:45:23 1991 John Gilmore (gnu at cygnus.com) * strtoul.c: Avoid defining ULONG_MAX if already defined; cast a const char * to char * for pedants. * getopt.c: Only define "const" after local include files get to, and only if they haven't defined it. Thu Nov 21 16:58:53 1991 John Gilmore (gnu at cygnus.com) * getcwd.c (remove getwd.c): GNU code should call getcwd(). We emulate it with getwd() if available. This avoids callers having to find a MAXPATHLEN or PATH_MAX value from somewhere. * Makefile.in, functions.def: getwd->getcwd. * configure.in: Use generic case for every system. * config/mh-{delta88,mach,rs6000,svr4}: Remove. * config/mh-sysv: Use default handling, just add -DUSG. Thu Nov 14 10:58:05 1991 Per Bothner (bothner at cygnus.com) * Makefile.in, config/mh-default: Re-do make magic so that for the default ("automatic") mode we only compile the files we actually need. Do this using a recursive make: The top-level generates the list of needed files (loosely, the ones missing in libc), and then passes that list to the recursive make. * config/mh-mach: Remove obsolete STRERROR-{C,O} macros. Tue Nov 12 19:10:57 1991 John Gilmore (gnu at cygnus.com) RS/6000 host support (grumble). * configure.in: Build alloca-conf.h file from alloca-norm.h (everything else) or alloca-botch.h (rs/6000). * Makefile.in: Include . on the include path. * getopt.c: Use alloca-conf.h. * alloca-norm.h: How to declare alloca on reasonable machines. * alloca-botch.h: How to declare alloca on braindead machines. Tue Nov 12 09:21:48 1991 Fred Fish (fnf at cygnus.com) * concat.c : New file, like concat() in gdb but can take a variable number of arguments rather than fixed at 3 args. For now, client applications must supply an xmalloc(), which is a front end function to malloc() that deals with out-of-memory conditions. * Makefile.in: Add concat.c and concat.o to appropriate macros. Sat Nov 9 13:29:59 1991 Fred Fish (fnf at cygnus.com) * config/mh-svr4: Add sigsetmask to list of required functions. Sun Nov 3 11:57:56 1991 Per Bothner (bothner at cygnus.com) * vsprintf.c: New file. * functions.def, Makefile.in: Add vsprintf. Sun Oct 27 16:31:22 1991 John Gilmore (gnu at cygnus.com) * configure.in, config/mh-rs6000: Add rs/6000 host support. * Makefile.in: Compile with debug info. Fri Oct 25 17:01:12 1991 Per Bothner (bothner at cygnus.com) * Makefile.in, configure.in, and new files: dummy.c, functions.def, config/mf-default: Added a default configuration mode, which includes into libiberty.a functions that are "missing" in libc. * strdup.c, vprintf.c, vfprintf.c: New files. Thu Oct 24 02:29:26 1991 Fred Fish (fnf at cygnus.com) * config/hmake-svr4: New file. * config/hmake-sysv: Add HOST_CFILES and HOST_OFILES. * basename.c, bcmp.c, bcopy.c, bzero.c, getpagesize.c getwd.c, index.c, insque.c, rindex.c, spaces.c, strstr.c, vfork.c: New files containing either portable C versions or emulations using native library calls. * strerror.c: Add copyright, internal documentation, etc. * strtol.c: Replace hardwired hex constants with some more portable macros. Remove illegal (according to gcc) cast. * strtoul.c: Replace hardwired hex constant with more portable macro. * Makefile.in: Move TARGETLIB and CFLAGS where makefile fragments can override them. Add new source and object file names to CFILES and OFILES respectively. * configure.in: Add support for SVR4 makefile fragments. Tue Oct 22 19:00:23 1991 Steve Chamberlain (steve at cygnus.com) * Makefile.in: Move RANLIB, AR and AR_FLAGS to where they can be over-ridden by config/hmake-* * configure.in: added m88kcvs to sysv list Fri Oct 4 01:29:08 1991 John Gilmore (gnu at cygnus.com) * Makefile.in: Most hosts need strerror, but one or two don't, and they override these definitions in the host-dependent makefile fragment. * config/hmake-mach: The odd man out on strerror -- it's supplied. * strerror.c: New file. * strtol.c, strtoul.c: Add strtol to libiberty, since Mach lacks it and bfd uses it. * configure.in, Makefile.in, config/hmake-mach: Only configure strtol & strotoul in on Mach. Tue Sep 3 06:36:23 1991 John Gilmore (gnu at cygint.cygnus.com) * obstack.c: Merge with latest FSF version. Local Variables: version-control: never End: nescc-1.3.4/libiberty/Makefile.in000066400000000000000000001226301177770303300166600ustar00rootroot00000000000000# Makefile for the libiberty library. # Originally written by K. Richard Pixley . # # Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, # 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software # Foundation # # This file is part of the libiberty library. # Libiberty is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # Libiberty 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with libiberty; see the file COPYING.LIB. If not, # write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, # Boston, MA 02110-1301, USA. libiberty_topdir = @libiberty_topdir@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ target_header_dir = @target_header_dir@ SHELL = @SHELL@ # Multilib support variables. MULTISRCTOP = MULTIBUILDTOP = MULTIDIRS = MULTISUBDIR = MULTIDO = true MULTICLEAN = true INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ mkinstalldirs = $(SHELL) $(libiberty_topdir)/mkinstalldirs # Some compilers can't handle cc -c blah.c -o foo/blah.o. OUTPUT_OPTION = @OUTPUT_OPTION@ AR = @AR@ AR_FLAGS = rc CC = @CC@ CFLAGS = @CFLAGS@ LIBCFLAGS = $(CFLAGS) RANLIB = @RANLIB@ MAKEINFO = @MAKEINFO@ PERL = @PERL@ PICFLAG = MAKEOVERRIDES = TARGETLIB = ./libiberty.a TESTLIB = ./testlib.a LIBOBJS = @LIBOBJS@ # A configuration can specify extra .o files that should be included, # even if they are in libc. (Perhaps the libc version is buggy.) EXTRA_OFILES = # Flags to pass to a recursive make. FLAGS_TO_PASS = \ "AR=$(AR)" \ "AR_FLAGS=$(AR_FLAGS)" \ "CC=$(CC)" \ "CFLAGS=$(CFLAGS)" \ "DESTDIR=$(DESTDIR)" \ "LIBCFLAGS=$(LIBCFLAGS)" \ "EXTRA_OFILES=$(EXTRA_OFILES)" \ "HDEFINES=$(HDEFINES)" \ "INSTALL=$(INSTALL)" \ "INSTALL_DATA=$(INSTALL_DATA)" \ "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ "LDFLAGS=$(LDFLAGS)" \ "LOADLIBES=$(LOADLIBES)" \ "RANLIB=$(RANLIB)" \ "SHELL=$(SHELL)" \ "prefix=$(prefix)" \ "exec_prefix=$(exec_prefix)" \ "libdir=$(libdir)" \ "libsubdir=$(libsubdir)" \ "tooldir=$(tooldir)" # Subdirectories to recurse into. We need to override this during cleaning SUBDIRS = # FIXME: add @BUILD_INFO@ once we're sure it works for everyone. all: stamp-picdir $(TARGETLIB) needed-list required-list all-subdir @: $(MAKE) ; exec $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all .PHONY: check installcheck check: check-subdir installcheck: installcheck-subdir @host_makefile_frag@ INCDIR=$(srcdir)/$(MULTISRCTOP)../include COMPILE.c = $(CC) -c @DEFS@ $(LIBCFLAGS) -I. -I$(INCDIR) $(HDEFINES) @ac_libiberty_warn_cflags@ # Just to make sure we don't use a built-in rule with VPATH .c.o: false # NOTE: If you add new files to the library, add them to this list # (alphabetical), and add them to REQUIRED_OFILES, or # CONFIGURED_OFILES and funcs in configure.ac. Also run "make maint-deps" # to build the new rules. CFILES = alloca.c argv.c asprintf.c atexit.c \ basename.c bcmp.c bcopy.c bsearch.c bzero.c \ calloc.c choose-temp.c clock.c concat.c cp-demangle.c \ cp-demint.c cplus-dem.c \ dyn-string.c \ fdmatch.c ffs.c fibheap.c filename_cmp.c floatformat.c \ fnmatch.c fopen_unlocked.c \ getcwd.c getopt.c getopt1.c getpagesize.c getpwd.c getruntime.c \ gettimeofday.c \ hashtab.c hex.c \ index.c insque.c \ lbasename.c \ lrealpath.c \ make-relative-prefix.c \ make-temp-file.c md5.c memchr.c memcmp.c memcpy.c memmove.c \ mempcpy.c memset.c mkstemps.c \ objalloc.c obstack.c \ partition.c pexecute.c \ pex-common.c pex-djgpp.c pex-msdos.c pex-one.c \ pex-unix.c pex-win32.c \ physmem.c putenv.c \ random.c regex.c rename.c rindex.c \ safe-ctype.c setenv.c sigsetmask.c snprintf.c sort.c spaces.c \ splay-tree.c stpcpy.c stpncpy.c strcasecmp.c strchr.c strdup.c \ strerror.c strncasecmp.c strncmp.c strrchr.c strsignal.c \ strstr.c strtod.c strtol.c strtoul.c strndup.c strverscmp.c \ tmpnam.c \ unlink-if-ordinary.c \ vasprintf.c vfork.c vfprintf.c vprintf.c vsnprintf.c vsprintf.c \ waitpid.c \ xatexit.c xexit.c xmalloc.c xmemdup.c xstrdup.c xstrerror.c \ xstrndup.c # These are always included in the library. The first four are listed # first and by compile time to optimize parallel builds. REQUIRED_OFILES = ./regex.o ./cplus-dem.o ./cp-demangle.o ./md5.o \ ./alloca.o ./argv.o \ ./choose-temp.o ./concat.o ./cp-demint.o \ ./dyn-string.o \ ./fdmatch.o ./fibheap.o ./filename_cmp.o ./floatformat.o \ ./fnmatch.o ./fopen_unlocked.o \ ./getopt.o ./getopt1.o ./getpwd.o ./getruntime.o \ ./hashtab.o ./hex.o \ ./lbasename.o ./lrealpath.o \ ./make-relative-prefix.o ./make-temp-file.o \ ./objalloc.o ./obstack.o \ ./partition.o ./pexecute.o ./physmem.o \ ./pex-common.o ./pex-one.o @pexecute@ \ ./safe-ctype.o ./sort.o ./spaces.o ./splay-tree.o ./strerror.o \ ./strsignal.o \ ./unlink-if-ordinary.o \ ./xatexit.o ./xexit.o ./xmalloc.o ./xmemdup.o ./xstrdup.o \ ./xstrerror.o ./xstrndup.o # These are all the objects that configure may add to the library via # $funcs or EXTRA_OFILES. This list exists here only for "make # maint-missing" and "make check". CONFIGURED_OFILES = ./asprintf.o ./atexit.o \ ./basename.o ./bcmp.o ./bcopy.o ./bsearch.o ./bzero.o \ ./calloc.o ./clock.o ./copysign.o \ ./_doprnt.o \ ./ffs.o \ ./getcwd.o ./getpagesize.o ./gettimeofday.o \ ./index.o ./insque.o \ ./memchr.o ./memcmp.o ./memcpy.o ./memmove.o ./mempcpy.o \ ./memset.o ./mkstemps.o \ ./pex-djgpp.o ./pex-msdos.o \ ./pex-unix.o ./pex-win32.o \ ./putenv.o \ ./random.o ./rename.o ./rindex.o \ ./setenv.o ./sigsetmask.o ./snprintf.o ./stpcpy.o ./stpncpy.o \ ./strcasecmp.o ./strchr.o ./strdup.o ./strncasecmp.o \ ./strncmp.o ./strndup.o ./strrchr.o ./strstr.o \ ./strtod.o ./strtol.o ./strtoul.o ./strverscmp.o \ ./tmpnam.o \ ./vasprintf.o ./vfork.o ./vfprintf.o ./vprintf.o ./vsnprintf.o \ ./vsprintf.o \ ./waitpid.o # These files are installed if the library has been configured to do so. INSTALLED_HEADERS = \ $(INCDIR)/ansidecl.h \ $(INCDIR)/demangle.h \ $(INCDIR)/dyn-string.h \ $(INCDIR)/fibheap.h \ $(INCDIR)/floatformat.h \ $(INCDIR)/hashtab.h \ $(INCDIR)/libiberty.h \ $(INCDIR)/objalloc.h \ $(INCDIR)/partition.h \ $(INCDIR)/safe-ctype.h \ $(INCDIR)/sort.h \ $(INCDIR)/splay-tree.h $(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) -rm -f $(TARGETLIB) pic/$(TARGETLIB) $(AR) $(AR_FLAGS) $(TARGETLIB) \ $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) $(RANLIB) $(TARGETLIB) if [ x"$(PICFLAG)" != x ]; then \ cd pic; \ $(AR) $(AR_FLAGS) $(TARGETLIB) \ $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \ $(RANLIB) $(TARGETLIB); \ cd ..; \ else true; fi $(TESTLIB): $(REQUIRED_OFILES) $(CONFIGURED_OFILES) -rm -f $(TESTLIB) $(AR) $(AR_FLAGS) $(TESTLIB) \ $(REQUIRED_OFILES) $(CONFIGURED_OFILES) $(RANLIB) $(TESTLIB) info: libiberty.info info-subdir install-info: install-info-subdir clean-info: clean-info-subdir dvi: libiberty.dvi dvi-subdir LIBIBERTY_PDFFILES = libiberty.pdf pdf: $(LIBIBERTY_PDFFILES) pdf-subdir .PHONY: install-pdf pdf__strip_dir = `echo $$p | sed -e 's|^.*/||'`; install-pdf: $(LIBIBERTY_PDFFILES) @$(NORMAL_INSTALL) test -z "$(pdfdir)" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)" @list='$(LIBIBERTY_PDFFILES)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(pdf__strip_dir) \ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \ done # html, install-html targets HTMLS = libiberty.html html: $(HTMLS) .PHONY: install-html install-html-am install-html-recursive NORMAL_INSTALL = : mkdir_p = mkdir -p -- html__strip_dir = `echo $$p | sed -e 's|^.*/||'`; install-html: install-html-recursive install-html-am install-html-am: $(HTMLS) @$(NORMAL_INSTALL) test -z "$(htmldir)" || $(mkdir_p) "$(DESTDIR)$(htmldir)" @list='$(HTMLS)'; for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \ f=$(html__strip_dir) \ if test -d "$$d$$p"; then \ echo " $(mkdir_p) '$(DESTDIR)$(htmldir)/$$f'"; \ $(mkdir_p) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \ else \ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \ fi; \ done install-html-recursive: @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" TEXISRC = \ $(srcdir)/libiberty.texi \ $(srcdir)/copying-lib.texi \ $(srcdir)/obstacks.texi \ $(srcdir)/functions.texi # Additional files that have texi snippets that need to be collected # and sorted. Some are here because the sources are imported from # elsewhere. Others represent headers in ../include. TEXIFILES = fnmatch.txh pexecute.txh libiberty.info : $(srcdir)/libiberty.texi $(TEXISRC) $(MAKEINFO) -I$(srcdir) $(srcdir)/libiberty.texi libiberty.dvi : $(srcdir)/libiberty.texi $(TEXISRC) texi2dvi $(srcdir)/libiberty.texi libiberty.pdf : $(srcdir)/libiberty.texi $(TEXISRC) texi2pdf $(srcdir)/libiberty.texi libiberty.html : $(srcdir)/libiberty.texi $(TEXISRC) $(MAKEINFO) --no-split --html -I$(srcdir) -o $@ $< @MAINT@$(srcdir)/functions.texi : stamp-functions @MAINT@ @true @MAINT@stamp-functions : $(CFILES:%=$(srcdir)/%) $(TEXIFILES:%=$(srcdir)/%) $(srcdir)/gather-docs Makefile @MAINT@@HAVE_PERL@ $(PERL) $(srcdir)/gather-docs $(srcdir) $(srcdir)/functions.texi $(CFILES) $(TEXIFILES) @MAINT@ echo stamp > stamp-functions INSTALL_DEST = @INSTALL_DEST@ install: # This is tricky. Even though CC in the Makefile contains # multilib-specific flags, it's overridden by FLAGS_TO_PASS from the # default multilib, so we have to take LIBCFLAGS into account as well, # since it will be passed the multilib flags. MULTIOSDIR = `$(CC) $(LIBCFLAGS) -print-multi-os-directory` install_to_libdir: all ${mkinstalldirs} $(DESTDIR)$(libdir)/$(MULTIOSDIR) $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n ( cd $(DESTDIR)$(libdir)/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n ;$(RANLIB) $(TARGETLIB)n ) mv -f $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB) if test -n "${target_header_dir}"; then \ case "${target_header_dir}" in \ /*) thd=${target_header_dir};; \ *) thd=${includedir}/${target_header_dir};; \ esac; \ ${mkinstalldirs} $(DESTDIR)$${thd}; \ for h in ${INSTALLED_HEADERS}; do \ ${INSTALL_DATA} $$h $(DESTDIR)$${thd}; \ done; \ fi @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install install_to_tooldir: all ${mkinstalldirs} $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR) $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n ( cd $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n; $(RANLIB) $(TARGETLIB)n ) mv -f $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB) @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install # needed-list is used by libstdc++. NEEDED is the list of functions # to include there. Do not add anything LGPL to this list; libstdc++ # can't use anything encumbering. NEEDED = atexit calloc memchr memcmp memcpy memmove memset rename strchr \ strerror strncmp strrchr strstr strtol strtoul tmpnam vfprintf vprintf \ vfork waitpid bcmp bcopy bzero needed-list: Makefile rm -f needed-list; touch needed-list; \ for f in $(NEEDED); do \ for g in $(LIBOBJS) $(EXTRA_OFILES); do \ case "$$g" in \ *$$f*) echo $$g >> needed-list ;; \ esac; \ done; \ done # required-list was used when building a shared bfd/opcodes/libiberty # library. I don't know if it used by anything currently. required-list: Makefile echo $(REQUIRED_OFILES) > required-list stamp-picdir: if [ x"$(PICFLAG)" != x ] && [ ! -d pic ]; then \ mkdir pic; \ else true; fi touch stamp-picdir .PHONY: all etags tags ls clean stage1 stage2 etags tags: TAGS etags-subdir TAGS: $(CFILES) etags `for i in $(CFILES); do echo $(srcdir)/$$i ; done` # The standalone demangler (c++filt) has been moved to binutils. demangle: @echo "The standalone demangler, now named c++filt, is now" @echo "a part of binutils." @false ls: @echo Makefile $(CFILES) # Various targets for maintainers. maint-missing : @$(PERL) $(srcdir)/maint-tool -s $(srcdir) missing $(CFILES) $(REQUIRED_OFILES) $(CONFIGURED_OFILES) maint-buildall : $(REQUIRED_OFILES) $(CONFIGURED_OFILES) @true maint-undoc : $(srcdir)/functions.texi @$(PERL) $(srcdir)/maint-tool -s $(srcdir) undoc maint-deps : @$(PERL) $(srcdir)/maint-tool -s $(srcdir) deps $(INCDIR) # Need to deal with profiled libraries, too. # Cleaning has to be done carefully to ensure that we don't clean our SUBDIRS # multiple times, hence our explicit recursion with an empty SUBDIRS. mostlyclean: mostlyclean-subdir -rm -rf *.o pic core errs \#* *.E a.out -rm -f needed.awk needed2.awk errors dummy needed-list config.h stamp-* -rm -f $(CONFIG_H) $(NEEDED_LIST) stamp-picdir -rm -f libiberty.aux libiberty.cp libiberty.cps libiberty.fn libiberty.ky -rm -f libiberty.log libiberty.tmp libiberty.tps libiberty.pg -rm -f libiberty.pgs libiberty.toc libiberty.tp libiberty.tpl libiberty.vr -rm -f libtexi.stamp @$(MULTICLEAN) multi-clean DO=mostlyclean clean: clean-subdir $(MAKE) SUBDIRS="" mostlyclean -rm -f *.a required-list tmpmulti.out -rm -f libiberty.dvi libiberty.pdf libiberty.info* libiberty.html @$(MULTICLEAN) multi-clean DO=clean distclean: distclean-subdir $(MAKE) SUBDIRS="" clean @$(MULTICLEAN) multi-clean DO=distclean -rm -f *~ Makefile config.cache config.status xhost-mkfrag TAGS multilib.out -rm -f config.log -rmdir testsuite 2>/dev/null maintainer-clean realclean: maintainer-clean-subdir $(MAKE) SUBDIRS="" distclean force: Makefile: $(srcdir)/Makefile.in config.status CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status # Depending on Makefile makes sure that config.status has been re-run # if needed. This prevents problems with parallel builds. config.h: stamp-h ; @true stamp-h: $(srcdir)/config.in config.status Makefile CONFIG_FILES= CONFIG_HEADERS=config.h:$(srcdir)/config.in $(SHELL) ./config.status config.status: $(srcdir)/configure $(SHELL) ./config.status --recheck # Depending on stamp-h makes sure that config.status has been re-run # if needed. This prevents problems with parallel builds, in case # subdirectories need to run config.status also. all-subdir check-subdir installcheck-subdir info-subdir \ install-info-subdir clean-info-subdir dvi-subdir pdf-subdir install-subdir \ etags-subdir mostlyclean-subdir clean-subdir distclean-subdir \ maintainer-clean-subdir: stamp-h @subdirs='$(SUBDIRS)'; \ target=`echo $@ | sed -e 's/-subdir//'`; \ for dir in $$subdirs ; do \ cd $$dir && $(MAKE) $(FLAGS_TO_PASS) $$target; \ done $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS): stamp-picdir $(CONFIGURED_OFILES): stamp-picdir # Don't export variables to the environment, in order to not confuse # configure. .NOEXPORT: # The dependencies in the remainder of this file are automatically # generated by "make maint-deps". Manual edits will be lost. ./_doprnt.o: $(srcdir)/_doprnt.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/safe-ctype.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/_doprnt.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/_doprnt.c $(OUTPUT_OPTION) ./alloca.o: $(srcdir)/alloca.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/alloca.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/alloca.c $(OUTPUT_OPTION) ./argv.o: $(srcdir)/argv.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ $(INCDIR)/safe-ctype.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/argv.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/argv.c $(OUTPUT_OPTION) ./asprintf.o: $(srcdir)/asprintf.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/asprintf.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/asprintf.c $(OUTPUT_OPTION) ./atexit.o: $(srcdir)/atexit.c stamp-h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/atexit.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/atexit.c $(OUTPUT_OPTION) ./basename.o: $(srcdir)/basename.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/basename.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/basename.c $(OUTPUT_OPTION) ./bcmp.o: $(srcdir)/bcmp.c if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/bcmp.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/bcmp.c $(OUTPUT_OPTION) ./bcopy.o: $(srcdir)/bcopy.c if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/bcopy.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/bcopy.c $(OUTPUT_OPTION) ./bsearch.o: $(srcdir)/bsearch.c stamp-h $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/bsearch.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/bsearch.c $(OUTPUT_OPTION) ./bzero.o: $(srcdir)/bzero.c if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/bzero.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/bzero.c $(OUTPUT_OPTION) ./calloc.o: $(srcdir)/calloc.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/calloc.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/calloc.c $(OUTPUT_OPTION) ./choose-temp.o: $(srcdir)/choose-temp.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/choose-temp.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/choose-temp.c $(OUTPUT_OPTION) ./clock.o: $(srcdir)/clock.c stamp-h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/clock.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/clock.c $(OUTPUT_OPTION) ./concat.o: $(srcdir)/concat.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/concat.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/concat.c $(OUTPUT_OPTION) ./copysign.o: $(srcdir)/copysign.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/copysign.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/copysign.c $(OUTPUT_OPTION) ./cp-demangle.o: $(srcdir)/cp-demangle.c stamp-h $(INCDIR)/ansidecl.h \ $(srcdir)/cp-demangle.h $(INCDIR)/demangle.h \ $(INCDIR)/dyn-string.h $(INCDIR)/getopt.h $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/cp-demangle.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/cp-demangle.c $(OUTPUT_OPTION) ./cp-demint.o: $(srcdir)/cp-demint.c stamp-h $(INCDIR)/ansidecl.h \ $(srcdir)/cp-demangle.h $(INCDIR)/demangle.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/cp-demint.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/cp-demint.c $(OUTPUT_OPTION) ./cplus-dem.o: $(srcdir)/cplus-dem.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/demangle.h $(INCDIR)/libiberty.h \ $(INCDIR)/safe-ctype.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/cplus-dem.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/cplus-dem.c $(OUTPUT_OPTION) ./dyn-string.o: $(srcdir)/dyn-string.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/dyn-string.h $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/dyn-string.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/dyn-string.c $(OUTPUT_OPTION) ./fdmatch.o: $(srcdir)/fdmatch.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/fdmatch.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/fdmatch.c $(OUTPUT_OPTION) ./ffs.o: $(srcdir)/ffs.c if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/ffs.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/ffs.c $(OUTPUT_OPTION) ./fibheap.o: $(srcdir)/fibheap.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/fibheap.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/fibheap.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/fibheap.c $(OUTPUT_OPTION) ./filename_cmp.o: $(srcdir)/filename_cmp.c stamp-h $(INCDIR)/filenames.h \ $(INCDIR)/safe-ctype.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/filename_cmp.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/filename_cmp.c $(OUTPUT_OPTION) ./floatformat.o: $(srcdir)/floatformat.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/floatformat.h $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/floatformat.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/floatformat.c $(OUTPUT_OPTION) ./fnmatch.o: $(srcdir)/fnmatch.c stamp-h $(INCDIR)/fnmatch.h \ $(INCDIR)/safe-ctype.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/fnmatch.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/fnmatch.c $(OUTPUT_OPTION) ./fopen_unlocked.o: $(srcdir)/fopen_unlocked.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/fopen_unlocked.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/fopen_unlocked.c $(OUTPUT_OPTION) ./getcwd.o: $(srcdir)/getcwd.c stamp-h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/getcwd.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/getcwd.c $(OUTPUT_OPTION) ./getopt.o: $(srcdir)/getopt.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/getopt.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/getopt.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/getopt.c $(OUTPUT_OPTION) ./getopt1.o: $(srcdir)/getopt1.c stamp-h $(INCDIR)/getopt.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/getopt1.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/getopt1.c $(OUTPUT_OPTION) ./getpagesize.o: $(srcdir)/getpagesize.c stamp-h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/getpagesize.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/getpagesize.c $(OUTPUT_OPTION) ./getpwd.o: $(srcdir)/getpwd.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/getpwd.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/getpwd.c $(OUTPUT_OPTION) ./getruntime.o: $(srcdir)/getruntime.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/getruntime.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/getruntime.c $(OUTPUT_OPTION) ./gettimeofday.o: $(srcdir)/gettimeofday.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/gettimeofday.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/gettimeofday.c $(OUTPUT_OPTION) ./hashtab.o: $(srcdir)/hashtab.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/hashtab.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/hashtab.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/hashtab.c $(OUTPUT_OPTION) ./hex.o: $(srcdir)/hex.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ $(INCDIR)/safe-ctype.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/hex.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/hex.c $(OUTPUT_OPTION) ./index.o: $(srcdir)/index.c if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/index.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/index.c $(OUTPUT_OPTION) ./insque.o: $(srcdir)/insque.c if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/insque.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/insque.c $(OUTPUT_OPTION) ./lbasename.o: $(srcdir)/lbasename.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \ $(INCDIR)/safe-ctype.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/lbasename.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/lbasename.c $(OUTPUT_OPTION) ./lrealpath.o: $(srcdir)/lrealpath.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/lrealpath.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/lrealpath.c $(OUTPUT_OPTION) ./make-relative-prefix.o: $(srcdir)/make-relative-prefix.c stamp-h \ $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/make-relative-prefix.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/make-relative-prefix.c $(OUTPUT_OPTION) ./make-temp-file.o: $(srcdir)/make-temp-file.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/make-temp-file.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/make-temp-file.c $(OUTPUT_OPTION) ./md5.o: $(srcdir)/md5.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/md5.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/md5.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/md5.c $(OUTPUT_OPTION) ./memchr.o: $(srcdir)/memchr.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/memchr.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/memchr.c $(OUTPUT_OPTION) ./memcmp.o: $(srcdir)/memcmp.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/memcmp.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/memcmp.c $(OUTPUT_OPTION) ./memcpy.o: $(srcdir)/memcpy.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/memcpy.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/memcpy.c $(OUTPUT_OPTION) ./memmove.o: $(srcdir)/memmove.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/memmove.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/memmove.c $(OUTPUT_OPTION) ./mempcpy.o: $(srcdir)/mempcpy.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/mempcpy.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/mempcpy.c $(OUTPUT_OPTION) ./memset.o: $(srcdir)/memset.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/memset.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/memset.c $(OUTPUT_OPTION) ./mkstemps.o: $(srcdir)/mkstemps.c stamp-h $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/mkstemps.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/mkstemps.c $(OUTPUT_OPTION) ./msdos.o: $(srcdir)/msdos.c if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/msdos.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/msdos.c $(OUTPUT_OPTION) ./objalloc.o: $(srcdir)/objalloc.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/objalloc.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/objalloc.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/objalloc.c $(OUTPUT_OPTION) ./obstack.o: $(srcdir)/obstack.c stamp-h $(INCDIR)/obstack.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/obstack.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/obstack.c $(OUTPUT_OPTION) ./partition.o: $(srcdir)/partition.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h $(INCDIR)/partition.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/partition.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/partition.c $(OUTPUT_OPTION) ./pex-common.o: $(srcdir)/pex-common.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h $(srcdir)/pex-common.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-common.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/pex-common.c $(OUTPUT_OPTION) ./pex-djgpp.o: $(srcdir)/pex-djgpp.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h $(srcdir)/pex-common.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-djgpp.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/pex-djgpp.c $(OUTPUT_OPTION) ./pex-msdos.o: $(srcdir)/pex-msdos.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h $(srcdir)/pex-common.h \ $(INCDIR)/safe-ctype.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-msdos.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/pex-msdos.c $(OUTPUT_OPTION) ./pex-one.o: $(srcdir)/pex-one.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-one.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/pex-one.c $(OUTPUT_OPTION) ./pex-unix.o: $(srcdir)/pex-unix.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h $(srcdir)/pex-common.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-unix.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/pex-unix.c $(OUTPUT_OPTION) ./pex-win32.o: $(srcdir)/pex-win32.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h $(srcdir)/pex-common.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-win32.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/pex-win32.c $(OUTPUT_OPTION) ./pexecute.o: $(srcdir)/pexecute.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/pexecute.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/pexecute.c $(OUTPUT_OPTION) ./physmem.o: $(srcdir)/physmem.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/physmem.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/physmem.c $(OUTPUT_OPTION) ./putenv.o: $(srcdir)/putenv.c stamp-h $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/putenv.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/putenv.c $(OUTPUT_OPTION) ./random.o: $(srcdir)/random.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/random.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/random.c $(OUTPUT_OPTION) ./regex.o: $(srcdir)/regex.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/xregex.h \ $(INCDIR)/xregex2.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/regex.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/regex.c $(OUTPUT_OPTION) ./rename.o: $(srcdir)/rename.c stamp-h $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/rename.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/rename.c $(OUTPUT_OPTION) ./rindex.o: $(srcdir)/rindex.c if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/rindex.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/rindex.c $(OUTPUT_OPTION) ./safe-ctype.o: $(srcdir)/safe-ctype.c $(INCDIR)/ansidecl.h \ $(INCDIR)/safe-ctype.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/safe-ctype.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/safe-ctype.c $(OUTPUT_OPTION) ./setenv.o: $(srcdir)/setenv.c stamp-h $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/setenv.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/setenv.c $(OUTPUT_OPTION) ./sigsetmask.o: $(srcdir)/sigsetmask.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/sigsetmask.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/sigsetmask.c $(OUTPUT_OPTION) ./snprintf.o: $(srcdir)/snprintf.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/snprintf.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/snprintf.c $(OUTPUT_OPTION) ./sort.o: $(srcdir)/sort.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ $(INCDIR)/sort.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/sort.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/sort.c $(OUTPUT_OPTION) ./spaces.o: $(srcdir)/spaces.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/spaces.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/spaces.c $(OUTPUT_OPTION) ./splay-tree.o: $(srcdir)/splay-tree.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h $(INCDIR)/splay-tree.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/splay-tree.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/splay-tree.c $(OUTPUT_OPTION) ./stpcpy.o: $(srcdir)/stpcpy.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/stpcpy.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/stpcpy.c $(OUTPUT_OPTION) ./stpncpy.o: $(srcdir)/stpncpy.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/stpncpy.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/stpncpy.c $(OUTPUT_OPTION) ./strcasecmp.o: $(srcdir)/strcasecmp.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/strcasecmp.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/strcasecmp.c $(OUTPUT_OPTION) ./strchr.o: $(srcdir)/strchr.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/strchr.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/strchr.c $(OUTPUT_OPTION) ./strdup.o: $(srcdir)/strdup.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/strdup.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/strdup.c $(OUTPUT_OPTION) ./strerror.o: $(srcdir)/strerror.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/strerror.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/strerror.c $(OUTPUT_OPTION) ./strncasecmp.o: $(srcdir)/strncasecmp.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/strncasecmp.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/strncasecmp.c $(OUTPUT_OPTION) ./strncmp.o: $(srcdir)/strncmp.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/strncmp.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/strncmp.c $(OUTPUT_OPTION) ./strndup.o: $(srcdir)/strndup.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/strndup.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/strndup.c $(OUTPUT_OPTION) ./strrchr.o: $(srcdir)/strrchr.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/strrchr.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/strrchr.c $(OUTPUT_OPTION) ./strsignal.o: $(srcdir)/strsignal.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/strsignal.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/strsignal.c $(OUTPUT_OPTION) ./strstr.o: $(srcdir)/strstr.c if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/strstr.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/strstr.c $(OUTPUT_OPTION) ./strtod.o: $(srcdir)/strtod.c $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/strtod.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/strtod.c $(OUTPUT_OPTION) ./strtol.o: $(srcdir)/strtol.c stamp-h $(INCDIR)/safe-ctype.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/strtol.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/strtol.c $(OUTPUT_OPTION) ./strtoul.o: $(srcdir)/strtoul.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/safe-ctype.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/strtoul.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/strtoul.c $(OUTPUT_OPTION) ./strverscmp.o: $(srcdir)/strverscmp.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ $(INCDIR)/safe-ctype.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/strverscmp.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/strverscmp.c $(OUTPUT_OPTION) ./tmpnam.o: $(srcdir)/tmpnam.c if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/tmpnam.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/tmpnam.c $(OUTPUT_OPTION) ./unlink-if-ordinary.o: $(srcdir)/unlink-if-ordinary.c stamp-h \ $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/unlink-if-ordinary.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/unlink-if-ordinary.c $(OUTPUT_OPTION) ./vasprintf.o: $(srcdir)/vasprintf.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/vasprintf.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/vasprintf.c $(OUTPUT_OPTION) ./vfork.o: $(srcdir)/vfork.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/vfork.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/vfork.c $(OUTPUT_OPTION) ./vfprintf.o: $(srcdir)/vfprintf.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/vfprintf.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/vfprintf.c $(OUTPUT_OPTION) ./vprintf.o: $(srcdir)/vprintf.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/vprintf.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/vprintf.c $(OUTPUT_OPTION) ./vsnprintf.o: $(srcdir)/vsnprintf.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/vsnprintf.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/vsnprintf.c $(OUTPUT_OPTION) ./vsprintf.o: $(srcdir)/vsprintf.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/vsprintf.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/vsprintf.c $(OUTPUT_OPTION) ./waitpid.o: $(srcdir)/waitpid.c stamp-h $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/waitpid.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/waitpid.c $(OUTPUT_OPTION) ./xatexit.o: $(srcdir)/xatexit.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/xatexit.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/xatexit.c $(OUTPUT_OPTION) ./xexit.o: $(srcdir)/xexit.c stamp-h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/xexit.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/xexit.c $(OUTPUT_OPTION) ./xmalloc.o: $(srcdir)/xmalloc.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/xmalloc.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/xmalloc.c $(OUTPUT_OPTION) ./xmemdup.o: $(srcdir)/xmemdup.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/xmemdup.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/xmemdup.c $(OUTPUT_OPTION) ./xstrdup.o: $(srcdir)/xstrdup.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrdup.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/xstrdup.c $(OUTPUT_OPTION) ./xstrerror.o: $(srcdir)/xstrerror.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrerror.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/xstrerror.c $(OUTPUT_OPTION) ./xstrndup.o: $(srcdir)/xstrndup.c stamp-h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrndup.c -o pic/$@; \ else true; fi $(COMPILE.c) $(srcdir)/xstrndup.c $(OUTPUT_OPTION) nescc-1.3.4/libiberty/README000066400000000000000000000052021177770303300154660ustar00rootroot00000000000000This directory contains the -liberty library of free software. It is a collection of subroutines used by various GNU programs. Current members include: getopt -- get options from command line obstack -- stacks of arbitrarily-sized objects strerror -- error message strings corresponding to errno strtol -- string-to-long conversion strtoul -- string-to-unsigned-long conversion We expect many of the GNU subroutines that are floating around to eventually arrive here. The library must be configured from the top source directory. Don't try to run configure in this directory. Follow the configuration instructions in ../README. Please report bugs to "gcc-bugs@gcc.gnu.org" and send fixes to "gcc-patches@gcc.gnu.org". Thank you. ADDING A NEW FILE ================= There are two sets of files: Those that are "required" will be included in the library for all configurations, while those that are "optional" will be included in the library only if "needed." To add a new required file, edit Makefile to add the source file name to CFILES and the object file to REQUIRED_OFILES. To add a new optional file, it must provide a single function, and the name of the function must be the same as the name of the file. * Add the source file name to CFILES. * Add the function to name to the funcs shell variable in configure.ac. * Add the function to the AC_CHECK_FUNCS lists just after the setting of the funcs shell variable. These AC_CHECK_FUNCS calls are never executed; they are there to make autoheader work better. * Consider the special cases of building libiberty; as of this writing, the special cases are newlib and VxWorks. If a particular special case provides the function, you do not need to do anything. If it does not provide the function, add the object file to LIBOBJS, and add the function name to the case controlling whether to define HAVE_func. The optional file you've added (e.g. getcwd.c) should compile and work on all hosts where it is needed. It does not have to work or even compile on hosts where it is not needed. ADDING A NEW CONFIGURATION ========================== On most hosts you should be able to use the scheme for automatically figuring out which files are needed. In that case, you probably don't need a special Makefile stub for that configuration. If the fully automatic scheme doesn't work, you may be able to get by with defining EXTRA_OFILES in your Makefile stub. This is a list of object file names that should be treated as required for this configuration - they will be included in libiberty.a, regardless of whatever might be in the C library. nescc-1.3.4/libiberty/_doprnt.c000066400000000000000000000165571177770303300164360ustar00rootroot00000000000000/* Provide a version of _doprnt in terms of fprintf. Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Kaveh Ghazi (ghazi@caip.rutgers.edu) 3/29/98 This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "ansidecl.h" #include "safe-ctype.h" #include #include #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #undef _doprnt #ifdef HAVE__DOPRNT #define TEST #endif #ifdef TEST /* Make sure to use the internal one. */ #define _doprnt my_doprnt #endif #define COPY_VA_INT \ do { \ const int value = abs (va_arg (ap, int)); \ char buf[32]; \ ptr++; /* Go past the asterisk. */ \ *sptr = '\0'; /* NULL terminate sptr. */ \ sprintf(buf, "%d", value); \ strcat(sptr, buf); \ while (*sptr) sptr++; \ } while (0) #define PRINT_CHAR(CHAR) \ do { \ putc(CHAR, stream); \ ptr++; \ total_printed++; \ continue; \ } while (0) #define PRINT_TYPE(TYPE) \ do { \ int result; \ TYPE value = va_arg (ap, TYPE); \ *sptr++ = *ptr++; /* Copy the type specifier. */ \ *sptr = '\0'; /* NULL terminate sptr. */ \ result = fprintf(stream, specifier, value); \ if (result == -1) \ return -1; \ else \ { \ total_printed += result; \ continue; \ } \ } while (0) int _doprnt (const char *format, va_list ap, FILE *stream) { const char * ptr = format; char specifier[128]; int total_printed = 0; while (*ptr != '\0') { if (*ptr != '%') /* While we have regular characters, print them. */ PRINT_CHAR(*ptr); else /* We got a format specifier! */ { char * sptr = specifier; int wide_width = 0, short_width = 0; *sptr++ = *ptr++; /* Copy the % and move forward. */ while (strchr ("-+ #0", *ptr)) /* Move past flags. */ *sptr++ = *ptr++; if (*ptr == '*') COPY_VA_INT; else while (ISDIGIT(*ptr)) /* Handle explicit numeric value. */ *sptr++ = *ptr++; if (*ptr == '.') { *sptr++ = *ptr++; /* Copy and go past the period. */ if (*ptr == '*') COPY_VA_INT; else while (ISDIGIT(*ptr)) /* Handle explicit numeric value. */ *sptr++ = *ptr++; } while (strchr ("hlL", *ptr)) { switch (*ptr) { case 'h': short_width = 1; break; case 'l': wide_width++; break; case 'L': wide_width = 2; break; default: abort(); } *sptr++ = *ptr++; } switch (*ptr) { case 'd': case 'i': case 'o': case 'u': case 'x': case 'X': case 'c': { /* Short values are promoted to int, so just copy it as an int and trust the C library printf to cast it to the right width. */ if (short_width) PRINT_TYPE(int); else { switch (wide_width) { case 0: PRINT_TYPE(int); break; case 1: PRINT_TYPE(long); break; case 2: default: #if defined(__GNUC__) || defined(HAVE_LONG_LONG) PRINT_TYPE(long long); #else PRINT_TYPE(long); /* Fake it and hope for the best. */ #endif break; } /* End of switch (wide_width) */ } /* End of else statement */ } /* End of integer case */ break; case 'f': case 'e': case 'E': case 'g': case 'G': { if (wide_width == 0) PRINT_TYPE(double); else { #if defined(__GNUC__) || defined(HAVE_LONG_DOUBLE) PRINT_TYPE(long double); #else PRINT_TYPE(double); /* Fake it and hope for the best. */ #endif } } break; case 's': PRINT_TYPE(char *); break; case 'p': PRINT_TYPE(void *); break; case '%': PRINT_CHAR('%'); break; default: abort(); } /* End of switch (*ptr) */ } /* End of else statement */ } return total_printed; } #ifdef TEST #include #ifndef M_PI #define M_PI (3.1415926535897932385) #endif #define RESULT(x) do \ { \ int i = (x); \ printf ("printed %d characters\n", i); \ fflush(stdin); \ } while (0) static int checkit (const char * format, ...) ATTRIBUTE_PRINTF_1; static int checkit (const char* format, ...) { int result; VA_OPEN (args, format); VA_FIXEDARG (args, char *, format); result = _doprnt (format, args, stdout); VA_CLOSE (args); return result; } int main (void) { RESULT(checkit ("<%d>\n", 0x12345678)); RESULT(printf ("<%d>\n", 0x12345678)); RESULT(checkit ("<%200d>\n", 5)); RESULT(printf ("<%200d>\n", 5)); RESULT(checkit ("<%.300d>\n", 6)); RESULT(printf ("<%.300d>\n", 6)); RESULT(checkit ("<%100.150d>\n", 7)); RESULT(printf ("<%100.150d>\n", 7)); RESULT(checkit ("<%s>\n", "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\ 777777777777777777333333333333366666666666622222222222777777777777733333")); RESULT(printf ("<%s>\n", "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\ 777777777777777777333333333333366666666666622222222222777777777777733333")); RESULT(checkit ("<%f><%0+#f>%s%d%s>\n", 1.0, 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx")); RESULT(printf ("<%f><%0+#f>%s%d%s>\n", 1.0, 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx")); RESULT(checkit ("<%4f><%.4f><%%><%4.4f>\n", M_PI, M_PI, M_PI)); RESULT(printf ("<%4f><%.4f><%%><%4.4f>\n", M_PI, M_PI, M_PI)); RESULT(checkit ("<%*f><%.*f><%%><%*.*f>\n", 3, M_PI, 3, M_PI, 3, 3, M_PI)); RESULT(printf ("<%*f><%.*f><%%><%*.*f>\n", 3, M_PI, 3, M_PI, 3, 3, M_PI)); RESULT(checkit ("<%d><%i><%o><%u><%x><%X><%c>\n", 75, 75, 75, 75, 75, 75, 75)); RESULT(printf ("<%d><%i><%o><%u><%x><%X><%c>\n", 75, 75, 75, 75, 75, 75, 75)); RESULT(checkit ("<%d><%i><%o><%u><%x><%X><%c>\n", 75, 75, 75, 75, 75, 75, 75)); RESULT(printf ("<%d><%i><%o><%u><%x><%X><%c>\n", 75, 75, 75, 75, 75, 75, 75)); RESULT(checkit ("Testing (hd) short: <%d><%ld><%hd><%hd><%d>\n", 123, (long)234, 345, 123456789, 456)); RESULT(printf ("Testing (hd) short: <%d><%ld><%hd><%hd><%d>\n", 123, (long)234, 345, 123456789, 456)); #if defined(__GNUC__) || defined (HAVE_LONG_LONG) RESULT(checkit ("Testing (lld) long long: <%d><%lld><%d>\n", 123, 234234234234234234LL, 345)); RESULT(printf ("Testing (lld) long long: <%d><%lld><%d>\n", 123, 234234234234234234LL, 345)); RESULT(checkit ("Testing (Ld) long long: <%d><%Ld><%d>\n", 123, 234234234234234234LL, 345)); RESULT(printf ("Testing (Ld) long long: <%d><%Ld><%d>\n", 123, 234234234234234234LL, 345)); #endif #if defined(__GNUC__) || defined (HAVE_LONG_DOUBLE) RESULT(checkit ("Testing (Lf) long double: <%.20f><%.20Lf><%0+#.20f>\n", 1.23456, 1.234567890123456789L, 1.23456)); RESULT(printf ("Testing (Lf) long double: <%.20f><%.20Lf><%0+#.20f>\n", 1.23456, 1.234567890123456789L, 1.23456)); #endif return 0; } #endif /* TEST */ nescc-1.3.4/libiberty/aclocal.m4000066400000000000000000000146661177770303300164640ustar00rootroot00000000000000sinclude(../config-aux/acx.m4) sinclude(../config-aux/no-executables.m4) sinclude(../config-aux/warnings.m4) dnl See whether strncmp reads past the end of its string parameters. dnl On some versions of SunOS4 at least, strncmp reads a word at a time dnl but erroneously reads past the end of strings. This can cause dnl a SEGV in some cases. AC_DEFUN(libiberty_AC_FUNC_STRNCMP, [AC_REQUIRE([AC_FUNC_MMAP]) AC_CACHE_CHECK([for working strncmp], ac_cv_func_strncmp_works, [AC_TRY_RUN([ /* Test by Jim Wilson and Kaveh Ghazi. Check whether strncmp reads past the end of its string parameters. */ #include #ifdef HAVE_FCNTL_H #include #endif #ifdef HAVE_SYS_MMAN_H #include #endif #ifndef MAP_ANON #ifdef MAP_ANONYMOUS #define MAP_ANON MAP_ANONYMOUS #else #define MAP_ANON MAP_FILE #endif #endif #ifndef MAP_FILE #define MAP_FILE 0 #endif #ifndef O_RDONLY #define O_RDONLY 0 #endif #define MAP_LEN 0x10000 main () { #if defined(HAVE_MMAP) || defined(HAVE_MMAP_ANYWHERE) char *p; int dev_zero; dev_zero = open ("/dev/zero", O_RDONLY); if (dev_zero < 0) exit (1); p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, dev_zero, 0); if (p == (char *)-1) p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0); if (p == (char *)-1) exit (2); else { char *string = "__si_type_info"; char *q = (char *) p + MAP_LEN - strlen (string) - 2; char *r = (char *) p + 0xe; strcpy (q, string); strcpy (r, string); strncmp (r, q, 14); } #endif /* HAVE_MMAP || HAVE_MMAP_ANYWHERE */ exit (0); } ], ac_cv_func_strncmp_works=yes, ac_cv_func_strncmp_works=no, ac_cv_func_strncmp_works=no) rm -f core core.* *.core]) if test $ac_cv_func_strncmp_works = no ; then AC_LIBOBJ([strncmp]) fi ]) dnl See if errno must be declared even when is included. AC_DEFUN(libiberty_AC_DECLARE_ERRNO, [AC_CACHE_CHECK(whether errno must be declared, libiberty_cv_declare_errno, [AC_TRY_COMPILE( [#include ], [int x = errno;], libiberty_cv_declare_errno=no, libiberty_cv_declare_errno=yes)]) if test $libiberty_cv_declare_errno = yes then AC_DEFINE(NEED_DECLARATION_ERRNO, 1, [Define if errno must be declared even when is included.]) fi ]) dnl See whether we need a declaration for a function. AC_DEFUN(libiberty_NEED_DECLARATION, [AC_MSG_CHECKING([whether $1 must be declared]) AC_CACHE_VAL(libiberty_cv_decl_needed_$1, [AC_TRY_COMPILE([ #include "confdefs.h" #include #ifdef HAVE_STRING_H #include #else #ifdef HAVE_STRINGS_H #include #endif #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_UNISTD_H #include #endif], [char *(*pfn) = (char *(*)) $1], libiberty_cv_decl_needed_$1=no, libiberty_cv_decl_needed_$1=yes)]) AC_MSG_RESULT($libiberty_cv_decl_needed_$1) if test $libiberty_cv_decl_needed_$1 = yes; then AC_DEFINE([NEED_DECLARATION_]translit($1, [a-z], [A-Z]), 1, [Define if $1 is not declared in system header files.]) fi ])dnl # We always want a C version of alloca() compiled into libiberty, # because native-compiler support for the real alloca is so !@#$% # unreliable that GCC has decided to use it only when being compiled # by GCC. This is the part of AC_FUNC_ALLOCA that calculates the # information alloca.c needs. AC_DEFUN(libiberty_AC_FUNC_C_ALLOCA, [AC_CACHE_CHECK(whether alloca needs Cray hooks, ac_cv_os_cray, [AC_EGREP_CPP(webecray, [#if defined(CRAY) && ! defined(CRAY2) webecray #else wenotbecray #endif ], ac_cv_os_cray=yes, ac_cv_os_cray=no)]) if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do AC_CHECK_FUNC($ac_func, [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func, [Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. This function is required for alloca.c support on those systems.]) break]) done fi AC_CACHE_CHECK(stack direction for C alloca, ac_cv_c_stack_direction, [AC_TRY_RUN([find_stack_direction () { static char *addr = 0; auto char dummy; if (addr == 0) { addr = &dummy; return find_stack_direction (); } else return (&dummy > addr) ? 1 : -1; } main () { exit (find_stack_direction() < 0); }], ac_cv_c_stack_direction=1, ac_cv_c_stack_direction=-1, ac_cv_c_stack_direction=0)]) AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction, [Define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown]) ]) # AC_LANG_FUNC_LINK_TRY(C)(FUNCTION) # ---------------------------------- # Don't include because on OSF/1 3.0 it includes # which includes which contains a # prototype for select. Similarly for bzero. # # This test used to merely assign f=$1 in main(), but that was # optimized away by HP unbundled cc A.05.36 for ia64 under +O3, # presumably on the basis that there's no need to do that store if the # program is about to exit. Conversely, the AIX linker optimizes an # unused external declaration that initializes f=$1. So this test # program has both an external initialization of f, and a use of f in # main that affects the exit status. # m4_define([AC_LANG_FUNC_LINK_TRY(C)], [AC_LANG_PROGRAM( [/* System header to define __stub macros and hopefully few prototypes, which can conflict with char $1 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. Under hpux, including includes and causes problems checking for functions defined therein. */ #if defined (__STDC__) && !defined (_HPUX_SOURCE) # include #else # include #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $1 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$1) || defined (__stub___$1) choke me #else char (*f) () = $1; #endif #ifdef __cplusplus } #endif ], [return f != $1;])]) nescc-1.3.4/libiberty/alloca.c000066400000000000000000000333751177770303300162210ustar00rootroot00000000000000/* alloca.c -- allocate automatically reclaimed memory (Mostly) portable public-domain implementation -- D A Gwyn This implementation of the PWB library alloca function, which is used to allocate space off the run-time stack so that it is automatically reclaimed upon procedure exit, was inspired by discussions with J. Q. Johnson of Cornell. J.Otto Tennant contributed the Cray support. There are some preprocessor constants that can be defined when compiling for your specific system, for improved efficiency; however, the defaults should be okay. The general concept of this implementation is to keep track of all alloca-allocated blocks, and reclaim any that are found to be deeper in the stack than the current invocation. This heuristic does not reclaim storage as soon as it becomes invalid, but it will do so eventually. As a special case, alloca(0) reclaims storage without allocating any. It is a good idea to use alloca(0) in your main control loop, etc. to force garbage collection. */ /* @deftypefn Replacement void* alloca (size_t @var{size}) This function allocates memory which will be automatically reclaimed after the procedure exits. The @libib{} implementation does not free the memory immediately but will do so eventually during subsequent calls to this function. Memory is allocated using @code{xmalloc} under normal circumstances. The header file @file{alloca-conf.h} can be used in conjunction with the GNU Autoconf test @code{AC_FUNC_ALLOCA} to test for and properly make available this function. The @code{AC_FUNC_ALLOCA} test requires that client code use a block of preprocessor code to be safe (see the Autoconf manual for more); this header incorporates that logic and more, including the possibility of a GCC built-in function. @end deftypefn */ #ifdef HAVE_CONFIG_H #include #endif #include #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STDLIB_H #include #endif /* These variables are used by the ASTRDUP implementation that relies on C_alloca. */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ const char *libiberty_optr; char *libiberty_nptr; unsigned long libiberty_len; #ifdef __cplusplus } #endif /* __cplusplus */ /* If your stack is a linked list of frames, you have to provide an "address metric" ADDRESS_FUNCTION macro. */ #if defined (CRAY) && defined (CRAY_STACKSEG_END) static long i00afunc (); #define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) #else #define ADDRESS_FUNCTION(arg) &(arg) #endif #ifndef NULL #define NULL 0 #endif /* Define STACK_DIRECTION if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #ifndef STACK_DIRECTION #define STACK_DIRECTION 0 /* Direction unknown. */ #endif #if STACK_DIRECTION != 0 #define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ #else /* STACK_DIRECTION == 0; need run-time code. */ static int stack_dir; /* 1 or -1 once known. */ #define STACK_DIR stack_dir static void find_stack_direction (void) { static char *addr = NULL; /* Address of first `dummy', once known. */ auto char dummy; /* To get stack address. */ if (addr == NULL) { /* Initial entry. */ addr = ADDRESS_FUNCTION (dummy); find_stack_direction (); /* Recurse once. */ } else { /* Second entry. */ if (ADDRESS_FUNCTION (dummy) > addr) stack_dir = 1; /* Stack grew upward. */ else stack_dir = -1; /* Stack grew downward. */ } } #endif /* STACK_DIRECTION == 0 */ /* An "alloca header" is used to: (a) chain together all alloca'ed blocks; (b) keep track of stack depth. It is very important that sizeof(header) agree with malloc alignment chunk size. The following default should work okay. */ #ifndef ALIGN_SIZE #define ALIGN_SIZE sizeof(double) #endif typedef union hdr { char align[ALIGN_SIZE]; /* To force sizeof(header). */ struct { union hdr *next; /* For chaining headers. */ char *deep; /* For stack depth measure. */ } h; } header; static header *last_alloca_header = NULL; /* -> last alloca header. */ /* Return a pointer to at least SIZE bytes of storage, which will be automatically reclaimed upon exit from the procedure that called alloca. Originally, this space was supposed to be taken from the current stack frame of the caller, but that method cannot be made to work for some implementations of C, for example under Gould's UTX/32. */ /* @undocumented C_alloca */ PTR C_alloca (size_t size) { auto char probe; /* Probes stack depth: */ register char *depth = ADDRESS_FUNCTION (probe); #if STACK_DIRECTION == 0 if (STACK_DIR == 0) /* Unknown growth direction. */ find_stack_direction (); #endif /* Reclaim garbage, defined as all alloca'd storage that was allocated from deeper in the stack than currently. */ { register header *hp; /* Traverses linked list. */ for (hp = last_alloca_header; hp != NULL;) if ((STACK_DIR > 0 && hp->h.deep > depth) || (STACK_DIR < 0 && hp->h.deep < depth)) { register header *np = hp->h.next; free ((PTR) hp); /* Collect garbage. */ hp = np; /* -> next header. */ } else break; /* Rest are not deeper. */ last_alloca_header = hp; /* -> last valid storage. */ } if (size == 0) return NULL; /* No allocation required. */ /* Allocate combined header + user data storage. */ { register void *new_storage = XNEWVEC (char, sizeof (header) + size); /* Address of header. */ if (new_storage == 0) abort(); ((header *) new_storage)->h.next = last_alloca_header; ((header *) new_storage)->h.deep = depth; last_alloca_header = (header *) new_storage; /* User storage begins just after header. */ return (PTR) ((char *) new_storage + sizeof (header)); } } #if defined (CRAY) && defined (CRAY_STACKSEG_END) #ifdef DEBUG_I00AFUNC #include #endif #ifndef CRAY_STACK #define CRAY_STACK #ifndef CRAY2 /* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */ struct stack_control_header { long shgrow:32; /* Number of times stack has grown. */ long shaseg:32; /* Size of increments to stack. */ long shhwm:32; /* High water mark of stack. */ long shsize:32; /* Current size of stack (all segments). */ }; /* The stack segment linkage control information occurs at the high-address end of a stack segment. (The stack grows from low addresses to high addresses.) The initial part of the stack segment linkage control information is 0200 (octal) words. This provides for register storage for the routine which overflows the stack. */ struct stack_segment_linkage { long ss[0200]; /* 0200 overflow words. */ long sssize:32; /* Number of words in this segment. */ long ssbase:32; /* Offset to stack base. */ long:32; long sspseg:32; /* Offset to linkage control of previous segment of stack. */ long:32; long sstcpt:32; /* Pointer to task common address block. */ long sscsnm; /* Private control structure number for microtasking. */ long ssusr1; /* Reserved for user. */ long ssusr2; /* Reserved for user. */ long sstpid; /* Process ID for pid based multi-tasking. */ long ssgvup; /* Pointer to multitasking thread giveup. */ long sscray[7]; /* Reserved for Cray Research. */ long ssa0; long ssa1; long ssa2; long ssa3; long ssa4; long ssa5; long ssa6; long ssa7; long sss0; long sss1; long sss2; long sss3; long sss4; long sss5; long sss6; long sss7; }; #else /* CRAY2 */ /* The following structure defines the vector of words returned by the STKSTAT library routine. */ struct stk_stat { long now; /* Current total stack size. */ long maxc; /* Amount of contiguous space which would be required to satisfy the maximum stack demand to date. */ long high_water; /* Stack high-water mark. */ long overflows; /* Number of stack overflow ($STKOFEN) calls. */ long hits; /* Number of internal buffer hits. */ long extends; /* Number of block extensions. */ long stko_mallocs; /* Block allocations by $STKOFEN. */ long underflows; /* Number of stack underflow calls ($STKRETN). */ long stko_free; /* Number of deallocations by $STKRETN. */ long stkm_free; /* Number of deallocations by $STKMRET. */ long segments; /* Current number of stack segments. */ long maxs; /* Maximum number of stack segments so far. */ long pad_size; /* Stack pad size. */ long current_address; /* Current stack segment address. */ long current_size; /* Current stack segment size. This number is actually corrupted by STKSTAT to include the fifteen word trailer area. */ long initial_address; /* Address of initial segment. */ long initial_size; /* Size of initial segment. */ }; /* The following structure describes the data structure which trails any stack segment. I think that the description in 'asdef' is out of date. I only describe the parts that I am sure about. */ struct stk_trailer { long this_address; /* Address of this block. */ long this_size; /* Size of this block (does not include this trailer). */ long unknown2; long unknown3; long link; /* Address of trailer block of previous segment. */ long unknown5; long unknown6; long unknown7; long unknown8; long unknown9; long unknown10; long unknown11; long unknown12; long unknown13; long unknown14; }; #endif /* CRAY2 */ #endif /* not CRAY_STACK */ #ifdef CRAY2 /* Determine a "stack measure" for an arbitrary ADDRESS. I doubt that "lint" will like this much. */ static long i00afunc (long *address) { struct stk_stat status; struct stk_trailer *trailer; long *block, size; long result = 0; /* We want to iterate through all of the segments. The first step is to get the stack status structure. We could do this more quickly and more directly, perhaps, by referencing the $LM00 common block, but I know that this works. */ STKSTAT (&status); /* Set up the iteration. */ trailer = (struct stk_trailer *) (status.current_address + status.current_size - 15); /* There must be at least one stack segment. Therefore it is a fatal error if "trailer" is null. */ if (trailer == 0) abort (); /* Discard segments that do not contain our argument address. */ while (trailer != 0) { block = (long *) trailer->this_address; size = trailer->this_size; if (block == 0 || size == 0) abort (); trailer = (struct stk_trailer *) trailer->link; if ((block <= address) && (address < (block + size))) break; } /* Set the result to the offset in this segment and add the sizes of all predecessor segments. */ result = address - block; if (trailer == 0) { return result; } do { if (trailer->this_size <= 0) abort (); result += trailer->this_size; trailer = (struct stk_trailer *) trailer->link; } while (trailer != 0); /* We are done. Note that if you present a bogus address (one not in any segment), you will get a different number back, formed from subtracting the address of the first block. This is probably not what you want. */ return (result); } #else /* not CRAY2 */ /* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP. Determine the number of the cell within the stack, given the address of the cell. The purpose of this routine is to linearize, in some sense, stack addresses for alloca. */ static long i00afunc (long address) { long stkl = 0; long size, pseg, this_segment, stack; long result = 0; struct stack_segment_linkage *ssptr; /* Register B67 contains the address of the end of the current stack segment. If you (as a subprogram) store your registers on the stack and find that you are past the contents of B67, you have overflowed the segment. B67 also points to the stack segment linkage control area, which is what we are really interested in. */ stkl = CRAY_STACKSEG_END (); ssptr = (struct stack_segment_linkage *) stkl; /* If one subtracts 'size' from the end of the segment, one has the address of the first word of the segment. If this is not the first segment, 'pseg' will be nonzero. */ pseg = ssptr->sspseg; size = ssptr->sssize; this_segment = stkl - size; /* It is possible that calling this routine itself caused a stack overflow. Discard stack segments which do not contain the target address. */ while (!(this_segment <= address && address <= stkl)) { #ifdef DEBUG_I00AFUNC fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl); #endif if (pseg == 0) break; stkl = stkl - pseg; ssptr = (struct stack_segment_linkage *) stkl; size = ssptr->sssize; pseg = ssptr->sspseg; this_segment = stkl - size; } result = address - this_segment; /* If you subtract pseg from the current end of the stack, you get the address of the previous stack segment's end. This seems a little convoluted to me, but I'll bet you save a cycle somewhere. */ while (pseg != 0) { #ifdef DEBUG_I00AFUNC fprintf (stderr, "%011o %011o\n", pseg, size); #endif stkl = stkl - pseg; ssptr = (struct stack_segment_linkage *) stkl; size = ssptr->sssize; pseg = ssptr->sspseg; result += size; } return (result); } #endif /* not CRAY2 */ #endif /* CRAY */ nescc-1.3.4/libiberty/argv.c000066400000000000000000000307311177770303300157160ustar00rootroot00000000000000/* Create and destroy argument vectors (argv's) Copyright (C) 1992, 2001 Free Software Foundation, Inc. Written by Fred Fish @ Cygnus Support This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* Create and destroy argument vectors. An argument vector is simply an array of string pointers, terminated by a NULL pointer. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "ansidecl.h" #include "libiberty.h" #include "safe-ctype.h" /* Routines imported from standard C runtime libraries. */ #include #include #include #include #ifndef NULL #define NULL 0 #endif #ifndef EOS #define EOS '\0' #endif #define INITIAL_MAXARGC 8 /* Number of args + NULL in initial argv */ /* @deftypefn Extension char** dupargv (char **@var{vector}) Duplicate an argument vector. Simply scans through @var{vector}, duplicating each argument until the terminating @code{NULL} is found. Returns a pointer to the argument vector if successful. Returns @code{NULL} if there is insufficient memory to complete building the argument vector. @end deftypefn */ char ** dupargv (char **argv) { int argc; char **copy; if (argv == NULL) return NULL; /* the vector */ for (argc = 0; argv[argc] != NULL; argc++); copy = (char **) malloc ((argc + 1) * sizeof (char *)); if (copy == NULL) return NULL; /* the strings */ for (argc = 0; argv[argc] != NULL; argc++) { int len = strlen (argv[argc]); copy[argc] = (char *) malloc (len + 1); if (copy[argc] == NULL) { freeargv (copy); return NULL; } strcpy (copy[argc], argv[argc]); } copy[argc] = NULL; return copy; } /* @deftypefn Extension void freeargv (char **@var{vector}) Free an argument vector that was built using @code{buildargv}. Simply scans through @var{vector}, freeing the memory for each argument until the terminating @code{NULL} is found, and then frees @var{vector} itself. @end deftypefn */ void freeargv (char **vector) { register char **scan; if (vector != NULL) { for (scan = vector; *scan != NULL; scan++) { free (*scan); } free (vector); } } /* @deftypefn Extension char** buildargv (char *@var{sp}) Given a pointer to a string, parse the string extracting fields separated by whitespace and optionally enclosed within either single or double quotes (which are stripped off), and build a vector of pointers to copies of the string for each field. The input string remains unchanged. The last element of the vector is followed by a @code{NULL} element. All of the memory for the pointer array and copies of the string is obtained from @code{malloc}. All of the memory can be returned to the system with the single function call @code{freeargv}, which takes the returned result of @code{buildargv}, as it's argument. Returns a pointer to the argument vector if successful. Returns @code{NULL} if @var{sp} is @code{NULL} or if there is insufficient memory to complete building the argument vector. If the input is a null string (as opposed to a @code{NULL} pointer), then buildarg returns an argument vector that has one arg, a null string. @end deftypefn The memory for the argv array is dynamically expanded as necessary. In order to provide a working buffer for extracting arguments into, with appropriate stripping of quotes and translation of backslash sequences, we allocate a working buffer at least as long as the input string. This ensures that we always have enough space in which to work, since the extracted arg is never larger than the input string. The argument vector is always kept terminated with a @code{NULL} arg pointer, so it can be passed to @code{freeargv} at any time, or returned, as appropriate. */ char **buildargv (const char *input) { char *arg; char *copybuf; int squote = 0; int dquote = 0; int bsquote = 0; int argc = 0; int maxargc = 0; char **argv = NULL; char **nargv; if (input != NULL) { copybuf = (char *) alloca (strlen (input) + 1); /* Is a do{}while to always execute the loop once. Always return an argv, even for null strings. See NOTES above, test case below. */ do { /* Pick off argv[argc] */ while (ISBLANK (*input)) { input++; } if ((maxargc == 0) || (argc >= (maxargc - 1))) { /* argv needs initialization, or expansion */ if (argv == NULL) { maxargc = INITIAL_MAXARGC; nargv = (char **) malloc (maxargc * sizeof (char *)); } else { maxargc *= 2; nargv = (char **) realloc (argv, maxargc * sizeof (char *)); } if (nargv == NULL) { if (argv != NULL) { freeargv (argv); argv = NULL; } break; } argv = nargv; argv[argc] = NULL; } /* Begin scanning arg */ arg = copybuf; while (*input != EOS) { if (ISSPACE (*input) && !squote && !dquote && !bsquote) { break; } else { if (bsquote) { bsquote = 0; *arg++ = *input; } else if (*input == '\\') { bsquote = 1; } else if (squote) { if (*input == '\'') { squote = 0; } else { *arg++ = *input; } } else if (dquote) { if (*input == '"') { dquote = 0; } else { *arg++ = *input; } } else { if (*input == '\'') { squote = 1; } else if (*input == '"') { dquote = 1; } else { *arg++ = *input; } } input++; } } *arg = EOS; argv[argc] = strdup (copybuf); if (argv[argc] == NULL) { freeargv (argv); argv = NULL; break; } argc++; argv[argc] = NULL; while (ISSPACE (*input)) { input++; } } while (*input != EOS); } return (argv); } /* @deftypefn Extension int writeargv (const char **@var{argv}, FILE *@var{file}) Write each member of ARGV, handling all necessary quoting, to the file named by FILE, separated by whitespace. Return 0 on success, non-zero if an error occurred while writing to FILE. @end deftypefn */ int writeargv (char **argv, FILE *f) { int status = 0; if (f == NULL) return 1; while (*argv != NULL) { const char *arg = *argv; while (*arg != EOS) { char c = *arg; if (ISSPACE(c) || c == '\\' || c == '\'' || c == '"') if (EOF == fputc ('\\', f)) { status = 1; goto done; } if (EOF == fputc (c, f)) { status = 1; goto done; } arg++; } if (EOF == fputc ('\n', f)) { status = 1; goto done; } argv++; } done: return status; } /* @deftypefn Extension void expandargv (int *@var{argcp}, char ***@var{argvp}) The @var{argcp} and @code{argvp} arguments are pointers to the usual @code{argc} and @code{argv} arguments to @code{main}. This function looks for arguments that begin with the character @samp{@@}. Any such arguments are interpreted as ``response files''. The contents of the response file are interpreted as additional command line options. In particular, the file is separated into whitespace-separated strings; each such string is taken as a command-line option. The new options are inserted in place of the option naming the response file, and @code{*argcp} and @code{*argvp} will be updated. If the value of @code{*argvp} is modified by this function, then the new value has been dynamically allocated and can be deallocated by the caller with @code{freeargv}. However, most callers will simply call @code{expandargv} near the beginning of @code{main} and allow the operating system to free the memory when the program exits. @end deftypefn */ void expandargv (int *argcp, char ***argvp) { /* The argument we are currently processing. */ int i = 0; /* Non-zero if ***argvp has been dynamically allocated. */ int argv_dynamic = 0; /* Loop over the arguments, handling response files. We always skip ARGVP[0], as that is the name of the program being run. */ while (++i < *argcp) { /* The name of the response file. */ const char *filename; /* The response file. */ FILE *f; /* An upper bound on the number of characters in the response file. */ long pos; /* The number of characters in the response file, when actually read. */ size_t len; /* A dynamically allocated buffer used to hold options read from a response file. */ char *buffer; /* Dynamically allocated storage for the options read from the response file. */ char **file_argv; /* The number of options read from the response file, if any. */ size_t file_argc; /* We are only interested in options of the form "@file". */ filename = (*argvp)[i]; if (filename[0] != '@') continue; /* Read the contents of the file. */ f = fopen (++filename, "r"); if (!f) continue; if (fseek (f, 0L, SEEK_END) == -1) goto error; pos = ftell (f); if (pos == -1) goto error; if (fseek (f, 0L, SEEK_SET) == -1) goto error; buffer = (char *) xmalloc (pos * sizeof (char) + 1); len = fread (buffer, sizeof (char), pos, f); if (len != (size_t) pos /* On Windows, fread may return a value smaller than POS, due to CR/LF->CR translation when reading text files. That does not in-and-of itself indicate failure. */ && ferror (f)) goto error; /* Add a NUL terminator. */ buffer[len] = '\0'; /* Parse the string. */ file_argv = buildargv (buffer); /* If *ARGVP is not already dynamically allocated, copy it. */ if (!argv_dynamic) { *argvp = dupargv (*argvp); if (!*argvp) { fputs ("\nout of memory\n", stderr); xexit (1); } } /* Count the number of arguments. */ file_argc = 0; while (file_argv[file_argc] && *file_argv[file_argc]) ++file_argc; /* Now, insert FILE_ARGV into ARGV. The "+1" below handles the NULL terminator at the end of ARGV. */ *argvp = ((char **) xrealloc (*argvp, (*argcp + file_argc + 1) * sizeof (char *))); memmove (*argvp + i + file_argc, *argvp + i + 1, (*argcp - i) * sizeof (char *)); memcpy (*argvp + i, file_argv, file_argc * sizeof (char *)); /* The original option has been replaced by all the new options. */ *argcp += file_argc - 1; /* Free up memory allocated to process the response file. We do not use freeargv because the individual options in FILE_ARGV are now in the main ARGV. */ free (file_argv); free (buffer); /* Rescan all of the arguments just read to support response files that include other response files. */ --i; error: /* We're all done with the file now. */ fclose (f); } } #ifdef MAIN /* Simple little test driver. */ static const char *const tests[] = { "a simple command line", "arg 'foo' is single quoted", "arg \"bar\" is double quoted", "arg \"foo bar\" has embedded whitespace", "arg 'Jack said \\'hi\\'' has single quotes", "arg 'Jack said \\\"hi\\\"' has double quotes", "a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9", /* This should be expanded into only one argument. */ "trailing-whitespace ", "", NULL }; int main (void) { char **argv; const char *const *test; char **targs; for (test = tests; *test != NULL; test++) { printf ("buildargv(\"%s\")\n", *test); if ((argv = buildargv (*test)) == NULL) { printf ("failed!\n\n"); } else { for (targs = argv; *targs != NULL; targs++) { printf ("\t\"%s\"\n", *targs); } printf ("\n"); } freeargv (argv); } return 0; } #endif /* MAIN */ nescc-1.3.4/libiberty/asprintf.c000066400000000000000000000035061177770303300166050ustar00rootroot00000000000000/* Like sprintf but provides a pointer to malloc'd storage, which must be freed by the caller. Copyright (C) 1997, 2003 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "ansidecl.h" #include "libiberty.h" #include /* @deftypefn Extension int asprintf (char **@var{resptr}, const char *@var{format}, ...) Like @code{sprintf}, but instead of passing a pointer to a buffer, you pass a pointer to a pointer. This function will compute the size of the buffer needed, allocate memory with @code{malloc}, and store a pointer to the allocated memory in @code{*@var{resptr}}. The value returned is the same as @code{sprintf} would return. If memory could not be allocated, minus one is returned and @code{NULL} is stored in @code{*@var{resptr}}. @end deftypefn */ int asprintf (char **buf, const char *fmt, ...) { int status; VA_OPEN (ap, fmt); VA_FIXEDARG (ap, char **, buf); VA_FIXEDARG (ap, const char *, fmt); status = vasprintf (buf, fmt, ap); VA_CLOSE (ap); return status; } nescc-1.3.4/libiberty/at-file.texi000066400000000000000000000013341177770303300170240ustar00rootroot00000000000000@c This file is designed to be included in manuals that use @c expandargv. @item @@@var{file} Read command-line options from @var{file}. The options read are inserted in place of the original @@@var{file} option. If @var{file} does not exist, or cannot be read, then the option will be treated literally, and not removed. Options in @var{file} are separated by whitespace. A whitespace character may be included in an option by surrounding the entire option in either single or double quotes. Any character (including a backslash) may be included by prefixing the character to be included with a backslash. The @var{file} may itself contain additional @@@var{file} options; any such options will be processed recursively. nescc-1.3.4/libiberty/atexit.c000066400000000000000000000007501177770303300162530ustar00rootroot00000000000000/* Wrapper to implement ANSI C's atexit using SunOS's on_exit. */ /* This function is in the public domain. --Mike Stump. */ /* @deftypefn Supplemental int atexit (void (*@var{f})()) Causes function @var{f} to be called at exit. Returns 0. @end deftypefn */ #include "config.h" #ifdef HAVE_ON_EXIT int atexit(void (*f)(void)) { /* If the system doesn't provide a definition for atexit, use on_exit if the system provides that. */ on_exit (f, 0); return 0; } #endif nescc-1.3.4/libiberty/basename.c000066400000000000000000000024031177770303300165250ustar00rootroot00000000000000/* Return the basename of a pathname. This file is in the public domain. */ /* @deftypefn Supplemental char* basename (const char *@var{name}) Returns a pointer to the last component of pathname @var{name}. Behavior is undefined if the pathname ends in a directory separator. @end deftypefn */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "ansidecl.h" #include "libiberty.h" #include "safe-ctype.h" #ifndef DIR_SEPARATOR #define DIR_SEPARATOR '/' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) #define HAVE_DOS_BASED_FILE_SYSTEM #ifndef DIR_SEPARATOR_2 #define DIR_SEPARATOR_2 '\\' #endif #endif /* Define IS_DIR_SEPARATOR. */ #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ char * basename (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (ISALPHA (name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) { if (IS_DIR_SEPARATOR (*name)) { base = name + 1; } } return (char *) base; } nescc-1.3.4/libiberty/bcmp.c000066400000000000000000000012031177770303300156700ustar00rootroot00000000000000/* bcmp This function is in the public domain. */ /* @deftypefn Supplemental int bcmp (char *@var{x}, char *@var{y}, int @var{count}) Compares the first @var{count} bytes of two areas of memory. Returns zero if they are the same, nonzero otherwise. Returns zero if @var{count} is zero. A nonzero result only indicates a difference, it does not indicate any sorting order (say, by having a positive result mean @var{x} sorts before @var{y}). @end deftypefn */ #include extern int memcmp(const void *, const void *, size_t); int bcmp (const void *s1, const void *s2, size_t count) { return memcmp (s1, s2, count); } nescc-1.3.4/libiberty/bcopy.c000066400000000000000000000012661177770303300160740ustar00rootroot00000000000000/* bcopy -- copy memory regions of arbitary length @deftypefn Supplemental void bcopy (char *@var{in}, char *@var{out}, int @var{length}) Copies @var{length} bytes from memory region @var{in} to region @var{out}. The use of @code{bcopy} is deprecated in new programs. @end deftypefn */ #include void bcopy (const void *src, void *dest, size_t len) { if (dest < src) { const char *firsts = (const char *) src; char *firstd = (char *) dest; while (len--) *firstd++ = *firsts++; } else { const char *lasts = (const char *)src + (len-1); char *lastd = (char *)dest + (len-1); while (len--) *lastd-- = *lasts--; } } nescc-1.3.4/libiberty/bsearch.c000066400000000000000000000073471177770303300163750ustar00rootroot00000000000000/* * Copyright (c) 1990 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. [rescinded 22 July 1999] * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* @deftypefn Supplemental void* bsearch (const void *@var{key}, const void *@var{base}, size_t @var{nmemb}, size_t @var{size}, int (*@var{compar})(const void *, const void *)) Performs a search over an array of @var{nmemb} elements pointed to by @var{base} for a member that matches the object pointed to by @var{key}. The size of each member is specified by @var{size}. The array contents should be sorted in ascending order according to the @var{compar} comparison function. This routine should take two arguments pointing to the @var{key} and to an array member, in that order, and should return an integer less than, equal to, or greater than zero if the @var{key} object is respectively less than, matching, or greater than the array member. @end deftypefn */ #include "config.h" #include "ansidecl.h" #include /* size_t */ #include /* * Perform a binary search. * * The code below is a bit sneaky. After a comparison fails, we * divide the work in half by moving either left or right. If lim * is odd, moving left simply involves halving lim: e.g., when lim * is 5 we look at item 2, so we change lim to 2 so that we will * look at items 0 & 1. If lim is even, the same applies. If lim * is odd, moving right again involes halving lim, this time moving * the base up one item past p: e.g., when lim is 5 we change base * to item 3 and make lim 2 so that we will look at items 3 and 4. * If lim is even, however, we have to shrink it by one before * halving: e.g., when lim is 4, we still looked at item 2, so we * have to make lim 3, then halve, obtaining 1, so that we will only * look at item 3. */ void * bsearch (register const void *key, const void *base0, size_t nmemb, register size_t size, register int (*compar)(const void *, const void *)) { register const char *base = (const char *) base0; register int lim, cmp; register const void *p; for (lim = nmemb; lim != 0; lim >>= 1) { p = base + (lim >> 1) * size; cmp = (*compar)(key, p); if (cmp == 0) return (void *)p; if (cmp > 0) { /* key > p: move right */ base = (const char *)p + size; lim--; } /* else move left */ } return (NULL); } nescc-1.3.4/libiberty/bzero.c000066400000000000000000000006631177770303300161010ustar00rootroot00000000000000/* Portable version of bzero for systems without it. This function is in the public domain. */ /* @deftypefn Supplemental void bzero (char *@var{mem}, int @var{count}) Zeros @var{count} bytes starting at @var{mem}. Use of this function is deprecated in favor of @code{memset}. @end deftypefn */ #include extern void *memset(void *, int, size_t); void bzero (void *to, size_t count) { memset (to, 0, count); } nescc-1.3.4/libiberty/calloc.c000066400000000000000000000013121177770303300162050ustar00rootroot00000000000000/* calloc -- allocate memory which has been initialized to zero. This function is in the public domain. */ /* @deftypefn Supplemental void* calloc (size_t @var{nelem}, size_t @var{elsize}) Uses @code{malloc} to allocate storage for @var{nelem} objects of @var{elsize} bytes each, then zeros the memory. @end deftypefn */ #include "ansidecl.h" #include /* For systems with larger pointers than ints, this must be declared. */ PTR malloc (size_t); void bzero (PTR, size_t); PTR calloc (size_t nelem, size_t elsize) { register PTR ptr; if (nelem == 0 || elsize == 0) nelem = elsize = 1; ptr = malloc (nelem * elsize); if (ptr) bzero (ptr, nelem * elsize); return ptr; } nescc-1.3.4/libiberty/choose-temp.c000066400000000000000000000040171177770303300172000ustar00rootroot00000000000000/* Utility to pick a temporary filename prefix. Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include /* May get P_tmpdir. */ #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #include "libiberty.h" extern char *choose_tmpdir (void); /* Name of temporary file. mktemp requires 6 trailing X's. */ #define TEMP_FILE "ccXXXXXX" #define TEMP_FILE_LEN (sizeof(TEMP_FILE) - 1) /* @deftypefn Extension char* choose_temp_base (void) Return a prefix for temporary file names or @code{NULL} if unable to find one. The current directory is chosen if all else fails so the program is exited if a temporary directory can't be found (@code{mktemp} fails). The buffer for the result is obtained with @code{xmalloc}. This function is provided for backwards compatibility only. Its use is not recommended. @end deftypefn */ char * choose_temp_base (void) { const char *base = choose_tmpdir (); char *temp_filename; int len; len = strlen (base); temp_filename = XNEWVEC (char, len + TEMP_FILE_LEN + 1); strcpy (temp_filename, base); strcpy (temp_filename + len, TEMP_FILE); if (mktemp (temp_filename) == 0) abort (); return temp_filename; } nescc-1.3.4/libiberty/clock.c000066400000000000000000000050761177770303300160560ustar00rootroot00000000000000/* ANSI-compatible clock function. Copyright (C) 1994, 1995, 1999 Free Software Foundation, Inc. This file is part of the libiberty library. This library 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. This library 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 GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. As a special exception, if you link this library with files compiled with a GNU compiler to produce an executable, this does not cause the resulting executable to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ /* @deftypefn Supplemental long clock (void) Returns an approximation of the CPU time used by the process as a @code{clock_t}; divide this number by @samp{CLOCKS_PER_SEC} to get the number of seconds used. @end deftypefn */ #include "config.h" #ifdef HAVE_GETRUSAGE #include #include #endif #ifdef HAVE_TIMES #ifdef HAVE_SYS_PARAM_H #include #endif #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef _SC_CLK_TCK #define GNU_HZ sysconf(_SC_CLK_TCK) #else #ifdef HZ #define GNU_HZ HZ #else #ifdef CLOCKS_PER_SEC #define GNU_HZ CLOCKS_PER_SEC #endif #endif #endif /* FIXME: should be able to declare as clock_t. */ long clock (void) { #ifdef HAVE_GETRUSAGE struct rusage rusage; getrusage (0, &rusage); return (rusage.ru_utime.tv_sec * 1000000 + rusage.ru_utime.tv_usec + rusage.ru_stime.tv_sec * 1000000 + rusage.ru_stime.tv_usec); #else #ifdef HAVE_TIMES struct tms tms; times (&tms); return (tms.tms_utime + tms.tms_stime) * (1000000 / GNU_HZ); #else #ifdef VMS struct { int proc_user_time; int proc_system_time; int child_user_time; int child_system_time; } vms_times; times (&vms_times); return (vms_times.proc_user_time + vms_times.proc_system_time) * 10000; #else /* A fallback, if nothing else available. */ return 0; #endif /* VMS */ #endif /* HAVE_TIMES */ #endif /* HAVE_GETRUSAGE */ } nescc-1.3.4/libiberty/concat.c000066400000000000000000000133621177770303300162270ustar00rootroot00000000000000/* Concatenate variable number of strings. Copyright (C) 1991, 1994, 2001 Free Software Foundation, Inc. Written by Fred Fish @ Cygnus Support This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* @deftypefn Extension char* concat (const char *@var{s1}, const char *@var{s2}, @dots{}, @code{NULL}) Concatenate zero or more of strings and return the result in freshly @code{xmalloc}ed memory. Returns @code{NULL} if insufficient memory is available. The argument list is terminated by the first @code{NULL} pointer encountered. Pointers to empty strings are ignored. @end deftypefn NOTES This function uses xmalloc() which is expected to be a front end function to malloc() that deals with low memory situations. In typical use, if malloc() returns NULL then xmalloc() diverts to an error handler routine which never returns, and thus xmalloc will never return a NULL pointer. If the client application wishes to deal with low memory situations itself, it should supply an xmalloc that just directly invokes malloc and blindly returns whatever malloc returns. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "ansidecl.h" #include "libiberty.h" #include /* size_t */ #include # if HAVE_STRING_H # include # else # if HAVE_STRINGS_H # include # endif # endif #if HAVE_STDLIB_H #include #endif static inline unsigned long vconcat_length (const char *, va_list); static inline unsigned long vconcat_length (const char *first, va_list args) { unsigned long length = 0; const char *arg; for (arg = first; arg ; arg = va_arg (args, const char *)) length += strlen (arg); return length; } static inline char * vconcat_copy (char *dst, const char *first, va_list args) { char *end = dst; const char *arg; for (arg = first; arg ; arg = va_arg (args, const char *)) { unsigned long length = strlen (arg); memcpy (end, arg, length); end += length; } *end = '\000'; return dst; } /* @undocumented concat_length */ unsigned long concat_length (const char *first, ...) { unsigned long length; VA_OPEN (args, first); VA_FIXEDARG (args, const char *, first); length = vconcat_length (first, args); VA_CLOSE (args); return length; } /* @undocumented concat_copy */ char * concat_copy (char *dst, const char *first, ...) { char *save_dst; VA_OPEN (args, first); VA_FIXEDARG (args, char *, dst); VA_FIXEDARG (args, const char *, first); vconcat_copy (dst, first, args); save_dst = dst; /* With K&R C, dst goes out of scope here. */ VA_CLOSE (args); return save_dst; } #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ char *libiberty_concat_ptr; #ifdef __cplusplus } #endif /* __cplusplus */ /* @undocumented concat_copy2 */ char * concat_copy2 (const char *first, ...) { VA_OPEN (args, first); VA_FIXEDARG (args, const char *, first); vconcat_copy (libiberty_concat_ptr, first, args); VA_CLOSE (args); return libiberty_concat_ptr; } char * concat (const char *first, ...) { char *newstr; /* First compute the size of the result and get sufficient memory. */ VA_OPEN (args, first); VA_FIXEDARG (args, const char *, first); newstr = XNEWVEC (char, vconcat_length (first, args) + 1); VA_CLOSE (args); /* Now copy the individual pieces to the result string. */ VA_OPEN (args, first); VA_FIXEDARG (args, const char *, first); vconcat_copy (newstr, first, args); VA_CLOSE (args); return newstr; } /* @deftypefn Extension char* reconcat (char *@var{optr}, const char *@var{s1}, @dots{}, @code{NULL}) Same as @code{concat}, except that if @var{optr} is not @code{NULL} it is freed after the string is created. This is intended to be useful when you're extending an existing string or building up a string in a loop: @example str = reconcat (str, "pre-", str, NULL); @end example @end deftypefn */ char * reconcat (char *optr, const char *first, ...) { char *newstr; /* First compute the size of the result and get sufficient memory. */ VA_OPEN (args, first); VA_FIXEDARG (args, char *, optr); VA_FIXEDARG (args, const char *, first); newstr = XNEWVEC (char, vconcat_length (first, args) + 1); VA_CLOSE (args); /* Now copy the individual pieces to the result string. */ VA_OPEN (args, first); VA_FIXEDARG (args, char *, optr); VA_FIXEDARG (args, const char *, first); vconcat_copy (newstr, first, args); if (optr) /* Done before VA_CLOSE so optr stays in scope for K&R C. */ free (optr); VA_CLOSE (args); return newstr; } #ifdef MAIN #define NULLP (char *)0 /* Simple little test driver. */ #include int main (void) { printf ("\"\" = \"%s\"\n", concat (NULLP)); printf ("\"a\" = \"%s\"\n", concat ("a", NULLP)); printf ("\"ab\" = \"%s\"\n", concat ("a", "b", NULLP)); printf ("\"abc\" = \"%s\"\n", concat ("a", "b", "c", NULLP)); printf ("\"abcd\" = \"%s\"\n", concat ("ab", "cd", NULLP)); printf ("\"abcde\" = \"%s\"\n", concat ("ab", "c", "de", NULLP)); printf ("\"abcdef\" = \"%s\"\n", concat ("", "a", "", "bcd", "ef", NULLP)); return 0; } #endif nescc-1.3.4/libiberty/config.h-vms000066400000000000000000000003111177770303300170230ustar00rootroot00000000000000#ifndef NEED_strerror #define NEED_strerror #endif #ifndef NEED_basename #define NEED_basename #endif #ifndef NEED_psignal #define NEED_psignal #endif #ifndef NEED_on_exit #define NEED_on_exit #endif nescc-1.3.4/libiberty/config.in000066400000000000000000000302551177770303300164110ustar00rootroot00000000000000/* config.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. This function is required for alloca.c support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if you have the header file. */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the `asprintf' function. */ #undef HAVE_ASPRINTF /* Define to 1 if you have the `atexit' function. */ #undef HAVE_ATEXIT /* Define to 1 if you have the `basename' function. */ #undef HAVE_BASENAME /* Define to 1 if you have the `bcmp' function. */ #undef HAVE_BCMP /* Define to 1 if you have the `bcopy' function. */ #undef HAVE_BCOPY /* Define to 1 if you have the `bsearch' function. */ #undef HAVE_BSEARCH /* Define to 1 if you have the `bzero' function. */ #undef HAVE_BZERO /* Define to 1 if you have the `calloc' function. */ #undef HAVE_CALLOC /* Define to 1 if you have the `canonicalize_file_name' function. */ #undef HAVE_CANONICALIZE_FILE_NAME /* Define to 1 if you have the `clock' function. */ #undef HAVE_CLOCK /* Define to 1 if you have the declaration of `asprintf', and to 0 if you don't. */ #undef HAVE_DECL_ASPRINTF /* Define to 1 if you have the declaration of `basename', and to 0 if you don't. */ #undef HAVE_DECL_BASENAME /* Define to 1 if you have the declaration of `calloc', and to 0 if you don't. */ #undef HAVE_DECL_CALLOC /* Define to 1 if you have the declaration of `ffs', and to 0 if you don't. */ #undef HAVE_DECL_FFS /* Define to 1 if you have the declaration of `getenv', and to 0 if you don't. */ #undef HAVE_DECL_GETENV /* Define to 1 if you have the declaration of `getopt', and to 0 if you don't. */ #undef HAVE_DECL_GETOPT /* Define to 1 if you have the declaration of `malloc', and to 0 if you don't. */ #undef HAVE_DECL_MALLOC /* Define to 1 if you have the declaration of `realloc', and to 0 if you don't. */ #undef HAVE_DECL_REALLOC /* Define to 1 if you have the declaration of `sbrk', and to 0 if you don't. */ #undef HAVE_DECL_SBRK /* Define to 1 if you have the declaration of `snprintf', and to 0 if you don't. */ #undef HAVE_DECL_SNPRINTF /* Define to 1 if you have the declaration of `strverscmp', and to 0 if you don't. */ #undef HAVE_DECL_STRVERSCMP /* Define to 1 if you have the declaration of `vasprintf', and to 0 if you don't. */ #undef HAVE_DECL_VASPRINTF /* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you don't. */ #undef HAVE_DECL_VSNPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the `ffs' function. */ #undef HAVE_FFS /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the `getrusage' function. */ #undef HAVE_GETRUSAGE /* Define to 1 if you have the `getsysinfo' function. */ #undef HAVE_GETSYSINFO /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the `index' function. */ #undef HAVE_INDEX /* Define to 1 if you have the `insque' function. */ #undef HAVE_INSQUE /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_MACHINE_HAL_SYSINFO_H /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H /* Define to 1 if you have the `memchr' function. */ #undef HAVE_MEMCHR /* Define to 1 if you have the `memcmp' function. */ #undef HAVE_MEMCMP /* Define to 1 if you have the `memcpy' function. */ #undef HAVE_MEMCPY /* Define to 1 if you have the `memmove' function. */ #undef HAVE_MEMMOVE /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `mempcpy' function. */ #undef HAVE_MEMPCPY /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the `mkstemps' function. */ #undef HAVE_MKSTEMPS /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the `on_exit' function. */ #undef HAVE_ON_EXIT /* Define to 1 if you have the `psignal' function. */ #undef HAVE_PSIGNAL /* Define to 1 if you have the `pstat_getdynamic' function. */ #undef HAVE_PSTAT_GETDYNAMIC /* Define to 1 if you have the `pstat_getstatic' function. */ #undef HAVE_PSTAT_GETSTATIC /* Define to 1 if you have the `putenv' function. */ #undef HAVE_PUTENV /* Define to 1 if you have the `random' function. */ #undef HAVE_RANDOM /* Define to 1 if you have the `realpath' function. */ #undef HAVE_REALPATH /* Define to 1 if you have the `rename' function. */ #undef HAVE_RENAME /* Define to 1 if you have the `rindex' function. */ #undef HAVE_RINDEX /* Define to 1 if you have the `sbrk' function. */ #undef HAVE_SBRK /* Define to 1 if you have the `setenv' function. */ #undef HAVE_SETENV /* Define to 1 if you have the `sigsetmask' function. */ #undef HAVE_SIGSETMASK /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_EXT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `stpcpy' function. */ #undef HAVE_STPCPY /* Define to 1 if you have the `stpncpy' function. */ #undef HAVE_STPNCPY /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strncasecmp' function. */ #undef HAVE_STRNCASECMP /* Define to 1 if you have the `strndup' function. */ #undef HAVE_STRNDUP /* Define to 1 if you have the `strrchr' function. */ #undef HAVE_STRRCHR /* Define to 1 if you have the `strsignal' function. */ #undef HAVE_STRSIGNAL /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if you have the `strtod' function. */ #undef HAVE_STRTOD /* Define to 1 if you have the `strtol' function. */ #undef HAVE_STRTOL /* Define to 1 if you have the `strtoul' function. */ #undef HAVE_STRTOUL /* Define to 1 if you have the `strverscmp' function. */ #undef HAVE_STRVERSCMP /* Define to 1 if you have the `sysconf' function. */ #undef HAVE_SYSCONF /* Define to 1 if you have the `sysctl' function. */ #undef HAVE_SYSCTL /* Define to 1 if you have the `sysmp' function. */ #undef HAVE_SYSMP /* Define if you have the sys_errlist variable. */ #undef HAVE_SYS_ERRLIST /* Define to 1 if you have the header file. */ #undef HAVE_SYS_FILE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MMAN_H /* Define if you have the sys_nerr variable. */ #undef HAVE_SYS_NERR /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PSTAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_RESOURCE_H /* Define if you have the sys_siglist variable. */ #undef HAVE_SYS_SIGLIST /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SYSCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SYSINFO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SYSMP_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SYSTEMCFG_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TABLE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the `table' function. */ #undef HAVE_TABLE /* Define to 1 if you have the `times' function. */ #undef HAVE_TIMES /* Define to 1 if you have the header file. */ #undef HAVE_TIME_H /* Define to 1 if you have the `tmpnam' function. */ #undef HAVE_TMPNAM /* Define if you have the \`uintptr_t' type. */ #undef HAVE_UINTPTR_T /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `vasprintf' function. */ #undef HAVE_VASPRINTF /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_VFORK_H /* Define to 1 if you have the `vfprintf' function. */ #undef HAVE_VFPRINTF /* Define to 1 if you have the `vprintf' function. */ #undef HAVE_VPRINTF /* Define to 1 if you have the `vsnprintf' function. */ #undef HAVE_VSNPRINTF /* Define to 1 if you have the `vsprintf' function. */ #undef HAVE_VSPRINTF /* Define to 1 if you have the `wait3' function. */ #undef HAVE_WAIT3 /* Define to 1 if you have the `wait4' function. */ #undef HAVE_WAIT4 /* Define to 1 if you have the `waitpid' function. */ #undef HAVE_WAITPID /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK /* Define to 1 if you have the `_doprnt' function. */ #undef HAVE__DOPRNT /* Define if you have the _system_configuration variable. */ #undef HAVE__SYSTEM_CONFIGURATION /* Define to 1 if you have the `__fsetlocking' function. */ #undef HAVE___FSETLOCKING /* Define if canonicalize_file_name is not declared in system header files. */ #undef NEED_DECLARATION_CANONICALIZE_FILE_NAME /* Define if errno must be declared even when is included. */ #undef NEED_DECLARATION_ERRNO /* Define to 1 if your C compiler doesn't accept -c and -o together. */ #undef NO_MINUS_C_MINUS_O /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT /* Define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define to an unsigned 64-bit type available in the compiler. */ #undef UNSIGNED_64BIT_TYPE /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to `int' if does not define. */ #undef pid_t /* Define to `unsigned long' if does not define. */ #undef uintptr_t /* Define as `fork' if `vfork' does not work. */ #undef vfork nescc-1.3.4/libiberty/config/000077500000000000000000000000001177770303300160545ustar00rootroot00000000000000nescc-1.3.4/libiberty/config/mh-aix000066400000000000000000000007121177770303300171620ustar00rootroot00000000000000# This file is only needed by AIX 3.1. HDEFINES = -D__IEEE_BIG_ENDIAN # Most releases of AIX 3.1 include an incorrect internal version of copysign # in libc.a for use by some libc public functions including modf. The public # version of copysign in libm.a is usable. For the sake of libg++ (which # uses modf), we add copysign here. Supposedly, this problem is fixed in AIX # 3.1.8 and above, including all releases of AIX 3.2. EXTRA_OFILES = copysign.o nescc-1.3.4/libiberty/config/mh-cxux7000066400000000000000000000000411177770303300174520ustar00rootroot00000000000000HDEFINES = -DHARRIS_FLOAT_FORMAT nescc-1.3.4/libiberty/config/mh-fbsd21000066400000000000000000000000311177770303300174540ustar00rootroot00000000000000EXTRA_OFILES=vasprintf.o nescc-1.3.4/libiberty/config/mh-openedition000066400000000000000000000000511177770303300207120ustar00rootroot00000000000000HDEFINES = -D_ALL_SOURCE -DLE370 CC=c89 nescc-1.3.4/libiberty/config/mh-windows000066400000000000000000000000771177770303300200770ustar00rootroot00000000000000EXTRA_OFILES=asprintf.o strcasecmp.o strncasecmp.o vasprintf.o nescc-1.3.4/libiberty/configure000077500000000000000000006573511177770303300165370ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="xmalloc.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_list= ac_subst_vars='LTLIBOBJS INSTALL_DEST pexecute target_header_dir CHECK LIBOBJS INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM EGREP GREP OUTPUT_OPTION NO_MINUS_C_MINUS_O ac_libiberty_warn_cflags CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC RANLIB AR host_os host_vendor host_cpu host build_os build_vendor build_cpu build HAVE_PERL PERL BUILD_INFO MAKEINFO NOTMAINT MAINT libiberty_topdir target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='host_makefile_frag' ac_user_opts=' enable_option_checking with_target_subdir with_build_subdir with_cross_host with_newlib enable_maintainer_mode enable_multilib enable_install_libiberty ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-multilib build many library versions (default) --enable-install-libiberty Install headers for end users Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-target-subdir=SUBDIR Configuring in a subdirectory for target --with-build-subdir=SUBDIR Configuring in a subdirectory for build --with-cross-host=HOST Configuring with a cross compiler --with-newlib Configuring with newlib Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_preproc LINENO HEADER VAR # ---------------------------------------------- # Tests whether HEADER is present, setting the cache variable VAR accordingly. ac_fn_c_check_header_preproc () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f conftest.err conftest.i conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_preproc # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else if test x$gcc_no_link = xyes; then as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. Under hpux, including includes and causes problems checking for functions defined therein. */ #if defined (__STDC__) && !defined (_HPUX_SOURCE) # include #else # include #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$2) || defined (__stub___$2) choke me #else char (*f) () = $2; #endif #ifdef __cplusplus } #endif int main () { return f != $2; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES # --------------------------------------------- # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. ac_fn_c_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_decl cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi as_fn_append ac_header_list " stdlib.h" as_fn_append ac_header_list " unistd.h" as_fn_append ac_header_list " sys/param.h" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # This works around the fact that libtool configuration may change LD # for this particular configuration, but some shells, instead of # keeping the changes in LD private, export them just because LD is # exported. We don't use libtool yet, but some day we might, so... ORIGINAL_LD_FOR_MULTILIBS=$LD # Check whether --with-target-subdir was given. if test "${with_target_subdir+set}" = set; then : withval=$with_target_subdir; fi # Check whether --with-build-subdir was given. if test "${with_build_subdir+set}" = set; then : withval=$with_build_subdir; fi # Check whether --with-cross-host was given. if test "${with_cross_host+set}" = set; then : withval=$with_cross_host; fi # Check whether --with-newlib was given. if test "${with_newlib+set}" = set; then : withval=$with_newlib; fi if test "${srcdir}" = "."; then if test -n "${with_build_subdir}"; then libiberty_topdir="${srcdir}/../.." with_target_subdir= elif test -z "${with_target_subdir}"; then libiberty_topdir="${srcdir}/.." else if test "${with_target_subdir}" != "."; then libiberty_topdir="${srcdir}/${with_multisrctop}../.." else libiberty_topdir="${srcdir}/${with_multisrctop}.." fi fi else libiberty_topdir="${srcdir}/.." fi ac_aux_dir= for ac_dir in ../config-aux "$srcdir"/../config-aux; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in ../config-aux \"$srcdir\"/../config-aux" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; maintainer_mode=$enableval else maintainer_mode=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $maintainer_mode" >&5 $as_echo "$maintainer_mode" >&6; } if test "$maintainer_mode" = "yes"; then MAINT='' NOTMAINT='#' else MAINT='#' NOTMAINT='' fi # Do we have a single-tree copy of texinfo? Even if we do, we can't # rely on it - libiberty is built before texinfo. # Extract the first word of "makeinfo", so it can be a program name with args. set dummy makeinfo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MAKEINFO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MAKEINFO"; then ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_MAKEINFO="makeinfo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MAKEINFO=$ac_cv_prog_MAKEINFO if test -n "$MAKEINFO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5 $as_echo "$MAKEINFO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$MAKEINFO" = "x"; then MAKEINFO="@echo makeinfo missing; true" BUILD_INFO= else BUILD_INFO=info case "$MAKEINFO" in */missing\ makeinfo*) BUILD_INFO= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Makeinfo is missing. Info documentation will not be built." >&5 $as_echo "$as_me: WARNING: *** Makeinfo is missing. Info documentation will not be built." >&2;} ;; *) case x"`$MAKEINFO --version | grep 'GNU texinfo'`" in x*\ [1-3].* ) MAKEINFO="@echo $MAKEINFO is too old, 4.0 or newer required; true" BUILD_INFO= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Makeinfo is too old. Info documentation will not be built." >&5 $as_echo "$as_me: WARNING: *** Makeinfo is too old. Info documentation will not be built." >&2;} ;; esac ;; esac fi # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PERL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PERL"; then ac_cv_prog_PERL="$PERL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_PERL="perl" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PERL=$ac_cv_prog_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$PERL" = x""; then HAVE_PERL='#' else HAVE_PERL='' fi # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi # Add --enable-multilib to configure. # Default to --enable-multilib # Check whether --enable-multilib was given. if test "${enable_multilib+set}" = set; then : enableval=$enable_multilib; case "$enableval" in yes) multilib=yes ;; no) multilib=no ;; *) as_fn_error $? "bad value $enableval for multilib option" "$LINENO" 5 ;; esac else multilib=yes fi # Even if the default multilib is not a cross compilation, # it may be that some of the other multilibs are. if test $cross_compiling = no && test $multilib = yes \ && test "x${with_multisubdir}" != x ; then cross_compiling=maybe fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # FIXME: Cleanup? if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : gcc_no_link=no else gcc_no_link=yes fi if test x$gcc_no_link = xyes; then # Setting cross_compile will disable run tests; it will # also disable AC_CHECK_FILE but that's generally # correct if we can't link. cross_compiling=yes EXEEXT= else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_c_preproc_warn_flag=yes ac_libiberty_warn_cflags= save_CFLAGS="$CFLAGS" for option in -W -Wall -Wwrite-strings -Wc++-compat \ -Wstrict-prototypes; do as_acx_Woption=`$as_echo "acx_cv_prog_cc_warning_$option" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $option" >&5 $as_echo_n "checking whether $CC supports $option... " >&6; } if eval \${$as_acx_Woption+:} false; then : $as_echo_n "(cached) " >&6 else CFLAGS="$option" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_acx_Woption=yes" else eval "$as_acx_Woption=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_acx_Woption { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if test `eval 'as_val=${'$as_acx_Woption'};$as_echo "$as_val"'` = yes; then : ac_libiberty_warn_cflags="$ac_libiberty_warn_cflags${ac_libiberty_warn_cflags:+ }$option" fi done CFLAGS="$save_CFLAGS" if test "$GCC" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -pedantic " >&5 $as_echo_n "checking whether $CC supports -pedantic ... " >&6; } if ${acx_cv_prog_cc_pedantic_+:} false; then : $as_echo_n "(cached) " >&6 else save_CFLAGS="$CFLAGS" CFLAGS="-pedantic " cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : acx_cv_prog_cc_pedantic_=yes else acx_cv_prog_cc_pedantic_=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_prog_cc_pedantic_" >&5 $as_echo "$acx_cv_prog_cc_pedantic_" >&6; } if test $acx_cv_prog_cc_pedantic_ = yes; then : ac_libiberty_warn_cflags="$ac_libiberty_warn_cflags${ac_libiberty_warn_cflags:+ }-pedantic " fi fi if test "x$CC" != xcc; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 $as_echo_n "checking whether cc understands -c and -o together... " >&6; } fi set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&5' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # cc works too. : else # cc exists but doesn't like -o. eval ac_cv_prog_cc_${ac_cc}_c_o=no fi fi fi else eval ac_cv_prog_cc_${ac_cc}_c_o=no fi rm -f core conftest* fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h fi # autoconf is lame and doesn't give us any substitution variable for this. if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then NO_MINUS_C_MINUS_O=yes else OUTPUT_OPTION='-o $@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset cs; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_preproc "$LINENO" "$ac_header" "$as_ac_Header" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac ac_config_headers="$ac_config_headers config.h:config.in" # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' # Don't build the shared library for build. if [ -n "${with_build_subdir}" ]; then enable_shared=no fi frag= case "${host}" in rs6000-ibm-aix3.1 | rs6000-ibm-aix) frag=mh-aix ;; *-*-cxux7*) frag=mh-cxux7 ;; *-*-freebsd2.1.*) frag=mh-fbsd21 ;; *-*-freebsd2.2.[012]) frag=mh-fbsd21 ;; i370-*-opened*) frag=mh-openedition ;; i[34567]86-*-windows*) frag=mh-windows ;; esac if [ -n "${frag}" ]; then frags=${libiberty_topdir}/libiberty/config/$frag else frags= fi # If they didn't specify --enable-shared, don't generate shared libs. case "${enable_shared}" in yes) shared=yes ;; no) shared=no ;; "") shared=no ;; *) shared=yes ;; esac if [ "${shared}" = "yes" ]; then frag= case "${host}" in *-*-cygwin*) ;; alpha*-*-linux*) frag=mh-elfalphapic ;; arm*-*-*) frag=mh-armpic ;; hppa*-*-*) frag=mh-papic ;; i[34567]86-*-* | x86_64-*-*) frag=mh-x86pic ;; powerpc*-*-aix*) ;; powerpc*-*-*) frag=mh-ppcpic ;; sparc*-*-*) frag=mh-sparcpic ;; s390*-*-*) frag=mh-s390pic ;; *) frag=mh-${host_cpu}pic ;; esac if [ -n "${frag}" ]; then frags="${frags} ${libiberty_topdir}/config/${frag}" fi fi echo "# Warning: this fragment is automatically generated" > temp-frag for frag in ${frags}; do if [ -f ${frag} ]; then echo "Appending ${frag} to xhost-mkfrag" echo "# Following fragment copied from ${frag}" >> temp-frag cat ${frag} >> temp-frag fi done # record if we want to build shared libs. if [ "${shared}" = "yes" ]; then echo enable_shared = yes >> temp-frag else echo enable_shared = no >> temp-frag fi frag=xhost-mkfrag ${CONFIG_SHELL-/bin/sh} ${libiberty_topdir}/move-if-change temp-frag xhost-mkfrag host_makefile_frag=${frag} # It's OK to check for header files. Although the compiler may not be # able to link anything, it had better be able to at least compile # something. for ac_header in sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h stdio_ext.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_preproc "$LINENO" "$ac_header" "$as_ac_Header" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if ${ac_cv_header_sys_wait_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_sys_wait_h=yes else ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 $as_echo "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if ${ac_cv_header_time+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether errno must be declared" >&5 $as_echo_n "checking whether errno must be declared... " >&6; } if ${libiberty_cv_declare_errno+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int x = errno; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : libiberty_cv_declare_errno=no else libiberty_cv_declare_errno=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libiberty_cv_declare_errno" >&5 $as_echo "$libiberty_cv_declare_errno" >&6; } if test $libiberty_cv_declare_errno = yes then $as_echo "#define NEED_DECLARATION_ERRNO 1" >>confdefs.h fi # Determine the size of an int for struct fibnode. # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 $as_echo_n "checking size of int... " >&6; } if ${ac_cv_sizeof_int+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : else if test "$ac_cv_type_int" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_int=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 $as_echo "$ac_cv_sizeof_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default" if test "x$ac_cv_type_uintptr_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define uintptr_t unsigned long _ACEOF fi # Look for a 64-bit type. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a 64-bit type" >&5 $as_echo_n "checking for a 64-bit type... " >&6; } if ${liberty_cv_uint64+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_STDINT_H #include #endif int main () { extern uint64_t foo; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : liberty_cv_uint64=uint64_t else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_LIMITS_H #include #endif #ifndef CHAR_BIT #define CHAR_BIT 8 #endif int main () { extern char foo[sizeof(long) * CHAR_BIT >= 64 ? 1 : -1]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : liberty_cv_uint64="unsigned long" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_LIMITS_H #include #endif #ifndef CHAR_BIT #define CHAR_BIT 8 #endif int main () { extern char foo[sizeof(long long) * CHAR_BIT >= 64 ? 1 : -1]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : liberty_cv_uint64="unsigned long long" else liberty_cv_uint64=none fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $liberty_cv_uint64" >&5 $as_echo "$liberty_cv_uint64" >&6; } if test "$liberty_cv_uint64" != none; then cat >>confdefs.h <<_ACEOF #define UNSIGNED_64BIT_TYPE $liberty_cv_uint64 _ACEOF fi # Given the above check, we always have uintptr_t or a fallback # definition. So define HAVE_UINTPTR_T in case any imported code # relies on it. $as_echo "#define HAVE_UINTPTR_T 1" >>confdefs.h ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi # This is the list of functions which libiberty will provide if they # are not available on the host. funcs="asprintf" funcs="$funcs atexit" funcs="$funcs basename" funcs="$funcs bcmp" funcs="$funcs bcopy" funcs="$funcs bsearch" funcs="$funcs bzero" funcs="$funcs calloc" funcs="$funcs clock" funcs="$funcs ffs" funcs="$funcs getcwd" funcs="$funcs getpagesize" funcs="$funcs gettimeofday" funcs="$funcs index" funcs="$funcs insque" funcs="$funcs memchr" funcs="$funcs memcmp" funcs="$funcs memcpy" funcs="$funcs memmove" funcs="$funcs mempcpy" funcs="$funcs memset" funcs="$funcs mkstemps" funcs="$funcs putenv" funcs="$funcs random" funcs="$funcs rename" funcs="$funcs rindex" funcs="$funcs setenv" funcs="$funcs snprintf" funcs="$funcs sigsetmask" funcs="$funcs stpcpy" funcs="$funcs stpncpy" funcs="$funcs strcasecmp" funcs="$funcs strchr" funcs="$funcs strdup" funcs="$funcs strncasecmp" funcs="$funcs strndup" funcs="$funcs strrchr" funcs="$funcs strstr" funcs="$funcs strtod" funcs="$funcs strtol" funcs="$funcs strtoul" funcs="$funcs strverscmp" funcs="$funcs tmpnam" funcs="$funcs vasprintf" funcs="$funcs vfprintf" funcs="$funcs vprintf" funcs="$funcs vsnprintf" funcs="$funcs vsprintf" funcs="$funcs waitpid" # Also in the old function.def file: alloca, vfork, getopt. vars="sys_errlist sys_nerr sys_siglist" checkfuncs="getrusage on_exit psignal strerror strsignal sysconf times sbrk gettimeofday" checkfuncs="$checkfuncs realpath canonicalize_file_name pstat_getstatic pstat_getdynamic sysmp" checkfuncs="$checkfuncs getsysinfo table sysctl wait3 wait4 __fsetlocking" # These are neither executed nor required, but they help keep # autoheader happy without adding a bunch of text to acconfig.h. if test "x" = "y"; then for ac_func in asprintf atexit basename bcmp bcopy bsearch bzero calloc clock \ getcwd getpagesize gettimeofday index insque mkstemps memchr memcmp memcpy \ memmove mempcpy memset putenv random rename rindex sigsetmask \ strcasecmp setenv stpcpy stpncpy strchr strdup strncasecmp strndup strrchr strstr \ strtod strtol strtoul strverscmp tmpnam vasprintf vfprintf vprintf \ vsprintf waitpid getrusage on_exit psignal strerror strsignal \ sysconf times sbrk gettimeofday ffs snprintf vsnprintf \ pstat_getstatic pstat_getdynamic sysmp getsysinfo table sysctl wait3 wait4 \ realpath canonicalize_file_name __fsetlocking do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_decl "$LINENO" "basename" "ac_cv_have_decl_basename" "$ac_includes_default" if test "x$ac_cv_have_decl_basename" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_BASENAME $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default" if test "x$ac_cv_have_decl_ffs" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FFS $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "asprintf" "ac_cv_have_decl_asprintf" "$ac_includes_default" if test "x$ac_cv_have_decl_asprintf" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_ASPRINTF $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default" if test "x$ac_cv_have_decl_vasprintf" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_VASPRINTF $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default" if test "x$ac_cv_have_decl_snprintf" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_SNPRINTF $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default" if test "x$ac_cv_have_decl_vsnprintf" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_VSNPRINTF $ac_have_decl _ACEOF $as_echo "#define HAVE_SYS_ERRLIST 1" >>confdefs.h $as_echo "#define HAVE_SYS_NERR 1" >>confdefs.h $as_echo "#define HAVE_SYS_SIGLIST 1" >>confdefs.h fi # For each of these functions, if the host does not provide the # function we want to put FN.o in LIBOBJS, and if the host does # provide the function, we want to define HAVE_FN in config.h. setobjs= CHECK= target_header_dir= if test -n "${with_target_subdir}"; then # We are being configured as a target library. AC_REPLACE_FUNCS # may not work correctly, because the compiler may not be able to # link executables. Note that we may still be being configured # native. # If we are being configured for newlib, we know which functions # newlib provide and which ones we will be expected to provide. if test "x${with_newlib}" = "xyes"; then case " $LIBOBJS " in *" asprintf.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS asprintf.$ac_objext" ;; esac case " $LIBOBJS " in *" basename.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS basename.$ac_objext" ;; esac case " $LIBOBJS " in *" insque.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS insque.$ac_objext" ;; esac case " $LIBOBJS " in *" random.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS random.$ac_objext" ;; esac case " $LIBOBJS " in *" strdup.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strdup.$ac_objext" ;; esac case " $LIBOBJS " in *" vasprintf.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS vasprintf.$ac_objext" ;; esac for f in $funcs; do case "$f" in asprintf | basename | insque | random | strdup | vasprintf) ;; *) n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >>confdefs.h <<_ACEOF #define $n 1 _ACEOF ;; esac done # newlib doesnt provide any of the variables in $vars, so we # dont have to check them here. # Of the functions in $checkfuncs, newlib only has strerror. $as_echo "#define HAVE_STRERROR 1" >>confdefs.h setobjs=yes fi # If we are being configured for Mingw, we know which functions # Mingw provides and which ones we will be expected to provide. case "${host}" in *-*-mingw*) case " $LIBOBJS " in *" asprintf.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS asprintf.$ac_objext" ;; esac case " $LIBOBJS " in *" basename.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS basename.$ac_objext" ;; esac case " $LIBOBJS " in *" bcmp.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS bcmp.$ac_objext" ;; esac case " $LIBOBJS " in *" bcopy.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS bcopy.$ac_objext" ;; esac case " $LIBOBJS " in *" bzero.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS bzero.$ac_objext" ;; esac case " $LIBOBJS " in *" clock.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS clock.$ac_objext" ;; esac case " $LIBOBJS " in *" ffs.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS ffs.$ac_objext" ;; esac case " $LIBOBJS " in *" getpagesize.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS getpagesize.$ac_objext" ;; esac case " $LIBOBJS " in *" index.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS index.$ac_objext" ;; esac case " $LIBOBJS " in *" insque.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS insque.$ac_objext" ;; esac case " $LIBOBJS " in *" mempcpy.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS mempcpy.$ac_objext" ;; esac case " $LIBOBJS " in *" mkstemps.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS mkstemps.$ac_objext" ;; esac case " $LIBOBJS " in *" random.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS random.$ac_objext" ;; esac case " $LIBOBJS " in *" rindex.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS rindex.$ac_objext" ;; esac case " $LIBOBJS " in *" sigsetmask.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS sigsetmask.$ac_objext" ;; esac case " $LIBOBJS " in *" stpcpy.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS stpcpy.$ac_objext" ;; esac case " $LIBOBJS " in *" stpncpy.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS stpncpy.$ac_objext" ;; esac case " $LIBOBJS " in *" strndup.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strndup.$ac_objext" ;; esac case " $LIBOBJS " in *" strverscmp.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strverscmp.$ac_objext" ;; esac case " $LIBOBJS " in *" vasprintf.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS vasprintf.$ac_objext" ;; esac case " $LIBOBJS " in *" waitpid.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS waitpid.$ac_objext" ;; esac for f in $funcs; do case "$f" in asprintf | basename | bcmp | bcopy | bzero | clock | ffs | getpagesize | index | insque | mempcpy | mkstemps | random | rindex | sigsetmask | stpcpy | stpncpy | strdup | strndup | strverscmp | vasprintf | waitpid) ;; *) n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >>confdefs.h <<_ACEOF #define $n 1 _ACEOF ;; esac done # Mingw doesnt provide any of the variables in $vars, so we # dont have to check them here. # Of the functions in $checkfuncs, Mingw only has strerror. $as_echo "#define HAVE_STRERROR 1" >>confdefs.h setobjs=yes ;; esac # We may wish to install the target headers somewhere. # Check whether --enable-install-libiberty was given. if test "${enable_install_libiberty+set}" = set; then : enableval=$enable_install_libiberty; enable_install_libiberty=$enableval else enable_install_libiberty=no fi # Option parsed, now set things appropriately. case x"$enable_install_libiberty" in xyes|x) target_header_dir=libiberty ;; xno) target_header_dir= ;; *) # This could be sanity-checked in various ways... target_header_dir="${enable_install_libiberty}" ;; esac else # Not a target library, so we set things up to run the test suite. CHECK=really-check fi case "${host}" in *-*-cygwin* | *-*-mingw*) $as_echo "#define HAVE_SYS_ERRLIST 1" >>confdefs.h $as_echo "#define HAVE_SYS_NERR 1" >>confdefs.h ;; esac if test -z "${setobjs}"; then case "${host}" in *-*-vxworks*) # Handle VxWorks configuration specially, since on VxWorks the # libraries are actually on the target board, not in the file # system. case " $LIBOBJS " in *" basename.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS basename.$ac_objext" ;; esac case " $LIBOBJS " in *" getpagesize.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS getpagesize.$ac_objext" ;; esac case " $LIBOBJS " in *" insque.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS insque.$ac_objext" ;; esac case " $LIBOBJS " in *" random.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS random.$ac_objext" ;; esac case " $LIBOBJS " in *" strcasecmp.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strcasecmp.$ac_objext" ;; esac case " $LIBOBJS " in *" strncasecmp.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strncasecmp.$ac_objext" ;; esac case " $LIBOBJS " in *" strdup.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strdup.$ac_objext" ;; esac case " $LIBOBJS " in *" vfork.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS vfork.$ac_objext" ;; esac case " $LIBOBJS " in *" waitpid.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS waitpid.$ac_objext" ;; esac case " $LIBOBJS " in *" vasprintf.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS vasprintf.$ac_objext" ;; esac for f in $funcs; do case "$f" in basename | getpagesize | insque | random | strcasecmp) ;; strncasecmp | strdup | vfork | waitpid | vasprintf) ;; *) n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >>confdefs.h <<_ACEOF #define $n 1 _ACEOF ;; esac done # VxWorks doesn't provide any of the variables in $vars, so we # don't have to check them here. # Of the functions in $checkfuncs, VxWorks only has strerror. $as_echo "#define HAVE_STRERROR 1" >>confdefs.h setobjs=yes ;; *-*-msdosdjgpp) for f in atexit basename bcmp bcopy bsearch bzero calloc clock ffs \ getcwd getpagesize getrusage gettimeofday \ index insque memchr memcmp memcpy memmove memset psignal \ putenv random rename rindex sbrk setenv stpcpy strcasecmp \ strchr strdup strerror strncasecmp strrchr strstr strtod \ strtol strtoul sysconf times tmpnam vfprintf vprintf \ vsprintf waitpid do n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >>confdefs.h <<_ACEOF #define $n 1 _ACEOF done setobjs=yes ;; esac fi if test -z "${setobjs}"; then case "${host}" in *-*-cygwin*) # The Cygwin library actually uses a couple of files from # libiberty when it is built. If we are building a native # Cygwin, and we run the tests, we will appear to have these # files. However, when we go on to build winsup, we will wind up # with a library which does not have the files, since they should # have come from libiberty. # We handle this by removing the functions the winsup library # provides from our shell variables, so that they appear to be # missing. # DJ - only if we're *building* cygwin, not just building *with* cygwin if test -n "${with_target_subdir}" then funcs="`echo $funcs | sed -e 's/random//'`" case " $LIBOBJS " in *" random.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS random.$ac_objext" ;; esac vars="`echo $vars | sed -e 's/sys_siglist//'`" checkfuncs="`echo $checkfuncs | sed -e 's/strsignal//' -e 's/psignal//'`" fi ;; *-*-mingw32*) # Under mingw32, sys_nerr and sys_errlist exist, but they are # macros, so the test below won't find them. libiberty_cv_var_sys_nerr=yes libiberty_cv_var_sys_errlist=yes ;; *-*-msdosdjgpp*) # vfork and fork are stubs. ac_cv_func_vfork_works=no ;; *-*-uwin*) # Under some versions of uwin, vfork is notoriously buggy and the test # can hang configure; on other versions, vfork exists just as a stub. # FIXME: This should be removed once vfork in uwin's runtime is fixed. ac_cv_func_vfork_works=no # Under uwin 2.0+, sys_nerr and sys_errlist exist, but they are # macros (actually, these are imported from a DLL, but the end effect # is the same), so the test below won't find them. libiberty_cv_var_sys_nerr=yes libiberty_cv_var_sys_errlist=yes ;; *-*-*vms*) # Under VMS, vfork works very different than on Unix. The standard test # won't work, and it isn't easily adaptable. It makes more sense to # just force it. ac_cv_func_vfork_works=yes ;; esac # We haven't set the list of objects yet. Use the standard autoconf # tests. This will only work if the compiler works. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if ${ac_cv_search_strerror+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if test x$gcc_no_link = xyes; then as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_strerror+:} false; then : break fi done if ${ac_cv_search_strerror+:} false; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi for ac_func in $funcs do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF else case " $LIBOBJS " in *" $ac_func.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;; esac fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether alloca needs Cray hooks" >&5 $as_echo_n "checking whether alloca needs Cray hooks... " >&6; } if ${ac_cv_os_cray+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(CRAY) && ! defined(CRAY2) webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then : ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 $as_echo "$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 $as_echo_n "checking stack direction for C alloca... " >&6; } if ${ac_cv_c_stack_direction+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_c_stack_direction=0 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ find_stack_direction () { static char *addr = 0; auto char dummy; if (addr == 0) { addr = &dummy; return find_stack_direction (); } else return (&dummy > addr) ? 1 : -1; } main () { exit (find_stack_direction() < 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_stack_direction=1 else ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 $as_echo "$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF for ac_header in vfork.h do : ac_fn_c_check_header_preproc "$LINENO" "vfork.h" "ac_cv_header_vfork_h" if test "x$ac_cv_header_vfork_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VFORK_H 1 _ACEOF fi done for ac_func in fork vfork do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_fork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 $as_echo_n "checking for working fork... " >&6; } if ${ac_cv_func_fork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_fork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* By Ruediger Kuhlmann. */ return fork () < 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_fork_works=yes else ac_cv_func_fork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 $as_echo "$ac_cv_func_fork_works" >&6; } else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 $as_echo_n "checking for working vfork... " >&6; } if ${ac_cv_func_vfork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_vfork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default #include #ifdef HAVE_VFORK_H # include #endif /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void #ifdef __cplusplus sparc_address_test (int arg) # else sparc_address_test (arg) int arg; #endif { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main () { pid_t parent = getpid (); pid_t child; sparc_address_test (0); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; return ( /* Was there some problem with vforking? */ child < 0 /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_vfork_works=yes else ac_cv_func_vfork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 $as_echo "$ac_cv_func_vfork_works" >&6; } fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then $as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h else $as_echo "#define vfork fork" >>confdefs.h fi if test "x$ac_cv_func_fork_works" = xyes; then $as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h fi if test $ac_cv_func_vfork_works = no; then case " $LIBOBJS " in *" vfork.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS vfork.$ac_objext" ;; esac fi # We only need _doprnt if we might use it to implement v*printf. if test $ac_cv_func_vprintf != yes \ || test $ac_cv_func_vfprintf != yes \ || test $ac_cv_func_vsprintf != yes; then ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" if test "x$ac_cv_func__doprnt" = xyes; then : $as_echo "#define HAVE__DOPRNT 1" >>confdefs.h else case " $LIBOBJS " in *" _doprnt.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS _doprnt.$ac_objext" ;; esac fi else for ac_func in _doprnt do : ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" if test "x$ac_cv_func__doprnt" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE__DOPRNT 1 _ACEOF fi done fi for v in $vars; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $v" >&5 $as_echo_n "checking for $v... " >&6; } if eval \${libiberty_cv_var_$v+:} false; then : $as_echo_n "(cached) " >&6 else if test x$gcc_no_link = xyes; then as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int *p; int main () { extern int $v []; p = $v; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "libiberty_cv_var_$v=yes" else eval "libiberty_cv_var_$v=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if eval "test \"`echo '$libiberty_cv_var_'$v`\" = yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } n=HAVE_`echo $v | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >>confdefs.h <<_ACEOF #define $n 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi done # special check for _system_configuration because AIX <4.3.2 do not # contain the `physmem' member. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for external symbol _system_configuration" >&5 $as_echo_n "checking for external symbol _system_configuration... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { double x = _system_configuration.physmem; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE__SYSTEM_CONFIGURATION 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext for ac_func in $checkfuncs do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_decl "$LINENO" "basename" "ac_cv_have_decl_basename" "$ac_includes_default" if test "x$ac_cv_have_decl_basename" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_BASENAME $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default" if test "x$ac_cv_have_decl_ffs" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FFS $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "asprintf" "ac_cv_have_decl_asprintf" "$ac_includes_default" if test "x$ac_cv_have_decl_asprintf" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_ASPRINTF $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default" if test "x$ac_cv_have_decl_vasprintf" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_VASPRINTF $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default" if test "x$ac_cv_have_decl_snprintf" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_SNPRINTF $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default" if test "x$ac_cv_have_decl_vsnprintf" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_VSNPRINTF $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "calloc" "ac_cv_have_decl_calloc" "$ac_includes_default" if test "x$ac_cv_have_decl_calloc" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_CALLOC $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "getenv" "ac_cv_have_decl_getenv" "$ac_includes_default" if test "x$ac_cv_have_decl_getenv" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETENV $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "getopt" "ac_cv_have_decl_getopt" "$ac_includes_default" if test "x$ac_cv_have_decl_getopt" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETOPT $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "malloc" "ac_cv_have_decl_malloc" "$ac_includes_default" if test "x$ac_cv_have_decl_malloc" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_MALLOC $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "realloc" "ac_cv_have_decl_realloc" "$ac_includes_default" if test "x$ac_cv_have_decl_realloc" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_REALLOC $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "sbrk" "ac_cv_have_decl_sbrk" "$ac_includes_default" if test "x$ac_cv_have_decl_sbrk" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_SBRK $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "strverscmp" "ac_cv_have_decl_strverscmp" "$ac_includes_default" if test "x$ac_cv_have_decl_strverscmp" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRVERSCMP $ac_have_decl _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether canonicalize_file_name must be declared" >&5 $as_echo_n "checking whether canonicalize_file_name must be declared... " >&6; } if ${libiberty_cv_decl_needed_canonicalize_file_name+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include "confdefs.h" #include #ifdef HAVE_STRING_H #include #else #ifdef HAVE_STRINGS_H #include #endif #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_UNISTD_H #include #endif int main () { char *(*pfn) = (char *(*)) canonicalize_file_name ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : libiberty_cv_decl_needed_canonicalize_file_name=no else libiberty_cv_decl_needed_canonicalize_file_name=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libiberty_cv_decl_needed_canonicalize_file_name" >&5 $as_echo "$libiberty_cv_decl_needed_canonicalize_file_name" >&6; } if test $libiberty_cv_decl_needed_canonicalize_file_name = yes; then $as_echo "#define NEED_DECLARATION_CANONICALIZE_FILE_NAME 1" >>confdefs.h fi fi # Figure out which version of pexecute to use. case "${host}" in *-*-mingw* | *-*-winnt*) pexecute=./pex-win32.o ;; *-*-msdosdjgpp*) pexecute=./pex-djgpp.o ;; *-*-msdos*) pexecute=./pex-msdos.o ;; *) pexecute=./pex-unix.o ;; esac for ac_header in $ac_header_list do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_preproc "$LINENO" "$ac_header" "$as_ac_Header" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test x$gcc_no_link = xyes; then if test "x${ac_cv_func_mmap_fixed_mapped+set}" != xset; then ac_cv_func_mmap_fixed_mapped=no fi fi if test "x${ac_cv_func_mmap_fixed_mapped}" != xno; then for ac_func in getpagesize do : ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" if test "x$ac_cv_func_getpagesize" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPAGESIZE 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 $as_echo_n "checking for working mmap... " >&6; } if ${ac_cv_func_mmap_fixed_mapped+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_mmap_fixed_mapped=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ #undef malloc /* Thanks to Mike Haertel and Jim Avera for this test. Here is a matrix of mmap possibilities: mmap private not fixed mmap private fixed at somewhere currently unmapped mmap private fixed at somewhere already mapped mmap shared not fixed mmap shared fixed at somewhere currently unmapped mmap shared fixed at somewhere already mapped For private mappings, we should verify that changes cannot be read() back from the file, nor mmap's back from the file at a different address. (There have been systems where private was not correctly implemented like the infamous i386 svr4.0, and systems where the VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get propagated back to all the places they're supposed to be. Grep wants private fixed already mapped. The main things grep needs to know about mmap are: * does it exist and is it safe to write into the mmap'd area * how to use it (BSD variants) */ #include #include #if !defined STDC_HEADERS && !defined HAVE_STDLIB_H char *malloc (); #endif /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ int main () { char *data, *data2, *data3; const char *cdata2; int i, pagesize; int fd, fd2; pagesize = getpagesize (); /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) return 1; for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) return 2; if (write (fd, data, pagesize) != pagesize) return 3; close (fd); /* Next, check that the tail of a page is zero-filled. File must have non-zero length, otherwise we risk SIGBUS for entire page. */ fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); if (fd2 < 0) return 4; cdata2 = ""; if (write (fd2, cdata2, 1) != 1) return 5; data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); if (data2 == MAP_FAILED) return 6; for (i = 0; i < pagesize; ++i) if (*(data2 + i)) return 7; close (fd2); if (munmap (data2, pagesize)) return 8; /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) return 9; if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) return 10; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) return 11; /* Finally, make sure that changes to the mapped area do not percolate back to the file as seen by read(). (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) return 12; if (read (fd, data3, pagesize) != pagesize) return 13; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) return 14; close (fd); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_mmap_fixed_mapped=yes else ac_cv_func_mmap_fixed_mapped=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 $as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } if test $ac_cv_func_mmap_fixed_mapped = yes; then $as_echo "#define HAVE_MMAP 1" >>confdefs.h fi rm -f conftest.mmap conftest.txt fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strncmp" >&5 $as_echo_n "checking for working strncmp... " >&6; } if ${ac_cv_func_strncmp_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_strncmp_works=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Test by Jim Wilson and Kaveh Ghazi. Check whether strncmp reads past the end of its string parameters. */ #include #ifdef HAVE_FCNTL_H #include #endif #ifdef HAVE_SYS_MMAN_H #include #endif #ifndef MAP_ANON #ifdef MAP_ANONYMOUS #define MAP_ANON MAP_ANONYMOUS #else #define MAP_ANON MAP_FILE #endif #endif #ifndef MAP_FILE #define MAP_FILE 0 #endif #ifndef O_RDONLY #define O_RDONLY 0 #endif #define MAP_LEN 0x10000 main () { #if defined(HAVE_MMAP) || defined(HAVE_MMAP_ANYWHERE) char *p; int dev_zero; dev_zero = open ("/dev/zero", O_RDONLY); if (dev_zero < 0) exit (1); p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, dev_zero, 0); if (p == (char *)-1) p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0); if (p == (char *)-1) exit (2); else { char *string = "__si_type_info"; char *q = (char *) p + MAP_LEN - strlen (string) - 2; char *r = (char *) p + 0xe; strcpy (q, string); strcpy (r, string); strncmp (r, q, 14); } #endif /* HAVE_MMAP || HAVE_MMAP_ANYWHERE */ exit (0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_strncmp_works=yes else ac_cv_func_strncmp_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core core.* *.core fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strncmp_works" >&5 $as_echo "$ac_cv_func_strncmp_works" >&6; } if test $ac_cv_func_strncmp_works = no ; then case " $LIBOBJS " in *" strncmp.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strncmp.$ac_objext" ;; esac fi # Install a library built with a cross compiler in $(tooldir) rather # than $(libdir). if test -z "${with_cross_host}"; then INSTALL_DEST=libdir else INSTALL_DEST=tooldir fi L="" for l in x $LIBOBJS; do case $l in x) ;; *) L="$L ./$l" ;; esac done LIBOBJS="$L" # We need multilib support, but only if configuring for the target. ac_config_files="$ac_config_files Makefile" ac_config_commands="$ac_config_commands default" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # srcdir=${srcdir} host=${host} target=${target} with_target_subdir=${with_target_subdir} with_multisubdir=${with_multisubdir} ac_configure_args="--enable-multilib ${ac_configure_args}" CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}" libiberty_topdir=${libiberty_topdir} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then if $AWK 'BEGIN { getline <"/dev/null" }' /dev/null; then ac_cs_awk_getline=: ac_cs_awk_pipe_init= ac_cs_awk_read_file=' while ((getline aline < (F[key])) > 0) print(aline) close(F[key])' ac_cs_awk_pipe_fini= else ac_cs_awk_getline=false ac_cs_awk_pipe_init="print \"cat <<'|#_!!_#|' &&\"" ac_cs_awk_read_file=' print "|#_!!_#|" print "cat " F[key] " &&" '$ac_cs_awk_pipe_init # The final `:' finishes the AND list. ac_cs_awk_pipe_fini='END { print "|#_!!_#|"; print ":" }' fi ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF # Create commands to substitute file output variables. { echo "cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1" && echo 'cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&' && echo "$ac_subst_files" | sed 's/.*/F["&"]="$&"/' && echo "_ACAWK" && echo "_ACEOF" } >conf$$files.sh && . ./conf$$files.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 rm -f conf$$files.sh { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" \$ac_cs_awk_pipe_init } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } if (nfields == 3 && !substed) { key = field[2] if (F[key] != "" && line ~ /^[ ]*@.*@[ ]*$/) { \$ac_cs_awk_read_file next } } print line } \$ac_cs_awk_pipe_fini _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | if $ac_cs_awk_getline; then $AWK -f "$ac_tmp/subs.awk" else $AWK -f "$ac_tmp/subs.awk" | $SHELL fi \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "default":C) test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h if test -n "$CONFIG_FILES"; then if test -n "${with_target_subdir}"; then # FIXME: We shouldn't need to set ac_file ac_file=Makefile LD="${ORIGINAL_LD_FOR_MULTILIBS}" . ${libiberty_topdir}/config-ml.in fi fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi nescc-1.3.4/libiberty/configure.ac000066400000000000000000000517031177770303300171030ustar00rootroot00000000000000dnl Process this file with autoconf to produce a configure script AC_PREREQ(2.59) AC_INIT AC_CONFIG_SRCDIR([xmalloc.c]) # This works around the fact that libtool configuration may change LD # for this particular configuration, but some shells, instead of # keeping the changes in LD private, export them just because LD is # exported. We don't use libtool yet, but some day we might, so... ORIGINAL_LD_FOR_MULTILIBS=$LD dnl We use these options to decide which functions to include. AC_ARG_WITH(target-subdir, [ --with-target-subdir=SUBDIR Configuring in a subdirectory for target]) AC_ARG_WITH(build-subdir, [ --with-build-subdir=SUBDIR Configuring in a subdirectory for build]) AC_ARG_WITH(cross-host, [ --with-cross-host=HOST Configuring with a cross compiler]) AC_ARG_WITH(newlib, [ --with-newlib Configuring with newlib]) if test "${srcdir}" = "."; then if test -n "${with_build_subdir}"; then libiberty_topdir="${srcdir}/../.." with_target_subdir= elif test -z "${with_target_subdir}"; then libiberty_topdir="${srcdir}/.." else if test "${with_target_subdir}" != "."; then libiberty_topdir="${srcdir}/${with_multisrctop}../.." else libiberty_topdir="${srcdir}/${with_multisrctop}.." fi fi else libiberty_topdir="${srcdir}/.." fi AC_SUBST(libiberty_topdir) AC_CONFIG_AUX_DIR(../config-aux) AC_CONFIG_MACRO_DIR(../config-aux) dnl Very limited version of automake's enable-maintainer-mode AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode is disabled by default AC_ARG_ENABLE(maintainer-mode, [ --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer], maintainer_mode=$enableval, maintainer_mode=no) AC_MSG_RESULT($maintainer_mode) if test "$maintainer_mode" = "yes"; then MAINT='' NOTMAINT='#' else MAINT='#' NOTMAINT='' fi AC_SUBST(MAINT)dnl AC_SUBST(NOTMAINT)dnl # Do we have a single-tree copy of texinfo? Even if we do, we can't # rely on it - libiberty is built before texinfo. AC_CHECK_PROG(MAKEINFO, makeinfo, makeinfo, ) if test "x$MAKEINFO" = "x"; then MAKEINFO="@echo makeinfo missing; true" BUILD_INFO= else BUILD_INFO=info case "$MAKEINFO" in */missing\ makeinfo*) BUILD_INFO= AC_MSG_WARN([ *** Makeinfo is missing. Info documentation will not be built.]) ;; *) case x"`$MAKEINFO --version | grep 'GNU texinfo'`" in x*\ [[1-3]].* ) MAKEINFO="@echo $MAKEINFO is too old, 4.0 or newer required; true" BUILD_INFO= AC_MSG_WARN([ *** Makeinfo is too old. Info documentation will not be built.]) ;; esac ;; esac fi AC_SUBST(MAKEINFO) AC_SUBST(BUILD_INFO) AC_CHECK_PROG(PERL, perl, perl, ) if test x"$PERL" = x""; then HAVE_PERL='#' else HAVE_PERL='' fi AC_SUBST(HAVE_PERL) AC_CANONICAL_HOST dnl When we start using automake: dnl AM_INIT_AUTOMAKE(libiberty, 1.0) dnl These must be called before AM_PROG_LIBTOOL, because it may want dnl to call AC_CHECK_PROG. AC_CHECK_TOOL(AR, ar) AC_CHECK_TOOL(RANLIB, ranlib, :) dnl When switching to automake, replace the following with AM_ENABLE_MULTILIB. # Add --enable-multilib to configure. # Default to --enable-multilib AC_ARG_ENABLE(multilib, [ --enable-multilib build many library versions (default)], [case "$enableval" in yes) multilib=yes ;; no) multilib=no ;; *) AC_MSG_ERROR([bad value $enableval for multilib option]) ;; esac], [multilib=yes]) # Even if the default multilib is not a cross compilation, # it may be that some of the other multilibs are. if test $cross_compiling = no && test $multilib = yes \ && test "x${with_multisubdir}" != x ; then cross_compiling=maybe fi GCC_NO_EXECUTABLES AC_PROG_CC AC_PROG_CPP_WERROR ACX_PROG_CC_WARNING_OPTS([-W -Wall -Wwrite-strings -Wc++-compat \ -Wstrict-prototypes], [ac_libiberty_warn_cflags]) ACX_PROG_CC_WARNING_ALMOST_PEDANTIC([], [ac_libiberty_warn_cflags]) AC_PROG_CC_C_O # autoconf is lame and doesn't give us any substitution variable for this. if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then NO_MINUS_C_MINUS_O=yes else OUTPUT_OPTION='-o $@' fi AC_SUBST(NO_MINUS_C_MINUS_O) AC_SUBST(OUTPUT_OPTION) AC_C_CONST AC_C_INLINE AC_C_BIGENDIAN dnl When we start using libtool: dnl Default to a non shared library. This may be overridden by the dnl configure option --enable-shared. dnl AM_DISABLE_SHARED dnl When we start using libtool: dnl AM_PROG_LIBTOOL dnl When we start using automake: dnl AM_CONFIG_HEADER(config.h:config.in) AC_CONFIG_HEADER(config.h:config.in) dnl When we start using automake: dnl AM_MAINTAINER_MODE dnl AC_EXEEXT dnl When we start using automake: dnl AM_PROG_INSTALL AC_PROG_INSTALL # Don't build the shared library for build. if [[ -n "${with_build_subdir}" ]]; then enable_shared=no fi frag= case "${host}" in rs6000-ibm-aix3.1 | rs6000-ibm-aix) frag=mh-aix ;; *-*-cxux7*) frag=mh-cxux7 ;; *-*-freebsd2.1.*) frag=mh-fbsd21 ;; *-*-freebsd2.2.[[012]]) frag=mh-fbsd21 ;; i370-*-opened*) frag=mh-openedition ;; i[[34567]]86-*-windows*) frag=mh-windows ;; esac if [[ -n "${frag}" ]]; then frags=${libiberty_topdir}/libiberty/config/$frag else frags= fi # If they didn't specify --enable-shared, don't generate shared libs. case "${enable_shared}" in yes) shared=yes ;; no) shared=no ;; "") shared=no ;; *) shared=yes ;; esac if [[ "${shared}" = "yes" ]]; then frag= case "${host}" in *-*-cygwin*) ;; alpha*-*-linux*) frag=mh-elfalphapic ;; arm*-*-*) frag=mh-armpic ;; hppa*-*-*) frag=mh-papic ;; i[[34567]]86-*-* | x86_64-*-*) frag=mh-x86pic ;; powerpc*-*-aix*) ;; powerpc*-*-*) frag=mh-ppcpic ;; sparc*-*-*) frag=mh-sparcpic ;; s390*-*-*) frag=mh-s390pic ;; *) frag=mh-${host_cpu}pic ;; esac if [[ -n "${frag}" ]]; then frags="${frags} ${libiberty_topdir}/config/${frag}" fi fi echo "# Warning: this fragment is automatically generated" > temp-frag for frag in ${frags}; do if [[ -f ${frag} ]]; then echo "Appending ${frag} to xhost-mkfrag" echo "# Following fragment copied from ${frag}" >> temp-frag cat ${frag} >> temp-frag fi done # record if we want to build shared libs. if [[ "${shared}" = "yes" ]]; then echo enable_shared = yes >> temp-frag else echo enable_shared = no >> temp-frag fi frag=xhost-mkfrag ${CONFIG_SHELL-/bin/sh} ${libiberty_topdir}/move-if-change temp-frag xhost-mkfrag host_makefile_frag=${frag} AC_SUBST_FILE(host_makefile_frag) # It's OK to check for header files. Although the compiler may not be # able to link anything, it had better be able to at least compile # something. AC_CHECK_HEADERS(sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h stdio_ext.h) AC_HEADER_SYS_WAIT AC_HEADER_TIME libiberty_AC_DECLARE_ERRNO # Determine the size of an int for struct fibnode. AC_CHECK_SIZEOF([int]) AC_CHECK_TYPE(uintptr_t, unsigned long) # Look for a 64-bit type. AC_MSG_CHECKING([for a 64-bit type]) AC_CACHE_VAL(liberty_cv_uint64, [AC_TRY_COMPILE( [#ifdef HAVE_STDINT_H #include #endif], [extern uint64_t foo;], liberty_cv_uint64=uint64_t, [AC_TRY_COMPILE( [#ifdef HAVE_LIMITS_H #include #endif #ifndef CHAR_BIT #define CHAR_BIT 8 #endif], [extern char foo[sizeof(long) * CHAR_BIT >= 64 ? 1 : -1];], liberty_cv_uint64="unsigned long", [AC_TRY_COMPILE( [#ifdef HAVE_LIMITS_H #include #endif #ifndef CHAR_BIT #define CHAR_BIT 8 #endif], [extern char foo[sizeof(long long) * CHAR_BIT >= 64 ? 1 : -1];], liberty_cv_uint64="unsigned long long", liberty_cv_uint64=none)])])]) AC_MSG_RESULT($liberty_cv_uint64) if test "$liberty_cv_uint64" != none; then AC_DEFINE_UNQUOTED(UNSIGNED_64BIT_TYPE, $liberty_cv_uint64, [Define to an unsigned 64-bit type available in the compiler.]) fi # Given the above check, we always have uintptr_t or a fallback # definition. So define HAVE_UINTPTR_T in case any imported code # relies on it. AC_DEFINE(HAVE_UINTPTR_T, 1, [Define if you have the \`uintptr_t' type.]) AC_TYPE_PID_T # This is the list of functions which libiberty will provide if they # are not available on the host. funcs="asprintf" funcs="$funcs atexit" funcs="$funcs basename" funcs="$funcs bcmp" funcs="$funcs bcopy" funcs="$funcs bsearch" funcs="$funcs bzero" funcs="$funcs calloc" funcs="$funcs clock" funcs="$funcs ffs" funcs="$funcs getcwd" funcs="$funcs getpagesize" funcs="$funcs gettimeofday" funcs="$funcs index" funcs="$funcs insque" funcs="$funcs memchr" funcs="$funcs memcmp" funcs="$funcs memcpy" funcs="$funcs memmove" funcs="$funcs mempcpy" funcs="$funcs memset" funcs="$funcs mkstemps" funcs="$funcs putenv" funcs="$funcs random" funcs="$funcs rename" funcs="$funcs rindex" funcs="$funcs setenv" funcs="$funcs snprintf" funcs="$funcs sigsetmask" funcs="$funcs stpcpy" funcs="$funcs stpncpy" funcs="$funcs strcasecmp" funcs="$funcs strchr" funcs="$funcs strdup" funcs="$funcs strncasecmp" funcs="$funcs strndup" funcs="$funcs strrchr" funcs="$funcs strstr" funcs="$funcs strtod" funcs="$funcs strtol" funcs="$funcs strtoul" funcs="$funcs strverscmp" funcs="$funcs tmpnam" funcs="$funcs vasprintf" funcs="$funcs vfprintf" funcs="$funcs vprintf" funcs="$funcs vsnprintf" funcs="$funcs vsprintf" funcs="$funcs waitpid" # Also in the old function.def file: alloca, vfork, getopt. vars="sys_errlist sys_nerr sys_siglist" checkfuncs="getrusage on_exit psignal strerror strsignal sysconf times sbrk gettimeofday" checkfuncs="$checkfuncs realpath canonicalize_file_name pstat_getstatic pstat_getdynamic sysmp" checkfuncs="$checkfuncs getsysinfo table sysctl wait3 wait4 __fsetlocking" # These are neither executed nor required, but they help keep # autoheader happy without adding a bunch of text to acconfig.h. if test "x" = "y"; then AC_CHECK_FUNCS(asprintf atexit basename bcmp bcopy bsearch bzero calloc clock \ getcwd getpagesize gettimeofday index insque mkstemps memchr memcmp memcpy \ memmove mempcpy memset putenv random rename rindex sigsetmask \ strcasecmp setenv stpcpy stpncpy strchr strdup strncasecmp strndup strrchr strstr \ strtod strtol strtoul strverscmp tmpnam vasprintf vfprintf vprintf \ vsprintf waitpid getrusage on_exit psignal strerror strsignal \ sysconf times sbrk gettimeofday ffs snprintf vsnprintf \ pstat_getstatic pstat_getdynamic sysmp getsysinfo table sysctl wait3 wait4 \ realpath canonicalize_file_name __fsetlocking) AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf]) AC_DEFINE(HAVE_SYS_ERRLIST, 1, [Define if you have the sys_errlist variable.]) AC_DEFINE(HAVE_SYS_NERR, 1, [Define if you have the sys_nerr variable.]) AC_DEFINE(HAVE_SYS_SIGLIST, 1, [Define if you have the sys_siglist variable.]) fi # For each of these functions, if the host does not provide the # function we want to put FN.o in LIBOBJS, and if the host does # provide the function, we want to define HAVE_FN in config.h. setobjs= CHECK= target_header_dir= if test -n "${with_target_subdir}"; then # We are being configured as a target library. AC_REPLACE_FUNCS # may not work correctly, because the compiler may not be able to # link executables. Note that we may still be being configured # native. # If we are being configured for newlib, we know which functions # newlib provide and which ones we will be expected to provide. if test "x${with_newlib}" = "xyes"; then AC_LIBOBJ([asprintf]) AC_LIBOBJ([basename]) AC_LIBOBJ([insque]) AC_LIBOBJ([random]) AC_LIBOBJ([strdup]) AC_LIBOBJ([vasprintf]) for f in $funcs; do case "$f" in asprintf | basename | insque | random | strdup | vasprintf) ;; *) n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` AC_DEFINE_UNQUOTED($n) ;; esac done # newlib doesnt provide any of the variables in $vars, so we # dont have to check them here. # Of the functions in $checkfuncs, newlib only has strerror. AC_DEFINE(HAVE_STRERROR) setobjs=yes fi # If we are being configured for Mingw, we know which functions # Mingw provides and which ones we will be expected to provide. case "${host}" in *-*-mingw*) AC_LIBOBJ([asprintf]) AC_LIBOBJ([basename]) AC_LIBOBJ([bcmp]) AC_LIBOBJ([bcopy]) AC_LIBOBJ([bzero]) AC_LIBOBJ([clock]) AC_LIBOBJ([ffs]) AC_LIBOBJ([getpagesize]) AC_LIBOBJ([index]) AC_LIBOBJ([insque]) AC_LIBOBJ([mempcpy]) AC_LIBOBJ([mkstemps]) AC_LIBOBJ([random]) AC_LIBOBJ([rindex]) AC_LIBOBJ([sigsetmask]) AC_LIBOBJ([stpcpy]) AC_LIBOBJ([stpncpy]) AC_LIBOBJ([strndup]) AC_LIBOBJ([strverscmp]) AC_LIBOBJ([vasprintf]) AC_LIBOBJ([waitpid]) for f in $funcs; do case "$f" in asprintf | basename | bcmp | bcopy | bzero | clock | ffs | getpagesize | index | insque | mempcpy | mkstemps | random | rindex | sigsetmask | stpcpy | stpncpy | strdup | strndup | strverscmp | vasprintf | waitpid) ;; *) n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` AC_DEFINE_UNQUOTED($n) ;; esac done # Mingw doesnt provide any of the variables in $vars, so we # dont have to check them here. # Of the functions in $checkfuncs, Mingw only has strerror. AC_DEFINE(HAVE_STRERROR) setobjs=yes ;; esac # We may wish to install the target headers somewhere. AC_ARG_ENABLE(install-libiberty, [ --enable-install-libiberty Install headers for end users], enable_install_libiberty=$enableval, enable_install_libiberty=no)dnl # Option parsed, now set things appropriately. case x"$enable_install_libiberty" in xyes|x) target_header_dir=libiberty ;; xno) target_header_dir= ;; *) # This could be sanity-checked in various ways... target_header_dir="${enable_install_libiberty}" ;; esac else # Not a target library, so we set things up to run the test suite. CHECK=really-check fi AC_SUBST(CHECK) AC_SUBST(target_header_dir) case "${host}" in *-*-cygwin* | *-*-mingw*) AC_DEFINE(HAVE_SYS_ERRLIST) AC_DEFINE(HAVE_SYS_NERR) ;; esac if test -z "${setobjs}"; then case "${host}" in *-*-vxworks*) # Handle VxWorks configuration specially, since on VxWorks the # libraries are actually on the target board, not in the file # system. AC_LIBOBJ([basename]) AC_LIBOBJ([getpagesize]) AC_LIBOBJ([insque]) AC_LIBOBJ([random]) AC_LIBOBJ([strcasecmp]) AC_LIBOBJ([strncasecmp]) AC_LIBOBJ([strdup]) AC_LIBOBJ([vfork]) AC_LIBOBJ([waitpid]) AC_LIBOBJ([vasprintf]) for f in $funcs; do case "$f" in basename | getpagesize | insque | random | strcasecmp) ;; strncasecmp | strdup | vfork | waitpid | vasprintf) ;; *) n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` AC_DEFINE_UNQUOTED($n) ;; esac done # VxWorks doesn't provide any of the variables in $vars, so we # don't have to check them here. # Of the functions in $checkfuncs, VxWorks only has strerror. AC_DEFINE(HAVE_STRERROR) setobjs=yes ;; *-*-msdosdjgpp) for f in atexit basename bcmp bcopy bsearch bzero calloc clock ffs \ getcwd getpagesize getrusage gettimeofday \ index insque memchr memcmp memcpy memmove memset psignal \ putenv random rename rindex sbrk setenv stpcpy strcasecmp \ strchr strdup strerror strncasecmp strrchr strstr strtod \ strtol strtoul sysconf times tmpnam vfprintf vprintf \ vsprintf waitpid do n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` AC_DEFINE_UNQUOTED($n) done setobjs=yes ;; esac fi if test -z "${setobjs}"; then case "${host}" in *-*-cygwin*) # The Cygwin library actually uses a couple of files from # libiberty when it is built. If we are building a native # Cygwin, and we run the tests, we will appear to have these # files. However, when we go on to build winsup, we will wind up # with a library which does not have the files, since they should # have come from libiberty. # We handle this by removing the functions the winsup library # provides from our shell variables, so that they appear to be # missing. # DJ - only if we're *building* cygwin, not just building *with* cygwin if test -n "${with_target_subdir}" then funcs="`echo $funcs | sed -e 's/random//'`" AC_LIBOBJ([random]) vars="`echo $vars | sed -e 's/sys_siglist//'`" checkfuncs="`echo $checkfuncs | sed -e 's/strsignal//' -e 's/psignal//'`" fi ;; *-*-mingw32*) # Under mingw32, sys_nerr and sys_errlist exist, but they are # macros, so the test below won't find them. libiberty_cv_var_sys_nerr=yes libiberty_cv_var_sys_errlist=yes ;; *-*-msdosdjgpp*) # vfork and fork are stubs. ac_cv_func_vfork_works=no ;; *-*-uwin*) # Under some versions of uwin, vfork is notoriously buggy and the test # can hang configure; on other versions, vfork exists just as a stub. # FIXME: This should be removed once vfork in uwin's runtime is fixed. ac_cv_func_vfork_works=no # Under uwin 2.0+, sys_nerr and sys_errlist exist, but they are # macros (actually, these are imported from a DLL, but the end effect # is the same), so the test below won't find them. libiberty_cv_var_sys_nerr=yes libiberty_cv_var_sys_errlist=yes ;; *-*-*vms*) # Under VMS, vfork works very different than on Unix. The standard test # won't work, and it isn't easily adaptable. It makes more sense to # just force it. ac_cv_func_vfork_works=yes ;; esac # We haven't set the list of objects yet. Use the standard autoconf # tests. This will only work if the compiler works. AC_ISC_POSIX AC_REPLACE_FUNCS($funcs) libiberty_AC_FUNC_C_ALLOCA AC_FUNC_FORK if test $ac_cv_func_vfork_works = no; then AC_LIBOBJ([vfork]) fi # We only need _doprnt if we might use it to implement v*printf. if test $ac_cv_func_vprintf != yes \ || test $ac_cv_func_vfprintf != yes \ || test $ac_cv_func_vsprintf != yes; then AC_REPLACE_FUNCS(_doprnt) else AC_CHECK_FUNCS(_doprnt) fi for v in $vars; do AC_MSG_CHECKING([for $v]) AC_CACHE_VAL(libiberty_cv_var_$v, [AC_LINK_IFELSE([AC_LANG_PROGRAM([[int *p;]],[[extern int $v []; p = $v;]])], [eval "libiberty_cv_var_$v=yes"], [eval "libiberty_cv_var_$v=no"])]) if eval "test \"`echo '$libiberty_cv_var_'$v`\" = yes"; then AC_MSG_RESULT(yes) n=HAVE_`echo $v | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` AC_DEFINE_UNQUOTED($n) else AC_MSG_RESULT(no) fi done # special check for _system_configuration because AIX <4.3.2 do not # contain the `physmem' member. AC_MSG_CHECKING([for external symbol _system_configuration]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[double x = _system_configuration.physmem;]])], [AC_MSG_RESULT([yes]) AC_DEFINE(HAVE__SYSTEM_CONFIGURATION, 1, [Define if you have the _system_configuration variable.])], [AC_MSG_RESULT([no])]) AC_CHECK_FUNCS($checkfuncs) AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf]) AC_CHECK_DECLS([calloc, getenv, getopt, malloc, realloc, sbrk]) AC_CHECK_DECLS([strverscmp]) libiberty_NEED_DECLARATION(canonicalize_file_name) fi # Figure out which version of pexecute to use. case "${host}" in *-*-mingw* | *-*-winnt*) pexecute=./pex-win32.o ;; *-*-msdosdjgpp*) pexecute=./pex-djgpp.o ;; *-*-msdos*) pexecute=./pex-msdos.o ;; *) pexecute=./pex-unix.o ;; esac AC_SUBST(pexecute) libiberty_AC_FUNC_STRNCMP # Install a library built with a cross compiler in $(tooldir) rather # than $(libdir). if test -z "${with_cross_host}"; then INSTALL_DEST=libdir else INSTALL_DEST=tooldir fi AC_SUBST(INSTALL_DEST) m4_pattern_allow(LIBOBJS) L="" for l in x $LIBOBJS; do case $l in x) ;; *) L="$L ./$l" ;; esac done LIBOBJS="$L" dnl Required by html and install-html AC_SUBST(datarootdir) AC_SUBST(docdir) AC_SUBST(htmldir) # We need multilib support, but only if configuring for the target. AC_CONFIG_FILES([Makefile]) AC_CONFIG_COMMANDS([default], [[test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h if test -n "$CONFIG_FILES"; then if test -n "${with_target_subdir}"; then # FIXME: We shouldn't need to set ac_file ac_file=Makefile LD="${ORIGINAL_LD_FOR_MULTILIBS}" . ${libiberty_topdir}/config-ml.in fi fi]], [[srcdir=${srcdir} host=${host} target=${target} with_target_subdir=${with_target_subdir} with_multisubdir=${with_multisubdir} ac_configure_args="--enable-multilib ${ac_configure_args}" CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}" libiberty_topdir=${libiberty_topdir} ]]) AC_OUTPUT nescc-1.3.4/libiberty/copying-lib.texi000066400000000000000000000642771177770303300177360ustar00rootroot00000000000000@node Library Copying @appendixsec GNU LESSER GENERAL PUBLIC LICENSE @cindex LGPL, Lesser General Public License @center Version 2.1, February 1999 @display Copyright @copyright{} 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] @end display @appendixsubsec Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software---to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software---typically libraries---of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the @dfn{Lesser} General Public License because it does @emph{Less} to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a ``work based on the library'' and a ``work that uses the library''. The former contains code derived from the library, whereas the latter must be combined with the library in order to run. @iftex @appendixsubsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION @end iftex @ifinfo @center GNU LESSER GENERAL PUBLIC LICENSE @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION @end ifinfo @enumerate 0 @item This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called ``this License''). Each licensee is addressed as ``you''. A ``library'' means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The ``Library'', below, refers to any such software library or work which has been distributed under these terms. A ``work based on the Library'' means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term ``modification''.) ``Source code'' for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. @item You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. @item You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: @enumerate a @item The modified work must itself be a software library. @item You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. @item You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. @item If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) @end enumerate These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. @item You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. @item You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. @item A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a ``work that uses the Library''. Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a ``work that uses the Library'' with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a ``work that uses the library''. The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a ``work that uses the Library'' uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. @item As an exception to the Sections above, you may also combine or link a ``work that uses the Library'' with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: @enumerate a @item Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable ``work that uses the Library'', as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) @item Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. @item Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. @item If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. @item Verify that the user has already received a copy of these materials or that you have already sent this user a copy. @end enumerate For an executable, the required form of the ``work that uses the Library'' must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. @item You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: @enumerate a @item Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. @item Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. @end enumerate @item You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. @item You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. @item Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. @item If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. @item If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. @item The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and ``any later version'', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. @item If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. @iftex @heading NO WARRANTY @end iftex @ifinfo @center NO WARRANTY @end ifinfo @item BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. @item IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @end enumerate @iftex @heading END OF TERMS AND CONDITIONS @end iftex @ifinfo @center END OF TERMS AND CONDITIONS @end ifinfo @page @appendixsubsec How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the ``copyright'' line and a pointer to where the full notice is found. @smallexample @var{one line to give the library's name and an idea of what it does.} Copyright (C) @var{year} @var{name of author} This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. @end smallexample Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a ``copyright disclaimer'' for the library, if necessary. Here is a sample; alter the names: @smallexample Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. @var{signature of Ty Coon}, 1 April 1990 Ty Coon, President of Vice @end smallexample That's all there is to it! nescc-1.3.4/libiberty/copysign.c000066400000000000000000000051511177770303300166100ustar00rootroot00000000000000#include #ifdef __IEEE_BIG_ENDIAN typedef union { double value; struct { unsigned int sign : 1; unsigned int exponent: 11; unsigned int fraction0:4; unsigned int fraction1:16; unsigned int fraction2:16; unsigned int fraction3:16; } number; struct { unsigned int sign : 1; unsigned int exponent: 11; unsigned int quiet:1; unsigned int function0:3; unsigned int function1:16; unsigned int function2:16; unsigned int function3:16; } nan; struct { unsigned long msw; unsigned long lsw; } parts; long aslong[2]; } __ieee_double_shape_type; #endif #ifdef __IEEE_LITTLE_ENDIAN typedef union { double value; struct { #ifdef __SMALL_BITFIELDS unsigned int fraction3:16; unsigned int fraction2:16; unsigned int fraction1:16; unsigned int fraction0: 4; #else unsigned int fraction1:32; unsigned int fraction0:20; #endif unsigned int exponent :11; unsigned int sign : 1; } number; struct { #ifdef __SMALL_BITFIELDS unsigned int function3:16; unsigned int function2:16; unsigned int function1:16; unsigned int function0:3; #else unsigned int function1:32; unsigned int function0:19; #endif unsigned int quiet:1; unsigned int exponent: 11; unsigned int sign : 1; } nan; struct { unsigned long lsw; unsigned long msw; } parts; long aslong[2]; } __ieee_double_shape_type; #endif #ifdef __IEEE_BIG_ENDIAN typedef union { float value; struct { unsigned int sign : 1; unsigned int exponent: 8; unsigned int fraction0: 7; unsigned int fraction1: 16; } number; struct { unsigned int sign:1; unsigned int exponent:8; unsigned int quiet:1; unsigned int function0:6; unsigned int function1:16; } nan; long p1; } __ieee_float_shape_type; #endif #ifdef __IEEE_LITTLE_ENDIAN typedef union { float value; struct { unsigned int fraction0: 7; unsigned int fraction1: 16; unsigned int exponent: 8; unsigned int sign : 1; } number; struct { unsigned int function1:16; unsigned int function0:6; unsigned int quiet:1; unsigned int exponent:8; unsigned int sign:1; } nan; long p1; } __ieee_float_shape_type; #endif #if defined(__IEEE_BIG_ENDIAN) || defined(__IEEE_LITTLE_ENDIAN) double copysign (double x, double y) { __ieee_double_shape_type a,b; b.value = y; a.value = x; a.number.sign =b.number.sign; return a.value; } #else double copysign (double x, double y) { if ((x < 0 && y > 0) || (x > 0 && y < 0)) return -x; return x; } #endif nescc-1.3.4/libiberty/cp-demangle.c000066400000000000000000003477351177770303300171520ustar00rootroot00000000000000/* Demangler for g++ V3 ABI. Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. Written by Ian Lance Taylor . This file is part of the libiberty library, which is part of GCC. This file 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 of the License, or (at your option) any later version. In addition to the permissions in the GNU General Public License, the Free Software Foundation gives you unlimited permission to link the compiled version of this file into combinations with other programs, and to distribute those combinations without any restriction coming from the use of this file. (The General Public License restrictions do apply in other respects; for example, they cover modification of the file, and distribution when not linked into a combined executable.) This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* This code implements a demangler for the g++ V3 ABI. The ABI is described on this web page: http://www.codesourcery.com/cxx-abi/abi.html#mangling This code was written while looking at the demangler written by Alex Samuel . This code first pulls the mangled name apart into a list of components, and then walks the list generating the demangled name. This file will normally define the following functions, q.v.: char *cplus_demangle_v3(const char *mangled, int options) char *java_demangle_v3(const char *mangled) int cplus_demangle_v3_callback(const char *mangled, int options, demangle_callbackref callback) int java_demangle_v3_callback(const char *mangled, demangle_callbackref callback) enum gnu_v3_ctor_kinds is_gnu_v3_mangled_ctor (const char *name) enum gnu_v3_dtor_kinds is_gnu_v3_mangled_dtor (const char *name) Also, the interface to the component list is public, and defined in demangle.h. The interface consists of these types, which are defined in demangle.h: enum demangle_component_type struct demangle_component demangle_callbackref and these functions defined in this file: cplus_demangle_fill_name cplus_demangle_fill_extended_operator cplus_demangle_fill_ctor cplus_demangle_fill_dtor cplus_demangle_print cplus_demangle_print_callback and other functions defined in the file cp-demint.c. This file also defines some other functions and variables which are only to be used by the file cp-demint.c. Preprocessor macros you can define while compiling this file: IN_LIBGCC2 If defined, this file defines the following functions, q.v.: char *__cxa_demangle (const char *mangled, char *buf, size_t *len, int *status) int __gcclibcxx_demangle_callback (const char *, void (*) (const char *, size_t, void *), void *) instead of cplus_demangle_v3[_callback]() and java_demangle_v3[_callback](). IN_GLIBCPP_V3 If defined, this file defines only __cxa_demangle() and __gcclibcxx_demangle_callback(), and no other publically visible functions or variables. STANDALONE_DEMANGLER If defined, this file defines a main() function which demangles any arguments, or, if none, demangles stdin. CP_DEMANGLE_DEBUG If defined, turns on debugging mode, which prints information on stdout about the mangled string. This is not generally useful. */ #if defined (_AIX) && !defined (__GNUC__) #pragma alloca #endif #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_ALLOCA_H # include #else # ifndef alloca # ifdef __GNUC__ # define alloca __builtin_alloca # else extern char *alloca (); # endif /* __GNUC__ */ # endif /* alloca */ #endif /* HAVE_ALLOCA_H */ #include "ansidecl.h" #include "libiberty.h" #include "demangle.h" #include "cp-demangle.h" /* If IN_GLIBCPP_V3 is defined, some functions are made static. We also rename them via #define to avoid compiler errors when the static definition conflicts with the extern declaration in a header file. */ #ifdef IN_GLIBCPP_V3 #define CP_STATIC_IF_GLIBCPP_V3 static #define cplus_demangle_fill_name d_fill_name static int d_fill_name (struct demangle_component *, const char *, int); #define cplus_demangle_fill_extended_operator d_fill_extended_operator static int d_fill_extended_operator (struct demangle_component *, int, struct demangle_component *); #define cplus_demangle_fill_ctor d_fill_ctor static int d_fill_ctor (struct demangle_component *, enum gnu_v3_ctor_kinds, struct demangle_component *); #define cplus_demangle_fill_dtor d_fill_dtor static int d_fill_dtor (struct demangle_component *, enum gnu_v3_dtor_kinds, struct demangle_component *); #define cplus_demangle_mangled_name d_mangled_name static struct demangle_component *d_mangled_name (struct d_info *, int); #define cplus_demangle_type d_type static struct demangle_component *d_type (struct d_info *); #define cplus_demangle_print d_print static char *d_print (int, const struct demangle_component *, int, size_t *); #define cplus_demangle_print_callback d_print_callback static int d_print_callback (int, const struct demangle_component *, demangle_callbackref, void *); #define cplus_demangle_init_info d_init_info static void d_init_info (const char *, int, size_t, struct d_info *); #else /* ! defined(IN_GLIBCPP_V3) */ #define CP_STATIC_IF_GLIBCPP_V3 #endif /* ! defined(IN_GLIBCPP_V3) */ /* See if the compiler supports dynamic arrays. */ #ifdef __GNUC__ #define CP_DYNAMIC_ARRAYS #else #ifdef __STDC__ #ifdef __STDC_VERSION__ #if __STDC_VERSION__ >= 199901L #define CP_DYNAMIC_ARRAYS #endif /* __STDC__VERSION >= 199901L */ #endif /* defined (__STDC_VERSION__) */ #endif /* defined (__STDC__) */ #endif /* ! defined (__GNUC__) */ /* We avoid pulling in the ctype tables, to prevent pulling in additional unresolved symbols when this code is used in a library. FIXME: Is this really a valid reason? This comes from the original V3 demangler code. As of this writing this file has the following undefined references when compiled with -DIN_GLIBCPP_V3: realloc, free, memcpy, strcpy, strcat, strlen. */ #define IS_DIGIT(c) ((c) >= '0' && (c) <= '9') #define IS_UPPER(c) ((c) >= 'A' && (c) <= 'Z') #define IS_LOWER(c) ((c) >= 'a' && (c) <= 'z') /* The prefix prepended by GCC to an identifier represnting the anonymous namespace. */ #define ANONYMOUS_NAMESPACE_PREFIX "_GLOBAL_" #define ANONYMOUS_NAMESPACE_PREFIX_LEN \ (sizeof (ANONYMOUS_NAMESPACE_PREFIX) - 1) /* Information we keep for the standard substitutions. */ struct d_standard_sub_info { /* The code for this substitution. */ char code; /* The simple string it expands to. */ const char *simple_expansion; /* The length of the simple expansion. */ int simple_len; /* The results of a full, verbose, expansion. This is used when qualifying a constructor/destructor, or when in verbose mode. */ const char *full_expansion; /* The length of the full expansion. */ int full_len; /* What to set the last_name field of d_info to; NULL if we should not set it. This is only relevant when qualifying a constructor/destructor. */ const char *set_last_name; /* The length of set_last_name. */ int set_last_name_len; }; /* Accessors for subtrees of struct demangle_component. */ #define d_left(dc) ((dc)->u.s_binary.left) #define d_right(dc) ((dc)->u.s_binary.right) /* A list of templates. This is used while printing. */ struct d_print_template { /* Next template on the list. */ struct d_print_template *next; /* This template. */ const struct demangle_component *template_decl; }; /* A list of type modifiers. This is used while printing. */ struct d_print_mod { /* Next modifier on the list. These are in the reverse of the order in which they appeared in the mangled string. */ struct d_print_mod *next; /* The modifier. */ const struct demangle_component *mod; /* Whether this modifier was printed. */ int printed; /* The list of templates which applies to this modifier. */ struct d_print_template *templates; }; /* We use these structures to hold information during printing. */ struct d_growable_string { /* Buffer holding the result. */ char *buf; /* Current length of data in buffer. */ size_t len; /* Allocated size of buffer. */ size_t alc; /* Set to 1 if we had a memory allocation failure. */ int allocation_failure; }; enum { D_PRINT_BUFFER_LENGTH = 256 }; struct d_print_info { /* The options passed to the demangler. */ int options; /* Fixed-length allocated buffer for demangled data, flushed to the callback with a NUL termination once full. */ char buf[D_PRINT_BUFFER_LENGTH]; /* Current length of data in buffer. */ size_t len; /* The last character printed, saved individually so that it survives any buffer flush. */ char last_char; /* Callback function to handle demangled buffer flush. */ demangle_callbackref callback; /* Opaque callback argument. */ void *opaque; /* The current list of templates, if any. */ struct d_print_template *templates; /* The current list of modifiers (e.g., pointer, reference, etc.), if any. */ struct d_print_mod *modifiers; /* Set to 1 if we saw a demangling error. */ int demangle_failure; }; #ifdef CP_DEMANGLE_DEBUG static void d_dump (struct demangle_component *, int); #endif static struct demangle_component * d_make_empty (struct d_info *); static struct demangle_component * d_make_comp (struct d_info *, enum demangle_component_type, struct demangle_component *, struct demangle_component *); static struct demangle_component * d_make_name (struct d_info *, const char *, int); static struct demangle_component * d_make_builtin_type (struct d_info *, const struct demangle_builtin_type_info *); static struct demangle_component * d_make_operator (struct d_info *, const struct demangle_operator_info *); static struct demangle_component * d_make_extended_operator (struct d_info *, int, struct demangle_component *); static struct demangle_component * d_make_ctor (struct d_info *, enum gnu_v3_ctor_kinds, struct demangle_component *); static struct demangle_component * d_make_dtor (struct d_info *, enum gnu_v3_dtor_kinds, struct demangle_component *); static struct demangle_component * d_make_template_param (struct d_info *, long); static struct demangle_component * d_make_sub (struct d_info *, const char *, int); static int has_return_type (struct demangle_component *); static int is_ctor_dtor_or_conversion (struct demangle_component *); static struct demangle_component *d_encoding (struct d_info *, int); static struct demangle_component *d_name (struct d_info *); static struct demangle_component *d_nested_name (struct d_info *); static struct demangle_component *d_prefix (struct d_info *); static struct demangle_component *d_unqualified_name (struct d_info *); static struct demangle_component *d_source_name (struct d_info *); static long d_number (struct d_info *); static struct demangle_component *d_identifier (struct d_info *, int); static struct demangle_component *d_operator_name (struct d_info *); static struct demangle_component *d_special_name (struct d_info *); static int d_call_offset (struct d_info *, int); static struct demangle_component *d_ctor_dtor_name (struct d_info *); static struct demangle_component ** d_cv_qualifiers (struct d_info *, struct demangle_component **, int); static struct demangle_component * d_function_type (struct d_info *); static struct demangle_component * d_bare_function_type (struct d_info *, int); static struct demangle_component * d_class_enum_type (struct d_info *); static struct demangle_component *d_array_type (struct d_info *); static struct demangle_component * d_pointer_to_member_type (struct d_info *); static struct demangle_component * d_template_param (struct d_info *); static struct demangle_component *d_template_args (struct d_info *); static struct demangle_component * d_template_arg (struct d_info *); static struct demangle_component *d_expression (struct d_info *); static struct demangle_component *d_expr_primary (struct d_info *); static struct demangle_component *d_local_name (struct d_info *); static int d_discriminator (struct d_info *); static int d_add_substitution (struct d_info *, struct demangle_component *); static struct demangle_component *d_substitution (struct d_info *, int); static void d_growable_string_init (struct d_growable_string *, size_t); static inline void d_growable_string_resize (struct d_growable_string *, size_t); static inline void d_growable_string_append_buffer (struct d_growable_string *, const char *, size_t); static void d_growable_string_callback_adapter (const char *, size_t, void *); static void d_print_init (struct d_print_info *, int, demangle_callbackref, void *); static inline void d_print_error (struct d_print_info *); static inline int d_print_saw_error (struct d_print_info *); static inline void d_print_flush (struct d_print_info *); static inline void d_append_char (struct d_print_info *, char); static inline void d_append_buffer (struct d_print_info *, const char *, size_t); static inline void d_append_string (struct d_print_info *, const char *); static inline char d_last_char (struct d_print_info *); static void d_print_comp (struct d_print_info *, const struct demangle_component *); static void d_print_java_identifier (struct d_print_info *, const char *, int); static void d_print_mod_list (struct d_print_info *, struct d_print_mod *, int); static void d_print_mod (struct d_print_info *, const struct demangle_component *); static void d_print_function_type (struct d_print_info *, const struct demangle_component *, struct d_print_mod *); static void d_print_array_type (struct d_print_info *, const struct demangle_component *, struct d_print_mod *); static void d_print_expr_op (struct d_print_info *, const struct demangle_component *); static void d_print_cast (struct d_print_info *, const struct demangle_component *); static int d_demangle_callback (const char *, int, demangle_callbackref, void *); static char *d_demangle (const char *, int, size_t *); #ifdef CP_DEMANGLE_DEBUG static void d_dump (struct demangle_component *dc, int indent) { int i; if (dc == NULL) { if (indent == 0) printf ("failed demangling\n"); return; } for (i = 0; i < indent; ++i) putchar (' '); switch (dc->type) { case DEMANGLE_COMPONENT_NAME: printf ("name '%.*s'\n", dc->u.s_name.len, dc->u.s_name.s); return; case DEMANGLE_COMPONENT_TEMPLATE_PARAM: printf ("template parameter %ld\n", dc->u.s_number.number); return; case DEMANGLE_COMPONENT_CTOR: printf ("constructor %d\n", (int) dc->u.s_ctor.kind); d_dump (dc->u.s_ctor.name, indent + 2); return; case DEMANGLE_COMPONENT_DTOR: printf ("destructor %d\n", (int) dc->u.s_dtor.kind); d_dump (dc->u.s_dtor.name, indent + 2); return; case DEMANGLE_COMPONENT_SUB_STD: printf ("standard substitution %s\n", dc->u.s_string.string); return; case DEMANGLE_COMPONENT_BUILTIN_TYPE: printf ("builtin type %s\n", dc->u.s_builtin.type->name); return; case DEMANGLE_COMPONENT_OPERATOR: printf ("operator %s\n", dc->u.s_operator.op->name); return; case DEMANGLE_COMPONENT_EXTENDED_OPERATOR: printf ("extended operator with %d args\n", dc->u.s_extended_operator.args); d_dump (dc->u.s_extended_operator.name, indent + 2); return; case DEMANGLE_COMPONENT_QUAL_NAME: printf ("qualified name\n"); break; case DEMANGLE_COMPONENT_LOCAL_NAME: printf ("local name\n"); break; case DEMANGLE_COMPONENT_TYPED_NAME: printf ("typed name\n"); break; case DEMANGLE_COMPONENT_TEMPLATE: printf ("template\n"); break; case DEMANGLE_COMPONENT_VTABLE: printf ("vtable\n"); break; case DEMANGLE_COMPONENT_VTT: printf ("VTT\n"); break; case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE: printf ("construction vtable\n"); break; case DEMANGLE_COMPONENT_TYPEINFO: printf ("typeinfo\n"); break; case DEMANGLE_COMPONENT_TYPEINFO_NAME: printf ("typeinfo name\n"); break; case DEMANGLE_COMPONENT_TYPEINFO_FN: printf ("typeinfo function\n"); break; case DEMANGLE_COMPONENT_THUNK: printf ("thunk\n"); break; case DEMANGLE_COMPONENT_VIRTUAL_THUNK: printf ("virtual thunk\n"); break; case DEMANGLE_COMPONENT_COVARIANT_THUNK: printf ("covariant thunk\n"); break; case DEMANGLE_COMPONENT_JAVA_CLASS: printf ("java class\n"); break; case DEMANGLE_COMPONENT_GUARD: printf ("guard\n"); break; case DEMANGLE_COMPONENT_REFTEMP: printf ("reference temporary\n"); break; case DEMANGLE_COMPONENT_HIDDEN_ALIAS: printf ("hidden alias\n"); break; case DEMANGLE_COMPONENT_RESTRICT: printf ("restrict\n"); break; case DEMANGLE_COMPONENT_VOLATILE: printf ("volatile\n"); break; case DEMANGLE_COMPONENT_CONST: printf ("const\n"); break; case DEMANGLE_COMPONENT_RESTRICT_THIS: printf ("restrict this\n"); break; case DEMANGLE_COMPONENT_VOLATILE_THIS: printf ("volatile this\n"); break; case DEMANGLE_COMPONENT_CONST_THIS: printf ("const this\n"); break; case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: printf ("vendor type qualifier\n"); break; case DEMANGLE_COMPONENT_POINTER: printf ("pointer\n"); break; case DEMANGLE_COMPONENT_REFERENCE: printf ("reference\n"); break; case DEMANGLE_COMPONENT_RVALUE_REFERENCE: printf ("rvalue reference\n"); break; case DEMANGLE_COMPONENT_COMPLEX: printf ("complex\n"); break; case DEMANGLE_COMPONENT_IMAGINARY: printf ("imaginary\n"); break; case DEMANGLE_COMPONENT_VENDOR_TYPE: printf ("vendor type\n"); break; case DEMANGLE_COMPONENT_FUNCTION_TYPE: printf ("function type\n"); break; case DEMANGLE_COMPONENT_ARRAY_TYPE: printf ("array type\n"); break; case DEMANGLE_COMPONENT_PTRMEM_TYPE: printf ("pointer to member type\n"); break; case DEMANGLE_COMPONENT_ARGLIST: printf ("argument list\n"); break; case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST: printf ("template argument list\n"); break; case DEMANGLE_COMPONENT_CAST: printf ("cast\n"); break; case DEMANGLE_COMPONENT_UNARY: printf ("unary operator\n"); break; case DEMANGLE_COMPONENT_BINARY: printf ("binary operator\n"); break; case DEMANGLE_COMPONENT_BINARY_ARGS: printf ("binary operator arguments\n"); break; case DEMANGLE_COMPONENT_TRINARY: printf ("trinary operator\n"); break; case DEMANGLE_COMPONENT_TRINARY_ARG1: printf ("trinary operator arguments 1\n"); break; case DEMANGLE_COMPONENT_TRINARY_ARG2: printf ("trinary operator arguments 1\n"); break; case DEMANGLE_COMPONENT_LITERAL: printf ("literal\n"); break; case DEMANGLE_COMPONENT_LITERAL_NEG: printf ("negative literal\n"); break; } d_dump (d_left (dc), indent + 2); d_dump (d_right (dc), indent + 2); } #endif /* CP_DEMANGLE_DEBUG */ /* Fill in a DEMANGLE_COMPONENT_NAME. */ CP_STATIC_IF_GLIBCPP_V3 int cplus_demangle_fill_name (struct demangle_component *p, const char *s, int len) { if (p == NULL || s == NULL || len == 0) return 0; p->type = DEMANGLE_COMPONENT_NAME; p->u.s_name.s = s; p->u.s_name.len = len; return 1; } /* Fill in a DEMANGLE_COMPONENT_EXTENDED_OPERATOR. */ CP_STATIC_IF_GLIBCPP_V3 int cplus_demangle_fill_extended_operator (struct demangle_component *p, int args, struct demangle_component *name) { if (p == NULL || args < 0 || name == NULL) return 0; p->type = DEMANGLE_COMPONENT_EXTENDED_OPERATOR; p->u.s_extended_operator.args = args; p->u.s_extended_operator.name = name; return 1; } /* Fill in a DEMANGLE_COMPONENT_CTOR. */ CP_STATIC_IF_GLIBCPP_V3 int cplus_demangle_fill_ctor (struct demangle_component *p, enum gnu_v3_ctor_kinds kind, struct demangle_component *name) { if (p == NULL || name == NULL || (kind < gnu_v3_complete_object_ctor && kind > gnu_v3_complete_object_allocating_ctor)) return 0; p->type = DEMANGLE_COMPONENT_CTOR; p->u.s_ctor.kind = kind; p->u.s_ctor.name = name; return 1; } /* Fill in a DEMANGLE_COMPONENT_DTOR. */ CP_STATIC_IF_GLIBCPP_V3 int cplus_demangle_fill_dtor (struct demangle_component *p, enum gnu_v3_dtor_kinds kind, struct demangle_component *name) { if (p == NULL || name == NULL || (kind < gnu_v3_deleting_dtor && kind > gnu_v3_base_object_dtor)) return 0; p->type = DEMANGLE_COMPONENT_DTOR; p->u.s_dtor.kind = kind; p->u.s_dtor.name = name; return 1; } /* Add a new component. */ static struct demangle_component * d_make_empty (struct d_info *di) { struct demangle_component *p; if (di->next_comp >= di->num_comps) return NULL; p = &di->comps[di->next_comp]; ++di->next_comp; return p; } /* Add a new generic component. */ static struct demangle_component * d_make_comp (struct d_info *di, enum demangle_component_type type, struct demangle_component *left, struct demangle_component *right) { struct demangle_component *p; /* We check for errors here. A typical error would be a NULL return from a subroutine. We catch those here, and return NULL upward. */ switch (type) { /* These types require two parameters. */ case DEMANGLE_COMPONENT_QUAL_NAME: case DEMANGLE_COMPONENT_LOCAL_NAME: case DEMANGLE_COMPONENT_TYPED_NAME: case DEMANGLE_COMPONENT_TEMPLATE: case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE: case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: case DEMANGLE_COMPONENT_PTRMEM_TYPE: case DEMANGLE_COMPONENT_UNARY: case DEMANGLE_COMPONENT_BINARY: case DEMANGLE_COMPONENT_BINARY_ARGS: case DEMANGLE_COMPONENT_TRINARY: case DEMANGLE_COMPONENT_TRINARY_ARG1: case DEMANGLE_COMPONENT_TRINARY_ARG2: case DEMANGLE_COMPONENT_LITERAL: case DEMANGLE_COMPONENT_LITERAL_NEG: if (left == NULL || right == NULL) return NULL; break; /* These types only require one parameter. */ case DEMANGLE_COMPONENT_VTABLE: case DEMANGLE_COMPONENT_VTT: case DEMANGLE_COMPONENT_TYPEINFO: case DEMANGLE_COMPONENT_TYPEINFO_NAME: case DEMANGLE_COMPONENT_TYPEINFO_FN: case DEMANGLE_COMPONENT_THUNK: case DEMANGLE_COMPONENT_VIRTUAL_THUNK: case DEMANGLE_COMPONENT_COVARIANT_THUNK: case DEMANGLE_COMPONENT_JAVA_CLASS: case DEMANGLE_COMPONENT_GUARD: case DEMANGLE_COMPONENT_REFTEMP: case DEMANGLE_COMPONENT_HIDDEN_ALIAS: case DEMANGLE_COMPONENT_POINTER: case DEMANGLE_COMPONENT_REFERENCE: case DEMANGLE_COMPONENT_RVALUE_REFERENCE: case DEMANGLE_COMPONENT_COMPLEX: case DEMANGLE_COMPONENT_IMAGINARY: case DEMANGLE_COMPONENT_VENDOR_TYPE: case DEMANGLE_COMPONENT_ARGLIST: case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST: case DEMANGLE_COMPONENT_CAST: if (left == NULL) return NULL; break; /* This needs a right parameter, but the left parameter can be empty. */ case DEMANGLE_COMPONENT_ARRAY_TYPE: if (right == NULL) return NULL; break; /* These are allowed to have no parameters--in some cases they will be filled in later. */ case DEMANGLE_COMPONENT_FUNCTION_TYPE: case DEMANGLE_COMPONENT_RESTRICT: case DEMANGLE_COMPONENT_VOLATILE: case DEMANGLE_COMPONENT_CONST: case DEMANGLE_COMPONENT_RESTRICT_THIS: case DEMANGLE_COMPONENT_VOLATILE_THIS: case DEMANGLE_COMPONENT_CONST_THIS: break; /* Other types should not be seen here. */ default: return NULL; } p = d_make_empty (di); if (p != NULL) { p->type = type; p->u.s_binary.left = left; p->u.s_binary.right = right; } return p; } /* Add a new name component. */ static struct demangle_component * d_make_name (struct d_info *di, const char *s, int len) { struct demangle_component *p; p = d_make_empty (di); if (! cplus_demangle_fill_name (p, s, len)) return NULL; return p; } /* Add a new builtin type component. */ static struct demangle_component * d_make_builtin_type (struct d_info *di, const struct demangle_builtin_type_info *type) { struct demangle_component *p; if (type == NULL) return NULL; p = d_make_empty (di); if (p != NULL) { p->type = DEMANGLE_COMPONENT_BUILTIN_TYPE; p->u.s_builtin.type = type; } return p; } /* Add a new operator component. */ static struct demangle_component * d_make_operator (struct d_info *di, const struct demangle_operator_info *op) { struct demangle_component *p; p = d_make_empty (di); if (p != NULL) { p->type = DEMANGLE_COMPONENT_OPERATOR; p->u.s_operator.op = op; } return p; } /* Add a new extended operator component. */ static struct demangle_component * d_make_extended_operator (struct d_info *di, int args, struct demangle_component *name) { struct demangle_component *p; p = d_make_empty (di); if (! cplus_demangle_fill_extended_operator (p, args, name)) return NULL; return p; } /* Add a new constructor component. */ static struct demangle_component * d_make_ctor (struct d_info *di, enum gnu_v3_ctor_kinds kind, struct demangle_component *name) { struct demangle_component *p; p = d_make_empty (di); if (! cplus_demangle_fill_ctor (p, kind, name)) return NULL; return p; } /* Add a new destructor component. */ static struct demangle_component * d_make_dtor (struct d_info *di, enum gnu_v3_dtor_kinds kind, struct demangle_component *name) { struct demangle_component *p; p = d_make_empty (di); if (! cplus_demangle_fill_dtor (p, kind, name)) return NULL; return p; } /* Add a new template parameter. */ static struct demangle_component * d_make_template_param (struct d_info *di, long i) { struct demangle_component *p; p = d_make_empty (di); if (p != NULL) { p->type = DEMANGLE_COMPONENT_TEMPLATE_PARAM; p->u.s_number.number = i; } return p; } /* Add a new standard substitution component. */ static struct demangle_component * d_make_sub (struct d_info *di, const char *name, int len) { struct demangle_component *p; p = d_make_empty (di); if (p != NULL) { p->type = DEMANGLE_COMPONENT_SUB_STD; p->u.s_string.string = name; p->u.s_string.len = len; } return p; } /* ::= _Z TOP_LEVEL is non-zero when called at the top level. */ CP_STATIC_IF_GLIBCPP_V3 struct demangle_component * cplus_demangle_mangled_name (struct d_info *di, int top_level) { if (! d_check_char (di, '_')) return NULL; if (! d_check_char (di, 'Z')) return NULL; return d_encoding (di, top_level); } /* Return whether a function should have a return type. The argument is the function name, which may be qualified in various ways. The rules are that template functions have return types with some exceptions, function types which are not part of a function name mangling have return types with some exceptions, and non-template function names do not have return types. The exceptions are that constructors, destructors, and conversion operators do not have return types. */ static int has_return_type (struct demangle_component *dc) { if (dc == NULL) return 0; switch (dc->type) { default: return 0; case DEMANGLE_COMPONENT_TEMPLATE: return ! is_ctor_dtor_or_conversion (d_left (dc)); case DEMANGLE_COMPONENT_RESTRICT_THIS: case DEMANGLE_COMPONENT_VOLATILE_THIS: case DEMANGLE_COMPONENT_CONST_THIS: return has_return_type (d_left (dc)); } } /* Return whether a name is a constructor, a destructor, or a conversion operator. */ static int is_ctor_dtor_or_conversion (struct demangle_component *dc) { if (dc == NULL) return 0; switch (dc->type) { default: return 0; case DEMANGLE_COMPONENT_QUAL_NAME: case DEMANGLE_COMPONENT_LOCAL_NAME: return is_ctor_dtor_or_conversion (d_right (dc)); case DEMANGLE_COMPONENT_CTOR: case DEMANGLE_COMPONENT_DTOR: case DEMANGLE_COMPONENT_CAST: return 1; } } /* ::= <(function) name> ::= <(data) name> ::= TOP_LEVEL is non-zero when called at the top level, in which case if DMGL_PARAMS is not set we do not demangle the function parameters. We only set this at the top level, because otherwise we would not correctly demangle names in local scopes. */ static struct demangle_component * d_encoding (struct d_info *di, int top_level) { char peek = d_peek_char (di); if (peek == 'G' || peek == 'T') return d_special_name (di); else { struct demangle_component *dc; dc = d_name (di); if (dc != NULL && top_level && (di->options & DMGL_PARAMS) == 0) { /* Strip off any initial CV-qualifiers, as they really apply to the `this' parameter, and they were not output by the v2 demangler without DMGL_PARAMS. */ while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS || dc->type == DEMANGLE_COMPONENT_CONST_THIS) dc = d_left (dc); /* If the top level is a DEMANGLE_COMPONENT_LOCAL_NAME, then there may be CV-qualifiers on its right argument which really apply here; this happens when parsing a class which is local to a function. */ if (dc->type == DEMANGLE_COMPONENT_LOCAL_NAME) { struct demangle_component *dcr; dcr = d_right (dc); while (dcr->type == DEMANGLE_COMPONENT_RESTRICT_THIS || dcr->type == DEMANGLE_COMPONENT_VOLATILE_THIS || dcr->type == DEMANGLE_COMPONENT_CONST_THIS) dcr = d_left (dcr); dc->u.s_binary.right = dcr; } return dc; } peek = d_peek_char (di); if (dc == NULL || peek == '\0' || peek == 'E') return dc; return d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, dc, d_bare_function_type (di, has_return_type (dc))); } } /* ::= ::= ::= ::= ::= ::= St ::= ::= */ static struct demangle_component * d_name (struct d_info *di) { char peek = d_peek_char (di); struct demangle_component *dc; switch (peek) { case 'N': return d_nested_name (di); case 'Z': return d_local_name (di); case 'L': return d_unqualified_name (di); case 'S': { int subst; if (d_peek_next_char (di) != 't') { dc = d_substitution (di, 0); subst = 1; } else { d_advance (di, 2); dc = d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, d_make_name (di, "std", 3), d_unqualified_name (di)); di->expansion += 3; subst = 0; } if (d_peek_char (di) != 'I') { /* The grammar does not permit this case to occur if we called d_substitution() above (i.e., subst == 1). We don't bother to check. */ } else { /* This is , which means that we just saw , which is a substitution candidate if we didn't just get it from a substitution. */ if (! subst) { if (! d_add_substitution (di, dc)) return NULL; } dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc, d_template_args (di)); } return dc; } default: dc = d_unqualified_name (di); if (d_peek_char (di) == 'I') { /* This is , which means that we just saw , which is a substitution candidate. */ if (! d_add_substitution (di, dc)) return NULL; dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc, d_template_args (di)); } return dc; } } /* ::= N [] E ::= N [] E */ static struct demangle_component * d_nested_name (struct d_info *di) { struct demangle_component *ret; struct demangle_component **pret; if (! d_check_char (di, 'N')) return NULL; pret = d_cv_qualifiers (di, &ret, 1); if (pret == NULL) return NULL; *pret = d_prefix (di); if (*pret == NULL) return NULL; if (! d_check_char (di, 'E')) return NULL; return ret; } /* ::= ::= ::= ::= ::= ::= <(template) unqualified-name> ::= ::= */ static struct demangle_component * d_prefix (struct d_info *di) { struct demangle_component *ret = NULL; while (1) { char peek; enum demangle_component_type comb_type; struct demangle_component *dc; peek = d_peek_char (di); if (peek == '\0') return NULL; /* The older code accepts a here, but I don't see that in the grammar. The older code does not accept a here. */ comb_type = DEMANGLE_COMPONENT_QUAL_NAME; if (IS_DIGIT (peek) || IS_LOWER (peek) || peek == 'C' || peek == 'D' || peek == 'L') dc = d_unqualified_name (di); else if (peek == 'S') dc = d_substitution (di, 1); else if (peek == 'I') { if (ret == NULL) return NULL; comb_type = DEMANGLE_COMPONENT_TEMPLATE; dc = d_template_args (di); } else if (peek == 'T') dc = d_template_param (di); else if (peek == 'E') return ret; else return NULL; if (ret == NULL) ret = dc; else ret = d_make_comp (di, comb_type, ret, dc); if (peek != 'S' && d_peek_char (di) != 'E') { if (! d_add_substitution (di, ret)) return NULL; } } } /* ::= ::= ::= ::= ::= L */ static struct demangle_component * d_unqualified_name (struct d_info *di) { char peek; peek = d_peek_char (di); if (IS_DIGIT (peek)) return d_source_name (di); else if (IS_LOWER (peek)) { struct demangle_component *ret; ret = d_operator_name (di); if (ret != NULL && ret->type == DEMANGLE_COMPONENT_OPERATOR) di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2; return ret; } else if (peek == 'C' || peek == 'D') return d_ctor_dtor_name (di); else if (peek == 'L') { struct demangle_component * ret; d_advance (di, 1); ret = d_source_name (di); if (ret == NULL) return NULL; if (! d_discriminator (di)) return NULL; return ret; } else return NULL; } /* ::= <(positive length) number> */ static struct demangle_component * d_source_name (struct d_info *di) { long len; struct demangle_component *ret; len = d_number (di); if (len <= 0) return NULL; ret = d_identifier (di, len); di->last_name = ret; return ret; } /* number ::= [n] <(non-negative decimal integer)> */ static long d_number (struct d_info *di) { int negative; char peek; long ret; negative = 0; peek = d_peek_char (di); if (peek == 'n') { negative = 1; d_advance (di, 1); peek = d_peek_char (di); } ret = 0; while (1) { if (! IS_DIGIT (peek)) { if (negative) ret = - ret; return ret; } ret = ret * 10 + peek - '0'; d_advance (di, 1); peek = d_peek_char (di); } } /* identifier ::= <(unqualified source code identifier)> */ static struct demangle_component * d_identifier (struct d_info *di, int len) { const char *name; name = d_str (di); if (di->send - name < len) return NULL; d_advance (di, len); /* A Java mangled name may have a trailing '$' if it is a C++ keyword. This '$' is not included in the length count. We just ignore the '$'. */ if ((di->options & DMGL_JAVA) != 0 && d_peek_char (di) == '$') d_advance (di, 1); /* Look for something which looks like a gcc encoding of an anonymous namespace, and replace it with a more user friendly name. */ if (len >= (int) ANONYMOUS_NAMESPACE_PREFIX_LEN + 2 && memcmp (name, ANONYMOUS_NAMESPACE_PREFIX, ANONYMOUS_NAMESPACE_PREFIX_LEN) == 0) { const char *s; s = name + ANONYMOUS_NAMESPACE_PREFIX_LEN; if ((*s == '.' || *s == '_' || *s == '$') && s[1] == 'N') { di->expansion -= len - sizeof "(anonymous namespace)"; return d_make_name (di, "(anonymous namespace)", sizeof "(anonymous namespace)" - 1); } } return d_make_name (di, name, len); } /* operator_name ::= many different two character encodings. ::= cv ::= v */ #define NL(s) s, (sizeof s) - 1 CP_STATIC_IF_GLIBCPP_V3 const struct demangle_operator_info cplus_demangle_operators[] = { { "aN", NL ("&="), 2 }, { "aS", NL ("="), 2 }, { "aa", NL ("&&"), 2 }, { "ad", NL ("&"), 1 }, { "an", NL ("&"), 2 }, { "cl", NL ("()"), 0 }, { "cm", NL (","), 2 }, { "co", NL ("~"), 1 }, { "dV", NL ("/="), 2 }, { "da", NL ("delete[]"), 1 }, { "de", NL ("*"), 1 }, { "dl", NL ("delete"), 1 }, { "dv", NL ("/"), 2 }, { "eO", NL ("^="), 2 }, { "eo", NL ("^"), 2 }, { "eq", NL ("=="), 2 }, { "ge", NL (">="), 2 }, { "gt", NL (">"), 2 }, { "ix", NL ("[]"), 2 }, { "lS", NL ("<<="), 2 }, { "le", NL ("<="), 2 }, { "ls", NL ("<<"), 2 }, { "lt", NL ("<"), 2 }, { "mI", NL ("-="), 2 }, { "mL", NL ("*="), 2 }, { "mi", NL ("-"), 2 }, { "ml", NL ("*"), 2 }, { "mm", NL ("--"), 1 }, { "na", NL ("new[]"), 1 }, { "ne", NL ("!="), 2 }, { "ng", NL ("-"), 1 }, { "nt", NL ("!"), 1 }, { "nw", NL ("new"), 1 }, { "oR", NL ("|="), 2 }, { "oo", NL ("||"), 2 }, { "or", NL ("|"), 2 }, { "pL", NL ("+="), 2 }, { "pl", NL ("+"), 2 }, { "pm", NL ("->*"), 2 }, { "pp", NL ("++"), 1 }, { "ps", NL ("+"), 1 }, { "pt", NL ("->"), 2 }, { "qu", NL ("?"), 3 }, { "rM", NL ("%="), 2 }, { "rS", NL (">>="), 2 }, { "rm", NL ("%"), 2 }, { "rs", NL (">>"), 2 }, { "st", NL ("sizeof "), 1 }, { "sz", NL ("sizeof "), 1 }, { NULL, NULL, 0, 0 } }; static struct demangle_component * d_operator_name (struct d_info *di) { char c1; char c2; c1 = d_next_char (di); c2 = d_next_char (di); if (c1 == 'v' && IS_DIGIT (c2)) return d_make_extended_operator (di, c2 - '0', d_source_name (di)); else if (c1 == 'c' && c2 == 'v') return d_make_comp (di, DEMANGLE_COMPONENT_CAST, cplus_demangle_type (di), NULL); else { /* LOW is the inclusive lower bound. */ int low = 0; /* HIGH is the exclusive upper bound. We subtract one to ignore the sentinel at the end of the array. */ int high = ((sizeof (cplus_demangle_operators) / sizeof (cplus_demangle_operators[0])) - 1); while (1) { int i; const struct demangle_operator_info *p; i = low + (high - low) / 2; p = cplus_demangle_operators + i; if (c1 == p->code[0] && c2 == p->code[1]) return d_make_operator (di, p); if (c1 < p->code[0] || (c1 == p->code[0] && c2 < p->code[1])) high = i; else low = i + 1; if (low == high) return NULL; } } } /* ::= TV ::= TT ::= TI ::= TS ::= GV <(object) name> ::= T <(base) encoding> ::= Tc <(base) encoding> Also g++ extensions: ::= TC <(offset) number> _ <(base) type> ::= TF ::= TJ ::= GR ::= GA */ static struct demangle_component * d_special_name (struct d_info *di) { di->expansion += 20; if (d_check_char (di, 'T')) { switch (d_next_char (di)) { case 'V': di->expansion -= 5; return d_make_comp (di, DEMANGLE_COMPONENT_VTABLE, cplus_demangle_type (di), NULL); case 'T': di->expansion -= 10; return d_make_comp (di, DEMANGLE_COMPONENT_VTT, cplus_demangle_type (di), NULL); case 'I': return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO, cplus_demangle_type (di), NULL); case 'S': return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_NAME, cplus_demangle_type (di), NULL); case 'h': if (! d_call_offset (di, 'h')) return NULL; return d_make_comp (di, DEMANGLE_COMPONENT_THUNK, d_encoding (di, 0), NULL); case 'v': if (! d_call_offset (di, 'v')) return NULL; return d_make_comp (di, DEMANGLE_COMPONENT_VIRTUAL_THUNK, d_encoding (di, 0), NULL); case 'c': if (! d_call_offset (di, '\0')) return NULL; if (! d_call_offset (di, '\0')) return NULL; return d_make_comp (di, DEMANGLE_COMPONENT_COVARIANT_THUNK, d_encoding (di, 0), NULL); case 'C': { struct demangle_component *derived_type; long offset; struct demangle_component *base_type; derived_type = cplus_demangle_type (di); offset = d_number (di); if (offset < 0) return NULL; if (! d_check_char (di, '_')) return NULL; base_type = cplus_demangle_type (di); /* We don't display the offset. FIXME: We should display it in verbose mode. */ di->expansion += 5; return d_make_comp (di, DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE, base_type, derived_type); } case 'F': return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_FN, cplus_demangle_type (di), NULL); case 'J': return d_make_comp (di, DEMANGLE_COMPONENT_JAVA_CLASS, cplus_demangle_type (di), NULL); default: return NULL; } } else if (d_check_char (di, 'G')) { switch (d_next_char (di)) { case 'V': return d_make_comp (di, DEMANGLE_COMPONENT_GUARD, d_name (di), NULL); case 'R': return d_make_comp (di, DEMANGLE_COMPONENT_REFTEMP, d_name (di), NULL); case 'A': return d_make_comp (di, DEMANGLE_COMPONENT_HIDDEN_ALIAS, d_encoding (di, 0), NULL); default: return NULL; } } else return NULL; } /* ::= h _ ::= v _ ::= <(offset) number> ::= <(offset) number> _ <(virtual offset) number> The C parameter, if not '\0', is a character we just read which is the start of the . We don't display the offset information anywhere. FIXME: We should display it in verbose mode. */ static int d_call_offset (struct d_info *di, int c) { if (c == '\0') c = d_next_char (di); if (c == 'h') d_number (di); else if (c == 'v') { d_number (di); if (! d_check_char (di, '_')) return 0; d_number (di); } else return 0; if (! d_check_char (di, '_')) return 0; return 1; } /* ::= C1 ::= C2 ::= C3 ::= D0 ::= D1 ::= D2 */ static struct demangle_component * d_ctor_dtor_name (struct d_info *di) { if (di->last_name != NULL) { if (di->last_name->type == DEMANGLE_COMPONENT_NAME) di->expansion += di->last_name->u.s_name.len; else if (di->last_name->type == DEMANGLE_COMPONENT_SUB_STD) di->expansion += di->last_name->u.s_string.len; } switch (d_peek_char (di)) { case 'C': { enum gnu_v3_ctor_kinds kind; switch (d_peek_next_char (di)) { case '1': kind = gnu_v3_complete_object_ctor; break; case '2': kind = gnu_v3_base_object_ctor; break; case '3': kind = gnu_v3_complete_object_allocating_ctor; break; default: return NULL; } d_advance (di, 2); return d_make_ctor (di, kind, di->last_name); } case 'D': { enum gnu_v3_dtor_kinds kind; switch (d_peek_next_char (di)) { case '0': kind = gnu_v3_deleting_dtor; break; case '1': kind = gnu_v3_complete_object_dtor; break; case '2': kind = gnu_v3_base_object_dtor; break; default: return NULL; } d_advance (di, 2); return d_make_dtor (di, kind, di->last_name); } default: return NULL; } } /* ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= P ::= R ::= O (C++0x) ::= C ::= G ::= U ::= various one letter codes ::= u */ CP_STATIC_IF_GLIBCPP_V3 const struct demangle_builtin_type_info cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT] = { /* a */ { NL ("signed char"), NL ("signed char"), D_PRINT_DEFAULT }, /* b */ { NL ("bool"), NL ("boolean"), D_PRINT_BOOL }, /* c */ { NL ("char"), NL ("byte"), D_PRINT_DEFAULT }, /* d */ { NL ("double"), NL ("double"), D_PRINT_FLOAT }, /* e */ { NL ("long double"), NL ("long double"), D_PRINT_FLOAT }, /* f */ { NL ("float"), NL ("float"), D_PRINT_FLOAT }, /* g */ { NL ("__float128"), NL ("__float128"), D_PRINT_FLOAT }, /* h */ { NL ("unsigned char"), NL ("unsigned char"), D_PRINT_DEFAULT }, /* i */ { NL ("int"), NL ("int"), D_PRINT_INT }, /* j */ { NL ("unsigned int"), NL ("unsigned"), D_PRINT_UNSIGNED }, /* k */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT }, /* l */ { NL ("long"), NL ("long"), D_PRINT_LONG }, /* m */ { NL ("unsigned long"), NL ("unsigned long"), D_PRINT_UNSIGNED_LONG }, /* n */ { NL ("__int128"), NL ("__int128"), D_PRINT_DEFAULT }, /* o */ { NL ("unsigned __int128"), NL ("unsigned __int128"), D_PRINT_DEFAULT }, /* p */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT }, /* q */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT }, /* r */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT }, /* s */ { NL ("short"), NL ("short"), D_PRINT_DEFAULT }, /* t */ { NL ("unsigned short"), NL ("unsigned short"), D_PRINT_DEFAULT }, /* u */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT }, /* v */ { NL ("void"), NL ("void"), D_PRINT_VOID }, /* w */ { NL ("wchar_t"), NL ("char"), D_PRINT_DEFAULT }, /* x */ { NL ("long long"), NL ("long"), D_PRINT_LONG_LONG }, /* y */ { NL ("unsigned long long"), NL ("unsigned long long"), D_PRINT_UNSIGNED_LONG_LONG }, /* z */ { NL ("..."), NL ("..."), D_PRINT_DEFAULT }, }; CP_STATIC_IF_GLIBCPP_V3 struct demangle_component * cplus_demangle_type (struct d_info *di) { char peek; struct demangle_component *ret; int can_subst; /* The ABI specifies that when CV-qualifiers are used, the base type is substitutable, and the fully qualified type is substitutable, but the base type with a strict subset of the CV-qualifiers is not substitutable. The natural recursive implementation of the CV-qualifiers would cause subsets to be substitutable, so instead we pull them all off now. FIXME: The ABI says that order-insensitive vendor qualifiers should be handled in the same way, but we have no way to tell which vendor qualifiers are order-insensitive and which are order-sensitive. So we just assume that they are all order-sensitive. g++ 3.4 supports only one vendor qualifier, __vector, and it treats it as order-sensitive when mangling names. */ peek = d_peek_char (di); if (peek == 'r' || peek == 'V' || peek == 'K') { struct demangle_component **pret; pret = d_cv_qualifiers (di, &ret, 0); if (pret == NULL) return NULL; *pret = cplus_demangle_type (di); if (! *pret || ! d_add_substitution (di, ret)) return NULL; return ret; } can_subst = 1; switch (peek) { case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'l': case 'm': case 'n': case 'o': case 's': case 't': case 'v': case 'w': case 'x': case 'y': case 'z': ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[peek - 'a']); di->expansion += ret->u.s_builtin.type->len; can_subst = 0; d_advance (di, 1); break; case 'u': d_advance (di, 1); ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE, d_source_name (di), NULL); break; case 'F': ret = d_function_type (di); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'N': case 'Z': ret = d_class_enum_type (di); break; case 'A': ret = d_array_type (di); break; case 'M': ret = d_pointer_to_member_type (di); break; case 'T': ret = d_template_param (di); if (d_peek_char (di) == 'I') { /* This is . The part is a substitution candidate. */ if (! d_add_substitution (di, ret)) return NULL; ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret, d_template_args (di)); } break; case 'S': /* If this is a special substitution, then it is the start of . */ { char peek_next; peek_next = d_peek_next_char (di); if (IS_DIGIT (peek_next) || peek_next == '_' || IS_UPPER (peek_next)) { ret = d_substitution (di, 0); /* The substituted name may have been a template name and may be followed by tepmlate args. */ if (d_peek_char (di) == 'I') ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret, d_template_args (di)); else can_subst = 0; } else { ret = d_class_enum_type (di); /* If the substitution was a complete type, then it is not a new substitution candidate. However, if the substitution was followed by template arguments, then the whole thing is a substitution candidate. */ if (ret != NULL && ret->type == DEMANGLE_COMPONENT_SUB_STD) can_subst = 0; } } break; case 'O': d_advance (di, 1); ret = d_make_comp (di, DEMANGLE_COMPONENT_RVALUE_REFERENCE, cplus_demangle_type (di), NULL); break; case 'P': d_advance (di, 1); ret = d_make_comp (di, DEMANGLE_COMPONENT_POINTER, cplus_demangle_type (di), NULL); break; case 'R': d_advance (di, 1); ret = d_make_comp (di, DEMANGLE_COMPONENT_REFERENCE, cplus_demangle_type (di), NULL); break; case 'C': d_advance (di, 1); ret = d_make_comp (di, DEMANGLE_COMPONENT_COMPLEX, cplus_demangle_type (di), NULL); break; case 'G': d_advance (di, 1); ret = d_make_comp (di, DEMANGLE_COMPONENT_IMAGINARY, cplus_demangle_type (di), NULL); break; case 'U': d_advance (di, 1); ret = d_source_name (di); ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL, cplus_demangle_type (di), ret); break; default: return NULL; } if (can_subst) { if (! d_add_substitution (di, ret)) return NULL; } return ret; } /* ::= [r] [V] [K] */ static struct demangle_component ** d_cv_qualifiers (struct d_info *di, struct demangle_component **pret, int member_fn) { char peek; peek = d_peek_char (di); while (peek == 'r' || peek == 'V' || peek == 'K') { enum demangle_component_type t; d_advance (di, 1); if (peek == 'r') { t = (member_fn ? DEMANGLE_COMPONENT_RESTRICT_THIS : DEMANGLE_COMPONENT_RESTRICT); di->expansion += sizeof "restrict"; } else if (peek == 'V') { t = (member_fn ? DEMANGLE_COMPONENT_VOLATILE_THIS : DEMANGLE_COMPONENT_VOLATILE); di->expansion += sizeof "volatile"; } else { t = (member_fn ? DEMANGLE_COMPONENT_CONST_THIS : DEMANGLE_COMPONENT_CONST); di->expansion += sizeof "const"; } *pret = d_make_comp (di, t, NULL, NULL); if (*pret == NULL) return NULL; pret = &d_left (*pret); peek = d_peek_char (di); } return pret; } /* ::= F [Y] E */ static struct demangle_component * d_function_type (struct d_info *di) { struct demangle_component *ret; if (! d_check_char (di, 'F')) return NULL; if (d_peek_char (di) == 'Y') { /* Function has C linkage. We don't print this information. FIXME: We should print it in verbose mode. */ d_advance (di, 1); } ret = d_bare_function_type (di, 1); if (! d_check_char (di, 'E')) return NULL; return ret; } /* ::= [J]+ */ static struct demangle_component * d_bare_function_type (struct d_info *di, int has_return_type) { struct demangle_component *return_type; struct demangle_component *tl; struct demangle_component **ptl; char peek; /* Detect special qualifier indicating that the first argument is the return type. */ peek = d_peek_char (di); if (peek == 'J') { d_advance (di, 1); has_return_type = 1; } return_type = NULL; tl = NULL; ptl = &tl; while (1) { struct demangle_component *type; peek = d_peek_char (di); if (peek == '\0' || peek == 'E') break; type = cplus_demangle_type (di); if (type == NULL) return NULL; if (has_return_type) { return_type = type; has_return_type = 0; } else { *ptl = d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, type, NULL); if (*ptl == NULL) return NULL; ptl = &d_right (*ptl); } } /* There should be at least one parameter type besides the optional return type. A function which takes no arguments will have a single parameter type void. */ if (tl == NULL) return NULL; /* If we have a single parameter type void, omit it. */ if (d_right (tl) == NULL && d_left (tl)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE && d_left (tl)->u.s_builtin.type->print == D_PRINT_VOID) { di->expansion -= d_left (tl)->u.s_builtin.type->len; tl = NULL; } return d_make_comp (di, DEMANGLE_COMPONENT_FUNCTION_TYPE, return_type, tl); } /* ::= */ static struct demangle_component * d_class_enum_type (struct d_info *di) { return d_name (di); } /* ::= A <(positive dimension) number> _ <(element) type> ::= A [<(dimension) expression>] _ <(element) type> */ static struct demangle_component * d_array_type (struct d_info *di) { char peek; struct demangle_component *dim; if (! d_check_char (di, 'A')) return NULL; peek = d_peek_char (di); if (peek == '_') dim = NULL; else if (IS_DIGIT (peek)) { const char *s; s = d_str (di); do { d_advance (di, 1); peek = d_peek_char (di); } while (IS_DIGIT (peek)); dim = d_make_name (di, s, d_str (di) - s); if (dim == NULL) return NULL; } else { dim = d_expression (di); if (dim == NULL) return NULL; } if (! d_check_char (di, '_')) return NULL; return d_make_comp (di, DEMANGLE_COMPONENT_ARRAY_TYPE, dim, cplus_demangle_type (di)); } /* ::= M <(class) type> <(member) type> */ static struct demangle_component * d_pointer_to_member_type (struct d_info *di) { struct demangle_component *cl; struct demangle_component *mem; struct demangle_component **pmem; if (! d_check_char (di, 'M')) return NULL; cl = cplus_demangle_type (di); /* The ABI specifies that any type can be a substitution source, and that M is followed by two types, and that when a CV-qualified type is seen both the base type and the CV-qualified types are substitution sources. The ABI also specifies that for a pointer to a CV-qualified member function, the qualifiers are attached to the second type. Given the grammar, a plain reading of the ABI suggests that both the CV-qualified member function and the non-qualified member function are substitution sources. However, g++ does not work that way. g++ treats only the CV-qualified member function as a substitution source. FIXME. So to work with g++, we need to pull off the CV-qualifiers here, in order to avoid calling add_substitution() in cplus_demangle_type(). But for a CV-qualified member which is not a function, g++ does follow the ABI, so we need to handle that case here by calling d_add_substitution ourselves. */ pmem = d_cv_qualifiers (di, &mem, 1); if (pmem == NULL) return NULL; *pmem = cplus_demangle_type (di); if (*pmem == NULL) return NULL; if (pmem != &mem && (*pmem)->type != DEMANGLE_COMPONENT_FUNCTION_TYPE) { if (! d_add_substitution (di, mem)) return NULL; } return d_make_comp (di, DEMANGLE_COMPONENT_PTRMEM_TYPE, cl, mem); } /* ::= T_ ::= T <(parameter-2 non-negative) number> _ */ static struct demangle_component * d_template_param (struct d_info *di) { long param; if (! d_check_char (di, 'T')) return NULL; if (d_peek_char (di) == '_') param = 0; else { param = d_number (di); if (param < 0) return NULL; param += 1; } if (! d_check_char (di, '_')) return NULL; ++di->did_subs; return d_make_template_param (di, param); } /* ::= I + E */ static struct demangle_component * d_template_args (struct d_info *di) { struct demangle_component *hold_last_name; struct demangle_component *al; struct demangle_component **pal; /* Preserve the last name we saw--don't let the template arguments clobber it, as that would give us the wrong name for a subsequent constructor or destructor. */ hold_last_name = di->last_name; if (! d_check_char (di, 'I')) return NULL; al = NULL; pal = &al; while (1) { struct demangle_component *a; a = d_template_arg (di); if (a == NULL) return NULL; *pal = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, a, NULL); if (*pal == NULL) return NULL; pal = &d_right (*pal); if (d_peek_char (di) == 'E') { d_advance (di, 1); break; } } di->last_name = hold_last_name; return al; } /* ::= ::= X E ::= */ static struct demangle_component * d_template_arg (struct d_info *di) { struct demangle_component *ret; switch (d_peek_char (di)) { case 'X': d_advance (di, 1); ret = d_expression (di); if (! d_check_char (di, 'E')) return NULL; return ret; case 'L': return d_expr_primary (di); default: return cplus_demangle_type (di); } } /* ::= <(unary) operator-name> ::= <(binary) operator-name> ::= <(trinary) operator-name> ::= st ::= ::= sr ::= sr ::= */ static struct demangle_component * d_expression (struct d_info *di) { char peek; peek = d_peek_char (di); if (peek == 'L') return d_expr_primary (di); else if (peek == 'T') return d_template_param (di); else if (peek == 's' && d_peek_next_char (di) == 'r') { struct demangle_component *type; struct demangle_component *name; d_advance (di, 2); type = cplus_demangle_type (di); name = d_unqualified_name (di); if (d_peek_char (di) != 'I') return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type, name); else return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type, d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, name, d_template_args (di))); } else { struct demangle_component *op; int args; op = d_operator_name (di); if (op == NULL) return NULL; if (op->type == DEMANGLE_COMPONENT_OPERATOR) di->expansion += op->u.s_operator.op->len - 2; if (op->type == DEMANGLE_COMPONENT_OPERATOR && strcmp (op->u.s_operator.op->code, "st") == 0) return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op, cplus_demangle_type (di)); switch (op->type) { default: return NULL; case DEMANGLE_COMPONENT_OPERATOR: args = op->u.s_operator.op->args; break; case DEMANGLE_COMPONENT_EXTENDED_OPERATOR: args = op->u.s_extended_operator.args; break; case DEMANGLE_COMPONENT_CAST: args = 1; break; } switch (args) { case 1: return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op, d_expression (di)); case 2: { struct demangle_component *left; left = d_expression (di); return d_make_comp (di, DEMANGLE_COMPONENT_BINARY, op, d_make_comp (di, DEMANGLE_COMPONENT_BINARY_ARGS, left, d_expression (di))); } case 3: { struct demangle_component *first; struct demangle_component *second; first = d_expression (di); second = d_expression (di); return d_make_comp (di, DEMANGLE_COMPONENT_TRINARY, op, d_make_comp (di, DEMANGLE_COMPONENT_TRINARY_ARG1, first, d_make_comp (di, DEMANGLE_COMPONENT_TRINARY_ARG2, second, d_expression (di)))); } default: return NULL; } } } /* ::= L <(value) number> E ::= L <(value) float> E ::= L E */ static struct demangle_component * d_expr_primary (struct d_info *di) { struct demangle_component *ret; if (! d_check_char (di, 'L')) return NULL; if (d_peek_char (di) == '_') ret = cplus_demangle_mangled_name (di, 0); else { struct demangle_component *type; enum demangle_component_type t; const char *s; type = cplus_demangle_type (di); if (type == NULL) return NULL; /* If we have a type we know how to print, we aren't going to print the type name itself. */ if (type->type == DEMANGLE_COMPONENT_BUILTIN_TYPE && type->u.s_builtin.type->print != D_PRINT_DEFAULT) di->expansion -= type->u.s_builtin.type->len; /* Rather than try to interpret the literal value, we just collect it as a string. Note that it's possible to have a floating point literal here. The ABI specifies that the format of such literals is machine independent. That's fine, but what's not fine is that versions of g++ up to 3.2 with -fabi-version=1 used upper case letters in the hex constant, and dumped out gcc's internal representation. That makes it hard to tell where the constant ends, and hard to dump the constant in any readable form anyhow. We don't attempt to handle these cases. */ t = DEMANGLE_COMPONENT_LITERAL; if (d_peek_char (di) == 'n') { t = DEMANGLE_COMPONENT_LITERAL_NEG; d_advance (di, 1); } s = d_str (di); while (d_peek_char (di) != 'E') { if (d_peek_char (di) == '\0') return NULL; d_advance (di, 1); } ret = d_make_comp (di, t, type, d_make_name (di, s, d_str (di) - s)); } if (! d_check_char (di, 'E')) return NULL; return ret; } /* ::= Z <(function) encoding> E <(entity) name> [] ::= Z <(function) encoding> E s [] */ static struct demangle_component * d_local_name (struct d_info *di) { struct demangle_component *function; if (! d_check_char (di, 'Z')) return NULL; function = d_encoding (di, 0); if (! d_check_char (di, 'E')) return NULL; if (d_peek_char (di) == 's') { d_advance (di, 1); if (! d_discriminator (di)) return NULL; return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, d_make_name (di, "string literal", sizeof "string literal" - 1)); } else { struct demangle_component *name; name = d_name (di); if (! d_discriminator (di)) return NULL; return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, name); } } /* ::= _ <(non-negative) number> We demangle the discriminator, but we don't print it out. FIXME: We should print it out in verbose mode. */ static int d_discriminator (struct d_info *di) { long discrim; if (d_peek_char (di) != '_') return 1; d_advance (di, 1); discrim = d_number (di); if (discrim < 0) return 0; return 1; } /* Add a new substitution. */ static int d_add_substitution (struct d_info *di, struct demangle_component *dc) { if (dc == NULL) return 0; if (di->next_sub >= di->num_subs) return 0; di->subs[di->next_sub] = dc; ++di->next_sub; return 1; } /* ::= S _ ::= S_ ::= St ::= Sa ::= Sb ::= Ss ::= Si ::= So ::= Sd If PREFIX is non-zero, then this type is being used as a prefix in a qualified name. In this case, for the standard substitutions, we need to check whether we are being used as a prefix for a constructor or destructor, and return a full template name. Otherwise we will get something like std::iostream::~iostream() which does not correspond particularly well to any function which actually appears in the source. */ static const struct d_standard_sub_info standard_subs[] = { { 't', NL ("std"), NL ("std"), NULL, 0 }, { 'a', NL ("std::allocator"), NL ("std::allocator"), NL ("allocator") }, { 'b', NL ("std::basic_string"), NL ("std::basic_string"), NL ("basic_string") }, { 's', NL ("std::string"), NL ("std::basic_string, std::allocator >"), NL ("basic_string") }, { 'i', NL ("std::istream"), NL ("std::basic_istream >"), NL ("basic_istream") }, { 'o', NL ("std::ostream"), NL ("std::basic_ostream >"), NL ("basic_ostream") }, { 'd', NL ("std::iostream"), NL ("std::basic_iostream >"), NL ("basic_iostream") } }; static struct demangle_component * d_substitution (struct d_info *di, int prefix) { char c; if (! d_check_char (di, 'S')) return NULL; c = d_next_char (di); if (c == '_' || IS_DIGIT (c) || IS_UPPER (c)) { int id; id = 0; if (c != '_') { do { if (IS_DIGIT (c)) id = id * 36 + c - '0'; else if (IS_UPPER (c)) id = id * 36 + c - 'A' + 10; else return NULL; if (id < 0) return NULL; c = d_next_char (di); } while (c != '_'); ++id; } if (id >= di->next_sub) return NULL; ++di->did_subs; return di->subs[id]; } else { int verbose; const struct d_standard_sub_info *p; const struct d_standard_sub_info *pend; verbose = (di->options & DMGL_VERBOSE) != 0; if (! verbose && prefix) { char peek; peek = d_peek_char (di); if (peek == 'C' || peek == 'D') verbose = 1; } pend = (&standard_subs[0] + sizeof standard_subs / sizeof standard_subs[0]); for (p = &standard_subs[0]; p < pend; ++p) { if (c == p->code) { const char *s; int len; if (p->set_last_name != NULL) di->last_name = d_make_sub (di, p->set_last_name, p->set_last_name_len); if (verbose) { s = p->full_expansion; len = p->full_len; } else { s = p->simple_expansion; len = p->simple_len; } di->expansion += len; return d_make_sub (di, s, len); } } return NULL; } } /* Initialize a growable string. */ static void d_growable_string_init (struct d_growable_string *dgs, size_t estimate) { dgs->buf = NULL; dgs->len = 0; dgs->alc = 0; dgs->allocation_failure = 0; if (estimate > 0) d_growable_string_resize (dgs, estimate); } /* Grow a growable string to a given size. */ static inline void d_growable_string_resize (struct d_growable_string *dgs, size_t need) { size_t newalc; char *newbuf; if (dgs->allocation_failure) return; /* Start allocation at two bytes to avoid any possibility of confusion with the special value of 1 used as a return in *palc to indicate allocation failures. */ newalc = dgs->alc > 0 ? dgs->alc : 2; while (newalc < need) newalc <<= 1; newbuf = (char *) realloc (dgs->buf, newalc); if (newbuf == NULL) { free (dgs->buf); dgs->buf = NULL; dgs->len = 0; dgs->alc = 0; dgs->allocation_failure = 1; return; } dgs->buf = newbuf; dgs->alc = newalc; } /* Append a buffer to a growable string. */ static inline void d_growable_string_append_buffer (struct d_growable_string *dgs, const char *s, size_t l) { size_t need; need = dgs->len + l + 1; if (need > dgs->alc) d_growable_string_resize (dgs, need); if (dgs->allocation_failure) return; memcpy (dgs->buf + dgs->len, s, l); dgs->buf[dgs->len + l] = '\0'; dgs->len += l; } /* Bridge growable strings to the callback mechanism. */ static void d_growable_string_callback_adapter (const char *s, size_t l, void *opaque) { struct d_growable_string *dgs = (struct d_growable_string*) opaque; d_growable_string_append_buffer (dgs, s, l); } /* Initialize a print information structure. */ static void d_print_init (struct d_print_info *dpi, int options, demangle_callbackref callback, void *opaque) { dpi->options = options; dpi->len = 0; dpi->last_char = '\0'; dpi->templates = NULL; dpi->modifiers = NULL; dpi->callback = callback; dpi->opaque = opaque; dpi->demangle_failure = 0; } /* Indicate that an error occurred during printing, and test for error. */ static inline void d_print_error (struct d_print_info *dpi) { dpi->demangle_failure = 1; } static inline int d_print_saw_error (struct d_print_info *dpi) { return dpi->demangle_failure != 0; } /* Flush buffered characters to the callback. */ static inline void d_print_flush (struct d_print_info *dpi) { dpi->buf[dpi->len] = '\0'; dpi->callback (dpi->buf, dpi->len, dpi->opaque); dpi->len = 0; } /* Append characters and buffers for printing. */ static inline void d_append_char (struct d_print_info *dpi, char c) { if (dpi->len == sizeof (dpi->buf) - 1) d_print_flush (dpi); dpi->buf[dpi->len++] = c; dpi->last_char = c; } static inline void d_append_buffer (struct d_print_info *dpi, const char *s, size_t l) { size_t i; for (i = 0; i < l; i++) d_append_char (dpi, s[i]); } static inline void d_append_string (struct d_print_info *dpi, const char *s) { d_append_buffer (dpi, s, strlen (s)); } static inline char d_last_char (struct d_print_info *dpi) { return dpi->last_char; } /* Turn components into a human readable string. OPTIONS is the options bits passed to the demangler. DC is the tree to print. CALLBACK is a function to call to flush demangled string segments as they fill the intermediate buffer, and OPAQUE is a generalized callback argument. On success, this returns 1. On failure, it returns 0, indicating a bad parse. It does not use heap memory to build an output string, so cannot encounter memory allocation failure. */ CP_STATIC_IF_GLIBCPP_V3 int cplus_demangle_print_callback (int options, const struct demangle_component *dc, demangle_callbackref callback, void *opaque) { struct d_print_info dpi; d_print_init (&dpi, options, callback, opaque); d_print_comp (&dpi, dc); d_print_flush (&dpi); return ! d_print_saw_error (&dpi); } /* Turn components into a human readable string. OPTIONS is the options bits passed to the demangler. DC is the tree to print. ESTIMATE is a guess at the length of the result. This returns a string allocated by malloc, or NULL on error. On success, this sets *PALC to the size of the allocated buffer. On failure, this sets *PALC to 0 for a bad parse, or to 1 for a memory allocation failure. */ CP_STATIC_IF_GLIBCPP_V3 char * cplus_demangle_print (int options, const struct demangle_component *dc, int estimate, size_t *palc) { struct d_growable_string dgs; d_growable_string_init (&dgs, estimate); if (! cplus_demangle_print_callback (options, dc, d_growable_string_callback_adapter, &dgs)) { free (dgs.buf); *palc = 0; return NULL; } *palc = dgs.allocation_failure ? 1 : dgs.alc; return dgs.buf; } /* Subroutine to handle components. */ static void d_print_comp (struct d_print_info *dpi, const struct demangle_component *dc) { if (dc == NULL) { d_print_error (dpi); return; } if (d_print_saw_error (dpi)) return; switch (dc->type) { case DEMANGLE_COMPONENT_NAME: if ((dpi->options & DMGL_JAVA) == 0) d_append_buffer (dpi, dc->u.s_name.s, dc->u.s_name.len); else d_print_java_identifier (dpi, dc->u.s_name.s, dc->u.s_name.len); return; case DEMANGLE_COMPONENT_QUAL_NAME: case DEMANGLE_COMPONENT_LOCAL_NAME: d_print_comp (dpi, d_left (dc)); if ((dpi->options & DMGL_JAVA) == 0) d_append_string (dpi, "::"); else d_append_char (dpi, '.'); d_print_comp (dpi, d_right (dc)); return; case DEMANGLE_COMPONENT_TYPED_NAME: { struct d_print_mod *hold_modifiers; struct demangle_component *typed_name; struct d_print_mod adpm[4]; unsigned int i; struct d_print_template dpt; /* Pass the name down to the type so that it can be printed in the right place for the type. We also have to pass down any CV-qualifiers, which apply to the this parameter. */ hold_modifiers = dpi->modifiers; i = 0; typed_name = d_left (dc); while (typed_name != NULL) { if (i >= sizeof adpm / sizeof adpm[0]) { d_print_error (dpi); return; } adpm[i].next = dpi->modifiers; dpi->modifiers = &adpm[i]; adpm[i].mod = typed_name; adpm[i].printed = 0; adpm[i].templates = dpi->templates; ++i; if (typed_name->type != DEMANGLE_COMPONENT_RESTRICT_THIS && typed_name->type != DEMANGLE_COMPONENT_VOLATILE_THIS && typed_name->type != DEMANGLE_COMPONENT_CONST_THIS) break; typed_name = d_left (typed_name); } if (typed_name == NULL) { d_print_error (dpi); return; } /* If typed_name is a template, then it applies to the function type as well. */ if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE) { dpt.next = dpi->templates; dpi->templates = &dpt; dpt.template_decl = typed_name; } /* If typed_name is a DEMANGLE_COMPONENT_LOCAL_NAME, then there may be CV-qualifiers on its right argument which really apply here; this happens when parsing a class which is local to a function. */ if (typed_name->type == DEMANGLE_COMPONENT_LOCAL_NAME) { struct demangle_component *local_name; local_name = d_right (typed_name); while (local_name->type == DEMANGLE_COMPONENT_RESTRICT_THIS || local_name->type == DEMANGLE_COMPONENT_VOLATILE_THIS || local_name->type == DEMANGLE_COMPONENT_CONST_THIS) { if (i >= sizeof adpm / sizeof adpm[0]) { d_print_error (dpi); return; } adpm[i] = adpm[i - 1]; adpm[i].next = &adpm[i - 1]; dpi->modifiers = &adpm[i]; adpm[i - 1].mod = local_name; adpm[i - 1].printed = 0; adpm[i - 1].templates = dpi->templates; ++i; local_name = d_left (local_name); } } d_print_comp (dpi, d_right (dc)); if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE) dpi->templates = dpt.next; /* If the modifiers didn't get printed by the type, print them now. */ while (i > 0) { --i; if (! adpm[i].printed) { d_append_char (dpi, ' '); d_print_mod (dpi, adpm[i].mod); } } dpi->modifiers = hold_modifiers; return; } case DEMANGLE_COMPONENT_TEMPLATE: { struct d_print_mod *hold_dpm; struct demangle_component *dcl; /* Don't push modifiers into a template definition. Doing so could give the wrong definition for a template argument. Instead, treat the template essentially as a name. */ hold_dpm = dpi->modifiers; dpi->modifiers = NULL; dcl = d_left (dc); if ((dpi->options & DMGL_JAVA) != 0 && dcl->type == DEMANGLE_COMPONENT_NAME && dcl->u.s_name.len == 6 && strncmp (dcl->u.s_name.s, "JArray", 6) == 0) { /* Special-case Java arrays, so that JArray appears instead as TYPE[]. */ d_print_comp (dpi, d_right (dc)); d_append_string (dpi, "[]"); } else { d_print_comp (dpi, dcl); if (d_last_char (dpi) == '<') d_append_char (dpi, ' '); d_append_char (dpi, '<'); d_print_comp (dpi, d_right (dc)); /* Avoid generating two consecutive '>' characters, to avoid the C++ syntactic ambiguity. */ if (d_last_char (dpi) == '>') d_append_char (dpi, ' '); d_append_char (dpi, '>'); } dpi->modifiers = hold_dpm; return; } case DEMANGLE_COMPONENT_TEMPLATE_PARAM: { long i; struct demangle_component *a; struct d_print_template *hold_dpt; if (dpi->templates == NULL) { d_print_error (dpi); return; } i = dc->u.s_number.number; for (a = d_right (dpi->templates->template_decl); a != NULL; a = d_right (a)) { if (a->type != DEMANGLE_COMPONENT_TEMPLATE_ARGLIST) { d_print_error (dpi); return; } if (i <= 0) break; --i; } if (i != 0 || a == NULL) { d_print_error (dpi); return; } /* While processing this parameter, we need to pop the list of templates. This is because the template parameter may itself be a reference to a parameter of an outer template. */ hold_dpt = dpi->templates; dpi->templates = hold_dpt->next; d_print_comp (dpi, d_left (a)); dpi->templates = hold_dpt; return; } case DEMANGLE_COMPONENT_CTOR: d_print_comp (dpi, dc->u.s_ctor.name); return; case DEMANGLE_COMPONENT_DTOR: d_append_char (dpi, '~'); d_print_comp (dpi, dc->u.s_dtor.name); return; case DEMANGLE_COMPONENT_VTABLE: d_append_string (dpi, "vtable for "); d_print_comp (dpi, d_left (dc)); return; case DEMANGLE_COMPONENT_VTT: d_append_string (dpi, "VTT for "); d_print_comp (dpi, d_left (dc)); return; case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE: d_append_string (dpi, "construction vtable for "); d_print_comp (dpi, d_left (dc)); d_append_string (dpi, "-in-"); d_print_comp (dpi, d_right (dc)); return; case DEMANGLE_COMPONENT_TYPEINFO: d_append_string (dpi, "typeinfo for "); d_print_comp (dpi, d_left (dc)); return; case DEMANGLE_COMPONENT_TYPEINFO_NAME: d_append_string (dpi, "typeinfo name for "); d_print_comp (dpi, d_left (dc)); return; case DEMANGLE_COMPONENT_TYPEINFO_FN: d_append_string (dpi, "typeinfo fn for "); d_print_comp (dpi, d_left (dc)); return; case DEMANGLE_COMPONENT_THUNK: d_append_string (dpi, "non-virtual thunk to "); d_print_comp (dpi, d_left (dc)); return; case DEMANGLE_COMPONENT_VIRTUAL_THUNK: d_append_string (dpi, "virtual thunk to "); d_print_comp (dpi, d_left (dc)); return; case DEMANGLE_COMPONENT_COVARIANT_THUNK: d_append_string (dpi, "covariant return thunk to "); d_print_comp (dpi, d_left (dc)); return; case DEMANGLE_COMPONENT_JAVA_CLASS: d_append_string (dpi, "java Class for "); d_print_comp (dpi, d_left (dc)); return; case DEMANGLE_COMPONENT_GUARD: d_append_string (dpi, "guard variable for "); d_print_comp (dpi, d_left (dc)); return; case DEMANGLE_COMPONENT_REFTEMP: d_append_string (dpi, "reference temporary for "); d_print_comp (dpi, d_left (dc)); return; case DEMANGLE_COMPONENT_HIDDEN_ALIAS: d_append_string (dpi, "hidden alias for "); d_print_comp (dpi, d_left (dc)); return; case DEMANGLE_COMPONENT_SUB_STD: d_append_buffer (dpi, dc->u.s_string.string, dc->u.s_string.len); return; case DEMANGLE_COMPONENT_RESTRICT: case DEMANGLE_COMPONENT_VOLATILE: case DEMANGLE_COMPONENT_CONST: { struct d_print_mod *pdpm; /* When printing arrays, it's possible to have cases where the same CV-qualifier gets pushed on the stack multiple times. We only need to print it once. */ for (pdpm = dpi->modifiers; pdpm != NULL; pdpm = pdpm->next) { if (! pdpm->printed) { if (pdpm->mod->type != DEMANGLE_COMPONENT_RESTRICT && pdpm->mod->type != DEMANGLE_COMPONENT_VOLATILE && pdpm->mod->type != DEMANGLE_COMPONENT_CONST) break; if (pdpm->mod->type == dc->type) { d_print_comp (dpi, d_left (dc)); return; } } } } /* Fall through. */ case DEMANGLE_COMPONENT_RESTRICT_THIS: case DEMANGLE_COMPONENT_VOLATILE_THIS: case DEMANGLE_COMPONENT_CONST_THIS: case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: case DEMANGLE_COMPONENT_POINTER: case DEMANGLE_COMPONENT_REFERENCE: case DEMANGLE_COMPONENT_RVALUE_REFERENCE: case DEMANGLE_COMPONENT_COMPLEX: case DEMANGLE_COMPONENT_IMAGINARY: { /* We keep a list of modifiers on the stack. */ struct d_print_mod dpm; dpm.next = dpi->modifiers; dpi->modifiers = &dpm; dpm.mod = dc; dpm.printed = 0; dpm.templates = dpi->templates; d_print_comp (dpi, d_left (dc)); /* If the modifier didn't get printed by the type, print it now. */ if (! dpm.printed) d_print_mod (dpi, dc); dpi->modifiers = dpm.next; return; } case DEMANGLE_COMPONENT_BUILTIN_TYPE: if ((dpi->options & DMGL_JAVA) == 0) d_append_buffer (dpi, dc->u.s_builtin.type->name, dc->u.s_builtin.type->len); else d_append_buffer (dpi, dc->u.s_builtin.type->java_name, dc->u.s_builtin.type->java_len); return; case DEMANGLE_COMPONENT_VENDOR_TYPE: d_print_comp (dpi, d_left (dc)); return; case DEMANGLE_COMPONENT_FUNCTION_TYPE: { if ((dpi->options & DMGL_RET_POSTFIX) != 0) d_print_function_type (dpi, dc, dpi->modifiers); /* Print return type if present */ if (d_left (dc) != NULL) { struct d_print_mod dpm; /* We must pass this type down as a modifier in order to print it in the right location. */ dpm.next = dpi->modifiers; dpi->modifiers = &dpm; dpm.mod = dc; dpm.printed = 0; dpm.templates = dpi->templates; d_print_comp (dpi, d_left (dc)); dpi->modifiers = dpm.next; if (dpm.printed) return; /* In standard prefix notation, there is a space between the return type and the function signature. */ if ((dpi->options & DMGL_RET_POSTFIX) == 0) d_append_char (dpi, ' '); } if ((dpi->options & DMGL_RET_POSTFIX) == 0) d_print_function_type (dpi, dc, dpi->modifiers); return; } case DEMANGLE_COMPONENT_ARRAY_TYPE: { struct d_print_mod *hold_modifiers; struct d_print_mod adpm[4]; unsigned int i; struct d_print_mod *pdpm; /* We must pass this type down as a modifier in order to print multi-dimensional arrays correctly. If the array itself is CV-qualified, we act as though the element type were CV-qualified. We do this by copying the modifiers down rather than fiddling pointers, so that we don't wind up with a d_print_mod higher on the stack pointing into our stack frame after we return. */ hold_modifiers = dpi->modifiers; adpm[0].next = hold_modifiers; dpi->modifiers = &adpm[0]; adpm[0].mod = dc; adpm[0].printed = 0; adpm[0].templates = dpi->templates; i = 1; pdpm = hold_modifiers; while (pdpm != NULL && (pdpm->mod->type == DEMANGLE_COMPONENT_RESTRICT || pdpm->mod->type == DEMANGLE_COMPONENT_VOLATILE || pdpm->mod->type == DEMANGLE_COMPONENT_CONST)) { if (! pdpm->printed) { if (i >= sizeof adpm / sizeof adpm[0]) { d_print_error (dpi); return; } adpm[i] = *pdpm; adpm[i].next = dpi->modifiers; dpi->modifiers = &adpm[i]; pdpm->printed = 1; ++i; } pdpm = pdpm->next; } d_print_comp (dpi, d_right (dc)); dpi->modifiers = hold_modifiers; if (adpm[0].printed) return; while (i > 1) { --i; d_print_mod (dpi, adpm[i].mod); } d_print_array_type (dpi, dc, dpi->modifiers); return; } case DEMANGLE_COMPONENT_PTRMEM_TYPE: { struct d_print_mod dpm; dpm.next = dpi->modifiers; dpi->modifiers = &dpm; dpm.mod = dc; dpm.printed = 0; dpm.templates = dpi->templates; d_print_comp (dpi, d_right (dc)); /* If the modifier didn't get printed by the type, print it now. */ if (! dpm.printed) { d_append_char (dpi, ' '); d_print_comp (dpi, d_left (dc)); d_append_string (dpi, "::*"); } dpi->modifiers = dpm.next; return; } case DEMANGLE_COMPONENT_ARGLIST: case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST: d_print_comp (dpi, d_left (dc)); if (d_right (dc) != NULL) { d_append_string (dpi, ", "); d_print_comp (dpi, d_right (dc)); } return; case DEMANGLE_COMPONENT_OPERATOR: { char c; d_append_string (dpi, "operator"); c = dc->u.s_operator.op->name[0]; if (IS_LOWER (c)) d_append_char (dpi, ' '); d_append_buffer (dpi, dc->u.s_operator.op->name, dc->u.s_operator.op->len); return; } case DEMANGLE_COMPONENT_EXTENDED_OPERATOR: d_append_string (dpi, "operator "); d_print_comp (dpi, dc->u.s_extended_operator.name); return; case DEMANGLE_COMPONENT_CAST: d_append_string (dpi, "operator "); d_print_cast (dpi, dc); return; case DEMANGLE_COMPONENT_UNARY: if (d_left (dc)->type != DEMANGLE_COMPONENT_CAST) d_print_expr_op (dpi, d_left (dc)); else { d_append_char (dpi, '('); d_print_cast (dpi, d_left (dc)); d_append_char (dpi, ')'); } d_append_char (dpi, '('); d_print_comp (dpi, d_right (dc)); d_append_char (dpi, ')'); return; case DEMANGLE_COMPONENT_BINARY: if (d_right (dc)->type != DEMANGLE_COMPONENT_BINARY_ARGS) { d_print_error (dpi); return; } /* We wrap an expression which uses the greater-than operator in an extra layer of parens so that it does not get confused with the '>' which ends the template parameters. */ if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR && d_left (dc)->u.s_operator.op->len == 1 && d_left (dc)->u.s_operator.op->name[0] == '>') d_append_char (dpi, '('); d_append_char (dpi, '('); d_print_comp (dpi, d_left (d_right (dc))); d_append_string (dpi, ") "); d_print_expr_op (dpi, d_left (dc)); d_append_string (dpi, " ("); d_print_comp (dpi, d_right (d_right (dc))); d_append_char (dpi, ')'); if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR && d_left (dc)->u.s_operator.op->len == 1 && d_left (dc)->u.s_operator.op->name[0] == '>') d_append_char (dpi, ')'); return; case DEMANGLE_COMPONENT_BINARY_ARGS: /* We should only see this as part of DEMANGLE_COMPONENT_BINARY. */ d_print_error (dpi); return; case DEMANGLE_COMPONENT_TRINARY: if (d_right (dc)->type != DEMANGLE_COMPONENT_TRINARY_ARG1 || d_right (d_right (dc))->type != DEMANGLE_COMPONENT_TRINARY_ARG2) { d_print_error (dpi); return; } d_append_char (dpi, '('); d_print_comp (dpi, d_left (d_right (dc))); d_append_string (dpi, ") "); d_print_expr_op (dpi, d_left (dc)); d_append_string (dpi, " ("); d_print_comp (dpi, d_left (d_right (d_right (dc)))); d_append_string (dpi, ") : ("); d_print_comp (dpi, d_right (d_right (d_right (dc)))); d_append_char (dpi, ')'); return; case DEMANGLE_COMPONENT_TRINARY_ARG1: case DEMANGLE_COMPONENT_TRINARY_ARG2: /* We should only see these are part of DEMANGLE_COMPONENT_TRINARY. */ d_print_error (dpi); return; case DEMANGLE_COMPONENT_LITERAL: case DEMANGLE_COMPONENT_LITERAL_NEG: { enum d_builtin_type_print tp; /* For some builtin types, produce simpler output. */ tp = D_PRINT_DEFAULT; if (d_left (dc)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE) { tp = d_left (dc)->u.s_builtin.type->print; switch (tp) { case D_PRINT_INT: case D_PRINT_UNSIGNED: case D_PRINT_LONG: case D_PRINT_UNSIGNED_LONG: case D_PRINT_LONG_LONG: case D_PRINT_UNSIGNED_LONG_LONG: if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME) { if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG) d_append_char (dpi, '-'); d_print_comp (dpi, d_right (dc)); switch (tp) { default: break; case D_PRINT_UNSIGNED: d_append_char (dpi, 'u'); break; case D_PRINT_LONG: d_append_char (dpi, 'l'); break; case D_PRINT_UNSIGNED_LONG: d_append_string (dpi, "ul"); break; case D_PRINT_LONG_LONG: d_append_string (dpi, "ll"); break; case D_PRINT_UNSIGNED_LONG_LONG: d_append_string (dpi, "ull"); break; } return; } break; case D_PRINT_BOOL: if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME && d_right (dc)->u.s_name.len == 1 && dc->type == DEMANGLE_COMPONENT_LITERAL) { switch (d_right (dc)->u.s_name.s[0]) { case '0': d_append_string (dpi, "false"); return; case '1': d_append_string (dpi, "true"); return; default: break; } } break; default: break; } } d_append_char (dpi, '('); d_print_comp (dpi, d_left (dc)); d_append_char (dpi, ')'); if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG) d_append_char (dpi, '-'); if (tp == D_PRINT_FLOAT) d_append_char (dpi, '['); d_print_comp (dpi, d_right (dc)); if (tp == D_PRINT_FLOAT) d_append_char (dpi, ']'); } return; default: d_print_error (dpi); return; } } /* Print a Java dentifier. For Java we try to handle encoded extended Unicode characters. The C++ ABI doesn't mention Unicode encoding, so we don't it for C++. Characters are encoded as __U+_. */ static void d_print_java_identifier (struct d_print_info *dpi, const char *name, int len) { const char *p; const char *end; end = name + len; for (p = name; p < end; ++p) { if (end - p > 3 && p[0] == '_' && p[1] == '_' && p[2] == 'U') { unsigned long c; const char *q; c = 0; for (q = p + 3; q < end; ++q) { int dig; if (IS_DIGIT (*q)) dig = *q - '0'; else if (*q >= 'A' && *q <= 'F') dig = *q - 'A' + 10; else if (*q >= 'a' && *q <= 'f') dig = *q - 'a' + 10; else break; c = c * 16 + dig; } /* If the Unicode character is larger than 256, we don't try to deal with it here. FIXME. */ if (q < end && *q == '_' && c < 256) { d_append_char (dpi, c); p = q; continue; } } d_append_char (dpi, *p); } } /* Print a list of modifiers. SUFFIX is 1 if we are printing qualifiers on this after printing a function. */ static void d_print_mod_list (struct d_print_info *dpi, struct d_print_mod *mods, int suffix) { struct d_print_template *hold_dpt; if (mods == NULL || d_print_saw_error (dpi)) return; if (mods->printed || (! suffix && (mods->mod->type == DEMANGLE_COMPONENT_RESTRICT_THIS || mods->mod->type == DEMANGLE_COMPONENT_VOLATILE_THIS || mods->mod->type == DEMANGLE_COMPONENT_CONST_THIS))) { d_print_mod_list (dpi, mods->next, suffix); return; } mods->printed = 1; hold_dpt = dpi->templates; dpi->templates = mods->templates; if (mods->mod->type == DEMANGLE_COMPONENT_FUNCTION_TYPE) { d_print_function_type (dpi, mods->mod, mods->next); dpi->templates = hold_dpt; return; } else if (mods->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE) { d_print_array_type (dpi, mods->mod, mods->next); dpi->templates = hold_dpt; return; } else if (mods->mod->type == DEMANGLE_COMPONENT_LOCAL_NAME) { struct d_print_mod *hold_modifiers; struct demangle_component *dc; /* When this is on the modifier stack, we have pulled any qualifiers off the right argument already. Otherwise, we print it as usual, but don't let the left argument see any modifiers. */ hold_modifiers = dpi->modifiers; dpi->modifiers = NULL; d_print_comp (dpi, d_left (mods->mod)); dpi->modifiers = hold_modifiers; if ((dpi->options & DMGL_JAVA) == 0) d_append_string (dpi, "::"); else d_append_char (dpi, '.'); dc = d_right (mods->mod); while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS || dc->type == DEMANGLE_COMPONENT_CONST_THIS) dc = d_left (dc); d_print_comp (dpi, dc); dpi->templates = hold_dpt; return; } d_print_mod (dpi, mods->mod); dpi->templates = hold_dpt; d_print_mod_list (dpi, mods->next, suffix); } /* Print a modifier. */ static void d_print_mod (struct d_print_info *dpi, const struct demangle_component *mod) { switch (mod->type) { case DEMANGLE_COMPONENT_RESTRICT: case DEMANGLE_COMPONENT_RESTRICT_THIS: d_append_string (dpi, " restrict"); return; case DEMANGLE_COMPONENT_VOLATILE: case DEMANGLE_COMPONENT_VOLATILE_THIS: d_append_string (dpi, " volatile"); return; case DEMANGLE_COMPONENT_CONST: case DEMANGLE_COMPONENT_CONST_THIS: d_append_string (dpi, " const"); return; case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: d_append_char (dpi, ' '); d_print_comp (dpi, d_right (mod)); return; case DEMANGLE_COMPONENT_POINTER: /* There is no pointer symbol in Java. */ if ((dpi->options & DMGL_JAVA) == 0) d_append_char (dpi, '*'); return; case DEMANGLE_COMPONENT_REFERENCE: d_append_char (dpi, '&'); return; case DEMANGLE_COMPONENT_RVALUE_REFERENCE: d_append_string (dpi, "&&"); return; case DEMANGLE_COMPONENT_COMPLEX: d_append_string (dpi, "complex "); return; case DEMANGLE_COMPONENT_IMAGINARY: d_append_string (dpi, "imaginary "); return; case DEMANGLE_COMPONENT_PTRMEM_TYPE: if (d_last_char (dpi) != '(') d_append_char (dpi, ' '); d_print_comp (dpi, d_left (mod)); d_append_string (dpi, "::*"); return; case DEMANGLE_COMPONENT_TYPED_NAME: d_print_comp (dpi, d_left (mod)); return; default: /* Otherwise, we have something that won't go back on the modifier stack, so we can just print it. */ d_print_comp (dpi, mod); return; } } /* Print a function type, except for the return type. */ static void d_print_function_type (struct d_print_info *dpi, const struct demangle_component *dc, struct d_print_mod *mods) { int need_paren; int saw_mod; int need_space; struct d_print_mod *p; struct d_print_mod *hold_modifiers; need_paren = 0; saw_mod = 0; need_space = 0; for (p = mods; p != NULL; p = p->next) { if (p->printed) break; saw_mod = 1; switch (p->mod->type) { case DEMANGLE_COMPONENT_POINTER: case DEMANGLE_COMPONENT_REFERENCE: case DEMANGLE_COMPONENT_RVALUE_REFERENCE: need_paren = 1; break; case DEMANGLE_COMPONENT_RESTRICT: case DEMANGLE_COMPONENT_VOLATILE: case DEMANGLE_COMPONENT_CONST: case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: case DEMANGLE_COMPONENT_COMPLEX: case DEMANGLE_COMPONENT_IMAGINARY: case DEMANGLE_COMPONENT_PTRMEM_TYPE: need_space = 1; need_paren = 1; break; case DEMANGLE_COMPONENT_RESTRICT_THIS: case DEMANGLE_COMPONENT_VOLATILE_THIS: case DEMANGLE_COMPONENT_CONST_THIS: break; default: break; } if (need_paren) break; } if (d_left (dc) != NULL && ! saw_mod) need_paren = 1; if (need_paren) { if (! need_space) { if (d_last_char (dpi) != '(' && d_last_char (dpi) != '*') need_space = 1; } if (need_space && d_last_char (dpi) != ' ') d_append_char (dpi, ' '); d_append_char (dpi, '('); } hold_modifiers = dpi->modifiers; dpi->modifiers = NULL; d_print_mod_list (dpi, mods, 0); if (need_paren) d_append_char (dpi, ')'); d_append_char (dpi, '('); if (d_right (dc) != NULL) d_print_comp (dpi, d_right (dc)); d_append_char (dpi, ')'); d_print_mod_list (dpi, mods, 1); dpi->modifiers = hold_modifiers; } /* Print an array type, except for the element type. */ static void d_print_array_type (struct d_print_info *dpi, const struct demangle_component *dc, struct d_print_mod *mods) { int need_space; need_space = 1; if (mods != NULL) { int need_paren; struct d_print_mod *p; need_paren = 0; for (p = mods; p != NULL; p = p->next) { if (! p->printed) { if (p->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE) { need_space = 0; break; } else { need_paren = 1; need_space = 1; break; } } } if (need_paren) d_append_string (dpi, " ("); d_print_mod_list (dpi, mods, 0); if (need_paren) d_append_char (dpi, ')'); } if (need_space) d_append_char (dpi, ' '); d_append_char (dpi, '['); if (d_left (dc) != NULL) d_print_comp (dpi, d_left (dc)); d_append_char (dpi, ']'); } /* Print an operator in an expression. */ static void d_print_expr_op (struct d_print_info *dpi, const struct demangle_component *dc) { if (dc->type == DEMANGLE_COMPONENT_OPERATOR) d_append_buffer (dpi, dc->u.s_operator.op->name, dc->u.s_operator.op->len); else d_print_comp (dpi, dc); } /* Print a cast. */ static void d_print_cast (struct d_print_info *dpi, const struct demangle_component *dc) { if (d_left (dc)->type != DEMANGLE_COMPONENT_TEMPLATE) d_print_comp (dpi, d_left (dc)); else { struct d_print_mod *hold_dpm; struct d_print_template dpt; /* It appears that for a templated cast operator, we need to put the template parameters in scope for the operator name, but not for the parameters. The effect is that we need to handle the template printing here. */ hold_dpm = dpi->modifiers; dpi->modifiers = NULL; dpt.next = dpi->templates; dpi->templates = &dpt; dpt.template_decl = d_left (dc); d_print_comp (dpi, d_left (d_left (dc))); dpi->templates = dpt.next; if (d_last_char (dpi) == '<') d_append_char (dpi, ' '); d_append_char (dpi, '<'); d_print_comp (dpi, d_right (d_left (dc))); /* Avoid generating two consecutive '>' characters, to avoid the C++ syntactic ambiguity. */ if (d_last_char (dpi) == '>') d_append_char (dpi, ' '); d_append_char (dpi, '>'); dpi->modifiers = hold_dpm; } } /* Initialize the information structure we use to pass around information. */ CP_STATIC_IF_GLIBCPP_V3 void cplus_demangle_init_info (const char *mangled, int options, size_t len, struct d_info *di) { di->s = mangled; di->send = mangled + len; di->options = options; di->n = mangled; /* We can not need more components than twice the number of chars in the mangled string. Most components correspond directly to chars, but the ARGLIST types are exceptions. */ di->num_comps = 2 * len; di->next_comp = 0; /* Similarly, we can not need more substitutions than there are chars in the mangled string. */ di->num_subs = len; di->next_sub = 0; di->did_subs = 0; di->last_name = NULL; di->expansion = 0; } /* Internal implementation for the demangler. If MANGLED is a g++ v3 ABI mangled name, return strings in repeated callback giving the demangled name. OPTIONS is the usual libiberty demangler options. On success, this returns 1. On failure, returns 0. */ static int d_demangle_callback (const char *mangled, int options, demangle_callbackref callback, void *opaque) { int type; struct d_info di; struct demangle_component *dc; int status; if (mangled[0] == '_' && mangled[1] == 'Z') type = 0; else if (strncmp (mangled, "_GLOBAL_", 8) == 0 && (mangled[8] == '.' || mangled[8] == '_' || mangled[8] == '$') && (mangled[9] == 'D' || mangled[9] == 'I') && mangled[10] == '_') { const char *intro; intro = (mangled[9] == 'I') ? "global constructors keyed to " : "global destructors keyed to "; callback (intro, strlen (intro), opaque); callback (mangled + 11, strlen (mangled + 11), opaque); return 1; } else { if ((options & DMGL_TYPES) == 0) return 0; type = 1; } cplus_demangle_init_info (mangled, options, strlen (mangled), &di); { #ifdef CP_DYNAMIC_ARRAYS __extension__ struct demangle_component comps[di.num_comps]; __extension__ struct demangle_component *subs[di.num_subs]; di.comps = comps; di.subs = subs; #else di.comps = alloca (di.num_comps * sizeof (*di.comps)); di.subs = alloca (di.num_subs * sizeof (*di.subs)); #endif if (type) dc = cplus_demangle_type (&di); else dc = cplus_demangle_mangled_name (&di, 1); /* If DMGL_PARAMS is set, then if we didn't consume the entire mangled string, then we didn't successfully demangle it. If DMGL_PARAMS is not set, we didn't look at the trailing parameters. */ if (((options & DMGL_PARAMS) != 0) && d_peek_char (&di) != '\0') dc = NULL; #ifdef CP_DEMANGLE_DEBUG d_dump (dc, 0); #endif status = (dc != NULL) ? cplus_demangle_print_callback (options, dc, callback, opaque) : 0; } return status; } /* Entry point for the demangler. If MANGLED is a g++ v3 ABI mangled name, return a buffer allocated with malloc holding the demangled name. OPTIONS is the usual libiberty demangler options. On success, this sets *PALC to the allocated size of the returned buffer. On failure, this sets *PALC to 0 for a bad name, or 1 for a memory allocation failure, and returns NULL. */ static char * d_demangle (const char *mangled, int options, size_t *palc) { struct d_growable_string dgs; int status; d_growable_string_init (&dgs, 0); status = d_demangle_callback (mangled, options, d_growable_string_callback_adapter, &dgs); if (status == 0) { free (dgs.buf); *palc = 0; return NULL; } *palc = dgs.allocation_failure ? 1 : 0; return dgs.buf; } #if defined(IN_LIBGCC2) || defined(IN_GLIBCPP_V3) extern char *__cxa_demangle (const char *, char *, size_t *, int *); /* ia64 ABI-mandated entry point in the C++ runtime library for performing demangling. MANGLED_NAME is a NUL-terminated character string containing the name to be demangled. OUTPUT_BUFFER is a region of memory, allocated with malloc, of *LENGTH bytes, into which the demangled name is stored. If OUTPUT_BUFFER is not long enough, it is expanded using realloc. OUTPUT_BUFFER may instead be NULL; in that case, the demangled name is placed in a region of memory allocated with malloc. If LENGTH is non-NULL, the length of the buffer containing the demangled name, is placed in *LENGTH. The return value is a pointer to the start of the NUL-terminated demangled name, or NULL if the demangling fails. The caller is responsible for deallocating this memory using free. *STATUS is set to one of the following values: 0: The demangling operation succeeded. -1: A memory allocation failure occurred. -2: MANGLED_NAME is not a valid name under the C++ ABI mangling rules. -3: One of the arguments is invalid. The demangling is performed using the C++ ABI mangling rules, with GNU extensions. */ char * __cxa_demangle (const char *mangled_name, char *output_buffer, size_t *length, int *status) { char *demangled; size_t alc; if (mangled_name == NULL) { if (status != NULL) *status = -3; return NULL; } if (output_buffer != NULL && length == NULL) { if (status != NULL) *status = -3; return NULL; } demangled = d_demangle (mangled_name, DMGL_PARAMS | DMGL_TYPES, &alc); if (demangled == NULL) { if (status != NULL) { if (alc == 1) *status = -1; else *status = -2; } return NULL; } if (output_buffer == NULL) { if (length != NULL) *length = alc; } else { if (strlen (demangled) < *length) { strcpy (output_buffer, demangled); free (demangled); demangled = output_buffer; } else { free (output_buffer); *length = alc; } } if (status != NULL) *status = 0; return demangled; } extern int __gcclibcxx_demangle_callback (const char *, void (*) (const char *, size_t, void *), void *); /* Alternative, allocationless entry point in the C++ runtime library for performing demangling. MANGLED_NAME is a NUL-terminated character string containing the name to be demangled. CALLBACK is a callback function, called with demangled string segments as demangling progresses; it is called at least once, but may be called more than once. OPAQUE is a generalized pointer used as a callback argument. The return code is one of the following values, equivalent to the STATUS values of __cxa_demangle() (excluding -1, since this function performs no memory allocations): 0: The demangling operation succeeded. -2: MANGLED_NAME is not a valid name under the C++ ABI mangling rules. -3: One of the arguments is invalid. The demangling is performed using the C++ ABI mangling rules, with GNU extensions. */ int __gcclibcxx_demangle_callback (const char *mangled_name, void (*callback) (const char *, size_t, void *), void *opaque) { int status; if (mangled_name == NULL || callback == NULL) return -3; status = d_demangle_callback (mangled_name, DMGL_PARAMS | DMGL_TYPES, callback, opaque); if (status == 0) return -2; return 0; } #else /* ! (IN_LIBGCC2 || IN_GLIBCPP_V3) */ /* Entry point for libiberty demangler. If MANGLED is a g++ v3 ABI mangled name, return a buffer allocated with malloc holding the demangled name. Otherwise, return NULL. */ char * cplus_demangle_v3 (const char *mangled, int options) { size_t alc; return d_demangle (mangled, options, &alc); } int cplus_demangle_v3_callback (const char *mangled, int options, demangle_callbackref callback, void *opaque) { return d_demangle_callback (mangled, options, callback, opaque); } /* Demangle a Java symbol. Java uses a subset of the V3 ABI C++ mangling conventions, but the output formatting is a little different. This instructs the C++ demangler not to emit pointer characters ("*"), to use Java's namespace separator symbol ("." instead of "::"), and to output JArray as TYPE[]. */ char * java_demangle_v3 (const char *mangled) { size_t alc; return d_demangle (mangled, DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX, &alc); } int java_demangle_v3_callback (const char *mangled, demangle_callbackref callback, void *opaque) { return d_demangle_callback (mangled, DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX, callback, opaque); } #endif /* IN_LIBGCC2 || IN_GLIBCPP_V3 */ #ifndef IN_GLIBCPP_V3 /* Demangle a string in order to find out whether it is a constructor or destructor. Return non-zero on success. Set *CTOR_KIND and *DTOR_KIND appropriately. */ static int is_ctor_or_dtor (const char *mangled, enum gnu_v3_ctor_kinds *ctor_kind, enum gnu_v3_dtor_kinds *dtor_kind) { struct d_info di; struct demangle_component *dc; int ret; *ctor_kind = (enum gnu_v3_ctor_kinds) 0; *dtor_kind = (enum gnu_v3_dtor_kinds) 0; cplus_demangle_init_info (mangled, DMGL_GNU_V3, strlen (mangled), &di); { #ifdef CP_DYNAMIC_ARRAYS __extension__ struct demangle_component comps[di.num_comps]; __extension__ struct demangle_component *subs[di.num_subs]; di.comps = comps; di.subs = subs; #else di.comps = alloca (di.num_comps * sizeof (*di.comps)); di.subs = alloca (di.num_subs * sizeof (*di.subs)); #endif dc = cplus_demangle_mangled_name (&di, 1); /* Note that because we did not pass DMGL_PARAMS, we don't expect to demangle the entire string. */ ret = 0; while (dc != NULL) { switch (dc->type) { default: dc = NULL; break; case DEMANGLE_COMPONENT_TYPED_NAME: case DEMANGLE_COMPONENT_TEMPLATE: case DEMANGLE_COMPONENT_RESTRICT_THIS: case DEMANGLE_COMPONENT_VOLATILE_THIS: case DEMANGLE_COMPONENT_CONST_THIS: dc = d_left (dc); break; case DEMANGLE_COMPONENT_QUAL_NAME: case DEMANGLE_COMPONENT_LOCAL_NAME: dc = d_right (dc); break; case DEMANGLE_COMPONENT_CTOR: *ctor_kind = dc->u.s_ctor.kind; ret = 1; dc = NULL; break; case DEMANGLE_COMPONENT_DTOR: *dtor_kind = dc->u.s_dtor.kind; ret = 1; dc = NULL; break; } } } return ret; } /* Return whether NAME is the mangled form of a g++ V3 ABI constructor name. A non-zero return indicates the type of constructor. */ enum gnu_v3_ctor_kinds is_gnu_v3_mangled_ctor (const char *name) { enum gnu_v3_ctor_kinds ctor_kind; enum gnu_v3_dtor_kinds dtor_kind; if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind)) return (enum gnu_v3_ctor_kinds) 0; return ctor_kind; } /* Return whether NAME is the mangled form of a g++ V3 ABI destructor name. A non-zero return indicates the type of destructor. */ enum gnu_v3_dtor_kinds is_gnu_v3_mangled_dtor (const char *name) { enum gnu_v3_ctor_kinds ctor_kind; enum gnu_v3_dtor_kinds dtor_kind; if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind)) return (enum gnu_v3_dtor_kinds) 0; return dtor_kind; } #endif /* IN_GLIBCPP_V3 */ #ifdef STANDALONE_DEMANGLER #include "getopt.h" #include "dyn-string.h" static void print_usage (FILE* fp, int exit_value); #define IS_ALPHA(CHAR) \ (((CHAR) >= 'a' && (CHAR) <= 'z') \ || ((CHAR) >= 'A' && (CHAR) <= 'Z')) /* Non-zero if CHAR is a character than can occur in a mangled name. */ #define is_mangled_char(CHAR) \ (IS_ALPHA (CHAR) || IS_DIGIT (CHAR) \ || (CHAR) == '_' || (CHAR) == '.' || (CHAR) == '$') /* The name of this program, as invoked. */ const char* program_name; /* Prints usage summary to FP and then exits with EXIT_VALUE. */ static void print_usage (FILE* fp, int exit_value) { fprintf (fp, "Usage: %s [options] [names ...]\n", program_name); fprintf (fp, "Options:\n"); fprintf (fp, " -h,--help Display this message.\n"); fprintf (fp, " -p,--no-params Don't display function parameters\n"); fprintf (fp, " -v,--verbose Produce verbose demanglings.\n"); fprintf (fp, "If names are provided, they are demangled. Otherwise filters standard input.\n"); exit (exit_value); } /* Option specification for getopt_long. */ static const struct option long_options[] = { { "help", no_argument, NULL, 'h' }, { "no-params", no_argument, NULL, 'p' }, { "verbose", no_argument, NULL, 'v' }, { NULL, no_argument, NULL, 0 }, }; /* Main entry for a demangling filter executable. It will demangle its command line arguments, if any. If none are provided, it will filter stdin to stdout, replacing any recognized mangled C++ names with their demangled equivalents. */ int main (int argc, char *argv[]) { int i; int opt_char; int options = DMGL_PARAMS | DMGL_ANSI | DMGL_TYPES; /* Use the program name of this program, as invoked. */ program_name = argv[0]; /* Parse options. */ do { opt_char = getopt_long (argc, argv, "hpv", long_options, NULL); switch (opt_char) { case '?': /* Unrecognized option. */ print_usage (stderr, 1); break; case 'h': print_usage (stdout, 0); break; case 'p': options &= ~ DMGL_PARAMS; break; case 'v': options |= DMGL_VERBOSE; break; } } while (opt_char != -1); if (optind == argc) /* No command line arguments were provided. Filter stdin. */ { dyn_string_t mangled = dyn_string_new (3); char *s; /* Read all of input. */ while (!feof (stdin)) { char c; /* Pile characters into mangled until we hit one that can't occur in a mangled name. */ c = getchar (); while (!feof (stdin) && is_mangled_char (c)) { dyn_string_append_char (mangled, c); if (feof (stdin)) break; c = getchar (); } if (dyn_string_length (mangled) > 0) { #ifdef IN_GLIBCPP_V3 s = __cxa_demangle (dyn_string_buf (mangled), NULL, NULL, NULL); #else s = cplus_demangle_v3 (dyn_string_buf (mangled), options); #endif if (s != NULL) { fputs (s, stdout); free (s); } else { /* It might not have been a mangled name. Print the original text. */ fputs (dyn_string_buf (mangled), stdout); } dyn_string_clear (mangled); } /* If we haven't hit EOF yet, we've read one character that can't occur in a mangled name, so print it out. */ if (!feof (stdin)) putchar (c); } dyn_string_delete (mangled); } else /* Demangle command line arguments. */ { /* Loop over command line arguments. */ for (i = optind; i < argc; ++i) { char *s; #ifdef IN_GLIBCPP_V3 int status; #endif /* Attempt to demangle. */ #ifdef IN_GLIBCPP_V3 s = __cxa_demangle (argv[i], NULL, NULL, &status); #else s = cplus_demangle_v3 (argv[i], options); #endif /* If it worked, print the demangled name. */ if (s != NULL) { printf ("%s\n", s); free (s); } else { #ifdef IN_GLIBCPP_V3 fprintf (stderr, "Failed: %s (status %d)\n", argv[i], status); #else fprintf (stderr, "Failed: %s\n", argv[i]); #endif } } } return 0; } #endif /* STANDALONE_DEMANGLER */ nescc-1.3.4/libiberty/cp-demangle.h000066400000000000000000000125611177770303300171410ustar00rootroot00000000000000/* Internal demangler interface for g++ V3 ABI. Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. Written by Ian Lance Taylor . This file is part of the libiberty library, which is part of GCC. This file 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 of the License, or (at your option) any later version. In addition to the permissions in the GNU General Public License, the Free Software Foundation gives you unlimited permission to link the compiled version of this file into combinations with other programs, and to distribute those combinations without any restriction coming from the use of this file. (The General Public License restrictions do apply in other respects; for example, they cover modification of the file, and distribution when not linked into a combined executable.) This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* This file provides some definitions shared by cp-demangle.c and cp-demint.c. It should not be included by any other files. */ /* Information we keep for operators. */ struct demangle_operator_info { /* Mangled name. */ const char *code; /* Real name. */ const char *name; /* Length of real name. */ int len; /* Number of arguments. */ int args; }; /* How to print the value of a builtin type. */ enum d_builtin_type_print { /* Print as (type)val. */ D_PRINT_DEFAULT, /* Print as integer. */ D_PRINT_INT, /* Print as unsigned integer, with trailing "u". */ D_PRINT_UNSIGNED, /* Print as long, with trailing "l". */ D_PRINT_LONG, /* Print as unsigned long, with trailing "ul". */ D_PRINT_UNSIGNED_LONG, /* Print as long long, with trailing "ll". */ D_PRINT_LONG_LONG, /* Print as unsigned long long, with trailing "ull". */ D_PRINT_UNSIGNED_LONG_LONG, /* Print as bool. */ D_PRINT_BOOL, /* Print as float--put value in square brackets. */ D_PRINT_FLOAT, /* Print in usual way, but here to detect void. */ D_PRINT_VOID }; /* Information we keep for a builtin type. */ struct demangle_builtin_type_info { /* Type name. */ const char *name; /* Length of type name. */ int len; /* Type name when using Java. */ const char *java_name; /* Length of java name. */ int java_len; /* How to print a value of this type. */ enum d_builtin_type_print print; }; /* The information structure we pass around. */ struct d_info { /* The string we are demangling. */ const char *s; /* The end of the string we are demangling. */ const char *send; /* The options passed to the demangler. */ int options; /* The next character in the string to consider. */ const char *n; /* The array of components. */ struct demangle_component *comps; /* The index of the next available component. */ int next_comp; /* The number of available component structures. */ int num_comps; /* The array of substitutions. */ struct demangle_component **subs; /* The index of the next substitution. */ int next_sub; /* The number of available entries in the subs array. */ int num_subs; /* The number of substitutions which we actually made from the subs array, plus the number of template parameter references we saw. */ int did_subs; /* The last name we saw, for constructors and destructors. */ struct demangle_component *last_name; /* A running total of the length of large expansions from the mangled name to the demangled name, such as standard substitutions and builtin types. */ int expansion; }; /* To avoid running past the ending '\0', don't: - call d_peek_next_char if d_peek_char returned '\0' - call d_advance with an 'i' that is too large - call d_check_char(di, '\0') Everything else is safe. */ #define d_peek_char(di) (*((di)->n)) #define d_peek_next_char(di) ((di)->n[1]) #define d_advance(di, i) ((di)->n += (i)) #define d_check_char(di, c) (d_peek_char(di) == c ? ((di)->n++, 1) : 0) #define d_next_char(di) (d_peek_char(di) == '\0' ? '\0' : *((di)->n++)) #define d_str(di) ((di)->n) /* Functions and arrays in cp-demangle.c which are referenced by functions in cp-demint.c. */ #ifdef IN_GLIBCPP_V3 #define CP_STATIC_IF_GLIBCPP_V3 static #else #define CP_STATIC_IF_GLIBCPP_V3 extern #endif #ifndef IN_GLIBCPP_V3 extern const struct demangle_operator_info cplus_demangle_operators[]; #endif #define D_BUILTIN_TYPE_COUNT (26) CP_STATIC_IF_GLIBCPP_V3 const struct demangle_builtin_type_info cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT]; CP_STATIC_IF_GLIBCPP_V3 struct demangle_component * cplus_demangle_mangled_name (struct d_info *, int); CP_STATIC_IF_GLIBCPP_V3 struct demangle_component * cplus_demangle_type (struct d_info *); extern void cplus_demangle_init_info (const char *, int, size_t, struct d_info *); /* cp-demangle.c needs to define this a little differently */ #undef CP_STATIC_IF_GLIBCPP_V3 nescc-1.3.4/libiberty/cp-demint.c000066400000000000000000000155421177770303300166420ustar00rootroot00000000000000/* Demangler component interface functions. Copyright (C) 2004 Free Software Foundation, Inc. Written by Ian Lance Taylor . This file is part of the libiberty library, which is part of GCC. This file 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 of the License, or (at your option) any later version. In addition to the permissions in the GNU General Public License, the Free Software Foundation gives you unlimited permission to link the compiled version of this file into combinations with other programs, and to distribute those combinations without any restriction coming from the use of this file. (The General Public License restrictions do apply in other respects; for example, they cover modification of the file, and distribution when not linked into a combined executable.) This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* This file implements a few interface functions which are provided for use with struct demangle_component trees. These functions are declared in demangle.h. These functions are closely tied to the demangler code in cp-demangle.c, and other interface functions can be found in that file. We put these functions in a separate file because they are not needed by the demangler, and so we avoid having them pulled in by programs which only need the demangler. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #include "ansidecl.h" #include "libiberty.h" #include "demangle.h" #include "cp-demangle.h" /* Fill in most component types. */ int cplus_demangle_fill_component (struct demangle_component *p, enum demangle_component_type type, struct demangle_component *left, struct demangle_component *right) { if (p == NULL) return 0; switch (type) { case DEMANGLE_COMPONENT_QUAL_NAME: case DEMANGLE_COMPONENT_LOCAL_NAME: case DEMANGLE_COMPONENT_TYPED_NAME: case DEMANGLE_COMPONENT_TEMPLATE: case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE: case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: case DEMANGLE_COMPONENT_FUNCTION_TYPE: case DEMANGLE_COMPONENT_ARRAY_TYPE: case DEMANGLE_COMPONENT_PTRMEM_TYPE: case DEMANGLE_COMPONENT_ARGLIST: case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST: case DEMANGLE_COMPONENT_UNARY: case DEMANGLE_COMPONENT_BINARY: case DEMANGLE_COMPONENT_BINARY_ARGS: case DEMANGLE_COMPONENT_TRINARY: case DEMANGLE_COMPONENT_TRINARY_ARG1: case DEMANGLE_COMPONENT_TRINARY_ARG2: case DEMANGLE_COMPONENT_LITERAL: case DEMANGLE_COMPONENT_LITERAL_NEG: break; /* These component types only have one subtree. */ case DEMANGLE_COMPONENT_VTABLE: case DEMANGLE_COMPONENT_VTT: case DEMANGLE_COMPONENT_TYPEINFO: case DEMANGLE_COMPONENT_TYPEINFO_NAME: case DEMANGLE_COMPONENT_TYPEINFO_FN: case DEMANGLE_COMPONENT_THUNK: case DEMANGLE_COMPONENT_VIRTUAL_THUNK: case DEMANGLE_COMPONENT_COVARIANT_THUNK: case DEMANGLE_COMPONENT_JAVA_CLASS: case DEMANGLE_COMPONENT_GUARD: case DEMANGLE_COMPONENT_REFTEMP: case DEMANGLE_COMPONENT_RESTRICT: case DEMANGLE_COMPONENT_VOLATILE: case DEMANGLE_COMPONENT_CONST: case DEMANGLE_COMPONENT_RESTRICT_THIS: case DEMANGLE_COMPONENT_VOLATILE_THIS: case DEMANGLE_COMPONENT_CONST_THIS: case DEMANGLE_COMPONENT_POINTER: case DEMANGLE_COMPONENT_REFERENCE: case DEMANGLE_COMPONENT_COMPLEX: case DEMANGLE_COMPONENT_IMAGINARY: case DEMANGLE_COMPONENT_VENDOR_TYPE: case DEMANGLE_COMPONENT_CAST: if (right != NULL) return 0; break; default: /* Other types do not use subtrees. */ return 0; } p->type = type; p->u.s_binary.left = left; p->u.s_binary.right = right; return 1; } /* Fill in a DEMANGLE_COMPONENT_BUILTIN_TYPE. */ int cplus_demangle_fill_builtin_type (struct demangle_component *p, const char *type_name) { int len; unsigned int i; if (p == NULL || type_name == NULL) return 0; len = strlen (type_name); for (i = 0; i < D_BUILTIN_TYPE_COUNT; ++i) { if (len == cplus_demangle_builtin_types[i].len && strcmp (type_name, cplus_demangle_builtin_types[i].name) == 0) { p->type = DEMANGLE_COMPONENT_BUILTIN_TYPE; p->u.s_builtin.type = &cplus_demangle_builtin_types[i]; return 1; } } return 0; } /* Fill in a DEMANGLE_COMPONENT_OPERATOR. */ int cplus_demangle_fill_operator (struct demangle_component *p, const char *opname, int args) { int len; unsigned int i; if (p == NULL || opname == NULL) return 0; len = strlen (opname); for (i = 0; cplus_demangle_operators[i].name != NULL; ++i) { if (len == cplus_demangle_operators[i].len && args == cplus_demangle_operators[i].args && strcmp (opname, cplus_demangle_operators[i].name) == 0) { p->type = DEMANGLE_COMPONENT_OPERATOR; p->u.s_operator.op = &cplus_demangle_operators[i]; return 1; } } return 0; } /* Translate a mangled name into components. */ struct demangle_component * cplus_demangle_v3_components (const char *mangled, int options, void **mem) { size_t len; int type; struct d_info di; struct demangle_component *dc; len = strlen (mangled); if (mangled[0] == '_' && mangled[1] == 'Z') type = 0; else { if ((options & DMGL_TYPES) == 0) return NULL; type = 1; } cplus_demangle_init_info (mangled, options, len, &di); di.comps = ((struct demangle_component *) malloc (di.num_comps * sizeof (struct demangle_component))); di.subs = ((struct demangle_component **) malloc (di.num_subs * sizeof (struct demangle_component *))); if (di.comps == NULL || di.subs == NULL) { if (di.comps != NULL) free (di.comps); if (di.subs != NULL) free (di.subs); return NULL; } if (! type) dc = cplus_demangle_mangled_name (&di, 1); else dc = cplus_demangle_type (&di); /* If DMGL_PARAMS is set, then if we didn't consume the entire mangled string, then we didn't successfully demangle it. */ if ((options & DMGL_PARAMS) != 0 && d_peek_char (&di) != '\0') dc = NULL; free (di.subs); if (dc != NULL) *mem = di.comps; else free (di.comps); return dc; } nescc-1.3.4/libiberty/cplus-dem.c000066400000000000000000003471521177770303300166600ustar00rootroot00000000000000/* Demangler for GNU C++ Copyright 1989, 1991, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.uucp) Rewritten by Fred Fish (fnf@cygnus.com) for ARM and Lucid demangling Modified by Satish Pai (pai@apollo.hp.com) for HP demangling This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. In addition to the permissions in the GNU Library General Public License, the Free Software Foundation gives you unlimited permission to link the compiled version of this file into combinations with other programs, and to distribute those combinations without any restriction coming from the use of this file. (The Library Public License restrictions do apply in other respects; for example, they cover modification of the file, and distribution when not linked into a combined executable.) Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* This file exports two functions; cplus_mangle_opname and cplus_demangle. This file imports xmalloc and xrealloc, which are like malloc and realloc except that they generate a fatal error if there is no available memory. */ /* This file lives in both GCC and libiberty. When making changes, please try not to break either. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "safe-ctype.h" #include #include #include #ifdef HAVE_STDLIB_H #include #else char * malloc (); char * realloc (); #endif #include #undef CURRENT_DEMANGLING_STYLE #define CURRENT_DEMANGLING_STYLE work->options #include "libiberty.h" static char *ada_demangle (const char *, int); #define min(X,Y) (((X) < (Y)) ? (X) : (Y)) /* A value at least one greater than the maximum number of characters that will be output when using the `%d' format with `printf'. */ #define INTBUF_SIZE 32 extern void fancy_abort (void) ATTRIBUTE_NORETURN; /* In order to allow a single demangler executable to demangle strings using various common values of CPLUS_MARKER, as well as any specific one set at compile time, we maintain a string containing all the commonly used ones, and check to see if the marker we are looking for is in that string. CPLUS_MARKER is usually '$' on systems where the assembler can deal with that. Where the assembler can't, it's usually '.' (but on many systems '.' is used for other things). We put the current defined CPLUS_MARKER first (which defaults to '$'), followed by the next most common value, followed by an explicit '$' in case the value of CPLUS_MARKER is not '$'. We could avoid this if we could just get g++ to tell us what the actual cplus marker character is as part of the debug information, perhaps by ensuring that it is the character that terminates the gcc_compiled marker symbol (FIXME). */ #if !defined (CPLUS_MARKER) #define CPLUS_MARKER '$' #endif enum demangling_styles current_demangling_style = auto_demangling; static char cplus_markers[] = { CPLUS_MARKER, '.', '$', '\0' }; static char char_str[2] = { '\000', '\000' }; void set_cplus_marker_for_demangling (int ch) { cplus_markers[0] = ch; } typedef struct string /* Beware: these aren't required to be */ { /* '\0' terminated. */ char *b; /* pointer to start of string */ char *p; /* pointer after last character */ char *e; /* pointer after end of allocated space */ } string; /* Stuff that is shared between sub-routines. Using a shared structure allows cplus_demangle to be reentrant. */ struct work_stuff { int options; char **typevec; char **ktypevec; char **btypevec; int numk; int numb; int ksize; int bsize; int ntypes; int typevec_size; int constructor; int destructor; int static_type; /* A static member function */ int temp_start; /* index in demangled to start of template args */ int type_quals; /* The type qualifiers. */ int dllimported; /* Symbol imported from a PE DLL */ char **tmpl_argvec; /* Template function arguments. */ int ntmpl_args; /* The number of template function arguments. */ int forgetting_types; /* Nonzero if we are not remembering the types we see. */ string* previous_argument; /* The last function argument demangled. */ int nrepeats; /* The number of times to repeat the previous argument. */ }; #define PRINT_ANSI_QUALIFIERS (work -> options & DMGL_ANSI) #define PRINT_ARG_TYPES (work -> options & DMGL_PARAMS) static const struct optable { const char *const in; const char *const out; const int flags; } optable[] = { {"nw", " new", DMGL_ANSI}, /* new (1.92, ansi) */ {"dl", " delete", DMGL_ANSI}, /* new (1.92, ansi) */ {"new", " new", 0}, /* old (1.91, and 1.x) */ {"delete", " delete", 0}, /* old (1.91, and 1.x) */ {"vn", " new []", DMGL_ANSI}, /* GNU, pending ansi */ {"vd", " delete []", DMGL_ANSI}, /* GNU, pending ansi */ {"as", "=", DMGL_ANSI}, /* ansi */ {"ne", "!=", DMGL_ANSI}, /* old, ansi */ {"eq", "==", DMGL_ANSI}, /* old, ansi */ {"ge", ">=", DMGL_ANSI}, /* old, ansi */ {"gt", ">", DMGL_ANSI}, /* old, ansi */ {"le", "<=", DMGL_ANSI}, /* old, ansi */ {"lt", "<", DMGL_ANSI}, /* old, ansi */ {"plus", "+", 0}, /* old */ {"pl", "+", DMGL_ANSI}, /* ansi */ {"apl", "+=", DMGL_ANSI}, /* ansi */ {"minus", "-", 0}, /* old */ {"mi", "-", DMGL_ANSI}, /* ansi */ {"ami", "-=", DMGL_ANSI}, /* ansi */ {"mult", "*", 0}, /* old */ {"ml", "*", DMGL_ANSI}, /* ansi */ {"amu", "*=", DMGL_ANSI}, /* ansi (ARM/Lucid) */ {"aml", "*=", DMGL_ANSI}, /* ansi (GNU/g++) */ {"convert", "+", 0}, /* old (unary +) */ {"negate", "-", 0}, /* old (unary -) */ {"trunc_mod", "%", 0}, /* old */ {"md", "%", DMGL_ANSI}, /* ansi */ {"amd", "%=", DMGL_ANSI}, /* ansi */ {"trunc_div", "/", 0}, /* old */ {"dv", "/", DMGL_ANSI}, /* ansi */ {"adv", "/=", DMGL_ANSI}, /* ansi */ {"truth_andif", "&&", 0}, /* old */ {"aa", "&&", DMGL_ANSI}, /* ansi */ {"truth_orif", "||", 0}, /* old */ {"oo", "||", DMGL_ANSI}, /* ansi */ {"truth_not", "!", 0}, /* old */ {"nt", "!", DMGL_ANSI}, /* ansi */ {"postincrement","++", 0}, /* old */ {"pp", "++", DMGL_ANSI}, /* ansi */ {"postdecrement","--", 0}, /* old */ {"mm", "--", DMGL_ANSI}, /* ansi */ {"bit_ior", "|", 0}, /* old */ {"or", "|", DMGL_ANSI}, /* ansi */ {"aor", "|=", DMGL_ANSI}, /* ansi */ {"bit_xor", "^", 0}, /* old */ {"er", "^", DMGL_ANSI}, /* ansi */ {"aer", "^=", DMGL_ANSI}, /* ansi */ {"bit_and", "&", 0}, /* old */ {"ad", "&", DMGL_ANSI}, /* ansi */ {"aad", "&=", DMGL_ANSI}, /* ansi */ {"bit_not", "~", 0}, /* old */ {"co", "~", DMGL_ANSI}, /* ansi */ {"call", "()", 0}, /* old */ {"cl", "()", DMGL_ANSI}, /* ansi */ {"alshift", "<<", 0}, /* old */ {"ls", "<<", DMGL_ANSI}, /* ansi */ {"als", "<<=", DMGL_ANSI}, /* ansi */ {"arshift", ">>", 0}, /* old */ {"rs", ">>", DMGL_ANSI}, /* ansi */ {"ars", ">>=", DMGL_ANSI}, /* ansi */ {"component", "->", 0}, /* old */ {"pt", "->", DMGL_ANSI}, /* ansi; Lucid C++ form */ {"rf", "->", DMGL_ANSI}, /* ansi; ARM/GNU form */ {"indirect", "*", 0}, /* old */ {"method_call", "->()", 0}, /* old */ {"addr", "&", 0}, /* old (unary &) */ {"array", "[]", 0}, /* old */ {"vc", "[]", DMGL_ANSI}, /* ansi */ {"compound", ", ", 0}, /* old */ {"cm", ", ", DMGL_ANSI}, /* ansi */ {"cond", "?:", 0}, /* old */ {"cn", "?:", DMGL_ANSI}, /* pseudo-ansi */ {"max", ">?", 0}, /* old */ {"mx", ">?", DMGL_ANSI}, /* pseudo-ansi */ {"min", "*", DMGL_ANSI}, /* ansi */ {"sz", "sizeof ", DMGL_ANSI} /* pseudo-ansi */ }; /* These values are used to indicate the various type varieties. They are all non-zero so that they can be used as `success' values. */ typedef enum type_kind_t { tk_none, tk_pointer, tk_reference, tk_integral, tk_bool, tk_char, tk_real } type_kind_t; const struct demangler_engine libiberty_demanglers[] = { { NO_DEMANGLING_STYLE_STRING, no_demangling, "Demangling disabled" } , { AUTO_DEMANGLING_STYLE_STRING, auto_demangling, "Automatic selection based on executable" } , { GNU_DEMANGLING_STYLE_STRING, gnu_demangling, "GNU (g++) style demangling" } , { LUCID_DEMANGLING_STYLE_STRING, lucid_demangling, "Lucid (lcc) style demangling" } , { ARM_DEMANGLING_STYLE_STRING, arm_demangling, "ARM style demangling" } , { HP_DEMANGLING_STYLE_STRING, hp_demangling, "HP (aCC) style demangling" } , { EDG_DEMANGLING_STYLE_STRING, edg_demangling, "EDG style demangling" } , { GNU_V3_DEMANGLING_STYLE_STRING, gnu_v3_demangling, "GNU (g++) V3 ABI-style demangling" } , { JAVA_DEMANGLING_STYLE_STRING, java_demangling, "Java style demangling" } , { GNAT_DEMANGLING_STYLE_STRING, gnat_demangling, "GNAT style demangling" } , { NULL, unknown_demangling, NULL } }; #define STRING_EMPTY(str) ((str) -> b == (str) -> p) #define APPEND_BLANK(str) {if (!STRING_EMPTY(str)) \ string_append(str, " ");} #define LEN_STRING(str) ( (STRING_EMPTY(str))?0:((str)->p - (str)->b)) /* The scope separator appropriate for the language being demangled. */ #define SCOPE_STRING(work) ((work->options & DMGL_JAVA) ? "." : "::") #define ARM_VTABLE_STRING "__vtbl__" /* Lucid/ARM virtual table prefix */ #define ARM_VTABLE_STRLEN 8 /* strlen (ARM_VTABLE_STRING) */ /* Prototypes for local functions */ static void delete_work_stuff (struct work_stuff *); static void delete_non_B_K_work_stuff (struct work_stuff *); static char *mop_up (struct work_stuff *, string *, int); static void squangle_mop_up (struct work_stuff *); static void work_stuff_copy_to_from (struct work_stuff *, struct work_stuff *); #if 0 static int demangle_method_args (struct work_stuff *, const char **, string *); #endif static char * internal_cplus_demangle (struct work_stuff *, const char *); static int demangle_template_template_parm (struct work_stuff *work, const char **, string *); static int demangle_template (struct work_stuff *work, const char **, string *, string *, int, int); static int arm_pt (struct work_stuff *, const char *, int, const char **, const char **); static int demangle_class_name (struct work_stuff *, const char **, string *); static int demangle_qualified (struct work_stuff *, const char **, string *, int, int); static int demangle_class (struct work_stuff *, const char **, string *); static int demangle_fund_type (struct work_stuff *, const char **, string *); static int demangle_signature (struct work_stuff *, const char **, string *); static int demangle_prefix (struct work_stuff *, const char **, string *); static int gnu_special (struct work_stuff *, const char **, string *); static int arm_special (const char **, string *); static void string_need (string *, int); static void string_delete (string *); static void string_init (string *); static void string_clear (string *); #if 0 static int string_empty (string *); #endif static void string_append (string *, const char *); static void string_appends (string *, string *); static void string_appendn (string *, const char *, int); static void string_prepend (string *, const char *); static void string_prependn (string *, const char *, int); static void string_append_template_idx (string *, int); static int get_count (const char **, int *); static int consume_count (const char **); static int consume_count_with_underscores (const char**); static int demangle_args (struct work_stuff *, const char **, string *); static int demangle_nested_args (struct work_stuff*, const char**, string*); static int do_type (struct work_stuff *, const char **, string *); static int do_arg (struct work_stuff *, const char **, string *); static void demangle_function_name (struct work_stuff *, const char **, string *, const char *); static int iterate_demangle_function (struct work_stuff *, const char **, string *, const char *); static void remember_type (struct work_stuff *, const char *, int); static void remember_Btype (struct work_stuff *, const char *, int, int); static int register_Btype (struct work_stuff *); static void remember_Ktype (struct work_stuff *, const char *, int); static void forget_types (struct work_stuff *); static void forget_B_and_K_types (struct work_stuff *); static void string_prepends (string *, string *); static int demangle_template_value_parm (struct work_stuff*, const char**, string*, type_kind_t); static int do_hpacc_template_const_value (struct work_stuff *, const char **, string *); static int do_hpacc_template_literal (struct work_stuff *, const char **, string *); static int snarf_numeric_literal (const char **, string *); /* There is a TYPE_QUAL value for each type qualifier. They can be combined by bitwise-or to form the complete set of qualifiers for a type. */ #define TYPE_UNQUALIFIED 0x0 #define TYPE_QUAL_CONST 0x1 #define TYPE_QUAL_VOLATILE 0x2 #define TYPE_QUAL_RESTRICT 0x4 static int code_for_qualifier (int); static const char* qualifier_string (int); static const char* demangle_qualifier (int); static int demangle_expression (struct work_stuff *, const char **, string *, type_kind_t); static int demangle_integral_value (struct work_stuff *, const char **, string *); static int demangle_real_value (struct work_stuff *, const char **, string *); static void demangle_arm_hp_template (struct work_stuff *, const char **, int, string *); static void recursively_demangle (struct work_stuff *, const char **, string *, int); static void grow_vect (char **, size_t *, size_t, int); /* Translate count to integer, consuming tokens in the process. Conversion terminates on the first non-digit character. Trying to consume something that isn't a count results in no consumption of input and a return of -1. Overflow consumes the rest of the digits, and returns -1. */ static int consume_count (const char **type) { int count = 0; if (! ISDIGIT ((unsigned char)**type)) return -1; while (ISDIGIT ((unsigned char)**type)) { count *= 10; /* Check for overflow. We assume that count is represented using two's-complement; no power of two is divisible by ten, so if an overflow occurs when multiplying by ten, the result will not be a multiple of ten. */ if ((count % 10) != 0) { while (ISDIGIT ((unsigned char) **type)) (*type)++; return -1; } count += **type - '0'; (*type)++; } if (count < 0) count = -1; return (count); } /* Like consume_count, but for counts that are preceded and followed by '_' if they are greater than 10. Also, -1 is returned for failure, since 0 can be a valid value. */ static int consume_count_with_underscores (const char **mangled) { int idx; if (**mangled == '_') { (*mangled)++; if (!ISDIGIT ((unsigned char)**mangled)) return -1; idx = consume_count (mangled); if (**mangled != '_') /* The trailing underscore was missing. */ return -1; (*mangled)++; } else { if (**mangled < '0' || **mangled > '9') return -1; idx = **mangled - '0'; (*mangled)++; } return idx; } /* C is the code for a type-qualifier. Return the TYPE_QUAL corresponding to this qualifier. */ static int code_for_qualifier (int c) { switch (c) { case 'C': return TYPE_QUAL_CONST; case 'V': return TYPE_QUAL_VOLATILE; case 'u': return TYPE_QUAL_RESTRICT; default: break; } /* C was an invalid qualifier. */ abort (); } /* Return the string corresponding to the qualifiers given by TYPE_QUALS. */ static const char* qualifier_string (int type_quals) { switch (type_quals) { case TYPE_UNQUALIFIED: return ""; case TYPE_QUAL_CONST: return "const"; case TYPE_QUAL_VOLATILE: return "volatile"; case TYPE_QUAL_RESTRICT: return "__restrict"; case TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE: return "const volatile"; case TYPE_QUAL_CONST | TYPE_QUAL_RESTRICT: return "const __restrict"; case TYPE_QUAL_VOLATILE | TYPE_QUAL_RESTRICT: return "volatile __restrict"; case TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE | TYPE_QUAL_RESTRICT: return "const volatile __restrict"; default: break; } /* TYPE_QUALS was an invalid qualifier set. */ abort (); } /* C is the code for a type-qualifier. Return the string corresponding to this qualifier. This function should only be called with a valid qualifier code. */ static const char* demangle_qualifier (int c) { return qualifier_string (code_for_qualifier (c)); } int cplus_demangle_opname (const char *opname, char *result, int options) { int len, len1, ret; string type; struct work_stuff work[1]; const char *tem; len = strlen(opname); result[0] = '\0'; ret = 0; memset ((char *) work, 0, sizeof (work)); work->options = options; if (opname[0] == '_' && opname[1] == '_' && opname[2] == 'o' && opname[3] == 'p') { /* ANSI. */ /* type conversion operator. */ tem = opname + 4; if (do_type (work, &tem, &type)) { strcat (result, "operator "); strncat (result, type.b, type.p - type.b); string_delete (&type); ret = 1; } } else if (opname[0] == '_' && opname[1] == '_' && ISLOWER((unsigned char)opname[2]) && ISLOWER((unsigned char)opname[3])) { if (opname[4] == '\0') { /* Operator. */ size_t i; for (i = 0; i < ARRAY_SIZE (optable); i++) { if (strlen (optable[i].in) == 2 && memcmp (optable[i].in, opname + 2, 2) == 0) { strcat (result, "operator"); strcat (result, optable[i].out); ret = 1; break; } } } else { if (opname[2] == 'a' && opname[5] == '\0') { /* Assignment. */ size_t i; for (i = 0; i < ARRAY_SIZE (optable); i++) { if (strlen (optable[i].in) == 3 && memcmp (optable[i].in, opname + 2, 3) == 0) { strcat (result, "operator"); strcat (result, optable[i].out); ret = 1; break; } } } } } else if (len >= 3 && opname[0] == 'o' && opname[1] == 'p' && strchr (cplus_markers, opname[2]) != NULL) { /* see if it's an assignment expression */ if (len >= 10 /* op$assign_ */ && memcmp (opname + 3, "assign_", 7) == 0) { size_t i; for (i = 0; i < ARRAY_SIZE (optable); i++) { len1 = len - 10; if ((int) strlen (optable[i].in) == len1 && memcmp (optable[i].in, opname + 10, len1) == 0) { strcat (result, "operator"); strcat (result, optable[i].out); strcat (result, "="); ret = 1; break; } } } else { size_t i; for (i = 0; i < ARRAY_SIZE (optable); i++) { len1 = len - 3; if ((int) strlen (optable[i].in) == len1 && memcmp (optable[i].in, opname + 3, len1) == 0) { strcat (result, "operator"); strcat (result, optable[i].out); ret = 1; break; } } } } else if (len >= 5 && memcmp (opname, "type", 4) == 0 && strchr (cplus_markers, opname[4]) != NULL) { /* type conversion operator */ tem = opname + 5; if (do_type (work, &tem, &type)) { strcat (result, "operator "); strncat (result, type.b, type.p - type.b); string_delete (&type); ret = 1; } } squangle_mop_up (work); return ret; } /* Takes operator name as e.g. "++" and returns mangled operator name (e.g. "postincrement_expr"), or NULL if not found. If OPTIONS & DMGL_ANSI == 1, return the ANSI name; if OPTIONS & DMGL_ANSI == 0, return the old GNU name. */ const char * cplus_mangle_opname (const char *opname, int options) { size_t i; int len; len = strlen (opname); for (i = 0; i < ARRAY_SIZE (optable); i++) { if ((int) strlen (optable[i].out) == len && (options & DMGL_ANSI) == (optable[i].flags & DMGL_ANSI) && memcmp (optable[i].out, opname, len) == 0) return optable[i].in; } return (0); } /* Add a routine to set the demangling style to be sure it is valid and allow for any demangler initialization that maybe necessary. */ enum demangling_styles cplus_demangle_set_style (enum demangling_styles style) { const struct demangler_engine *demangler = libiberty_demanglers; for (; demangler->demangling_style != unknown_demangling; ++demangler) if (style == demangler->demangling_style) { current_demangling_style = style; return current_demangling_style; } return unknown_demangling; } /* Do string name to style translation */ enum demangling_styles cplus_demangle_name_to_style (const char *name) { const struct demangler_engine *demangler = libiberty_demanglers; for (; demangler->demangling_style != unknown_demangling; ++demangler) if (strcmp (name, demangler->demangling_style_name) == 0) return demangler->demangling_style; return unknown_demangling; } /* char *cplus_demangle (const char *mangled, int options) If MANGLED is a mangled function name produced by GNU C++, then a pointer to a @code{malloc}ed string giving a C++ representation of the name will be returned; otherwise NULL will be returned. It is the caller's responsibility to free the string which is returned. The OPTIONS arg may contain one or more of the following bits: DMGL_ANSI ANSI qualifiers such as `const' and `void' are included. DMGL_PARAMS Function parameters are included. For example, cplus_demangle ("foo__1Ai", DMGL_PARAMS) => "A::foo(int)" cplus_demangle ("foo__1Ai", DMGL_PARAMS | DMGL_ANSI) => "A::foo(int)" cplus_demangle ("foo__1Ai", 0) => "A::foo" cplus_demangle ("foo__1Afe", DMGL_PARAMS) => "A::foo(float,...)" cplus_demangle ("foo__1Afe", DMGL_PARAMS | DMGL_ANSI)=> "A::foo(float,...)" cplus_demangle ("foo__1Afe", 0) => "A::foo" Note that any leading underscores, or other such characters prepended by the compilation system, are presumed to have already been stripped from MANGLED. */ char * cplus_demangle (const char *mangled, int options) { char *ret; struct work_stuff work[1]; if (current_demangling_style == no_demangling) return xstrdup (mangled); memset ((char *) work, 0, sizeof (work)); work->options = options; if ((work->options & DMGL_STYLE_MASK) == 0) work->options |= (int) current_demangling_style & DMGL_STYLE_MASK; /* The V3 ABI demangling is implemented elsewhere. */ if (GNU_V3_DEMANGLING || AUTO_DEMANGLING) { ret = cplus_demangle_v3 (mangled, work->options); if (ret || GNU_V3_DEMANGLING) return ret; } if (JAVA_DEMANGLING) { ret = java_demangle_v3 (mangled); if (ret) return ret; } if (GNAT_DEMANGLING) return ada_demangle(mangled,options); ret = internal_cplus_demangle (work, mangled); squangle_mop_up (work); return (ret); } /* Assuming *OLD_VECT points to an array of *SIZE objects of size ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects, updating *OLD_VECT and *SIZE as necessary. */ static void grow_vect (char **old_vect, size_t *size, size_t min_size, int element_size) { if (*size < min_size) { *size *= 2; if (*size < min_size) *size = min_size; *old_vect = XRESIZEVAR (char, *old_vect, *size * element_size); } } /* Demangle ada names: 1. Discard final __{DIGIT}+ or ${DIGIT}+ 2. Convert other instances of embedded "__" to `.'. 3. Discard leading _ada_. 4. Remove everything after first ___ if it is followed by 'X'. 5. Put symbols that should be suppressed in <...> brackets. The resulting string is valid until the next call of ada_demangle. */ static char * ada_demangle (const char *mangled, int option ATTRIBUTE_UNUSED) { int i, j; int len0; const char* p; char *demangled = NULL; int changed; size_t demangled_size = 0; changed = 0; if (strncmp (mangled, "_ada_", 5) == 0) { mangled += 5; changed = 1; } if (mangled[0] == '_' || mangled[0] == '<') goto Suppress; p = strstr (mangled, "___"); if (p == NULL) len0 = strlen (mangled); else { if (p[3] == 'X') { len0 = p - mangled; changed = 1; } else goto Suppress; } /* Make demangled big enough for possible expansion by operator name. */ grow_vect (&demangled, &demangled_size, 2 * len0 + 1, sizeof (char)); if (ISDIGIT ((unsigned char) mangled[len0 - 1])) { for (i = len0 - 2; i >= 0 && ISDIGIT ((unsigned char) mangled[i]); i -= 1) ; if (i > 1 && mangled[i] == '_' && mangled[i - 1] == '_') { len0 = i - 1; changed = 1; } else if (mangled[i] == '$') { len0 = i; changed = 1; } } for (i = 0, j = 0; i < len0 && ! ISALPHA ((unsigned char)mangled[i]); i += 1, j += 1) demangled[j] = mangled[i]; while (i < len0) { if (i < len0 - 2 && mangled[i] == '_' && mangled[i + 1] == '_') { demangled[j] = '.'; changed = 1; i += 2; j += 1; } else { demangled[j] = mangled[i]; i += 1; j += 1; } } demangled[j] = '\000'; for (i = 0; demangled[i] != '\0'; i += 1) if (ISUPPER ((unsigned char)demangled[i]) || demangled[i] == ' ') goto Suppress; if (! changed) return NULL; else return demangled; Suppress: grow_vect (&demangled, &demangled_size, strlen (mangled) + 3, sizeof (char)); if (mangled[0] == '<') strcpy (demangled, mangled); else sprintf (demangled, "<%s>", mangled); return demangled; } /* This function performs most of what cplus_demangle use to do, but to be able to demangle a name with a B, K or n code, we need to have a longer term memory of what types have been seen. The original now initializes and cleans up the squangle code info, while internal calls go directly to this routine to avoid resetting that info. */ static char * internal_cplus_demangle (struct work_stuff *work, const char *mangled) { string decl; int success = 0; char *demangled = NULL; int s1, s2, s3, s4; s1 = work->constructor; s2 = work->destructor; s3 = work->static_type; s4 = work->type_quals; work->constructor = work->destructor = 0; work->type_quals = TYPE_UNQUALIFIED; work->dllimported = 0; if ((mangled != NULL) && (*mangled != '\0')) { string_init (&decl); /* First check to see if gnu style demangling is active and if the string to be demangled contains a CPLUS_MARKER. If so, attempt to recognize one of the gnu special forms rather than looking for a standard prefix. In particular, don't worry about whether there is a "__" string in the mangled string. Consider "_$_5__foo" for example. */ if ((AUTO_DEMANGLING || GNU_DEMANGLING)) { success = gnu_special (work, &mangled, &decl); } if (!success) { success = demangle_prefix (work, &mangled, &decl); } if (success && (*mangled != '\0')) { success = demangle_signature (work, &mangled, &decl); } if (work->constructor == 2) { string_prepend (&decl, "global constructors keyed to "); work->constructor = 0; } else if (work->destructor == 2) { string_prepend (&decl, "global destructors keyed to "); work->destructor = 0; } else if (work->dllimported == 1) { string_prepend (&decl, "import stub for "); work->dllimported = 0; } demangled = mop_up (work, &decl, success); } work->constructor = s1; work->destructor = s2; work->static_type = s3; work->type_quals = s4; return demangled; } /* Clear out and squangling related storage */ static void squangle_mop_up (struct work_stuff *work) { /* clean up the B and K type mangling types. */ forget_B_and_K_types (work); if (work -> btypevec != NULL) { free ((char *) work -> btypevec); } if (work -> ktypevec != NULL) { free ((char *) work -> ktypevec); } } /* Copy the work state and storage. */ static void work_stuff_copy_to_from (struct work_stuff *to, struct work_stuff *from) { int i; delete_work_stuff (to); /* Shallow-copy scalars. */ memcpy (to, from, sizeof (*to)); /* Deep-copy dynamic storage. */ if (from->typevec_size) to->typevec = XNEWVEC (char *, from->typevec_size); for (i = 0; i < from->ntypes; i++) { int len = strlen (from->typevec[i]) + 1; to->typevec[i] = XNEWVEC (char, len); memcpy (to->typevec[i], from->typevec[i], len); } if (from->ksize) to->ktypevec = XNEWVEC (char *, from->ksize); for (i = 0; i < from->numk; i++) { int len = strlen (from->ktypevec[i]) + 1; to->ktypevec[i] = XNEWVEC (char, len); memcpy (to->ktypevec[i], from->ktypevec[i], len); } if (from->bsize) to->btypevec = XNEWVEC (char *, from->bsize); for (i = 0; i < from->numb; i++) { int len = strlen (from->btypevec[i]) + 1; to->btypevec[i] = XNEWVEC (char , len); memcpy (to->btypevec[i], from->btypevec[i], len); } if (from->ntmpl_args) to->tmpl_argvec = XNEWVEC (char *, from->ntmpl_args); for (i = 0; i < from->ntmpl_args; i++) { int len = strlen (from->tmpl_argvec[i]) + 1; to->tmpl_argvec[i] = XNEWVEC (char, len); memcpy (to->tmpl_argvec[i], from->tmpl_argvec[i], len); } if (from->previous_argument) { to->previous_argument = XNEW (string); string_init (to->previous_argument); string_appends (to->previous_argument, from->previous_argument); } } /* Delete dynamic stuff in work_stuff that is not to be re-used. */ static void delete_non_B_K_work_stuff (struct work_stuff *work) { /* Discard the remembered types, if any. */ forget_types (work); if (work -> typevec != NULL) { free ((char *) work -> typevec); work -> typevec = NULL; work -> typevec_size = 0; } if (work->tmpl_argvec) { int i; for (i = 0; i < work->ntmpl_args; i++) if (work->tmpl_argvec[i]) free ((char*) work->tmpl_argvec[i]); free ((char*) work->tmpl_argvec); work->tmpl_argvec = NULL; } if (work->previous_argument) { string_delete (work->previous_argument); free ((char*) work->previous_argument); work->previous_argument = NULL; } } /* Delete all dynamic storage in work_stuff. */ static void delete_work_stuff (struct work_stuff *work) { delete_non_B_K_work_stuff (work); squangle_mop_up (work); } /* Clear out any mangled storage */ static char * mop_up (struct work_stuff *work, string *declp, int success) { char *demangled = NULL; delete_non_B_K_work_stuff (work); /* If demangling was successful, ensure that the demangled string is null terminated and return it. Otherwise, free the demangling decl. */ if (!success) { string_delete (declp); } else { string_appendn (declp, "", 1); demangled = declp->b; } return (demangled); } /* LOCAL FUNCTION demangle_signature -- demangle the signature part of a mangled name SYNOPSIS static int demangle_signature (struct work_stuff *work, const char **mangled, string *declp); DESCRIPTION Consume and demangle the signature portion of the mangled name. DECLP is the string where demangled output is being built. At entry it contains the demangled root name from the mangled name prefix. I.E. either a demangled operator name or the root function name. In some special cases, it may contain nothing. *MANGLED points to the current unconsumed location in the mangled name. As tokens are consumed and demangling is performed, the pointer is updated to continuously point at the next token to be consumed. Demangling GNU style mangled names is nasty because there is no explicit token that marks the start of the outermost function argument list. */ static int demangle_signature (struct work_stuff *work, const char **mangled, string *declp) { int success = 1; int func_done = 0; int expect_func = 0; int expect_return_type = 0; const char *oldmangled = NULL; string trawname; string tname; while (success && (**mangled != '\0')) { switch (**mangled) { case 'Q': oldmangled = *mangled; success = demangle_qualified (work, mangled, declp, 1, 0); if (success) remember_type (work, oldmangled, *mangled - oldmangled); if (AUTO_DEMANGLING || GNU_DEMANGLING) expect_func = 1; oldmangled = NULL; break; case 'K': oldmangled = *mangled; success = demangle_qualified (work, mangled, declp, 1, 0); if (AUTO_DEMANGLING || GNU_DEMANGLING) { expect_func = 1; } oldmangled = NULL; break; case 'S': /* Static member function */ if (oldmangled == NULL) { oldmangled = *mangled; } (*mangled)++; work -> static_type = 1; break; case 'C': case 'V': case 'u': work->type_quals |= code_for_qualifier (**mangled); /* a qualified member function */ if (oldmangled == NULL) oldmangled = *mangled; (*mangled)++; break; case 'L': /* Local class name follows after "Lnnn_" */ if (HP_DEMANGLING) { while (**mangled && (**mangled != '_')) (*mangled)++; if (!**mangled) success = 0; else (*mangled)++; } else success = 0; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (oldmangled == NULL) { oldmangled = *mangled; } work->temp_start = -1; /* uppermost call to demangle_class */ success = demangle_class (work, mangled, declp); if (success) { remember_type (work, oldmangled, *mangled - oldmangled); } if (AUTO_DEMANGLING || GNU_DEMANGLING || EDG_DEMANGLING) { /* EDG and others will have the "F", so we let the loop cycle if we are looking at one. */ if (**mangled != 'F') expect_func = 1; } oldmangled = NULL; break; case 'B': { string s; success = do_type (work, mangled, &s); if (success) { string_append (&s, SCOPE_STRING (work)); string_prepends (declp, &s); string_delete (&s); } oldmangled = NULL; expect_func = 1; } break; case 'F': /* Function */ /* ARM/HP style demangling includes a specific 'F' character after the class name. For GNU style, it is just implied. So we can safely just consume any 'F' at this point and be compatible with either style. */ oldmangled = NULL; func_done = 1; (*mangled)++; /* For lucid/ARM/HP style we have to forget any types we might have remembered up to this point, since they were not argument types. GNU style considers all types seen as available for back references. See comment in demangle_args() */ if (LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING) { forget_types (work); } success = demangle_args (work, mangled, declp); /* After picking off the function args, we expect to either find the function return type (preceded by an '_') or the end of the string. */ if (success && (AUTO_DEMANGLING || EDG_DEMANGLING) && **mangled == '_') { ++(*mangled); /* At this level, we do not care about the return type. */ success = do_type (work, mangled, &tname); string_delete (&tname); } break; case 't': /* G++ Template */ string_init(&trawname); string_init(&tname); if (oldmangled == NULL) { oldmangled = *mangled; } success = demangle_template (work, mangled, &tname, &trawname, 1, 1); if (success) { remember_type (work, oldmangled, *mangled - oldmangled); } string_append (&tname, SCOPE_STRING (work)); string_prepends(declp, &tname); if (work -> destructor & 1) { string_prepend (&trawname, "~"); string_appends (declp, &trawname); work->destructor -= 1; } if ((work->constructor & 1) || (work->destructor & 1)) { string_appends (declp, &trawname); work->constructor -= 1; } string_delete(&trawname); string_delete(&tname); oldmangled = NULL; expect_func = 1; break; case '_': if ((AUTO_DEMANGLING || GNU_DEMANGLING) && expect_return_type) { /* Read the return type. */ string return_type; (*mangled)++; success = do_type (work, mangled, &return_type); APPEND_BLANK (&return_type); string_prepends (declp, &return_type); string_delete (&return_type); break; } else /* At the outermost level, we cannot have a return type specified, so if we run into another '_' at this point we are dealing with a mangled name that is either bogus, or has been mangled by some algorithm we don't know how to deal with. So just reject the entire demangling. */ /* However, "_nnn" is an expected suffix for alternate entry point numbered nnn for a function, with HP aCC, so skip over that without reporting failure. pai/1997-09-04 */ if (HP_DEMANGLING) { (*mangled)++; while (**mangled && ISDIGIT ((unsigned char)**mangled)) (*mangled)++; } else success = 0; break; case 'H': if (AUTO_DEMANGLING || GNU_DEMANGLING) { /* A G++ template function. Read the template arguments. */ success = demangle_template (work, mangled, declp, 0, 0, 0); if (!(work->constructor & 1)) expect_return_type = 1; (*mangled)++; break; } else /* fall through */ {;} default: if (AUTO_DEMANGLING || GNU_DEMANGLING) { /* Assume we have stumbled onto the first outermost function argument token, and start processing args. */ func_done = 1; success = demangle_args (work, mangled, declp); } else { /* Non-GNU demanglers use a specific token to mark the start of the outermost function argument tokens. Typically 'F', for ARM/HP-demangling, for example. So if we find something we are not prepared for, it must be an error. */ success = 0; } break; } /* if (AUTO_DEMANGLING || GNU_DEMANGLING) */ { if (success && expect_func) { func_done = 1; if (LUCID_DEMANGLING || ARM_DEMANGLING || EDG_DEMANGLING) { forget_types (work); } success = demangle_args (work, mangled, declp); /* Since template include the mangling of their return types, we must set expect_func to 0 so that we don't try do demangle more arguments the next time we get here. */ expect_func = 0; } } } if (success && !func_done) { if (AUTO_DEMANGLING || GNU_DEMANGLING) { /* With GNU style demangling, bar__3foo is 'foo::bar(void)', and bar__3fooi is 'foo::bar(int)'. We get here when we find the first case, and need to ensure that the '(void)' gets added to the current declp. Note that with ARM/HP, the first case represents the name of a static data member 'foo::bar', which is in the current declp, so we leave it alone. */ success = demangle_args (work, mangled, declp); } } if (success && PRINT_ARG_TYPES) { if (work->static_type) string_append (declp, " static"); if (work->type_quals != TYPE_UNQUALIFIED) { APPEND_BLANK (declp); string_append (declp, qualifier_string (work->type_quals)); } } return (success); } #if 0 static int demangle_method_args (struct work_stuff *work, const char **mangled, string *declp) { int success = 0; if (work -> static_type) { string_append (declp, *mangled + 1); *mangled += strlen (*mangled); success = 1; } else { success = demangle_args (work, mangled, declp); } return (success); } #endif static int demangle_template_template_parm (struct work_stuff *work, const char **mangled, string *tname) { int i; int r; int need_comma = 0; int success = 1; string temp; string_append (tname, "template <"); /* get size of template parameter list */ if (get_count (mangled, &r)) { for (i = 0; i < r; i++) { if (need_comma) { string_append (tname, ", "); } /* Z for type parameters */ if (**mangled == 'Z') { (*mangled)++; string_append (tname, "class"); } /* z for template parameters */ else if (**mangled == 'z') { (*mangled)++; success = demangle_template_template_parm (work, mangled, tname); if (!success) { break; } } else { /* temp is initialized in do_type */ success = do_type (work, mangled, &temp); if (success) { string_appends (tname, &temp); } string_delete(&temp); if (!success) { break; } } need_comma = 1; } } if (tname->p[-1] == '>') string_append (tname, " "); string_append (tname, "> class"); return (success); } static int demangle_expression (struct work_stuff *work, const char **mangled, string *s, type_kind_t tk) { int need_operator = 0; int success; success = 1; string_appendn (s, "(", 1); (*mangled)++; while (success && **mangled != 'W' && **mangled != '\0') { if (need_operator) { size_t i; size_t len; success = 0; len = strlen (*mangled); for (i = 0; i < ARRAY_SIZE (optable); ++i) { size_t l = strlen (optable[i].in); if (l <= len && memcmp (optable[i].in, *mangled, l) == 0) { string_appendn (s, " ", 1); string_append (s, optable[i].out); string_appendn (s, " ", 1); success = 1; (*mangled) += l; break; } } if (!success) break; } else need_operator = 1; success = demangle_template_value_parm (work, mangled, s, tk); } if (**mangled != 'W') success = 0; else { string_appendn (s, ")", 1); (*mangled)++; } return success; } static int demangle_integral_value (struct work_stuff *work, const char **mangled, string *s) { int success; if (**mangled == 'E') success = demangle_expression (work, mangled, s, tk_integral); else if (**mangled == 'Q' || **mangled == 'K') success = demangle_qualified (work, mangled, s, 0, 1); else { int value; /* By default, we let the number decide whether we shall consume an underscore. */ int multidigit_without_leading_underscore = 0; int leave_following_underscore = 0; success = 0; if (**mangled == '_') { if (mangled[0][1] == 'm') { /* Since consume_count_with_underscores does not handle the `m'-prefix we must do it here, using consume_count and adjusting underscores: we have to consume the underscore matching the prepended one. */ multidigit_without_leading_underscore = 1; string_appendn (s, "-", 1); (*mangled) += 2; } else { /* Do not consume a following underscore; consume_count_with_underscores will consume what should be consumed. */ leave_following_underscore = 1; } } else { /* Negative numbers are indicated with a leading `m'. */ if (**mangled == 'm') { string_appendn (s, "-", 1); (*mangled)++; } /* Since consume_count_with_underscores does not handle multi-digit numbers that do not start with an underscore, and this number can be an integer template parameter, we have to call consume_count. */ multidigit_without_leading_underscore = 1; /* These multi-digit numbers never end on an underscore, so if there is one then don't eat it. */ leave_following_underscore = 1; } /* We must call consume_count if we expect to remove a trailing underscore, since consume_count_with_underscores expects the leading underscore (that we consumed) if it is to handle multi-digit numbers. */ if (multidigit_without_leading_underscore) value = consume_count (mangled); else value = consume_count_with_underscores (mangled); if (value != -1) { char buf[INTBUF_SIZE]; sprintf (buf, "%d", value); string_append (s, buf); /* Numbers not otherwise delimited, might have an underscore appended as a delimeter, which we should skip. ??? This used to always remove a following underscore, which is wrong. If other (arbitrary) cases are followed by an underscore, we need to do something more radical. */ if ((value > 9 || multidigit_without_leading_underscore) && ! leave_following_underscore && **mangled == '_') (*mangled)++; /* All is well. */ success = 1; } } return success; } /* Demangle the real value in MANGLED. */ static int demangle_real_value (struct work_stuff *work, const char **mangled, string *s) { if (**mangled == 'E') return demangle_expression (work, mangled, s, tk_real); if (**mangled == 'm') { string_appendn (s, "-", 1); (*mangled)++; } while (ISDIGIT ((unsigned char)**mangled)) { string_appendn (s, *mangled, 1); (*mangled)++; } if (**mangled == '.') /* fraction */ { string_appendn (s, ".", 1); (*mangled)++; while (ISDIGIT ((unsigned char)**mangled)) { string_appendn (s, *mangled, 1); (*mangled)++; } } if (**mangled == 'e') /* exponent */ { string_appendn (s, "e", 1); (*mangled)++; while (ISDIGIT ((unsigned char)**mangled)) { string_appendn (s, *mangled, 1); (*mangled)++; } } return 1; } static int demangle_template_value_parm (struct work_stuff *work, const char **mangled, string *s, type_kind_t tk) { int success = 1; if (**mangled == 'Y') { /* The next argument is a template parameter. */ int idx; (*mangled)++; idx = consume_count_with_underscores (mangled); if (idx == -1 || (work->tmpl_argvec && idx >= work->ntmpl_args) || consume_count_with_underscores (mangled) == -1) return -1; if (work->tmpl_argvec) string_append (s, work->tmpl_argvec[idx]); else string_append_template_idx (s, idx); } else if (tk == tk_integral) success = demangle_integral_value (work, mangled, s); else if (tk == tk_char) { char tmp[2]; int val; if (**mangled == 'm') { string_appendn (s, "-", 1); (*mangled)++; } string_appendn (s, "'", 1); val = consume_count(mangled); if (val <= 0) success = 0; else { tmp[0] = (char)val; tmp[1] = '\0'; string_appendn (s, &tmp[0], 1); string_appendn (s, "'", 1); } } else if (tk == tk_bool) { int val = consume_count (mangled); if (val == 0) string_appendn (s, "false", 5); else if (val == 1) string_appendn (s, "true", 4); else success = 0; } else if (tk == tk_real) success = demangle_real_value (work, mangled, s); else if (tk == tk_pointer || tk == tk_reference) { if (**mangled == 'Q') success = demangle_qualified (work, mangled, s, /*isfuncname=*/0, /*append=*/1); else { int symbol_len = consume_count (mangled); if (symbol_len == -1) return -1; if (symbol_len == 0) string_appendn (s, "0", 1); else { char *p = XNEWVEC (char, symbol_len + 1), *q; strncpy (p, *mangled, symbol_len); p [symbol_len] = '\0'; /* We use cplus_demangle here, rather than internal_cplus_demangle, because the name of the entity mangled here does not make use of any of the squangling or type-code information we have built up thus far; it is mangled independently. */ q = cplus_demangle (p, work->options); if (tk == tk_pointer) string_appendn (s, "&", 1); /* FIXME: Pointer-to-member constants should get a qualifying class name here. */ if (q) { string_append (s, q); free (q); } else string_append (s, p); free (p); } *mangled += symbol_len; } } return success; } /* Demangle the template name in MANGLED. The full name of the template (e.g., S) is placed in TNAME. The name without the template parameters (e.g. S) is placed in TRAWNAME if TRAWNAME is non-NULL. If IS_TYPE is nonzero, this template is a type template, not a function template. If both IS_TYPE and REMEMBER are nonzero, the template is remembered in the list of back-referenceable types. */ static int demangle_template (struct work_stuff *work, const char **mangled, string *tname, string *trawname, int is_type, int remember) { int i; int r; int need_comma = 0; int success = 0; int is_java_array = 0; string temp; (*mangled)++; if (is_type) { /* get template name */ if (**mangled == 'z') { int idx; (*mangled)++; (*mangled)++; idx = consume_count_with_underscores (mangled); if (idx == -1 || (work->tmpl_argvec && idx >= work->ntmpl_args) || consume_count_with_underscores (mangled) == -1) return (0); if (work->tmpl_argvec) { string_append (tname, work->tmpl_argvec[idx]); if (trawname) string_append (trawname, work->tmpl_argvec[idx]); } else { string_append_template_idx (tname, idx); if (trawname) string_append_template_idx (trawname, idx); } } else { if ((r = consume_count (mangled)) <= 0 || (int) strlen (*mangled) < r) { return (0); } is_java_array = (work -> options & DMGL_JAVA) && strncmp (*mangled, "JArray1Z", 8) == 0; if (! is_java_array) { string_appendn (tname, *mangled, r); } if (trawname) string_appendn (trawname, *mangled, r); *mangled += r; } } if (!is_java_array) string_append (tname, "<"); /* get size of template parameter list */ if (!get_count (mangled, &r)) { return (0); } if (!is_type) { /* Create an array for saving the template argument values. */ work->tmpl_argvec = XNEWVEC (char *, r); work->ntmpl_args = r; for (i = 0; i < r; i++) work->tmpl_argvec[i] = 0; } for (i = 0; i < r; i++) { if (need_comma) { string_append (tname, ", "); } /* Z for type parameters */ if (**mangled == 'Z') { (*mangled)++; /* temp is initialized in do_type */ success = do_type (work, mangled, &temp); if (success) { string_appends (tname, &temp); if (!is_type) { /* Save the template argument. */ int len = temp.p - temp.b; work->tmpl_argvec[i] = XNEWVEC (char, len + 1); memcpy (work->tmpl_argvec[i], temp.b, len); work->tmpl_argvec[i][len] = '\0'; } } string_delete(&temp); if (!success) { break; } } /* z for template parameters */ else if (**mangled == 'z') { int r2; (*mangled)++; success = demangle_template_template_parm (work, mangled, tname); if (success && (r2 = consume_count (mangled)) > 0 && (int) strlen (*mangled) >= r2) { string_append (tname, " "); string_appendn (tname, *mangled, r2); if (!is_type) { /* Save the template argument. */ int len = r2; work->tmpl_argvec[i] = XNEWVEC (char, len + 1); memcpy (work->tmpl_argvec[i], *mangled, len); work->tmpl_argvec[i][len] = '\0'; } *mangled += r2; } if (!success) { break; } } else { string param; string* s; /* otherwise, value parameter */ /* temp is initialized in do_type */ success = do_type (work, mangled, &temp); string_delete(&temp); if (!success) break; if (!is_type) { s = ¶m; string_init (s); } else s = tname; success = demangle_template_value_parm (work, mangled, s, (type_kind_t) success); if (!success) { if (!is_type) string_delete (s); success = 0; break; } if (!is_type) { int len = s->p - s->b; work->tmpl_argvec[i] = XNEWVEC (char, len + 1); memcpy (work->tmpl_argvec[i], s->b, len); work->tmpl_argvec[i][len] = '\0'; string_appends (tname, s); string_delete (s); } } need_comma = 1; } if (is_java_array) { string_append (tname, "[]"); } else { if (tname->p[-1] == '>') string_append (tname, " "); string_append (tname, ">"); } if (is_type && remember) { const int bindex = register_Btype (work); remember_Btype (work, tname->b, LEN_STRING (tname), bindex); } /* if (work -> static_type) { string_append (declp, *mangled + 1); *mangled += strlen (*mangled); success = 1; } else { success = demangle_args (work, mangled, declp); } } */ return (success); } static int arm_pt (struct work_stuff *work, const char *mangled, int n, const char **anchor, const char **args) { /* Check if ARM template with "__pt__" in it ("parameterized type") */ /* Allow HP also here, because HP's cfront compiler follows ARM to some extent */ if ((ARM_DEMANGLING || HP_DEMANGLING) && (*anchor = strstr (mangled, "__pt__"))) { int len; *args = *anchor + 6; len = consume_count (args); if (len == -1) return 0; if (*args + len == mangled + n && **args == '_') { ++*args; return 1; } } if (AUTO_DEMANGLING || EDG_DEMANGLING) { if ((*anchor = strstr (mangled, "__tm__")) || (*anchor = strstr (mangled, "__ps__")) || (*anchor = strstr (mangled, "__pt__"))) { int len; *args = *anchor + 6; len = consume_count (args); if (len == -1) return 0; if (*args + len == mangled + n && **args == '_') { ++*args; return 1; } } else if ((*anchor = strstr (mangled, "__S"))) { int len; *args = *anchor + 3; len = consume_count (args); if (len == -1) return 0; if (*args + len == mangled + n && **args == '_') { ++*args; return 1; } } } return 0; } static void demangle_arm_hp_template (struct work_stuff *work, const char **mangled, int n, string *declp) { const char *p; const char *args; const char *e = *mangled + n; string arg; /* Check for HP aCC template spec: classXt1t2 where t1, t2 are template args */ if (HP_DEMANGLING && ((*mangled)[n] == 'X')) { char *start_spec_args = NULL; int hold_options; /* First check for and omit template specialization pseudo-arguments, such as in "Spec<#1,#1.*>" */ start_spec_args = strchr (*mangled, '<'); if (start_spec_args && (start_spec_args - *mangled < n)) string_appendn (declp, *mangled, start_spec_args - *mangled); else string_appendn (declp, *mangled, n); (*mangled) += n + 1; string_init (&arg); if (work->temp_start == -1) /* non-recursive call */ work->temp_start = declp->p - declp->b; /* We want to unconditionally demangle parameter types in template parameters. */ hold_options = work->options; work->options |= DMGL_PARAMS; string_append (declp, "<"); while (1) { string_delete (&arg); switch (**mangled) { case 'T': /* 'T' signals a type parameter */ (*mangled)++; if (!do_type (work, mangled, &arg)) goto hpacc_template_args_done; break; case 'U': case 'S': /* 'U' or 'S' signals an integral value */ if (!do_hpacc_template_const_value (work, mangled, &arg)) goto hpacc_template_args_done; break; case 'A': /* 'A' signals a named constant expression (literal) */ if (!do_hpacc_template_literal (work, mangled, &arg)) goto hpacc_template_args_done; break; default: /* Today, 1997-09-03, we have only the above types of template parameters */ /* FIXME: maybe this should fail and return null */ goto hpacc_template_args_done; } string_appends (declp, &arg); /* Check if we're at the end of template args. 0 if at end of static member of template class, _ if done with template args for a function */ if ((**mangled == '\000') || (**mangled == '_')) break; else string_append (declp, ","); } hpacc_template_args_done: string_append (declp, ">"); string_delete (&arg); if (**mangled == '_') (*mangled)++; work->options = hold_options; return; } /* ARM template? (Also handles HP cfront extensions) */ else if (arm_pt (work, *mangled, n, &p, &args)) { int hold_options; string type_str; string_init (&arg); string_appendn (declp, *mangled, p - *mangled); if (work->temp_start == -1) /* non-recursive call */ work->temp_start = declp->p - declp->b; /* We want to unconditionally demangle parameter types in template parameters. */ hold_options = work->options; work->options |= DMGL_PARAMS; string_append (declp, "<"); /* should do error checking here */ while (args < e) { string_delete (&arg); /* Check for type or literal here */ switch (*args) { /* HP cfront extensions to ARM for template args */ /* spec: Xt1Lv1 where t1 is a type, v1 is a literal value */ /* FIXME: We handle only numeric literals for HP cfront */ case 'X': /* A typed constant value follows */ args++; if (!do_type (work, &args, &type_str)) goto cfront_template_args_done; string_append (&arg, "("); string_appends (&arg, &type_str); string_delete (&type_str); string_append (&arg, ")"); if (*args != 'L') goto cfront_template_args_done; args++; /* Now snarf a literal value following 'L' */ if (!snarf_numeric_literal (&args, &arg)) goto cfront_template_args_done; break; case 'L': /* Snarf a literal following 'L' */ args++; if (!snarf_numeric_literal (&args, &arg)) goto cfront_template_args_done; break; default: /* Not handling other HP cfront stuff */ { const char* old_args = args; if (!do_type (work, &args, &arg)) goto cfront_template_args_done; /* Fail if we didn't make any progress: prevent infinite loop. */ if (args == old_args) { work->options = hold_options; return; } } } string_appends (declp, &arg); string_append (declp, ","); } cfront_template_args_done: string_delete (&arg); if (args >= e) --declp->p; /* remove extra comma */ string_append (declp, ">"); work->options = hold_options; } else if (n>10 && strncmp (*mangled, "_GLOBAL_", 8) == 0 && (*mangled)[9] == 'N' && (*mangled)[8] == (*mangled)[10] && strchr (cplus_markers, (*mangled)[8])) { /* A member of the anonymous namespace. */ string_append (declp, "{anonymous}"); } else { if (work->temp_start == -1) /* non-recursive call only */ work->temp_start = 0; /* disable in recursive calls */ string_appendn (declp, *mangled, n); } *mangled += n; } /* Extract a class name, possibly a template with arguments, from the mangled string; qualifiers, local class indicators, etc. have already been dealt with */ static int demangle_class_name (struct work_stuff *work, const char **mangled, string *declp) { int n; int success = 0; n = consume_count (mangled); if (n == -1) return 0; if ((int) strlen (*mangled) >= n) { demangle_arm_hp_template (work, mangled, n, declp); success = 1; } return (success); } /* LOCAL FUNCTION demangle_class -- demangle a mangled class sequence SYNOPSIS static int demangle_class (struct work_stuff *work, const char **mangled, strint *declp) DESCRIPTION DECLP points to the buffer into which demangling is being done. *MANGLED points to the current token to be demangled. On input, it points to a mangled class (I.E. "3foo", "13verylongclass", etc.) On exit, it points to the next token after the mangled class on success, or the first unconsumed token on failure. If the CONSTRUCTOR or DESTRUCTOR flags are set in WORK, then we are demangling a constructor or destructor. In this case we prepend "class::class" or "class::~class" to DECLP. Otherwise, we prepend "class::" to the current DECLP. Reset the constructor/destructor flags once they have been "consumed". This allows demangle_class to be called later during the same demangling, to do normal class demangling. Returns 1 if demangling is successful, 0 otherwise. */ static int demangle_class (struct work_stuff *work, const char **mangled, string *declp) { int success = 0; int btype; string class_name; char *save_class_name_end = 0; string_init (&class_name); btype = register_Btype (work); if (demangle_class_name (work, mangled, &class_name)) { save_class_name_end = class_name.p; if ((work->constructor & 1) || (work->destructor & 1)) { /* adjust so we don't include template args */ if (work->temp_start && (work->temp_start != -1)) { class_name.p = class_name.b + work->temp_start; } string_prepends (declp, &class_name); if (work -> destructor & 1) { string_prepend (declp, "~"); work -> destructor -= 1; } else { work -> constructor -= 1; } } class_name.p = save_class_name_end; remember_Ktype (work, class_name.b, LEN_STRING(&class_name)); remember_Btype (work, class_name.b, LEN_STRING(&class_name), btype); string_prepend (declp, SCOPE_STRING (work)); string_prepends (declp, &class_name); success = 1; } string_delete (&class_name); return (success); } /* Called when there's a "__" in the mangled name, with `scan' pointing to the rightmost guess. Find the correct "__"-sequence where the function name ends and the signature starts, which is ambiguous with GNU mangling. Call demangle_signature here, so we can make sure we found the right one; *mangled will be consumed so caller will not make further calls to demangle_signature. */ static int iterate_demangle_function (struct work_stuff *work, const char **mangled, string *declp, const char *scan) { const char *mangle_init = *mangled; int success = 0; string decl_init; struct work_stuff work_init; if (*(scan + 2) == '\0') return 0; /* Do not iterate for some demangling modes, or if there's only one "__"-sequence. This is the normal case. */ if (ARM_DEMANGLING || LUCID_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING || strstr (scan + 2, "__") == NULL) { demangle_function_name (work, mangled, declp, scan); return 1; } /* Save state so we can restart if the guess at the correct "__" was wrong. */ string_init (&decl_init); string_appends (&decl_init, declp); memset (&work_init, 0, sizeof work_init); work_stuff_copy_to_from (&work_init, work); /* Iterate over occurrences of __, allowing names and types to have a "__" sequence in them. We must start with the first (not the last) occurrence, since "__" most often occur between independent mangled parts, hence starting at the last occurence inside a signature might get us a "successful" demangling of the signature. */ while (scan[2]) { demangle_function_name (work, mangled, declp, scan); success = demangle_signature (work, mangled, declp); if (success) break; /* Reset demangle state for the next round. */ *mangled = mangle_init; string_clear (declp); string_appends (declp, &decl_init); work_stuff_copy_to_from (work, &work_init); /* Leave this underscore-sequence. */ scan += 2; /* Scan for the next "__" sequence. */ while (*scan && (scan[0] != '_' || scan[1] != '_')) scan++; /* Move to last "__" in this sequence. */ while (*scan && *scan == '_') scan++; scan -= 2; } /* Delete saved state. */ delete_work_stuff (&work_init); string_delete (&decl_init); return success; } /* LOCAL FUNCTION demangle_prefix -- consume the mangled name prefix and find signature SYNOPSIS static int demangle_prefix (struct work_stuff *work, const char **mangled, string *declp); DESCRIPTION Consume and demangle the prefix of the mangled name. While processing the function name root, arrange to call demangle_signature if the root is ambiguous. DECLP points to the string buffer into which demangled output is placed. On entry, the buffer is empty. On exit it contains the root function name, the demangled operator name, or in some special cases either nothing or the completely demangled result. MANGLED points to the current pointer into the mangled name. As each token of the mangled name is consumed, it is updated. Upon entry the current mangled name pointer points to the first character of the mangled name. Upon exit, it should point to the first character of the signature if demangling was successful, or to the first unconsumed character if demangling of the prefix was unsuccessful. Returns 1 on success, 0 otherwise. */ static int demangle_prefix (struct work_stuff *work, const char **mangled, string *declp) { int success = 1; const char *scan; int i; if (strlen(*mangled) > 6 && (strncmp(*mangled, "_imp__", 6) == 0 || strncmp(*mangled, "__imp_", 6) == 0)) { /* it's a symbol imported from a PE dynamic library. Check for both new style prefix _imp__ and legacy __imp_ used by older versions of dlltool. */ (*mangled) += 6; work->dllimported = 1; } else if (strlen(*mangled) >= 11 && strncmp(*mangled, "_GLOBAL_", 8) == 0) { char *marker = strchr (cplus_markers, (*mangled)[8]); if (marker != NULL && *marker == (*mangled)[10]) { if ((*mangled)[9] == 'D') { /* it's a GNU global destructor to be executed at program exit */ (*mangled) += 11; work->destructor = 2; if (gnu_special (work, mangled, declp)) return success; } else if ((*mangled)[9] == 'I') { /* it's a GNU global constructor to be executed at program init */ (*mangled) += 11; work->constructor = 2; if (gnu_special (work, mangled, declp)) return success; } } } else if ((ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING) && strncmp(*mangled, "__std__", 7) == 0) { /* it's a ARM global destructor to be executed at program exit */ (*mangled) += 7; work->destructor = 2; } else if ((ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING) && strncmp(*mangled, "__sti__", 7) == 0) { /* it's a ARM global constructor to be executed at program initial */ (*mangled) += 7; work->constructor = 2; } /* This block of code is a reduction in strength time optimization of: scan = strstr (*mangled, "__"); */ { scan = *mangled; do { scan = strchr (scan, '_'); } while (scan != NULL && *++scan != '_'); if (scan != NULL) --scan; } if (scan != NULL) { /* We found a sequence of two or more '_', ensure that we start at the last pair in the sequence. */ i = strspn (scan, "_"); if (i > 2) { scan += (i - 2); } } if (scan == NULL) { success = 0; } else if (work -> static_type) { if (!ISDIGIT ((unsigned char)scan[0]) && (scan[0] != 't')) { success = 0; } } else if ((scan == *mangled) && (ISDIGIT ((unsigned char)scan[2]) || (scan[2] == 'Q') || (scan[2] == 't') || (scan[2] == 'K') || (scan[2] == 'H'))) { /* The ARM says nothing about the mangling of local variables. But cfront mangles local variables by prepending __ to them. As an extension to ARM demangling we handle this case. */ if ((LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING) && ISDIGIT ((unsigned char)scan[2])) { *mangled = scan + 2; consume_count (mangled); string_append (declp, *mangled); *mangled += strlen (*mangled); success = 1; } else { /* A GNU style constructor starts with __[0-9Qt]. But cfront uses names like __Q2_3foo3bar for nested type names. So don't accept this style of constructor for cfront demangling. A GNU style member-template constructor starts with 'H'. */ if (!(LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING)) work -> constructor += 1; *mangled = scan + 2; } } else if (ARM_DEMANGLING && scan[2] == 'p' && scan[3] == 't') { /* Cfront-style parameterized type. Handled later as a signature. */ success = 1; /* ARM template? */ demangle_arm_hp_template (work, mangled, strlen (*mangled), declp); } else if (EDG_DEMANGLING && ((scan[2] == 't' && scan[3] == 'm') || (scan[2] == 'p' && scan[3] == 's') || (scan[2] == 'p' && scan[3] == 't'))) { /* EDG-style parameterized type. Handled later as a signature. */ success = 1; /* EDG template? */ demangle_arm_hp_template (work, mangled, strlen (*mangled), declp); } else if ((scan == *mangled) && !ISDIGIT ((unsigned char)scan[2]) && (scan[2] != 't')) { /* Mangled name starts with "__". Skip over any leading '_' characters, then find the next "__" that separates the prefix from the signature. */ if (!(ARM_DEMANGLING || LUCID_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING) || (arm_special (mangled, declp) == 0)) { while (*scan == '_') { scan++; } if ((scan = strstr (scan, "__")) == NULL || (*(scan + 2) == '\0')) { /* No separator (I.E. "__not_mangled"), or empty signature (I.E. "__not_mangled_either__") */ success = 0; } else return iterate_demangle_function (work, mangled, declp, scan); } } else if (*(scan + 2) != '\0') { /* Mangled name does not start with "__" but does have one somewhere in there with non empty stuff after it. Looks like a global function name. Iterate over all "__":s until the right one is found. */ return iterate_demangle_function (work, mangled, declp, scan); } else { /* Doesn't look like a mangled name */ success = 0; } if (!success && (work->constructor == 2 || work->destructor == 2)) { string_append (declp, *mangled); *mangled += strlen (*mangled); success = 1; } return (success); } /* LOCAL FUNCTION gnu_special -- special handling of gnu mangled strings SYNOPSIS static int gnu_special (struct work_stuff *work, const char **mangled, string *declp); DESCRIPTION Process some special GNU style mangling forms that don't fit the normal pattern. For example: _$_3foo (destructor for class foo) _vt$foo (foo virtual table) _vt$foo$bar (foo::bar virtual table) __vt_foo (foo virtual table, new style with thunks) _3foo$varname (static data member) _Q22rs2tu$vw (static data member) __t6vector1Zii (constructor with template) __thunk_4__$_7ostream (virtual function thunk) */ static int gnu_special (struct work_stuff *work, const char **mangled, string *declp) { int n; int success = 1; const char *p; if ((*mangled)[0] == '_' && strchr (cplus_markers, (*mangled)[1]) != NULL && (*mangled)[2] == '_') { /* Found a GNU style destructor, get past "__" */ (*mangled) += 3; work -> destructor += 1; } else if ((*mangled)[0] == '_' && (((*mangled)[1] == '_' && (*mangled)[2] == 'v' && (*mangled)[3] == 't' && (*mangled)[4] == '_') || ((*mangled)[1] == 'v' && (*mangled)[2] == 't' && strchr (cplus_markers, (*mangled)[3]) != NULL))) { /* Found a GNU style virtual table, get past "_vt" and create the decl. Note that we consume the entire mangled input string, which means that demangle_signature has no work to do. */ if ((*mangled)[2] == 'v') (*mangled) += 5; /* New style, with thunks: "__vt_" */ else (*mangled) += 4; /* Old style, no thunks: "_vt" */ while (**mangled != '\0') { switch (**mangled) { case 'Q': case 'K': success = demangle_qualified (work, mangled, declp, 0, 1); break; case 't': success = demangle_template (work, mangled, declp, 0, 1, 1); break; default: if (ISDIGIT((unsigned char)*mangled[0])) { n = consume_count(mangled); /* We may be seeing a too-large size, or else a "." indicating a static local symbol. In any case, declare victory and move on; *don't* try to use n to allocate. */ if (n > (int) strlen (*mangled)) { success = 1; break; } } else { n = strcspn (*mangled, cplus_markers); } string_appendn (declp, *mangled, n); (*mangled) += n; } p = strpbrk (*mangled, cplus_markers); if (success && ((p == NULL) || (p == *mangled))) { if (p != NULL) { string_append (declp, SCOPE_STRING (work)); (*mangled)++; } } else { success = 0; break; } } if (success) string_append (declp, " virtual table"); } else if ((*mangled)[0] == '_' && (strchr("0123456789Qt", (*mangled)[1]) != NULL) && (p = strpbrk (*mangled, cplus_markers)) != NULL) { /* static data member, "_3foo$varname" for example */ (*mangled)++; switch (**mangled) { case 'Q': case 'K': success = demangle_qualified (work, mangled, declp, 0, 1); break; case 't': success = demangle_template (work, mangled, declp, 0, 1, 1); break; default: n = consume_count (mangled); if (n < 0 || n > (long) strlen (*mangled)) { success = 0; break; } if (n > 10 && strncmp (*mangled, "_GLOBAL_", 8) == 0 && (*mangled)[9] == 'N' && (*mangled)[8] == (*mangled)[10] && strchr (cplus_markers, (*mangled)[8])) { /* A member of the anonymous namespace. There's information about what identifier or filename it was keyed to, but it's just there to make the mangled name unique; we just step over it. */ string_append (declp, "{anonymous}"); (*mangled) += n; /* Now p points to the marker before the N, so we need to update it to the first marker after what we consumed. */ p = strpbrk (*mangled, cplus_markers); break; } string_appendn (declp, *mangled, n); (*mangled) += n; } if (success && (p == *mangled)) { /* Consumed everything up to the cplus_marker, append the variable name. */ (*mangled)++; string_append (declp, SCOPE_STRING (work)); n = strlen (*mangled); string_appendn (declp, *mangled, n); (*mangled) += n; } else { success = 0; } } else if (strncmp (*mangled, "__thunk_", 8) == 0) { int delta; (*mangled) += 8; delta = consume_count (mangled); if (delta == -1) success = 0; else { char *method = internal_cplus_demangle (work, ++*mangled); if (method) { char buf[50]; sprintf (buf, "virtual function thunk (delta:%d) for ", -delta); string_append (declp, buf); string_append (declp, method); free (method); n = strlen (*mangled); (*mangled) += n; } else { success = 0; } } } else if (strncmp (*mangled, "__t", 3) == 0 && ((*mangled)[3] == 'i' || (*mangled)[3] == 'f')) { p = (*mangled)[3] == 'i' ? " type_info node" : " type_info function"; (*mangled) += 4; switch (**mangled) { case 'Q': case 'K': success = demangle_qualified (work, mangled, declp, 0, 1); break; case 't': success = demangle_template (work, mangled, declp, 0, 1, 1); break; default: success = do_type (work, mangled, declp); break; } if (success && **mangled != '\0') success = 0; if (success) string_append (declp, p); } else { success = 0; } return (success); } static void recursively_demangle(struct work_stuff *work, const char **mangled, string *result, int namelength) { char * recurse = (char *)NULL; char * recurse_dem = (char *)NULL; recurse = XNEWVEC (char, namelength + 1); memcpy (recurse, *mangled, namelength); recurse[namelength] = '\000'; recurse_dem = cplus_demangle (recurse, work->options); if (recurse_dem) { string_append (result, recurse_dem); free (recurse_dem); } else { string_appendn (result, *mangled, namelength); } free (recurse); *mangled += namelength; } /* LOCAL FUNCTION arm_special -- special handling of ARM/lucid mangled strings SYNOPSIS static int arm_special (const char **mangled, string *declp); DESCRIPTION Process some special ARM style mangling forms that don't fit the normal pattern. For example: __vtbl__3foo (foo virtual table) __vtbl__3foo__3bar (bar::foo virtual table) */ static int arm_special (const char **mangled, string *declp) { int n; int success = 1; const char *scan; if (strncmp (*mangled, ARM_VTABLE_STRING, ARM_VTABLE_STRLEN) == 0) { /* Found a ARM style virtual table, get past ARM_VTABLE_STRING and create the decl. Note that we consume the entire mangled input string, which means that demangle_signature has no work to do. */ scan = *mangled + ARM_VTABLE_STRLEN; while (*scan != '\0') /* first check it can be demangled */ { n = consume_count (&scan); if (n == -1) { return (0); /* no good */ } scan += n; if (scan[0] == '_' && scan[1] == '_') { scan += 2; } } (*mangled) += ARM_VTABLE_STRLEN; while (**mangled != '\0') { n = consume_count (mangled); if (n == -1 || n > (long) strlen (*mangled)) return 0; string_prependn (declp, *mangled, n); (*mangled) += n; if ((*mangled)[0] == '_' && (*mangled)[1] == '_') { string_prepend (declp, "::"); (*mangled) += 2; } } string_append (declp, " virtual table"); } else { success = 0; } return (success); } /* LOCAL FUNCTION demangle_qualified -- demangle 'Q' qualified name strings SYNOPSIS static int demangle_qualified (struct work_stuff *, const char *mangled, string *result, int isfuncname, int append); DESCRIPTION Demangle a qualified name, such as "Q25Outer5Inner" which is the mangled form of "Outer::Inner". The demangled output is prepended or appended to the result string according to the state of the append flag. If isfuncname is nonzero, then the qualified name we are building is going to be used as a member function name, so if it is a constructor or destructor function, append an appropriate constructor or destructor name. I.E. for the above example, the result for use as a constructor is "Outer::Inner::Inner" and the result for use as a destructor is "Outer::Inner::~Inner". BUGS Numeric conversion is ASCII dependent (FIXME). */ static int demangle_qualified (struct work_stuff *work, const char **mangled, string *result, int isfuncname, int append) { int qualifiers = 0; int success = 1; char num[2]; string temp; string last_name; int bindex = register_Btype (work); /* We only make use of ISFUNCNAME if the entity is a constructor or destructor. */ isfuncname = (isfuncname && ((work->constructor & 1) || (work->destructor & 1))); string_init (&temp); string_init (&last_name); if ((*mangled)[0] == 'K') { /* Squangling qualified name reuse */ int idx; (*mangled)++; idx = consume_count_with_underscores (mangled); if (idx == -1 || idx >= work -> numk) success = 0; else string_append (&temp, work -> ktypevec[idx]); } else switch ((*mangled)[1]) { case '_': /* GNU mangled name with more than 9 classes. The count is preceded by an underscore (to distinguish it from the <= 9 case) and followed by an underscore. */ (*mangled)++; qualifiers = consume_count_with_underscores (mangled); if (qualifiers == -1) success = 0; break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': /* The count is in a single digit. */ num[0] = (*mangled)[1]; num[1] = '\0'; qualifiers = atoi (num); /* If there is an underscore after the digit, skip it. This is said to be for ARM-qualified names, but the ARM makes no mention of such an underscore. Perhaps cfront uses one. */ if ((*mangled)[2] == '_') { (*mangled)++; } (*mangled) += 2; break; case '0': default: success = 0; } if (!success) return success; /* Pick off the names and collect them in the temp buffer in the order in which they are found, separated by '::'. */ while (qualifiers-- > 0) { int remember_K = 1; string_clear (&last_name); if (*mangled[0] == '_') (*mangled)++; if (*mangled[0] == 't') { /* Here we always append to TEMP since we will want to use the template name without the template parameters as a constructor or destructor name. The appropriate (parameter-less) value is returned by demangle_template in LAST_NAME. We do not remember the template type here, in order to match the G++ mangling algorithm. */ success = demangle_template(work, mangled, &temp, &last_name, 1, 0); if (!success) break; } else if (*mangled[0] == 'K') { int idx; (*mangled)++; idx = consume_count_with_underscores (mangled); if (idx == -1 || idx >= work->numk) success = 0; else string_append (&temp, work->ktypevec[idx]); remember_K = 0; if (!success) break; } else { if (EDG_DEMANGLING) { int namelength; /* Now recursively demangle the qualifier * This is necessary to deal with templates in * mangling styles like EDG */ namelength = consume_count (mangled); if (namelength == -1) { success = 0; break; } recursively_demangle(work, mangled, &temp, namelength); } else { string_delete (&last_name); success = do_type (work, mangled, &last_name); if (!success) break; string_appends (&temp, &last_name); } } if (remember_K) remember_Ktype (work, temp.b, LEN_STRING (&temp)); if (qualifiers > 0) string_append (&temp, SCOPE_STRING (work)); } remember_Btype (work, temp.b, LEN_STRING (&temp), bindex); /* If we are using the result as a function name, we need to append the appropriate '::' separated constructor or destructor name. We do this here because this is the most convenient place, where we already have a pointer to the name and the length of the name. */ if (isfuncname) { string_append (&temp, SCOPE_STRING (work)); if (work -> destructor & 1) string_append (&temp, "~"); string_appends (&temp, &last_name); } /* Now either prepend the temp buffer to the result, or append it, depending upon the state of the append flag. */ if (append) string_appends (result, &temp); else { if (!STRING_EMPTY (result)) string_append (&temp, SCOPE_STRING (work)); string_prepends (result, &temp); } string_delete (&last_name); string_delete (&temp); return (success); } /* LOCAL FUNCTION get_count -- convert an ascii count to integer, consuming tokens SYNOPSIS static int get_count (const char **type, int *count) DESCRIPTION Assume that *type points at a count in a mangled name; set *count to its value, and set *type to the next character after the count. There are some weird rules in effect here. If *type does not point at a string of digits, return zero. If *type points at a string of digits followed by an underscore, set *count to their value as an integer, advance *type to point *after the underscore, and return 1. If *type points at a string of digits not followed by an underscore, consume only the first digit. Set *count to its value as an integer, leave *type pointing after that digit, and return 1. The excuse for this odd behavior: in the ARM and HP demangling styles, a type can be followed by a repeat count of the form `Nxy', where: `x' is a single digit specifying how many additional copies of the type to append to the argument list, and `y' is one or more digits, specifying the zero-based index of the first repeated argument in the list. Yes, as you're unmangling the name you can figure this out yourself, but it's there anyway. So, for example, in `bar__3fooFPiN51', the first argument is a pointer to an integer (`Pi'), and then the next five arguments are the same (`N5'), and the first repeat is the function's second argument (`1'). */ static int get_count (const char **type, int *count) { const char *p; int n; if (!ISDIGIT ((unsigned char)**type)) return (0); else { *count = **type - '0'; (*type)++; if (ISDIGIT ((unsigned char)**type)) { p = *type; n = *count; do { n *= 10; n += *p - '0'; p++; } while (ISDIGIT ((unsigned char)*p)); if (*p == '_') { *type = p + 1; *count = n; } } } return (1); } /* RESULT will be initialised here; it will be freed on failure. The value returned is really a type_kind_t. */ static int do_type (struct work_stuff *work, const char **mangled, string *result) { int n; int done; int success; string decl; const char *remembered_type; int type_quals; type_kind_t tk = tk_none; string_init (&decl); string_init (result); done = 0; success = 1; while (success && !done) { int member; switch (**mangled) { /* A pointer type */ case 'P': case 'p': (*mangled)++; if (! (work -> options & DMGL_JAVA)) string_prepend (&decl, "*"); if (tk == tk_none) tk = tk_pointer; break; /* A reference type */ case 'R': (*mangled)++; string_prepend (&decl, "&"); if (tk == tk_none) tk = tk_reference; break; /* An array */ case 'A': { ++(*mangled); if (!STRING_EMPTY (&decl) && (decl.b[0] == '*' || decl.b[0] == '&')) { string_prepend (&decl, "("); string_append (&decl, ")"); } string_append (&decl, "["); if (**mangled != '_') success = demangle_template_value_parm (work, mangled, &decl, tk_integral); if (**mangled == '_') ++(*mangled); string_append (&decl, "]"); break; } /* A back reference to a previously seen type */ case 'T': (*mangled)++; if (!get_count (mangled, &n) || n >= work -> ntypes) { success = 0; } else { remembered_type = work -> typevec[n]; mangled = &remembered_type; } break; /* A function */ case 'F': (*mangled)++; if (!STRING_EMPTY (&decl) && (decl.b[0] == '*' || decl.b[0] == '&')) { string_prepend (&decl, "("); string_append (&decl, ")"); } /* After picking off the function args, we expect to either find the function return type (preceded by an '_') or the end of the string. */ if (!demangle_nested_args (work, mangled, &decl) || (**mangled != '_' && **mangled != '\0')) { success = 0; break; } if (success && (**mangled == '_')) (*mangled)++; break; case 'M': case 'O': { type_quals = TYPE_UNQUALIFIED; member = **mangled == 'M'; (*mangled)++; string_append (&decl, ")"); /* We don't need to prepend `::' for a qualified name; demangle_qualified will do that for us. */ if (**mangled != 'Q') string_prepend (&decl, SCOPE_STRING (work)); if (ISDIGIT ((unsigned char)**mangled)) { n = consume_count (mangled); if (n == -1 || (int) strlen (*mangled) < n) { success = 0; break; } string_prependn (&decl, *mangled, n); *mangled += n; } else if (**mangled == 'X' || **mangled == 'Y') { string temp; do_type (work, mangled, &temp); string_prepends (&decl, &temp); string_delete (&temp); } else if (**mangled == 't') { string temp; string_init (&temp); success = demangle_template (work, mangled, &temp, NULL, 1, 1); if (success) { string_prependn (&decl, temp.b, temp.p - temp.b); string_delete (&temp); } else break; } else if (**mangled == 'Q') { success = demangle_qualified (work, mangled, &decl, /*isfuncnam=*/0, /*append=*/0); if (!success) break; } else { success = 0; break; } string_prepend (&decl, "("); if (member) { switch (**mangled) { case 'C': case 'V': case 'u': type_quals |= code_for_qualifier (**mangled); (*mangled)++; break; default: break; } if (*(*mangled)++ != 'F') { success = 0; break; } } if ((member && !demangle_nested_args (work, mangled, &decl)) || **mangled != '_') { success = 0; break; } (*mangled)++; if (! PRINT_ANSI_QUALIFIERS) { break; } if (type_quals != TYPE_UNQUALIFIED) { APPEND_BLANK (&decl); string_append (&decl, qualifier_string (type_quals)); } break; } case 'G': (*mangled)++; break; case 'C': case 'V': case 'u': if (PRINT_ANSI_QUALIFIERS) { if (!STRING_EMPTY (&decl)) string_prepend (&decl, " "); string_prepend (&decl, demangle_qualifier (**mangled)); } (*mangled)++; break; /* } */ /* fall through */ default: done = 1; break; } } if (success) switch (**mangled) { /* A qualified name, such as "Outer::Inner". */ case 'Q': case 'K': { success = demangle_qualified (work, mangled, result, 0, 1); break; } /* A back reference to a previously seen squangled type */ case 'B': (*mangled)++; if (!get_count (mangled, &n) || n >= work -> numb) success = 0; else string_append (result, work->btypevec[n]); break; case 'X': case 'Y': /* A template parm. We substitute the corresponding argument. */ { int idx; (*mangled)++; idx = consume_count_with_underscores (mangled); if (idx == -1 || (work->tmpl_argvec && idx >= work->ntmpl_args) || consume_count_with_underscores (mangled) == -1) { success = 0; break; } if (work->tmpl_argvec) string_append (result, work->tmpl_argvec[idx]); else string_append_template_idx (result, idx); success = 1; } break; default: success = demangle_fund_type (work, mangled, result); if (tk == tk_none) tk = (type_kind_t) success; break; } if (success) { if (!STRING_EMPTY (&decl)) { string_append (result, " "); string_appends (result, &decl); } } else string_delete (result); string_delete (&decl); if (success) /* Assume an integral type, if we're not sure. */ return (int) ((tk == tk_none) ? tk_integral : tk); else return 0; } /* Given a pointer to a type string that represents a fundamental type argument (int, long, unsigned int, etc) in TYPE, a pointer to the string in which the demangled output is being built in RESULT, and the WORK structure, decode the types and add them to the result. For example: "Ci" => "const int" "Sl" => "signed long" "CUs" => "const unsigned short" The value returned is really a type_kind_t. */ static int demangle_fund_type (struct work_stuff *work, const char **mangled, string *result) { int done = 0; int success = 1; char buf[INTBUF_SIZE + 5 /* 'int%u_t' */]; unsigned int dec = 0; type_kind_t tk = tk_integral; /* First pick off any type qualifiers. There can be more than one. */ while (!done) { switch (**mangled) { case 'C': case 'V': case 'u': if (PRINT_ANSI_QUALIFIERS) { if (!STRING_EMPTY (result)) string_prepend (result, " "); string_prepend (result, demangle_qualifier (**mangled)); } (*mangled)++; break; case 'U': (*mangled)++; APPEND_BLANK (result); string_append (result, "unsigned"); break; case 'S': /* signed char only */ (*mangled)++; APPEND_BLANK (result); string_append (result, "signed"); break; case 'J': (*mangled)++; APPEND_BLANK (result); string_append (result, "__complex"); break; default: done = 1; break; } } /* Now pick off the fundamental type. There can be only one. */ switch (**mangled) { case '\0': case '_': break; case 'v': (*mangled)++; APPEND_BLANK (result); string_append (result, "void"); break; case 'x': (*mangled)++; APPEND_BLANK (result); string_append (result, "long long"); break; case 'l': (*mangled)++; APPEND_BLANK (result); string_append (result, "long"); break; case 'i': (*mangled)++; APPEND_BLANK (result); string_append (result, "int"); break; case 's': (*mangled)++; APPEND_BLANK (result); string_append (result, "short"); break; case 'b': (*mangled)++; APPEND_BLANK (result); string_append (result, "bool"); tk = tk_bool; break; case 'c': (*mangled)++; APPEND_BLANK (result); string_append (result, "char"); tk = tk_char; break; case 'w': (*mangled)++; APPEND_BLANK (result); string_append (result, "wchar_t"); tk = tk_char; break; case 'r': (*mangled)++; APPEND_BLANK (result); string_append (result, "long double"); tk = tk_real; break; case 'd': (*mangled)++; APPEND_BLANK (result); string_append (result, "double"); tk = tk_real; break; case 'f': (*mangled)++; APPEND_BLANK (result); string_append (result, "float"); tk = tk_real; break; case 'G': (*mangled)++; if (!ISDIGIT ((unsigned char)**mangled)) { success = 0; break; } case 'I': (*mangled)++; if (**mangled == '_') { int i; (*mangled)++; for (i = 0; i < (long) sizeof (buf) - 1 && **mangled && **mangled != '_'; (*mangled)++, i++) buf[i] = **mangled; if (**mangled != '_') { success = 0; break; } buf[i] = '\0'; (*mangled)++; } else { strncpy (buf, *mangled, 2); buf[2] = '\0'; *mangled += min (strlen (*mangled), 2); } sscanf (buf, "%x", &dec); sprintf (buf, "int%u_t", dec); APPEND_BLANK (result); string_append (result, buf); break; /* fall through */ /* An explicit type, such as "6mytype" or "7integer" */ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { int bindex = register_Btype (work); string btype; string_init (&btype); if (demangle_class_name (work, mangled, &btype)) { remember_Btype (work, btype.b, LEN_STRING (&btype), bindex); APPEND_BLANK (result); string_appends (result, &btype); } else success = 0; string_delete (&btype); break; } case 't': { string btype; string_init (&btype); success = demangle_template (work, mangled, &btype, 0, 1, 1); string_appends (result, &btype); string_delete (&btype); break; } default: success = 0; break; } return success ? ((int) tk) : 0; } /* Handle a template's value parameter for HP aCC (extension from ARM) **mangled points to 'S' or 'U' */ static int do_hpacc_template_const_value (struct work_stuff *work ATTRIBUTE_UNUSED, const char **mangled, string *result) { int unsigned_const; if (**mangled != 'U' && **mangled != 'S') return 0; unsigned_const = (**mangled == 'U'); (*mangled)++; switch (**mangled) { case 'N': string_append (result, "-"); /* fall through */ case 'P': (*mangled)++; break; case 'M': /* special case for -2^31 */ string_append (result, "-2147483648"); (*mangled)++; return 1; default: return 0; } /* We have to be looking at an integer now */ if (!(ISDIGIT ((unsigned char)**mangled))) return 0; /* We only deal with integral values for template parameters -- so it's OK to look only for digits */ while (ISDIGIT ((unsigned char)**mangled)) { char_str[0] = **mangled; string_append (result, char_str); (*mangled)++; } if (unsigned_const) string_append (result, "U"); /* FIXME? Some day we may have 64-bit (or larger :-) ) constants with L or LL suffixes. pai/1997-09-03 */ return 1; /* success */ } /* Handle a template's literal parameter for HP aCC (extension from ARM) **mangled is pointing to the 'A' */ static int do_hpacc_template_literal (struct work_stuff *work, const char **mangled, string *result) { int literal_len = 0; char * recurse; char * recurse_dem; if (**mangled != 'A') return 0; (*mangled)++; literal_len = consume_count (mangled); if (literal_len <= 0) return 0; /* Literal parameters are names of arrays, functions, etc. and the canonical representation uses the address operator */ string_append (result, "&"); /* Now recursively demangle the literal name */ recurse = XNEWVEC (char, literal_len + 1); memcpy (recurse, *mangled, literal_len); recurse[literal_len] = '\000'; recurse_dem = cplus_demangle (recurse, work->options); if (recurse_dem) { string_append (result, recurse_dem); free (recurse_dem); } else { string_appendn (result, *mangled, literal_len); } (*mangled) += literal_len; free (recurse); return 1; } static int snarf_numeric_literal (const char **args, string *arg) { if (**args == '-') { char_str[0] = '-'; string_append (arg, char_str); (*args)++; } else if (**args == '+') (*args)++; if (!ISDIGIT ((unsigned char)**args)) return 0; while (ISDIGIT ((unsigned char)**args)) { char_str[0] = **args; string_append (arg, char_str); (*args)++; } return 1; } /* Demangle the next argument, given by MANGLED into RESULT, which *should be an uninitialized* string. It will be initialized here, and free'd should anything go wrong. */ static int do_arg (struct work_stuff *work, const char **mangled, string *result) { /* Remember where we started so that we can record the type, for non-squangling type remembering. */ const char *start = *mangled; string_init (result); if (work->nrepeats > 0) { --work->nrepeats; if (work->previous_argument == 0) return 0; /* We want to reissue the previous type in this argument list. */ string_appends (result, work->previous_argument); return 1; } if (**mangled == 'n') { /* A squangling-style repeat. */ (*mangled)++; work->nrepeats = consume_count(mangled); if (work->nrepeats <= 0) /* This was not a repeat count after all. */ return 0; if (work->nrepeats > 9) { if (**mangled != '_') /* The repeat count should be followed by an '_' in this case. */ return 0; else (*mangled)++; } /* Now, the repeat is all set up. */ return do_arg (work, mangled, result); } /* Save the result in WORK->previous_argument so that we can find it if it's repeated. Note that saving START is not good enough: we do not want to add additional types to the back-referenceable type vector when processing a repeated type. */ if (work->previous_argument) string_delete (work->previous_argument); else work->previous_argument = XNEW (string); if (!do_type (work, mangled, work->previous_argument)) return 0; string_appends (result, work->previous_argument); remember_type (work, start, *mangled - start); return 1; } static void remember_type (struct work_stuff *work, const char *start, int len) { char *tem; if (work->forgetting_types) return; if (work -> ntypes >= work -> typevec_size) { if (work -> typevec_size == 0) { work -> typevec_size = 3; work -> typevec = XNEWVEC (char *, work->typevec_size); } else { work -> typevec_size *= 2; work -> typevec = XRESIZEVEC (char *, work->typevec, work->typevec_size); } } tem = XNEWVEC (char, len + 1); memcpy (tem, start, len); tem[len] = '\0'; work -> typevec[work -> ntypes++] = tem; } /* Remember a K type class qualifier. */ static void remember_Ktype (struct work_stuff *work, const char *start, int len) { char *tem; if (work -> numk >= work -> ksize) { if (work -> ksize == 0) { work -> ksize = 5; work -> ktypevec = XNEWVEC (char *, work->ksize); } else { work -> ksize *= 2; work -> ktypevec = XRESIZEVEC (char *, work->ktypevec, work->ksize); } } tem = XNEWVEC (char, len + 1); memcpy (tem, start, len); tem[len] = '\0'; work -> ktypevec[work -> numk++] = tem; } /* Register a B code, and get an index for it. B codes are registered as they are seen, rather than as they are completed, so map > registers map > as B0, and temp as B1 */ static int register_Btype (struct work_stuff *work) { int ret; if (work -> numb >= work -> bsize) { if (work -> bsize == 0) { work -> bsize = 5; work -> btypevec = XNEWVEC (char *, work->bsize); } else { work -> bsize *= 2; work -> btypevec = XRESIZEVEC (char *, work->btypevec, work->bsize); } } ret = work -> numb++; work -> btypevec[ret] = NULL; return(ret); } /* Store a value into a previously registered B code type. */ static void remember_Btype (struct work_stuff *work, const char *start, int len, int index) { char *tem; tem = XNEWVEC (char, len + 1); memcpy (tem, start, len); tem[len] = '\0'; work -> btypevec[index] = tem; } /* Lose all the info related to B and K type codes. */ static void forget_B_and_K_types (struct work_stuff *work) { int i; while (work -> numk > 0) { i = --(work -> numk); if (work -> ktypevec[i] != NULL) { free (work -> ktypevec[i]); work -> ktypevec[i] = NULL; } } while (work -> numb > 0) { i = --(work -> numb); if (work -> btypevec[i] != NULL) { free (work -> btypevec[i]); work -> btypevec[i] = NULL; } } } /* Forget the remembered types, but not the type vector itself. */ static void forget_types (struct work_stuff *work) { int i; while (work -> ntypes > 0) { i = --(work -> ntypes); if (work -> typevec[i] != NULL) { free (work -> typevec[i]); work -> typevec[i] = NULL; } } } /* Process the argument list part of the signature, after any class spec has been consumed, as well as the first 'F' character (if any). For example: "__als__3fooRT0" => process "RT0" "complexfunc5__FPFPc_PFl_i" => process "PFPc_PFl_i" DECLP must be already initialised, usually non-empty. It won't be freed on failure. Note that g++ differs significantly from ARM and lucid style mangling with regards to references to previously seen types. For example, given the source fragment: class foo { public: foo::foo (int, foo &ia, int, foo &ib, int, foo &ic); }; foo::foo (int, foo &ia, int, foo &ib, int, foo &ic) { ia = ib = ic; } void foo (int, foo &ia, int, foo &ib, int, foo &ic) { ia = ib = ic; } g++ produces the names: __3fooiRT0iT2iT2 foo__FiR3fooiT1iT1 while lcc (and presumably other ARM style compilers as well) produces: foo__FiR3fooT1T2T1T2 __ct__3fooFiR3fooT1T2T1T2 Note that g++ bases its type numbers starting at zero and counts all previously seen types, while lucid/ARM bases its type numbers starting at one and only considers types after it has seen the 'F' character indicating the start of the function args. For lucid/ARM style, we account for this difference by discarding any previously seen types when we see the 'F' character, and subtracting one from the type number reference. */ static int demangle_args (struct work_stuff *work, const char **mangled, string *declp) { string arg; int need_comma = 0; int r; int t; const char *tem; char temptype; if (PRINT_ARG_TYPES) { string_append (declp, "("); if (**mangled == '\0') { string_append (declp, "void"); } } while ((**mangled != '_' && **mangled != '\0' && **mangled != 'e') || work->nrepeats > 0) { if ((**mangled == 'N') || (**mangled == 'T')) { temptype = *(*mangled)++; if (temptype == 'N') { if (!get_count (mangled, &r)) { return (0); } } else { r = 1; } if ((HP_DEMANGLING || ARM_DEMANGLING || EDG_DEMANGLING) && work -> ntypes >= 10) { /* If we have 10 or more types we might have more than a 1 digit index so we'll have to consume the whole count here. This will lose if the next thing is a type name preceded by a count but it's impossible to demangle that case properly anyway. Eg if we already have 12 types is T12Pc "(..., type1, Pc, ...)" or "(..., type12, char *, ...)" */ if ((t = consume_count(mangled)) <= 0) { return (0); } } else { if (!get_count (mangled, &t)) { return (0); } } if (LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING) { t--; } /* Validate the type index. Protect against illegal indices from malformed type strings. */ if ((t < 0) || (t >= work -> ntypes)) { return (0); } while (work->nrepeats > 0 || --r >= 0) { tem = work -> typevec[t]; if (need_comma && PRINT_ARG_TYPES) { string_append (declp, ", "); } if (!do_arg (work, &tem, &arg)) { return (0); } if (PRINT_ARG_TYPES) { string_appends (declp, &arg); } string_delete (&arg); need_comma = 1; } } else { if (need_comma && PRINT_ARG_TYPES) string_append (declp, ", "); if (!do_arg (work, mangled, &arg)) return (0); if (PRINT_ARG_TYPES) string_appends (declp, &arg); string_delete (&arg); need_comma = 1; } } if (**mangled == 'e') { (*mangled)++; if (PRINT_ARG_TYPES) { if (need_comma) { string_append (declp, ","); } string_append (declp, "..."); } } if (PRINT_ARG_TYPES) { string_append (declp, ")"); } return (1); } /* Like demangle_args, but for demangling the argument lists of function and method pointers or references, not top-level declarations. */ static int demangle_nested_args (struct work_stuff *work, const char **mangled, string *declp) { string* saved_previous_argument; int result; int saved_nrepeats; /* The G++ name-mangling algorithm does not remember types on nested argument lists, unless -fsquangling is used, and in that case the type vector updated by remember_type is not used. So, we turn off remembering of types here. */ ++work->forgetting_types; /* For the repeat codes used with -fsquangling, we must keep track of the last argument. */ saved_previous_argument = work->previous_argument; saved_nrepeats = work->nrepeats; work->previous_argument = 0; work->nrepeats = 0; /* Actually demangle the arguments. */ result = demangle_args (work, mangled, declp); /* Restore the previous_argument field. */ if (work->previous_argument) { string_delete (work->previous_argument); free ((char *) work->previous_argument); } work->previous_argument = saved_previous_argument; --work->forgetting_types; work->nrepeats = saved_nrepeats; return result; } static void demangle_function_name (struct work_stuff *work, const char **mangled, string *declp, const char *scan) { size_t i; string type; const char *tem; string_appendn (declp, (*mangled), scan - (*mangled)); string_need (declp, 1); *(declp -> p) = '\0'; /* Consume the function name, including the "__" separating the name from the signature. We are guaranteed that SCAN points to the separator. */ (*mangled) = scan + 2; /* We may be looking at an instantiation of a template function: foo__Xt1t2_Ft3t4, where t1, t2, ... are template arguments and a following _F marks the start of the function arguments. Handle the template arguments first. */ if (HP_DEMANGLING && (**mangled == 'X')) { demangle_arm_hp_template (work, mangled, 0, declp); /* This leaves MANGLED pointing to the 'F' marking func args */ } if (LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING) { /* See if we have an ARM style constructor or destructor operator. If so, then just record it, clear the decl, and return. We can't build the actual constructor/destructor decl until later, when we recover the class name from the signature. */ if (strcmp (declp -> b, "__ct") == 0) { work -> constructor += 1; string_clear (declp); return; } else if (strcmp (declp -> b, "__dt") == 0) { work -> destructor += 1; string_clear (declp); return; } } if (declp->p - declp->b >= 3 && declp->b[0] == 'o' && declp->b[1] == 'p' && strchr (cplus_markers, declp->b[2]) != NULL) { /* see if it's an assignment expression */ if (declp->p - declp->b >= 10 /* op$assign_ */ && memcmp (declp->b + 3, "assign_", 7) == 0) { for (i = 0; i < ARRAY_SIZE (optable); i++) { int len = declp->p - declp->b - 10; if ((int) strlen (optable[i].in) == len && memcmp (optable[i].in, declp->b + 10, len) == 0) { string_clear (declp); string_append (declp, "operator"); string_append (declp, optable[i].out); string_append (declp, "="); break; } } } else { for (i = 0; i < ARRAY_SIZE (optable); i++) { int len = declp->p - declp->b - 3; if ((int) strlen (optable[i].in) == len && memcmp (optable[i].in, declp->b + 3, len) == 0) { string_clear (declp); string_append (declp, "operator"); string_append (declp, optable[i].out); break; } } } } else if (declp->p - declp->b >= 5 && memcmp (declp->b, "type", 4) == 0 && strchr (cplus_markers, declp->b[4]) != NULL) { /* type conversion operator */ tem = declp->b + 5; if (do_type (work, &tem, &type)) { string_clear (declp); string_append (declp, "operator "); string_appends (declp, &type); string_delete (&type); } } else if (declp->b[0] == '_' && declp->b[1] == '_' && declp->b[2] == 'o' && declp->b[3] == 'p') { /* ANSI. */ /* type conversion operator. */ tem = declp->b + 4; if (do_type (work, &tem, &type)) { string_clear (declp); string_append (declp, "operator "); string_appends (declp, &type); string_delete (&type); } } else if (declp->b[0] == '_' && declp->b[1] == '_' && ISLOWER((unsigned char)declp->b[2]) && ISLOWER((unsigned char)declp->b[3])) { if (declp->b[4] == '\0') { /* Operator. */ for (i = 0; i < ARRAY_SIZE (optable); i++) { if (strlen (optable[i].in) == 2 && memcmp (optable[i].in, declp->b + 2, 2) == 0) { string_clear (declp); string_append (declp, "operator"); string_append (declp, optable[i].out); break; } } } else { if (declp->b[2] == 'a' && declp->b[5] == '\0') { /* Assignment. */ for (i = 0; i < ARRAY_SIZE (optable); i++) { if (strlen (optable[i].in) == 3 && memcmp (optable[i].in, declp->b + 2, 3) == 0) { string_clear (declp); string_append (declp, "operator"); string_append (declp, optable[i].out); break; } } } } } } /* a mini string-handling package */ static void string_need (string *s, int n) { int tem; if (s->b == NULL) { if (n < 32) { n = 32; } s->p = s->b = XNEWVEC (char, n); s->e = s->b + n; } else if (s->e - s->p < n) { tem = s->p - s->b; n += tem; n *= 2; s->b = XRESIZEVEC (char, s->b, n); s->p = s->b + tem; s->e = s->b + n; } } static void string_delete (string *s) { if (s->b != NULL) { free (s->b); s->b = s->e = s->p = NULL; } } static void string_init (string *s) { s->b = s->p = s->e = NULL; } static void string_clear (string *s) { s->p = s->b; } #if 0 static int string_empty (string *s) { return (s->b == s->p); } #endif static void string_append (string *p, const char *s) { int n; if (s == NULL || *s == '\0') return; n = strlen (s); string_need (p, n); memcpy (p->p, s, n); p->p += n; } static void string_appends (string *p, string *s) { int n; if (s->b != s->p) { n = s->p - s->b; string_need (p, n); memcpy (p->p, s->b, n); p->p += n; } } static void string_appendn (string *p, const char *s, int n) { if (n != 0) { string_need (p, n); memcpy (p->p, s, n); p->p += n; } } static void string_prepend (string *p, const char *s) { if (s != NULL && *s != '\0') { string_prependn (p, s, strlen (s)); } } static void string_prepends (string *p, string *s) { if (s->b != s->p) { string_prependn (p, s->b, s->p - s->b); } } static void string_prependn (string *p, const char *s, int n) { char *q; if (n != 0) { string_need (p, n); for (q = p->p - 1; q >= p->b; q--) { q[n] = q[0]; } memcpy (p->b, s, n); p->p += n; } } static void string_append_template_idx (string *s, int idx) { char buf[INTBUF_SIZE + 1 /* 'T' */]; sprintf(buf, "T%d", idx); string_append (s, buf); } nescc-1.3.4/libiberty/dyn-string.c000066400000000000000000000260441177770303300170570ustar00rootroot00000000000000/* An abstract string datatype. Copyright (C) 1998, 1999, 2000, 2002, 2004 Free Software Foundation, Inc. Contributed by Mark Mitchell (mark@markmitchell.com). This file is part of GNU CC. GNU CC 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. In addition to the permissions in the GNU General Public License, the Free Software Foundation gives you unlimited permission to link the compiled version of this file into combinations with other programs, and to distribute those combinations without any restriction coming from the use of this file. (The General Public License restrictions do apply in other respects; for example, they cover modification of the file, and distribution when not linked into a combined executable.) GNU CC 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 GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #include "libiberty.h" #include "dyn-string.h" /* Performs in-place initialization of a dyn_string struct. This function can be used with a dyn_string struct on the stack or embedded in another object. The contents of of the string itself are still dynamically allocated. The string initially is capable of holding at least SPACE characeters, including the terminating NUL. If SPACE is 0, it will silently be increated to 1. If RETURN_ON_ALLOCATION_FAILURE is defined and memory allocation fails, returns 0. Otherwise returns 1. */ int dyn_string_init (struct dyn_string *ds_struct_ptr, int space) { /* We need at least one byte in which to store the terminating NUL. */ if (space == 0) space = 1; #ifdef RETURN_ON_ALLOCATION_FAILURE ds_struct_ptr->s = (char *) malloc (space); if (ds_struct_ptr->s == NULL) return 0; #else ds_struct_ptr->s = XNEWVEC (char, space); #endif ds_struct_ptr->allocated = space; ds_struct_ptr->length = 0; ds_struct_ptr->s[0] = '\0'; return 1; } /* Create a new dynamic string capable of holding at least SPACE characters, including the terminating NUL. If SPACE is 0, it will be silently increased to 1. If RETURN_ON_ALLOCATION_FAILURE is defined and memory allocation fails, returns NULL. Otherwise returns the newly allocated string. */ dyn_string_t dyn_string_new (int space) { dyn_string_t result; #ifdef RETURN_ON_ALLOCATION_FAILURE result = (dyn_string_t) malloc (sizeof (struct dyn_string)); if (result == NULL) return NULL; if (!dyn_string_init (result, space)) { free (result); return NULL; } #else result = XNEW (struct dyn_string); dyn_string_init (result, space); #endif return result; } /* Free the memory used by DS. */ void dyn_string_delete (dyn_string_t ds) { free (ds->s); free (ds); } /* Returns the contents of DS in a buffer allocated with malloc. It is the caller's responsibility to deallocate the buffer using free. DS is then set to the empty string. Deletes DS itself. */ char* dyn_string_release (dyn_string_t ds) { /* Store the old buffer. */ char* result = ds->s; /* The buffer is no longer owned by DS. */ ds->s = NULL; /* Delete DS. */ free (ds); /* Return the old buffer. */ return result; } /* Increase the capacity of DS so it can hold at least SPACE characters, plus the terminating NUL. This function will not (at present) reduce the capacity of DS. Returns DS on success. If RETURN_ON_ALLOCATION_FAILURE is defined and a memory allocation operation fails, deletes DS and returns NULL. */ dyn_string_t dyn_string_resize (dyn_string_t ds, int space) { int new_allocated = ds->allocated; /* Increase SPACE to hold the NUL termination. */ ++space; /* Increase allocation by factors of two. */ while (space > new_allocated) new_allocated *= 2; if (new_allocated != ds->allocated) { ds->allocated = new_allocated; /* We actually need more space. */ #ifdef RETURN_ON_ALLOCATION_FAILURE ds->s = (char *) realloc (ds->s, ds->allocated); if (ds->s == NULL) { free (ds); return NULL; } #else ds->s = XRESIZEVEC (char, ds->s, ds->allocated); #endif } return ds; } /* Sets the contents of DS to the empty string. */ void dyn_string_clear (dyn_string_t ds) { /* A dyn_string always has room for at least the NUL terminator. */ ds->s[0] = '\0'; ds->length = 0; } /* Makes the contents of DEST the same as the contents of SRC. DEST and SRC must be distinct. Returns 1 on success. On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */ int dyn_string_copy (dyn_string_t dest, dyn_string_t src) { if (dest == src) abort (); /* Make room in DEST. */ if (dyn_string_resize (dest, src->length) == NULL) return 0; /* Copy DEST into SRC. */ strcpy (dest->s, src->s); /* Update the size of DEST. */ dest->length = src->length; return 1; } /* Copies SRC, a NUL-terminated string, into DEST. Returns 1 on success. On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */ int dyn_string_copy_cstr (dyn_string_t dest, const char *src) { int length = strlen (src); /* Make room in DEST. */ if (dyn_string_resize (dest, length) == NULL) return 0; /* Copy DEST into SRC. */ strcpy (dest->s, src); /* Update the size of DEST. */ dest->length = length; return 1; } /* Inserts SRC at the beginning of DEST. DEST is expanded as necessary. SRC and DEST must be distinct. Returns 1 on success. On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */ int dyn_string_prepend (dyn_string_t dest, dyn_string_t src) { return dyn_string_insert (dest, 0, src); } /* Inserts SRC, a NUL-terminated string, at the beginning of DEST. DEST is expanded as necessary. Returns 1 on success. On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */ int dyn_string_prepend_cstr (dyn_string_t dest, const char *src) { return dyn_string_insert_cstr (dest, 0, src); } /* Inserts SRC into DEST starting at position POS. DEST is expanded as necessary. SRC and DEST must be distinct. Returns 1 on success. On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */ int dyn_string_insert (dyn_string_t dest, int pos, dyn_string_t src) { int i; if (src == dest) abort (); if (dyn_string_resize (dest, dest->length + src->length) == NULL) return 0; /* Make room for the insertion. Be sure to copy the NUL. */ for (i = dest->length; i >= pos; --i) dest->s[i + src->length] = dest->s[i]; /* Splice in the new stuff. */ strncpy (dest->s + pos, src->s, src->length); /* Compute the new length. */ dest->length += src->length; return 1; } /* Inserts SRC, a NUL-terminated string, into DEST starting at position POS. DEST is expanded as necessary. Returns 1 on success. On failure, RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */ int dyn_string_insert_cstr (dyn_string_t dest, int pos, const char *src) { int i; int length = strlen (src); if (dyn_string_resize (dest, dest->length + length) == NULL) return 0; /* Make room for the insertion. Be sure to copy the NUL. */ for (i = dest->length; i >= pos; --i) dest->s[i + length] = dest->s[i]; /* Splice in the new stuff. */ strncpy (dest->s + pos, src, length); /* Compute the new length. */ dest->length += length; return 1; } /* Inserts character C into DEST starting at position POS. DEST is expanded as necessary. Returns 1 on success. On failure, RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */ int dyn_string_insert_char (dyn_string_t dest, int pos, int c) { int i; if (dyn_string_resize (dest, dest->length + 1) == NULL) return 0; /* Make room for the insertion. Be sure to copy the NUL. */ for (i = dest->length; i >= pos; --i) dest->s[i + 1] = dest->s[i]; /* Add the new character. */ dest->s[pos] = c; /* Compute the new length. */ ++dest->length; return 1; } /* Append S to DS, resizing DS if necessary. Returns 1 on success. On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */ int dyn_string_append (dyn_string_t dest, dyn_string_t s) { if (dyn_string_resize (dest, dest->length + s->length) == 0) return 0; strcpy (dest->s + dest->length, s->s); dest->length += s->length; return 1; } /* Append the NUL-terminated string S to DS, resizing DS if necessary. Returns 1 on success. On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */ int dyn_string_append_cstr (dyn_string_t dest, const char *s) { int len = strlen (s); /* The new length is the old length plus the size of our string, plus one for the null at the end. */ if (dyn_string_resize (dest, dest->length + len) == NULL) return 0; strcpy (dest->s + dest->length, s); dest->length += len; return 1; } /* Appends C to the end of DEST. Returns 1 on success. On failiure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */ int dyn_string_append_char (dyn_string_t dest, int c) { /* Make room for the extra character. */ if (dyn_string_resize (dest, dest->length + 1) == NULL) return 0; /* Append the character; it will overwrite the old NUL. */ dest->s[dest->length] = c; /* Add a new NUL at the end. */ dest->s[dest->length + 1] = '\0'; /* Update the length. */ ++(dest->length); return 1; } /* Sets the contents of DEST to the substring of SRC starting at START and ending before END. START must be less than or equal to END, and both must be between zero and the length of SRC, inclusive. Returns 1 on success. On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */ int dyn_string_substring (dyn_string_t dest, dyn_string_t src, int start, int end) { int i; int length = end - start; if (start > end || start > src->length || end > src->length) abort (); /* Make room for the substring. */ if (dyn_string_resize (dest, length) == NULL) return 0; /* Copy the characters in the substring, */ for (i = length; --i >= 0; ) dest->s[i] = src->s[start + i]; /* NUL-terimate the result. */ dest->s[length] = '\0'; /* Record the length of the substring. */ dest->length = length; return 1; } /* Returns non-zero if DS1 and DS2 have the same contents. */ int dyn_string_eq (dyn_string_t ds1, dyn_string_t ds2) { /* If DS1 and DS2 have different lengths, they must not be the same. */ if (ds1->length != ds2->length) return 0; else return !strcmp (ds1->s, ds2->s); } nescc-1.3.4/libiberty/fdmatch.c000066400000000000000000000041001177770303300163540ustar00rootroot00000000000000/* Compare two open file descriptors to see if they refer to the same file. Copyright (C) 1991 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* @deftypefn Extension int fdmatch (int @var{fd1}, int @var{fd2}) Check to see if two open file descriptors refer to the same file. This is useful, for example, when we have an open file descriptor for an unnamed file, and the name of a file that we believe to correspond to that fd. This can happen when we are exec'd with an already open file (@code{stdout} for example) or from the SVR4 @file{/proc} calls that return open file descriptors for mapped address spaces. All we have to do is open the file by name and check the two file descriptors for a match, which is done by comparing major and minor device numbers and inode numbers. @end deftypefn BUGS (FIXME: does this work for networks?) It works for NFS, which assigns a device number to each mount. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "ansidecl.h" #include "libiberty.h" #include #include int fdmatch (int fd1, int fd2) { struct stat sbuf1; struct stat sbuf2; if ((fstat (fd1, &sbuf1) == 0) && (fstat (fd2, &sbuf2) == 0) && (sbuf1.st_dev == sbuf2.st_dev) && (sbuf1.st_ino == sbuf2.st_ino)) { return (1); } else { return (0); } } nescc-1.3.4/libiberty/ffs.c000066400000000000000000000007211177770303300155310ustar00rootroot00000000000000/* ffs -- Find the first bit set in the parameter @deftypefn Supplemental int ffs (int @var{valu}) Find the first (least significant) bit set in @var{valu}. Bits are numbered from right to left, starting with bit 1 (corresponding to the value 1). If @var{valu} is zero, zero is returned. @end deftypefn */ int ffs (register int valu) { register int bit; if (valu == 0) return 0; for (bit = 1; !(valu & 1); bit++) valu >>= 1; return bit; } nescc-1.3.4/libiberty/fibheap.c000066400000000000000000000250101177770303300163470ustar00rootroot00000000000000/* A Fibonacci heap datatype. Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Daniel Berlin (dan@cgsoftware.com). This file is part of GNU CC. GNU CC 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. GNU CC 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 GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_LIMITS_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #include "libiberty.h" #include "fibheap.h" #define FIBHEAPKEY_MIN LONG_MIN static void fibheap_ins_root (fibheap_t, fibnode_t); static void fibheap_rem_root (fibheap_t, fibnode_t); static void fibheap_consolidate (fibheap_t); static void fibheap_link (fibheap_t, fibnode_t, fibnode_t); static void fibheap_cut (fibheap_t, fibnode_t, fibnode_t); static void fibheap_cascading_cut (fibheap_t, fibnode_t); static fibnode_t fibheap_extr_min_node (fibheap_t); static int fibheap_compare (fibheap_t, fibnode_t, fibnode_t); static int fibheap_comp_data (fibheap_t, fibheapkey_t, void *, fibnode_t); static fibnode_t fibnode_new (void); static void fibnode_insert_after (fibnode_t, fibnode_t); #define fibnode_insert_before(a, b) fibnode_insert_after (a->left, b) static fibnode_t fibnode_remove (fibnode_t); /* Create a new fibonacci heap. */ fibheap_t fibheap_new (void) { return (fibheap_t) xcalloc (1, sizeof (struct fibheap)); } /* Create a new fibonacci heap node. */ static fibnode_t fibnode_new (void) { fibnode_t node; node = (fibnode_t) xcalloc (1, sizeof *node); node->left = node; node->right = node; return node; } static inline int fibheap_compare (fibheap_t heap ATTRIBUTE_UNUSED, fibnode_t a, fibnode_t b) { if (a->key < b->key) return -1; if (a->key > b->key) return 1; return 0; } static inline int fibheap_comp_data (fibheap_t heap, fibheapkey_t key, void *data, fibnode_t b) { struct fibnode a; a.key = key; a.data = data; return fibheap_compare (heap, &a, b); } /* Insert DATA, with priority KEY, into HEAP. */ fibnode_t fibheap_insert (fibheap_t heap, fibheapkey_t key, void *data) { fibnode_t node; /* Create the new node. */ node = fibnode_new (); /* Set the node's data. */ node->data = data; node->key = key; /* Insert it into the root list. */ fibheap_ins_root (heap, node); /* If their was no minimum, or this key is less than the min, it's the new min. */ if (heap->min == NULL || node->key < heap->min->key) heap->min = node; heap->nodes++; return node; } /* Return the data of the minimum node (if we know it). */ void * fibheap_min (fibheap_t heap) { /* If there is no min, we can't easily return it. */ if (heap->min == NULL) return NULL; return heap->min->data; } /* Return the key of the minimum node (if we know it). */ fibheapkey_t fibheap_min_key (fibheap_t heap) { /* If there is no min, we can't easily return it. */ if (heap->min == NULL) return 0; return heap->min->key; } /* Union HEAPA and HEAPB into a new heap. */ fibheap_t fibheap_union (fibheap_t heapa, fibheap_t heapb) { fibnode_t a_root, b_root, temp; /* If one of the heaps is empty, the union is just the other heap. */ if ((a_root = heapa->root) == NULL) { free (heapa); return heapb; } if ((b_root = heapb->root) == NULL) { free (heapb); return heapa; } /* Merge them to the next nodes on the opposite chain. */ a_root->left->right = b_root; b_root->left->right = a_root; temp = a_root->left; a_root->left = b_root->left; b_root->left = temp; heapa->nodes += heapb->nodes; /* And set the new minimum, if it's changed. */ if (fibheap_compare (heapa, heapb->min, heapa->min) < 0) heapa->min = heapb->min; free (heapb); return heapa; } /* Extract the data of the minimum node from HEAP. */ void * fibheap_extract_min (fibheap_t heap) { fibnode_t z; void *ret = NULL; /* If we don't have a min set, it means we have no nodes. */ if (heap->min != NULL) { /* Otherwise, extract the min node, free the node, and return the node's data. */ z = fibheap_extr_min_node (heap); ret = z->data; free (z); } return ret; } /* Replace both the KEY and the DATA associated with NODE. */ void * fibheap_replace_key_data (fibheap_t heap, fibnode_t node, fibheapkey_t key, void *data) { void *odata; fibheapkey_t okey; fibnode_t y; /* If we wanted to, we could actually do a real increase by redeleting and inserting. However, this would require O (log n) time. So just bail out for now. */ if (fibheap_comp_data (heap, key, data, node) > 0) return NULL; odata = node->data; okey = node->key; node->data = data; node->key = key; y = node->parent; if (okey == key) return odata; /* These two compares are specifically <= 0 to make sure that in the case of equality, a node we replaced the data on, becomes the new min. This is needed so that delete's call to extractmin gets the right node. */ if (y != NULL && fibheap_compare (heap, node, y) <= 0) { fibheap_cut (heap, node, y); fibheap_cascading_cut (heap, y); } if (fibheap_compare (heap, node, heap->min) <= 0) heap->min = node; return odata; } /* Replace the DATA associated with NODE. */ void * fibheap_replace_data (fibheap_t heap, fibnode_t node, void *data) { return fibheap_replace_key_data (heap, node, node->key, data); } /* Replace the KEY associated with NODE. */ fibheapkey_t fibheap_replace_key (fibheap_t heap, fibnode_t node, fibheapkey_t key) { int okey = node->key; fibheap_replace_key_data (heap, node, key, node->data); return okey; } /* Delete NODE from HEAP. */ void * fibheap_delete_node (fibheap_t heap, fibnode_t node) { void *ret = node->data; /* To perform delete, we just make it the min key, and extract. */ fibheap_replace_key (heap, node, FIBHEAPKEY_MIN); fibheap_extract_min (heap); return ret; } /* Delete HEAP. */ void fibheap_delete (fibheap_t heap) { while (heap->min != NULL) free (fibheap_extr_min_node (heap)); free (heap); } /* Determine if HEAP is empty. */ int fibheap_empty (fibheap_t heap) { return heap->nodes == 0; } /* Extract the minimum node of the heap. */ static fibnode_t fibheap_extr_min_node (fibheap_t heap) { fibnode_t ret = heap->min; fibnode_t x, y, orig; /* Attach the child list of the minimum node to the root list of the heap. If there is no child list, we don't do squat. */ for (x = ret->child, orig = NULL; x != orig && x != NULL; x = y) { if (orig == NULL) orig = x; y = x->right; x->parent = NULL; fibheap_ins_root (heap, x); } /* Remove the old root. */ fibheap_rem_root (heap, ret); heap->nodes--; /* If we are left with no nodes, then the min is NULL. */ if (heap->nodes == 0) heap->min = NULL; else { /* Otherwise, consolidate to find new minimum, as well as do the reorg work that needs to be done. */ heap->min = ret->right; fibheap_consolidate (heap); } return ret; } /* Insert NODE into the root list of HEAP. */ static void fibheap_ins_root (fibheap_t heap, fibnode_t node) { /* If the heap is currently empty, the new node becomes the singleton circular root list. */ if (heap->root == NULL) { heap->root = node; node->left = node; node->right = node; return; } /* Otherwise, insert it in the circular root list between the root and it's right node. */ fibnode_insert_after (heap->root, node); } /* Remove NODE from the rootlist of HEAP. */ static void fibheap_rem_root (fibheap_t heap, fibnode_t node) { if (node->left == node) heap->root = NULL; else heap->root = fibnode_remove (node); } /* Consolidate the heap. */ static void fibheap_consolidate (fibheap_t heap) { fibnode_t a[1 + 8 * sizeof (long)]; fibnode_t w; fibnode_t y; fibnode_t x; int i; int d; int D; D = 1 + 8 * sizeof (long); memset (a, 0, sizeof (fibnode_t) * D); while ((w = heap->root) != NULL) { x = w; fibheap_rem_root (heap, w); d = x->degree; while (a[d] != NULL) { y = a[d]; if (fibheap_compare (heap, x, y) > 0) { fibnode_t temp; temp = x; x = y; y = temp; } fibheap_link (heap, y, x); a[d] = NULL; d++; } a[d] = x; } heap->min = NULL; for (i = 0; i < D; i++) if (a[i] != NULL) { fibheap_ins_root (heap, a[i]); if (heap->min == NULL || fibheap_compare (heap, a[i], heap->min) < 0) heap->min = a[i]; } } /* Make NODE a child of PARENT. */ static void fibheap_link (fibheap_t heap ATTRIBUTE_UNUSED, fibnode_t node, fibnode_t parent) { if (parent->child == NULL) parent->child = node; else fibnode_insert_before (parent->child, node); node->parent = parent; parent->degree++; node->mark = 0; } /* Remove NODE from PARENT's child list. */ static void fibheap_cut (fibheap_t heap, fibnode_t node, fibnode_t parent) { fibnode_remove (node); parent->degree--; fibheap_ins_root (heap, node); node->parent = NULL; node->mark = 0; } static void fibheap_cascading_cut (fibheap_t heap, fibnode_t y) { fibnode_t z; while ((z = y->parent) != NULL) { if (y->mark == 0) { y->mark = 1; return; } else { fibheap_cut (heap, y, z); y = z; } } } static void fibnode_insert_after (fibnode_t a, fibnode_t b) { if (a == a->right) { a->right = b; a->left = b; b->right = a; b->left = a; } else { b->right = a->right; a->right->left = b; a->right = b; b->left = a; } } static fibnode_t fibnode_remove (fibnode_t node) { fibnode_t ret; if (node == node->left) ret = NULL; else ret = node->left; if (node->parent != NULL && node->parent->child == node) node->parent->child = ret; node->right->left = node->left; node->left->right = node->right; node->parent = NULL; node->left = node; node->right = node; return ret; } nescc-1.3.4/libiberty/filename_cmp.c000066400000000000000000000041341177770303300173740ustar00rootroot00000000000000/* File name comparison routine. Copyright (C) 2007 Free Software Foundation, Inc. This program 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. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_STRING_H #include #endif #include "filenames.h" #include "safe-ctype.h" /* @deftypefn Extension int filename_cmp (const char *@var{s1}, const char *@var{s2}) Return zero if the two file names @var{s1} and @var{s2} are equivalent. If not equivalent, the returned value is similar to what @code{strcmp} would return. In other words, it returns a negative value if @var{s1} is less than @var{s2}, or a positive value if @var{s2} is greater than @var{s2}. This function does not normalize file names. As a result, this function will treat filenames that are spelled differently as different even in the case when the two filenames point to the same underlying file. However, it does handle the fact that on DOS-like file systems, forward and backward slashes are equal. @end deftypefn */ int filename_cmp (const char *s1, const char *s2) { #ifndef HAVE_DOS_BASED_FILE_SYSTEM return strcmp(s1, s2); #else for (;;) { int c1 = TOLOWER (*s1); int c2 = TOLOWER (*s2); /* On DOS-based file systems, the '/' and the '\' are equivalent. */ if (c1 == '/') c1 = '\\'; if (c2 == '/') c2 = '\\'; if (c1 != c2) return (c1 - c2); if (c1 == '\0') return 0; s1++; s2++; } #endif } nescc-1.3.4/libiberty/floatformat.c000066400000000000000000000523701177770303300173000ustar00rootroot00000000000000/* IEEE floating point support routines, for GDB, the GNU Debugger. Copyright 1991, 1994, 1999, 2000, 2003, 2005, 2006 Free Software Foundation, Inc. This file is part of GDB. This program 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 of the License, or (at your option) any later version. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* This is needed to pick up the NAN macro on some systems. */ #define _GNU_SOURCE #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifdef HAVE_STRING_H #include #endif /* On some platforms, provides DBL_QNAN. */ #ifdef STDC_HEADERS #include #endif #include "ansidecl.h" #include "libiberty.h" #include "floatformat.h" #ifndef INFINITY #ifdef HUGE_VAL #define INFINITY HUGE_VAL #else #define INFINITY (1.0 / 0.0) #endif #endif #ifndef NAN #ifdef DBL_QNAN #define NAN DBL_QNAN #else #define NAN (0.0 / 0.0) #endif #endif static int mant_bits_set (const struct floatformat *, const unsigned char *); static unsigned long get_field (const unsigned char *, enum floatformat_byteorders, unsigned int, unsigned int, unsigned int); static int floatformat_always_valid (const struct floatformat *fmt, const void *from); static int floatformat_always_valid (const struct floatformat *fmt ATTRIBUTE_UNUSED, const void *from ATTRIBUTE_UNUSED) { return 1; } /* The odds that CHAR_BIT will be anything but 8 are low enough that I'm not going to bother with trying to muck around with whether it is defined in a system header, what we do if not, etc. */ #define FLOATFORMAT_CHAR_BIT 8 /* floatformats for IEEE single and double, big and little endian. */ const struct floatformat floatformat_ieee_single_big = { floatformat_big, 32, 0, 1, 8, 127, 255, 9, 23, floatformat_intbit_no, "floatformat_ieee_single_big", floatformat_always_valid, NULL }; const struct floatformat floatformat_ieee_single_little = { floatformat_little, 32, 0, 1, 8, 127, 255, 9, 23, floatformat_intbit_no, "floatformat_ieee_single_little", floatformat_always_valid, NULL }; const struct floatformat floatformat_ieee_double_big = { floatformat_big, 64, 0, 1, 11, 1023, 2047, 12, 52, floatformat_intbit_no, "floatformat_ieee_double_big", floatformat_always_valid, NULL }; const struct floatformat floatformat_ieee_double_little = { floatformat_little, 64, 0, 1, 11, 1023, 2047, 12, 52, floatformat_intbit_no, "floatformat_ieee_double_little", floatformat_always_valid, NULL }; /* floatformat for IEEE double, little endian byte order, with big endian word ordering, as on the ARM. */ const struct floatformat floatformat_ieee_double_littlebyte_bigword = { floatformat_littlebyte_bigword, 64, 0, 1, 11, 1023, 2047, 12, 52, floatformat_intbit_no, "floatformat_ieee_double_littlebyte_bigword", floatformat_always_valid, NULL }; /* floatformat for VAX. Not quite IEEE, but close enough. */ const struct floatformat floatformat_vax_f = { floatformat_vax, 32, 0, 1, 8, 129, 0, 9, 23, floatformat_intbit_no, "floatformat_vax_f", floatformat_always_valid, NULL }; const struct floatformat floatformat_vax_d = { floatformat_vax, 64, 0, 1, 8, 129, 0, 9, 55, floatformat_intbit_no, "floatformat_vax_d", floatformat_always_valid, NULL }; const struct floatformat floatformat_vax_g = { floatformat_vax, 64, 0, 1, 11, 1025, 0, 12, 52, floatformat_intbit_no, "floatformat_vax_g", floatformat_always_valid, NULL }; static int floatformat_i387_ext_is_valid (const struct floatformat *fmt, const void *from); static int floatformat_i387_ext_is_valid (const struct floatformat *fmt, const void *from) { /* In the i387 double-extended format, if the exponent is all ones, then the integer bit must be set. If the exponent is neither 0 nor ~0, the intbit must also be set. Only if the exponent is zero can it be zero, and then it must be zero. */ unsigned long exponent, int_bit; const unsigned char *ufrom = (const unsigned char *) from; exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->exp_start, fmt->exp_len); int_bit = get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->man_start, 1); if ((exponent == 0) != (int_bit == 0)) return 0; else return 1; } const struct floatformat floatformat_i387_ext = { floatformat_little, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64, floatformat_intbit_yes, "floatformat_i387_ext", floatformat_i387_ext_is_valid, NULL }; const struct floatformat floatformat_m68881_ext = { /* Note that the bits from 16 to 31 are unused. */ floatformat_big, 96, 0, 1, 15, 0x3fff, 0x7fff, 32, 64, floatformat_intbit_yes, "floatformat_m68881_ext", floatformat_always_valid, NULL }; const struct floatformat floatformat_i960_ext = { /* Note that the bits from 0 to 15 are unused. */ floatformat_little, 96, 16, 17, 15, 0x3fff, 0x7fff, 32, 64, floatformat_intbit_yes, "floatformat_i960_ext", floatformat_always_valid, NULL }; const struct floatformat floatformat_m88110_ext = { floatformat_big, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64, floatformat_intbit_yes, "floatformat_m88110_ext", floatformat_always_valid, NULL }; const struct floatformat floatformat_m88110_harris_ext = { /* Harris uses raw format 128 bytes long, but the number is just an ieee double, and the last 64 bits are wasted. */ floatformat_big,128, 0, 1, 11, 0x3ff, 0x7ff, 12, 52, floatformat_intbit_no, "floatformat_m88110_ext_harris", floatformat_always_valid, NULL }; const struct floatformat floatformat_arm_ext_big = { /* Bits 1 to 16 are unused. */ floatformat_big, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64, floatformat_intbit_yes, "floatformat_arm_ext_big", floatformat_always_valid, NULL }; const struct floatformat floatformat_arm_ext_littlebyte_bigword = { /* Bits 1 to 16 are unused. */ floatformat_littlebyte_bigword, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64, floatformat_intbit_yes, "floatformat_arm_ext_littlebyte_bigword", floatformat_always_valid, NULL }; const struct floatformat floatformat_ia64_spill_big = { floatformat_big, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64, floatformat_intbit_yes, "floatformat_ia64_spill_big", floatformat_always_valid, NULL }; const struct floatformat floatformat_ia64_spill_little = { floatformat_little, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64, floatformat_intbit_yes, "floatformat_ia64_spill_little", floatformat_always_valid, NULL }; const struct floatformat floatformat_ia64_quad_big = { floatformat_big, 128, 0, 1, 15, 16383, 0x7fff, 16, 112, floatformat_intbit_no, "floatformat_ia64_quad_big", floatformat_always_valid, NULL }; const struct floatformat floatformat_ia64_quad_little = { floatformat_little, 128, 0, 1, 15, 16383, 0x7fff, 16, 112, floatformat_intbit_no, "floatformat_ia64_quad_little", floatformat_always_valid, NULL }; static int floatformat_ibm_long_double_is_valid (const struct floatformat *fmt, const void *from) { const unsigned char *ufrom = (const unsigned char *) from; const struct floatformat *hfmt = fmt->split_half; long top_exp, bot_exp; int top_nan = 0; top_exp = get_field (ufrom, hfmt->byteorder, hfmt->totalsize, hfmt->exp_start, hfmt->exp_len); bot_exp = get_field (ufrom + 8, hfmt->byteorder, hfmt->totalsize, hfmt->exp_start, hfmt->exp_len); if ((unsigned long) top_exp == hfmt->exp_nan) top_nan = mant_bits_set (hfmt, ufrom); /* A NaN is valid with any low part. */ if (top_nan) return 1; /* An infinity, zero or denormal requires low part 0 (positive or negative). */ if ((unsigned long) top_exp == hfmt->exp_nan || top_exp == 0) { if (bot_exp != 0) return 0; return !mant_bits_set (hfmt, ufrom + 8); } /* The top part is now a finite normal value. The long double value is the sum of the two parts, and the top part must equal the result of rounding the long double value to nearest double. Thus the bottom part must be <= 0.5ulp of the top part in absolute value, and if it is < 0.5ulp then the long double is definitely valid. */ if (bot_exp < top_exp - 53) return 1; if (bot_exp > top_exp - 53 && bot_exp != 0) return 0; if (bot_exp == 0) { /* The bottom part is 0 or denormal. Determine which, and if denormal the first two set bits. */ int first_bit = -1, second_bit = -1, cur_bit; for (cur_bit = 0; (unsigned int) cur_bit < hfmt->man_len; cur_bit++) if (get_field (ufrom + 8, hfmt->byteorder, hfmt->totalsize, hfmt->man_start + cur_bit, 1)) { if (first_bit == -1) first_bit = cur_bit; else { second_bit = cur_bit; break; } } /* Bottom part 0 is OK. */ if (first_bit == -1) return 1; /* The real exponent of the bottom part is -first_bit. */ if (-first_bit < top_exp - 53) return 1; if (-first_bit > top_exp - 53) return 0; /* The bottom part is at least 0.5ulp of the top part. For this to be OK, the bottom part must be exactly 0.5ulp (i.e. no more bits set) and the top part must have last bit 0. */ if (second_bit != -1) return 0; return !get_field (ufrom, hfmt->byteorder, hfmt->totalsize, hfmt->man_start + hfmt->man_len - 1, 1); } else { /* The bottom part is at least 0.5ulp of the top part. For this to be OK, it must be exactly 0.5ulp (i.e. no explicit bits set) and the top part must have last bit 0. */ if (get_field (ufrom, hfmt->byteorder, hfmt->totalsize, hfmt->man_start + hfmt->man_len - 1, 1)) return 0; return !mant_bits_set (hfmt, ufrom + 8); } } const struct floatformat floatformat_ibm_long_double = { floatformat_big, 128, 0, 1, 11, 1023, 2047, 12, 52, floatformat_intbit_no, "floatformat_ibm_long_double", floatformat_ibm_long_double_is_valid, &floatformat_ieee_double_big }; #ifndef min #define min(a, b) ((a) < (b) ? (a) : (b)) #endif /* Return 1 if any bits are explicitly set in the mantissa of UFROM, format FMT, 0 otherwise. */ static int mant_bits_set (const struct floatformat *fmt, const unsigned char *ufrom) { unsigned int mant_bits, mant_off; int mant_bits_left; mant_off = fmt->man_start; mant_bits_left = fmt->man_len; while (mant_bits_left > 0) { mant_bits = min (mant_bits_left, 32); if (get_field (ufrom, fmt->byteorder, fmt->totalsize, mant_off, mant_bits) != 0) return 1; mant_off += mant_bits; mant_bits_left -= mant_bits; } return 0; } /* Extract a field which starts at START and is LEN bits long. DATA and TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER. */ static unsigned long get_field (const unsigned char *data, enum floatformat_byteorders order, unsigned int total_len, unsigned int start, unsigned int len) { unsigned long result = 0; unsigned int cur_byte; int lo_bit, hi_bit, cur_bitshift = 0; int nextbyte = (order == floatformat_little) ? 1 : -1; /* Start is in big-endian bit order! Fix that first. */ start = total_len - (start + len); /* Start at the least significant part of the field. */ if (order == floatformat_little) cur_byte = start / FLOATFORMAT_CHAR_BIT; else cur_byte = (total_len - start - 1) / FLOATFORMAT_CHAR_BIT; lo_bit = start % FLOATFORMAT_CHAR_BIT; hi_bit = min (lo_bit + len, FLOATFORMAT_CHAR_BIT); do { unsigned int shifted = *(data + cur_byte) >> lo_bit; unsigned int bits = hi_bit - lo_bit; unsigned int mask = (1 << bits) - 1; result |= (shifted & mask) << cur_bitshift; len -= bits; cur_bitshift += bits; cur_byte += nextbyte; lo_bit = 0; hi_bit = min (len, FLOATFORMAT_CHAR_BIT); } while (len != 0); return result; } /* Convert from FMT to a double. FROM is the address of the extended float. Store the double in *TO. */ void floatformat_to_double (const struct floatformat *fmt, const void *from, double *to) { const unsigned char *ufrom = (const unsigned char *) from; double dto; long exponent; unsigned long mant; unsigned int mant_bits, mant_off; int mant_bits_left; int special_exponent; /* It's a NaN, denorm or zero */ /* Split values are not handled specially, since the top half has the correctly rounded double value (in the only supported case of split values). */ exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->exp_start, fmt->exp_len); /* If the exponent indicates a NaN, we don't have information to decide what to do. So we handle it like IEEE, except that we don't try to preserve the type of NaN. FIXME. */ if ((unsigned long) exponent == fmt->exp_nan) { int nan = mant_bits_set (fmt, ufrom); /* On certain systems (such as GNU/Linux), the use of the INFINITY macro below may generate a warning that can not be silenced due to a bug in GCC (PR preprocessor/11931). The preprocessor fails to recognise the __extension__ keyword in conjunction with the GNU/C99 extension for hexadecimal floating point constants and will issue a warning when compiling with -pedantic. */ if (nan) dto = NAN; else dto = INFINITY; if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1)) dto = -dto; *to = dto; return; } mant_bits_left = fmt->man_len; mant_off = fmt->man_start; dto = 0.0; special_exponent = exponent == 0 || (unsigned long) exponent == fmt->exp_nan; /* Don't bias zero's, denorms or NaNs. */ if (!special_exponent) exponent -= fmt->exp_bias; /* Build the result algebraically. Might go infinite, underflow, etc; who cares. */ /* If this format uses a hidden bit, explicitly add it in now. Otherwise, increment the exponent by one to account for the integer bit. */ if (!special_exponent) { if (fmt->intbit == floatformat_intbit_no) dto = ldexp (1.0, exponent); else exponent++; } while (mant_bits_left > 0) { mant_bits = min (mant_bits_left, 32); mant = get_field (ufrom, fmt->byteorder, fmt->totalsize, mant_off, mant_bits); /* Handle denormalized numbers. FIXME: What should we do for non-IEEE formats? */ if (special_exponent && exponent == 0 && mant != 0) dto += ldexp ((double)mant, (- fmt->exp_bias - mant_bits - (mant_off - fmt->man_start) + 1)); else dto += ldexp ((double)mant, exponent - mant_bits); if (exponent != 0) exponent -= mant_bits; mant_off += mant_bits; mant_bits_left -= mant_bits; } /* Negate it if negative. */ if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1)) dto = -dto; *to = dto; } static void put_field (unsigned char *, enum floatformat_byteorders, unsigned int, unsigned int, unsigned int, unsigned long); /* Set a field which starts at START and is LEN bits long. DATA and TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER. */ static void put_field (unsigned char *data, enum floatformat_byteorders order, unsigned int total_len, unsigned int start, unsigned int len, unsigned long stuff_to_put) { unsigned int cur_byte; int lo_bit, hi_bit; int nextbyte = (order == floatformat_little) ? 1 : -1; /* Start is in big-endian bit order! Fix that first. */ start = total_len - (start + len); /* Start at the least significant part of the field. */ if (order == floatformat_little) cur_byte = start / FLOATFORMAT_CHAR_BIT; else cur_byte = (total_len - start - 1) / FLOATFORMAT_CHAR_BIT; lo_bit = start % FLOATFORMAT_CHAR_BIT; hi_bit = min (lo_bit + len, FLOATFORMAT_CHAR_BIT); do { unsigned char *byte_ptr = data + cur_byte; unsigned int bits = hi_bit - lo_bit; unsigned int mask = ((1 << bits) - 1) << lo_bit; *byte_ptr = (*byte_ptr & ~mask) | ((stuff_to_put << lo_bit) & mask); stuff_to_put >>= bits; len -= bits; cur_byte += nextbyte; lo_bit = 0; hi_bit = min (len, FLOATFORMAT_CHAR_BIT); } while (len != 0); } /* The converse: convert the double *FROM to an extended float and store where TO points. Neither FROM nor TO have any alignment restrictions. */ void floatformat_from_double (const struct floatformat *fmt, const double *from, void *to) { double dfrom; int exponent; double mant; unsigned int mant_bits, mant_off; int mant_bits_left; unsigned char *uto = (unsigned char *) to; dfrom = *from; memset (uto, 0, fmt->totalsize / FLOATFORMAT_CHAR_BIT); /* Split values are not handled specially, since a bottom half of zero is correct for any value representable as double (in the only supported case of split values). */ /* If negative, set the sign bit. */ if (dfrom < 0) { put_field (uto, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1, 1); dfrom = -dfrom; } if (dfrom == 0) { /* 0.0. */ return; } if (dfrom != dfrom) { /* NaN. */ put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start, fmt->exp_len, fmt->exp_nan); /* Be sure it's not infinity, but NaN value is irrelevant. */ put_field (uto, fmt->byteorder, fmt->totalsize, fmt->man_start, 32, 1); return; } if (dfrom + dfrom == dfrom) { /* This can only happen for an infinite value (or zero, which we already handled above). */ put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start, fmt->exp_len, fmt->exp_nan); return; } mant = frexp (dfrom, &exponent); if (exponent + fmt->exp_bias - 1 > 0) put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start, fmt->exp_len, exponent + fmt->exp_bias - 1); else { /* Handle a denormalized number. FIXME: What should we do for non-IEEE formats? */ put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start, fmt->exp_len, 0); mant = ldexp (mant, exponent + fmt->exp_bias - 1); } mant_bits_left = fmt->man_len; mant_off = fmt->man_start; while (mant_bits_left > 0) { unsigned long mant_long; mant_bits = mant_bits_left < 32 ? mant_bits_left : 32; mant *= 4294967296.0; mant_long = (unsigned long)mant; mant -= mant_long; /* If the integer bit is implicit, and we are not creating a denormalized number, then we need to discard it. */ if ((unsigned int) mant_bits_left == fmt->man_len && fmt->intbit == floatformat_intbit_no && exponent + fmt->exp_bias - 1 > 0) { mant_long &= 0x7fffffff; mant_bits -= 1; } else if (mant_bits < 32) { /* The bits we want are in the most significant MANT_BITS bits of mant_long. Move them to the least significant. */ mant_long >>= 32 - mant_bits; } put_field (uto, fmt->byteorder, fmt->totalsize, mant_off, mant_bits, mant_long); mant_off += mant_bits; mant_bits_left -= mant_bits; } } /* Return non-zero iff the data at FROM is a valid number in format FMT. */ int floatformat_is_valid (const struct floatformat *fmt, const void *from) { return fmt->is_valid (fmt, from); } #ifdef IEEE_DEBUG #include /* This is to be run on a host which uses IEEE floating point. */ void ieee_test (double n) { double result; floatformat_to_double (&floatformat_ieee_double_little, &n, &result); if ((n != result && (! isnan (n) || ! isnan (result))) || (n < 0 && result >= 0) || (n >= 0 && result < 0)) printf ("Differ(to): %.20g -> %.20g\n", n, result); floatformat_from_double (&floatformat_ieee_double_little, &n, &result); if ((n != result && (! isnan (n) || ! isnan (result))) || (n < 0 && result >= 0) || (n >= 0 && result < 0)) printf ("Differ(from): %.20g -> %.20g\n", n, result); #if 0 { char exten[16]; floatformat_from_double (&floatformat_m68881_ext, &n, exten); floatformat_to_double (&floatformat_m68881_ext, exten, &result); if (n != result) printf ("Differ(to+from): %.20g -> %.20g\n", n, result); } #endif #if IEEE_DEBUG > 1 /* This is to be run on a host which uses 68881 format. */ { long double ex = *(long double *)exten; if (ex != n) printf ("Differ(from vs. extended): %.20g\n", n); } #endif } int main (void) { ieee_test (0.0); ieee_test (0.5); ieee_test (256.0); ieee_test (0.12345); ieee_test (234235.78907234); ieee_test (-512.0); ieee_test (-0.004321); ieee_test (1.2E-70); ieee_test (1.2E-316); ieee_test (4.9406564584124654E-324); ieee_test (- 4.9406564584124654E-324); ieee_test (- 0.0); ieee_test (- INFINITY); ieee_test (- NAN); ieee_test (INFINITY); ieee_test (NAN); return 0; } #endif nescc-1.3.4/libiberty/fnmatch.c000066400000000000000000000125251177770303300164000ustar00rootroot00000000000000/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. NOTE: This source is derived from an old version taken from the GNU C Library (glibc). This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #if defined (CONFIG_BROKETS) /* We use instead of "config.h" so that a compilation using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h (which it would do because it found this file in $srcdir). */ #include #else #include "config.h" #endif #endif #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif /* This code to undef const added in libiberty. */ #ifndef __STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ #ifndef const #define const #endif #endif #include #include #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #if defined (_LIBC) || !defined (__GNU_LIBRARY__) #if !defined(__GNU_LIBRARY__) && !defined(STDC_HEADERS) extern int errno; #endif /* Match STRING against the filename pattern PATTERN, returning zero if it matches, nonzero if not. */ int fnmatch (const char *pattern, const char *string, int flags) { register const char *p = pattern, *n = string; register unsigned char c; #define FOLD(c) ((flags & FNM_CASEFOLD) ? TOLOWER (c) : (c)) while ((c = *p++) != '\0') { c = FOLD (c); switch (c) { case '?': if (*n == '\0') return FNM_NOMATCH; else if ((flags & FNM_FILE_NAME) && *n == '/') return FNM_NOMATCH; else if ((flags & FNM_PERIOD) && *n == '.' && (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/'))) return FNM_NOMATCH; break; case '\\': if (!(flags & FNM_NOESCAPE)) { c = *p++; c = FOLD (c); } if (FOLD ((unsigned char)*n) != c) return FNM_NOMATCH; break; case '*': if ((flags & FNM_PERIOD) && *n == '.' && (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/'))) return FNM_NOMATCH; for (c = *p++; c == '?' || c == '*'; c = *p++, ++n) if (((flags & FNM_FILE_NAME) && *n == '/') || (c == '?' && *n == '\0')) return FNM_NOMATCH; if (c == '\0') return 0; { unsigned char c1 = (!(flags & FNM_NOESCAPE) && c == '\\') ? *p : c; c1 = FOLD (c1); for (--p; *n != '\0'; ++n) if ((c == '[' || FOLD ((unsigned char)*n) == c1) && fnmatch (p, n, flags & ~FNM_PERIOD) == 0) return 0; return FNM_NOMATCH; } case '[': { /* Nonzero if the sense of the character class is inverted. */ register int negate; if (*n == '\0') return FNM_NOMATCH; if ((flags & FNM_PERIOD) && *n == '.' && (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/'))) return FNM_NOMATCH; negate = (*p == '!' || *p == '^'); if (negate) ++p; c = *p++; for (;;) { register unsigned char cstart = c, cend = c; if (!(flags & FNM_NOESCAPE) && c == '\\') cstart = cend = *p++; cstart = cend = FOLD (cstart); if (c == '\0') /* [ (unterminated) loses. */ return FNM_NOMATCH; c = *p++; c = FOLD (c); if ((flags & FNM_FILE_NAME) && c == '/') /* [/] can never match. */ return FNM_NOMATCH; if (c == '-' && *p != ']') { cend = *p++; if (!(flags & FNM_NOESCAPE) && cend == '\\') cend = *p++; if (cend == '\0') return FNM_NOMATCH; cend = FOLD (cend); c = *p++; } if (FOLD ((unsigned char)*n) >= cstart && FOLD ((unsigned char)*n) <= cend) goto matched; if (c == ']') break; } if (!negate) return FNM_NOMATCH; break; matched:; /* Skip the rest of the [...] that already matched. */ while (c != ']') { if (c == '\0') /* [... (unterminated) loses. */ return FNM_NOMATCH; c = *p++; if (!(flags & FNM_NOESCAPE) && c == '\\') /* XXX 1003.2d11 is unclear if this is right. */ ++p; } if (negate) return FNM_NOMATCH; } break; default: if (c != FOLD ((unsigned char)*n)) return FNM_NOMATCH; } ++n; } if (*n == '\0') return 0; if ((flags & FNM_LEADING_DIR) && *n == '/') /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz". */ return 0; return FNM_NOMATCH; } #endif /* _LIBC or not __GNU_LIBRARY__. */ nescc-1.3.4/libiberty/fnmatch.txh000066400000000000000000000036341177770303300167620ustar00rootroot00000000000000@deftypefn Replacement int fnmatch (const char *@var{pattern}, const char *@var{string}, int @var{flags}) Matches @var{string} against @var{pattern}, returning zero if it matches, @code{FNM_NOMATCH} if not. @var{pattern} may contain the wildcards @code{?} to match any one character, @code{*} to match any zero or more characters, or a set of alternate characters in square brackets, like @samp{[a-gt8]}, which match one character (@code{a} through @code{g}, or @code{t}, or @code{8}, in this example) if that one character is in the set. A set may be inverted (i.e., match anything except what's in the set) by giving @code{^} or @code{!} as the first character in the set. To include those characters in the set, list them as anything other than the first character of the set. To include a dash in the set, list it last in the set. A backslash character makes the following character not special, so for example you could match against a literal asterisk with @samp{\*}. To match a literal backslash, use @samp{\\}. @code{flags} controls various aspects of the matching process, and is a boolean OR of zero or more of the following values (defined in @code{}): @table @code @item FNM_PATHNAME @itemx FNM_FILE_NAME @var{string} is assumed to be a path name. No wildcard will ever match @code{/}. @item FNM_NOESCAPE Do not interpret backslashes as quoting the following special character. @item FNM_PERIOD A leading period (at the beginning of @var{string}, or if @code{FNM_PATHNAME} after a slash) is not matched by @code{*} or @code{?} but must be matched explicitly. @item FNM_LEADING_DIR Means that @var{string} also matches @var{pattern} if some initial part of @var{string} matches, and is followed by @code{/} and zero or more characters. For example, @samp{foo*} would match either @samp{foobar} or @samp{foobar/grill}. @item FNM_CASEFOLD Ignores case when performing the comparison. @end table @end deftypefn nescc-1.3.4/libiberty/fopen_unlocked.c000066400000000000000000000066401177770303300177540ustar00rootroot00000000000000/* Implement fopen_unlocked and related functions. Copyright (C) 2005 Free Software Foundation, Inc. Written by Kaveh R. Ghazi . This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* @deftypefn Extension void unlock_stream (FILE * @var{stream}) If the OS supports it, ensure that the supplied stream is setup to avoid any multi-threaded locking. Otherwise leave the @code{FILE} pointer unchanged. If the @var{stream} is @code{NULL} do nothing. @end deftypefn @deftypefn Extension void unlock_std_streams (void) If the OS supports it, ensure that the standard I/O streams, @code{stdin}, @code{stdout} and @code{stderr} are setup to avoid any multi-threaded locking. Otherwise do nothing. @end deftypefn @deftypefn Extension {FILE *} fopen_unlocked (const char *@var{path}, const char * @var{mode}) Opens and returns a @code{FILE} pointer via @code{fopen}. If the operating system supports it, ensure that the stream is setup to avoid any multi-threaded locking. Otherwise return the @code{FILE} pointer unchanged. @end deftypefn @deftypefn Extension {FILE *} fdopen_unlocked (int @var{fildes}, const char * @var{mode}) Opens and returns a @code{FILE} pointer via @code{fdopen}. If the operating system supports it, ensure that the stream is setup to avoid any multi-threaded locking. Otherwise return the @code{FILE} pointer unchanged. @end deftypefn @deftypefn Extension {FILE *} freopen_unlocked (const char * @var{path}, const char * @var{mode}, FILE * @var{stream}) Opens and returns a @code{FILE} pointer via @code{freopen}. If the operating system supports it, ensure that the stream is setup to avoid any multi-threaded locking. Otherwise return the @code{FILE} pointer unchanged. @end deftypefn */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifdef HAVE_STDIO_EXT_H #include #endif #include "libiberty.h" /* This is an inline helper function to consolidate attempts to unlock a stream. */ static inline void unlock_1 (FILE *const fp ATTRIBUTE_UNUSED) { #if defined(HAVE___FSETLOCKING) && defined(FSETLOCKING_BYCALLER) if (fp) __fsetlocking (fp, FSETLOCKING_BYCALLER); #endif } void unlock_stream (FILE *fp) { unlock_1 (fp); } void unlock_std_streams (void) { unlock_1 (stdin); unlock_1 (stdout); unlock_1 (stderr); } FILE * fopen_unlocked (const char *path, const char *mode) { FILE *const fp = fopen (path, mode); unlock_1 (fp); return fp; } FILE * fdopen_unlocked (int fildes, const char *mode) { FILE *const fp = fdopen (fildes, mode); unlock_1 (fp); return fp; } FILE * freopen_unlocked (const char *path, const char *mode, FILE *stream) { FILE *const fp = freopen (path, mode, stream); unlock_1 (fp); return fp; } nescc-1.3.4/libiberty/functions.texi000066400000000000000000001630151177770303300175200ustar00rootroot00000000000000@c Automatically generated from *.c and others (the comments before @c each entry tell you which file and where in that file). DO NOT EDIT! @c Edit the *.c files, configure with --enable-maintainer-mode, @c and let gather-docs build you a new copy. @c safe-ctype.c:25 @defvr Extension HOST_CHARSET This macro indicates the basic character set and encoding used by the host: more precisely, the encoding used for character constants in preprocessor @samp{#if} statements (the C "execution character set"). It is defined by @file{safe-ctype.h}, and will be an integer constant with one of the following values: @ftable @code @item HOST_CHARSET_UNKNOWN The host character set is unknown - that is, not one of the next two possibilities. @item HOST_CHARSET_ASCII The host character set is ASCII. @item HOST_CHARSET_EBCDIC The host character set is some variant of EBCDIC. (Only one of the nineteen EBCDIC varying characters is tested; exercise caution.) @end ftable @end defvr @c alloca.c:26 @deftypefn Replacement void* alloca (size_t @var{size}) This function allocates memory which will be automatically reclaimed after the procedure exits. The @libib{} implementation does not free the memory immediately but will do so eventually during subsequent calls to this function. Memory is allocated using @code{xmalloc} under normal circumstances. The header file @file{alloca-conf.h} can be used in conjunction with the GNU Autoconf test @code{AC_FUNC_ALLOCA} to test for and properly make available this function. The @code{AC_FUNC_ALLOCA} test requires that client code use a block of preprocessor code to be safe (see the Autoconf manual for more); this header incorporates that logic and more, including the possibility of a GCC built-in function. @end deftypefn @c asprintf.c:32 @deftypefn Extension int asprintf (char **@var{resptr}, const char *@var{format}, ...) Like @code{sprintf}, but instead of passing a pointer to a buffer, you pass a pointer to a pointer. This function will compute the size of the buffer needed, allocate memory with @code{malloc}, and store a pointer to the allocated memory in @code{*@var{resptr}}. The value returned is the same as @code{sprintf} would return. If memory could not be allocated, minus one is returned and @code{NULL} is stored in @code{*@var{resptr}}. @end deftypefn @c atexit.c:6 @deftypefn Supplemental int atexit (void (*@var{f})()) Causes function @var{f} to be called at exit. Returns 0. @end deftypefn @c basename.c:6 @deftypefn Supplemental char* basename (const char *@var{name}) Returns a pointer to the last component of pathname @var{name}. Behavior is undefined if the pathname ends in a directory separator. @end deftypefn @c bcmp.c:6 @deftypefn Supplemental int bcmp (char *@var{x}, char *@var{y}, int @var{count}) Compares the first @var{count} bytes of two areas of memory. Returns zero if they are the same, nonzero otherwise. Returns zero if @var{count} is zero. A nonzero result only indicates a difference, it does not indicate any sorting order (say, by having a positive result mean @var{x} sorts before @var{y}). @end deftypefn @c bcopy.c:3 @deftypefn Supplemental void bcopy (char *@var{in}, char *@var{out}, int @var{length}) Copies @var{length} bytes from memory region @var{in} to region @var{out}. The use of @code{bcopy} is deprecated in new programs. @end deftypefn @c bsearch.c:33 @deftypefn Supplemental void* bsearch (const void *@var{key}, const void *@var{base}, size_t @var{nmemb}, size_t @var{size}, int (*@var{compar})(const void *, const void *)) Performs a search over an array of @var{nmemb} elements pointed to by @var{base} for a member that matches the object pointed to by @var{key}. The size of each member is specified by @var{size}. The array contents should be sorted in ascending order according to the @var{compar} comparison function. This routine should take two arguments pointing to the @var{key} and to an array member, in that order, and should return an integer less than, equal to, or greater than zero if the @var{key} object is respectively less than, matching, or greater than the array member. @end deftypefn @c argv.c:124 @deftypefn Extension char** buildargv (char *@var{sp}) Given a pointer to a string, parse the string extracting fields separated by whitespace and optionally enclosed within either single or double quotes (which are stripped off), and build a vector of pointers to copies of the string for each field. The input string remains unchanged. The last element of the vector is followed by a @code{NULL} element. All of the memory for the pointer array and copies of the string is obtained from @code{malloc}. All of the memory can be returned to the system with the single function call @code{freeargv}, which takes the returned result of @code{buildargv}, as it's argument. Returns a pointer to the argument vector if successful. Returns @code{NULL} if @var{sp} is @code{NULL} or if there is insufficient memory to complete building the argument vector. If the input is a null string (as opposed to a @code{NULL} pointer), then buildarg returns an argument vector that has one arg, a null string. @end deftypefn @c bzero.c:6 @deftypefn Supplemental void bzero (char *@var{mem}, int @var{count}) Zeros @var{count} bytes starting at @var{mem}. Use of this function is deprecated in favor of @code{memset}. @end deftypefn @c calloc.c:6 @deftypefn Supplemental void* calloc (size_t @var{nelem}, size_t @var{elsize}) Uses @code{malloc} to allocate storage for @var{nelem} objects of @var{elsize} bytes each, then zeros the memory. @end deftypefn @c choose-temp.c:42 @deftypefn Extension char* choose_temp_base (void) Return a prefix for temporary file names or @code{NULL} if unable to find one. The current directory is chosen if all else fails so the program is exited if a temporary directory can't be found (@code{mktemp} fails). The buffer for the result is obtained with @code{xmalloc}. This function is provided for backwards compatibility only. Its use is not recommended. @end deftypefn @c make-temp-file.c:87 @deftypefn Replacement char* choose_tmpdir () Returns a pointer to a directory path suitable for creating temporary files in. @end deftypefn @c clock.c:27 @deftypefn Supplemental long clock (void) Returns an approximation of the CPU time used by the process as a @code{clock_t}; divide this number by @samp{CLOCKS_PER_SEC} to get the number of seconds used. @end deftypefn @c concat.c:24 @deftypefn Extension char* concat (const char *@var{s1}, const char *@var{s2}, @dots{}, @code{NULL}) Concatenate zero or more of strings and return the result in freshly @code{xmalloc}ed memory. Returns @code{NULL} if insufficient memory is available. The argument list is terminated by the first @code{NULL} pointer encountered. Pointers to empty strings are ignored. @end deftypefn @c argv.c:52 @deftypefn Extension char** dupargv (char **@var{vector}) Duplicate an argument vector. Simply scans through @var{vector}, duplicating each argument until the terminating @code{NULL} is found. Returns a pointer to the argument vector if successful. Returns @code{NULL} if there is insufficient memory to complete building the argument vector. @end deftypefn @c strerror.c:567 @deftypefn Extension int errno_max (void) Returns the maximum @code{errno} value for which a corresponding symbolic name or message is available. Note that in the case where we use the @code{sys_errlist} supplied by the system, it is possible for there to be more symbolic names than messages, or vice versa. In fact, the manual page for @code{perror(3C)} explicitly warns that one should check the size of the table (@code{sys_nerr}) before indexing it, since new error codes may be added to the system before they are added to the table. Thus @code{sys_nerr} might be smaller than value implied by the largest @code{errno} value defined in @code{}. We return the maximum value that can be used to obtain a meaningful symbolic name or message. @end deftypefn @c argv.c:348 @deftypefn Extension void expandargv (int *@var{argcp}, char ***@var{argvp}) The @var{argcp} and @code{argvp} arguments are pointers to the usual @code{argc} and @code{argv} arguments to @code{main}. This function looks for arguments that begin with the character @samp{@@}. Any such arguments are interpreted as ``response files''. The contents of the response file are interpreted as additional command line options. In particular, the file is separated into whitespace-separated strings; each such string is taken as a command-line option. The new options are inserted in place of the option naming the response file, and @code{*argcp} and @code{*argvp} will be updated. If the value of @code{*argvp} is modified by this function, then the new value has been dynamically allocated and can be deallocated by the caller with @code{freeargv}. However, most callers will simply call @code{expandargv} near the beginning of @code{main} and allow the operating system to free the memory when the program exits. @end deftypefn @c fdmatch.c:23 @deftypefn Extension int fdmatch (int @var{fd1}, int @var{fd2}) Check to see if two open file descriptors refer to the same file. This is useful, for example, when we have an open file descriptor for an unnamed file, and the name of a file that we believe to correspond to that fd. This can happen when we are exec'd with an already open file (@code{stdout} for example) or from the SVR4 @file{/proc} calls that return open file descriptors for mapped address spaces. All we have to do is open the file by name and check the two file descriptors for a match, which is done by comparing major and minor device numbers and inode numbers. @end deftypefn @c fopen_unlocked.c:48 @deftypefn Extension {FILE *} fdopen_unlocked (int @var{fildes}, const char * @var{mode}) Opens and returns a @code{FILE} pointer via @code{fdopen}. If the operating system supports it, ensure that the stream is setup to avoid any multi-threaded locking. Otherwise return the @code{FILE} pointer unchanged. @end deftypefn @c ffs.c:3 @deftypefn Supplemental int ffs (int @var{valu}) Find the first (least significant) bit set in @var{valu}. Bits are numbered from right to left, starting with bit 1 (corresponding to the value 1). If @var{valu} is zero, zero is returned. @end deftypefn @c filename_cmp.c:32 @deftypefn Extension int filename_cmp (const char *@var{s1}, const char *@var{s2}) Return zero if the two file names @var{s1} and @var{s2} are equivalent. If not equivalent, the returned value is similar to what @code{strcmp} would return. In other words, it returns a negative value if @var{s1} is less than @var{s2}, or a positive value if @var{s2} is greater than @var{s2}. This function does not normalize file names. As a result, this function will treat filenames that are spelled differently as different even in the case when the two filenames point to the same underlying file. However, it does handle the fact that on DOS-like file systems, forward and backward slashes are equal. @end deftypefn @c fnmatch.txh:1 @deftypefn Replacement int fnmatch (const char *@var{pattern}, const char *@var{string}, int @var{flags}) Matches @var{string} against @var{pattern}, returning zero if it matches, @code{FNM_NOMATCH} if not. @var{pattern} may contain the wildcards @code{?} to match any one character, @code{*} to match any zero or more characters, or a set of alternate characters in square brackets, like @samp{[a-gt8]}, which match one character (@code{a} through @code{g}, or @code{t}, or @code{8}, in this example) if that one character is in the set. A set may be inverted (i.e., match anything except what's in the set) by giving @code{^} or @code{!} as the first character in the set. To include those characters in the set, list them as anything other than the first character of the set. To include a dash in the set, list it last in the set. A backslash character makes the following character not special, so for example you could match against a literal asterisk with @samp{\*}. To match a literal backslash, use @samp{\\}. @code{flags} controls various aspects of the matching process, and is a boolean OR of zero or more of the following values (defined in @code{}): @table @code @item FNM_PATHNAME @itemx FNM_FILE_NAME @var{string} is assumed to be a path name. No wildcard will ever match @code{/}. @item FNM_NOESCAPE Do not interpret backslashes as quoting the following special character. @item FNM_PERIOD A leading period (at the beginning of @var{string}, or if @code{FNM_PATHNAME} after a slash) is not matched by @code{*} or @code{?} but must be matched explicitly. @item FNM_LEADING_DIR Means that @var{string} also matches @var{pattern} if some initial part of @var{string} matches, and is followed by @code{/} and zero or more characters. For example, @samp{foo*} would match either @samp{foobar} or @samp{foobar/grill}. @item FNM_CASEFOLD Ignores case when performing the comparison. @end table @end deftypefn @c fopen_unlocked.c:39 @deftypefn Extension {FILE *} fopen_unlocked (const char *@var{path}, const char * @var{mode}) Opens and returns a @code{FILE} pointer via @code{fopen}. If the operating system supports it, ensure that the stream is setup to avoid any multi-threaded locking. Otherwise return the @code{FILE} pointer unchanged. @end deftypefn @c argv.c:97 @deftypefn Extension void freeargv (char **@var{vector}) Free an argument vector that was built using @code{buildargv}. Simply scans through @var{vector}, freeing the memory for each argument until the terminating @code{NULL} is found, and then frees @var{vector} itself. @end deftypefn @c fopen_unlocked.c:57 @deftypefn Extension {FILE *} freopen_unlocked (const char * @var{path}, const char * @var{mode}, FILE * @var{stream}) Opens and returns a @code{FILE} pointer via @code{freopen}. If the operating system supports it, ensure that the stream is setup to avoid any multi-threaded locking. Otherwise return the @code{FILE} pointer unchanged. @end deftypefn @c getruntime.c:82 @deftypefn Replacement long get_run_time (void) Returns the time used so far, in microseconds. If possible, this is the time used by this process, else it is the elapsed time since the process started. @end deftypefn @c getcwd.c:6 @deftypefn Supplemental char* getcwd (char *@var{pathname}, int @var{len}) Copy the absolute pathname for the current working directory into @var{pathname}, which is assumed to point to a buffer of at least @var{len} bytes, and return a pointer to the buffer. If the current directory's path doesn't fit in @var{len} characters, the result is @code{NULL} and @code{errno} is set. If @var{pathname} is a null pointer, @code{getcwd} will obtain @var{len} bytes of space using @code{malloc}. @end deftypefn @c getpagesize.c:5 @deftypefn Supplemental int getpagesize (void) Returns the number of bytes in a page of memory. This is the granularity of many of the system memory management routines. No guarantee is made as to whether or not it is the same as the basic memory management hardware page size. @end deftypefn @c getpwd.c:5 @deftypefn Supplemental char* getpwd (void) Returns the current working directory. This implementation caches the result on the assumption that the process will not call @code{chdir} between calls to @code{getpwd}. @end deftypefn @c gettimeofday.c:12 @deftypefn Supplemental int gettimeofday (struct timeval *@var{tp}, void *@var{tz}) Writes the current time to @var{tp}. This implementation requires that @var{tz} be NULL. Returns 0 on success, -1 on failure. @end deftypefn @c hex.c:33 @deftypefn Extension void hex_init (void) Initializes the array mapping the current character set to corresponding hex values. This function must be called before any call to @code{hex_p} or @code{hex_value}. If you fail to call it, a default ASCII-based table will normally be used on ASCII systems. @end deftypefn @c hex.c:42 @deftypefn Extension int hex_p (int @var{c}) Evaluates to non-zero if the given character is a valid hex character, or zero if it is not. Note that the value you pass will be cast to @code{unsigned char} within the macro. @end deftypefn @c hex.c:50 @deftypefn Extension {unsigned int} hex_value (int @var{c}) Returns the numeric equivalent of the given character when interpreted as a hexadecimal digit. The result is undefined if you pass an invalid hex digit. Note that the value you pass will be cast to @code{unsigned char} within the macro. The @code{hex_value} macro returns @code{unsigned int}, rather than signed @code{int}, to make it easier to use in parsing addresses from hex dump files: a signed @code{int} would be sign-extended when converted to a wider unsigned type --- like @code{bfd_vma}, on some systems. @end deftypefn @c index.c:5 @deftypefn Supplemental char* index (char *@var{s}, int @var{c}) Returns a pointer to the first occurrence of the character @var{c} in the string @var{s}, or @code{NULL} if not found. The use of @code{index} is deprecated in new programs in favor of @code{strchr}. @end deftypefn @c insque.c:6 @deftypefn Supplemental void insque (struct qelem *@var{elem}, struct qelem *@var{pred}) @deftypefnx Supplemental void remque (struct qelem *@var{elem}) Routines to manipulate queues built from doubly linked lists. The @code{insque} routine inserts @var{elem} in the queue immediately after @var{pred}. The @code{remque} routine removes @var{elem} from its containing queue. These routines expect to be passed pointers to structures which have as their first members a forward pointer and a back pointer, like this prototype (although no prototype is provided): @example struct qelem @{ struct qelem *q_forw; struct qelem *q_back; char q_data[]; @}; @end example @end deftypefn @c safe-ctype.c:46 @deffn Extension ISALPHA (@var{c}) @deffnx Extension ISALNUM (@var{c}) @deffnx Extension ISBLANK (@var{c}) @deffnx Extension ISCNTRL (@var{c}) @deffnx Extension ISDIGIT (@var{c}) @deffnx Extension ISGRAPH (@var{c}) @deffnx Extension ISLOWER (@var{c}) @deffnx Extension ISPRINT (@var{c}) @deffnx Extension ISPUNCT (@var{c}) @deffnx Extension ISSPACE (@var{c}) @deffnx Extension ISUPPER (@var{c}) @deffnx Extension ISXDIGIT (@var{c}) These twelve macros are defined by @file{safe-ctype.h}. Each has the same meaning as the corresponding macro (with name in lowercase) defined by the standard header @file{ctype.h}. For example, @code{ISALPHA} returns true for alphabetic characters and false for others. However, there are two differences between these macros and those provided by @file{ctype.h}: @itemize @bullet @item These macros are guaranteed to have well-defined behavior for all values representable by @code{signed char} and @code{unsigned char}, and for @code{EOF}. @item These macros ignore the current locale; they are true for these fixed sets of characters: @multitable {@code{XDIGIT}} {yada yada yada yada yada yada yada yada} @item @code{ALPHA} @tab @kbd{A-Za-z} @item @code{ALNUM} @tab @kbd{A-Za-z0-9} @item @code{BLANK} @tab @kbd{space tab} @item @code{CNTRL} @tab @code{!PRINT} @item @code{DIGIT} @tab @kbd{0-9} @item @code{GRAPH} @tab @code{ALNUM || PUNCT} @item @code{LOWER} @tab @kbd{a-z} @item @code{PRINT} @tab @code{GRAPH ||} @kbd{space} @item @code{PUNCT} @tab @kbd{`~!@@#$%^&*()_-=+[@{]@}\|;:'",<.>/?} @item @code{SPACE} @tab @kbd{space tab \n \r \f \v} @item @code{UPPER} @tab @kbd{A-Z} @item @code{XDIGIT} @tab @kbd{0-9A-Fa-f} @end multitable Note that, if the host character set is ASCII or a superset thereof, all these macros will return false for all values of @code{char} outside the range of 7-bit ASCII. In particular, both ISPRINT and ISCNTRL return false for characters with numeric values from 128 to 255. @end itemize @end deffn @c safe-ctype.c:95 @deffn Extension ISIDNUM (@var{c}) @deffnx Extension ISIDST (@var{c}) @deffnx Extension IS_VSPACE (@var{c}) @deffnx Extension IS_NVSPACE (@var{c}) @deffnx Extension IS_SPACE_OR_NUL (@var{c}) @deffnx Extension IS_ISOBASIC (@var{c}) These six macros are defined by @file{safe-ctype.h} and provide additional character classes which are useful when doing lexical analysis of C or similar languages. They are true for the following sets of characters: @multitable {@code{SPACE_OR_NUL}} {yada yada yada yada yada yada yada yada} @item @code{IDNUM} @tab @kbd{A-Za-z0-9_} @item @code{IDST} @tab @kbd{A-Za-z_} @item @code{VSPACE} @tab @kbd{\r \n} @item @code{NVSPACE} @tab @kbd{space tab \f \v \0} @item @code{SPACE_OR_NUL} @tab @code{VSPACE || NVSPACE} @item @code{ISOBASIC} @tab @code{VSPACE || NVSPACE || PRINT} @end multitable @end deffn @c lbasename.c:23 @deftypefn Replacement {const char*} lbasename (const char *@var{name}) Given a pointer to a string containing a typical pathname (@samp{/usr/src/cmd/ls/ls.c} for example), returns a pointer to the last component of the pathname (@samp{ls.c} in this case). The returned pointer is guaranteed to lie within the original string. This latter fact is not true of many vendor C libraries, which return special strings or modify the passed strings for particular input. In particular, the empty string returns the same empty string, and a path ending in @code{/} returns the empty string after it. @end deftypefn @c lrealpath.c:25 @deftypefn Replacement {const char*} lrealpath (const char *@var{name}) Given a pointer to a string containing a pathname, returns a canonical version of the filename. Symlinks will be resolved, and ``.'' and ``..'' components will be simplified. The returned value will be allocated using @code{malloc}, or @code{NULL} will be returned on a memory allocation error. @end deftypefn @c make-relative-prefix.c:24 @deftypefn Extension {const char*} make_relative_prefix (const char *@var{progname}, const char *@var{bin_prefix}, const char *@var{prefix}) Given three paths @var{progname}, @var{bin_prefix}, @var{prefix}, return the path that is in the same position relative to @var{progname}'s directory as @var{prefix} is relative to @var{bin_prefix}. That is, a string starting with the directory portion of @var{progname}, followed by a relative pathname of the difference between @var{bin_prefix} and @var{prefix}. If @var{progname} does not contain any directory separators, @code{make_relative_prefix} will search @env{PATH} to find a program named @var{progname}. Also, if @var{progname} is a symbolic link, the symbolic link will be resolved. For example, if @var{bin_prefix} is @code{/alpha/beta/gamma/gcc/delta}, @var{prefix} is @code{/alpha/beta/gamma/omega/}, and @var{progname} is @code{/red/green/blue/gcc}, then this function will return @code{/red/green/blue/../../omega/}. The return value is normally allocated via @code{malloc}. If no relative prefix can be found, return @code{NULL}. @end deftypefn @c make-temp-file.c:137 @deftypefn Replacement char* make_temp_file (const char *@var{suffix}) Return a temporary file name (as a string) or @code{NULL} if unable to create one. @var{suffix} is a suffix to append to the file name. The string is @code{malloc}ed, and the temporary file has been created. @end deftypefn @c memchr.c:3 @deftypefn Supplemental void* memchr (const void *@var{s}, int @var{c}, size_t @var{n}) This function searches memory starting at @code{*@var{s}} for the character @var{c}. The search only ends with the first occurrence of @var{c}, or after @var{length} characters; in particular, a null character does not terminate the search. If the character @var{c} is found within @var{length} characters of @code{*@var{s}}, a pointer to the character is returned. If @var{c} is not found, then @code{NULL} is returned. @end deftypefn @c memcmp.c:6 @deftypefn Supplemental int memcmp (const void *@var{x}, const void *@var{y}, size_t @var{count}) Compares the first @var{count} bytes of two areas of memory. Returns zero if they are the same, a value less than zero if @var{x} is lexically less than @var{y}, or a value greater than zero if @var{x} is lexically greater than @var{y}. Note that lexical order is determined as if comparing unsigned char arrays. @end deftypefn @c memcpy.c:6 @deftypefn Supplemental void* memcpy (void *@var{out}, const void *@var{in}, size_t @var{length}) Copies @var{length} bytes from memory region @var{in} to region @var{out}. Returns a pointer to @var{out}. @end deftypefn @c memmove.c:6 @deftypefn Supplemental void* memmove (void *@var{from}, const void *@var{to}, size_t @var{count}) Copies @var{count} bytes from memory area @var{from} to memory area @var{to}, returning a pointer to @var{to}. @end deftypefn @c mempcpy.c:23 @deftypefn Supplemental void* mempcpy (void *@var{out}, const void *@var{in}, size_t @var{length}) Copies @var{length} bytes from memory region @var{in} to region @var{out}. Returns a pointer to @var{out} + @var{length}. @end deftypefn @c memset.c:6 @deftypefn Supplemental void* memset (void *@var{s}, int @var{c}, size_t @var{count}) Sets the first @var{count} bytes of @var{s} to the constant byte @var{c}, returning a pointer to @var{s}. @end deftypefn @c mkstemps.c:58 @deftypefn Replacement int mkstemps (char *@var{pattern}, int @var{suffix_len}) Generate a unique temporary file name from @var{pattern}. @var{pattern} has the form: @example @var{path}/ccXXXXXX@var{suffix} @end example @var{suffix_len} tells us how long @var{suffix} is (it can be zero length). The last six characters of @var{pattern} before @var{suffix} must be @samp{XXXXXX}; they are replaced with a string that makes the filename unique. Returns a file descriptor open on the file for reading and writing. @end deftypefn @c pexecute.txh:266 @deftypefn Extension void pex_free (struct pex_obj @var{obj}) Clean up and free all data associated with @var{obj}. @end deftypefn @c pexecute.txh:241 @deftypefn Extension int pex_get_status (struct pex_obj *@var{obj}, int @var{count}, int *@var{vector}) Returns the exit status of all programs run using @var{obj}. @var{count} is the number of results expected. The results will be placed into @var{vector}. The results are in the order of the calls to @code{pex_run}. Returns 0 on error, 1 on success. @end deftypefn @c pexecute.txh:250 @deftypefn Extension int pex_get_times (struct pex_obj *@var{obj}, int @var{count}, struct pex_time *@var{vector}) Returns the process execution times of all programs run using @var{obj}. @var{count} is the number of results expected. The results will be placed into @var{vector}. The results are in the order of the calls to @code{pex_run}. Returns 0 on error, 1 on success. @code{struct pex_time} has the following fields of the type @code{unsigned long}: @code{user_seconds}, @code{user_microseconds}, @code{system_seconds}, @code{system_microseconds}. On systems which do not support reporting process times, all the fields will be set to @code{0}. @end deftypefn @c pexecute.txh:2 @deftypefn Extension {struct pex_obj *} pex_init (int @var{flags}, const char *@var{pname}, const char *@var{tempbase}) Prepare to execute one or more programs, with standard output of each program fed to standard input of the next. This is a system independent interface to execute a pipeline. @var{flags} is a bitwise combination of the following: @table @code @vindex PEX_RECORD_TIMES @item PEX_RECORD_TIMES Record subprocess times if possible. @vindex PEX_USE_PIPES @item PEX_USE_PIPES Use pipes for communication between processes, if possible. @vindex PEX_SAVE_TEMPS @item PEX_SAVE_TEMPS Don't delete temporary files used for communication between processes. @end table @var{pname} is the name of program to be executed, used in error messages. @var{tempbase} is a base name to use for any required temporary files; it may be @code{NULL} to use a randomly chosen name. @end deftypefn @c pexecute.txh:155 @deftypefn Extension {FILE *} pex_input_file (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{in_name}) Return a stream for a temporary file to pass to the first program in the pipeline as input. The name of the input file is chosen according to the same rules @code{pex_run} uses to choose output file names, based on @var{in_name}, @var{obj} and the @code{PEX_SUFFIX} bit in @var{flags}. Don't call @code{fclose} on the returned stream; the first call to @code{pex_run} closes it automatically. If @var{flags} includes @code{PEX_BINARY_OUTPUT}, open the stream in binary mode; otherwise, open it in the default mode. Including @code{PEX_BINARY_OUTPUT} in @var{flags} has no effect on Unix. @end deftypefn @c pexecute.txh:172 @deftypefn Extension {FILE *} pex_input_pipe (struct pex_obj *@var{obj}, int @var{binary}) Return a stream @var{fp} for a pipe connected to the standard input of the first program in the pipeline; @var{fp} is opened for writing. You must have passed @code{PEX_USE_PIPES} to the @code{pex_init} call that returned @var{obj}. You must close @var{fp} using @code{fclose} yourself when you have finished writing data to the pipeline. The file descriptor underlying @var{fp} is marked not to be inherited by child processes. On systems that do not support pipes, this function returns @code{NULL}, and sets @code{errno} to @code{EINVAL}. If you would like to write code that is portable to all systems the @code{pex} functions support, consider using @code{pex_input_file} instead. There are two opportunities for deadlock using @code{pex_input_pipe}: @itemize @bullet @item Most systems' pipes can buffer only a fixed amount of data; a process that writes to a full pipe blocks. Thus, if you write to @file{fp} before starting the first process, you run the risk of blocking when there is no child process yet to read the data and allow you to continue. @code{pex_input_pipe} makes no promises about the size of the pipe's buffer, so if you need to write any data at all before starting the first process in the pipeline, consider using @code{pex_input_file} instead. @item Using @code{pex_input_pipe} and @code{pex_read_output} together may also cause deadlock. If the output pipe fills up, so that each program in the pipeline is waiting for the next to read more data, and you fill the input pipe by writing more data to @var{fp}, then there is no way to make progress: the only process that could read data from the output pipe is you, but you are blocked on the input pipe. @end itemize @end deftypefn @c pexecute.txh:272 @deftypefn Extension {const char *} pex_one (int @var{flags}, const char *@var{executable}, char * const *@var{argv}, const char *@var{pname}, const char *@var{outname}, const char *@var{errname}, int *@var{status}, int *@var{err}) An interface to permit the easy execution of a single program. The return value and most of the parameters are as for a call to @code{pex_run}. @var{flags} is restricted to a combination of @code{PEX_SEARCH}, @code{PEX_STDERR_TO_STDOUT}, and @code{PEX_BINARY_OUTPUT}. @var{outname} is interpreted as if @code{PEX_LAST} were set. On a successful return, @code{*@var{status}} will be set to the exit status of the program. @end deftypefn @c pexecute.txh:228 @deftypefn Extension {FILE *} pex_read_err (struct pex_obj *@var{obj}, int @var{binary}) Returns a @code{FILE} pointer which may be used to read the standard error of the last program in the pipeline. When this is used, @code{PEX_LAST} should not be used in a call to @code{pex_run}. After this is called, @code{pex_run} may no longer be called with the same @var{obj}. @var{binary} should be non-zero if the file should be opened in binary mode. Don't call @code{fclose} on the returned file; it will be closed by @code{pex_free}. @end deftypefn @c pexecute.txh:216 @deftypefn Extension {FILE *} pex_read_output (struct pex_obj *@var{obj}, int @var{binary}) Returns a @code{FILE} pointer which may be used to read the standard output of the last program in the pipeline. When this is used, @code{PEX_LAST} should not be used in a call to @code{pex_run}. After this is called, @code{pex_run} may no longer be called with the same @var{obj}. @var{binary} should be non-zero if the file should be opened in binary mode. Don't call @code{fclose} on the returned file; it will be closed by @code{pex_free}. @end deftypefn @c pexecute.txh:33 @deftypefn Extension {const char *} pex_run (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{executable}, char * const *@var{argv}, const char *@var{outname}, const char *@var{errname}, int *@var{err}) Execute one program in a pipeline. On success this returns @code{NULL}. On failure it returns an error message, a statically allocated string. @var{obj} is returned by a previous call to @code{pex_init}. @var{flags} is a bitwise combination of the following: @table @code @vindex PEX_LAST @item PEX_LAST This must be set on the last program in the pipeline. In particular, it should be set when executing a single program. The standard output of the program will be sent to @var{outname}, or, if @var{outname} is @code{NULL}, to the standard output of the calling program. Do @emph{not} set this bit if you want to call @code{pex_read_output} (described below). After a call to @code{pex_run} with this bit set, @var{pex_run} may no longer be called with the same @var{obj}. @vindex PEX_SEARCH @item PEX_SEARCH Search for the program using the user's executable search path. @vindex PEX_SUFFIX @item PEX_SUFFIX @var{outname} is a suffix. See the description of @var{outname}, below. @vindex PEX_STDERR_TO_STDOUT @item PEX_STDERR_TO_STDOUT Send the program's standard error to standard output, if possible. @vindex PEX_BINARY_INPUT @vindex PEX_BINARY_OUTPUT @vindex PEX_BINARY_ERROR @item PEX_BINARY_INPUT @itemx PEX_BINARY_OUTPUT @itemx PEX_BINARY_ERROR The standard input (output or error) of the program should be read (written) in binary mode rather than text mode. These flags are ignored on systems which do not distinguish binary mode and text mode, such as Unix. For proper behavior these flags should match appropriately---a call to @code{pex_run} using @code{PEX_BINARY_OUTPUT} should be followed by a call using @code{PEX_BINARY_INPUT}. @vindex PEX_STDERR_TO_PIPE @item PEX_STDERR_TO_PIPE Send the program's standard error to a pipe, if possible. This flag cannot be specified together with @code{PEX_STDERR_TO_STDOUT}. This flag can be specified only on the last program in pipeline. @end table @var{executable} is the program to execute. @var{argv} is the set of arguments to pass to the program; normally @code{@var{argv}[0]} will be a copy of @var{executable}. @var{outname} is used to set the name of the file to use for standard output. There are two cases in which no output file will be used: @enumerate @item if @code{PEX_LAST} is not set in @var{flags}, and @code{PEX_USE_PIPES} was set in the call to @code{pex_init}, and the system supports pipes @item if @code{PEX_LAST} is set in @var{flags}, and @var{outname} is @code{NULL} @end enumerate @noindent Otherwise the code will use a file to hold standard output. If @code{PEX_LAST} is not set, this file is considered to be a temporary file, and it will be removed when no longer needed, unless @code{PEX_SAVE_TEMPS} was set in the call to @code{pex_init}. There are two cases to consider when setting the name of the file to hold standard output. @enumerate @item @code{PEX_SUFFIX} is set in @var{flags}. In this case @var{outname} may not be @code{NULL}. If the @var{tempbase} parameter to @code{pex_init} was not @code{NULL}, then the output file name is the concatenation of @var{tempbase} and @var{outname}. If @var{tempbase} was @code{NULL}, then the output file name is a random file name ending in @var{outname}. @item @code{PEX_SUFFIX} was not set in @var{flags}. In this case, if @var{outname} is not @code{NULL}, it is used as the output file name. If @var{outname} is @code{NULL}, and @var{tempbase} was not NULL, the output file name is randomly chosen using @var{tempbase}. Otherwise the output file name is chosen completely at random. @end enumerate @var{errname} is the file name to use for standard error output. If it is @code{NULL}, standard error is the same as the caller's. Otherwise, standard error is written to the named file. On an error return, the code sets @code{*@var{err}} to an @code{errno} value, or to 0 if there is no relevant @code{errno}. @end deftypefn @c pexecute.txh:142 @deftypefn Extension {const char *} pex_run_in_environment (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{executable}, char * const *@var{argv}, char * const *@var{env}, int @var{env_size}, const char *@var{outname}, const char *@var{errname}, int *@var{err}) Execute one program in a pipeline, permitting the environment for the program to be specified. Behaviour and parameters not listed below are as for @code{pex_run}. @var{env} is the environment for the child process, specified as an array of character pointers. Each element of the array should point to a string of the form @code{VAR=VALUE}, with the exception of the last element that must be @code{NULL}. @end deftypefn @c pexecute.txh:284 @deftypefn Extension int pexecute (const char *@var{program}, char * const *@var{argv}, const char *@var{this_pname}, const char *@var{temp_base}, char **@var{errmsg_fmt}, char **@var{errmsg_arg}, int @var{flags}) This is the old interface to execute one or more programs. It is still supported for compatibility purposes, but is no longer documented. @end deftypefn @c strsignal.c:539 @deftypefn Supplemental void psignal (int @var{signo}, char *@var{message}) Print @var{message} to the standard error, followed by a colon, followed by the description of the signal specified by @var{signo}, followed by a newline. @end deftypefn @c putenv.c:21 @deftypefn Supplemental int putenv (const char *@var{string}) Uses @code{setenv} or @code{unsetenv} to put @var{string} into the environment or remove it. If @var{string} is of the form @samp{name=value} the string is added; if no @samp{=} is present the name is unset/removed. @end deftypefn @c pexecute.txh:292 @deftypefn Extension int pwait (int @var{pid}, int *@var{status}, int @var{flags}) Another part of the old execution interface. @end deftypefn @c random.c:39 @deftypefn Supplement {long int} random (void) @deftypefnx Supplement void srandom (unsigned int @var{seed}) @deftypefnx Supplement void* initstate (unsigned int @var{seed}, void *@var{arg_state}, unsigned long @var{n}) @deftypefnx Supplement void* setstate (void *@var{arg_state}) Random number functions. @code{random} returns a random number in the range 0 to @code{LONG_MAX}. @code{srandom} initializes the random number generator to some starting point determined by @var{seed} (else, the values returned by @code{random} are always the same for each run of the program). @code{initstate} and @code{setstate} allow fine-grained control over the state of the random number generator. @end deftypefn @c concat.c:173 @deftypefn Extension char* reconcat (char *@var{optr}, const char *@var{s1}, @dots{}, @code{NULL}) Same as @code{concat}, except that if @var{optr} is not @code{NULL} it is freed after the string is created. This is intended to be useful when you're extending an existing string or building up a string in a loop: @example str = reconcat (str, "pre-", str, NULL); @end example @end deftypefn @c rename.c:6 @deftypefn Supplemental int rename (const char *@var{old}, const char *@var{new}) Renames a file from @var{old} to @var{new}. If @var{new} already exists, it is removed. @end deftypefn @c rindex.c:5 @deftypefn Supplemental char* rindex (const char *@var{s}, int @var{c}) Returns a pointer to the last occurrence of the character @var{c} in the string @var{s}, or @code{NULL} if not found. The use of @code{rindex} is deprecated in new programs in favor of @code{strrchr}. @end deftypefn @c setenv.c:22 @deftypefn Supplemental int setenv (const char *@var{name}, const char *@var{value}, int @var{overwrite}) @deftypefnx Supplemental void unsetenv (const char *@var{name}) @code{setenv} adds @var{name} to the environment with value @var{value}. If the name was already present in the environment, the new value will be stored only if @var{overwrite} is nonzero. The companion @code{unsetenv} function removes @var{name} from the environment. This implementation is not safe for multithreaded code. @end deftypefn @c strsignal.c:348 @deftypefn Extension int signo_max (void) Returns the maximum signal value for which a corresponding symbolic name or message is available. Note that in the case where we use the @code{sys_siglist} supplied by the system, it is possible for there to be more symbolic names than messages, or vice versa. In fact, the manual page for @code{psignal(3b)} explicitly warns that one should check the size of the table (@code{NSIG}) before indexing it, since new signal codes may be added to the system before they are added to the table. Thus @code{NSIG} might be smaller than value implied by the largest signo value defined in @code{}. We return the maximum value that can be used to obtain a meaningful symbolic name or message. @end deftypefn @c sigsetmask.c:8 @deftypefn Supplemental int sigsetmask (int @var{set}) Sets the signal mask to the one provided in @var{set} and returns the old mask (which, for libiberty's implementation, will always be the value @code{1}). @end deftypefn @c snprintf.c:28 @deftypefn Supplemental int snprintf (char *@var{buf}, size_t @var{n}, const char *@var{format}, ...) This function is similar to sprintf, but it will print at most @var{n} characters. On error the return value is -1, otherwise it returns the number of characters that would have been printed had @var{n} been sufficiently large, regardless of the actual value of @var{n}. Note some pre-C99 system libraries do not implement this correctly so users cannot generally rely on the return value if the system version of this function is used. @end deftypefn @c spaces.c:22 @deftypefn Extension char* spaces (int @var{count}) Returns a pointer to a memory region filled with the specified number of spaces and null terminated. The returned pointer is valid until at least the next call. @end deftypefn @c stpcpy.c:23 @deftypefn Supplemental char* stpcpy (char *@var{dst}, const char *@var{src}) Copies the string @var{src} into @var{dst}. Returns a pointer to @var{dst} + strlen(@var{src}). @end deftypefn @c stpncpy.c:23 @deftypefn Supplemental char* stpncpy (char *@var{dst}, const char *@var{src}, size_t @var{len}) Copies the string @var{src} into @var{dst}, copying exactly @var{len} and padding with zeros if necessary. If @var{len} < strlen(@var{src}) then return @var{dst} + @var{len}, otherwise returns @var{dst} + strlen(@var{src}). @end deftypefn @c strcasecmp.c:15 @deftypefn Supplemental int strcasecmp (const char *@var{s1}, const char *@var{s2}) A case-insensitive @code{strcmp}. @end deftypefn @c strchr.c:6 @deftypefn Supplemental char* strchr (const char *@var{s}, int @var{c}) Returns a pointer to the first occurrence of the character @var{c} in the string @var{s}, or @code{NULL} if not found. If @var{c} is itself the null character, the results are undefined. @end deftypefn @c strdup.c:3 @deftypefn Supplemental char* strdup (const char *@var{s}) Returns a pointer to a copy of @var{s} in memory obtained from @code{malloc}, or @code{NULL} if insufficient memory was available. @end deftypefn @c strerror.c:670 @deftypefn Replacement {const char*} strerrno (int @var{errnum}) Given an error number returned from a system call (typically returned in @code{errno}), returns a pointer to a string containing the symbolic name of that error number, as found in @code{}. If the supplied error number is within the valid range of indices for symbolic names, but no name is available for the particular error number, then returns the string @samp{Error @var{num}}, where @var{num} is the error number. If the supplied error number is not within the range of valid indices, then returns @code{NULL}. The contents of the location pointed to are only guaranteed to be valid until the next call to @code{strerrno}. @end deftypefn @c strerror.c:603 @deftypefn Supplemental char* strerror (int @var{errnoval}) Maps an @code{errno} number to an error message string, the contents of which are implementation defined. On systems which have the external variables @code{sys_nerr} and @code{sys_errlist}, these strings will be the same as the ones used by @code{perror}. If the supplied error number is within the valid range of indices for the @code{sys_errlist}, but no message is available for the particular error number, then returns the string @samp{Error @var{num}}, where @var{num} is the error number. If the supplied error number is not a valid index into @code{sys_errlist}, returns @code{NULL}. The returned string is only guaranteed to be valid only until the next call to @code{strerror}. @end deftypefn @c strncasecmp.c:15 @deftypefn Supplemental int strncasecmp (const char *@var{s1}, const char *@var{s2}) A case-insensitive @code{strncmp}. @end deftypefn @c strncmp.c:6 @deftypefn Supplemental int strncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n}) Compares the first @var{n} bytes of two strings, returning a value as @code{strcmp}. @end deftypefn @c strndup.c:23 @deftypefn Extension char* strndup (const char *@var{s}, size_t @var{n}) Returns a pointer to a copy of @var{s} with at most @var{n} characters in memory obtained from @code{malloc}, or @code{NULL} if insufficient memory was available. The result is always NUL terminated. @end deftypefn @c strrchr.c:6 @deftypefn Supplemental char* strrchr (const char *@var{s}, int @var{c}) Returns a pointer to the last occurrence of the character @var{c} in the string @var{s}, or @code{NULL} if not found. If @var{c} is itself the null character, the results are undefined. @end deftypefn @c strsignal.c:383 @deftypefn Supplemental {const char *} strsignal (int @var{signo}) Maps an signal number to an signal message string, the contents of which are implementation defined. On systems which have the external variable @code{sys_siglist}, these strings will be the same as the ones used by @code{psignal()}. If the supplied signal number is within the valid range of indices for the @code{sys_siglist}, but no message is available for the particular signal number, then returns the string @samp{Signal @var{num}}, where @var{num} is the signal number. If the supplied signal number is not a valid index into @code{sys_siglist}, returns @code{NULL}. The returned string is only guaranteed to be valid only until the next call to @code{strsignal}. @end deftypefn @c strsignal.c:446 @deftypefn Extension {const char*} strsigno (int @var{signo}) Given an signal number, returns a pointer to a string containing the symbolic name of that signal number, as found in @code{}. If the supplied signal number is within the valid range of indices for symbolic names, but no name is available for the particular signal number, then returns the string @samp{Signal @var{num}}, where @var{num} is the signal number. If the supplied signal number is not within the range of valid indices, then returns @code{NULL}. The contents of the location pointed to are only guaranteed to be valid until the next call to @code{strsigno}. @end deftypefn @c strstr.c:6 @deftypefn Supplemental char* strstr (const char *@var{string}, const char *@var{sub}) This function searches for the substring @var{sub} in the string @var{string}, not including the terminating null characters. A pointer to the first occurrence of @var{sub} is returned, or @code{NULL} if the substring is absent. If @var{sub} points to a string with zero length, the function returns @var{string}. @end deftypefn @c strtod.c:27 @deftypefn Supplemental double strtod (const char *@var{string}, char **@var{endptr}) This ISO C function converts the initial portion of @var{string} to a @code{double}. If @var{endptr} is not @code{NULL}, a pointer to the character after the last character used in the conversion is stored in the location referenced by @var{endptr}. If no conversion is performed, zero is returned and the value of @var{string} is stored in the location referenced by @var{endptr}. @end deftypefn @c strerror.c:729 @deftypefn Extension int strtoerrno (const char *@var{name}) Given the symbolic name of a error number (e.g., @code{EACCES}), map it to an errno value. If no translation is found, returns 0. @end deftypefn @c strtol.c:33 @deftypefn Supplemental {long int} strtol (const char *@var{string}, char **@var{endptr}, int @var{base}) @deftypefnx Supplemental {unsigned long int} strtoul (const char *@var{string}, char **@var{endptr}, int @var{base}) The @code{strtol} function converts the string in @var{string} to a long integer value according to the given @var{base}, which must be between 2 and 36 inclusive, or be the special value 0. If @var{base} is 0, @code{strtol} will look for the prefixes @code{0} and @code{0x} to indicate bases 8 and 16, respectively, else default to base 10. When the base is 16 (either explicitly or implicitly), a prefix of @code{0x} is allowed. The handling of @var{endptr} is as that of @code{strtod} above. The @code{strtoul} function is the same, except that the converted value is unsigned. @end deftypefn @c strsignal.c:500 @deftypefn Extension int strtosigno (const char *@var{name}) Given the symbolic name of a signal, map it to a signal number. If no translation is found, returns 0. @end deftypefn @c strverscmp.c:25 @deftypefun int strverscmp (const char *@var{s1}, const char *@var{s2}) The @code{strverscmp} function compares the string @var{s1} against @var{s2}, considering them as holding indices/version numbers. Return value follows the same conventions as found in the @code{strverscmp} function. In fact, if @var{s1} and @var{s2} contain no digits, @code{strverscmp} behaves like @code{strcmp}. Basically, we compare strings normally (character by character), until we find a digit in each string - then we enter a special comparison mode, where each sequence of digits is taken as a whole. If we reach the end of these two parts without noticing a difference, we return to the standard comparison mode. There are two types of numeric parts: "integral" and "fractional" (those begin with a '0'). The types of the numeric parts affect the way we sort them: @itemize @bullet @item integral/integral: we compare values as you would expect. @item fractional/integral: the fractional part is less than the integral one. Again, no surprise. @item fractional/fractional: the things become a bit more complex. If the common prefix contains only leading zeroes, the longest part is less than the other one; else the comparison behaves normally. @end itemize @smallexample strverscmp ("no digit", "no digit") @result{} 0 // @r{same behavior as strcmp.} strverscmp ("item#99", "item#100") @result{} <0 // @r{same prefix, but 99 < 100.} strverscmp ("alpha1", "alpha001") @result{} >0 // @r{fractional part inferior to integral one.} strverscmp ("part1_f012", "part1_f01") @result{} >0 // @r{two fractional parts.} strverscmp ("foo.009", "foo.0") @result{} <0 // @r{idem, but with leading zeroes only.} @end smallexample This function is especially useful when dealing with filename sorting, because filenames frequently hold indices/version numbers. @end deftypefun @c tmpnam.c:3 @deftypefn Supplemental char* tmpnam (char *@var{s}) This function attempts to create a name for a temporary file, which will be a valid file name yet not exist when @code{tmpnam} checks for it. @var{s} must point to a buffer of at least @code{L_tmpnam} bytes, or be @code{NULL}. Use of this function creates a security risk, and it must not be used in new projects. Use @code{mkstemp} instead. @end deftypefn @c unlink-if-ordinary.c:27 @deftypefn Supplemental int unlink_if_ordinary (const char*) Unlinks the named file, unless it is special (e.g. a device file). Returns 0 when the file was unlinked, a negative value (and errno set) when there was an error deleting the file, and a positive value if no attempt was made to unlink the file because it is special. @end deftypefn @c fopen_unlocked.c:31 @deftypefn Extension void unlock_std_streams (void) If the OS supports it, ensure that the standard I/O streams, @code{stdin}, @code{stdout} and @code{stderr} are setup to avoid any multi-threaded locking. Otherwise do nothing. @end deftypefn @c fopen_unlocked.c:23 @deftypefn Extension void unlock_stream (FILE * @var{stream}) If the OS supports it, ensure that the supplied stream is setup to avoid any multi-threaded locking. Otherwise leave the @code{FILE} pointer unchanged. If the @var{stream} is @code{NULL} do nothing. @end deftypefn @c vasprintf.c:47 @deftypefn Extension int vasprintf (char **@var{resptr}, const char *@var{format}, va_list @var{args}) Like @code{vsprintf}, but instead of passing a pointer to a buffer, you pass a pointer to a pointer. This function will compute the size of the buffer needed, allocate memory with @code{malloc}, and store a pointer to the allocated memory in @code{*@var{resptr}}. The value returned is the same as @code{vsprintf} would return. If memory could not be allocated, minus one is returned and @code{NULL} is stored in @code{*@var{resptr}}. @end deftypefn @c vfork.c:6 @deftypefn Supplemental int vfork (void) Emulates @code{vfork} by calling @code{fork} and returning its value. @end deftypefn @c vprintf.c:3 @deftypefn Supplemental int vprintf (const char *@var{format}, va_list @var{ap}) @deftypefnx Supplemental int vfprintf (FILE *@var{stream}, const char *@var{format}, va_list @var{ap}) @deftypefnx Supplemental int vsprintf (char *@var{str}, const char *@var{format}, va_list @var{ap}) These functions are the same as @code{printf}, @code{fprintf}, and @code{sprintf}, respectively, except that they are called with a @code{va_list} instead of a variable number of arguments. Note that they do not call @code{va_end}; this is the application's responsibility. In @libib{} they are implemented in terms of the nonstandard but common function @code{_doprnt}. @end deftypefn @c vsnprintf.c:28 @deftypefn Supplemental int vsnprintf (char *@var{buf}, size_t @var{n}, const char *@var{format}, va_list @var{ap}) This function is similar to vsprintf, but it will print at most @var{n} characters. On error the return value is -1, otherwise it returns the number of characters that would have been printed had @var{n} been sufficiently large, regardless of the actual value of @var{n}. Note some pre-C99 system libraries do not implement this correctly so users cannot generally rely on the return value if the system version of this function is used. @end deftypefn @c waitpid.c:3 @deftypefn Supplemental int waitpid (int @var{pid}, int *@var{status}, int) This is a wrapper around the @code{wait} function. Any ``special'' values of @var{pid} depend on your implementation of @code{wait}, as does the return value. The third argument is unused in @libib{}. @end deftypefn @c argv.c:293 @deftypefn Extension int writeargv (const char **@var{argv}, FILE *@var{file}) Write each member of ARGV, handling all necessary quoting, to the file named by FILE, separated by whitespace. Return 0 on success, non-zero if an error occurred while writing to FILE. @end deftypefn @c xatexit.c:11 @deftypefun int xatexit (void (*@var{fn}) (void)) Behaves as the standard @code{atexit} function, but with no limit on the number of registered functions. Returns 0 on success, or @minus{}1 on failure. If you use @code{xatexit} to register functions, you must use @code{xexit} to terminate your program. @end deftypefun @c xmalloc.c:38 @deftypefn Replacement void* xcalloc (size_t @var{nelem}, size_t @var{elsize}) Allocate memory without fail, and set it to zero. This routine functions like @code{calloc}, but will behave the same as @code{xmalloc} if memory cannot be found. @end deftypefn @c xexit.c:22 @deftypefn Replacement void xexit (int @var{code}) Terminates the program. If any functions have been registered with the @code{xatexit} replacement function, they will be called first. Termination is handled via the system's normal @code{exit} call. @end deftypefn @c xmalloc.c:22 @deftypefn Replacement void* xmalloc (size_t) Allocate memory without fail. If @code{malloc} fails, this will print a message to @code{stderr} (using the name set by @code{xmalloc_set_program_name}, if any) and then call @code{xexit}. Note that it is therefore safe for a program to contain @code{#define malloc xmalloc} in its source. @end deftypefn @c xmalloc.c:53 @deftypefn Replacement void xmalloc_failed (size_t) This function is not meant to be called by client code, and is listed here for completeness only. If any of the allocation routines fail, this function will be called to print an error message and terminate execution. @end deftypefn @c xmalloc.c:46 @deftypefn Replacement void xmalloc_set_program_name (const char *@var{name}) You can use this to set the name of the program used by @code{xmalloc_failed} when printing a failure message. @end deftypefn @c xmemdup.c:7 @deftypefn Replacement void* xmemdup (void *@var{input}, size_t @var{copy_size}, size_t @var{alloc_size}) Duplicates a region of memory without fail. First, @var{alloc_size} bytes are allocated, then @var{copy_size} bytes from @var{input} are copied into it, and the new memory is returned. If fewer bytes are copied than were allocated, the remaining memory is zeroed. @end deftypefn @c xmalloc.c:32 @deftypefn Replacement void* xrealloc (void *@var{ptr}, size_t @var{size}) Reallocate memory without fail. This routine functions like @code{realloc}, but will behave the same as @code{xmalloc} if memory cannot be found. @end deftypefn @c xstrdup.c:7 @deftypefn Replacement char* xstrdup (const char *@var{s}) Duplicates a character string without fail, using @code{xmalloc} to obtain memory. @end deftypefn @c xstrerror.c:7 @deftypefn Replacement char* xstrerror (int @var{errnum}) Behaves exactly like the standard @code{strerror} function, but will never return a @code{NULL} pointer. @end deftypefn @c xstrndup.c:23 @deftypefn Replacement char* xstrndup (const char *@var{s}, size_t @var{n}) Returns a pointer to a copy of @var{s} with at most @var{n} characters without fail, using @code{xmalloc} to obtain memory. The result is always NUL terminated. @end deftypefn nescc-1.3.4/libiberty/gather-docs000066400000000000000000000064151177770303300167400ustar00rootroot00000000000000#!/usr/bin/perl # -*- perl -*- # Copyright (C) 2001 # Free Software Foundation # # This file is part of the libiberty library. # Libiberty is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # Libiberty 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with libiberty; see the file COPYING.LIB. If not, # write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, # Boston, MA 02110-1301, USA. # # Originally written by DJ Delorie # This program looks for texinfo snippets in source files and other # files, and builds per-category files with entries sorted in # alphabetical order. # The syntax it looks for is lines starting with '@def' in *.c and # other files (see TEXIFILES in Makefile.in). Entries are terminated # at the next @def* (which begins a new entry) or, for C files, a line # that begins with '*/' without leading spaces (this assumes that the # texinfo snippet is within a C-style /* */ comment). # if ($ARGV[0] eq "-v") { $verbose = 1; shift; } $srcdir = shift; $outfile = shift; if ($outfile !~ /\S/ || ! -f "$srcdir/Makefile.in" ) { print STDERR "Usage: gather-docs [-v] srcdir outfile.txi [files with snippets in them ...]\n"; exit 1; } $errors = 0; for $in (@ARGV) { if (!open(IN, "$srcdir/$in")) { print STDERR "Cannot open $srcdir/$in for reading: $!\n"; $errors ++; } else { $first = 1; $pertinent = 0; $man_mode = 0; $line = 0; while () { $line ++; $pertinent = 1 if /^\@def[a-z]*[a-wyz] /; $pertinent = 0 if /^\*\//; next unless $pertinent; if (/^\@def[a-z]*[a-wyz] /) { ($name) = m/[^\(]* ([^\( \t\r\n]+) *\(/; $name =~ s/[ ]*$//; $key = $name; $key =~ tr/A-Z/a-z/; $key =~ s/[^a-z0-9]+/ /g; $name{$key} = $node; $lines{$key} = ''; $src_file{$key} = $in; $src_line{$key} = $line; print "\nReading $in :" if $verbose && $first; $first = 0; print " $name" if $verbose; $node_lines{$key} .= $_; } else { $node_lines{$key} .= $_; } $pertinent = 0 if /^\@end def/; } close (IN); } } print "\n" if $verbose; exit $errors if $errors; if (!open (OUT, "> $outfile")) { print STDERR "Cannot open $outfile for writing: $!\n"; $errors ++; next; } print "Writing $outfile\n" if $verbose; print OUT "\@c Automatically generated from *.c and others (the comments before\n"; print OUT "\@c each entry tell you which file and where in that file). DO NOT EDIT!\n"; print OUT "\@c Edit the *.c files, configure with --enable-maintainer-mode,\n"; print OUT "\@c and let gather-docs build you a new copy.\n\n"; for $key (sort keys %name) { print OUT "\@c $src_file{$key}:$src_line{$key}\n"; print OUT $node_lines{$key}; print OUT "\n"; } if (! print OUT "\n") { print STDERR "Disk full writing $srcdir/$cat.texi\n"; $errors ++; } close (OUT); exit $errors; nescc-1.3.4/libiberty/getcwd.c000066400000000000000000000023451177770303300162340ustar00rootroot00000000000000/* Emulate getcwd using getwd. This function is in the public domain. */ /* @deftypefn Supplemental char* getcwd (char *@var{pathname}, int @var{len}) Copy the absolute pathname for the current working directory into @var{pathname}, which is assumed to point to a buffer of at least @var{len} bytes, and return a pointer to the buffer. If the current directory's path doesn't fit in @var{len} characters, the result is @code{NULL} and @code{errno} is set. If @var{pathname} is a null pointer, @code{getcwd} will obtain @var{len} bytes of space using @code{malloc}. @end deftypefn */ #include "config.h" #ifdef HAVE_SYS_PARAM_H #include #endif #include #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STDLIB_H #include #endif extern char *getwd (); extern int errno; #ifndef MAXPATHLEN #define MAXPATHLEN 1024 #endif char * getcwd (char *buf, size_t len) { char ourbuf[MAXPATHLEN]; char *result; result = getwd (ourbuf); if (result) { if (strlen (ourbuf) >= len) { errno = ERANGE; return 0; } if (!buf) { buf = (char*)malloc(len); if (!buf) { errno = ENOMEM; return 0; } } strcpy (buf, ourbuf); } return buf; } nescc-1.3.4/libiberty/getopt.c000066400000000000000000000731021177770303300162600ustar00rootroot00000000000000/* Getopt for GNU. NOTE: getopt is now part of the C library, so if you don't know what "Keep this file name-space clean" means, talk to drepper@gnu.org before changing it! Copyright (C) 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2005 Free Software Foundation, Inc. NOTE: This source is derived from an old version taken from the GNU C Library (glibc). This program 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. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* This tells Alpha OSF/1 not to define a getopt prototype in . Ditto for AIX 3.2 and . */ #ifndef _NO_PROTO # define _NO_PROTO #endif #ifdef HAVE_CONFIG_H # include #endif #if !defined __STDC__ || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ # ifndef const # define const # endif #endif #include "ansidecl.h" #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #define GETOPT_INTERFACE_VERSION 2 #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 # include # if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION # define ELIDE_CODE # endif #endif #ifndef ELIDE_CODE /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ /* Don't include stdlib.h for non-GNU C libraries because some of them contain conflicting prototypes for getopt. */ # include # include #endif /* GNU C library. */ #ifdef VMS # include # if HAVE_STRING_H - 0 # include # endif #endif #ifndef _ /* This is for other GNU distributions with internationalized messages. When compiling libc, the _ macro is predefined. */ # if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC # include # define _(msgid) gettext (msgid) # else # define _(msgid) (msgid) # endif #endif /* This version of `getopt' appears to the caller like standard Unix `getopt' but it behaves differently for the user, since it allows the user to intersperse the options with the other arguments. As `getopt' works, it permutes the elements of ARGV so that, when it is done, all the options precede everything else. Thus all application programs are extended to handle flexible argument order. Setting the environment variable POSIXLY_CORRECT disables permutation. Then the behavior is completely standard. GNU application programs can use a third alternative mode in which they can distinguish the relative order of options and other arguments. */ #include "getopt.h" /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ char *optarg = NULL; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ /* 1003.2 says this must be 1 before any call. */ int optind = 1; /* Formerly, initialization of getopt depended on optind==0, which causes problems with re-calling getopt as programs generally don't know that. */ int __getopt_initialized = 0; /* The next char to be scanned in the option-element in which the last option character we returned was found. This allows us to pick up the scan where we left off. If this is zero, or a null string, it means resume the scan by advancing to the next ARGV-element. */ static char *nextchar; /* Callers store zero here to inhibit the error message for unrecognized options. */ int opterr = 1; /* Set to an option character which was unrecognized. This must be initialized on some systems to avoid linking in the system's own getopt implementation. */ int optopt = '?'; /* Describe how to deal with options that follow non-option ARGV-elements. If the caller did not specify anything, the default is REQUIRE_ORDER if the environment variable POSIXLY_CORRECT is defined, PERMUTE otherwise. REQUIRE_ORDER means don't recognize them as options; stop option processing when the first non-option is seen. This is what Unix does. This mode of operation is selected by either setting the environment variable POSIXLY_CORRECT, or using `+' as the first character of the list of option characters. PERMUTE is the default. We permute the contents of ARGV as we scan, so that eventually all the non-options are at the end. This allows options to be given in any order, even with programs that were not written to expect this. RETURN_IN_ORDER is an option available to programs that were written to expect options and other ARGV-elements in any order and that care about the ordering of the two. We describe each non-option ARGV-element as if it were the argument of an option with character code 1. Using `-' as the first character of the list of option characters selects this mode of operation. The special argument `--' forces an end of option-scanning regardless of the value of `ordering'. In the case of RETURN_IN_ORDER, only `--' can cause `getopt' to return -1 with `optind' != ARGC. */ static enum { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER } ordering; /* Value of POSIXLY_CORRECT environment variable. */ static char *posixly_correct; #ifdef __GNU_LIBRARY__ /* We want to avoid inclusion of string.h with non-GNU libraries because there are many ways it can cause trouble. On some systems, it contains special magic macros that don't work in GCC. */ # include # define my_index strchr #else # if HAVE_STRING_H # include # else # if HAVE_STRINGS_H # include # endif # endif /* Avoid depending on library functions or files whose names are inconsistent. */ #if HAVE_STDLIB_H && HAVE_DECL_GETENV # include #elif !defined(getenv) # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ extern char *getenv (const char *); # ifdef __cplusplus } # endif /* __cplusplus */ #endif static char * my_index (const char *str, int chr) { while (*str) { if (*str == chr) return (char *) str; str++; } return 0; } /* If using GCC, we can safely declare strlen this way. If not using GCC, it is ok not to declare it. */ #ifdef __GNUC__ /* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. That was relevant to code that was here before. */ # if (!defined __STDC__ || !__STDC__) && !defined strlen /* gcc with -traditional declares the built-in strlen to return int, and has done so at least since version 2.4.5. -- rms. */ extern int strlen (const char *); # endif /* not __STDC__ */ #endif /* __GNUC__ */ #endif /* not __GNU_LIBRARY__ */ /* Handle permutation of arguments. */ /* Describe the part of ARGV that contains non-options that have been skipped. `first_nonopt' is the index in ARGV of the first of them; `last_nonopt' is the index after the last of them. */ static int first_nonopt; static int last_nonopt; #ifdef _LIBC /* Bash 2.0 gives us an environment variable containing flags indicating ARGV elements that should not be considered arguments. */ /* Defined in getopt_init.c */ extern char *__getopt_nonoption_flags; static int nonoption_flags_max_len; static int nonoption_flags_len; static int original_argc; static char *const *original_argv; /* Make sure the environment variable bash 2.0 puts in the environment is valid for the getopt call we must make sure that the ARGV passed to getopt is that one passed to the process. */ static void __attribute__ ((unused)) store_args_and_env (int argc, char *const *argv) { /* XXX This is no good solution. We should rather copy the args so that we can compare them later. But we must not use malloc(3). */ original_argc = argc; original_argv = argv; } # ifdef text_set_element text_set_element (__libc_subinit, store_args_and_env); # endif /* text_set_element */ # define SWAP_FLAGS(ch1, ch2) \ if (nonoption_flags_len > 0) \ { \ char __tmp = __getopt_nonoption_flags[ch1]; \ __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ __getopt_nonoption_flags[ch2] = __tmp; \ } #else /* !_LIBC */ # define SWAP_FLAGS(ch1, ch2) #endif /* _LIBC */ /* Exchange two adjacent subsequences of ARGV. One subsequence is elements [first_nonopt,last_nonopt) which contains all the non-options that have been skipped so far. The other is elements [last_nonopt,optind), which contains all the options processed since those non-options were skipped. `first_nonopt' and `last_nonopt' are relocated so that they describe the new indices of the non-options in ARGV after they are moved. */ #if defined __STDC__ && __STDC__ static void exchange (char **); #endif static void exchange (char **argv) { int bottom = first_nonopt; int middle = last_nonopt; int top = optind; char *tem; /* Exchange the shorter segment with the far end of the longer segment. That puts the shorter segment into the right place. It leaves the longer segment in the right place overall, but it consists of two parts that need to be swapped next. */ #ifdef _LIBC /* First make sure the handling of the `__getopt_nonoption_flags' string can work normally. Our top argument must be in the range of the string. */ if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) { /* We must extend the array. The user plays games with us and presents new arguments. */ char *new_str = (char *) malloc (top + 1); if (new_str == NULL) nonoption_flags_len = nonoption_flags_max_len = 0; else { memset (mempcpy (new_str, __getopt_nonoption_flags, nonoption_flags_max_len), '\0', top + 1 - nonoption_flags_max_len); nonoption_flags_max_len = top + 1; __getopt_nonoption_flags = new_str; } } #endif while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { /* Bottom segment is the short one. */ int len = middle - bottom; register int i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); } /* Exclude the moved bottom segment from further swapping. */ top -= len; } else { /* Top segment is the short one. */ int len = top - middle; register int i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; SWAP_FLAGS (bottom + i, middle + i); } /* Exclude the moved top segment from further swapping. */ bottom += len; } } /* Update records for the slots the non-options now occupy. */ first_nonopt += (optind - last_nonopt); last_nonopt = optind; } /* Initialize the internal data when the first call is made. */ #if defined __STDC__ && __STDC__ static const char *_getopt_initialize (int, char *const *, const char *); #endif static const char * _getopt_initialize (int argc ATTRIBUTE_UNUSED, char *const *argv ATTRIBUTE_UNUSED, const char *optstring) { /* Start processing options with ARGV-element 1 (since ARGV-element 0 is the program name); the sequence of previously skipped non-option ARGV-elements is empty. */ first_nonopt = last_nonopt = optind; nextchar = NULL; posixly_correct = getenv ("POSIXLY_CORRECT"); /* Determine how to handle the ordering of options and nonoptions. */ if (optstring[0] == '-') { ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == '+') { ordering = REQUIRE_ORDER; ++optstring; } else if (posixly_correct != NULL) ordering = REQUIRE_ORDER; else ordering = PERMUTE; #ifdef _LIBC if (posixly_correct == NULL && argc == original_argc && argv == original_argv) { if (nonoption_flags_max_len == 0) { if (__getopt_nonoption_flags == NULL || __getopt_nonoption_flags[0] == '\0') nonoption_flags_max_len = -1; else { const char *orig_str = __getopt_nonoption_flags; int len = nonoption_flags_max_len = strlen (orig_str); if (nonoption_flags_max_len < argc) nonoption_flags_max_len = argc; __getopt_nonoption_flags = (char *) malloc (nonoption_flags_max_len); if (__getopt_nonoption_flags == NULL) nonoption_flags_max_len = -1; else memset (mempcpy (__getopt_nonoption_flags, orig_str, len), '\0', nonoption_flags_max_len - len); } } nonoption_flags_len = nonoption_flags_max_len; } else nonoption_flags_len = 0; #endif return optstring; } /* Scan elements of ARGV (whose length is ARGC) for option characters given in OPTSTRING. If an element of ARGV starts with '-', and is not exactly "-" or "--", then it is an option element. The characters of this element (aside from the initial '-') are option characters. If `getopt' is called repeatedly, it returns successively each of the option characters from each of the option elements. If `getopt' finds another option character, it returns that character, updating `optind' and `nextchar' so that the next call to `getopt' can resume the scan with the following option character or ARGV-element. If there are no more option characters, `getopt' returns -1. Then `optind' is the index in ARGV of the first ARGV-element that is not an option. (The ARGV-elements have been permuted so that those that are not options now come last.) OPTSTRING is a string containing the legitimate option characters. If an option character is seen that is not listed in OPTSTRING, return '?' after printing an error message. If you set `opterr' to zero, the error message is suppressed but we still return '?'. If a char in OPTSTRING is followed by a colon, that means it wants an arg, so the following text in the same ARGV-element, or the text of the following ARGV-element, is returned in `optarg'. Two colons mean an option that wants an optional arg; if there is text in the current ARGV-element, it is returned in `optarg', otherwise `optarg' is set to zero. If OPTSTRING starts with `-' or `+', it requests different methods of handling the non-option ARGV-elements. See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. Long-named options begin with `--' instead of `-'. Their names may be abbreviated as long as the abbreviation is unique or is an exact match for some defined option. If they have an argument, it follows the option name in the same ARGV-element, separated from the option name by a `=', or else the in next ARGV-element. When `getopt' finds a long-named option, it returns 0 if that option's `flag' field is nonzero, the value of the option's `val' field if the `flag' field is zero. The elements of ARGV aren't really const, because we permute them. But we pretend they're const in the prototype to be compatible with other systems. LONGOPTS is a vector of `struct option' terminated by an element containing a name which is zero. LONGIND returns the index in LONGOPT of the long-named option found. It is only valid when a long-named option has been found by the most recent call. If LONG_ONLY is nonzero, '-' as well as '--' can introduce long-named options. */ int _getopt_internal (int argc, char *const *argv, const char *optstring, const struct option *longopts, int *longind, int long_only) { optarg = NULL; if (optind == 0 || !__getopt_initialized) { if (optind == 0) optind = 1; /* Don't scan ARGV[0], the program name. */ optstring = _getopt_initialize (argc, argv, optstring); __getopt_initialized = 1; } /* Test whether ARGV[optind] points to a non-option argument. Either it does not have option syntax, or there is an environment flag from the shell indicating it is not an option. The later information is only used when the used in the GNU libc. */ #ifdef _LIBC # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ || (optind < nonoption_flags_len \ && __getopt_nonoption_flags[optind] == '1')) #else # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') #endif if (nextchar == NULL || *nextchar == '\0') { /* Advance to the next ARGV-element. */ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been moved back by the user (who may also have changed the arguments). */ if (last_nonopt > optind) last_nonopt = optind; if (first_nonopt > optind) first_nonopt = optind; if (ordering == PERMUTE) { /* If we have just processed some options following some non-options, exchange them so that the options come first. */ if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (last_nonopt != optind) first_nonopt = optind; /* Skip any additional non-options and extend the range of non-options previously skipped. */ while (optind < argc && NONOPTION_P) optind++; last_nonopt = optind; } /* The special ARGV-element `--' means premature end of options. Skip it like a null option, then exchange with previous non-options as if it were an option, then skip everything else like a non-option. */ if (optind != argc && !strcmp (argv[optind], "--")) { optind++; if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (first_nonopt == last_nonopt) first_nonopt = optind; last_nonopt = argc; optind = argc; } /* If we have done all the ARGV-elements, stop the scan and back over any non-options that we skipped and permuted. */ if (optind == argc) { /* Set the next-arg-index to point at the non-options that we previously skipped, so the caller will digest them. */ if (first_nonopt != last_nonopt) optind = first_nonopt; return -1; } /* If we have come to a non-option and did not permute it, either stop the scan or describe it to the caller and pass it by. */ if (NONOPTION_P) { if (ordering == REQUIRE_ORDER) return -1; optarg = argv[optind++]; return 1; } /* We have found another option-ARGV-element. Skip the initial punctuation. */ nextchar = (argv[optind] + 1 + (longopts != NULL && argv[optind][1] == '-')); } /* Decode the current option-ARGV-element. */ /* Check whether the ARGV-element is a long option. If long_only and the ARGV-element has the form "-f", where f is a valid short option, don't consider it an abbreviated form of a long option that starts with f. Otherwise there would be no way to give the -f short option. On the other hand, if there's a long option "fubar" and the ARGV-element is "-fu", do consider that an abbreviation of the long option, just like "--fu", and not "-f" with arg "u". This distinction seems to be the most useful approach. */ if (longopts != NULL && (argv[optind][1] == '-' || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = -1; int option_index; for (nameend = nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if ((unsigned int) (nameend - nextchar) == (unsigned int) strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (opterr) fprintf (stderr, _("%s: option `%s' is ambiguous\n"), argv[0], argv[optind]); nextchar += strlen (nextchar); optind++; optopt = 0; return '?'; } if (pfound != NULL) { option_index = indfound; optind++; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (opterr) { if (argv[optind - 1][1] == '-') /* --option */ fprintf (stderr, _("%s: option `--%s' doesn't allow an argument\n"), argv[0], pfound->name); else /* +option or -option */ fprintf (stderr, _("%s: option `%c%s' doesn't allow an argument\n"), argv[0], argv[optind - 1][0], pfound->name); nextchar += strlen (nextchar); optopt = pfound->val; return '?'; } } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (opterr) fprintf (stderr, _("%s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]); nextchar += strlen (nextchar); optopt = pfound->val; return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } /* Can't find it as a long option. If this is not getopt_long_only, or the option starts with '--' or is not a valid short option, then it's an error. Otherwise interpret it as a short option. */ if (!long_only || argv[optind][1] == '-' || my_index (optstring, *nextchar) == NULL) { if (opterr) { if (argv[optind][1] == '-') /* --option */ fprintf (stderr, _("%s: unrecognized option `--%s'\n"), argv[0], nextchar); else /* +option or -option */ fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), argv[0], argv[optind][0], nextchar); } nextchar = (char *) ""; optind++; optopt = 0; return '?'; } } /* Look at and handle the next short option-character. */ { char c = *nextchar++; char *temp = my_index (optstring, c); /* Increment `optind' when we start to process its last character. */ if (*nextchar == '\0') ++optind; if (temp == NULL || c == ':') { if (opterr) { if (posixly_correct) /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c); else fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c); } optopt = c; return '?'; } /* Convenience. Treat POSIX -W foo same as long option --foo */ if (temp[0] == 'W' && temp[1] == ';') { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = 0; int option_index; /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (opterr) { /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], c); } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; return c; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; /* optarg is now the argument, see if it's in the table of longopts. */ for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if ((unsigned int) (nameend - nextchar) == strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (opterr) fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), argv[0], argv[optind]); nextchar += strlen (nextchar); optind++; return '?'; } if (pfound != NULL) { option_index = indfound; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (opterr) fprintf (stderr, _("\ %s: option `-W %s' doesn't allow an argument\n"), argv[0], pfound->name); nextchar += strlen (nextchar); return '?'; } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (opterr) fprintf (stderr, _("%s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]); nextchar += strlen (nextchar); return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } nextchar = NULL; return 'W'; /* Let the application handle it. */ } if (temp[1] == ':') { if (temp[2] == ':') { /* This is an option that accepts an argument optionally. */ if (*nextchar != '\0') { optarg = nextchar; optind++; } else optarg = NULL; nextchar = NULL; } else { /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (opterr) { /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], c); } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; nextchar = NULL; } } return c; } } int getopt (int argc, char *const *argv, const char *optstring) { return _getopt_internal (argc, argv, optstring, (const struct option *) 0, (int *) 0, 0); } #endif /* Not ELIDE_CODE. */ #ifdef TEST /* Compile with -DTEST to make an executable for use in testing the above definition of `getopt'. */ int main (int argc, char **argv) { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; c = getopt (argc, argv, "abc:d:0123456789"); if (c == -1) break; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value `%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ nescc-1.3.4/libiberty/getopt1.c000066400000000000000000000104571177770303300163450ustar00rootroot00000000000000/* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98,2005 Free Software Foundation, Inc. NOTE: This source is derived from an old version taken from the GNU C Library (glibc). This program 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. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include #endif #if !defined __STDC__ || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ #ifndef const #define const #endif #endif #include #include "getopt.h" /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #define GETOPT_INTERFACE_VERSION 2 #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 #include #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION #define ELIDE_CODE #endif #endif #ifndef ELIDE_CODE /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ #include #endif #ifndef NULL #define NULL 0 #endif int getopt_long (int argc, char *const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, argv, options, long_options, opt_index, 0); } /* Like getopt_long, but '-' as well as '--' can indicate a long option. If an option that starts with '-' (not '--') doesn't match a long option, but does match a short option, it is parsed as a short option instead. */ int getopt_long_only (int argc, char *const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, argv, options, long_options, opt_index, 1); } #endif /* Not ELIDE_CODE. */ #ifdef TEST #include int main (int argc, char **argv) { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; int option_index = 0; static struct option long_options[] = { {"add", 1, 0, 0}, {"append", 0, 0, 0}, {"delete", 1, 0, 0}, {"verbose", 0, 0, 0}, {"create", 0, 0, 0}, {"file", 1, 0, 0}, {0, 0, 0, 0} }; c = getopt_long (argc, argv, "abc:d:0123456789", long_options, &option_index); if (c == -1) break; switch (c) { case 0: printf ("option %s", long_options[option_index].name); if (optarg) printf (" with arg %s", optarg); printf ("\n"); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value `%s'\n", optarg); break; case 'd': printf ("option d with value `%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ nescc-1.3.4/libiberty/getpagesize.c000066400000000000000000000040221177770303300172600ustar00rootroot00000000000000/* Emulation of getpagesize() for systems that need it. */ /* @deftypefn Supplemental int getpagesize (void) Returns the number of bytes in a page of memory. This is the granularity of many of the system memory management routines. No guarantee is made as to whether or not it is the same as the basic memory management hardware page size. @end deftypefn BUGS Is intended as a reasonable replacement for systems where this is not provided as a system call. The value of 4096 may or may not be correct for the systems where it is returned as the default value. */ #ifndef VMS #include "config.h" #include #ifdef HAVE_SYS_PARAM_H #include #endif #undef GNU_OUR_PAGESIZE #if defined (HAVE_SYSCONF) && defined (HAVE_UNISTD_H) #include #ifdef _SC_PAGESIZE #define GNU_OUR_PAGESIZE sysconf(_SC_PAGESIZE) #endif #endif #ifndef GNU_OUR_PAGESIZE # ifdef PAGESIZE # define GNU_OUR_PAGESIZE PAGESIZE # else /* no PAGESIZE */ # ifdef EXEC_PAGESIZE # define GNU_OUR_PAGESIZE EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define GNU_OUR_PAGESIZE (NBPG * CLSIZE) # ifndef CLSIZE # define CLSIZE 1 # endif /* CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define GNU_OUR_PAGESIZE NBPC # else /* no NBPC */ # define GNU_OUR_PAGESIZE 4096 /* Just punt and use reasonable value */ # endif /* NBPC */ # endif /* NBPG */ # endif /* EXEC_PAGESIZE */ # endif /* PAGESIZE */ #endif /* GNU_OUR_PAGESIZE */ int getpagesize (void) { return (GNU_OUR_PAGESIZE); } #else /* VMS */ #if 0 /* older distributions of gcc-vms are missing */ #include #endif #ifndef SYI$_PAGE_SIZE /* VMS V5.4 and earlier didn't have this yet */ #define SYI$_PAGE_SIZE 4452 #endif extern unsigned long lib$getsyi(const unsigned short *,...); int getpagesize (void) { long pagsiz = 0L; unsigned short itmcod = SYI$_PAGE_SIZE; (void) lib$getsyi (&itmcod, (void *) &pagsiz); if (pagsiz == 0L) pagsiz = 512L; /* VAX default */ return (int) pagsiz; } #endif /* VMS */ nescc-1.3.4/libiberty/getpwd.c000066400000000000000000000050541177770303300162510ustar00rootroot00000000000000/* getpwd.c - get the working directory */ /* @deftypefn Supplemental char* getpwd (void) Returns the current working directory. This implementation caches the result on the assumption that the process will not call @code{chdir} between calls to @code{getpwd}. @end deftypefn */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #ifndef errno extern int errno; #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_SYS_PARAM_H #include #endif #if HAVE_SYS_STAT_H #include #endif #if HAVE_LIMITS_H #include #endif #include "libiberty.h" /* Virtually every UN*X system now in common use (except for pre-4.3-tahoe BSD systems) now provides getcwd as called for by POSIX. Allow for the few exceptions to the general rule here. */ #if !defined(HAVE_GETCWD) && defined(HAVE_GETWD) /* Prototype in case the system headers doesn't provide it. */ extern char *getwd (); #define getcwd(buf,len) getwd(buf) #endif #ifdef MAXPATHLEN #define GUESSPATHLEN (MAXPATHLEN + 1) #else #define GUESSPATHLEN 100 #endif #if !(defined (VMS) || (defined(_WIN32) && !defined(__CYGWIN__))) /* Get the working directory. Use the PWD environment variable if it's set correctly, since this is faster and gives more uniform answers to the user. Yield the working directory if successful; otherwise, yield 0 and set errno. */ char * getpwd (void) { static char *pwd; static int failure_errno; char *p = pwd; size_t s; struct stat dotstat, pwdstat; if (!p && !(errno = failure_errno)) { if (! ((p = getenv ("PWD")) != 0 && *p == '/' && stat (p, &pwdstat) == 0 && stat (".", &dotstat) == 0 && dotstat.st_ino == pwdstat.st_ino && dotstat.st_dev == pwdstat.st_dev)) /* The shortcut didn't work. Try the slow, ``sure'' way. */ for (s = GUESSPATHLEN; !getcwd (p = XNEWVEC (char, s), s); s *= 2) { int e = errno; free (p); #ifdef ERANGE if (e != ERANGE) #endif { errno = failure_errno = e; p = 0; break; } } /* Cache the result. This assumes that the program does not invoke chdir between calls to getpwd. */ pwd = p; } return p; } #else /* VMS || _WIN32 && !__CYGWIN__ */ #ifndef MAXPATHLEN #define MAXPATHLEN 255 #endif char * getpwd (void) { static char *pwd = 0; if (!pwd) pwd = getcwd (XNEWVEC (char, MAXPATHLEN + 1), MAXPATHLEN + 1 #ifdef VMS , 0 #endif ); return pwd; } #endif /* VMS || _WIN32 && !__CYGWIN__ */ nescc-1.3.4/libiberty/getruntime.c000066400000000000000000000057451177770303300171510ustar00rootroot00000000000000/* Return time used so far, in microseconds. Copyright (C) 1994, 1999, 2002 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "ansidecl.h" #include "libiberty.h" /* On some systems (such as WindISS), you must include to get the definition of "time_t" before you include . */ #include /* There are several ways to get elapsed execution time; unfortunately no single way is available for all host systems, nor are there reliable ways to find out which way is correct for a given host. */ #ifdef TIME_WITH_SYS_TIME # include # include #else # if HAVE_SYS_TIME_H # include # else # ifdef HAVE_TIME_H # include # endif # endif #endif #if defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H) #include #endif #ifdef HAVE_TIMES #ifdef HAVE_SYS_PARAM_H #include #endif #include #endif #ifdef HAVE_UNISTD_H #include #endif /* This is a fallback; if wrong, it will likely make obviously wrong results. */ #ifndef CLOCKS_PER_SEC #define CLOCKS_PER_SEC 1 #endif #ifdef _SC_CLK_TCK #define GNU_HZ sysconf(_SC_CLK_TCK) #else #ifdef HZ #define GNU_HZ HZ #else #ifdef CLOCKS_PER_SEC #define GNU_HZ CLOCKS_PER_SEC #endif #endif #endif /* @deftypefn Replacement long get_run_time (void) Returns the time used so far, in microseconds. If possible, this is the time used by this process, else it is the elapsed time since the process started. @end deftypefn */ long get_run_time (void) { #if defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H) struct rusage rusage; getrusage (0, &rusage); return (rusage.ru_utime.tv_sec * 1000000 + rusage.ru_utime.tv_usec + rusage.ru_stime.tv_sec * 1000000 + rusage.ru_stime.tv_usec); #else /* ! HAVE_GETRUSAGE */ #ifdef HAVE_TIMES struct tms tms; times (&tms); return (tms.tms_utime + tms.tms_stime) * (1000000 / GNU_HZ); #else /* ! HAVE_TIMES */ /* Fall back on clock and hope it's correctly implemented. */ const long clocks_per_sec = CLOCKS_PER_SEC; if (clocks_per_sec <= 1000000) return clock () * (1000000 / clocks_per_sec); else return clock () / clocks_per_sec; #endif /* HAVE_TIMES */ #endif /* HAVE_GETRUSAGE */ } nescc-1.3.4/libiberty/gettimeofday.c000066400000000000000000000010371177770303300174350ustar00rootroot00000000000000#include "config.h" #include "libiberty.h" #ifdef HAVE_TIME_H #include #endif #ifdef HAVE_SYS_TIME_H #include #endif /* @deftypefn Supplemental int gettimeofday (struct timeval *@var{tp}, void *@var{tz}) Writes the current time to @var{tp}. This implementation requires that @var{tz} be NULL. Returns 0 on success, -1 on failure. @end deftypefn */ int gettimeofday (struct timeval *tp, void *tz) { if (tz) abort (); tp->tv_usec = 0; if (time (&tp->tv_sec) == (time_t) -1) return -1; return 0; } nescc-1.3.4/libiberty/hashtab.c000066400000000000000000000665041177770303300164000ustar00rootroot00000000000000/* An expandable hash tables datatype. Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. Contributed by Vladimir Makarov (vmakarov@cygnus.com). This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* This package implements basic hash table functionality. It is possible to search for an entry, create an entry and destroy an entry. Elements in the table are generic pointers. The size of the table is not fixed; if the occupancy of the table grows too high the hash table will be expanded. The abstract data implementation is based on generalized Algorithm D from Knuth's book "The art of computer programming". Hash table is expanded by creation of new hash table and transferring elements from the old table to the new table. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_MALLOC_H #include #endif #ifdef HAVE_LIMITS_H #include #endif #ifdef HAVE_STDINT_H #include #endif #include #include "libiberty.h" #include "ansidecl.h" #include "hashtab.h" #ifndef CHAR_BIT #define CHAR_BIT 8 #endif static unsigned int higher_prime_index (unsigned long); static hashval_t htab_mod_1 (hashval_t, hashval_t, hashval_t, int); static hashval_t htab_mod (hashval_t, htab_t); static hashval_t htab_mod_m2 (hashval_t, htab_t); static hashval_t hash_pointer (const void *); static int eq_pointer (const void *, const void *); static int htab_expand (htab_t); static PTR *find_empty_slot_for_expand (htab_t, hashval_t); /* At some point, we could make these be NULL, and modify the hash-table routines to handle NULL specially; that would avoid function-call overhead for the common case of hashing pointers. */ htab_hash htab_hash_pointer = hash_pointer; htab_eq htab_eq_pointer = eq_pointer; /* Table of primes and multiplicative inverses. Note that these are not minimally reduced inverses. Unlike when generating code to divide by a constant, we want to be able to use the same algorithm all the time. All of these inverses (are implied to) have bit 32 set. For the record, here's the function that computed the table; it's a vastly simplified version of the function of the same name from gcc. */ #if 0 unsigned int ceil_log2 (unsigned int x) { int i; for (i = 31; i >= 0 ; --i) if (x > (1u << i)) return i+1; abort (); } unsigned int choose_multiplier (unsigned int d, unsigned int *mlp, unsigned char *shiftp) { unsigned long long mhigh; double nx; int lgup, post_shift; int pow, pow2; int n = 32, precision = 32; lgup = ceil_log2 (d); pow = n + lgup; pow2 = n + lgup - precision; nx = ldexp (1.0, pow) + ldexp (1.0, pow2); mhigh = nx / d; *shiftp = lgup - 1; *mlp = mhigh; return mhigh >> 32; } #endif struct prime_ent { hashval_t prime; hashval_t inv; hashval_t inv_m2; /* inverse of prime-2 */ hashval_t shift; }; static struct prime_ent const prime_tab[] = { { 7, 0x24924925, 0x9999999b, 2 }, { 13, 0x3b13b13c, 0x745d1747, 3 }, { 31, 0x08421085, 0x1a7b9612, 4 }, { 61, 0x0c9714fc, 0x15b1e5f8, 5 }, { 127, 0x02040811, 0x0624dd30, 6 }, { 251, 0x05197f7e, 0x073260a5, 7 }, { 509, 0x01824366, 0x02864fc8, 8 }, { 1021, 0x00c0906d, 0x014191f7, 9 }, { 2039, 0x0121456f, 0x0161e69e, 10 }, { 4093, 0x00300902, 0x00501908, 11 }, { 8191, 0x00080041, 0x00180241, 12 }, { 16381, 0x000c0091, 0x00140191, 13 }, { 32749, 0x002605a5, 0x002a06e6, 14 }, { 65521, 0x000f00e2, 0x00110122, 15 }, { 131071, 0x00008001, 0x00018003, 16 }, { 262139, 0x00014002, 0x0001c004, 17 }, { 524287, 0x00002001, 0x00006001, 18 }, { 1048573, 0x00003001, 0x00005001, 19 }, { 2097143, 0x00004801, 0x00005801, 20 }, { 4194301, 0x00000c01, 0x00001401, 21 }, { 8388593, 0x00001e01, 0x00002201, 22 }, { 16777213, 0x00000301, 0x00000501, 23 }, { 33554393, 0x00001381, 0x00001481, 24 }, { 67108859, 0x00000141, 0x000001c1, 25 }, { 134217689, 0x000004e1, 0x00000521, 26 }, { 268435399, 0x00000391, 0x000003b1, 27 }, { 536870909, 0x00000019, 0x00000029, 28 }, { 1073741789, 0x0000008d, 0x00000095, 29 }, { 2147483647, 0x00000003, 0x00000007, 30 }, /* Avoid "decimal constant so large it is unsigned" for 4294967291. */ { 0xfffffffb, 0x00000006, 0x00000008, 31 } }; /* The following function returns an index into the above table of the nearest prime number which is greater than N, and near a power of two. */ static unsigned int higher_prime_index (unsigned long n) { unsigned int low = 0; unsigned int high = sizeof(prime_tab) / sizeof(prime_tab[0]); while (low != high) { unsigned int mid = low + (high - low) / 2; if (n > prime_tab[mid].prime) low = mid + 1; else high = mid; } /* If we've run out of primes, abort. */ if (n > prime_tab[low].prime) { fprintf (stderr, "Cannot find prime bigger than %lu\n", n); abort (); } return low; } /* Returns a hash code for P. */ static hashval_t hash_pointer (const PTR p) { return (hashval_t) ((long)p >> 3); } /* Returns non-zero if P1 and P2 are equal. */ static int eq_pointer (const PTR p1, const PTR p2) { return p1 == p2; } /* The parens around the function names in the next two definitions are essential in order to prevent macro expansions of the name. The bodies, however, are expanded as expected, so they are not recursive definitions. */ /* Return the current size of given hash table. */ #define htab_size(htab) ((htab)->size) size_t (htab_size) (htab_t htab) { return htab_size (htab); } /* Return the current number of elements in given hash table. */ #define htab_elements(htab) ((htab)->n_elements - (htab)->n_deleted) size_t (htab_elements) (htab_t htab) { return htab_elements (htab); } /* Return X % Y. */ static inline hashval_t htab_mod_1 (hashval_t x, hashval_t y, hashval_t inv, int shift) { /* The multiplicative inverses computed above are for 32-bit types, and requires that we be able to compute a highpart multiply. */ #ifdef UNSIGNED_64BIT_TYPE __extension__ typedef UNSIGNED_64BIT_TYPE ull; if (sizeof (hashval_t) * CHAR_BIT <= 32) { hashval_t t1, t2, t3, t4, q, r; t1 = ((ull)x * inv) >> 32; t2 = x - t1; t3 = t2 >> 1; t4 = t1 + t3; q = t4 >> shift; r = x - (q * y); return r; } #endif /* Otherwise just use the native division routines. */ return x % y; } /* Compute the primary hash for HASH given HTAB's current size. */ static inline hashval_t htab_mod (hashval_t hash, htab_t htab) { const struct prime_ent *p = &prime_tab[htab->size_prime_index]; return htab_mod_1 (hash, p->prime, p->inv, p->shift); } /* Compute the secondary hash for HASH given HTAB's current size. */ static inline hashval_t htab_mod_m2 (hashval_t hash, htab_t htab) { const struct prime_ent *p = &prime_tab[htab->size_prime_index]; return 1 + htab_mod_1 (hash, p->prime - 2, p->inv_m2, p->shift); } /* This function creates table with length slightly longer than given source length. Created hash table is initiated as empty (all the hash table entries are HTAB_EMPTY_ENTRY). The function returns the created hash table, or NULL if memory allocation fails. */ htab_t htab_create_alloc (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f, htab_alloc alloc_f, htab_free free_f) { htab_t result; unsigned int size_prime_index; size_prime_index = higher_prime_index (size); size = prime_tab[size_prime_index].prime; result = (htab_t) (*alloc_f) (1, sizeof (struct htab)); if (result == NULL) return NULL; result->entries = (PTR *) (*alloc_f) (size, sizeof (PTR)); if (result->entries == NULL) { if (free_f != NULL) (*free_f) (result); return NULL; } result->size = size; result->size_prime_index = size_prime_index; result->hash_f = hash_f; result->eq_f = eq_f; result->del_f = del_f; result->alloc_f = alloc_f; result->free_f = free_f; return result; } /* As above, but use the variants of alloc_f and free_f which accept an extra argument. */ htab_t htab_create_alloc_ex (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f, void *alloc_arg, htab_alloc_with_arg alloc_f, htab_free_with_arg free_f) { htab_t result; unsigned int size_prime_index; size_prime_index = higher_prime_index (size); size = prime_tab[size_prime_index].prime; result = (htab_t) (*alloc_f) (alloc_arg, 1, sizeof (struct htab)); if (result == NULL) return NULL; result->entries = (PTR *) (*alloc_f) (alloc_arg, size, sizeof (PTR)); if (result->entries == NULL) { if (free_f != NULL) (*free_f) (alloc_arg, result); return NULL; } result->size = size; result->size_prime_index = size_prime_index; result->hash_f = hash_f; result->eq_f = eq_f; result->del_f = del_f; result->alloc_arg = alloc_arg; result->alloc_with_arg_f = alloc_f; result->free_with_arg_f = free_f; return result; } /* Update the function pointers and allocation parameter in the htab_t. */ void htab_set_functions_ex (htab_t htab, htab_hash hash_f, htab_eq eq_f, htab_del del_f, PTR alloc_arg, htab_alloc_with_arg alloc_f, htab_free_with_arg free_f) { htab->hash_f = hash_f; htab->eq_f = eq_f; htab->del_f = del_f; htab->alloc_arg = alloc_arg; htab->alloc_with_arg_f = alloc_f; htab->free_with_arg_f = free_f; } /* These functions exist solely for backward compatibility. */ #undef htab_create htab_t htab_create (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f) { return htab_create_alloc (size, hash_f, eq_f, del_f, xcalloc, free); } htab_t htab_try_create (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f) { return htab_create_alloc (size, hash_f, eq_f, del_f, calloc, free); } /* This function frees all memory allocated for given hash table. Naturally the hash table must already exist. */ void htab_delete (htab_t htab) { size_t size = htab_size (htab); PTR *entries = htab->entries; int i; if (htab->del_f) for (i = size - 1; i >= 0; i--) if (entries[i] != HTAB_EMPTY_ENTRY && entries[i] != HTAB_DELETED_ENTRY) (*htab->del_f) (entries[i]); if (htab->free_f != NULL) { (*htab->free_f) (entries); (*htab->free_f) (htab); } else if (htab->free_with_arg_f != NULL) { (*htab->free_with_arg_f) (htab->alloc_arg, entries); (*htab->free_with_arg_f) (htab->alloc_arg, htab); } } /* This function clears all entries in the given hash table. */ void htab_empty (htab_t htab) { size_t size = htab_size (htab); PTR *entries = htab->entries; int i; if (htab->del_f) for (i = size - 1; i >= 0; i--) if (entries[i] != HTAB_EMPTY_ENTRY && entries[i] != HTAB_DELETED_ENTRY) (*htab->del_f) (entries[i]); /* Instead of clearing megabyte, downsize the table. */ if (size > 1024*1024 / sizeof (PTR)) { int nindex = higher_prime_index (1024 / sizeof (PTR)); int nsize = prime_tab[nindex].prime; if (htab->free_f != NULL) (*htab->free_f) (htab->entries); else if (htab->free_with_arg_f != NULL) (*htab->free_with_arg_f) (htab->alloc_arg, htab->entries); if (htab->alloc_with_arg_f != NULL) htab->entries = (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize, sizeof (PTR *)); else htab->entries = (PTR *) (*htab->alloc_f) (nsize, sizeof (PTR *)); htab->size = nsize; htab->size_prime_index = nindex; } else memset (entries, 0, size * sizeof (PTR)); htab->n_deleted = 0; htab->n_elements = 0; } /* Similar to htab_find_slot, but without several unwanted side effects: - Does not call htab->eq_f when it finds an existing entry. - Does not change the count of elements/searches/collisions in the hash table. This function also assumes there are no deleted entries in the table. HASH is the hash value for the element to be inserted. */ static PTR * find_empty_slot_for_expand (htab_t htab, hashval_t hash) { hashval_t index = htab_mod (hash, htab); size_t size = htab_size (htab); PTR *slot = htab->entries + index; hashval_t hash2; if (*slot == HTAB_EMPTY_ENTRY) return slot; else if (*slot == HTAB_DELETED_ENTRY) abort (); hash2 = htab_mod_m2 (hash, htab); for (;;) { index += hash2; if (index >= size) index -= size; slot = htab->entries + index; if (*slot == HTAB_EMPTY_ENTRY) return slot; else if (*slot == HTAB_DELETED_ENTRY) abort (); } } /* The following function changes size of memory allocated for the entries and repeatedly inserts the table elements. The occupancy of the table after the call will be about 50%. Naturally the hash table must already exist. Remember also that the place of the table entries is changed. If memory allocation failures are allowed, this function will return zero, indicating that the table could not be expanded. If all goes well, it will return a non-zero value. */ static int htab_expand (htab_t htab) { PTR *oentries; PTR *olimit; PTR *p; PTR *nentries; size_t nsize, osize, elts; unsigned int oindex, nindex; oentries = htab->entries; oindex = htab->size_prime_index; osize = htab->size; olimit = oentries + osize; elts = htab_elements (htab); /* Resize only when table after removal of unused elements is either too full or too empty. */ if (elts * 2 > osize || (elts * 8 < osize && osize > 32)) { nindex = higher_prime_index (elts * 2); nsize = prime_tab[nindex].prime; } else { nindex = oindex; nsize = osize; } if (htab->alloc_with_arg_f != NULL) nentries = (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize, sizeof (PTR *)); else nentries = (PTR *) (*htab->alloc_f) (nsize, sizeof (PTR *)); if (nentries == NULL) return 0; htab->entries = nentries; htab->size = nsize; htab->size_prime_index = nindex; htab->n_elements -= htab->n_deleted; htab->n_deleted = 0; p = oentries; do { PTR x = *p; if (x != HTAB_EMPTY_ENTRY && x != HTAB_DELETED_ENTRY) { PTR *q = find_empty_slot_for_expand (htab, (*htab->hash_f) (x)); *q = x; } p++; } while (p < olimit); if (htab->free_f != NULL) (*htab->free_f) (oentries); else if (htab->free_with_arg_f != NULL) (*htab->free_with_arg_f) (htab->alloc_arg, oentries); return 1; } /* This function searches for a hash table entry equal to the given element. It cannot be used to insert or delete an element. */ PTR htab_find_with_hash (htab_t htab, const PTR element, hashval_t hash) { hashval_t index, hash2; size_t size; PTR entry; htab->searches++; size = htab_size (htab); index = htab_mod (hash, htab); entry = htab->entries[index]; if (entry == HTAB_EMPTY_ENTRY || (entry != HTAB_DELETED_ENTRY && (*htab->eq_f) (entry, element))) return entry; hash2 = htab_mod_m2 (hash, htab); for (;;) { htab->collisions++; index += hash2; if (index >= size) index -= size; entry = htab->entries[index]; if (entry == HTAB_EMPTY_ENTRY || (entry != HTAB_DELETED_ENTRY && (*htab->eq_f) (entry, element))) return entry; } } /* Like htab_find_slot_with_hash, but compute the hash value from the element. */ PTR htab_find (htab_t htab, const PTR element) { return htab_find_with_hash (htab, element, (*htab->hash_f) (element)); } /* This function searches for a hash table slot containing an entry equal to the given element. To delete an entry, call this with insert=NO_INSERT, then call htab_clear_slot on the slot returned (possibly after doing some checks). To insert an entry, call this with insert=INSERT, then write the value you want into the returned slot. When inserting an entry, NULL may be returned if memory allocation fails. */ PTR * htab_find_slot_with_hash (htab_t htab, const PTR element, hashval_t hash, enum insert_option insert) { PTR *first_deleted_slot; hashval_t index, hash2; size_t size; PTR entry; size = htab_size (htab); if (insert == INSERT && size * 3 <= htab->n_elements * 4) { if (htab_expand (htab) == 0) return NULL; size = htab_size (htab); } index = htab_mod (hash, htab); htab->searches++; first_deleted_slot = NULL; entry = htab->entries[index]; if (entry == HTAB_EMPTY_ENTRY) goto empty_entry; else if (entry == HTAB_DELETED_ENTRY) first_deleted_slot = &htab->entries[index]; else if ((*htab->eq_f) (entry, element)) return &htab->entries[index]; hash2 = htab_mod_m2 (hash, htab); for (;;) { htab->collisions++; index += hash2; if (index >= size) index -= size; entry = htab->entries[index]; if (entry == HTAB_EMPTY_ENTRY) goto empty_entry; else if (entry == HTAB_DELETED_ENTRY) { if (!first_deleted_slot) first_deleted_slot = &htab->entries[index]; } else if ((*htab->eq_f) (entry, element)) return &htab->entries[index]; } empty_entry: if (insert == NO_INSERT) return NULL; if (first_deleted_slot) { htab->n_deleted--; *first_deleted_slot = HTAB_EMPTY_ENTRY; return first_deleted_slot; } htab->n_elements++; return &htab->entries[index]; } /* Like htab_find_slot_with_hash, but compute the hash value from the element. */ PTR * htab_find_slot (htab_t htab, const PTR element, enum insert_option insert) { return htab_find_slot_with_hash (htab, element, (*htab->hash_f) (element), insert); } /* This function deletes an element with the given value from hash table (the hash is computed from the element). If there is no matching element in the hash table, this function does nothing. */ void htab_remove_elt (htab_t htab, PTR element) { htab_remove_elt_with_hash (htab, element, (*htab->hash_f) (element)); } /* This function deletes an element with the given value from hash table. If there is no matching element in the hash table, this function does nothing. */ void htab_remove_elt_with_hash (htab_t htab, PTR element, hashval_t hash) { PTR *slot; slot = htab_find_slot_with_hash (htab, element, hash, NO_INSERT); if (*slot == HTAB_EMPTY_ENTRY) return; if (htab->del_f) (*htab->del_f) (*slot); *slot = HTAB_DELETED_ENTRY; htab->n_deleted++; } /* This function clears a specified slot in a hash table. It is useful when you've already done the lookup and don't want to do it again. */ void htab_clear_slot (htab_t htab, PTR *slot) { if (slot < htab->entries || slot >= htab->entries + htab_size (htab) || *slot == HTAB_EMPTY_ENTRY || *slot == HTAB_DELETED_ENTRY) abort (); if (htab->del_f) (*htab->del_f) (*slot); *slot = HTAB_DELETED_ENTRY; htab->n_deleted++; } /* This function scans over the entire hash table calling CALLBACK for each live entry. If CALLBACK returns false, the iteration stops. INFO is passed as CALLBACK's second argument. */ void htab_traverse_noresize (htab_t htab, htab_trav callback, PTR info) { PTR *slot; PTR *limit; slot = htab->entries; limit = slot + htab_size (htab); do { PTR x = *slot; if (x != HTAB_EMPTY_ENTRY && x != HTAB_DELETED_ENTRY) if (!(*callback) (slot, info)) break; } while (++slot < limit); } /* Like htab_traverse_noresize, but does resize the table when it is too empty to improve effectivity of subsequent calls. */ void htab_traverse (htab_t htab, htab_trav callback, PTR info) { if (htab_elements (htab) * 8 < htab_size (htab)) htab_expand (htab); htab_traverse_noresize (htab, callback, info); } /* Return the fraction of fixed collisions during all work with given hash table. */ double htab_collisions (htab_t htab) { if (htab->searches == 0) return 0.0; return (double) htab->collisions / (double) htab->searches; } /* Hash P as a null-terminated string. Copied from gcc/hashtable.c. Zack had the following to say with respect to applicability, though note that unlike hashtable.c, this hash table implementation re-hashes rather than chain buckets. http://gcc.gnu.org/ml/gcc-patches/2001-08/msg01021.html From: Zack Weinberg Date: Fri, 17 Aug 2001 02:15:56 -0400 I got it by extracting all the identifiers from all the source code I had lying around in mid-1999, and testing many recurrences of the form "H_n = H_{n-1} * K + c_n * L + M" where K, L, M were either prime numbers or the appropriate identity. This was the best one. I don't remember exactly what constituted "best", except I was looking at bucket-length distributions mostly. So it should be very good at hashing identifiers, but might not be as good at arbitrary strings. I'll add that it thoroughly trounces the hash functions recommended for this use at http://burtleburtle.net/bob/hash/index.html, both on speed and bucket distribution. I haven't tried it against the function they just started using for Perl's hashes. */ hashval_t htab_hash_string (const PTR p) { const unsigned char *str = (const unsigned char *) p; hashval_t r = 0; unsigned char c; while ((c = *str++) != 0) r = r * 67 + c - 113; return r; } /* DERIVED FROM: -------------------------------------------------------------------- lookup2.c, by Bob Jenkins, December 1996, Public Domain. hash(), hash2(), hash3, and mix() are externally useful functions. Routines to test the hash are included if SELF_TEST is defined. You can use this free for any purpose. It has no warranty. -------------------------------------------------------------------- */ /* -------------------------------------------------------------------- mix -- mix 3 32-bit values reversibly. For every delta with one or two bit set, and the deltas of all three high bits or all three low bits, whether the original value of a,b,c is almost all zero or is uniformly distributed, * If mix() is run forward or backward, at least 32 bits in a,b,c have at least 1/4 probability of changing. * If mix() is run forward, every bit of c will change between 1/3 and 2/3 of the time. (Well, 22/100 and 78/100 for some 2-bit deltas.) mix() was built out of 36 single-cycle latency instructions in a structure that could supported 2x parallelism, like so: a -= b; a -= c; x = (c>>13); b -= c; a ^= x; b -= a; x = (a<<8); c -= a; b ^= x; c -= b; x = (b>>13); ... Unfortunately, superscalar Pentiums and Sparcs can't take advantage of that parallelism. They've also turned some of those single-cycle latency instructions into multi-cycle latency instructions. Still, this is the fastest good hash I could find. There were about 2^^68 to choose from. I only looked at a billion or so. -------------------------------------------------------------------- */ /* same, but slower, works on systems that might have 8 byte hashval_t's */ #define mix(a,b,c) \ { \ a -= b; a -= c; a ^= (c>>13); \ b -= c; b -= a; b ^= (a<< 8); \ c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \ a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \ b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \ c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \ a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \ b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \ c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \ } /* -------------------------------------------------------------------- hash() -- hash a variable-length key into a 32-bit value k : the key (the unaligned variable-length array of bytes) len : the length of the key, counting by bytes level : can be any 4-byte value Returns a 32-bit value. Every bit of the key affects every bit of the return value. Every 1-bit and 2-bit delta achieves avalanche. About 36+6len instructions. The best hash table sizes are powers of 2. There is no need to do mod a prime (mod is sooo slow!). If you need less than 32 bits, use a bitmask. For example, if you need only 10 bits, do h = (h & hashmask(10)); In which case, the hash table should have hashsize(10) elements. If you are hashing n strings (ub1 **)k, do it like this: for (i=0, h=0; i= 12) /* aligned */ { a += *(hashval_t *)(k+0); b += *(hashval_t *)(k+4); c += *(hashval_t *)(k+8); mix(a,b,c); k += 12; len -= 12; } else /* unaligned */ #endif while (len >= 12) { a += (k[0] +((hashval_t)k[1]<<8) +((hashval_t)k[2]<<16) +((hashval_t)k[3]<<24)); b += (k[4] +((hashval_t)k[5]<<8) +((hashval_t)k[6]<<16) +((hashval_t)k[7]<<24)); c += (k[8] +((hashval_t)k[9]<<8) +((hashval_t)k[10]<<16)+((hashval_t)k[11]<<24)); mix(a,b,c); k += 12; len -= 12; } /*------------------------------------- handle the last 11 bytes */ c += length; switch(len) /* all the case statements fall through */ { case 11: c+=((hashval_t)k[10]<<24); case 10: c+=((hashval_t)k[9]<<16); case 9 : c+=((hashval_t)k[8]<<8); /* the first byte of c is reserved for the length */ case 8 : b+=((hashval_t)k[7]<<24); case 7 : b+=((hashval_t)k[6]<<16); case 6 : b+=((hashval_t)k[5]<<8); case 5 : b+=k[4]; case 4 : a+=((hashval_t)k[3]<<24); case 3 : a+=((hashval_t)k[2]<<16); case 2 : a+=((hashval_t)k[1]<<8); case 1 : a+=k[0]; /* case 0: nothing left to add */ } mix(a,b,c); /*-------------------------------------------- report the result */ return c; } nescc-1.3.4/libiberty/hex.c000066400000000000000000000154311177770303300155430ustar00rootroot00000000000000/* Hex character manipulation support. Copyright (C) 1995, 2001 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include /* for EOF */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "libiberty.h" #include "safe-ctype.h" /* for HOST_CHARSET_ASCII */ #if EOF != -1 #error "hex.c requires EOF == -1" #endif /* @deftypefn Extension void hex_init (void) Initializes the array mapping the current character set to corresponding hex values. This function must be called before any call to @code{hex_p} or @code{hex_value}. If you fail to call it, a default ASCII-based table will normally be used on ASCII systems. @end deftypefn @deftypefn Extension int hex_p (int @var{c}) Evaluates to non-zero if the given character is a valid hex character, or zero if it is not. Note that the value you pass will be cast to @code{unsigned char} within the macro. @end deftypefn @deftypefn Extension {unsigned int} hex_value (int @var{c}) Returns the numeric equivalent of the given character when interpreted as a hexadecimal digit. The result is undefined if you pass an invalid hex digit. Note that the value you pass will be cast to @code{unsigned char} within the macro. The @code{hex_value} macro returns @code{unsigned int}, rather than signed @code{int}, to make it easier to use in parsing addresses from hex dump files: a signed @code{int} would be sign-extended when converted to a wider unsigned type --- like @code{bfd_vma}, on some systems. @end deftypefn @undocumented _hex_array_size @undocumented _hex_bad @undocumented _hex_value */ /* Are we ASCII? */ #if HOST_CHARSET == HOST_CHARSET_ASCII const unsigned char _hex_value[_hex_array_size] = { _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* NUL SOH STX ETX */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* EOT ENQ ACK BEL */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* BS HT LF VT */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* FF CR SO SI */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* DLE DC1 DC2 DC3 */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* DC4 NAK SYN ETB */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* CAN EM SUB ESC */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* FS GS RS US */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* SP ! " # */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* $ % & ' */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* ( ) * + */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* , - . / */ 0, 1, 2, 3, /* 0 1 2 3 */ 4, 5, 6, 7, /* 4 5 6 7 */ 8, 9, _hex_bad, _hex_bad, /* 8 9 : ; */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* < = > ? */ _hex_bad, 10, 11, 12, /* @ A B C */ 13, 14, 15, _hex_bad, /* D E F G */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* H I J K */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* L M N O */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* P Q R S */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* T U V W */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* X Y Z [ */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* \ ] ^ _ */ _hex_bad, 10, 11, 12, /* ` a b c */ 13, 14, 15, _hex_bad, /* d e f g */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* h i j k */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* l m n o */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* p q r s */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* t u v w */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* x y z { */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* | } ~ DEL */ /* The high half of unsigned char, all values are _hex_bad. */ _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, _hex_bad, }; #define HEX_TABLE_INITIALIZED #else unsigned char _hex_value[_hex_array_size]; #endif /* not ASCII */ void hex_init (void) { #ifndef HEX_TABLE_INITIALIZED int i; for (i=0; i<_hex_array_size; i++) { switch (i) { case '0': _hex_value[i] = 0; break; case '1': _hex_value[i] = 1; break; case '2': _hex_value[i] = 2; break; case '3': _hex_value[i] = 3; break; case '4': _hex_value[i] = 4; break; case '5': _hex_value[i] = 5; break; case '6': _hex_value[i] = 6; break; case '7': _hex_value[i] = 7; break; case '8': _hex_value[i] = 8; break; case '9': _hex_value[i] = 9; break; case 'a': case 'A': _hex_value[i] = 10; break; case 'b': case 'B': _hex_value[i] = 11; break; case 'c': case 'C': _hex_value[i] = 12; break; case 'd': case 'D': _hex_value[i] = 13; break; case 'e': case 'E': _hex_value[i] = 14; break; case 'f': case 'F': _hex_value[i] = 15; break; default: _hex_value[i] = _hex_bad; break; } } #endif } nescc-1.3.4/libiberty/index.c000066400000000000000000000007001177770303300160570ustar00rootroot00000000000000/* Stub implementation of (obsolete) index(). */ /* @deftypefn Supplemental char* index (char *@var{s}, int @var{c}) Returns a pointer to the first occurrence of the character @var{c} in the string @var{s}, or @code{NULL} if not found. The use of @code{index} is deprecated in new programs in favor of @code{strchr}. @end deftypefn */ extern char * strchr(const char *, int); char * index (const char *s, int c) { return strchr (s, c); } nescc-1.3.4/libiberty/insque.c000066400000000000000000000021641177770303300162620ustar00rootroot00000000000000/* insque(3C) routines This file is in the public domain. */ /* @deftypefn Supplemental void insque (struct qelem *@var{elem}, struct qelem *@var{pred}) @deftypefnx Supplemental void remque (struct qelem *@var{elem}) Routines to manipulate queues built from doubly linked lists. The @code{insque} routine inserts @var{elem} in the queue immediately after @var{pred}. The @code{remque} routine removes @var{elem} from its containing queue. These routines expect to be passed pointers to structures which have as their first members a forward pointer and a back pointer, like this prototype (although no prototype is provided): @example struct qelem @{ struct qelem *q_forw; struct qelem *q_back; char q_data[]; @}; @end example @end deftypefn */ struct qelem { struct qelem *q_forw; struct qelem *q_back; }; void insque (struct qelem *elem, struct qelem *pred) { elem -> q_forw = pred -> q_forw; pred -> q_forw -> q_back = elem; elem -> q_back = pred; pred -> q_forw = elem; } void remque (struct qelem *elem) { elem -> q_forw -> q_back = elem -> q_back; elem -> q_back -> q_forw = elem -> q_forw; } nescc-1.3.4/libiberty/lbasename.c000066400000000000000000000037301177770303300167050ustar00rootroot00000000000000/* Libiberty basename. Like basename, but is not overridden by the system C library. Copyright (C) 2001, 2002 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* @deftypefn Replacement {const char*} lbasename (const char *@var{name}) Given a pointer to a string containing a typical pathname (@samp{/usr/src/cmd/ls/ls.c} for example), returns a pointer to the last component of the pathname (@samp{ls.c} in this case). The returned pointer is guaranteed to lie within the original string. This latter fact is not true of many vendor C libraries, which return special strings or modify the passed strings for particular input. In particular, the empty string returns the same empty string, and a path ending in @code{/} returns the empty string after it. @end deftypefn */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "ansidecl.h" #include "libiberty.h" #include "safe-ctype.h" #include "filenames.h" const char * lbasename (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over a possible disk name. */ if (ISALPHA (name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } nescc-1.3.4/libiberty/libiberty.texi000066400000000000000000000257051177770303300175000ustar00rootroot00000000000000\input texinfo @c -*-texinfo-*- @c %**start of header @setfilename libiberty.info @settitle @sc{gnu} libiberty @c %**end of header @syncodeindex fn cp @syncodeindex vr cp @syncodeindex pg cp @finalout @c %**end of header @dircategory GNU libraries @direntry * Libiberty: (libiberty). Library of utility functions which are missing or broken on some systems. @end direntry @macro libib @code{libiberty} @end macro @c The edition date is written in three locations. Search for 'thedate'. @ifinfo This manual describes the GNU @libib library of utility subroutines. This edition accompanies GCC 3, September 2001. Copyright @copyright{} 2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @ignore Permission is granted to process this file through TeX and print the results, provided the printed document carries a copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). @end ignore @end ifinfo @c The edition date is written in three locations. Search for 'thedate'. @titlepage @title @sc{gnu} libiberty @subtitle September 2001 @subtitle for GCC 3 @author Phil Edwards et al. @page @vskip 0pt plus 1filll Copyright @copyright{} 2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end titlepage @contents @page @ifnottex @node Top,Using,, @top Introduction The @libib{} library is a collection of subroutines used by various GNU programs. It is available under the Library General Public License; for more information, see @ref{Library Copying}. @c The edition date is written in three locations. Search for 'thedate'. This edition accompanies GCC 3, September 2001. @end ifnottex @menu * Using:: How to use libiberty in your code. * Overview:: Overview of available function groups. * Functions:: Available functions, macros, and global variables. * Obstacks:: Object Stacks. * Licenses:: The various licenses under which libiberty sources are distributed. * Index:: Index of functions and categories. @end menu @node Using @chapter Using @cindex using libiberty @cindex libiberty usage @cindex how to use @c THIS SECTION IS CRAP AND NEEDS REWRITING BADLY. To date, @libib{} is generally not installed on its own. It has evolved over years but does not have its own version number nor release schedule. Possibly the easiest way to use @libib{} in your projects is to drop the @libib{} code into your project's sources, and to build the library along with your own sources; the library would then be linked in at the end. This prevents any possible version mismatches with other copies of libiberty elsewhere on the system. Passing @option{--enable-install-libiberty} to the @command{configure} script when building @libib{} causes the header files and archive library to be installed when @kbd{make install} is run. This option also takes an (optional) argument to specify the installation location, in the same manner as @option{--prefix}. For your own projects, an approach which offers stability and flexibility is to include @libib{} with your code, but allow the end user to optionally choose to use a previously-installed version instead. In this way the user may choose (for example) to install @libib{} as part of GCC, and use that version for all software built with that compiler. (This approach has proven useful with software using the GNU @code{readline} library.) Making use of @libib{} code usually requires that you include one or more header files from the @libib{} distribution. (They will be named as necessary in the function descriptions.) At link time, you will need to add @option{-liberty} to your link command invocation. @node Overview @chapter Overview Functions contained in @libib{} can be divided into three general categories. @menu * Supplemental Functions:: Providing functions which don't exist on older operating systems. * Replacement Functions:: These functions are sometimes buggy or unpredictable on some operating systems. * Extensions:: Functions which provide useful extensions or safety wrappers around existing code. @end menu @node Supplemental Functions @section Supplemental Functions @cindex supplemental functions @cindex functions, supplemental @cindex functions, missing Certain operating systems do not provide functions which have since become standardized, or at least common. For example, the Single Unix Specification Version 2 requires that the @code{basename} function be provided, but an OS which predates that specification might not have this function. This should not prevent well-written code from running on such a system. Similarly, some functions exist only among a particular ``flavor'' or ``family'' of operating systems. As an example, the @code{bzero} function is often not present on systems outside the BSD-derived family of systems. Many such functions are provided in @libib{}. They are quickly listed here with little description, as systems which lack them become less and less common. Each function @var{foo} is implemented in @file{@var{foo}.c} but not declared in any @libib{} header file; more comments and caveats for each function's implementation are often available in the source file. Generally, the function can simply be declared as @code{extern}. @node Replacement Functions @section Replacement Functions @cindex replacement functions @cindex functions, replacement Some functions have extremely limited implementations on different platforms. Other functions are tedious to use correctly; for example, proper use of @code{malloc} calls for the return value to be checked and appropriate action taken if memory has been exhausted. A group of ``replacement functions'' is available in @libib{} to address these issues for some of the most commonly used subroutines. All of these functions are declared in the @file{libiberty.h} header file. Many of the implementations will use preprocessor macros set by GNU Autoconf, if you decide to make use of that program. Some of these functions may call one another. @menu * Memory Allocation:: Testing and handling failed memory requests automatically. * Exit Handlers:: Calling routines on program exit. * Error Reporting:: Mapping errno and signal numbers to more useful string formats. @end menu @node Memory Allocation @subsection Memory Allocation @cindex memory allocation The functions beginning with the letter @samp{x} are wrappers around standard functions; the functions provided by the system environment are called and their results checked before the results are passed back to client code. If the standard functions fail, these wrappers will terminate the program. Thus, these versions can be used with impunity. @node Exit Handlers @subsection Exit Handlers @cindex exit handlers The existence and implementation of the @code{atexit} routine varies amongst the flavors of Unix. @libib{} provides an unvarying dependable implementation via @code{xatexit} and @code{xexit}. @node Error Reporting @subsection Error Reporting @cindex error reporting These are a set of routines to facilitate programming with the system @code{errno} interface. The @libib{} source file @file{strerror.c} contains a good deal of documentation for these functions. @c signal stuff @node Extensions @section Extensions @cindex extensions @cindex functions, extension @libib{} includes additional functionality above and beyond standard functions, which has proven generically useful in GNU programs, such as obstacks and regex. These functions are often copied from other projects as they gain popularity, and are included here to provide a central location from which to use, maintain, and distribute them. @menu * Obstacks:: Stacks of arbitrary objects. @end menu @c This is generated from the glibc manual using a make-obstacks-texi.sh @c script of Phil's. Hope it's accurate. @include obstacks.texi @node Functions @chapter Function, Variable, and Macro Listing. @include functions.texi @node Licenses @appendix Licenses @menu * Library Copying:: The GNU Library General Public License * BSD:: Regents of the University of California @end menu @c This takes care of Library Copying. It is the copying-lib.texi from the @c GNU web site, with its @node line altered to make makeinfo shut up. @include copying-lib.texi @page @node BSD @appendixsec BSD Copyright @copyright{} 1990 Regents of the University of California. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @enumerate @item Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. @item Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. @item [rescinded 22 July 1999] @item Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @end enumerate THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. @node Index @unnumbered Index @printindex cp @bye nescc-1.3.4/libiberty/lrealpath.c000066400000000000000000000113541177770303300167330ustar00rootroot00000000000000/* Libiberty realpath. Like realpath, but more consistent behavior. Based on gdb_realpath from GDB. Copyright 2003 Free Software Foundation, Inc. This file is part of the libiberty library. This program 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 of the License, or (at your option) any later version. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* @deftypefn Replacement {const char*} lrealpath (const char *@var{name}) Given a pointer to a string containing a pathname, returns a canonical version of the filename. Symlinks will be resolved, and ``.'' and ``..'' components will be simplified. The returned value will be allocated using @code{malloc}, or @code{NULL} will be returned on a memory allocation error. @end deftypefn */ #include "config.h" #include "ansidecl.h" #include "libiberty.h" #ifdef HAVE_LIMITS_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_STRING_H #include #endif /* On GNU libc systems the declaration is only visible with _GNU_SOURCE. */ #if defined(HAVE_CANONICALIZE_FILE_NAME) \ && defined(NEED_DECLARATION_CANONICALIZE_FILE_NAME) extern char *canonicalize_file_name (const char *); #endif #if defined(HAVE_REALPATH) # if defined (PATH_MAX) # define REALPATH_LIMIT PATH_MAX # else # if defined (MAXPATHLEN) # define REALPATH_LIMIT MAXPATHLEN # endif # endif #else /* cygwin has realpath, so it won't get here. */ # if defined (_WIN32) # define WIN32_LEAN_AND_MEAN # include /* for GetFullPathName */ # endif #endif char * lrealpath (const char *filename) { /* Method 1: The system has a compile time upper bound on a filename path. Use that and realpath() to canonicalize the name. This is the most common case. Note that, if there isn't a compile time upper bound, you want to avoid realpath() at all costs. */ #if defined(REALPATH_LIMIT) { char buf[REALPATH_LIMIT]; const char *rp = realpath (filename, buf); if (rp == NULL) rp = filename; return strdup (rp); } #endif /* REALPATH_LIMIT */ /* Method 2: The host system (i.e., GNU) has the function canonicalize_file_name() which malloc's a chunk of memory and returns that, use that. */ #if defined(HAVE_CANONICALIZE_FILE_NAME) { char *rp = canonicalize_file_name (filename); if (rp == NULL) return strdup (filename); else return rp; } #endif /* Method 3: Now we're getting desperate! The system doesn't have a compile time buffer size and no alternative function. Query the OS, using pathconf(), for the buffer limit. Care is needed though, some systems do not limit PATH_MAX (return -1 for pathconf()) making it impossible to pass a correctly sized buffer to realpath() (it could always overflow). On those systems, we skip this. */ #if defined (HAVE_REALPATH) && defined (HAVE_UNISTD_H) { /* Find out the max path size. */ long path_max = pathconf ("/", _PC_PATH_MAX); if (path_max > 0) { /* PATH_MAX is bounded. */ char *buf, *rp, *ret; buf = (char *) malloc (path_max); if (buf == NULL) return NULL; rp = realpath (filename, buf); ret = strdup (rp ? rp : filename); free (buf); return ret; } } #endif /* The MS Windows method. If we don't have realpath, we assume we don't have symlinks and just canonicalize to a Windows absolute path. GetFullPath converts ../ and ./ in relative paths to absolute paths, filling in current drive if one is not given or using the current directory of a specified drive (eg, "E:foo"). It also converts all forward slashes to back slashes. */ #if defined (_WIN32) { char buf[MAX_PATH]; char* basename; DWORD len = GetFullPathName (filename, MAX_PATH, buf, &basename); if (len == 0 || len > MAX_PATH - 1) return strdup (filename); else { /* The file system is case-preserving but case-insensitive, Canonicalize to lowercase, using the codepage associated with the process locale. */ CharLowerBuff (buf, len); return strdup (buf); } } #endif /* This system is a lost cause, just duplicate the filename. */ return strdup (filename); } nescc-1.3.4/libiberty/maint-tool000066400000000000000000000143361177770303300166240ustar00rootroot00000000000000#!/usr/bin/perl # -*- perl -*- # Copyright (C) 2001, 2007 # Free Software Foundation # # This file is part of the libiberty library. # Libiberty is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # Libiberty 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 # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with libiberty; see the file COPYING.LIB. If not, # write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, # Boston, MA 02110-1301, USA. # # Originally written by DJ Delorie # This is a trivial script which checks the lists of C and O files in # the Makefile for consistency. $mode = shift; $srcdir = "."; if ($mode eq "-s") { $srcdir = shift; $mode = shift; } &missing() if $mode eq "missing"; &undoc() if $mode eq "undoc"; &deps() if $mode eq "deps"; exit 0; format STDOUT = ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~ $out ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~ $out . ###################################################################### sub missing { opendir(S, $srcdir); while ($f = readdir S) { $have{$f} = 1; } closedir(S); opendir(S, "."); while ($f = readdir S) { $have{$f} = 1; } closedir(S); for $a (@ARGV) { $listed{$a} = 1; $have{$a} = 0; } for $f (sort keys %have) { next unless $have{$f}; if ($f =~ /\.c$/) { print "S $f\n"; } } for $f (sort keys %listed) { if ($f =~ /(.*)\.c$/) { $base = $1; if (! $listed{"$base.o"}) { print "O $f\n"; } } } } ###################################################################### sub undoc { opendir(S, $srcdir); while ($file = readdir S) { if ($file =~ /\.texi$/) { open(T, "$srcdir/$file"); while () { if (/^\@deftype[^\(]* ([^\s\(]+) *\(/) { $documented{$1} = 1; } } close(T); } if ($file =~ /\.c$/) { open(C, "$srcdir/$file"); while () { if (/\@undocumented (\S+)/) { $documented{$1} = 1; } if (/^static /) { if (! /[\(;]/) { s/[\r\n]+$/ /; $_ .= ; } while ($_ =~ /\([^\)]*$/) { s/[\r\n]+$/ /; $_ .= ; } } s/ VPARAMS([ \(])/$1/; s/PREFIX\(([^\)]*)\)/byte_$1/; if (/^static [^\(]* ([^\s\(]+) *\(.*\)$/) { $documented{$1} = 1; } } } } closedir(D); # $out = join(' ', sort keys %documented); # write; # print "\n"; system "etags $srcdir/*.c $srcdir/../include/*.h"; open(TAGS, "TAGS"); while () { s/[\r\n]+$//; if (/^\014$/) { $filename = ; $filename =~ s/[\r\n]+$//; $filename =~ s/,\d+$//; $filename =~ s@.*[/\\]@@; next; } if ($filename =~ /\.c$/ ) { next unless /^[_a-zA-Z]/; } else { next unless /^\# *define/; s/\# *define *//; } s/ VPARAMS//; s/ *\177.*//; s/,$//; s/DEFUN\(//; s/\(//; next if /^static /; next if /\s/; next if /^_/; next if $documented{$_}; next if /_H_?$/; if ($seen_in{$_} ne $filename) { $saw{$_} ++; } $seen_in{$_} = $filename; } for $k (keys %saw) { delete $saw{$k} if $saw{$k} > 1; } for $k (sort keys %saw) { $fromfile{$seen_in{$k}} .= " " if $fromfile{$seen_in{$k}}; $fromfile{$seen_in{$k}} .= $k; } for $f (sort keys %fromfile) { $out = "$f: $fromfile{$f}"; write; } } ###################################################################### sub deps_for { my($f) = @_; my(%d); open(F, $f); %d = (); while () { if (/^#\s*include\s+["<](.*)[">]/) { $d{$1} = 1; } } close(F); return keys %d; } sub canonicalize { my ($p) = @_; 0 while $p =~ s@/\./@/@g; 0 while $p =~ s@^\./@@g; 0 while $p =~ s@/[^/]+/\.\./@/@g; return $p; } sub locals_first { my ($a,$b) = @_; return -1 if $a eq "config.h"; return 1 if $b eq "config.h"; return $a cmp $b; } sub deps { $crule = "\tif [ x\"\$(PICFLAG)\" != x ]; then \\\n"; $crule .= "\t \$(COMPILE.c) \$(PICFLAG) \$< -o pic/\$@; \\\n"; $crule .= "\telse true; fi\n"; $crule .= "\t\$(COMPILE.c) \$< \$(OUTPUT_OPTION)\n"; $crule .= "\n"; $incdir = shift @ARGV; opendir(INC, $incdir); while ($f = readdir INC) { next unless $f =~ /\.h$/; $mine{$f} = "\$(INCDIR)/$f"; $deps{$f} = join(' ', &deps_for("$incdir/$f")); } opendir(INC, $srcdir); while ($f = readdir INC) { next unless $f =~ /\.h$/; $mine{$f} = "\$(srcdir)/$f"; $deps{$f} = join(' ', &deps_for("$srcdir/$f")); } $mine{'config.h'} = "stamp-h"; open(IN, "$srcdir/Makefile.in"); open(OUT, ">$srcdir/Makefile.tmp"); while () { last if /remainder of this file/; print OUT; } print OUT "# The dependencies in the remainder of this file are automatically\n"; print OUT "# generated by \"make maint-deps\". Manual edits will be lost.\n\n"; opendir(S, $srcdir); for $f (sort readdir S) { if ($f =~ /\.c$/) { %scanned = (); @pending = &deps_for("$srcdir/$f"); while (@pending) { @tmp = @pending; @pending = (); for $p (@tmp) { next unless $mine{$p}; if (!$scanned{$p}) { push(@pending, split(' ', $deps{$p})); $scanned{$p} = 1; } } } @deps = sort { &locals_first($a,$b) } keys %scanned; $obj = $f; $obj =~ s/\.c$/.o/; $obj = "./$obj:"; if ($#deps >= 0) { print OUT "$obj \$(srcdir)/$f"; $len = length("$obj $f"); for $dt (@deps) { $d = $mine{$dt}; if ($len + length($d) > 70) { printf OUT " \\\n\t$d"; $len = 8 + length($d); } else { print OUT " $d"; $len += length($d) + 1; } } print OUT "\n"; } else { print OUT "$obj \$(srcdir)/$f\n"; } $c = $crule; $c =~ s@\$\<@\$\(srcdir\)\/$f@g; print OUT $c; } } closedir(S); close(IN); close(OUT); rename("$srcdir/Makefile.tmp", "$srcdir/Makefile.in"); } nescc-1.3.4/libiberty/make-relative-prefix.c000066400000000000000000000244421177770303300210020ustar00rootroot00000000000000/* Relative (relocatable) prefix support. Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2006 Free Software Foundation, Inc. This file is part of libiberty. GCC 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. GCC 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 GCC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* @deftypefn Extension {const char*} make_relative_prefix (const char *@var{progname}, const char *@var{bin_prefix}, const char *@var{prefix}) Given three paths @var{progname}, @var{bin_prefix}, @var{prefix}, return the path that is in the same position relative to @var{progname}'s directory as @var{prefix} is relative to @var{bin_prefix}. That is, a string starting with the directory portion of @var{progname}, followed by a relative pathname of the difference between @var{bin_prefix} and @var{prefix}. If @var{progname} does not contain any directory separators, @code{make_relative_prefix} will search @env{PATH} to find a program named @var{progname}. Also, if @var{progname} is a symbolic link, the symbolic link will be resolved. For example, if @var{bin_prefix} is @code{/alpha/beta/gamma/gcc/delta}, @var{prefix} is @code{/alpha/beta/gamma/omega/}, and @var{progname} is @code{/red/green/blue/gcc}, then this function will return @code{/red/green/blue/../../omega/}. The return value is normally allocated via @code{malloc}. If no relative prefix can be found, return @code{NULL}. @end deftypefn */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include #include "ansidecl.h" #include "libiberty.h" #ifndef R_OK #define R_OK 4 #define W_OK 2 #define X_OK 1 #endif #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' #endif #if defined (_WIN32) || defined (__MSDOS__) \ || defined (__DJGPP__) || defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define HAVE_HOST_EXECUTABLE_SUFFIX # define HOST_EXECUTABLE_SUFFIX ".exe" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # define PATH_SEPARATOR ';' #else # define PATH_SEPARATOR ':' #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif #define DIR_UP ".." static char *save_string (const char *, int); static char **split_directories (const char *, int *); static void free_split_directories (char **); static char * save_string (const char *s, int len) { char *result = (char *) malloc (len + 1); memcpy (result, s, len); result[len] = 0; return result; } /* Split a filename into component directories. */ static char ** split_directories (const char *name, int *ptr_num_dirs) { int num_dirs = 0; char **dirs; const char *p, *q; int ch; /* Count the number of directories. Special case MSDOS disk names as part of the initial directory. */ p = name; #ifdef HAVE_DOS_BASED_FILE_SYSTEM if (name[1] == ':' && IS_DIR_SEPARATOR (name[2])) { p += 3; num_dirs++; } #endif /* HAVE_DOS_BASED_FILE_SYSTEM */ while ((ch = *p++) != '\0') { if (IS_DIR_SEPARATOR (ch)) { num_dirs++; while (IS_DIR_SEPARATOR (*p)) p++; } } dirs = (char **) malloc (sizeof (char *) * (num_dirs + 2)); if (dirs == NULL) return NULL; /* Now copy the directory parts. */ num_dirs = 0; p = name; #ifdef HAVE_DOS_BASED_FILE_SYSTEM if (name[1] == ':' && IS_DIR_SEPARATOR (name[2])) { dirs[num_dirs++] = save_string (p, 3); if (dirs[num_dirs - 1] == NULL) { free (dirs); return NULL; } p += 3; } #endif /* HAVE_DOS_BASED_FILE_SYSTEM */ q = p; while ((ch = *p++) != '\0') { if (IS_DIR_SEPARATOR (ch)) { while (IS_DIR_SEPARATOR (*p)) p++; dirs[num_dirs++] = save_string (q, p - q); if (dirs[num_dirs - 1] == NULL) { dirs[num_dirs] = NULL; free_split_directories (dirs); return NULL; } q = p; } } if (p - 1 - q > 0) dirs[num_dirs++] = save_string (q, p - 1 - q); dirs[num_dirs] = NULL; if (dirs[num_dirs - 1] == NULL) { free_split_directories (dirs); return NULL; } if (ptr_num_dirs) *ptr_num_dirs = num_dirs; return dirs; } /* Release storage held by split directories. */ static void free_split_directories (char **dirs) { int i = 0; if (dirs != NULL) { while (dirs[i] != NULL) free (dirs[i++]); free ((char *) dirs); } } /* Given three strings PROGNAME, BIN_PREFIX, PREFIX, return a string that gets to PREFIX starting with the directory portion of PROGNAME and a relative pathname of the difference between BIN_PREFIX and PREFIX. For example, if BIN_PREFIX is /alpha/beta/gamma/gcc/delta, PREFIX is /alpha/beta/gamma/omega/, and PROGNAME is /red/green/blue/gcc, then this function will return /red/green/blue/../../omega/. If no relative prefix can be found, return NULL. */ static char * make_relative_prefix_1 (const char *progname, const char *bin_prefix, const char *prefix, const int resolve_links) { char **prog_dirs = NULL, **bin_dirs = NULL, **prefix_dirs = NULL; int prog_num, bin_num, prefix_num; int i, n, common; int needed_len; char *ret = NULL, *ptr, *full_progname; if (progname == NULL || bin_prefix == NULL || prefix == NULL) return NULL; /* If there is no full pathname, try to find the program by checking in each of the directories specified in the PATH environment variable. */ if (lbasename (progname) == progname) { char *temp; temp = getenv ("PATH"); if (temp) { char *startp, *endp, *nstore; size_t prefixlen = strlen (temp) + 1; if (prefixlen < 2) prefixlen = 2; nstore = (char *) alloca (prefixlen + strlen (progname) + 1); startp = endp = temp; while (1) { if (*endp == PATH_SEPARATOR || *endp == 0) { if (endp == startp) { nstore[0] = '.'; nstore[1] = DIR_SEPARATOR; nstore[2] = '\0'; } else { strncpy (nstore, startp, endp - startp); if (! IS_DIR_SEPARATOR (endp[-1])) { nstore[endp - startp] = DIR_SEPARATOR; nstore[endp - startp + 1] = 0; } else nstore[endp - startp] = 0; } strcat (nstore, progname); if (! access (nstore, X_OK) #ifdef HAVE_HOST_EXECUTABLE_SUFFIX || ! access (strcat (nstore, HOST_EXECUTABLE_SUFFIX), X_OK) #endif ) { progname = nstore; break; } if (*endp == 0) break; endp = startp = endp + 1; } else endp++; } } } if ( resolve_links ) { full_progname = lrealpath (progname); if (full_progname == NULL) return NULL; } else full_progname = strdup(progname); prog_dirs = split_directories (full_progname, &prog_num); free (full_progname); if (prog_dirs == NULL) return NULL; bin_dirs = split_directories (bin_prefix, &bin_num); if (bin_dirs == NULL) goto bailout; /* Remove the program name from comparison of directory names. */ prog_num--; /* If we are still installed in the standard location, we don't need to specify relative directories. Also, if argv[0] still doesn't contain any directory specifiers after the search above, then there is not much we can do. */ if (prog_num == bin_num) { for (i = 0; i < bin_num; i++) { if (strcmp (prog_dirs[i], bin_dirs[i]) != 0) break; } if (prog_num <= 0 || i == bin_num) goto bailout; } prefix_dirs = split_directories (prefix, &prefix_num); if (prefix_dirs == NULL) goto bailout; /* Find how many directories are in common between bin_prefix & prefix. */ n = (prefix_num < bin_num) ? prefix_num : bin_num; for (common = 0; common < n; common++) { if (strcmp (bin_dirs[common], prefix_dirs[common]) != 0) break; } /* If there are no common directories, there can be no relative prefix. */ if (common == 0) goto bailout; /* Two passes: first figure out the size of the result string, and then construct it. */ needed_len = 0; for (i = 0; i < prog_num; i++) needed_len += strlen (prog_dirs[i]); needed_len += sizeof (DIR_UP) * (bin_num - common); for (i = common; i < prefix_num; i++) needed_len += strlen (prefix_dirs[i]); needed_len += 1; /* Trailing NUL. */ ret = (char *) malloc (needed_len); if (ret == NULL) goto bailout; /* Build up the pathnames in argv[0]. */ *ret = '\0'; for (i = 0; i < prog_num; i++) strcat (ret, prog_dirs[i]); /* Now build up the ..'s. */ ptr = ret + strlen(ret); for (i = common; i < bin_num; i++) { strcpy (ptr, DIR_UP); ptr += sizeof (DIR_UP) - 1; *(ptr++) = DIR_SEPARATOR; } *ptr = '\0'; /* Put in directories to move over to prefix. */ for (i = common; i < prefix_num; i++) strcat (ret, prefix_dirs[i]); bailout: free_split_directories (prog_dirs); free_split_directories (bin_dirs); free_split_directories (prefix_dirs); return ret; } /* Do the full job, including symlink resolution. This path will find files installed in the same place as the program even when a soft link has been made to the program from somwhere else. */ char * make_relative_prefix (const char *progname, const char *bin_prefix, const char *prefix) { return make_relative_prefix_1 (progname, bin_prefix, prefix, 1); } /* Make the relative pathname without attempting to resolve any links. '..' etc may also be left in the pathname. This will find the files the user meant the program to find if the installation is patched together with soft links. */ char * make_relative_prefix_ignore_links (const char *progname, const char *bin_prefix, const char *prefix) { return make_relative_prefix_1 (progname, bin_prefix, prefix, 0); } nescc-1.3.4/libiberty/make-temp-file.c000066400000000000000000000105521177770303300175530ustar00rootroot00000000000000/* Utility to pick a temporary filename prefix. Copyright (C) 1996, 1997, 1998, 2001 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include /* May get P_tmpdir. */ #include #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_SYS_FILE_H #include /* May get R_OK, etc. on some systems. */ #endif #ifndef R_OK #define R_OK 4 #define W_OK 2 #define X_OK 1 #endif #include "libiberty.h" extern int mkstemps (char *, int); /* '/' works just fine on MS-DOS based systems. */ #ifndef DIR_SEPARATOR #define DIR_SEPARATOR '/' #endif /* Name of temporary file. mktemp requires 6 trailing X's. */ #define TEMP_FILE "ccXXXXXX" #define TEMP_FILE_LEN (sizeof(TEMP_FILE) - 1) /* Subroutine of choose_tmpdir. If BASE is non-NULL, return it. Otherwise it checks if DIR is a usable directory. If success, DIR is returned. Otherwise NULL is returned. */ static inline const char *try_dir (const char *, const char *); static inline const char * try_dir (const char *dir, const char *base) { if (base != 0) return base; if (dir != 0 && access (dir, R_OK | W_OK | X_OK) == 0) return dir; return 0; } static const char tmp[] = { DIR_SEPARATOR, 't', 'm', 'p', 0 }; static const char usrtmp[] = { DIR_SEPARATOR, 'u', 's', 'r', DIR_SEPARATOR, 't', 'm', 'p', 0 }; static const char vartmp[] = { DIR_SEPARATOR, 'v', 'a', 'r', DIR_SEPARATOR, 't', 'm', 'p', 0 }; static char *memoized_tmpdir; /* @deftypefn Replacement char* choose_tmpdir () Returns a pointer to a directory path suitable for creating temporary files in. @end deftypefn */ char * choose_tmpdir (void) { const char *base = 0; char *tmpdir; unsigned int len; if (memoized_tmpdir) return memoized_tmpdir; base = try_dir (getenv ("TMPDIR"), base); base = try_dir (getenv ("TMP"), base); base = try_dir (getenv ("TEMP"), base); #ifdef P_tmpdir base = try_dir (P_tmpdir, base); #endif /* Try /var/tmp, /usr/tmp, then /tmp. */ base = try_dir (vartmp, base); base = try_dir (usrtmp, base); base = try_dir (tmp, base); /* If all else fails, use the current directory! */ if (base == 0) base = "."; /* Append DIR_SEPARATOR to the directory we've chosen and return it. */ len = strlen (base); tmpdir = XNEWVEC (char, len + 2); strcpy (tmpdir, base); tmpdir[len] = DIR_SEPARATOR; tmpdir[len+1] = '\0'; memoized_tmpdir = tmpdir; return tmpdir; } /* @deftypefn Replacement char* make_temp_file (const char *@var{suffix}) Return a temporary file name (as a string) or @code{NULL} if unable to create one. @var{suffix} is a suffix to append to the file name. The string is @code{malloc}ed, and the temporary file has been created. @end deftypefn */ char * make_temp_file (const char *suffix) { const char *base = choose_tmpdir (); char *temp_filename; int base_len, suffix_len; int fd; if (suffix == 0) suffix = ""; base_len = strlen (base); suffix_len = strlen (suffix); temp_filename = XNEWVEC (char, base_len + TEMP_FILE_LEN + suffix_len + 1); strcpy (temp_filename, base); strcpy (temp_filename + base_len, TEMP_FILE); strcpy (temp_filename + base_len + TEMP_FILE_LEN, suffix); fd = mkstemps (temp_filename, suffix_len); /* If mkstemps failed, then something bad is happening. Maybe we should issue a message about a possible security attack in progress? */ if (fd == -1) abort (); /* Similarly if we can not close the file. */ if (close (fd)) abort (); return temp_filename; } nescc-1.3.4/libiberty/makefile.vms000066400000000000000000000014551177770303300171200ustar00rootroot00000000000000# # Makefile for libiberty under openVMS/Alpha # # For use with gnu-make for vms # # Created by Klaus K"ampf, kkaempf@progis.de # # OBJS=bcopy.obj,bcmp.obj,getopt.obj,obstack.obj,xexit.obj,xmalloc.obj,hex.obj,\ getopt1.obj,cplus-dem.obj,strncasecmp.obj,strcasecmp.obj,strdup.obj,\ concat.obj,getruntime.obj,getpagesize.obj,alloca.obj,xstrerror.obj,\ xmemdup.obj,xstrdup.obj,xatexit.obj,choose-temp.obj,fnmatch.obj,objalloc.obj ifeq ($(CC),gcc) CFLAGS=/include=([],[-.include]) else # assume dec c CFLAGS=/noopt/debug/include=([],[-.include])/define=("const=")/warnings=disable=(missingreturn,implicitfunc) endif libiberty.olb: config.h alloca-conf.h $(OBJS) purge lib/create libiberty *.obj config.h: config.h-vms $(CP) $< $@ clean: $$ purge $(RM) config.h; $(RM) *.obj; $(RM) libiberty.olb; nescc-1.3.4/libiberty/md5.c000066400000000000000000000333071177770303300154460ustar00rootroot00000000000000/* md5.c - Functions to compute MD5 message digest of files or memory blocks according to the definition of MD5 in RFC 1321 from April 1992. Copyright (C) 1995, 1996 Free Software Foundation, Inc. NOTE: This source is derived from an old version taken from the GNU C Library (glibc). This program 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. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Ulrich Drepper , 1995. */ #ifdef HAVE_CONFIG_H # include #endif #include #if STDC_HEADERS || defined _LIBC # include # include #else # ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # endif #endif #include "ansidecl.h" #include "md5.h" #ifdef _LIBC # include # if __BYTE_ORDER == __BIG_ENDIAN # define WORDS_BIGENDIAN 1 # endif #endif #ifdef WORDS_BIGENDIAN # define SWAP(n) \ (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) #else # define SWAP(n) (n) #endif /* This array contains the bytes used to pad the buffer to the next 64-byte boundary. (RFC 1321, 3.1: Step 1) */ static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ }; /* Initialize structure containing state of computation. (RFC 1321, 3.3: Step 3) */ void md5_init_ctx (struct md5_ctx *ctx) { ctx->A = (md5_uint32) 0x67452301; ctx->B = (md5_uint32) 0xefcdab89; ctx->C = (md5_uint32) 0x98badcfe; ctx->D = (md5_uint32) 0x10325476; ctx->total[0] = ctx->total[1] = 0; ctx->buflen = 0; } /* Put result from CTX in first 16 bytes following RESBUF. The result must be in little endian byte order. IMPORTANT: On some systems it is required that RESBUF is correctly aligned for a 32 bits value. */ void * md5_read_ctx (const struct md5_ctx *ctx, void *resbuf) { ((md5_uint32 *) resbuf)[0] = SWAP (ctx->A); ((md5_uint32 *) resbuf)[1] = SWAP (ctx->B); ((md5_uint32 *) resbuf)[2] = SWAP (ctx->C); ((md5_uint32 *) resbuf)[3] = SWAP (ctx->D); return resbuf; } /* Process the remaining bytes in the internal buffer and the usual prolog according to the standard and write the result to RESBUF. IMPORTANT: On some systems it is required that RESBUF is correctly aligned for a 32 bits value. */ void * md5_finish_ctx (struct md5_ctx *ctx, void *resbuf) { /* Take yet unprocessed bytes into account. */ md5_uint32 bytes = ctx->buflen; size_t pad; /* Now count remaining bytes. */ ctx->total[0] += bytes; if (ctx->total[0] < bytes) ++ctx->total[1]; pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes; memcpy (&ctx->buffer[bytes], fillbuf, pad); /* Put the 64-bit file length in *bits* at the end of the buffer. */ *(md5_uint32 *) &ctx->buffer[bytes + pad] = SWAP (ctx->total[0] << 3); *(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) | (ctx->total[0] >> 29)); /* Process last bytes. */ md5_process_block (ctx->buffer, bytes + pad + 8, ctx); return md5_read_ctx (ctx, resbuf); } /* Compute MD5 message digest for bytes read from STREAM. The resulting message digest number will be written into the 16 bytes beginning at RESBLOCK. */ int md5_stream (FILE *stream, void *resblock) { /* Important: BLOCKSIZE must be a multiple of 64. */ #define BLOCKSIZE 4096 struct md5_ctx ctx; char buffer[BLOCKSIZE + 72]; size_t sum; /* Initialize the computation context. */ md5_init_ctx (&ctx); /* Iterate over full file contents. */ while (1) { /* We read the file in blocks of BLOCKSIZE bytes. One call of the computation function processes the whole buffer so that with the next round of the loop another block can be read. */ size_t n; sum = 0; /* Read block. Take care for partial reads. */ do { n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream); sum += n; } while (sum < BLOCKSIZE && n != 0); if (n == 0 && ferror (stream)) return 1; /* If end of file is reached, end the loop. */ if (n == 0) break; /* Process buffer with BLOCKSIZE bytes. Note that BLOCKSIZE % 64 == 0 */ md5_process_block (buffer, BLOCKSIZE, &ctx); } /* Add the last bytes if necessary. */ if (sum > 0) md5_process_bytes (buffer, sum, &ctx); /* Construct result in desired memory. */ md5_finish_ctx (&ctx, resblock); return 0; } /* Compute MD5 message digest for LEN bytes beginning at BUFFER. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ void * md5_buffer (const char *buffer, size_t len, void *resblock) { struct md5_ctx ctx; /* Initialize the computation context. */ md5_init_ctx (&ctx); /* Process whole buffer but last len % 64 bytes. */ md5_process_bytes (buffer, len, &ctx); /* Put result in desired memory area. */ return md5_finish_ctx (&ctx, resblock); } void md5_process_bytes (const void *buffer, size_t len, struct md5_ctx *ctx) { /* When we already have some bits in our internal buffer concatenate both inputs first. */ if (ctx->buflen != 0) { size_t left_over = ctx->buflen; size_t add = 128 - left_over > len ? len : 128 - left_over; memcpy (&ctx->buffer[left_over], buffer, add); ctx->buflen += add; if (left_over + add > 64) { md5_process_block (ctx->buffer, (left_over + add) & ~63, ctx); /* The regions in the following copy operation cannot overlap. */ memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63], (left_over + add) & 63); ctx->buflen = (left_over + add) & 63; } buffer = (const void *) ((const char *) buffer + add); len -= add; } /* Process available complete blocks. */ if (len > 64) { #if !_STRING_ARCH_unaligned /* To check alignment gcc has an appropriate operator. Other compilers don't. */ # if __GNUC__ >= 2 # define UNALIGNED_P(p) (((md5_uintptr) p) % __alignof__ (md5_uint32) != 0) # else # define UNALIGNED_P(p) (((md5_uintptr) p) % sizeof (md5_uint32) != 0) # endif if (UNALIGNED_P (buffer)) while (len > 64) { md5_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx); buffer = (const char *) buffer + 64; len -= 64; } else #endif md5_process_block (buffer, len & ~63, ctx); buffer = (const void *) ((const char *) buffer + (len & ~63)); len &= 63; } /* Move remaining bytes in internal buffer. */ if (len > 0) { memcpy (ctx->buffer, buffer, len); ctx->buflen = len; } } /* These are the four functions used in the four steps of the MD5 algorithm and defined in the RFC 1321. The first function is a little bit optimized (as found in Colin Plumbs public domain implementation). */ /* #define FF(b, c, d) ((b & c) | (~b & d)) */ #define FF(b, c, d) (d ^ (b & (c ^ d))) #define FG(b, c, d) FF (d, b, c) #define FH(b, c, d) (b ^ c ^ d) #define FI(b, c, d) (c ^ (b | ~d)) /* Process LEN bytes of BUFFER, accumulating context into CTX. It is assumed that LEN % 64 == 0. */ void md5_process_block (const void *buffer, size_t len, struct md5_ctx *ctx) { md5_uint32 correct_words[16]; const md5_uint32 *words = (const md5_uint32 *) buffer; size_t nwords = len / sizeof (md5_uint32); const md5_uint32 *endp = words + nwords; md5_uint32 A = ctx->A; md5_uint32 B = ctx->B; md5_uint32 C = ctx->C; md5_uint32 D = ctx->D; /* First increment the byte count. RFC 1321 specifies the possible length of the file up to 2^64 bits. Here we only compute the number of bytes. Do a double word increment. */ ctx->total[0] += len; if (ctx->total[0] < len) ++ctx->total[1]; /* Process all bytes in the buffer with 64 bytes in each round of the loop. */ while (words < endp) { md5_uint32 *cwp = correct_words; md5_uint32 A_save = A; md5_uint32 B_save = B; md5_uint32 C_save = C; md5_uint32 D_save = D; /* First round: using the given function, the context and a constant the next context is computed. Because the algorithms processing unit is a 32-bit word and it is determined to work on words in little endian byte order we perhaps have to change the byte order before the computation. To reduce the work for the next steps we store the swapped words in the array CORRECT_WORDS. */ #define OP(a, b, c, d, s, T) \ do \ { \ a += FF (b, c, d) + (*cwp++ = SWAP (*words)) + T; \ ++words; \ CYCLIC (a, s); \ a += b; \ } \ while (0) /* It is unfortunate that C does not provide an operator for cyclic rotation. Hope the C compiler is smart enough. */ #define CYCLIC(w, s) (w = (w << s) | (w >> (32 - s))) /* Before we start, one word to the strange constants. They are defined in RFC 1321 as T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64 */ /* Round 1. */ OP (A, B, C, D, 7, (md5_uint32) 0xd76aa478); OP (D, A, B, C, 12, (md5_uint32) 0xe8c7b756); OP (C, D, A, B, 17, (md5_uint32) 0x242070db); OP (B, C, D, A, 22, (md5_uint32) 0xc1bdceee); OP (A, B, C, D, 7, (md5_uint32) 0xf57c0faf); OP (D, A, B, C, 12, (md5_uint32) 0x4787c62a); OP (C, D, A, B, 17, (md5_uint32) 0xa8304613); OP (B, C, D, A, 22, (md5_uint32) 0xfd469501); OP (A, B, C, D, 7, (md5_uint32) 0x698098d8); OP (D, A, B, C, 12, (md5_uint32) 0x8b44f7af); OP (C, D, A, B, 17, (md5_uint32) 0xffff5bb1); OP (B, C, D, A, 22, (md5_uint32) 0x895cd7be); OP (A, B, C, D, 7, (md5_uint32) 0x6b901122); OP (D, A, B, C, 12, (md5_uint32) 0xfd987193); OP (C, D, A, B, 17, (md5_uint32) 0xa679438e); OP (B, C, D, A, 22, (md5_uint32) 0x49b40821); /* For the second to fourth round we have the possibly swapped words in CORRECT_WORDS. Redefine the macro to take an additional first argument specifying the function to use. */ #undef OP #define OP(a, b, c, d, k, s, T) \ do \ { \ a += FX (b, c, d) + correct_words[k] + T; \ CYCLIC (a, s); \ a += b; \ } \ while (0) #define FX(b, c, d) FG (b, c, d) /* Round 2. */ OP (A, B, C, D, 1, 5, (md5_uint32) 0xf61e2562); OP (D, A, B, C, 6, 9, (md5_uint32) 0xc040b340); OP (C, D, A, B, 11, 14, (md5_uint32) 0x265e5a51); OP (B, C, D, A, 0, 20, (md5_uint32) 0xe9b6c7aa); OP (A, B, C, D, 5, 5, (md5_uint32) 0xd62f105d); OP (D, A, B, C, 10, 9, (md5_uint32) 0x02441453); OP (C, D, A, B, 15, 14, (md5_uint32) 0xd8a1e681); OP (B, C, D, A, 4, 20, (md5_uint32) 0xe7d3fbc8); OP (A, B, C, D, 9, 5, (md5_uint32) 0x21e1cde6); OP (D, A, B, C, 14, 9, (md5_uint32) 0xc33707d6); OP (C, D, A, B, 3, 14, (md5_uint32) 0xf4d50d87); OP (B, C, D, A, 8, 20, (md5_uint32) 0x455a14ed); OP (A, B, C, D, 13, 5, (md5_uint32) 0xa9e3e905); OP (D, A, B, C, 2, 9, (md5_uint32) 0xfcefa3f8); OP (C, D, A, B, 7, 14, (md5_uint32) 0x676f02d9); OP (B, C, D, A, 12, 20, (md5_uint32) 0x8d2a4c8a); #undef FX #define FX(b, c, d) FH (b, c, d) /* Round 3. */ OP (A, B, C, D, 5, 4, (md5_uint32) 0xfffa3942); OP (D, A, B, C, 8, 11, (md5_uint32) 0x8771f681); OP (C, D, A, B, 11, 16, (md5_uint32) 0x6d9d6122); OP (B, C, D, A, 14, 23, (md5_uint32) 0xfde5380c); OP (A, B, C, D, 1, 4, (md5_uint32) 0xa4beea44); OP (D, A, B, C, 4, 11, (md5_uint32) 0x4bdecfa9); OP (C, D, A, B, 7, 16, (md5_uint32) 0xf6bb4b60); OP (B, C, D, A, 10, 23, (md5_uint32) 0xbebfbc70); OP (A, B, C, D, 13, 4, (md5_uint32) 0x289b7ec6); OP (D, A, B, C, 0, 11, (md5_uint32) 0xeaa127fa); OP (C, D, A, B, 3, 16, (md5_uint32) 0xd4ef3085); OP (B, C, D, A, 6, 23, (md5_uint32) 0x04881d05); OP (A, B, C, D, 9, 4, (md5_uint32) 0xd9d4d039); OP (D, A, B, C, 12, 11, (md5_uint32) 0xe6db99e5); OP (C, D, A, B, 15, 16, (md5_uint32) 0x1fa27cf8); OP (B, C, D, A, 2, 23, (md5_uint32) 0xc4ac5665); #undef FX #define FX(b, c, d) FI (b, c, d) /* Round 4. */ OP (A, B, C, D, 0, 6, (md5_uint32) 0xf4292244); OP (D, A, B, C, 7, 10, (md5_uint32) 0x432aff97); OP (C, D, A, B, 14, 15, (md5_uint32) 0xab9423a7); OP (B, C, D, A, 5, 21, (md5_uint32) 0xfc93a039); OP (A, B, C, D, 12, 6, (md5_uint32) 0x655b59c3); OP (D, A, B, C, 3, 10, (md5_uint32) 0x8f0ccc92); OP (C, D, A, B, 10, 15, (md5_uint32) 0xffeff47d); OP (B, C, D, A, 1, 21, (md5_uint32) 0x85845dd1); OP (A, B, C, D, 8, 6, (md5_uint32) 0x6fa87e4f); OP (D, A, B, C, 15, 10, (md5_uint32) 0xfe2ce6e0); OP (C, D, A, B, 6, 15, (md5_uint32) 0xa3014314); OP (B, C, D, A, 13, 21, (md5_uint32) 0x4e0811a1); OP (A, B, C, D, 4, 6, (md5_uint32) 0xf7537e82); OP (D, A, B, C, 11, 10, (md5_uint32) 0xbd3af235); OP (C, D, A, B, 2, 15, (md5_uint32) 0x2ad7d2bb); OP (B, C, D, A, 9, 21, (md5_uint32) 0xeb86d391); /* Add the starting values of the context. */ A += A_save; B += B_save; C += C_save; D += D_save; } /* Put checksum in context given as argument. */ ctx->A = A; ctx->B = B; ctx->C = C; ctx->D = D; } nescc-1.3.4/libiberty/memchr.c000066400000000000000000000014531177770303300162310ustar00rootroot00000000000000/* @deftypefn Supplemental void* memchr (const void *@var{s}, int @var{c}, size_t @var{n}) This function searches memory starting at @code{*@var{s}} for the character @var{c}. The search only ends with the first occurrence of @var{c}, or after @var{length} characters; in particular, a null character does not terminate the search. If the character @var{c} is found within @var{length} characters of @code{*@var{s}}, a pointer to the character is returned. If @var{c} is not found, then @code{NULL} is returned. @end deftypefn */ #include #include PTR memchr (register const PTR src_void, int c, size_t length) { const unsigned char *src = (const unsigned char *)src_void; while (length-- > 0) { if (*src == c) return (PTR)src; src++; } return NULL; } nescc-1.3.4/libiberty/memcmp.c000066400000000000000000000015501177770303300162320ustar00rootroot00000000000000/* memcmp -- compare two memory regions. This function is in the public domain. */ /* @deftypefn Supplemental int memcmp (const void *@var{x}, const void *@var{y}, size_t @var{count}) Compares the first @var{count} bytes of two areas of memory. Returns zero if they are the same, a value less than zero if @var{x} is lexically less than @var{y}, or a value greater than zero if @var{x} is lexically greater than @var{y}. Note that lexical order is determined as if comparing unsigned char arrays. @end deftypefn */ #include #include int memcmp (const PTR str1, const PTR str2, size_t count) { register const unsigned char *s1 = (const unsigned char*)str1; register const unsigned char *s2 = (const unsigned char*)str2; while (count-- > 0) { if (*s1++ != *s2++) return s1[-1] < s2[-1] ? -1 : 1; } return 0; } nescc-1.3.4/libiberty/memcpy.c000066400000000000000000000007621177770303300162520ustar00rootroot00000000000000/* memcpy (the standard C function) This function is in the public domain. */ /* @deftypefn Supplemental void* memcpy (void *@var{out}, const void *@var{in}, size_t @var{length}) Copies @var{length} bytes from memory region @var{in} to region @var{out}. Returns a pointer to @var{out}. @end deftypefn */ #include #include void bcopy (const void*, void*, size_t); PTR memcpy (PTR out, const PTR in, size_t length) { bcopy(in, out, length); return out; } nescc-1.3.4/libiberty/memmove.c000066400000000000000000000010211177770303300164120ustar00rootroot00000000000000/* Wrapper to implement ANSI C's memmove using BSD's bcopy. */ /* This function is in the public domain. --Per Bothner. */ /* @deftypefn Supplemental void* memmove (void *@var{from}, const void *@var{to}, size_t @var{count}) Copies @var{count} bytes from memory area @var{from} to memory area @var{to}, returning a pointer to @var{to}. @end deftypefn */ #include #include void bcopy (const void*, void*, size_t); PTR memmove (PTR s1, const PTR s2, size_t n) { bcopy (s2, s1, n); return s1; } nescc-1.3.4/libiberty/mempcpy.c000066400000000000000000000025261177770303300164320ustar00rootroot00000000000000/* Implement the mempcpy function. Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. Written by Kaveh R. Ghazi . This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* @deftypefn Supplemental void* mempcpy (void *@var{out}, const void *@var{in}, size_t @var{length}) Copies @var{length} bytes from memory region @var{in} to region @var{out}. Returns a pointer to @var{out} + @var{length}. @end deftypefn */ #include #include extern PTR memcpy (PTR, const PTR, size_t); PTR mempcpy (PTR dst, const PTR src, size_t len) { return (char *) memcpy (dst, src, len) + len; } nescc-1.3.4/libiberty/memset.c000066400000000000000000000007601177770303300162500ustar00rootroot00000000000000/* memset This implementation is in the public domain. */ /* @deftypefn Supplemental void* memset (void *@var{s}, int @var{c}, size_t @var{count}) Sets the first @var{count} bytes of @var{s} to the constant byte @var{c}, returning a pointer to @var{s}. @end deftypefn */ #include #include PTR memset (PTR dest, register int val, register size_t len) { register unsigned char *ptr = (unsigned char*)dest; while (len-- > 0) *ptr++ = val; return dest; } nescc-1.3.4/libiberty/mkstemps.c000066400000000000000000000070271177770303300166240ustar00rootroot00000000000000/* Copyright (C) 1991, 1992, 1996, 1998, 2004 Free Software Foundation, Inc. This file is derived from mkstemp.c from the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #include #include #include #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_SYS_TIME_H #include #endif #include "ansidecl.h" /* We need to provide a type for gcc_uint64_t. */ #ifdef __GNUC__ __extension__ typedef unsigned long long gcc_uint64_t; #else typedef unsigned long gcc_uint64_t; #endif #ifndef TMP_MAX #define TMP_MAX 16384 #endif #ifndef O_BINARY # define O_BINARY 0 #endif /* @deftypefn Replacement int mkstemps (char *@var{pattern}, int @var{suffix_len}) Generate a unique temporary file name from @var{pattern}. @var{pattern} has the form: @example @var{path}/ccXXXXXX@var{suffix} @end example @var{suffix_len} tells us how long @var{suffix} is (it can be zero length). The last six characters of @var{pattern} before @var{suffix} must be @samp{XXXXXX}; they are replaced with a string that makes the filename unique. Returns a file descriptor open on the file for reading and writing. @end deftypefn */ int mkstemps (char *pattern, int suffix_len) { static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; static gcc_uint64_t value; #ifdef HAVE_GETTIMEOFDAY struct timeval tv; #endif char *XXXXXX; size_t len; int count; len = strlen (pattern); if ((int) len < 6 + suffix_len || strncmp (&pattern[len - 6 - suffix_len], "XXXXXX", 6)) { return -1; } XXXXXX = &pattern[len - 6 - suffix_len]; #ifdef HAVE_GETTIMEOFDAY /* Get some more or less random data. */ gettimeofday (&tv, NULL); value += ((gcc_uint64_t) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid (); #else value += getpid (); #endif for (count = 0; count < TMP_MAX; ++count) { gcc_uint64_t v = value; int fd; /* Fill in the random bits. */ XXXXXX[0] = letters[v % 62]; v /= 62; XXXXXX[1] = letters[v % 62]; v /= 62; XXXXXX[2] = letters[v % 62]; v /= 62; XXXXXX[3] = letters[v % 62]; v /= 62; XXXXXX[4] = letters[v % 62]; v /= 62; XXXXXX[5] = letters[v % 62]; fd = open (pattern, O_BINARY|O_RDWR|O_CREAT|O_EXCL, 0600); if (fd >= 0) /* The file does not exist. */ return fd; /* This is a random value. It is only necessary that the next TMP_MAX values generated by adding 7777 to VALUE are different with (module 2^32). */ value += 7777; } /* We return the null string if we can't find a unique file name. */ pattern[0] = '\0'; return -1; } nescc-1.3.4/libiberty/msdos.c000066400000000000000000000002611177770303300160770ustar00rootroot00000000000000char msg[] = "No vfork available - aborting\n"; vfork() { write(1, msg, sizeof(msg)); } sigsetmask() { /* no signals support in go32 (yet) */ } waitpid() { return -1; } nescc-1.3.4/libiberty/objalloc.c000066400000000000000000000157201177770303300165450ustar00rootroot00000000000000/* objalloc.c -- routines to allocate memory for objects Copyright 1997 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Solutions. This program 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. This program 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 this program; if not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "ansidecl.h" #include "objalloc.h" /* Get a definition for NULL. */ #include #if VMS #include #include #else /* Get a definition for size_t. */ #include #ifdef HAVE_STDLIB_H #include #else /* For systems with larger pointers than ints, this must be declared. */ extern PTR malloc (size_t); extern void free (PTR); #endif #endif /* These routines allocate space for an object. Freeing allocated space may or may not free all more recently allocated space. We handle large and small allocation requests differently. If we don't have enough space in the current block, and the allocation request is for more than 512 bytes, we simply pass it through to malloc. */ /* The objalloc structure is defined in objalloc.h. */ /* This structure appears at the start of each chunk. */ struct objalloc_chunk { /* Next chunk. */ struct objalloc_chunk *next; /* If this chunk contains large objects, this is the value of current_ptr when this chunk was allocated. If this chunk contains small objects, this is NULL. */ char *current_ptr; }; /* The aligned size of objalloc_chunk. */ #define CHUNK_HEADER_SIZE \ ((sizeof (struct objalloc_chunk) + OBJALLOC_ALIGN - 1) \ &~ (OBJALLOC_ALIGN - 1)) /* We ask for this much memory each time we create a chunk which is to hold small objects. */ #define CHUNK_SIZE (4096 - 32) /* A request for this amount or more is just passed through to malloc. */ #define BIG_REQUEST (512) /* Create an objalloc structure. */ struct objalloc * objalloc_create (void) { struct objalloc *ret; struct objalloc_chunk *chunk; ret = (struct objalloc *) malloc (sizeof *ret); if (ret == NULL) return NULL; ret->chunks = (PTR) malloc (CHUNK_SIZE); if (ret->chunks == NULL) { free (ret); return NULL; } chunk = (struct objalloc_chunk *) ret->chunks; chunk->next = NULL; chunk->current_ptr = NULL; ret->current_ptr = (char *) chunk + CHUNK_HEADER_SIZE; ret->current_space = CHUNK_SIZE - CHUNK_HEADER_SIZE; return ret; } /* Allocate space from an objalloc structure. */ PTR _objalloc_alloc (struct objalloc *o, unsigned long len) { /* We avoid confusion from zero sized objects by always allocating at least 1 byte. */ if (len == 0) len = 1; len = (len + OBJALLOC_ALIGN - 1) &~ (OBJALLOC_ALIGN - 1); if (len <= o->current_space) { o->current_ptr += len; o->current_space -= len; return (PTR) (o->current_ptr - len); } if (len >= BIG_REQUEST) { char *ret; struct objalloc_chunk *chunk; ret = (char *) malloc (CHUNK_HEADER_SIZE + len); if (ret == NULL) return NULL; chunk = (struct objalloc_chunk *) ret; chunk->next = (struct objalloc_chunk *) o->chunks; chunk->current_ptr = o->current_ptr; o->chunks = (PTR) chunk; return (PTR) (ret + CHUNK_HEADER_SIZE); } else { struct objalloc_chunk *chunk; chunk = (struct objalloc_chunk *) malloc (CHUNK_SIZE); if (chunk == NULL) return NULL; chunk->next = (struct objalloc_chunk *) o->chunks; chunk->current_ptr = NULL; o->current_ptr = (char *) chunk + CHUNK_HEADER_SIZE; o->current_space = CHUNK_SIZE - CHUNK_HEADER_SIZE; o->chunks = (PTR) chunk; return objalloc_alloc (o, len); } } /* Free an entire objalloc structure. */ void objalloc_free (struct objalloc *o) { struct objalloc_chunk *l; l = (struct objalloc_chunk *) o->chunks; while (l != NULL) { struct objalloc_chunk *next; next = l->next; free (l); l = next; } free (o); } /* Free a block from an objalloc structure. This also frees all more recently allocated blocks. */ void objalloc_free_block (struct objalloc *o, PTR block) { struct objalloc_chunk *p, *small; char *b = (char *) block; /* First set P to the chunk which contains the block we are freeing, and set Q to the last small object chunk we see before P. */ small = NULL; for (p = (struct objalloc_chunk *) o->chunks; p != NULL; p = p->next) { if (p->current_ptr == NULL) { if (b > (char *) p && b < (char *) p + CHUNK_SIZE) break; small = p; } else { if (b == (char *) p + CHUNK_HEADER_SIZE) break; } } /* If we can't find the chunk, the caller has made a mistake. */ if (p == NULL) abort (); if (p->current_ptr == NULL) { struct objalloc_chunk *q; struct objalloc_chunk *first; /* The block is in a chunk containing small objects. We can free every chunk through SMALL, because they have certainly been allocated more recently. After SMALL, we will not see any chunks containing small objects; we can free any big chunk if the current_ptr is greater than or equal to B. We can then reset the new current_ptr to B. */ first = NULL; q = (struct objalloc_chunk *) o->chunks; while (q != p) { struct objalloc_chunk *next; next = q->next; if (small != NULL) { if (small == q) small = NULL; free (q); } else if (q->current_ptr > b) free (q); else if (first == NULL) first = q; q = next; } if (first == NULL) first = p; o->chunks = (PTR) first; /* Now start allocating from this small block again. */ o->current_ptr = b; o->current_space = ((char *) p + CHUNK_SIZE) - b; } else { struct objalloc_chunk *q; char *current_ptr; /* This block is in a large chunk by itself. We can free everything on the list up to and including this block. We then start allocating from the next chunk containing small objects, setting current_ptr from the value stored with the large chunk we are freeing. */ current_ptr = p->current_ptr; p = p->next; q = (struct objalloc_chunk *) o->chunks; while (q != p) { struct objalloc_chunk *next; next = q->next; free (q); q = next; } o->chunks = (PTR) p; while (p->current_ptr != NULL) p = p->next; o->current_ptr = current_ptr; o->current_space = ((char *) p + CHUNK_SIZE) - current_ptr; } } nescc-1.3.4/libiberty/obstack.c000066400000000000000000000377141177770303300164150ustar00rootroot00000000000000/* obstack.c - subroutines used implicitly by object stack macros Copyright (C) 1988,89,90,91,92,93,94,96,97 Free Software Foundation, Inc. NOTE: This source is derived from an old version taken from the GNU C Library (glibc). This program 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. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include #endif #include "obstack.h" /* NOTE BEFORE MODIFYING THIS FILE: This version number must be incremented whenever callers compiled using an old obstack.h can no longer properly call the functions in this obstack.c. */ #define OBSTACK_INTERFACE_VERSION 1 /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself, and the installed library supports the same library interface we do. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #include /* Random thing to get __GNU_LIBRARY__. */ #if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1 #include #if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION #define ELIDE_CODE #endif #endif #ifndef ELIDE_CODE #define POINTER void * /* Determine default alignment. */ struct fooalign {char x; double d;}; #define DEFAULT_ALIGNMENT \ ((PTR_INT_TYPE) ((char *) &((struct fooalign *) 0)->d - (char *) 0)) /* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT. But in fact it might be less smart and round addresses to as much as DEFAULT_ROUNDING. So we prepare for it to do that. */ union fooround {long x; double d;}; #define DEFAULT_ROUNDING (sizeof (union fooround)) /* When we copy a long block of data, this is the unit to do it with. On some machines, copying successive ints does not work; in such a case, redefine COPYING_UNIT to `long' (if that works) or `char' as a last resort. */ #ifndef COPYING_UNIT #define COPYING_UNIT int #endif /* The functions allocating more room by calling `obstack_chunk_alloc' jump to the handler pointed to by `obstack_alloc_failed_handler'. This variable by default points to the internal function `print_and_abort'. */ static void print_and_abort (void); void (*obstack_alloc_failed_handler) (void) = print_and_abort; /* Exit value used when `print_and_abort' is used. */ #if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H #include #endif #ifndef EXIT_FAILURE #define EXIT_FAILURE 1 #endif int obstack_exit_failure = EXIT_FAILURE; /* The non-GNU-C macros copy the obstack into this global variable to avoid multiple evaluation. */ struct obstack *_obstack; /* Define a macro that either calls functions with the traditional malloc/free calling interface, or calls functions with the mmalloc/mfree interface (that adds an extra first argument), based on the state of use_extra_arg. For free, do not use ?:, since some compilers, like the MIPS compilers, do not allow (expr) ? void : void. */ #if defined (__STDC__) && __STDC__ #define CALL_CHUNKFUN(h, size) \ (((h) -> use_extra_arg) \ ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ : (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size))) #define CALL_FREEFUN(h, old_chunk) \ do { \ if ((h) -> use_extra_arg) \ (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \ else \ (*(void (*) (void *)) (h)->freefun) ((old_chunk)); \ } while (0) #else #define CALL_CHUNKFUN(h, size) \ (((h) -> use_extra_arg) \ ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ : (*(struct _obstack_chunk *(*) ()) (h)->chunkfun) ((size))) #define CALL_FREEFUN(h, old_chunk) \ do { \ if ((h) -> use_extra_arg) \ (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \ else \ (*(void (*) ()) (h)->freefun) ((old_chunk)); \ } while (0) #endif /* Initialize an obstack H for use. Specify chunk size SIZE (0 means default). Objects start on multiples of ALIGNMENT (0 means use default). CHUNKFUN is the function to use to allocate chunks, and FREEFUN the function to free them. Return nonzero if successful, zero if out of memory. To recover from an out of memory error, free up some memory, then call this again. */ int _obstack_begin (struct obstack *h, int size, int alignment, POINTER (*chunkfun) (long), void (*freefun) (void *)) { register struct _obstack_chunk *chunk; /* points to new chunk */ if (alignment == 0) alignment = (int) DEFAULT_ALIGNMENT; if (size == 0) /* Default size is what GNU malloc can fit in a 4096-byte block. */ { /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc. Use the values for range checking, because if range checking is off, the extra bytes won't be missed terribly, but if range checking is on and we used a larger request, a whole extra 4096 bytes would be allocated. These number are irrelevant to the new GNU malloc. I suspect it is less sensitive to the size of the request. */ int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)) + 4 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)); size = 4096 - extra; } h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun; h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; h->chunk_size = size; h->alignment_mask = alignment - 1; h->use_extra_arg = 0; chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size); if (!chunk) (*obstack_alloc_failed_handler) (); h->next_free = h->object_base = chunk->contents; h->chunk_limit = chunk->limit = (char *) chunk + h->chunk_size; chunk->prev = 0; /* The initial chunk now contains no empty object. */ h->maybe_empty_object = 0; h->alloc_failed = 0; return 1; } int _obstack_begin_1 (struct obstack *h, int size, int alignment, POINTER (*chunkfun) (POINTER, long), void (*freefun) (POINTER, POINTER), POINTER arg) { register struct _obstack_chunk *chunk; /* points to new chunk */ if (alignment == 0) alignment = (int) DEFAULT_ALIGNMENT; if (size == 0) /* Default size is what GNU malloc can fit in a 4096-byte block. */ { /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc. Use the values for range checking, because if range checking is off, the extra bytes won't be missed terribly, but if range checking is on and we used a larger request, a whole extra 4096 bytes would be allocated. These number are irrelevant to the new GNU malloc. I suspect it is less sensitive to the size of the request. */ int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)) + 4 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)); size = 4096 - extra; } h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun; h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; h->chunk_size = size; h->alignment_mask = alignment - 1; h->extra_arg = arg; h->use_extra_arg = 1; chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size); if (!chunk) (*obstack_alloc_failed_handler) (); h->next_free = h->object_base = chunk->contents; h->chunk_limit = chunk->limit = (char *) chunk + h->chunk_size; chunk->prev = 0; /* The initial chunk now contains no empty object. */ h->maybe_empty_object = 0; h->alloc_failed = 0; return 1; } /* Allocate a new current chunk for the obstack *H on the assumption that LENGTH bytes need to be added to the current object, or a new object of length LENGTH allocated. Copies any partial object from the end of the old chunk to the beginning of the new one. */ void _obstack_newchunk (struct obstack *h, int length) { register struct _obstack_chunk *old_chunk = h->chunk; register struct _obstack_chunk *new_chunk; register long new_size; register long obj_size = h->next_free - h->object_base; register long i; long already; /* Compute size for new chunk. */ new_size = (obj_size + length) + (obj_size >> 3) + 100; if (new_size < h->chunk_size) new_size = h->chunk_size; /* Allocate and initialize the new chunk. */ new_chunk = CALL_CHUNKFUN (h, new_size); if (!new_chunk) (*obstack_alloc_failed_handler) (); h->chunk = new_chunk; new_chunk->prev = old_chunk; new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size; /* Move the existing object to the new chunk. Word at a time is fast and is safe if the object is sufficiently aligned. */ if (h->alignment_mask + 1 >= DEFAULT_ALIGNMENT) { for (i = obj_size / sizeof (COPYING_UNIT) - 1; i >= 0; i--) ((COPYING_UNIT *)new_chunk->contents)[i] = ((COPYING_UNIT *)h->object_base)[i]; /* We used to copy the odd few remaining bytes as one extra COPYING_UNIT, but that can cross a page boundary on a machine which does not do strict alignment for COPYING_UNITS. */ already = obj_size / sizeof (COPYING_UNIT) * sizeof (COPYING_UNIT); } else already = 0; /* Copy remaining bytes one by one. */ for (i = already; i < obj_size; i++) new_chunk->contents[i] = h->object_base[i]; /* If the object just copied was the only data in OLD_CHUNK, free that chunk and remove it from the chain. But not if that chunk might contain an empty object. */ if (h->object_base == old_chunk->contents && ! h->maybe_empty_object) { new_chunk->prev = old_chunk->prev; CALL_FREEFUN (h, old_chunk); } h->object_base = new_chunk->contents; h->next_free = h->object_base + obj_size; /* The new chunk certainly contains no empty object yet. */ h->maybe_empty_object = 0; } /* Return nonzero if object OBJ has been allocated from obstack H. This is here for debugging. If you use it in a program, you are probably losing. */ /* Suppress -Wmissing-prototypes warning. We don't want to declare this in obstack.h because it is just for debugging. */ int _obstack_allocated_p (struct obstack *h, POINTER obj); int _obstack_allocated_p (struct obstack *h, POINTER obj) { register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ register struct _obstack_chunk *plp; /* point to previous chunk if any */ lp = (h)->chunk; /* We use >= rather than > since the object cannot be exactly at the beginning of the chunk but might be an empty object exactly at the end of an adjacent chunk. */ while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj)) { plp = lp->prev; lp = plp; } return lp != 0; } /* Free objects in obstack H, including OBJ and everything allocate more recently than OBJ. If OBJ is zero, free everything in H. */ #undef obstack_free /* This function has two names with identical definitions. This is the first one, called from non-ANSI code. */ void _obstack_free (struct obstack *h, POINTER obj) { register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ register struct _obstack_chunk *plp; /* point to previous chunk if any */ lp = h->chunk; /* We use >= because there cannot be an object at the beginning of a chunk. But there can be an empty object at that address at the end of another chunk. */ while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj)) { plp = lp->prev; CALL_FREEFUN (h, lp); lp = plp; /* If we switch chunks, we can't tell whether the new current chunk contains an empty object, so assume that it may. */ h->maybe_empty_object = 1; } if (lp) { h->object_base = h->next_free = (char *) (obj); h->chunk_limit = lp->limit; h->chunk = lp; } else if (obj != 0) /* obj is not in any of the chunks! */ abort (); } /* This function is used from ANSI code. */ void obstack_free (struct obstack *h, POINTER obj) { register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ register struct _obstack_chunk *plp; /* point to previous chunk if any */ lp = h->chunk; /* We use >= because there cannot be an object at the beginning of a chunk. But there can be an empty object at that address at the end of another chunk. */ while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj)) { plp = lp->prev; CALL_FREEFUN (h, lp); lp = plp; /* If we switch chunks, we can't tell whether the new current chunk contains an empty object, so assume that it may. */ h->maybe_empty_object = 1; } if (lp) { h->object_base = h->next_free = (char *) (obj); h->chunk_limit = lp->limit; h->chunk = lp; } else if (obj != 0) /* obj is not in any of the chunks! */ abort (); } int _obstack_memory_used (struct obstack *h) { register struct _obstack_chunk* lp; register int nbytes = 0; for (lp = h->chunk; lp != 0; lp = lp->prev) { nbytes += lp->limit - (char *) lp; } return nbytes; } /* Define the error handler. */ #ifndef _ # if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC # include # ifndef _ # define _(Str) gettext (Str) # endif # else # define _(Str) (Str) # endif #endif static void print_and_abort (void) { fputs (_("memory exhausted\n"), stderr); exit (obstack_exit_failure); } #if 0 /* These are now turned off because the applications do not use it and it uses bcopy via obstack_grow, which causes trouble on sysV. */ /* Now define the functional versions of the obstack macros. Define them to simply use the corresponding macros to do the job. */ /* The function names appear in parentheses in order to prevent the macro-definitions of the names from being expanded there. */ POINTER (obstack_base) (struct obstack *obstack) { return obstack_base (obstack); } POINTER (obstack_next_free) (struct obstack *obstack) { return obstack_next_free (obstack); } int (obstack_object_size) (struct obstack *obstack) { return obstack_object_size (obstack); } int (obstack_room) (struct obstack *obstack) { return obstack_room (obstack); } int (obstack_make_room) (struct obstack *obstack, int length) { return obstack_make_room (obstack, length); } void (obstack_grow) (struct obstack *obstack, POINTER pointer, int length) { obstack_grow (obstack, pointer, length); } void (obstack_grow0) (struct obstack *obstack, POINTER pointer, int length) { obstack_grow0 (obstack, pointer, length); } void (obstack_1grow) (struct obstack *obstack, int character) { obstack_1grow (obstack, character); } void (obstack_blank) (struct obstack *obstack, int length) { obstack_blank (obstack, length); } void (obstack_1grow_fast) (struct obstack *obstack, int character) { obstack_1grow_fast (obstack, character); } void (obstack_blank_fast) (struct obstack *obstack, int length) { obstack_blank_fast (obstack, length); } POINTER (obstack_finish) (struct obstack *obstack) { return obstack_finish (obstack); } POINTER (obstack_alloc) (struct obstack *obstack, int length) { return obstack_alloc (obstack, length); } POINTER (obstack_copy) (struct obstack *obstack, POINTER pointer, int length) { return obstack_copy (obstack, pointer, length); } POINTER (obstack_copy0) (struct obstack *obstack, POINTER pointer, int length) { return obstack_copy0 (obstack, pointer, length); } #endif /* 0 */ #endif /* !ELIDE_CODE */ nescc-1.3.4/libiberty/obstacks.texi000066400000000000000000000727471177770303300173340ustar00rootroot00000000000000@node Obstacks,Licenses,Functions,Top @chapter Obstacks @cindex obstacks An @dfn{obstack} is a pool of memory containing a stack of objects. You can create any number of separate obstacks, and then allocate objects in specified obstacks. Within each obstack, the last object allocated must always be the first one freed, but distinct obstacks are independent of each other. Aside from this one constraint of order of freeing, obstacks are totally general: an obstack can contain any number of objects of any size. They are implemented with macros, so allocation is usually very fast as long as the objects are usually small. And the only space overhead per object is the padding needed to start each object on a suitable boundary. @menu * Creating Obstacks:: How to declare an obstack in your program. * Preparing for Obstacks:: Preparations needed before you can use obstacks. * Allocation in an Obstack:: Allocating objects in an obstack. * Freeing Obstack Objects:: Freeing objects in an obstack. * Obstack Functions:: The obstack functions are both functions and macros. * Growing Objects:: Making an object bigger by stages. * Extra Fast Growing:: Extra-high-efficiency (though more complicated) growing objects. * Status of an Obstack:: Inquiries about the status of an obstack. * Obstacks Data Alignment:: Controlling alignment of objects in obstacks. * Obstack Chunks:: How obstacks obtain and release chunks; efficiency considerations. * Summary of Obstacks:: @end menu @node Creating Obstacks @section Creating Obstacks The utilities for manipulating obstacks are declared in the header file @file{obstack.h}. @pindex obstack.h @comment obstack.h @comment GNU @deftp {Data Type} {struct obstack} An obstack is represented by a data structure of type @code{struct obstack}. This structure has a small fixed size; it records the status of the obstack and how to find the space in which objects are allocated. It does not contain any of the objects themselves. You should not try to access the contents of the structure directly; use only the functions described in this chapter. @end deftp You can declare variables of type @code{struct obstack} and use them as obstacks, or you can allocate obstacks dynamically like any other kind of object. Dynamic allocation of obstacks allows your program to have a variable number of different stacks. (You can even allocate an obstack structure in another obstack, but this is rarely useful.) All the functions that work with obstacks require you to specify which obstack to use. You do this with a pointer of type @code{struct obstack *}. In the following, we often say ``an obstack'' when strictly speaking the object at hand is such a pointer. The objects in the obstack are packed into large blocks called @dfn{chunks}. The @code{struct obstack} structure points to a chain of the chunks currently in use. The obstack library obtains a new chunk whenever you allocate an object that won't fit in the previous chunk. Since the obstack library manages chunks automatically, you don't need to pay much attention to them, but you do need to supply a function which the obstack library should use to get a chunk. Usually you supply a function which uses @code{malloc} directly or indirectly. You must also supply a function to free a chunk. These matters are described in the following section. @node Preparing for Obstacks @section Preparing for Using Obstacks Each source file in which you plan to use the obstack functions must include the header file @file{obstack.h}, like this: @smallexample #include @end smallexample @findex obstack_chunk_alloc @findex obstack_chunk_free Also, if the source file uses the macro @code{obstack_init}, it must declare or define two functions or macros that will be called by the obstack library. One, @code{obstack_chunk_alloc}, is used to allocate the chunks of memory into which objects are packed. The other, @code{obstack_chunk_free}, is used to return chunks when the objects in them are freed. These macros should appear before any use of obstacks in the source file. Usually these are defined to use @code{malloc} via the intermediary @code{xmalloc} (@pxref{Unconstrained Allocation, , , libc, The GNU C Library Reference Manual}). This is done with the following pair of macro definitions: @smallexample #define obstack_chunk_alloc xmalloc #define obstack_chunk_free free @end smallexample @noindent Though the memory you get using obstacks really comes from @code{malloc}, using obstacks is faster because @code{malloc} is called less often, for larger blocks of memory. @xref{Obstack Chunks}, for full details. At run time, before the program can use a @code{struct obstack} object as an obstack, it must initialize the obstack by calling @code{obstack_init}. @comment obstack.h @comment GNU @deftypefun int obstack_init (struct obstack *@var{obstack-ptr}) Initialize obstack @var{obstack-ptr} for allocation of objects. This function calls the obstack's @code{obstack_chunk_alloc} function. If allocation of memory fails, the function pointed to by @code{obstack_alloc_failed_handler} is called. The @code{obstack_init} function always returns 1 (Compatibility notice: Former versions of obstack returned 0 if allocation failed). @end deftypefun Here are two examples of how to allocate the space for an obstack and initialize it. First, an obstack that is a static variable: @smallexample static struct obstack myobstack; @dots{} obstack_init (&myobstack); @end smallexample @noindent Second, an obstack that is itself dynamically allocated: @smallexample struct obstack *myobstack_ptr = (struct obstack *) xmalloc (sizeof (struct obstack)); obstack_init (myobstack_ptr); @end smallexample @comment obstack.h @comment GNU @defvar obstack_alloc_failed_handler The value of this variable is a pointer to a function that @code{obstack} uses when @code{obstack_chunk_alloc} fails to allocate memory. The default action is to print a message and abort. You should supply a function that either calls @code{exit} (@pxref{Program Termination, , , libc, The GNU C Library Reference Manual}) or @code{longjmp} (@pxref{Non-Local Exits, , , libc, The GNU C Library Reference Manual}) and doesn't return. @smallexample void my_obstack_alloc_failed (void) @dots{} obstack_alloc_failed_handler = &my_obstack_alloc_failed; @end smallexample @end defvar @node Allocation in an Obstack @section Allocation in an Obstack @cindex allocation (obstacks) The most direct way to allocate an object in an obstack is with @code{obstack_alloc}, which is invoked almost like @code{malloc}. @comment obstack.h @comment GNU @deftypefun {void *} obstack_alloc (struct obstack *@var{obstack-ptr}, int @var{size}) This allocates an uninitialized block of @var{size} bytes in an obstack and returns its address. Here @var{obstack-ptr} specifies which obstack to allocate the block in; it is the address of the @code{struct obstack} object which represents the obstack. Each obstack function or macro requires you to specify an @var{obstack-ptr} as the first argument. This function calls the obstack's @code{obstack_chunk_alloc} function if it needs to allocate a new chunk of memory; it calls @code{obstack_alloc_failed_handler} if allocation of memory by @code{obstack_chunk_alloc} failed. @end deftypefun For example, here is a function that allocates a copy of a string @var{str} in a specific obstack, which is in the variable @code{string_obstack}: @smallexample struct obstack string_obstack; char * copystring (char *string) @{ size_t len = strlen (string) + 1; char *s = (char *) obstack_alloc (&string_obstack, len); memcpy (s, string, len); return s; @} @end smallexample To allocate a block with specified contents, use the function @code{obstack_copy}, declared like this: @comment obstack.h @comment GNU @deftypefun {void *} obstack_copy (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) This allocates a block and initializes it by copying @var{size} bytes of data starting at @var{address}. It calls @code{obstack_alloc_failed_handler} if allocation of memory by @code{obstack_chunk_alloc} failed. @end deftypefun @comment obstack.h @comment GNU @deftypefun {void *} obstack_copy0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) Like @code{obstack_copy}, but appends an extra byte containing a null character. This extra byte is not counted in the argument @var{size}. @end deftypefun The @code{obstack_copy0} function is convenient for copying a sequence of characters into an obstack as a null-terminated string. Here is an example of its use: @smallexample char * obstack_savestring (char *addr, int size) @{ return obstack_copy0 (&myobstack, addr, size); @} @end smallexample @noindent Contrast this with the previous example of @code{savestring} using @code{malloc} (@pxref{Basic Allocation, , , libc, The GNU C Library Reference Manual}). @node Freeing Obstack Objects @section Freeing Objects in an Obstack @cindex freeing (obstacks) To free an object allocated in an obstack, use the function @code{obstack_free}. Since the obstack is a stack of objects, freeing one object automatically frees all other objects allocated more recently in the same obstack. @comment obstack.h @comment GNU @deftypefun void obstack_free (struct obstack *@var{obstack-ptr}, void *@var{object}) If @var{object} is a null pointer, everything allocated in the obstack is freed. Otherwise, @var{object} must be the address of an object allocated in the obstack. Then @var{object} is freed, along with everything allocated in @var{obstack} since @var{object}. @end deftypefun Note that if @var{object} is a null pointer, the result is an uninitialized obstack. To free all memory in an obstack but leave it valid for further allocation, call @code{obstack_free} with the address of the first object allocated on the obstack: @smallexample obstack_free (obstack_ptr, first_object_allocated_ptr); @end smallexample Recall that the objects in an obstack are grouped into chunks. When all the objects in a chunk become free, the obstack library automatically frees the chunk (@pxref{Preparing for Obstacks}). Then other obstacks, or non-obstack allocation, can reuse the space of the chunk. @node Obstack Functions @section Obstack Functions and Macros @cindex macros The interfaces for using obstacks may be defined either as functions or as macros, depending on the compiler. The obstack facility works with all C compilers, including both @w{ISO C} and traditional C, but there are precautions you must take if you plan to use compilers other than GNU C. If you are using an old-fashioned @w{non-ISO C} compiler, all the obstack ``functions'' are actually defined only as macros. You can call these macros like functions, but you cannot use them in any other way (for example, you cannot take their address). Calling the macros requires a special precaution: namely, the first operand (the obstack pointer) may not contain any side effects, because it may be computed more than once. For example, if you write this: @smallexample obstack_alloc (get_obstack (), 4); @end smallexample @noindent you will find that @code{get_obstack} may be called several times. If you use @code{*obstack_list_ptr++} as the obstack pointer argument, you will get very strange results since the incrementation may occur several times. In @w{ISO C}, each function has both a macro definition and a function definition. The function definition is used if you take the address of the function without calling it. An ordinary call uses the macro definition by default, but you can request the function definition instead by writing the function name in parentheses, as shown here: @smallexample char *x; void *(*funcp) (); /* @r{Use the macro}. */ x = (char *) obstack_alloc (obptr, size); /* @r{Call the function}. */ x = (char *) (obstack_alloc) (obptr, size); /* @r{Take the address of the function}. */ funcp = obstack_alloc; @end smallexample @noindent This is the same situation that exists in @w{ISO C} for the standard library functions. @xref{Macro Definitions, , , libc, The GNU C Library Reference Manual}. @strong{Warning:} When you do use the macros, you must observe the precaution of avoiding side effects in the first operand, even in @w{ISO C}. If you use the GNU C compiler, this precaution is not necessary, because various language extensions in GNU C permit defining the macros so as to compute each argument only once. @node Growing Objects @section Growing Objects @cindex growing objects (in obstacks) @cindex changing the size of a block (obstacks) Because memory in obstack chunks is used sequentially, it is possible to build up an object step by step, adding one or more bytes at a time to the end of the object. With this technique, you do not need to know how much data you will put in the object until you come to the end of it. We call this the technique of @dfn{growing objects}. The special functions for adding data to the growing object are described in this section. You don't need to do anything special when you start to grow an object. Using one of the functions to add data to the object automatically starts it. However, it is necessary to say explicitly when the object is finished. This is done with the function @code{obstack_finish}. The actual address of the object thus built up is not known until the object is finished. Until then, it always remains possible that you will add so much data that the object must be copied into a new chunk. While the obstack is in use for a growing object, you cannot use it for ordinary allocation of another object. If you try to do so, the space already added to the growing object will become part of the other object. @comment obstack.h @comment GNU @deftypefun void obstack_blank (struct obstack *@var{obstack-ptr}, int @var{size}) The most basic function for adding to a growing object is @code{obstack_blank}, which adds space without initializing it. @end deftypefun @comment obstack.h @comment GNU @deftypefun void obstack_grow (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size}) To add a block of initialized space, use @code{obstack_grow}, which is the growing-object analogue of @code{obstack_copy}. It adds @var{size} bytes of data to the growing object, copying the contents from @var{data}. @end deftypefun @comment obstack.h @comment GNU @deftypefun void obstack_grow0 (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size}) This is the growing-object analogue of @code{obstack_copy0}. It adds @var{size} bytes copied from @var{data}, followed by an additional null character. @end deftypefun @comment obstack.h @comment GNU @deftypefun void obstack_1grow (struct obstack *@var{obstack-ptr}, char @var{c}) To add one character at a time, use the function @code{obstack_1grow}. It adds a single byte containing @var{c} to the growing object. @end deftypefun @comment obstack.h @comment GNU @deftypefun void obstack_ptr_grow (struct obstack *@var{obstack-ptr}, void *@var{data}) Adding the value of a pointer one can use the function @code{obstack_ptr_grow}. It adds @code{sizeof (void *)} bytes containing the value of @var{data}. @end deftypefun @comment obstack.h @comment GNU @deftypefun void obstack_int_grow (struct obstack *@var{obstack-ptr}, int @var{data}) A single value of type @code{int} can be added by using the @code{obstack_int_grow} function. It adds @code{sizeof (int)} bytes to the growing object and initializes them with the value of @var{data}. @end deftypefun @comment obstack.h @comment GNU @deftypefun {void *} obstack_finish (struct obstack *@var{obstack-ptr}) When you are finished growing the object, use the function @code{obstack_finish} to close it off and return its final address. Once you have finished the object, the obstack is available for ordinary allocation or for growing another object. This function can return a null pointer under the same conditions as @code{obstack_alloc} (@pxref{Allocation in an Obstack}). @end deftypefun When you build an object by growing it, you will probably need to know afterward how long it became. You need not keep track of this as you grow the object, because you can find out the length from the obstack just before finishing the object with the function @code{obstack_object_size}, declared as follows: @comment obstack.h @comment GNU @deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr}) This function returns the current size of the growing object, in bytes. Remember to call this function @emph{before} finishing the object. After it is finished, @code{obstack_object_size} will return zero. @end deftypefun If you have started growing an object and wish to cancel it, you should finish it and then free it, like this: @smallexample obstack_free (obstack_ptr, obstack_finish (obstack_ptr)); @end smallexample @noindent This has no effect if no object was growing. @cindex shrinking objects You can use @code{obstack_blank} with a negative size argument to make the current object smaller. Just don't try to shrink it beyond zero length---there's no telling what will happen if you do that. @node Extra Fast Growing @section Extra Fast Growing Objects @cindex efficiency and obstacks The usual functions for growing objects incur overhead for checking whether there is room for the new growth in the current chunk. If you are frequently constructing objects in small steps of growth, this overhead can be significant. You can reduce the overhead by using special ``fast growth'' functions that grow the object without checking. In order to have a robust program, you must do the checking yourself. If you do this checking in the simplest way each time you are about to add data to the object, you have not saved anything, because that is what the ordinary growth functions do. But if you can arrange to check less often, or check more efficiently, then you make the program faster. The function @code{obstack_room} returns the amount of room available in the current chunk. It is declared as follows: @comment obstack.h @comment GNU @deftypefun int obstack_room (struct obstack *@var{obstack-ptr}) This returns the number of bytes that can be added safely to the current growing object (or to an object about to be started) in obstack @var{obstack} using the fast growth functions. @end deftypefun While you know there is room, you can use these fast growth functions for adding data to a growing object: @comment obstack.h @comment GNU @deftypefun void obstack_1grow_fast (struct obstack *@var{obstack-ptr}, char @var{c}) The function @code{obstack_1grow_fast} adds one byte containing the character @var{c} to the growing object in obstack @var{obstack-ptr}. @end deftypefun @comment obstack.h @comment GNU @deftypefun void obstack_ptr_grow_fast (struct obstack *@var{obstack-ptr}, void *@var{data}) The function @code{obstack_ptr_grow_fast} adds @code{sizeof (void *)} bytes containing the value of @var{data} to the growing object in obstack @var{obstack-ptr}. @end deftypefun @comment obstack.h @comment GNU @deftypefun void obstack_int_grow_fast (struct obstack *@var{obstack-ptr}, int @var{data}) The function @code{obstack_int_grow_fast} adds @code{sizeof (int)} bytes containing the value of @var{data} to the growing object in obstack @var{obstack-ptr}. @end deftypefun @comment obstack.h @comment GNU @deftypefun void obstack_blank_fast (struct obstack *@var{obstack-ptr}, int @var{size}) The function @code{obstack_blank_fast} adds @var{size} bytes to the growing object in obstack @var{obstack-ptr} without initializing them. @end deftypefun When you check for space using @code{obstack_room} and there is not enough room for what you want to add, the fast growth functions are not safe. In this case, simply use the corresponding ordinary growth function instead. Very soon this will copy the object to a new chunk; then there will be lots of room available again. So, each time you use an ordinary growth function, check afterward for sufficient space using @code{obstack_room}. Once the object is copied to a new chunk, there will be plenty of space again, so the program will start using the fast growth functions again. Here is an example: @smallexample @group void add_string (struct obstack *obstack, const char *ptr, int len) @{ while (len > 0) @{ int room = obstack_room (obstack); if (room == 0) @{ /* @r{Not enough room. Add one character slowly,} @r{which may copy to a new chunk and make room.} */ obstack_1grow (obstack, *ptr++); len--; @} else @{ if (room > len) room = len; /* @r{Add fast as much as we have room for.} */ len -= room; while (room-- > 0) obstack_1grow_fast (obstack, *ptr++); @} @} @} @end group @end smallexample @node Status of an Obstack @section Status of an Obstack @cindex obstack status @cindex status of obstack Here are functions that provide information on the current status of allocation in an obstack. You can use them to learn about an object while still growing it. @comment obstack.h @comment GNU @deftypefun {void *} obstack_base (struct obstack *@var{obstack-ptr}) This function returns the tentative address of the beginning of the currently growing object in @var{obstack-ptr}. If you finish the object immediately, it will have that address. If you make it larger first, it may outgrow the current chunk---then its address will change! If no object is growing, this value says where the next object you allocate will start (once again assuming it fits in the current chunk). @end deftypefun @comment obstack.h @comment GNU @deftypefun {void *} obstack_next_free (struct obstack *@var{obstack-ptr}) This function returns the address of the first free byte in the current chunk of obstack @var{obstack-ptr}. This is the end of the currently growing object. If no object is growing, @code{obstack_next_free} returns the same value as @code{obstack_base}. @end deftypefun @comment obstack.h @comment GNU @deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr}) This function returns the size in bytes of the currently growing object. This is equivalent to @smallexample obstack_next_free (@var{obstack-ptr}) - obstack_base (@var{obstack-ptr}) @end smallexample @end deftypefun @node Obstacks Data Alignment @section Alignment of Data in Obstacks @cindex alignment (in obstacks) Each obstack has an @dfn{alignment boundary}; each object allocated in the obstack automatically starts on an address that is a multiple of the specified boundary. By default, this boundary is 4 bytes. To access an obstack's alignment boundary, use the macro @code{obstack_alignment_mask}, whose function prototype looks like this: @comment obstack.h @comment GNU @deftypefn Macro int obstack_alignment_mask (struct obstack *@var{obstack-ptr}) The value is a bit mask; a bit that is 1 indicates that the corresponding bit in the address of an object should be 0. The mask value should be one less than a power of 2; the effect is that all object addresses are multiples of that power of 2. The default value of the mask is 3, so that addresses are multiples of 4. A mask value of 0 means an object can start on any multiple of 1 (that is, no alignment is required). The expansion of the macro @code{obstack_alignment_mask} is an lvalue, so you can alter the mask by assignment. For example, this statement: @smallexample obstack_alignment_mask (obstack_ptr) = 0; @end smallexample @noindent has the effect of turning off alignment processing in the specified obstack. @end deftypefn Note that a change in alignment mask does not take effect until @emph{after} the next time an object is allocated or finished in the obstack. If you are not growing an object, you can make the new alignment mask take effect immediately by calling @code{obstack_finish}. This will finish a zero-length object and then do proper alignment for the next object. @node Obstack Chunks @section Obstack Chunks @cindex efficiency of chunks @cindex chunks Obstacks work by allocating space for themselves in large chunks, and then parceling out space in the chunks to satisfy your requests. Chunks are normally 4096 bytes long unless you specify a different chunk size. The chunk size includes 8 bytes of overhead that are not actually used for storing objects. Regardless of the specified size, longer chunks will be allocated when necessary for long objects. The obstack library allocates chunks by calling the function @code{obstack_chunk_alloc}, which you must define. When a chunk is no longer needed because you have freed all the objects in it, the obstack library frees the chunk by calling @code{obstack_chunk_free}, which you must also define. These two must be defined (as macros) or declared (as functions) in each source file that uses @code{obstack_init} (@pxref{Creating Obstacks}). Most often they are defined as macros like this: @smallexample #define obstack_chunk_alloc malloc #define obstack_chunk_free free @end smallexample Note that these are simple macros (no arguments). Macro definitions with arguments will not work! It is necessary that @code{obstack_chunk_alloc} or @code{obstack_chunk_free}, alone, expand into a function name if it is not itself a function name. If you allocate chunks with @code{malloc}, the chunk size should be a power of 2. The default chunk size, 4096, was chosen because it is long enough to satisfy many typical requests on the obstack yet short enough not to waste too much memory in the portion of the last chunk not yet used. @comment obstack.h @comment GNU @deftypefn Macro int obstack_chunk_size (struct obstack *@var{obstack-ptr}) This returns the chunk size of the given obstack. @end deftypefn Since this macro expands to an lvalue, you can specify a new chunk size by assigning it a new value. Doing so does not affect the chunks already allocated, but will change the size of chunks allocated for that particular obstack in the future. It is unlikely to be useful to make the chunk size smaller, but making it larger might improve efficiency if you are allocating many objects whose size is comparable to the chunk size. Here is how to do so cleanly: @smallexample if (obstack_chunk_size (obstack_ptr) < @var{new-chunk-size}) obstack_chunk_size (obstack_ptr) = @var{new-chunk-size}; @end smallexample @node Summary of Obstacks @section Summary of Obstack Functions Here is a summary of all the functions associated with obstacks. Each takes the address of an obstack (@code{struct obstack *}) as its first argument. @table @code @item void obstack_init (struct obstack *@var{obstack-ptr}) Initialize use of an obstack. @xref{Creating Obstacks}. @item void *obstack_alloc (struct obstack *@var{obstack-ptr}, int @var{size}) Allocate an object of @var{size} uninitialized bytes. @xref{Allocation in an Obstack}. @item void *obstack_copy (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) Allocate an object of @var{size} bytes, with contents copied from @var{address}. @xref{Allocation in an Obstack}. @item void *obstack_copy0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) Allocate an object of @var{size}+1 bytes, with @var{size} of them copied from @var{address}, followed by a null character at the end. @xref{Allocation in an Obstack}. @item void obstack_free (struct obstack *@var{obstack-ptr}, void *@var{object}) Free @var{object} (and everything allocated in the specified obstack more recently than @var{object}). @xref{Freeing Obstack Objects}. @item void obstack_blank (struct obstack *@var{obstack-ptr}, int @var{size}) Add @var{size} uninitialized bytes to a growing object. @xref{Growing Objects}. @item void obstack_grow (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) Add @var{size} bytes, copied from @var{address}, to a growing object. @xref{Growing Objects}. @item void obstack_grow0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) Add @var{size} bytes, copied from @var{address}, to a growing object, and then add another byte containing a null character. @xref{Growing Objects}. @item void obstack_1grow (struct obstack *@var{obstack-ptr}, char @var{data-char}) Add one byte containing @var{data-char} to a growing object. @xref{Growing Objects}. @item void *obstack_finish (struct obstack *@var{obstack-ptr}) Finalize the object that is growing and return its permanent address. @xref{Growing Objects}. @item int obstack_object_size (struct obstack *@var{obstack-ptr}) Get the current size of the currently growing object. @xref{Growing Objects}. @item void obstack_blank_fast (struct obstack *@var{obstack-ptr}, int @var{size}) Add @var{size} uninitialized bytes to a growing object without checking that there is enough room. @xref{Extra Fast Growing}. @item void obstack_1grow_fast (struct obstack *@var{obstack-ptr}, char @var{data-char}) Add one byte containing @var{data-char} to a growing object without checking that there is enough room. @xref{Extra Fast Growing}. @item int obstack_room (struct obstack *@var{obstack-ptr}) Get the amount of room now available for growing the current object. @xref{Extra Fast Growing}. @item int obstack_alignment_mask (struct obstack *@var{obstack-ptr}) The mask used for aligning the beginning of an object. This is an lvalue. @xref{Obstacks Data Alignment}. @item int obstack_chunk_size (struct obstack *@var{obstack-ptr}) The size for allocating chunks. This is an lvalue. @xref{Obstack Chunks}. @item void *obstack_base (struct obstack *@var{obstack-ptr}) Tentative starting address of the currently growing object. @xref{Status of an Obstack}. @item void *obstack_next_free (struct obstack *@var{obstack-ptr}) Address just after the end of the currently growing object. @xref{Status of an Obstack}. @end table nescc-1.3.4/libiberty/partition.c000066400000000000000000000115301177770303300167640ustar00rootroot00000000000000/* List implementation of a partition of consecutive integers. Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by CodeSourcery, LLC. This file is part of GNU CC. GNU CC 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. GNU CC 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 GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #include "libiberty.h" #include "partition.h" static int elem_compare (const void *, const void *); /* Creates a partition of NUM_ELEMENTS elements. Initially each element is in a class by itself. */ partition partition_new (int num_elements) { int e; partition part = (partition) xmalloc (sizeof (struct partition_def) + (num_elements - 1) * sizeof (struct partition_elem)); part->num_elements = num_elements; for (e = 0; e < num_elements; ++e) { part->elements[e].class_element = e; part->elements[e].next = &(part->elements[e]); part->elements[e].class_count = 1; } return part; } /* Freeds a partition. */ void partition_delete (partition part) { free (part); } /* Unites the classes containing ELEM1 and ELEM2 into a single class of partition PART. If ELEM1 and ELEM2 are already in the same class, does nothing. Returns the canonical element of the resulting union class. */ int partition_union (partition part, int elem1, int elem2) { struct partition_elem *elements = part->elements; struct partition_elem *e1; struct partition_elem *e2; struct partition_elem *p; struct partition_elem *old_next; /* The canonical element of the resulting union class. */ int class_element = elements[elem1].class_element; /* If they're already in the same class, do nothing. */ if (class_element == elements[elem2].class_element) return class_element; /* Make sure ELEM1 is in the larger class of the two. If not, swap them. This way we always scan the shorter list. */ if (elements[elem1].class_count < elements[elem2].class_count) { int temp = elem1; elem1 = elem2; elem2 = temp; class_element = elements[elem1].class_element; } e1 = &(elements[elem1]); e2 = &(elements[elem2]); /* Keep a count of the number of elements in the list. */ elements[class_element].class_count += elements[e2->class_element].class_count; /* Update the class fields in elem2's class list. */ e2->class_element = class_element; for (p = e2->next; p != e2; p = p->next) p->class_element = class_element; /* Splice ELEM2's class list into ELEM1's. These are circular lists. */ old_next = e1->next; e1->next = e2->next; e2->next = old_next; return class_element; } /* Compare elements ELEM1 and ELEM2 from array of integers, given a pointer to each. Used to qsort such an array. */ static int elem_compare (const void *elem1, const void *elem2) { int e1 = * (const int *) elem1; int e2 = * (const int *) elem2; if (e1 < e2) return -1; else if (e1 > e2) return 1; else return 0; } /* Prints PART to the file pointer FP. The elements of each class are sorted. */ void partition_print (partition part, FILE *fp) { char *done; int num_elements = part->num_elements; struct partition_elem *elements = part->elements; int *class_elements; int e; /* Flag the elements we've already printed. */ done = (char *) xmalloc (num_elements); memset (done, 0, num_elements); /* A buffer used to sort elements in a class. */ class_elements = (int *) xmalloc (num_elements * sizeof (int)); fputc ('[', fp); for (e = 0; e < num_elements; ++e) /* If we haven't printed this element, print its entire class. */ if (! done[e]) { int c = e; int count = elements[elements[e].class_element].class_count; int i; /* Collect the elements in this class. */ for (i = 0; i < count; ++i) { class_elements[i] = c; done[c] = 1; c = elements[c].next - elements; } /* Sort them. */ qsort ((void *) class_elements, count, sizeof (int), elem_compare); /* Print them. */ fputc ('(', fp); for (i = 0; i < count; ++i) fprintf (fp, i == 0 ? "%d" : " %d", class_elements[i]); fputc (')', fp); } fputc (']', fp); free (class_elements); free (done); } nescc-1.3.4/libiberty/pex-common.c000066400000000000000000000352551177770303300170470ustar00rootroot00000000000000/* Common code for executing a program in a sub-process. Copyright (C) 2005 Free Software Foundation, Inc. Written by Ian Lance Taylor . This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "libiberty.h" #include "pex-common.h" #include #include #ifdef NEED_DECLARATION_ERRNO extern int errno; #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_UNISTD_H #include #endif extern int mkstemps (char *, int); /* This file contains subroutines for the program execution routines (pex_init, pex_run, etc.). This file is compiled on all systems. */ static void pex_add_remove (struct pex_obj *, const char *, int); static int pex_get_status_and_time (struct pex_obj *, int, const char **, int *); /* Initialize a pex_obj structure. */ struct pex_obj * pex_init_common (int flags, const char *pname, const char *tempbase, const struct pex_funcs *funcs) { struct pex_obj *obj; obj = XNEW (struct pex_obj); obj->flags = flags; obj->pname = pname; obj->tempbase = tempbase; obj->next_input = STDIN_FILE_NO; obj->next_input_name = NULL; obj->next_input_name_allocated = 0; obj->stderr_pipe = -1; obj->count = 0; obj->children = NULL; obj->status = NULL; obj->time = NULL; obj->number_waited = 0; obj->input_file = NULL; obj->read_output = NULL; obj->read_err = NULL; obj->remove_count = 0; obj->remove = NULL; obj->funcs = funcs; obj->sysdep = NULL; return obj; } /* Add a file to be removed when we are done. */ static void pex_add_remove (struct pex_obj *obj, const char *name, int allocated) { char *add; ++obj->remove_count; obj->remove = XRESIZEVEC (char *, obj->remove, obj->remove_count); if (allocated) add = (char *) name; else add = xstrdup (name); obj->remove[obj->remove_count - 1] = add; } /* Generate a temporary file name based on OBJ, FLAGS, and NAME. Return NULL if we were unable to reserve a temporary filename. If non-NULL, the result is either allocated with malloc, or the same pointer as NAME. */ static char * temp_file (struct pex_obj *obj, int flags, char *name) { if (name == NULL) { if (obj->tempbase == NULL) { name = make_temp_file (NULL); } else { int len = strlen (obj->tempbase); int out; if (len >= 6 && strcmp (obj->tempbase + len - 6, "XXXXXX") == 0) name = xstrdup (obj->tempbase); else name = concat (obj->tempbase, "XXXXXX", NULL); out = mkstemps (name, 0); if (out < 0) { free (name); return NULL; } /* This isn't obj->funcs->close because we got the descriptor from mkstemps, not from a function in obj->funcs. Calling close here is just like what make_temp_file does. */ close (out); } } else if ((flags & PEX_SUFFIX) != 0) { if (obj->tempbase == NULL) name = make_temp_file (name); else name = concat (obj->tempbase, name, NULL); } return name; } /* As for pex_run (), but permits the environment for the child process to be specified. */ const char * pex_run_in_environment (struct pex_obj *obj, int flags, const char *executable, char * const * argv, char * const * env, const char *orig_outname, const char *errname, int *err) { const char *errmsg; int in, out, errdes; char *outname; int outname_allocated; int p[2]; int toclose; long pid; in = -1; out = -1; errdes = -1; outname = (char *) orig_outname; outname_allocated = 0; /* If the user called pex_input_file, close the file now. */ if (obj->input_file) { if (fclose (obj->input_file) == EOF) { errmsg = "closing pipeline input file"; goto error_exit; } obj->input_file = NULL; } /* Set IN. */ if (obj->next_input_name != NULL) { /* We have to make sure that the previous process has completed before we try to read the file. */ if (!pex_get_status_and_time (obj, 0, &errmsg, err)) goto error_exit; in = obj->funcs->open_read (obj, obj->next_input_name, (flags & PEX_BINARY_INPUT) != 0); if (in < 0) { *err = errno; errmsg = "open temporary file"; goto error_exit; } if (obj->next_input_name_allocated) { free (obj->next_input_name); obj->next_input_name_allocated = 0; } obj->next_input_name = NULL; } else { in = obj->next_input; if (in < 0) { *err = 0; errmsg = "pipeline already complete"; goto error_exit; } } /* Set OUT and OBJ->NEXT_INPUT/OBJ->NEXT_INPUT_NAME. */ if ((flags & PEX_LAST) != 0) { if (outname == NULL) out = STDOUT_FILE_NO; else if ((flags & PEX_SUFFIX) != 0) { outname = concat (obj->tempbase, outname, NULL); outname_allocated = 1; } obj->next_input = -1; } else if ((obj->flags & PEX_USE_PIPES) == 0) { outname = temp_file (obj, flags, outname); if (! outname) { *err = 0; errmsg = "could not create temporary file"; goto error_exit; } if (outname != orig_outname) outname_allocated = 1; if ((obj->flags & PEX_SAVE_TEMPS) == 0) { pex_add_remove (obj, outname, outname_allocated); outname_allocated = 0; } /* Hand off ownership of outname to the next stage. */ obj->next_input_name = outname; obj->next_input_name_allocated = outname_allocated; outname_allocated = 0; } else { if (obj->funcs->pipe (obj, p, (flags & PEX_BINARY_OUTPUT) != 0) < 0) { *err = errno; errmsg = "pipe"; goto error_exit; } out = p[WRITE_PORT]; obj->next_input = p[READ_PORT]; } if (out < 0) { out = obj->funcs->open_write (obj, outname, (flags & PEX_BINARY_OUTPUT) != 0); if (out < 0) { *err = errno; errmsg = "open temporary output file"; goto error_exit; } } if (outname_allocated) { free (outname); outname_allocated = 0; } /* Set ERRDES. */ if (errname != NULL && (flags & PEX_STDERR_TO_PIPE) != 0) { *err = 0; errmsg = "both ERRNAME and PEX_STDERR_TO_PIPE specified."; goto error_exit; } if (obj->stderr_pipe != -1) { *err = 0; errmsg = "PEX_STDERR_TO_PIPE used in the middle of pipeline"; goto error_exit; } if (errname == NULL) { if (flags & PEX_STDERR_TO_PIPE) { if (obj->funcs->pipe (obj, p, (flags & PEX_BINARY_ERROR) != 0) < 0) { *err = errno; errmsg = "pipe"; goto error_exit; } errdes = p[WRITE_PORT]; obj->stderr_pipe = p[READ_PORT]; } else { errdes = STDERR_FILE_NO; } } else { errdes = obj->funcs->open_write (obj, errname, (flags & PEX_BINARY_ERROR) != 0); if (errdes < 0) { *err = errno; errmsg = "open error file"; goto error_exit; } } /* If we are using pipes, the child process has to close the next input pipe. */ if ((obj->flags & PEX_USE_PIPES) == 0) toclose = -1; else toclose = obj->next_input; /* Run the program. */ pid = obj->funcs->exec_child (obj, flags, executable, argv, env, in, out, errdes, toclose, &errmsg, err); if (pid < 0) goto error_exit; ++obj->count; obj->children = XRESIZEVEC (long, obj->children, obj->count); obj->children[obj->count - 1] = pid; return NULL; error_exit: if (in >= 0 && in != STDIN_FILE_NO) obj->funcs->close (obj, in); if (out >= 0 && out != STDOUT_FILE_NO) obj->funcs->close (obj, out); if (errdes >= 0 && errdes != STDERR_FILE_NO) obj->funcs->close (obj, errdes); if (outname_allocated) free (outname); return errmsg; } /* Run a program. */ const char * pex_run (struct pex_obj *obj, int flags, const char *executable, char * const * argv, const char *orig_outname, const char *errname, int *err) { return pex_run_in_environment (obj, flags, executable, argv, NULL, orig_outname, errname, err); } /* Return a FILE pointer for a temporary file to fill with input for the pipeline. */ FILE * pex_input_file (struct pex_obj *obj, int flags, const char *in_name) { char *name = (char *) in_name; FILE *f; /* This must be called before the first pipeline stage is run, and there must not have been any other input selected. */ if (obj->count != 0 || (obj->next_input >= 0 && obj->next_input != STDIN_FILE_NO) || obj->next_input_name) { errno = EINVAL; return NULL; } name = temp_file (obj, flags, name); if (! name) return NULL; f = fopen (name, (flags & PEX_BINARY_OUTPUT) ? "wb" : "w"); if (! f) { free (name); return NULL; } obj->input_file = f; obj->next_input_name = name; obj->next_input_name_allocated = (name != in_name); return f; } /* Return a stream for a pipe connected to the standard input of the first stage of the pipeline. */ FILE * pex_input_pipe (struct pex_obj *obj, int binary) { int p[2]; FILE *f; /* You must call pex_input_pipe before the first pex_run or pex_one. */ if (obj->count > 0) goto usage_error; /* You must be using pipes. Implementations that don't support pipes clear this flag before calling pex_init_common. */ if (! (obj->flags & PEX_USE_PIPES)) goto usage_error; /* If we have somehow already selected other input, that's a mistake. */ if ((obj->next_input >= 0 && obj->next_input != STDIN_FILE_NO) || obj->next_input_name) goto usage_error; if (obj->funcs->pipe (obj, p, binary != 0) < 0) return NULL; f = obj->funcs->fdopenw (obj, p[WRITE_PORT], binary != 0); if (! f) { int saved_errno = errno; obj->funcs->close (obj, p[READ_PORT]); obj->funcs->close (obj, p[WRITE_PORT]); errno = saved_errno; return NULL; } obj->next_input = p[READ_PORT]; return f; usage_error: errno = EINVAL; return NULL; } /* Return a FILE pointer for the output of the last program executed. */ FILE * pex_read_output (struct pex_obj *obj, int binary) { if (obj->next_input_name != NULL) { const char *errmsg; int err; /* We have to make sure that the process has completed before we try to read the file. */ if (!pex_get_status_and_time (obj, 0, &errmsg, &err)) { errno = err; return NULL; } obj->read_output = fopen (obj->next_input_name, binary ? "rb" : "r"); if (obj->next_input_name_allocated) { free (obj->next_input_name); obj->next_input_name_allocated = 0; } obj->next_input_name = NULL; } else { int o; o = obj->next_input; if (o < 0 || o == STDIN_FILE_NO) return NULL; obj->read_output = obj->funcs->fdopenr (obj, o, binary); obj->next_input = -1; } return obj->read_output; } FILE * pex_read_err (struct pex_obj *obj, int binary) { int o; o = obj->stderr_pipe; if (o < 0 || o == STDIN_FILE_NO) return NULL; obj->read_err = obj->funcs->fdopenr (obj, o, binary); return obj->read_err; } /* Get the exit status and, if requested, the resource time for all the child processes. Return 0 on failure, 1 on success. */ static int pex_get_status_and_time (struct pex_obj *obj, int done, const char **errmsg, int *err) { int ret; int i; if (obj->number_waited == obj->count) return 1; obj->status = XRESIZEVEC (int, obj->status, obj->count); if ((obj->flags & PEX_RECORD_TIMES) != 0) obj->time = XRESIZEVEC (struct pex_time, obj->time, obj->count); ret = 1; for (i = obj->number_waited; i < obj->count; ++i) { if (obj->funcs->wait (obj, obj->children[i], &obj->status[i], obj->time == NULL ? NULL : &obj->time[i], done, errmsg, err) < 0) ret = 0; } obj->number_waited = i; return ret; } /* Get exit status of executed programs. */ int pex_get_status (struct pex_obj *obj, int count, int *vector) { if (obj->status == NULL) { const char *errmsg; int err; if (!pex_get_status_and_time (obj, 0, &errmsg, &err)) return 0; } if (count > obj->count) { memset (vector + obj->count, 0, (count - obj->count) * sizeof (int)); count = obj->count; } memcpy (vector, obj->status, count * sizeof (int)); return 1; } /* Get process times of executed programs. */ int pex_get_times (struct pex_obj *obj, int count, struct pex_time *vector) { if (obj->status == NULL) { const char *errmsg; int err; if (!pex_get_status_and_time (obj, 0, &errmsg, &err)) return 0; } if (obj->time == NULL) return 0; if (count > obj->count) { memset (vector + obj->count, 0, (count - obj->count) * sizeof (struct pex_time)); count = obj->count; } memcpy (vector, obj->time, count * sizeof (struct pex_time)); return 1; } /* Free a pex_obj structure. */ void pex_free (struct pex_obj *obj) { if (obj->next_input >= 0 && obj->next_input != STDIN_FILE_NO) obj->funcs->close (obj, obj->next_input); /* If the caller forgot to wait for the children, we do it here, to avoid zombies. */ if (obj->status == NULL) { const char *errmsg; int err; obj->flags &= ~ PEX_RECORD_TIMES; pex_get_status_and_time (obj, 1, &errmsg, &err); } if (obj->next_input_name_allocated) free (obj->next_input_name); if (obj->children != NULL) free (obj->children); if (obj->status != NULL) free (obj->status); if (obj->time != NULL) free (obj->time); if (obj->read_output != NULL) fclose (obj->read_output); if (obj->read_err != NULL) fclose (obj->read_err); if (obj->remove_count > 0) { int i; for (i = 0; i < obj->remove_count; ++i) { remove (obj->remove[i]); free (obj->remove[i]); } free (obj->remove); } if (obj->funcs->cleanup != NULL) obj->funcs->cleanup (obj); free (obj); } nescc-1.3.4/libiberty/pex-common.h000066400000000000000000000140711177770303300170450ustar00rootroot00000000000000/* Utilities to execute a program in a subprocess (possibly linked by pipes with other subprocesses), and wait for it. Shared logic. Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef PEX_COMMON_H #define PEX_COMMON_H #include "config.h" #include "libiberty.h" #include /* pid_t is may defined by config.h or sys/types.h needs to be included. */ #if !defined(pid_t) && defined(HAVE_SYS_TYPES_H) #include #endif #define install_error_msg "installation problem, cannot exec `%s'" /* stdin file number. */ #define STDIN_FILE_NO 0 /* stdout file number. */ #define STDOUT_FILE_NO 1 /* stderr file number. */ #define STDERR_FILE_NO 2 /* value of `pipe': port index for reading. */ #define READ_PORT 0 /* value of `pipe': port index for writing. */ #define WRITE_PORT 1 /* The structure used by pex_init and friends. */ struct pex_obj { /* Flags. */ int flags; /* Name of calling program, for error messages. */ const char *pname; /* Base name to use for temporary files. */ const char *tempbase; /* Pipe to use as stdin for next process. */ int next_input; /* File name to use as stdin for next process. */ char *next_input_name; /* Whether next_input_name was allocated using malloc. */ int next_input_name_allocated; /* If not -1, stderr pipe from the last process. */ int stderr_pipe; /* Number of child processes. */ int count; /* PIDs of child processes; array allocated using malloc. */ long *children; /* Exit statuses of child processes; array allocated using malloc. */ int *status; /* Time used by child processes; array allocated using malloc. */ struct pex_time *time; /* Number of children we have already waited for. */ int number_waited; /* FILE created by pex_input_file. */ FILE *input_file; /* FILE created by pex_read_output. */ FILE *read_output; /* FILE created by pex_read_err. */ FILE *read_err; /* Number of temporary files to remove. */ int remove_count; /* List of temporary files to remove; array allocated using malloc of strings allocated using malloc. */ char **remove; /* Pointers to system dependent functions. */ const struct pex_funcs *funcs; /* For use by system dependent code. */ void *sysdep; }; /* Functions passed to pex_run_common. */ struct pex_funcs { /* Open file NAME for reading. If BINARY is non-zero, open in binary mode. Return >= 0 on success, -1 on error. */ int (*open_read) (struct pex_obj *, const char */* name */, int /* binary */); /* Open file NAME for writing. If BINARY is non-zero, open in binary mode. Return >= 0 on success, -1 on error. */ int (*open_write) (struct pex_obj *, const char */* name */, int /* binary */); /* Execute a child process. FLAGS, EXECUTABLE, ARGV, ERR are from pex_run. IN, OUT, ERRDES, TOCLOSE are all descriptors, from open_read, open_write, or pipe, or they are one of STDIN_FILE_NO, STDOUT_FILE_NO or STDERR_FILE_NO; if IN, OUT, and ERRDES are not STD*_FILE_NO, they should be closed. If the descriptor TOCLOSE is not -1, and the system supports pipes, TOCLOSE should be closed in the child process. The function should handle the PEX_STDERR_TO_STDOUT flag. Return >= 0 on success, or -1 on error and set *ERRMSG and *ERR. */ pid_t (*exec_child) (struct pex_obj *, int /* flags */, const char */* executable */, char * const * /* argv */, char * const * /* env */, int /* in */, int /* out */, int /* errdes */, int /* toclose */, const char **/* errmsg */, int */* err */); /* Close a descriptor. Return 0 on success, -1 on error. */ int (*close) (struct pex_obj *, int); /* Wait for a child to complete, returning exit status in *STATUS and time in *TIME (if it is not null). CHILD is from fork. DONE is 1 if this is called via pex_free. ERRMSG and ERR are as in fork. Return 0 on success, -1 on error. */ int (*wait) (struct pex_obj *, pid_t /* child */, int * /* status */, struct pex_time * /* time */, int /* done */, const char ** /* errmsg */, int * /* err */); /* Create a pipe (only called if PEX_USE_PIPES is set) storing two descriptors in P[0] and P[1]. If BINARY is non-zero, open in binary mode. Return 0 on success, -1 on error. */ int (*pipe) (struct pex_obj *, int * /* p */, int /* binary */); /* Get a FILE pointer to read from a file descriptor (only called if PEX_USE_PIPES is set). If BINARY is non-zero, open in binary mode. Return pointer on success, NULL on error. */ FILE * (*fdopenr) (struct pex_obj *, int /* fd */, int /* binary */); /* Get a FILE pointer to write to the file descriptor FD (only called if PEX_USE_PIPES is set). If BINARY is non-zero, open in binary mode. Arrange for FD not to be inherited by the child processes. Return pointer on success, NULL on error. */ FILE * (*fdopenw) (struct pex_obj *, int /* fd */, int /* binary */); /* Free any system dependent data associated with OBJ. May be NULL if there is nothing to do. */ void (*cleanup) (struct pex_obj *); }; extern struct pex_obj *pex_init_common (int, const char *, const char *, const struct pex_funcs *); #endif nescc-1.3.4/libiberty/pex-djgpp.c000066400000000000000000000152741177770303300166620ustar00rootroot00000000000000/* Utilities to execute a program in a subprocess (possibly linked by pipes with other subprocesses), and wait for it. DJGPP specialization. Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2005 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "pex-common.h" #include #include #ifdef NEED_DECLARATION_ERRNO extern int errno; #endif #ifdef HAVE_STDLIB_H #include #endif #include #include #include #include #include /* Use ECHILD if available, otherwise use EINVAL. */ #ifdef ECHILD #define PWAIT_ERROR ECHILD #else #define PWAIT_ERROR EINVAL #endif static int pex_djgpp_open_read (struct pex_obj *, const char *, int); static int pex_djgpp_open_write (struct pex_obj *, const char *, int); static pid_t pex_djgpp_exec_child (struct pex_obj *, int, const char *, char * const *, char * const *, int, int, int, int, const char **, int *); static int pex_djgpp_close (struct pex_obj *, int); static int pex_djgpp_wait (struct pex_obj *, pid_t, int *, struct pex_time *, int, const char **, int *); /* The list of functions we pass to the common routines. */ const struct pex_funcs funcs = { pex_djgpp_open_read, pex_djgpp_open_write, pex_djgpp_exec_child, pex_djgpp_close, pex_djgpp_wait, NULL, /* pipe */ NULL, /* fdopenr */ NULL, /* fdopenw */ NULL /* cleanup */ }; /* Return a newly initialized pex_obj structure. */ struct pex_obj * pex_init (int flags, const char *pname, const char *tempbase) { /* DJGPP does not support pipes. */ flags &= ~ PEX_USE_PIPES; return pex_init_common (flags, pname, tempbase, &funcs); } /* Open a file for reading. */ static int pex_djgpp_open_read (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name, int binary) { return open (name, O_RDONLY | (binary ? O_BINARY : O_TEXT)); } /* Open a file for writing. */ static int pex_djgpp_open_write (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name, int binary) { /* Note that we can't use O_EXCL here because gcc may have already created the temporary file via make_temp_file. */ return open (name, (O_WRONLY | O_CREAT | O_TRUNC | (binary ? O_BINARY : O_TEXT)), S_IRUSR | S_IWUSR); } /* Close a file. */ static int pex_djgpp_close (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd) { return close (fd); } /* Execute a child. */ static pid_t pex_djgpp_exec_child (struct pex_obj *obj, int flags, const char *executable, char * const * argv, char * const * env, int in, int out, int errdes, int toclose ATTRIBUTE_UNUSED, const char **errmsg, int *err) { int org_in, org_out, org_errdes; int status; int *statuses; org_in = -1; org_out = -1; org_errdes = -1; if (in != STDIN_FILE_NO) { org_in = dup (STDIN_FILE_NO); if (org_in < 0) { *err = errno; *errmsg = "dup"; return (pid_t) -1; } if (dup2 (in, STDIN_FILE_NO) < 0) { *err = errno; *errmsg = "dup2"; return (pid_t) -1; } if (close (in) < 0) { *err = errno; *errmsg = "close"; return (pid_t) -1; } } if (out != STDOUT_FILE_NO) { org_out = dup (STDOUT_FILE_NO); if (org_out < 0) { *err = errno; *errmsg = "dup"; return (pid_t) -1; } if (dup2 (out, STDOUT_FILE_NO) < 0) { *err = errno; *errmsg = "dup2"; return (pid_t) -1; } if (close (out) < 0) { *err = errno; *errmsg = "close"; return (pid_t) -1; } } if (errdes != STDERR_FILE_NO || (flags & PEX_STDERR_TO_STDOUT) != 0) { org_errdes = dup (STDERR_FILE_NO); if (org_errdes < 0) { *err = errno; *errmsg = "dup"; return (pid_t) -1; } if (dup2 ((flags & PEX_STDERR_TO_STDOUT) != 0 ? STDOUT_FILE_NO : errdes, STDERR_FILE_NO) < 0) { *err = errno; *errmsg = "dup2"; return (pid_t) -1; } if (errdes != STDERR_FILE_NO) { if (close (errdes) < 0) { *err = errno; *errmsg = "close"; return (pid_t) -1; } } } if (env) status = (((flags & PEX_SEARCH) != 0 ? spawnvpe : spawnve) (P_WAIT, executable, argv, env)); else status = (((flags & PEX_SEARCH) != 0 ? spawnvp : spawnv) (P_WAIT, executable, argv)); if (status == -1) { *err = errno; *errmsg = ((flags & PEX_SEARCH) != 0) ? "spawnvp" : "spawnv"; } if (in != STDIN_FILE_NO) { if (dup2 (org_in, STDIN_FILE_NO) < 0) { *err = errno; *errmsg = "dup2"; return (pid_t) -1; } if (close (org_in) < 0) { *err = errno; *errmsg = "close"; return (pid_t) -1; } } if (out != STDOUT_FILE_NO) { if (dup2 (org_out, STDOUT_FILE_NO) < 0) { *err = errno; *errmsg = "dup2"; return (pid_t) -1; } if (close (org_out) < 0) { *err = errno; *errmsg = "close"; return (pid_t) -1; } } if (errdes != STDERR_FILE_NO || (flags & PEX_STDERR_TO_STDOUT) != 0) { if (dup2 (org_errdes, STDERR_FILE_NO) < 0) { *err = errno; *errmsg = "dup2"; return (pid_t) -1; } if (close (org_errdes) < 0) { *err = errno; *errmsg = "close"; return (pid_t) -1; } } /* Save the exit status for later. When we are called, obj->count is the number of children which have executed before this one. */ statuses = (int *) obj->sysdep; statuses = XRESIZEVEC (int, statuses, obj->count + 1); statuses[obj->count] = status; obj->sysdep = (void *) statuses; return (pid_t) obj->count; } /* Wait for a child process to complete. Actually the child process has already completed, and we just need to return the exit status. */ static int pex_djgpp_wait (struct pex_obj *obj, pid_t pid, int *status, struct pex_time *time, int done ATTRIBUTE_UNUSED, const char **errmsg ATTRIBUTE_UNUSED, int *err ATTRIBUTE_UNUSED) { int *statuses; if (time != NULL) memset (time, 0, sizeof *time); statuses = (int *) obj->sysdep; *status = statuses[pid]; return 0; } nescc-1.3.4/libiberty/pex-msdos.c000066400000000000000000000164071177770303300167020ustar00rootroot00000000000000/* Utilities to execute a program in a subprocess (possibly linked by pipes with other subprocesses), and wait for it. Generic MSDOS specialization. Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2005 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "pex-common.h" #include #include #ifdef NEED_DECLARATION_ERRNO extern int errno; #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #include "safe-ctype.h" #include /* The structure we keep in obj->sysdep. */ #define PEX_MSDOS_FILE_COUNT 3 #define PEX_MSDOS_FD_OFFSET 10 struct pex_msdos { /* An array of file names. We refer to these using file descriptors of 10 + array index. */ const char *files[PEX_MSDOS_FILE_COUNT]; /* Exit statuses of programs which have been run. */ int *statuses; }; static int pex_msdos_open (struct pex_obj *, const char *, int); static int pex_msdos_open (struct pex_obj *, const char *, int); static int pex_msdos_fdindex (struct pex_msdos *, int); static pid_t pex_msdos_exec_child (struct pex_obj *, int, const char *, char * const *, char * const *, int, int, int, int, int, const char **, int *); static int pex_msdos_close (struct pex_obj *, int); static int pex_msdos_wait (struct pex_obj *, pid_t, int *, struct pex_time *, int, const char **, int *); static void pex_msdos_cleanup (struct pex_obj *); /* The list of functions we pass to the common routines. */ const struct pex_funcs funcs = { pex_msdos_open, pex_msdos_open, pex_msdos_exec_child, pex_msdos_close, pex_msdos_wait, NULL, /* pipe */ NULL, /* fdopenr */ NULL, /* fdopenw */ pex_msdos_cleanup }; /* Return a newly initialized pex_obj structure. */ struct pex_obj * pex_init (int flags, const char *pname, const char *tempbase) { struct pex_obj *ret; int i; /* MSDOS does not support pipes. */ flags &= ~ PEX_USE_PIPES; ret = pex_init_common (flags, pname, tempbase, funcs); ret->sysdep = XNEW (struct pex_msdos); for (i = 0; i < PEX_MSDOS_FILE_COUNT; ++i) ret->files[i] = NULL; ret->statuses = NULL; return ret; } /* Open a file. FIXME: We ignore the binary argument, since we have no way to handle it. */ static int pex_msdos_open (struct pex_obj *obj, const char *name, int binary ATTRIBUTE_UNUSED) { struct pex_msdos *ms; int i; ms = (struct pex_msdos *) obj->sysdep; for (i = 0; i < PEX_MSDOS_FILE_COUNT; ++i) { if (ms->files[i] == NULL) { ms->files[i] = xstrdup (name); return i + PEX_MSDOS_FD_OFFSET; } } abort (); } /* Get the index into msdos->files associated with an open file descriptor. */ static int pex_msdos_fdindex (struct pex_msdos *ms, int fd) { fd -= PEX_MSDOS_FD_OFFSET; if (fd < 0 || fd >= PEX_MSDOS_FILE_COUNT || ms->files[fd] == NULL) abort (); return fd; } /* Close a file. */ static int pex_msdos_close (struct pex_obj *obj, int fd) { struct pex_msdos *ms; int fdinex; ms = (struct pex_msdos *) obj->sysdep; fdindex = pe_msdos_fdindex (ms, fd); free (ms->files[fdindex]); ms->files[fdindex] = NULL; } /* Execute a child. */ static pid_t pex_msdos_exec_child (struct pex_obj *obj, int flags, const char *executable, char * const * argv, char * const * env, int in, int out, int toclose ATTRIBUTE_UNUSED, int errdes ATTRIBUTE_UNUSED, const char **errmsg, int *err) { struct pex_msdos *ms; char *temp_base; int temp_base_allocated; char *rf; int inindex; char *infile; int outindex; char *outfile; char *scmd; FILE *argfile; int i; int status; ms = (struct pex_msdos *) obj->sysdep; /* FIXME: I don't know how to redirect stderr, so we ignore ERRDES and PEX_STDERR_TO_STDOUT. */ temp_base = obj->temp_base; if (temp_base != NULL) temp_base_allocated = 0; else { temp_base = choose_temp_base (); temp_base_allocated = 1; } rf = concat (temp_base, ".gp", NULL); if (temp_base_allocated) free (temp_base); if (in == STDIN_FILE_NO) { inindex = -1; infile = ""; } else { inindex = pex_msdos_fdindex (ms, in); infile = ms->files[inindex]; } if (out == STDOUT_FILE_NO) { outindex = -1; outfile = ""; } else { outindex = pex_msdos_fdindex (ms, out); outfile = ms->files[outindex]; } scmd = XNEWVEC (char, strlen (program) + ((flags & PEXECUTE_SEARCH) != 0 ? 4 : 0) + strlen (rf) + strlen (infile) + strlen (outfile) + 10); sprintf (scmd, "%s%s @%s%s%s%s%s", program, (flags & PEXECUTE_SEARCH) != 0 ? ".exe" : "", rf, inindex != -1 ? " <" : "", infile, outindex != -1 ? " >" : "", outfile); argfile = fopen (rf, "w"); if (argfile == NULL) { *err = errno; free (scmd); free (rf); *errmsg = "cannot open temporary command file"; return (pid_t) -1; } for (i = 1; argv[i] != NULL; ++i) { char *p; for (p = argv[i]; *p != '\0'; ++p) { if (*p == '"' || *p == '\'' || *p == '\\' || ISSPACE (*p)) putc ('\\', argfile); putc (*p, argfile); } putc ('\n', argfile); } fclose (argfile); status = system (scmd); if (status == -1) { *err = errno; remove (rf); free (scmd); free (rf); *errmsg = "system"; return (pid_t) -1; } remove (rf); free (scmd); free (rf); /* Save the exit status for later. When we are called, obj->count is the number of children which have executed before this one. */ ms->statuses = XRESIZEVEC(int, ms->statuses, obj->count + 1); ms->statuses[obj->count] = status; return (pid_t) obj->count; } /* Wait for a child process to complete. Actually the child process has already completed, and we just need to return the exit status. */ static int pex_msdos_wait (struct pex_obj *obj, pid_t pid, int *status, struct pex_time *time, int done ATTRIBUTE_UNUSED, const char **errmsg ATTRIBUTE_UNUSED, int *err ATTRIBUTE_UNUSED) { struct pex_msdos *ms; ms = (struct pex_msdos *) obj->sysdep; if (time != NULL) memset (time, 0, sizeof *time); *status = ms->statuses[pid]; return 0; } /* Clean up the pex_msdos structure. */ static void pex_msdos_cleanup (struct pex_obj *obj) { struct pex_msdos *ms; int i; ms = (struct pex_msdos *) obj->sysdep; for (i = 0; i < PEX_MSDOS_FILE_COUNT; ++i) if (msdos->files[i] != NULL) free (msdos->files[i]); if (msdos->statuses != NULL) free (msdos->statuses); free (msdos); obj->sysdep = NULL; } nescc-1.3.4/libiberty/pex-one.c000066400000000000000000000026021177770303300163260ustar00rootroot00000000000000/* Execute a program and wait for a result. Copyright (C) 2005 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "libiberty.h" const char * pex_one (int flags, const char *executable, char * const *argv, const char *pname, const char *outname, const char *errname, int *status, int *err) { struct pex_obj *obj; const char *errmsg; obj = pex_init (0, pname, NULL); errmsg = pex_run (obj, flags, executable, argv, outname, errname, err); if (errmsg == NULL) { if (!pex_get_status (obj, 1, status)) { *err = 0; errmsg = "pex_get_status failed"; } } pex_free (obj); return errmsg; } nescc-1.3.4/libiberty/pex-unix.c000066400000000000000000000307201177770303300165320ustar00rootroot00000000000000/* Utilities to execute a program in a subprocess (possibly linked by pipes with other subprocesses), and wait for it. Generic Unix version (also used for UWIN and VMS). Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "libiberty.h" #include "pex-common.h" #include #include #include #ifdef NEED_DECLARATION_ERRNO extern int errno; #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_FCNTL_H #include #endif #ifdef HAVE_SYS_WAIT_H #include #endif #ifdef HAVE_GETRUSAGE #include #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #ifdef vfork /* Autoconf may define this to fork for us. */ # define VFORK_STRING "fork" #else # define VFORK_STRING "vfork" #endif #ifdef HAVE_VFORK_H #include #endif #ifdef VMS #define vfork() (decc$$alloc_vfork_blocks() >= 0 ? \ lib$get_current_invo_context(decc$$get_vfork_jmpbuf()) : -1) #endif /* VMS */ /* File mode to use for private and world-readable files. */ #if defined (S_IRUSR) && defined (S_IWUSR) && defined (S_IRGRP) && defined (S_IWGRP) && defined (S_IROTH) && defined (S_IWOTH) #define PUBLIC_MODE \ (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) #else #define PUBLIC_MODE 0666 #endif /* Get the exit status of a particular process, and optionally get the time that it took. This is simple if we have wait4, slightly harder if we have waitpid, and is a pain if we only have wait. */ static pid_t pex_wait (struct pex_obj *, pid_t, int *, struct pex_time *); #ifdef HAVE_WAIT4 static pid_t pex_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid, int *status, struct pex_time *time) { pid_t ret; struct rusage r; #ifdef HAVE_WAITPID if (time == NULL) return waitpid (pid, status, 0); #endif ret = wait4 (pid, status, 0, &r); if (time != NULL) { time->user_seconds = r.ru_utime.tv_sec; time->user_microseconds= r.ru_utime.tv_usec; time->system_seconds = r.ru_stime.tv_sec; time->system_microseconds= r.ru_stime.tv_usec; } return ret; } #else /* ! defined (HAVE_WAIT4) */ #ifdef HAVE_WAITPID #ifndef HAVE_GETRUSAGE static pid_t pex_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid, int *status, struct pex_time *time) { if (time != NULL) memset (time, 0, sizeof (struct pex_time)); return waitpid (pid, status, 0); } #else /* defined (HAVE_GETRUSAGE) */ static pid_t pex_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid, int *status, struct pex_time *time) { struct rusage r1, r2; pid_t ret; if (time == NULL) return waitpid (pid, status, 0); getrusage (RUSAGE_CHILDREN, &r1); ret = waitpid (pid, status, 0); if (ret < 0) return ret; getrusage (RUSAGE_CHILDREN, &r2); time->user_seconds = r2.ru_utime.tv_sec - r1.ru_utime.tv_sec; time->user_microseconds = r2.ru_utime.tv_usec - r1.ru_utime.tv_usec; if (r2.ru_utime.tv_usec < r1.ru_utime.tv_usec) { --time->user_seconds; time->user_microseconds += 1000000; } time->system_seconds = r2.ru_stime.tv_sec - r1.ru_stime.tv_sec; time->system_microseconds = r2.ru_stime.tv_usec - r1.ru_stime.tv_usec; if (r2.ru_stime.tv_usec < r1.ru_stime.tv_usec) { --time->system_seconds; time->system_microseconds += 1000000; } return ret; } #endif /* defined (HAVE_GETRUSAGE) */ #else /* ! defined (HAVE_WAITPID) */ struct status_list { struct status_list *next; pid_t pid; int status; struct pex_time time; }; static pid_t pex_wait (struct pex_obj *obj, pid_t pid, int *status, struct pex_time *time) { struct status_list **pp; for (pp = (struct status_list **) &obj->sysdep; *pp != NULL; pp = &(*pp)->next) { if ((*pp)->pid == pid) { struct status_list *p; p = *pp; *status = p->status; if (time != NULL) *time = p->time; *pp = p->next; free (p); return pid; } } while (1) { pid_t cpid; struct status_list *psl; struct pex_time pt; #ifdef HAVE_GETRUSAGE struct rusage r1, r2; #endif if (time != NULL) { #ifdef HAVE_GETRUSAGE getrusage (RUSAGE_CHILDREN, &r1); #else memset (&pt, 0, sizeof (struct pex_time)); #endif } cpid = wait (status); #ifdef HAVE_GETRUSAGE if (time != NULL && cpid >= 0) { getrusage (RUSAGE_CHILDREN, &r2); pt.user_seconds = r2.ru_utime.tv_sec - r1.ru_utime.tv_sec; pt.user_microseconds = r2.ru_utime.tv_usec - r1.ru_utime.tv_usec; if (pt.user_microseconds < 0) { --pt.user_seconds; pt.user_microseconds += 1000000; } pt.system_seconds = r2.ru_stime.tv_sec - r1.ru_stime.tv_sec; pt.system_microseconds = r2.ru_stime.tv_usec - r1.ru_stime.tv_usec; if (pt.system_microseconds < 0) { --pt.system_seconds; pt.system_microseconds += 1000000; } } #endif if (cpid < 0 || cpid == pid) { if (time != NULL) *time = pt; return cpid; } psl = XNEW (struct status_list); psl->pid = cpid; psl->status = *status; if (time != NULL) psl->time = pt; psl->next = (struct status_list *) obj->sysdep; obj->sysdep = (void *) psl; } } #endif /* ! defined (HAVE_WAITPID) */ #endif /* ! defined (HAVE_WAIT4) */ static void pex_child_error (struct pex_obj *, const char *, const char *, int) ATTRIBUTE_NORETURN; static int pex_unix_open_read (struct pex_obj *, const char *, int); static int pex_unix_open_write (struct pex_obj *, const char *, int); static pid_t pex_unix_exec_child (struct pex_obj *, int, const char *, char * const *, char * const *, int, int, int, int, const char **, int *); static int pex_unix_close (struct pex_obj *, int); static int pex_unix_wait (struct pex_obj *, pid_t, int *, struct pex_time *, int, const char **, int *); static int pex_unix_pipe (struct pex_obj *, int *, int); static FILE *pex_unix_fdopenr (struct pex_obj *, int, int); static FILE *pex_unix_fdopenw (struct pex_obj *, int, int); static void pex_unix_cleanup (struct pex_obj *); /* The list of functions we pass to the common routines. */ const struct pex_funcs funcs = { pex_unix_open_read, pex_unix_open_write, pex_unix_exec_child, pex_unix_close, pex_unix_wait, pex_unix_pipe, pex_unix_fdopenr, pex_unix_fdopenw, pex_unix_cleanup }; /* Return a newly initialized pex_obj structure. */ struct pex_obj * pex_init (int flags, const char *pname, const char *tempbase) { return pex_init_common (flags, pname, tempbase, &funcs); } /* Open a file for reading. */ static int pex_unix_open_read (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name, int binary ATTRIBUTE_UNUSED) { return open (name, O_RDONLY); } /* Open a file for writing. */ static int pex_unix_open_write (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name, int binary ATTRIBUTE_UNUSED) { /* Note that we can't use O_EXCL here because gcc may have already created the temporary file via make_temp_file. */ return open (name, O_WRONLY | O_CREAT | O_TRUNC, PUBLIC_MODE); } /* Close a file. */ static int pex_unix_close (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd) { return close (fd); } /* Report an error from a child process. We don't use stdio routines, because we might be here due to a vfork call. */ static void pex_child_error (struct pex_obj *obj, const char *executable, const char *errmsg, int err) { #define writeerr(s) (void) write (STDERR_FILE_NO, s, strlen (s)) writeerr (obj->pname); writeerr (": error trying to exec '"); writeerr (executable); writeerr ("': "); writeerr (errmsg); writeerr (": "); writeerr (xstrerror (err)); writeerr ("\n"); _exit (-1); } /* Execute a child. */ extern char **environ; static pid_t pex_unix_exec_child (struct pex_obj *obj, int flags, const char *executable, char * const * argv, char * const * env, int in, int out, int errdes, int toclose, const char **errmsg, int *err) { pid_t pid; /* We declare these to be volatile to avoid warnings from gcc about them being clobbered by vfork. */ volatile int sleep_interval; volatile int retries; sleep_interval = 1; pid = -1; for (retries = 0; retries < 4; ++retries) { pid = vfork (); if (pid >= 0) break; sleep (sleep_interval); sleep_interval *= 2; } switch (pid) { case -1: *err = errno; *errmsg = VFORK_STRING; return (pid_t) -1; case 0: /* Child process. */ if (in != STDIN_FILE_NO) { if (dup2 (in, STDIN_FILE_NO) < 0) pex_child_error (obj, executable, "dup2", errno); if (close (in) < 0) pex_child_error (obj, executable, "close", errno); } if (out != STDOUT_FILE_NO) { if (dup2 (out, STDOUT_FILE_NO) < 0) pex_child_error (obj, executable, "dup2", errno); if (close (out) < 0) pex_child_error (obj, executable, "close", errno); } if (errdes != STDERR_FILE_NO) { if (dup2 (errdes, STDERR_FILE_NO) < 0) pex_child_error (obj, executable, "dup2", errno); if (close (errdes) < 0) pex_child_error (obj, executable, "close", errno); } if (toclose >= 0) { if (close (toclose) < 0) pex_child_error (obj, executable, "close", errno); } if ((flags & PEX_STDERR_TO_STDOUT) != 0) { if (dup2 (STDOUT_FILE_NO, STDERR_FILE_NO) < 0) pex_child_error (obj, executable, "dup2", errno); } if (env) environ = (char**) env; if ((flags & PEX_SEARCH) != 0) { execvp (executable, argv); pex_child_error (obj, executable, "execvp", errno); } else { execv (executable, argv); pex_child_error (obj, executable, "execv", errno); } /* NOTREACHED */ return (pid_t) -1; default: /* Parent process. */ if (in != STDIN_FILE_NO) { if (close (in) < 0) { *err = errno; *errmsg = "close"; return (pid_t) -1; } } if (out != STDOUT_FILE_NO) { if (close (out) < 0) { *err = errno; *errmsg = "close"; return (pid_t) -1; } } if (errdes != STDERR_FILE_NO) { if (close (errdes) < 0) { *err = errno; *errmsg = "close"; return (pid_t) -1; } } return pid; } } /* Wait for a child process to complete. */ static int pex_unix_wait (struct pex_obj *obj, pid_t pid, int *status, struct pex_time *time, int done, const char **errmsg, int *err) { /* If we are cleaning up when the caller didn't retrieve process status for some reason, encourage the process to go away. */ if (done) kill (pid, SIGTERM); if (pex_wait (obj, pid, status, time) < 0) { *err = errno; *errmsg = "wait"; return -1; } return 0; } /* Create a pipe. */ static int pex_unix_pipe (struct pex_obj *obj ATTRIBUTE_UNUSED, int *p, int binary ATTRIBUTE_UNUSED) { return pipe (p); } /* Get a FILE pointer to read from a file descriptor. */ static FILE * pex_unix_fdopenr (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd, int binary ATTRIBUTE_UNUSED) { return fdopen (fd, "r"); } static FILE * pex_unix_fdopenw (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd, int binary ATTRIBUTE_UNUSED) { if (fcntl (fd, F_SETFD, FD_CLOEXEC) < 0) return NULL; return fdopen (fd, "w"); } static void pex_unix_cleanup (struct pex_obj *obj ATTRIBUTE_UNUSED) { #if !defined (HAVE_WAIT4) && !defined (HAVE_WAITPID) while (obj->sysdep != NULL) { struct status_list *this; struct status_list *next; this = (struct status_list *) obj->sysdep; next = this->next; free (this); obj->sysdep = (void *) next; } #endif } nescc-1.3.4/libiberty/pex-win32.c000066400000000000000000000561011177770303300165120ustar00rootroot00000000000000/* Utilities to execute a program in a subprocess (possibly linked by pipes with other subprocesses), and wait for it. Generic Win32 specialization. Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "pex-common.h" #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_SYS_WAIT_H #include #endif #include #include #include #include #include #include #include #include /* mingw32 headers may not define the following. */ #ifndef _P_WAIT # define _P_WAIT 0 # define _P_NOWAIT 1 # define _P_OVERLAY 2 # define _P_NOWAITO 3 # define _P_DETACH 4 # define WAIT_CHILD 0 # define WAIT_GRANDCHILD 1 #endif #define MINGW_NAME "Minimalist GNU for Windows" #define MINGW_NAME_LEN (sizeof(MINGW_NAME) - 1) extern char *stpcpy (char *dst, const char *src); /* Ensure that the executable pathname uses Win32 backslashes. This is not necessary on NT, but on W9x, forward slashes causes failure of spawn* and exec* functions (and probably any function that calls CreateProcess) *iff* the executable pathname (argv[0]) is a quoted string. And quoting is necessary in case a pathname contains embedded white space. You can't win. */ static void backslashify (char *s) { while ((s = strchr (s, '/')) != NULL) *s = '\\'; return; } static int pex_win32_open_read (struct pex_obj *, const char *, int); static int pex_win32_open_write (struct pex_obj *, const char *, int); static pid_t pex_win32_exec_child (struct pex_obj *, int, const char *, char * const *, char * const *, int, int, int, int, const char **, int *); static int pex_win32_close (struct pex_obj *, int); static int pex_win32_wait (struct pex_obj *, pid_t, int *, struct pex_time *, int, const char **, int *); static int pex_win32_pipe (struct pex_obj *, int *, int); static FILE *pex_win32_fdopenr (struct pex_obj *, int, int); static FILE *pex_win32_fdopenw (struct pex_obj *, int, int); /* The list of functions we pass to the common routines. */ const struct pex_funcs funcs = { pex_win32_open_read, pex_win32_open_write, pex_win32_exec_child, pex_win32_close, pex_win32_wait, pex_win32_pipe, pex_win32_fdopenr, pex_win32_fdopenw, NULL /* cleanup */ }; /* Return a newly initialized pex_obj structure. */ struct pex_obj * pex_init (int flags, const char *pname, const char *tempbase) { return pex_init_common (flags, pname, tempbase, &funcs); } /* Open a file for reading. */ static int pex_win32_open_read (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name, int binary) { return _open (name, _O_RDONLY | (binary ? _O_BINARY : _O_TEXT)); } /* Open a file for writing. */ static int pex_win32_open_write (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name, int binary) { /* Note that we can't use O_EXCL here because gcc may have already created the temporary file via make_temp_file. */ return _open (name, (_O_WRONLY | _O_CREAT | _O_TRUNC | (binary ? _O_BINARY : _O_TEXT)), _S_IREAD | _S_IWRITE); } /* Close a file. */ static int pex_win32_close (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd) { return _close (fd); } #ifdef USE_MINGW_MSYS static const char *mingw_keys[] = {"SOFTWARE", "Microsoft", "Windows", "CurrentVersion", "Uninstall", NULL}; /* Tack the executable on the end of a (possibly slash terminated) buffer and convert everything to \. */ static const char * tack_on_executable (char *buf, const char *executable) { char *p = strchr (buf, '\0'); if (p > buf && (p[-1] == '\\' || p[-1] == '/')) p[-1] = '\0'; backslashify (strcat (buf, executable)); return buf; } /* Walk down a registry hierarchy until the end. Return the key. */ static HKEY openkey (HKEY hStart, const char *keys[]) { HKEY hKey, hTmp; for (hKey = hStart; *keys; keys++) { LONG res; hTmp = hKey; res = RegOpenKey (hTmp, *keys, &hKey); if (hTmp != HKEY_LOCAL_MACHINE) RegCloseKey (hTmp); if (res != ERROR_SUCCESS) return NULL; } return hKey; } /* Return the "mingw root" as derived from the mingw uninstall information. */ static const char * mingw_rootify (const char *executable) { HKEY hKey, hTmp; DWORD maxlen; char *namebuf, *foundbuf; DWORD i; LONG res; /* Open the uninstall "directory". */ hKey = openkey (HKEY_LOCAL_MACHINE, mingw_keys); /* Not found. */ if (!hKey) return executable; /* Need to enumerate all of the keys here looking for one the most recent one for MinGW. */ if (RegQueryInfoKey (hKey, NULL, NULL, NULL, NULL, &maxlen, NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) { RegCloseKey (hKey); return executable; } namebuf = XNEWVEC (char, ++maxlen); foundbuf = XNEWVEC (char, maxlen); foundbuf[0] = '\0'; if (!namebuf || !foundbuf) { RegCloseKey (hKey); if (namebuf) free (namebuf); if (foundbuf) free (foundbuf); return executable; } /* Look through all of the keys for one that begins with Minimal GNU... Try to get the latest version by doing a string compare although that string never really works with version number sorting. */ for (i = 0; RegEnumKey (hKey, i, namebuf, maxlen) == ERROR_SUCCESS; i++) { int match = strcasecmp (namebuf, MINGW_NAME); if (match < 0) continue; if (match > 0 && strncasecmp (namebuf, MINGW_NAME, MINGW_NAME_LEN) > 0) continue; if (strcasecmp (namebuf, foundbuf) > 0) strcpy (foundbuf, namebuf); } free (namebuf); /* If foundbuf is empty, we didn't find anything. Punt. */ if (!foundbuf[0]) { free (foundbuf); RegCloseKey (hKey); return executable; } /* Open the key that we wanted */ res = RegOpenKey (hKey, foundbuf, &hTmp); RegCloseKey (hKey); free (foundbuf); /* Don't know why this would fail, but you gotta check */ if (res != ERROR_SUCCESS) return executable; maxlen = 0; /* Get the length of the value pointed to by InstallLocation */ if (RegQueryValueEx (hTmp, "InstallLocation", 0, NULL, NULL, &maxlen) != ERROR_SUCCESS || maxlen == 0) { RegCloseKey (hTmp); return executable; } /* Allocate space for the install location */ foundbuf = XNEWVEC (char, maxlen + strlen (executable)); if (!foundbuf) { free (foundbuf); RegCloseKey (hTmp); } /* Read the install location into the buffer */ res = RegQueryValueEx (hTmp, "InstallLocation", 0, NULL, (LPBYTE) foundbuf, &maxlen); RegCloseKey (hTmp); if (res != ERROR_SUCCESS) { free (foundbuf); return executable; } /* Concatenate the install location and the executable, turn all slashes to backslashes, and return that. */ return tack_on_executable (foundbuf, executable); } /* Read the install location of msys from it's installation file and rootify the executable based on that. */ static const char * msys_rootify (const char *executable) { size_t bufsize = 64; size_t execlen = strlen (executable) + 1; char *buf; DWORD res = 0; for (;;) { buf = XNEWVEC (char, bufsize + execlen); if (!buf) break; res = GetPrivateProfileString ("InstallSettings", "InstallPath", NULL, buf, bufsize, "msys.ini"); if (!res) break; if (strlen (buf) < bufsize) break; res = 0; free (buf); bufsize *= 2; if (bufsize > 65536) { buf = NULL; break; } } if (res) return tack_on_executable (buf, executable); /* failed */ if (buf) free (buf); return executable; } #endif /* Return a Windows command-line from ARGV. It is the caller's responsibility to free the string returned. */ static char * argv_to_cmdline (char *const *argv) { char *cmdline; char *p; size_t cmdline_len; int i, j, k; cmdline_len = 0; for (i = 0; argv[i]; i++) { /* We quote every last argument. This simplifies the problem; we need only escape embedded double-quotes and immediately preceeding backslash characters. A sequence of backslach characters that is not follwed by a double quote character will not be escaped. */ for (j = 0; argv[i][j]; j++) { if (argv[i][j] == '"') { /* Escape preceeding backslashes. */ for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--) cmdline_len++; /* Escape the qote character. */ cmdline_len++; } } /* Trailing backslashes also need to be escaped because they will be followed by the terminating quote. */ for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--) cmdline_len++; cmdline_len += j; cmdline_len += 3; /* for leading and trailing quotes and space */ } cmdline = XNEWVEC (char, cmdline_len); p = cmdline; for (i = 0; argv[i]; i++) { *p++ = '"'; for (j = 0; argv[i][j]; j++) { if (argv[i][j] == '"') { for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--) *p++ = '\\'; *p++ = '\\'; } *p++ = argv[i][j]; } for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--) *p++ = '\\'; *p++ = '"'; *p++ = ' '; } p[-1] = '\0'; return cmdline; } /* We'll try the passed filename with all the known standard extensions, and then without extension. We try no extension last so that we don't try to run some random extension-less file that might be hanging around. We try both extension and no extension so that we don't need any fancy logic to determine if a file has extension. */ static const char *const std_suffixes[] = { ".com", ".exe", ".bat", ".cmd", "", 0 }; /* Returns the full path to PROGRAM. If SEARCH is true, look for PROGRAM in each directory in PATH. */ static char * find_executable (const char *program, BOOL search) { char *full_executable; char *e; size_t fe_len; const char *path = 0; const char *const *ext; const char *p, *q; size_t proglen = strlen (program); int has_slash = (strchr (program, '/') || strchr (program, '\\')); HANDLE h; if (has_slash) search = FALSE; if (search) path = getenv ("PATH"); if (!path) path = ""; fe_len = 0; for (p = path; *p; p = q) { q = p; while (*q != ';' && *q != '\0') q++; if ((size_t)(q - p) > fe_len) fe_len = q - p; if (*q == ';') q++; } fe_len = fe_len + 1 + proglen + 5 /* space for extension */; full_executable = XNEWVEC (char, fe_len); p = path; do { q = p; while (*q != ';' && *q != '\0') q++; e = full_executable; memcpy (e, p, q - p); e += (q - p); if (q - p) *e++ = '\\'; strcpy (e, program); if (*q == ';') q++; for (e = full_executable; *e; e++) if (*e == '/') *e = '\\'; /* At this point, e points to the terminating NUL character for full_executable. */ for (ext = std_suffixes; *ext; ext++) { /* Remove any current extension. */ *e = '\0'; /* Add the new one. */ strcat (full_executable, *ext); /* Attempt to open this file. */ h = CreateFile (full_executable, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if (h != INVALID_HANDLE_VALUE) goto found; } p = q; } while (*p); free (full_executable); return 0; found: CloseHandle (h); return full_executable; } /* Low-level process creation function and helper. */ static int env_compare (const void *a_ptr, const void *b_ptr) { const char *a; const char *b; unsigned char c1; unsigned char c2; a = *(const char **) a_ptr; b = *(const char **) b_ptr; /* a and b will be of the form: VAR=VALUE We compare only the variable name part here using a case-insensitive comparison algorithm. It might appear that in fact strcasecmp () can take the place of this whole function, and indeed it could, save for the fact that it would fail in cases such as comparing A1=foo and A=bar (because 1 is less than = in the ASCII character set). (Environment variables containing no numbers would work in such a scenario.) */ do { c1 = (unsigned char) tolower (*a++); c2 = (unsigned char) tolower (*b++); if (c1 == '=') c1 = '\0'; if (c2 == '=') c2 = '\0'; } while (c1 == c2 && c1 != '\0'); return c1 - c2; } static pid_t win32_spawn (const char *executable, BOOL search, char *const *argv, char *const *env, /* array of strings of the form: VAR=VALUE */ DWORD dwCreationFlags, LPSTARTUPINFO si, LPPROCESS_INFORMATION pi) { char *full_executable; char *cmdline; char **env_copy; char *env_block = NULL; full_executable = NULL; cmdline = NULL; if (env) { int env_size; /* Count the number of environment bindings supplied. */ for (env_size = 0; env[env_size]; env_size++) continue; /* Assemble an environment block, if required. This consists of VAR=VALUE strings juxtaposed (with one null character between each pair) and an additional null at the end. */ if (env_size > 0) { int var; int total_size = 1; /* 1 is for the final null. */ char *bufptr; /* Windows needs the members of the block to be sorted by variable name. */ env_copy = (char **) alloca (sizeof (char *) * env_size); memcpy (env_copy, env, sizeof (char *) * env_size); qsort (env_copy, env_size, sizeof (char *), env_compare); for (var = 0; var < env_size; var++) total_size += strlen (env[var]) + 1; env_block = XNEWVEC (char, total_size); bufptr = env_block; for (var = 0; var < env_size; var++) bufptr = stpcpy (bufptr, env_copy[var]) + 1; *bufptr = '\0'; } } full_executable = find_executable (executable, search); if (!full_executable) goto error; cmdline = argv_to_cmdline (argv); if (!cmdline) goto error; /* Create the child process. */ if (!CreateProcess (full_executable, cmdline, /*lpProcessAttributes=*/NULL, /*lpThreadAttributes=*/NULL, /*bInheritHandles=*/TRUE, dwCreationFlags, (LPVOID) env_block, /*lpCurrentDirectory=*/NULL, si, pi)) { if (env_block) free (env_block); free (full_executable); return (pid_t) -1; } /* Clean up. */ CloseHandle (pi->hThread); free (full_executable); if (env_block) free (env_block); return (pid_t) pi->hProcess; error: if (env_block) free (env_block); if (cmdline) free (cmdline); if (full_executable) free (full_executable); return (pid_t) -1; } static pid_t spawn_script (const char *executable, char *const *argv, char* const *env, DWORD dwCreationFlags, LPSTARTUPINFO si, LPPROCESS_INFORMATION pi) { pid_t pid = (pid_t) -1; int save_errno = errno; int fd = _open (executable, _O_RDONLY); if (fd >= 0) { char buf[MAX_PATH + 5]; int len = _read (fd, buf, sizeof (buf) - 1); _close (fd); if (len > 3) { char *eol; buf[len] = '\0'; eol = strchr (buf, '\n'); if (eol && strncmp (buf, "#!", 2) == 0) { char *executable1; const char ** avhere = (const char **) --argv; do *eol = '\0'; while (*--eol == '\r' || *eol == ' ' || *eol == '\t'); for (executable1 = buf + 2; *executable1 == ' ' || *executable1 == '\t'; executable1++) continue; backslashify (executable1); *avhere = executable1; #ifndef USE_MINGW_MSYS executable = strrchr (executable1, '\\') + 1; if (!executable) executable = executable1; pid = win32_spawn (executable, TRUE, argv, env, dwCreationFlags, si, pi); #else if (strchr (executable1, '\\') == NULL) pid = win32_spawn (executable1, TRUE, argv, env, dwCreationFlags, si, pi); else if (executable1[0] != '\\') pid = win32_spawn (executable1, FALSE, argv, env, dwCreationFlags, si, pi); else { const char *newex = mingw_rootify (executable1); *avhere = newex; pid = win32_spawn (newex, FALSE, argv, env, dwCreationFlags, si, pi); if (executable1 != newex) free ((char *) newex); if ((long) pid < 0) { newex = msys_rootify (executable1); if (newex != executable1) { *avhere = newex; pid = win32_spawn (newex, FALSE, argv, env, dwCreationFlags, si, pi); free ((char *) newex); } } } #endif } } } if ((long) pid < 0) errno = save_errno; return pid; } /* Execute a child. */ static pid_t pex_win32_exec_child (struct pex_obj *obj ATTRIBUTE_UNUSED, int flags, const char *executable, char * const * argv, char* const* env, int in, int out, int errdes, int toclose ATTRIBUTE_UNUSED, const char **errmsg, int *err) { pid_t pid; HANDLE stdin_handle; HANDLE stdout_handle; HANDLE stderr_handle; DWORD dwCreationFlags; OSVERSIONINFO version_info; STARTUPINFO si; PROCESS_INFORMATION pi; stdin_handle = INVALID_HANDLE_VALUE; stdout_handle = INVALID_HANDLE_VALUE; stderr_handle = INVALID_HANDLE_VALUE; stdin_handle = (HANDLE) _get_osfhandle (in); stdout_handle = (HANDLE) _get_osfhandle (out); if (!(flags & PEX_STDERR_TO_STDOUT)) stderr_handle = (HANDLE) _get_osfhandle (errdes); else stderr_handle = stdout_handle; /* Determine the version of Windows we are running on. */ version_info.dwOSVersionInfoSize = sizeof (version_info); GetVersionEx (&version_info); if (version_info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) /* On Windows 95/98/ME the CREATE_NO_WINDOW flag is not supported, so we cannot avoid creating a console window. */ dwCreationFlags = 0; else { HANDLE conout_handle; /* Determine whether or not we have an associated console. */ conout_handle = CreateFile("CONOUT$", GENERIC_WRITE, FILE_SHARE_WRITE, /*lpSecurityAttributes=*/NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, /*hTemplateFile=*/NULL); if (conout_handle == INVALID_HANDLE_VALUE) /* There is no console associated with this process. Since the child is a console process, the OS would normally create a new console Window for the child. Since we'll be redirecting the child's standard streams, we do not need the console window. */ dwCreationFlags = CREATE_NO_WINDOW; else { /* There is a console associated with the process, so the OS will not create a new console. And, if we use CREATE_NO_WINDOW in this situation, the child will have no associated console. Therefore, if the child's standard streams are connected to the console, the output will be discarded. */ CloseHandle(conout_handle); dwCreationFlags = 0; } } /* Since the child will be a console process, it will, by default, connect standard input/output to its console. However, we want the child to use the handles specifically designated above. In addition, if there is no console (such as when we are running in a Cygwin X window), then we must redirect the child's input/output, as there is no console for the child to use. */ memset (&si, 0, sizeof (si)); si.cb = sizeof (si); si.dwFlags = STARTF_USESTDHANDLES; si.hStdInput = stdin_handle; si.hStdOutput = stdout_handle; si.hStdError = stderr_handle; /* Create the child process. */ pid = win32_spawn (executable, (flags & PEX_SEARCH) != 0, argv, env, dwCreationFlags, &si, &pi); if (pid == (pid_t) -1) pid = spawn_script (executable, argv, env, dwCreationFlags, &si, &pi); if (pid == (pid_t) -1) { *err = ENOENT; *errmsg = "CreateProcess"; } /* Close the standard output and standard error handles in the parent. */ if (out != STDOUT_FILENO) obj->funcs->close (obj, out); if (errdes != STDERR_FILENO) obj->funcs->close (obj, errdes); return pid; } /* Wait for a child process to complete. MS CRTDLL doesn't return enough information in status to decide if the child exited due to a signal or not, rather it simply returns an integer with the exit code of the child; eg., if the child exited with an abort() call and didn't have a handler for SIGABRT, it simply returns with status == 3. We fix the status code to conform to the usual WIF* macros. Note that WIFSIGNALED will never be true under CRTDLL. */ static int pex_win32_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid, int *status, struct pex_time *time, int done ATTRIBUTE_UNUSED, const char **errmsg, int *err) { DWORD termstat; HANDLE h; if (time != NULL) memset (time, 0, sizeof *time); h = (HANDLE) pid; /* FIXME: If done is non-zero, we should probably try to kill the process. */ if (WaitForSingleObject (h, INFINITE) != WAIT_OBJECT_0) { CloseHandle (h); *err = ECHILD; *errmsg = "WaitForSingleObject"; return -1; } GetExitCodeProcess (h, &termstat); CloseHandle (h); /* A value of 3 indicates that the child caught a signal, but not which one. Since only SIGABRT, SIGFPE and SIGINT do anything, we report SIGABRT. */ if (termstat == 3) *status = SIGABRT; else *status = (termstat & 0xff) << 8; return 0; } /* Create a pipe. */ static int pex_win32_pipe (struct pex_obj *obj ATTRIBUTE_UNUSED, int *p, int binary) { return _pipe (p, 256, binary ? _O_BINARY : _O_TEXT); } /* Get a FILE pointer to read from a file descriptor. */ static FILE * pex_win32_fdopenr (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd, int binary) { return fdopen (fd, binary ? "rb" : "r"); } static FILE * pex_win32_fdopenw (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd, int binary) { HANDLE h = (HANDLE) _get_osfhandle (fd); if (h == INVALID_HANDLE_VALUE) return NULL; if (! SetHandleInformation (h, HANDLE_FLAG_INHERIT, 0)) return NULL; return fdopen (fd, binary ? "wb" : "w"); } #ifdef MAIN #include int main (int argc ATTRIBUTE_UNUSED, char **argv) { char const *errmsg; int err; argv++; printf ("%ld\n", (long) pex_win32_exec_child (NULL, PEX_SEARCH, argv[0], argv, NULL, 0, 0, 1, 2, &errmsg, &err)); exit (0); } #endif nescc-1.3.4/libiberty/pexecute.c000066400000000000000000000063221177770303300166000ustar00rootroot00000000000000/* Utilities to execute a program in a subprocess (possibly linked by pipes with other subprocesses), and wait for it. Copyright (C) 2004 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* pexecute is an old routine. This implementation uses the newer pex_init/pex_run/pex_get_status/pex_free routines. Don't use pexecute in new code. Use the newer routines instead. */ #include "config.h" #include "libiberty.h" #ifdef HAVE_STDLIB_H #include #endif /* We only permit a single pexecute chain to execute at a time. This was always true anyhow, though it wasn't documented. */ static struct pex_obj *pex; static int idx; int pexecute (const char *program, char * const *argv, const char *pname, const char *temp_base, char **errmsg_fmt, char **errmsg_arg, int flags) { const char *errmsg; int err; if ((flags & PEXECUTE_FIRST) != 0) { if (pex != NULL) { *errmsg_fmt = (char *) "pexecute already in progress"; *errmsg_arg = NULL; return -1; } pex = pex_init (PEX_USE_PIPES, pname, temp_base); idx = 0; } else { if (pex == NULL) { *errmsg_fmt = (char *) "pexecute not in progress"; *errmsg_arg = NULL; return -1; } } errmsg = pex_run (pex, (((flags & PEXECUTE_LAST) != 0 ? PEX_LAST : 0) | ((flags & PEXECUTE_SEARCH) != 0 ? PEX_SEARCH : 0)), program, argv, NULL, NULL, &err); if (errmsg != NULL) { *errmsg_fmt = (char *) errmsg; *errmsg_arg = NULL; return -1; } /* Instead of a PID, we just return a one-based index into the status values. We avoid zero just because the old pexecute would never return it. */ return ++idx; } int pwait (int pid, int *status, int flags ATTRIBUTE_UNUSED) { /* The PID returned by pexecute is one-based. */ --pid; if (pex == NULL || pid < 0 || pid >= idx) return -1; if (pid == 0 && idx == 1) { if (!pex_get_status (pex, 1, status)) return -1; } else { int *vector; vector = XNEWVEC (int, idx); if (!pex_get_status (pex, idx, vector)) { free (vector); return -1; } *status = vector[pid]; free (vector); } /* Assume that we are done after the caller has retrieved the last exit status. The original implementation did not require that the exit statuses be retrieved in order, but this implementation does. */ if (pid + 1 == idx) { pex_free (pex); pex = NULL; idx = 0; } return pid + 1; } nescc-1.3.4/libiberty/pexecute.txh000066400000000000000000000271741177770303300171710ustar00rootroot00000000000000@c -*- mode: texinfo -*- @deftypefn Extension {struct pex_obj *} pex_init (int @var{flags}, const char *@var{pname}, const char *@var{tempbase}) Prepare to execute one or more programs, with standard output of each program fed to standard input of the next. This is a system independent interface to execute a pipeline. @var{flags} is a bitwise combination of the following: @table @code @vindex PEX_RECORD_TIMES @item PEX_RECORD_TIMES Record subprocess times if possible. @vindex PEX_USE_PIPES @item PEX_USE_PIPES Use pipes for communication between processes, if possible. @vindex PEX_SAVE_TEMPS @item PEX_SAVE_TEMPS Don't delete temporary files used for communication between processes. @end table @var{pname} is the name of program to be executed, used in error messages. @var{tempbase} is a base name to use for any required temporary files; it may be @code{NULL} to use a randomly chosen name. @end deftypefn @deftypefn Extension {const char *} pex_run (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{executable}, char * const *@var{argv}, const char *@var{outname}, const char *@var{errname}, int *@var{err}) Execute one program in a pipeline. On success this returns @code{NULL}. On failure it returns an error message, a statically allocated string. @var{obj} is returned by a previous call to @code{pex_init}. @var{flags} is a bitwise combination of the following: @table @code @vindex PEX_LAST @item PEX_LAST This must be set on the last program in the pipeline. In particular, it should be set when executing a single program. The standard output of the program will be sent to @var{outname}, or, if @var{outname} is @code{NULL}, to the standard output of the calling program. Do @emph{not} set this bit if you want to call @code{pex_read_output} (described below). After a call to @code{pex_run} with this bit set, @var{pex_run} may no longer be called with the same @var{obj}. @vindex PEX_SEARCH @item PEX_SEARCH Search for the program using the user's executable search path. @vindex PEX_SUFFIX @item PEX_SUFFIX @var{outname} is a suffix. See the description of @var{outname}, below. @vindex PEX_STDERR_TO_STDOUT @item PEX_STDERR_TO_STDOUT Send the program's standard error to standard output, if possible. @vindex PEX_BINARY_INPUT @vindex PEX_BINARY_OUTPUT @vindex PEX_BINARY_ERROR @item PEX_BINARY_INPUT @itemx PEX_BINARY_OUTPUT @itemx PEX_BINARY_ERROR The standard input (output or error) of the program should be read (written) in binary mode rather than text mode. These flags are ignored on systems which do not distinguish binary mode and text mode, such as Unix. For proper behavior these flags should match appropriately---a call to @code{pex_run} using @code{PEX_BINARY_OUTPUT} should be followed by a call using @code{PEX_BINARY_INPUT}. @vindex PEX_STDERR_TO_PIPE @item PEX_STDERR_TO_PIPE Send the program's standard error to a pipe, if possible. This flag cannot be specified together with @code{PEX_STDERR_TO_STDOUT}. This flag can be specified only on the last program in pipeline. @end table @var{executable} is the program to execute. @var{argv} is the set of arguments to pass to the program; normally @code{@var{argv}[0]} will be a copy of @var{executable}. @var{outname} is used to set the name of the file to use for standard output. There are two cases in which no output file will be used: @enumerate @item if @code{PEX_LAST} is not set in @var{flags}, and @code{PEX_USE_PIPES} was set in the call to @code{pex_init}, and the system supports pipes @item if @code{PEX_LAST} is set in @var{flags}, and @var{outname} is @code{NULL} @end enumerate @noindent Otherwise the code will use a file to hold standard output. If @code{PEX_LAST} is not set, this file is considered to be a temporary file, and it will be removed when no longer needed, unless @code{PEX_SAVE_TEMPS} was set in the call to @code{pex_init}. There are two cases to consider when setting the name of the file to hold standard output. @enumerate @item @code{PEX_SUFFIX} is set in @var{flags}. In this case @var{outname} may not be @code{NULL}. If the @var{tempbase} parameter to @code{pex_init} was not @code{NULL}, then the output file name is the concatenation of @var{tempbase} and @var{outname}. If @var{tempbase} was @code{NULL}, then the output file name is a random file name ending in @var{outname}. @item @code{PEX_SUFFIX} was not set in @var{flags}. In this case, if @var{outname} is not @code{NULL}, it is used as the output file name. If @var{outname} is @code{NULL}, and @var{tempbase} was not NULL, the output file name is randomly chosen using @var{tempbase}. Otherwise the output file name is chosen completely at random. @end enumerate @var{errname} is the file name to use for standard error output. If it is @code{NULL}, standard error is the same as the caller's. Otherwise, standard error is written to the named file. On an error return, the code sets @code{*@var{err}} to an @code{errno} value, or to 0 if there is no relevant @code{errno}. @end deftypefn @deftypefn Extension {const char *} pex_run_in_environment (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{executable}, char * const *@var{argv}, char * const *@var{env}, int @var{env_size}, const char *@var{outname}, const char *@var{errname}, int *@var{err}) Execute one program in a pipeline, permitting the environment for the program to be specified. Behaviour and parameters not listed below are as for @code{pex_run}. @var{env} is the environment for the child process, specified as an array of character pointers. Each element of the array should point to a string of the form @code{VAR=VALUE}, with the exception of the last element that must be @code{NULL}. @end deftypefn @deftypefn Extension {FILE *} pex_input_file (struct pex_obj *@var{obj}, int @var{flags}, const char *@var{in_name}) Return a stream for a temporary file to pass to the first program in the pipeline as input. The name of the input file is chosen according to the same rules @code{pex_run} uses to choose output file names, based on @var{in_name}, @var{obj} and the @code{PEX_SUFFIX} bit in @var{flags}. Don't call @code{fclose} on the returned stream; the first call to @code{pex_run} closes it automatically. If @var{flags} includes @code{PEX_BINARY_OUTPUT}, open the stream in binary mode; otherwise, open it in the default mode. Including @code{PEX_BINARY_OUTPUT} in @var{flags} has no effect on Unix. @end deftypefn @deftypefn Extension {FILE *} pex_input_pipe (struct pex_obj *@var{obj}, int @var{binary}) Return a stream @var{fp} for a pipe connected to the standard input of the first program in the pipeline; @var{fp} is opened for writing. You must have passed @code{PEX_USE_PIPES} to the @code{pex_init} call that returned @var{obj}. You must close @var{fp} using @code{fclose} yourself when you have finished writing data to the pipeline. The file descriptor underlying @var{fp} is marked not to be inherited by child processes. On systems that do not support pipes, this function returns @code{NULL}, and sets @code{errno} to @code{EINVAL}. If you would like to write code that is portable to all systems the @code{pex} functions support, consider using @code{pex_input_file} instead. There are two opportunities for deadlock using @code{pex_input_pipe}: @itemize @bullet @item Most systems' pipes can buffer only a fixed amount of data; a process that writes to a full pipe blocks. Thus, if you write to @file{fp} before starting the first process, you run the risk of blocking when there is no child process yet to read the data and allow you to continue. @code{pex_input_pipe} makes no promises about the size of the pipe's buffer, so if you need to write any data at all before starting the first process in the pipeline, consider using @code{pex_input_file} instead. @item Using @code{pex_input_pipe} and @code{pex_read_output} together may also cause deadlock. If the output pipe fills up, so that each program in the pipeline is waiting for the next to read more data, and you fill the input pipe by writing more data to @var{fp}, then there is no way to make progress: the only process that could read data from the output pipe is you, but you are blocked on the input pipe. @end itemize @end deftypefn @deftypefn Extension {FILE *} pex_read_output (struct pex_obj *@var{obj}, int @var{binary}) Returns a @code{FILE} pointer which may be used to read the standard output of the last program in the pipeline. When this is used, @code{PEX_LAST} should not be used in a call to @code{pex_run}. After this is called, @code{pex_run} may no longer be called with the same @var{obj}. @var{binary} should be non-zero if the file should be opened in binary mode. Don't call @code{fclose} on the returned file; it will be closed by @code{pex_free}. @end deftypefn @deftypefn Extension {FILE *} pex_read_err (struct pex_obj *@var{obj}, int @var{binary}) Returns a @code{FILE} pointer which may be used to read the standard error of the last program in the pipeline. When this is used, @code{PEX_LAST} should not be used in a call to @code{pex_run}. After this is called, @code{pex_run} may no longer be called with the same @var{obj}. @var{binary} should be non-zero if the file should be opened in binary mode. Don't call @code{fclose} on the returned file; it will be closed by @code{pex_free}. @end deftypefn @deftypefn Extension int pex_get_status (struct pex_obj *@var{obj}, int @var{count}, int *@var{vector}) Returns the exit status of all programs run using @var{obj}. @var{count} is the number of results expected. The results will be placed into @var{vector}. The results are in the order of the calls to @code{pex_run}. Returns 0 on error, 1 on success. @end deftypefn @deftypefn Extension int pex_get_times (struct pex_obj *@var{obj}, int @var{count}, struct pex_time *@var{vector}) Returns the process execution times of all programs run using @var{obj}. @var{count} is the number of results expected. The results will be placed into @var{vector}. The results are in the order of the calls to @code{pex_run}. Returns 0 on error, 1 on success. @code{struct pex_time} has the following fields of the type @code{unsigned long}: @code{user_seconds}, @code{user_microseconds}, @code{system_seconds}, @code{system_microseconds}. On systems which do not support reporting process times, all the fields will be set to @code{0}. @end deftypefn @deftypefn Extension void pex_free (struct pex_obj @var{obj}) Clean up and free all data associated with @var{obj}. If you have not yet called @code{pex_get_times} or @code{pex_get_status}, this will try to kill the subprocesses. @end deftypefn @deftypefn Extension {const char *} pex_one (int @var{flags}, const char *@var{executable}, char * const *@var{argv}, const char *@var{pname}, const char *@var{outname}, const char *@var{errname}, int *@var{status}, int *@var{err}) An interface to permit the easy execution of a single program. The return value and most of the parameters are as for a call to @code{pex_run}. @var{flags} is restricted to a combination of @code{PEX_SEARCH}, @code{PEX_STDERR_TO_STDOUT}, and @code{PEX_BINARY_OUTPUT}. @var{outname} is interpreted as if @code{PEX_LAST} were set. On a successful return, @code{*@var{status}} will be set to the exit status of the program. @end deftypefn @deftypefn Extension int pexecute (const char *@var{program}, char * const *@var{argv}, const char *@var{this_pname}, const char *@var{temp_base}, char **@var{errmsg_fmt}, char **@var{errmsg_arg}, int @var{flags}) This is the old interface to execute one or more programs. It is still supported for compatibility purposes, but is no longer documented. @end deftypefn @deftypefn Extension int pwait (int @var{pid}, int *@var{status}, int @var{flags}) Another part of the old execution interface. @end deftypefn nescc-1.3.4/libiberty/physmem.c000066400000000000000000000162451177770303300164450ustar00rootroot00000000000000/* Calculate the size of physical memory. Copyright 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. This program 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. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Paul Eggert. */ #if HAVE_CONFIG_H # include #endif #if HAVE_UNISTD_H # include #endif #if HAVE_SYS_PSTAT_H # include #endif #if HAVE_SYS_SYSMP_H # include #endif #if HAVE_SYS_SYSINFO_H && HAVE_MACHINE_HAL_SYSINFO_H # include # include #endif #if HAVE_SYS_TABLE_H # include #endif #include #if HAVE_SYS_PARAM_H # include #endif #if HAVE_SYS_SYSCTL_H # include #endif #if HAVE_SYS_SYSTEMCFG_H # include #endif #ifdef _WIN32 # define WIN32_LEAN_AND_MEAN # include /* MEMORYSTATUSEX is missing from older windows headers, so define a local replacement. */ typedef struct { DWORD dwLength; DWORD dwMemoryLoad; DWORDLONG ullTotalPhys; DWORDLONG ullAvailPhys; DWORDLONG ullTotalPageFile; DWORDLONG ullAvailPageFile; DWORDLONG ullTotalVirtual; DWORDLONG ullAvailVirtual; DWORDLONG ullAvailExtendedVirtual; } lMEMORYSTATUSEX; typedef WINBOOL (WINAPI *PFN_MS_EX) (lMEMORYSTATUSEX*); #endif #include "libiberty.h" /* Return the total amount of physical memory. */ double physmem_total (void) { #if defined _SC_PHYS_PAGES && defined _SC_PAGESIZE { /* This works on linux-gnu, solaris2 and cygwin. */ double pages = sysconf (_SC_PHYS_PAGES); double pagesize = sysconf (_SC_PAGESIZE); if (0 <= pages && 0 <= pagesize) return pages * pagesize; } #endif #if HAVE_PSTAT_GETSTATIC { /* This works on hpux11. */ struct pst_static pss; if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0)) { double pages = pss.physical_memory; double pagesize = pss.page_size; if (0 <= pages && 0 <= pagesize) return pages * pagesize; } } #endif #if HAVE_SYSMP && defined MP_SAGET && defined MPSA_RMINFO && defined _SC_PAGESIZE { /* This works on irix6. */ struct rminfo realmem; if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0) { double pagesize = sysconf (_SC_PAGESIZE); double pages = realmem.physmem; if (0 <= pages && 0 <= pagesize) return pages * pagesize; } } #endif #if HAVE_GETSYSINFO && defined GSI_PHYSMEM { /* This works on Tru64 UNIX V4/5. */ int physmem; if (getsysinfo (GSI_PHYSMEM, (caddr_t) &physmem, sizeof (physmem), NULL, NULL, NULL) == 1) { double kbytes = physmem; if (0 <= kbytes) return kbytes * 1024.0; } } #endif #if HAVE_SYSCTL && defined HW_PHYSMEM { /* This works on *bsd and darwin. */ unsigned int physmem; size_t len = sizeof physmem; static int mib[2] = { CTL_HW, HW_PHYSMEM }; if (sysctl (mib, ARRAY_SIZE (mib), &physmem, &len, NULL, 0) == 0 && len == sizeof (physmem)) return (double) physmem; } #endif #if HAVE__SYSTEM_CONFIGURATION /* This works on AIX 4.3.3+. */ return _system_configuration.physmem; #endif #if defined _WIN32 { /* this works on windows */ PFN_MS_EX pfnex; HMODULE h = GetModuleHandle ("kernel32.dll"); if (!h) return 0.0; /* Use GlobalMemoryStatusEx if available. */ if ((pfnex = (PFN_MS_EX) GetProcAddress (h, "GlobalMemoryStatusEx"))) { lMEMORYSTATUSEX lms_ex; lms_ex.dwLength = sizeof lms_ex; if (!pfnex (&lms_ex)) return 0.0; return (double) lms_ex.ullTotalPhys; } /* Fall back to GlobalMemoryStatus which is always available. but returns wrong results for physical memory > 4GB. */ else { MEMORYSTATUS ms; GlobalMemoryStatus (&ms); return (double) ms.dwTotalPhys; } } #endif /* Return 0 if we can't determine the value. */ return 0; } /* Return the amount of physical memory available. */ double physmem_available (void) { #if defined _SC_AVPHYS_PAGES && defined _SC_PAGESIZE { /* This works on linux-gnu, solaris2 and cygwin. */ double pages = sysconf (_SC_AVPHYS_PAGES); double pagesize = sysconf (_SC_PAGESIZE); if (0 <= pages && 0 <= pagesize) return pages * pagesize; } #endif #if HAVE_PSTAT_GETSTATIC && HAVE_PSTAT_GETDYNAMIC { /* This works on hpux11. */ struct pst_static pss; struct pst_dynamic psd; if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0) && 0 <= pstat_getdynamic (&psd, sizeof psd, 1, 0)) { double pages = psd.psd_free; double pagesize = pss.page_size; if (0 <= pages && 0 <= pagesize) return pages * pagesize; } } #endif #if HAVE_SYSMP && defined MP_SAGET && defined MPSA_RMINFO && defined _SC_PAGESIZE { /* This works on irix6. */ struct rminfo realmem; if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0) { double pagesize = sysconf (_SC_PAGESIZE); double pages = realmem.availrmem; if (0 <= pages && 0 <= pagesize) return pages * pagesize; } } #endif #if HAVE_TABLE && defined TBL_VMSTATS { /* This works on Tru64 UNIX V4/5. */ struct tbl_vmstats vmstats; if (table (TBL_VMSTATS, 0, &vmstats, 1, sizeof (vmstats)) == 1) { double pages = vmstats.free_count; double pagesize = vmstats.pagesize; if (0 <= pages && 0 <= pagesize) return pages * pagesize; } } #endif #if HAVE_SYSCTL && defined HW_USERMEM { /* This works on *bsd and darwin. */ unsigned int usermem; size_t len = sizeof usermem; static int mib[2] = { CTL_HW, HW_USERMEM }; if (sysctl (mib, ARRAY_SIZE (mib), &usermem, &len, NULL, 0) == 0 && len == sizeof (usermem)) return (double) usermem; } #endif #if defined _WIN32 { /* this works on windows */ PFN_MS_EX pfnex; HMODULE h = GetModuleHandle ("kernel32.dll"); if (!h) return 0.0; /* Use GlobalMemoryStatusEx if available. */ if ((pfnex = (PFN_MS_EX) GetProcAddress (h, "GlobalMemoryStatusEx"))) { lMEMORYSTATUSEX lms_ex; lms_ex.dwLength = sizeof lms_ex; if (!pfnex (&lms_ex)) return 0.0; return (double) lms_ex.ullAvailPhys; } /* Fall back to GlobalMemoryStatus which is always available. but returns wrong results for physical memory > 4GB */ else { MEMORYSTATUS ms; GlobalMemoryStatus (&ms); return (double) ms.dwAvailPhys; } } #endif /* Guess 25% of physical memory. */ return physmem_total () / 4; } #if DEBUG # include # include int main (void) { printf ("%12.f %12.f\n", physmem_total (), physmem_available ()); exit (0); } #endif /* DEBUG */ /* Local Variables: compile-command: "gcc -DDEBUG -DHAVE_CONFIG_H -I.. -g -O -Wall -W physmem.c" End: */ nescc-1.3.4/libiberty/putenv.c000066400000000000000000000042541177770303300163010ustar00rootroot00000000000000/* Copyright (C) 1991, 1994, 1995, 1996, 2002 Free Software Foundation, Inc. This file based on putenv.c in the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* @deftypefn Supplemental int putenv (const char *@var{string}) Uses @code{setenv} or @code{unsetenv} to put @var{string} into the environment or remove it. If @var{string} is of the form @samp{name=value} the string is added; if no @samp{=} is present the name is unset/removed. @end deftypefn */ #if defined (_AIX) && !defined (__GNUC__) #pragma alloca #endif #if HAVE_CONFIG_H # include #endif #include "ansidecl.h" #define putenv libiberty_putenv #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #ifdef HAVE_ALLOCA_H # include #else # ifndef alloca # ifdef __GNUC__ # define alloca __builtin_alloca # else extern char *alloca (); # endif /* __GNUC__ */ # endif /* alloca */ #endif /* HAVE_ALLOCA_H */ #undef putenv /* Below this point, it's verbatim code from the glibc-2.0 implementation */ /* Put STRING, which is of the form "NAME=VALUE", in the environment. */ int putenv (const char *string) { const char *const name_end = strchr (string, '='); if (name_end) { char *name = (char *) alloca (name_end - string + 1); memcpy (name, string, name_end - string); name[name_end - string] = '\0'; return setenv (name, name_end + 1, 1); } unsetenv (string); return 0; } nescc-1.3.4/libiberty/random.c000066400000000000000000000337771177770303300162540ustar00rootroot00000000000000/* * Copyright (c) 1983 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. [rescinded 22 July 1999] * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * This is derived from the Berkeley source: * @(#)random.c 5.5 (Berkeley) 7/6/88 * It was reworked for the GNU C Library by Roland McGrath. */ /* @deftypefn Supplement {long int} random (void) @deftypefnx Supplement void srandom (unsigned int @var{seed}) @deftypefnx Supplement void* initstate (unsigned int @var{seed}, void *@var{arg_state}, unsigned long @var{n}) @deftypefnx Supplement void* setstate (void *@var{arg_state}) Random number functions. @code{random} returns a random number in the range 0 to @code{LONG_MAX}. @code{srandom} initializes the random number generator to some starting point determined by @var{seed} (else, the values returned by @code{random} are always the same for each run of the program). @code{initstate} and @code{setstate} allow fine-grained control over the state of the random number generator. @end deftypefn */ #include #if 0 #include #include #include #include #else #define ULONG_MAX ((unsigned long)(~0L)) /* 0xFFFFFFFF for 32-bits */ #define LONG_MAX ((long)(ULONG_MAX >> 1)) /* 0x7FFFFFFF for 32-bits*/ #ifdef __STDC__ # define PTR void * # ifndef NULL # define NULL (void *) 0 # endif #else # define PTR char * # ifndef NULL # define NULL (void *) 0 # endif #endif #endif long int random (void); /* An improved random number generation package. In addition to the standard rand()/srand() like interface, this package also has a special state info interface. The initstate() routine is called with a seed, an array of bytes, and a count of how many bytes are being passed in; this array is then initialized to contain information for random number generation with that much state information. Good sizes for the amount of state information are 32, 64, 128, and 256 bytes. The state can be switched by calling the setstate() function with the same array as was initiallized with initstate(). By default, the package runs with 128 bytes of state information and generates far better random numbers than a linear congruential generator. If the amount of state information is less than 32 bytes, a simple linear congruential R.N.G. is used. Internally, the state information is treated as an array of longs; the zeroeth element of the array is the type of R.N.G. being used (small integer); the remainder of the array is the state information for the R.N.G. Thus, 32 bytes of state information will give 7 longs worth of state information, which will allow a degree seven polynomial. (Note: The zeroeth word of state information also has some other information stored in it; see setstate for details). The random number generation technique is a linear feedback shift register approach, employing trinomials (since there are fewer terms to sum up that way). In this approach, the least significant bit of all the numbers in the state table will act as a linear feedback shift register, and will have period 2^deg - 1 (where deg is the degree of the polynomial being used, assuming that the polynomial is irreducible and primitive). The higher order bits will have longer periods, since their values are also influenced by pseudo-random carries out of the lower bits. The total period of the generator is approximately deg*(2**deg - 1); thus doubling the amount of state information has a vast influence on the period of the generator. Note: The deg*(2**deg - 1) is an approximation only good for large deg, when the period of the shift register is the dominant factor. With deg equal to seven, the period is actually much longer than the 7*(2**7 - 1) predicted by this formula. */ /* For each of the currently supported random number generators, we have a break value on the amount of state information (you need at least thi bytes of state info to support this random number generator), a degree for the polynomial (actually a trinomial) that the R.N.G. is based on, and separation between the two lower order coefficients of the trinomial. */ /* Linear congruential. */ #define TYPE_0 0 #define BREAK_0 8 #define DEG_0 0 #define SEP_0 0 /* x**7 + x**3 + 1. */ #define TYPE_1 1 #define BREAK_1 32 #define DEG_1 7 #define SEP_1 3 /* x**15 + x + 1. */ #define TYPE_2 2 #define BREAK_2 64 #define DEG_2 15 #define SEP_2 1 /* x**31 + x**3 + 1. */ #define TYPE_3 3 #define BREAK_3 128 #define DEG_3 31 #define SEP_3 3 /* x**63 + x + 1. */ #define TYPE_4 4 #define BREAK_4 256 #define DEG_4 63 #define SEP_4 1 /* Array versions of the above information to make code run faster. Relies on fact that TYPE_i == i. */ #define MAX_TYPES 5 /* Max number of types above. */ static int degrees[MAX_TYPES] = { DEG_0, DEG_1, DEG_2, DEG_3, DEG_4 }; static int seps[MAX_TYPES] = { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 }; /* Initially, everything is set up as if from: initstate(1, randtbl, 128); Note that this initialization takes advantage of the fact that srandom advances the front and rear pointers 10*rand_deg times, and hence the rear pointer which starts at 0 will also end up at zero; thus the zeroeth element of the state information, which contains info about the current position of the rear pointer is just (MAX_TYPES * (rptr - state)) + TYPE_3 == TYPE_3. */ static long int randtbl[DEG_3 + 1] = { TYPE_3, 0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342, 0xde3b81e0, 0xdf0a6fb5, 0xf103bc02, 0x48f340fb, 0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd, 0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86, 0xda672e2a, 0x1588ca88, 0xe369735d, 0x904f35f7, 0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc, 0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b, 0xf5ad9d0e, 0x8999220b, 0x27fb47b9 }; /* FPTR and RPTR are two pointers into the state info, a front and a rear pointer. These two pointers are always rand_sep places aparts, as they cycle through the state information. (Yes, this does mean we could get away with just one pointer, but the code for random is more efficient this way). The pointers are left positioned as they would be from the call: initstate(1, randtbl, 128); (The position of the rear pointer, rptr, is really 0 (as explained above in the initialization of randtbl) because the state table pointer is set to point to randtbl[1] (as explained below).) */ static long int *fptr = &randtbl[SEP_3 + 1]; static long int *rptr = &randtbl[1]; /* The following things are the pointer to the state information table, the type of the current generator, the degree of the current polynomial being used, and the separation between the two pointers. Note that for efficiency of random, we remember the first location of the state information, not the zeroeth. Hence it is valid to access state[-1], which is used to store the type of the R.N.G. Also, we remember the last location, since this is more efficient than indexing every time to find the address of the last element to see if the front and rear pointers have wrapped. */ static long int *state = &randtbl[1]; static int rand_type = TYPE_3; static int rand_deg = DEG_3; static int rand_sep = SEP_3; static long int *end_ptr = &randtbl[sizeof(randtbl) / sizeof(randtbl[0])]; /* Initialize the random number generator based on the given seed. If the type is the trivial no-state-information type, just remember the seed. Otherwise, initializes state[] based on the given "seed" via a linear congruential generator. Then, the pointers are set to known locations that are exactly rand_sep places apart. Lastly, it cycles the state information a given number of times to get rid of any initial dependencies introduced by the L.C.R.N.G. Note that the initialization of randtbl[] for default usage relies on values produced by this routine. */ void srandom (unsigned int x) { state[0] = x; if (rand_type != TYPE_0) { register long int i; for (i = 1; i < rand_deg; ++i) state[i] = (1103515145 * state[i - 1]) + 12345; fptr = &state[rand_sep]; rptr = &state[0]; for (i = 0; i < 10 * rand_deg; ++i) random(); } } /* Initialize the state information in the given array of N bytes for future random number generation. Based on the number of bytes we are given, and the break values for the different R.N.G.'s, we choose the best (largest) one we can and set things up for it. srandom is then called to initialize the state information. Note that on return from srandom, we set state[-1] to be the type multiplexed with the current value of the rear pointer; this is so successive calls to initstate won't lose this information and will be able to restart with setstate. Note: The first thing we do is save the current state, if any, just like setstate so that it doesn't matter when initstate is called. Returns a pointer to the old state. */ PTR initstate (unsigned int seed, PTR arg_state, unsigned long n) { PTR ostate = (PTR) &state[-1]; if (rand_type == TYPE_0) state[-1] = rand_type; else state[-1] = (MAX_TYPES * (rptr - state)) + rand_type; if (n < BREAK_1) { if (n < BREAK_0) { errno = EINVAL; return NULL; } rand_type = TYPE_0; rand_deg = DEG_0; rand_sep = SEP_0; } else if (n < BREAK_2) { rand_type = TYPE_1; rand_deg = DEG_1; rand_sep = SEP_1; } else if (n < BREAK_3) { rand_type = TYPE_2; rand_deg = DEG_2; rand_sep = SEP_2; } else if (n < BREAK_4) { rand_type = TYPE_3; rand_deg = DEG_3; rand_sep = SEP_3; } else { rand_type = TYPE_4; rand_deg = DEG_4; rand_sep = SEP_4; } state = &((long int *) arg_state)[1]; /* First location. */ /* Must set END_PTR before srandom. */ end_ptr = &state[rand_deg]; srandom(seed); if (rand_type == TYPE_0) state[-1] = rand_type; else state[-1] = (MAX_TYPES * (rptr - state)) + rand_type; return ostate; } /* Restore the state from the given state array. Note: It is important that we also remember the locations of the pointers in the current state information, and restore the locations of the pointers from the old state information. This is done by multiplexing the pointer location into the zeroeth word of the state information. Note that due to the order in which things are done, it is OK to call setstate with the same state as the current state Returns a pointer to the old state information. */ PTR setstate (PTR arg_state) { register long int *new_state = (long int *) arg_state; register int type = new_state[0] % MAX_TYPES; register int rear = new_state[0] / MAX_TYPES; PTR ostate = (PTR) &state[-1]; if (rand_type == TYPE_0) state[-1] = rand_type; else state[-1] = (MAX_TYPES * (rptr - state)) + rand_type; switch (type) { case TYPE_0: case TYPE_1: case TYPE_2: case TYPE_3: case TYPE_4: rand_type = type; rand_deg = degrees[type]; rand_sep = seps[type]; break; default: /* State info munged. */ errno = EINVAL; return NULL; } state = &new_state[1]; if (rand_type != TYPE_0) { rptr = &state[rear]; fptr = &state[(rear + rand_sep) % rand_deg]; } /* Set end_ptr too. */ end_ptr = &state[rand_deg]; return ostate; } /* If we are using the trivial TYPE_0 R.N.G., just do the old linear congruential bit. Otherwise, we do our fancy trinomial stuff, which is the same in all ther other cases due to all the global variables that have been set up. The basic operation is to add the number at the rear pointer into the one at the front pointer. Then both pointers are advanced to the next location cyclically in the table. The value returned is the sum generated, reduced to 31 bits by throwing away the "least random" low bit. Note: The code takes advantage of the fact that both the front and rear pointers can't wrap on the same call by not testing the rear pointer if the front one has wrapped. Returns a 31-bit random number. */ long int random (void) { if (rand_type == TYPE_0) { state[0] = ((state[0] * 1103515245) + 12345) & LONG_MAX; return state[0]; } else { long int i; *fptr += *rptr; /* Chucking least random bit. */ i = (*fptr >> 1) & LONG_MAX; ++fptr; if (fptr >= end_ptr) { fptr = state; ++rptr; } else { ++rptr; if (rptr >= end_ptr) rptr = state; } return i; } } nescc-1.3.4/libiberty/regex.c000066400000000000000000007717011177770303300161020ustar00rootroot00000000000000/* Extended regular expression matching and search library, version 0.12. (Implements POSIX draft P1003.2/D11.2, except for some of the internationalization features.) Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /* This file has been modified for usage in libiberty. It includes "xregex.h" instead of . The "xregex.h" header file renames all external routines with an "x" prefix so they do not collide with the native regex routines or with other components regex routines. */ /* AIX requires this to be the first thing in the file. */ #if defined _AIX && !defined __GNUC__ && !defined REGEX_MALLOC #pragma alloca #endif #undef _GNU_SOURCE #define _GNU_SOURCE #ifndef INSIDE_RECURSION # ifdef HAVE_CONFIG_H # include # endif #endif #include #ifndef INSIDE_RECURSION # if defined STDC_HEADERS && !defined emacs # include # else /* We need this for `regex.h', and perhaps for the Emacs include files. */ # include # endif # define WIDE_CHAR_SUPPORT (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC) /* For platform which support the ISO C amendement 1 functionality we support user defined character classes. */ # if defined _LIBC || WIDE_CHAR_SUPPORT /* Solaris 2.5 has a bug: must be included before . */ # include # include # endif # ifdef _LIBC /* We have to keep the namespace clean. */ # define regfree(preg) __regfree (preg) # define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef) # define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags) # define regerror(errcode, preg, errbuf, errbuf_size) \ __regerror(errcode, preg, errbuf, errbuf_size) # define re_set_registers(bu, re, nu, st, en) \ __re_set_registers (bu, re, nu, st, en) # define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \ __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop) # define re_match(bufp, string, size, pos, regs) \ __re_match (bufp, string, size, pos, regs) # define re_search(bufp, string, size, startpos, range, regs) \ __re_search (bufp, string, size, startpos, range, regs) # define re_compile_pattern(pattern, length, bufp) \ __re_compile_pattern (pattern, length, bufp) # define re_set_syntax(syntax) __re_set_syntax (syntax) # define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \ __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop) # define re_compile_fastmap(bufp) __re_compile_fastmap (bufp) # define btowc __btowc /* We are also using some library internals. */ # include # include # include # include # endif /* This is for other GNU distributions with internationalized messages. */ # if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC # include # ifdef _LIBC # undef gettext # define gettext(msgid) __dcgettext ("libc", msgid, LC_MESSAGES) # endif # else # define gettext(msgid) (msgid) # endif # ifndef gettext_noop /* This define is so xgettext can find the internationalizable strings. */ # define gettext_noop(String) String # endif /* The `emacs' switch turns on certain matching commands that make sense only in Emacs. */ # ifdef emacs # include "lisp.h" # include "buffer.h" # include "syntax.h" # else /* not emacs */ /* If we are not linking with Emacs proper, we can't use the relocating allocator even if config.h says that we can. */ # undef REL_ALLOC # if defined STDC_HEADERS || defined _LIBC # include # else char *malloc (); char *realloc (); # endif /* When used in Emacs's lib-src, we need to get bzero and bcopy somehow. If nothing else has been done, use the method below. */ # ifdef INHIBIT_STRING_HEADER # if !(defined HAVE_BZERO && defined HAVE_BCOPY) # if !defined bzero && !defined bcopy # undef INHIBIT_STRING_HEADER # endif # endif # endif /* This is the normal way of making sure we have a bcopy and a bzero. This is used in most programs--a few other programs avoid this by defining INHIBIT_STRING_HEADER. */ # ifndef INHIBIT_STRING_HEADER # if defined HAVE_STRING_H || defined STDC_HEADERS || defined _LIBC # include # ifndef bzero # ifndef _LIBC # define bzero(s, n) (memset (s, '\0', n), (s)) # else # define bzero(s, n) __bzero (s, n) # endif # endif # else # include # ifndef memcmp # define memcmp(s1, s2, n) bcmp (s1, s2, n) # endif # ifndef memcpy # define memcpy(d, s, n) (bcopy (s, d, n), (d)) # endif # endif # endif /* Define the syntax stuff for \<, \>, etc. */ /* This must be nonzero for the wordchar and notwordchar pattern commands in re_match_2. */ # ifndef Sword # define Sword 1 # endif # ifdef SWITCH_ENUM_BUG # define SWITCH_ENUM_CAST(x) ((int)(x)) # else # define SWITCH_ENUM_CAST(x) (x) # endif # endif /* not emacs */ # if defined _LIBC || HAVE_LIMITS_H # include # endif # ifndef MB_LEN_MAX # define MB_LEN_MAX 1 # endif /* Get the interface, including the syntax bits. */ # include "xregex.h" /* change for libiberty */ /* isalpha etc. are used for the character classes. */ # include /* Jim Meyering writes: "... Some ctype macros are valid only for character codes that isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when using /bin/cc or gcc but without giving an ansi option). So, all ctype uses should be through macros like ISPRINT... If STDC_HEADERS is defined, then autoconf has verified that the ctype macros don't need to be guarded with references to isascii. ... Defining isascii to 1 should let any compiler worth its salt eliminate the && through constant folding." Solaris defines some of these symbols so we must undefine them first. */ # undef ISASCII # if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII) # define ISASCII(c) 1 # else # define ISASCII(c) isascii(c) # endif # ifdef isblank # define ISBLANK(c) (ISASCII (c) && isblank (c)) # else # define ISBLANK(c) ((c) == ' ' || (c) == '\t') # endif # ifdef isgraph # define ISGRAPH(c) (ISASCII (c) && isgraph (c)) # else # define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c)) # endif # undef ISPRINT # define ISPRINT(c) (ISASCII (c) && isprint (c)) # define ISDIGIT(c) (ISASCII (c) && isdigit (c)) # define ISALNUM(c) (ISASCII (c) && isalnum (c)) # define ISALPHA(c) (ISASCII (c) && isalpha (c)) # define ISCNTRL(c) (ISASCII (c) && iscntrl (c)) # define ISLOWER(c) (ISASCII (c) && islower (c)) # define ISPUNCT(c) (ISASCII (c) && ispunct (c)) # define ISSPACE(c) (ISASCII (c) && isspace (c)) # define ISUPPER(c) (ISASCII (c) && isupper (c)) # define ISXDIGIT(c) (ISASCII (c) && isxdigit (c)) # ifdef _tolower # define TOLOWER(c) _tolower(c) # else # define TOLOWER(c) tolower(c) # endif # ifndef NULL # define NULL (void *)0 # endif /* We remove any previous definition of `SIGN_EXTEND_CHAR', since ours (we hope) works properly with all combinations of machines, compilers, `char' and `unsigned char' argument types. (Per Bothner suggested the basic approach.) */ # undef SIGN_EXTEND_CHAR # if __STDC__ # define SIGN_EXTEND_CHAR(c) ((signed char) (c)) # else /* not __STDC__ */ /* As in Harbison and Steele. */ # define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128) # endif # ifndef emacs /* How many characters in the character set. */ # define CHAR_SET_SIZE 256 # ifdef SYNTAX_TABLE extern char *re_syntax_table; # else /* not SYNTAX_TABLE */ static char re_syntax_table[CHAR_SET_SIZE]; static void init_syntax_once (void); static void init_syntax_once (void) { register int c; static int done = 0; if (done) return; bzero (re_syntax_table, sizeof re_syntax_table); for (c = 0; c < CHAR_SET_SIZE; ++c) if (ISALNUM (c)) re_syntax_table[c] = Sword; re_syntax_table['_'] = Sword; done = 1; } # endif /* not SYNTAX_TABLE */ # define SYNTAX(c) re_syntax_table[(unsigned char) (c)] # endif /* emacs */ /* Integer type for pointers. */ # if !defined _LIBC && !defined HAVE_UINTPTR_T typedef unsigned long int uintptr_t; # endif /* Should we use malloc or alloca? If REGEX_MALLOC is not defined, we use `alloca' instead of `malloc'. This is because using malloc in re_search* or re_match* could cause memory leaks when C-g is used in Emacs; also, malloc is slower and causes storage fragmentation. On the other hand, malloc is more portable, and easier to debug. Because we sometimes use alloca, some routines have to be macros, not functions -- `alloca'-allocated space disappears at the end of the function it is called in. */ # ifdef REGEX_MALLOC # define REGEX_ALLOCATE malloc # define REGEX_REALLOCATE(source, osize, nsize) realloc (source, nsize) # define REGEX_FREE free # else /* not REGEX_MALLOC */ /* Emacs already defines alloca, sometimes. */ # ifndef alloca /* Make alloca work the best possible way. */ # ifdef __GNUC__ # define alloca __builtin_alloca # else /* not __GNUC__ */ # if HAVE_ALLOCA_H # include # endif /* HAVE_ALLOCA_H */ # endif /* not __GNUC__ */ # endif /* not alloca */ # define REGEX_ALLOCATE alloca /* Assumes a `char *destination' variable. */ # define REGEX_REALLOCATE(source, osize, nsize) \ (destination = (char *) alloca (nsize), \ memcpy (destination, source, osize)) /* No need to do anything to free, after alloca. */ # define REGEX_FREE(arg) ((void)0) /* Do nothing! But inhibit gcc warning. */ # endif /* not REGEX_MALLOC */ /* Define how to allocate the failure stack. */ # if defined REL_ALLOC && defined REGEX_MALLOC # define REGEX_ALLOCATE_STACK(size) \ r_alloc (&failure_stack_ptr, (size)) # define REGEX_REALLOCATE_STACK(source, osize, nsize) \ r_re_alloc (&failure_stack_ptr, (nsize)) # define REGEX_FREE_STACK(ptr) \ r_alloc_free (&failure_stack_ptr) # else /* not using relocating allocator */ # ifdef REGEX_MALLOC # define REGEX_ALLOCATE_STACK malloc # define REGEX_REALLOCATE_STACK(source, osize, nsize) realloc (source, nsize) # define REGEX_FREE_STACK free # else /* not REGEX_MALLOC */ # define REGEX_ALLOCATE_STACK alloca # define REGEX_REALLOCATE_STACK(source, osize, nsize) \ REGEX_REALLOCATE (source, osize, nsize) /* No need to explicitly free anything. */ # define REGEX_FREE_STACK(arg) # endif /* not REGEX_MALLOC */ # endif /* not using relocating allocator */ /* True if `size1' is non-NULL and PTR is pointing anywhere inside `string1' or just past its end. This works if PTR is NULL, which is a good thing. */ # define FIRST_STRING_P(ptr) \ (size1 && string1 <= (ptr) && (ptr) <= string1 + size1) /* (Re)Allocate N items of type T using malloc, or fail. */ # define TALLOC(n, t) ((t *) malloc ((n) * sizeof (t))) # define RETALLOC(addr, n, t) ((addr) = (t *) realloc (addr, (n) * sizeof (t))) # define RETALLOC_IF(addr, n, t) \ if (addr) RETALLOC((addr), (n), t); else (addr) = TALLOC ((n), t) # define REGEX_TALLOC(n, t) ((t *) REGEX_ALLOCATE ((n) * sizeof (t))) # define BYTEWIDTH 8 /* In bits. */ # define STREQ(s1, s2) ((strcmp (s1, s2) == 0)) # undef MAX # undef MIN # define MAX(a, b) ((a) > (b) ? (a) : (b)) # define MIN(a, b) ((a) < (b) ? (a) : (b)) typedef char boolean; # define false 0 # define true 1 static reg_errcode_t byte_regex_compile (const char *pattern, size_t size, reg_syntax_t syntax, struct re_pattern_buffer *bufp); static int byte_re_match_2_internal (struct re_pattern_buffer *bufp, const char *string1, int size1, const char *string2, int size2, int pos, struct re_registers *regs, int stop); static int byte_re_search_2 (struct re_pattern_buffer *bufp, const char *string1, int size1, const char *string2, int size2, int startpos, int range, struct re_registers *regs, int stop); static int byte_re_compile_fastmap (struct re_pattern_buffer *bufp); #ifdef MBS_SUPPORT static reg_errcode_t wcs_regex_compile (const char *pattern, size_t size, reg_syntax_t syntax, struct re_pattern_buffer *bufp); static int wcs_re_match_2_internal (struct re_pattern_buffer *bufp, const char *cstring1, int csize1, const char *cstring2, int csize2, int pos, struct re_registers *regs, int stop, wchar_t *string1, int size1, wchar_t *string2, int size2, int *mbs_offset1, int *mbs_offset2); static int wcs_re_search_2 (struct re_pattern_buffer *bufp, const char *string1, int size1, const char *string2, int size2, int startpos, int range, struct re_registers *regs, int stop); static int wcs_re_compile_fastmap (struct re_pattern_buffer *bufp); #endif /* These are the command codes that appear in compiled regular expressions. Some opcodes are followed by argument bytes. A command code can specify any interpretation whatsoever for its arguments. Zero bytes may appear in the compiled regular expression. */ typedef enum { no_op = 0, /* Succeed right away--no more backtracking. */ succeed, /* Followed by one byte giving n, then by n literal bytes. */ exactn, # ifdef MBS_SUPPORT /* Same as exactn, but contains binary data. */ exactn_bin, # endif /* Matches any (more or less) character. */ anychar, /* Matches any one char belonging to specified set. First following byte is number of bitmap bytes. Then come bytes for a bitmap saying which chars are in. Bits in each byte are ordered low-bit-first. A character is in the set if its bit is 1. A character too large to have a bit in the map is automatically not in the set. */ /* ifdef MBS_SUPPORT, following element is length of character classes, length of collating symbols, length of equivalence classes, length of character ranges, and length of characters. Next, character class element, collating symbols elements, equivalence class elements, range elements, and character elements follow. See regex_compile function. */ charset, /* Same parameters as charset, but match any character that is not one of those specified. */ charset_not, /* Start remembering the text that is matched, for storing in a register. Followed by one byte with the register number, in the range 0 to one less than the pattern buffer's re_nsub field. Then followed by one byte with the number of groups inner to this one. (This last has to be part of the start_memory only because we need it in the on_failure_jump of re_match_2.) */ start_memory, /* Stop remembering the text that is matched and store it in a memory register. Followed by one byte with the register number, in the range 0 to one less than `re_nsub' in the pattern buffer, and one byte with the number of inner groups, just like `start_memory'. (We need the number of inner groups here because we don't have any easy way of finding the corresponding start_memory when we're at a stop_memory.) */ stop_memory, /* Match a duplicate of something remembered. Followed by one byte containing the register number. */ duplicate, /* Fail unless at beginning of line. */ begline, /* Fail unless at end of line. */ endline, /* Succeeds if at beginning of buffer (if emacs) or at beginning of string to be matched (if not). */ begbuf, /* Analogously, for end of buffer/string. */ endbuf, /* Followed by two byte relative address to which to jump. */ jump, /* Same as jump, but marks the end of an alternative. */ jump_past_alt, /* Followed by two-byte relative address of place to resume at in case of failure. */ /* ifdef MBS_SUPPORT, the size of address is 1. */ on_failure_jump, /* Like on_failure_jump, but pushes a placeholder instead of the current string position when executed. */ on_failure_keep_string_jump, /* Throw away latest failure point and then jump to following two-byte relative address. */ /* ifdef MBS_SUPPORT, the size of address is 1. */ pop_failure_jump, /* Change to pop_failure_jump if know won't have to backtrack to match; otherwise change to jump. This is used to jump back to the beginning of a repeat. If what follows this jump clearly won't match what the repeat does, such that we can be sure that there is no use backtracking out of repetitions already matched, then we change it to a pop_failure_jump. Followed by two-byte address. */ /* ifdef MBS_SUPPORT, the size of address is 1. */ maybe_pop_jump, /* Jump to following two-byte address, and push a dummy failure point. This failure point will be thrown away if an attempt is made to use it for a failure. A `+' construct makes this before the first repeat. Also used as an intermediary kind of jump when compiling an alternative. */ /* ifdef MBS_SUPPORT, the size of address is 1. */ dummy_failure_jump, /* Push a dummy failure point and continue. Used at the end of alternatives. */ push_dummy_failure, /* Followed by two-byte relative address and two-byte number n. After matching N times, jump to the address upon failure. */ /* ifdef MBS_SUPPORT, the size of address is 1. */ succeed_n, /* Followed by two-byte relative address, and two-byte number n. Jump to the address N times, then fail. */ /* ifdef MBS_SUPPORT, the size of address is 1. */ jump_n, /* Set the following two-byte relative address to the subsequent two-byte number. The address *includes* the two bytes of number. */ /* ifdef MBS_SUPPORT, the size of address is 1. */ set_number_at, wordchar, /* Matches any word-constituent character. */ notwordchar, /* Matches any char that is not a word-constituent. */ wordbeg, /* Succeeds if at word beginning. */ wordend, /* Succeeds if at word end. */ wordbound, /* Succeeds if at a word boundary. */ notwordbound /* Succeeds if not at a word boundary. */ # ifdef emacs ,before_dot, /* Succeeds if before point. */ at_dot, /* Succeeds if at point. */ after_dot, /* Succeeds if after point. */ /* Matches any character whose syntax is specified. Followed by a byte which contains a syntax code, e.g., Sword. */ syntaxspec, /* Matches any character whose syntax is not that specified. */ notsyntaxspec # endif /* emacs */ } re_opcode_t; #endif /* not INSIDE_RECURSION */ #ifdef BYTE # define CHAR_T char # define UCHAR_T unsigned char # define COMPILED_BUFFER_VAR bufp->buffer # define OFFSET_ADDRESS_SIZE 2 # define PREFIX(name) byte_##name # define ARG_PREFIX(name) name # define PUT_CHAR(c) putchar (c) #else # ifdef WCHAR # define CHAR_T wchar_t # define UCHAR_T wchar_t # define COMPILED_BUFFER_VAR wc_buffer # define OFFSET_ADDRESS_SIZE 1 /* the size which STORE_NUMBER macro use */ # define CHAR_CLASS_SIZE ((__alignof__(wctype_t)+sizeof(wctype_t))/sizeof(CHAR_T)+1) # define PREFIX(name) wcs_##name # define ARG_PREFIX(name) c##name /* Should we use wide stream?? */ # define PUT_CHAR(c) printf ("%C", c); # define TRUE 1 # define FALSE 0 # else # ifdef MBS_SUPPORT # define WCHAR # define INSIDE_RECURSION # include "regex.c" # undef INSIDE_RECURSION # endif # define BYTE # define INSIDE_RECURSION # include "regex.c" # undef INSIDE_RECURSION # endif #endif #ifdef INSIDE_RECURSION /* Common operations on the compiled pattern. */ /* Store NUMBER in two contiguous bytes starting at DESTINATION. */ /* ifdef MBS_SUPPORT, we store NUMBER in 1 element. */ # ifdef WCHAR # define STORE_NUMBER(destination, number) \ do { \ *(destination) = (UCHAR_T)(number); \ } while (0) # else /* BYTE */ # define STORE_NUMBER(destination, number) \ do { \ (destination)[0] = (number) & 0377; \ (destination)[1] = (number) >> 8; \ } while (0) # endif /* WCHAR */ /* Same as STORE_NUMBER, except increment DESTINATION to the byte after where the number is stored. Therefore, DESTINATION must be an lvalue. */ /* ifdef MBS_SUPPORT, we store NUMBER in 1 element. */ # define STORE_NUMBER_AND_INCR(destination, number) \ do { \ STORE_NUMBER (destination, number); \ (destination) += OFFSET_ADDRESS_SIZE; \ } while (0) /* Put into DESTINATION a number stored in two contiguous bytes starting at SOURCE. */ /* ifdef MBS_SUPPORT, we store NUMBER in 1 element. */ # ifdef WCHAR # define EXTRACT_NUMBER(destination, source) \ do { \ (destination) = *(source); \ } while (0) # else /* BYTE */ # define EXTRACT_NUMBER(destination, source) \ do { \ (destination) = *(source) & 0377; \ (destination) += SIGN_EXTEND_CHAR (*((source) + 1)) << 8; \ } while (0) # endif # ifdef DEBUG static void PREFIX(extract_number) (int *dest, UCHAR_T *source); static void PREFIX(extract_number) (int *dest, UCHAR_T *source) { # ifdef WCHAR *dest = *source; # else /* BYTE */ int temp = SIGN_EXTEND_CHAR (*(source + 1)); *dest = *source & 0377; *dest += temp << 8; # endif } # ifndef EXTRACT_MACROS /* To debug the macros. */ # undef EXTRACT_NUMBER # define EXTRACT_NUMBER(dest, src) PREFIX(extract_number) (&dest, src) # endif /* not EXTRACT_MACROS */ # endif /* DEBUG */ /* Same as EXTRACT_NUMBER, except increment SOURCE to after the number. SOURCE must be an lvalue. */ # define EXTRACT_NUMBER_AND_INCR(destination, source) \ do { \ EXTRACT_NUMBER (destination, source); \ (source) += OFFSET_ADDRESS_SIZE; \ } while (0) # ifdef DEBUG static void PREFIX(extract_number_and_incr) (int *destination, UCHAR_T **source); static void PREFIX(extract_number_and_incr) (int *destination, UCHAR_T **source) { PREFIX(extract_number) (destination, *source); *source += OFFSET_ADDRESS_SIZE; } # ifndef EXTRACT_MACROS # undef EXTRACT_NUMBER_AND_INCR # define EXTRACT_NUMBER_AND_INCR(dest, src) \ PREFIX(extract_number_and_incr) (&dest, &src) # endif /* not EXTRACT_MACROS */ # endif /* DEBUG */ /* If DEBUG is defined, Regex prints many voluminous messages about what it is doing (if the variable `debug' is nonzero). If linked with the main program in `iregex.c', you can enter patterns and strings interactively. And if linked with the main program in `main.c' and the other test files, you can run the already-written tests. */ # ifdef DEBUG # ifndef DEFINED_ONCE /* We use standard I/O for debugging. */ # include /* It is useful to test things that ``must'' be true when debugging. */ # include static int debug; # define DEBUG_STATEMENT(e) e # define DEBUG_PRINT1(x) if (debug) printf (x) # define DEBUG_PRINT2(x1, x2) if (debug) printf (x1, x2) # define DEBUG_PRINT3(x1, x2, x3) if (debug) printf (x1, x2, x3) # define DEBUG_PRINT4(x1, x2, x3, x4) if (debug) printf (x1, x2, x3, x4) # endif /* not DEFINED_ONCE */ # define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) \ if (debug) PREFIX(print_partial_compiled_pattern) (s, e) # define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2) \ if (debug) PREFIX(print_double_string) (w, s1, sz1, s2, sz2) /* Print the fastmap in human-readable form. */ # ifndef DEFINED_ONCE void print_fastmap (char *fastmap) { unsigned was_a_range = 0; unsigned i = 0; while (i < (1 << BYTEWIDTH)) { if (fastmap[i++]) { was_a_range = 0; putchar (i - 1); while (i < (1 << BYTEWIDTH) && fastmap[i]) { was_a_range = 1; i++; } if (was_a_range) { printf ("-"); putchar (i - 1); } } } putchar ('\n'); } # endif /* not DEFINED_ONCE */ /* Print a compiled pattern string in human-readable form, starting at the START pointer into it and ending just before the pointer END. */ void PREFIX(print_partial_compiled_pattern) (UCHAR_T *start, UCHAR_T *end) { int mcnt, mcnt2; UCHAR_T *p1; UCHAR_T *p = start; UCHAR_T *pend = end; if (start == NULL) { printf ("(null)\n"); return; } /* Loop over pattern commands. */ while (p < pend) { # ifdef _LIBC printf ("%td:\t", p - start); # else printf ("%ld:\t", (long int) (p - start)); # endif switch ((re_opcode_t) *p++) { case no_op: printf ("/no_op"); break; case exactn: mcnt = *p++; printf ("/exactn/%d", mcnt); do { putchar ('/'); PUT_CHAR (*p++); } while (--mcnt); break; # ifdef MBS_SUPPORT case exactn_bin: mcnt = *p++; printf ("/exactn_bin/%d", mcnt); do { printf("/%lx", (long int) *p++); } while (--mcnt); break; # endif /* MBS_SUPPORT */ case start_memory: mcnt = *p++; printf ("/start_memory/%d/%ld", mcnt, (long int) *p++); break; case stop_memory: mcnt = *p++; printf ("/stop_memory/%d/%ld", mcnt, (long int) *p++); break; case duplicate: printf ("/duplicate/%ld", (long int) *p++); break; case anychar: printf ("/anychar"); break; case charset: case charset_not: { # ifdef WCHAR int i, length; wchar_t *workp = p; printf ("/charset [%s", (re_opcode_t) *(workp - 1) == charset_not ? "^" : ""); p += 5; length = *workp++; /* the length of char_classes */ for (i=0 ; ibuffer; PREFIX(print_partial_compiled_pattern) (buffer, buffer + bufp->used / sizeof(UCHAR_T)); printf ("%ld bytes used/%ld bytes allocated.\n", bufp->used, bufp->allocated); if (bufp->fastmap_accurate && bufp->fastmap) { printf ("fastmap: "); print_fastmap (bufp->fastmap); } # ifdef _LIBC printf ("re_nsub: %Zd\t", bufp->re_nsub); # else printf ("re_nsub: %ld\t", (long int) bufp->re_nsub); # endif printf ("regs_alloc: %d\t", bufp->regs_allocated); printf ("can_be_null: %d\t", bufp->can_be_null); printf ("newline_anchor: %d\n", bufp->newline_anchor); printf ("no_sub: %d\t", bufp->no_sub); printf ("not_bol: %d\t", bufp->not_bol); printf ("not_eol: %d\t", bufp->not_eol); printf ("syntax: %lx\n", bufp->syntax); /* Perhaps we should print the translate table? */ } void PREFIX(print_double_string) (const CHAR_T *where, const CHAR_T *string1, int size1, const CHAR_T *string2, int size2) { int this_char; if (where == NULL) printf ("(null)"); else { int cnt; if (FIRST_STRING_P (where)) { for (this_char = where - string1; this_char < size1; this_char++) PUT_CHAR (string1[this_char]); where = string2; } cnt = 0; for (this_char = where - string2; this_char < size2; this_char++) { PUT_CHAR (string2[this_char]); if (++cnt > 100) { fputs ("...", stdout); break; } } } } # ifndef DEFINED_ONCE void printchar (int c) { putc (c, stderr); } # endif # else /* not DEBUG */ # ifndef DEFINED_ONCE # undef assert # define assert(e) # define DEBUG_STATEMENT(e) # define DEBUG_PRINT1(x) # define DEBUG_PRINT2(x1, x2) # define DEBUG_PRINT3(x1, x2, x3) # define DEBUG_PRINT4(x1, x2, x3, x4) # endif /* not DEFINED_ONCE */ # define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) # define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2) # endif /* not DEBUG */ # ifdef WCHAR /* This convert a multibyte string to a wide character string. And write their correspondances to offset_buffer(see below) and write whether each wchar_t is binary data to is_binary. This assume invalid multibyte sequences as binary data. We assume offset_buffer and is_binary is already allocated enough space. */ static size_t convert_mbs_to_wcs (CHAR_T *dest, const unsigned char* src, size_t len, int *offset_buffer, char *is_binary); static size_t convert_mbs_to_wcs (CHAR_T *dest, const unsigned char*src, size_t len, int *offset_buffer, char *is_binary) /* It hold correspondances between src(char string) and dest(wchar_t string) for optimization. e.g. src = "xxxyzz" dest = {'X', 'Y', 'Z'} (each "xxx", "y" and "zz" represent one multibyte character corresponding to 'X', 'Y' and 'Z'.) offset_buffer = {0, 0+3("xxx"), 0+3+1("y"), 0+3+1+2("zz")} = {0, 3, 4, 6} */ { wchar_t *pdest = dest; const unsigned char *psrc = src; size_t wc_count = 0; mbstate_t mbs; int i, consumed; size_t mb_remain = len; size_t mb_count = 0; /* Initialize the conversion state. */ memset (&mbs, 0, sizeof (mbstate_t)); offset_buffer[0] = 0; for( ; mb_remain > 0 ; ++wc_count, ++pdest, mb_remain -= consumed, psrc += consumed) { #ifdef _LIBC consumed = __mbrtowc (pdest, psrc, mb_remain, &mbs); #else consumed = mbrtowc (pdest, psrc, mb_remain, &mbs); #endif if (consumed <= 0) /* failed to convert. maybe src contains binary data. So we consume 1 byte manualy. */ { *pdest = *psrc; consumed = 1; is_binary[wc_count] = TRUE; } else is_binary[wc_count] = FALSE; /* In sjis encoding, we use yen sign as escape character in place of reverse solidus. So we convert 0x5c(yen sign in sjis) to not 0xa5(yen sign in UCS2) but 0x5c(reverse solidus in UCS2). */ if (consumed == 1 && (int) *psrc == 0x5c && (int) *pdest == 0xa5) *pdest = (wchar_t) *psrc; offset_buffer[wc_count + 1] = mb_count += consumed; } /* Fill remain of the buffer with sentinel. */ for (i = wc_count + 1 ; i <= len ; i++) offset_buffer[i] = mb_count + 1; return wc_count; } # endif /* WCHAR */ #else /* not INSIDE_RECURSION */ /* Set by `re_set_syntax' to the current regexp syntax to recognize. Can also be assigned to arbitrarily: each pattern buffer stores its own syntax, so it can be changed between regex compilations. */ /* This has no initializer because initialized variables in Emacs become read-only after dumping. */ reg_syntax_t re_syntax_options; /* Specify the precise syntax of regexps for compilation. This provides for compatibility for various utilities which historically have different, incompatible syntaxes. The argument SYNTAX is a bit mask comprised of the various bits defined in regex.h. We return the old syntax. */ reg_syntax_t re_set_syntax (reg_syntax_t syntax) { reg_syntax_t ret = re_syntax_options; re_syntax_options = syntax; # ifdef DEBUG if (syntax & RE_DEBUG) debug = 1; else if (debug) /* was on but now is not */ debug = 0; # endif /* DEBUG */ return ret; } # ifdef _LIBC weak_alias (__re_set_syntax, re_set_syntax) # endif /* This table gives an error message for each of the error codes listed in regex.h. Obviously the order here has to be same as there. POSIX doesn't require that we do anything for REG_NOERROR, but why not be nice? */ static const char *re_error_msgid[] = { gettext_noop ("Success"), /* REG_NOERROR */ gettext_noop ("No match"), /* REG_NOMATCH */ gettext_noop ("Invalid regular expression"), /* REG_BADPAT */ gettext_noop ("Invalid collation character"), /* REG_ECOLLATE */ gettext_noop ("Invalid character class name"), /* REG_ECTYPE */ gettext_noop ("Trailing backslash"), /* REG_EESCAPE */ gettext_noop ("Invalid back reference"), /* REG_ESUBREG */ gettext_noop ("Unmatched [ or [^"), /* REG_EBRACK */ gettext_noop ("Unmatched ( or \\("), /* REG_EPAREN */ gettext_noop ("Unmatched \\{"), /* REG_EBRACE */ gettext_noop ("Invalid content of \\{\\}"), /* REG_BADBR */ gettext_noop ("Invalid range end"), /* REG_ERANGE */ gettext_noop ("Memory exhausted"), /* REG_ESPACE */ gettext_noop ("Invalid preceding regular expression"), /* REG_BADRPT */ gettext_noop ("Premature end of regular expression"), /* REG_EEND */ gettext_noop ("Regular expression too big"), /* REG_ESIZE */ gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */ }; #endif /* INSIDE_RECURSION */ #ifndef DEFINED_ONCE /* Avoiding alloca during matching, to placate r_alloc. */ /* Define MATCH_MAY_ALLOCATE unless we need to make sure that the searching and matching functions should not call alloca. On some systems, alloca is implemented in terms of malloc, and if we're using the relocating allocator routines, then malloc could cause a relocation, which might (if the strings being searched are in the ralloc heap) shift the data out from underneath the regexp routines. Here's another reason to avoid allocation: Emacs processes input from X in a signal handler; processing X input may call malloc; if input arrives while a matching routine is calling malloc, then we're scrod. But Emacs can't just block input while calling matching routines; then we don't notice interrupts when they come in. So, Emacs blocks input around all regexp calls except the matching calls, which it leaves unprotected, in the faith that they will not malloc. */ /* Normally, this is fine. */ # define MATCH_MAY_ALLOCATE /* When using GNU C, we are not REALLY using the C alloca, no matter what config.h may say. So don't take precautions for it. */ # ifdef __GNUC__ # undef C_ALLOCA # endif /* The match routines may not allocate if (1) they would do it with malloc and (2) it's not safe for them to use malloc. Note that if REL_ALLOC is defined, matching would not use malloc for the failure stack, but we would still use it for the register vectors; so REL_ALLOC should not affect this. */ # if (defined C_ALLOCA || defined REGEX_MALLOC) && defined emacs # undef MATCH_MAY_ALLOCATE # endif #endif /* not DEFINED_ONCE */ #ifdef INSIDE_RECURSION /* Failure stack declarations and macros; both re_compile_fastmap and re_match_2 use a failure stack. These have to be macros because of REGEX_ALLOCATE_STACK. */ /* Number of failure points for which to initially allocate space when matching. If this number is exceeded, we allocate more space, so it is not a hard limit. */ # ifndef INIT_FAILURE_ALLOC # define INIT_FAILURE_ALLOC 5 # endif /* Roughly the maximum number of failure points on the stack. Would be exactly that if always used MAX_FAILURE_ITEMS items each time we failed. This is a variable only so users of regex can assign to it; we never change it ourselves. */ # ifdef INT_IS_16BIT # ifndef DEFINED_ONCE # if defined MATCH_MAY_ALLOCATE /* 4400 was enough to cause a crash on Alpha OSF/1, whose default stack limit is 2mb. */ long int re_max_failures = 4000; # else long int re_max_failures = 2000; # endif # endif union PREFIX(fail_stack_elt) { UCHAR_T *pointer; long int integer; }; typedef union PREFIX(fail_stack_elt) PREFIX(fail_stack_elt_t); typedef struct { PREFIX(fail_stack_elt_t) *stack; unsigned long int size; unsigned long int avail; /* Offset of next open position. */ } PREFIX(fail_stack_type); # else /* not INT_IS_16BIT */ # ifndef DEFINED_ONCE # if defined MATCH_MAY_ALLOCATE /* 4400 was enough to cause a crash on Alpha OSF/1, whose default stack limit is 2mb. */ int re_max_failures = 4000; # else int re_max_failures = 2000; # endif # endif union PREFIX(fail_stack_elt) { UCHAR_T *pointer; int integer; }; typedef union PREFIX(fail_stack_elt) PREFIX(fail_stack_elt_t); typedef struct { PREFIX(fail_stack_elt_t) *stack; unsigned size; unsigned avail; /* Offset of next open position. */ } PREFIX(fail_stack_type); # endif /* INT_IS_16BIT */ # ifndef DEFINED_ONCE # define FAIL_STACK_EMPTY() (fail_stack.avail == 0) # define FAIL_STACK_PTR_EMPTY() (fail_stack_ptr->avail == 0) # define FAIL_STACK_FULL() (fail_stack.avail == fail_stack.size) # endif /* Define macros to initialize and free the failure stack. Do `return -2' if the alloc fails. */ # ifdef MATCH_MAY_ALLOCATE # define INIT_FAIL_STACK() \ do { \ fail_stack.stack = (PREFIX(fail_stack_elt_t) *) \ REGEX_ALLOCATE_STACK (INIT_FAILURE_ALLOC * sizeof (PREFIX(fail_stack_elt_t))); \ \ if (fail_stack.stack == NULL) \ return -2; \ \ fail_stack.size = INIT_FAILURE_ALLOC; \ fail_stack.avail = 0; \ } while (0) # define RESET_FAIL_STACK() REGEX_FREE_STACK (fail_stack.stack) # else # define INIT_FAIL_STACK() \ do { \ fail_stack.avail = 0; \ } while (0) # define RESET_FAIL_STACK() # endif /* Double the size of FAIL_STACK, up to approximately `re_max_failures' items. Return 1 if succeeds, and 0 if either ran out of memory allocating space for it or it was already too large. REGEX_REALLOCATE_STACK requires `destination' be declared. */ # define DOUBLE_FAIL_STACK(fail_stack) \ ((fail_stack).size > (unsigned) (re_max_failures * MAX_FAILURE_ITEMS) \ ? 0 \ : ((fail_stack).stack = (PREFIX(fail_stack_elt_t) *) \ REGEX_REALLOCATE_STACK ((fail_stack).stack, \ (fail_stack).size * sizeof (PREFIX(fail_stack_elt_t)), \ ((fail_stack).size << 1) * sizeof (PREFIX(fail_stack_elt_t))),\ \ (fail_stack).stack == NULL \ ? 0 \ : ((fail_stack).size <<= 1, \ 1))) /* Push pointer POINTER on FAIL_STACK. Return 1 if was able to do so and 0 if ran out of memory allocating space to do so. */ # define PUSH_PATTERN_OP(POINTER, FAIL_STACK) \ ((FAIL_STACK_FULL () \ && !DOUBLE_FAIL_STACK (FAIL_STACK)) \ ? 0 \ : ((FAIL_STACK).stack[(FAIL_STACK).avail++].pointer = POINTER, \ 1)) /* Push a pointer value onto the failure stack. Assumes the variable `fail_stack'. Probably should only be called from within `PUSH_FAILURE_POINT'. */ # define PUSH_FAILURE_POINTER(item) \ fail_stack.stack[fail_stack.avail++].pointer = (UCHAR_T *) (item) /* This pushes an integer-valued item onto the failure stack. Assumes the variable `fail_stack'. Probably should only be called from within `PUSH_FAILURE_POINT'. */ # define PUSH_FAILURE_INT(item) \ fail_stack.stack[fail_stack.avail++].integer = (item) /* Push a fail_stack_elt_t value onto the failure stack. Assumes the variable `fail_stack'. Probably should only be called from within `PUSH_FAILURE_POINT'. */ # define PUSH_FAILURE_ELT(item) \ fail_stack.stack[fail_stack.avail++] = (item) /* These three POP... operations complement the three PUSH... operations. All assume that `fail_stack' is nonempty. */ # define POP_FAILURE_POINTER() fail_stack.stack[--fail_stack.avail].pointer # define POP_FAILURE_INT() fail_stack.stack[--fail_stack.avail].integer # define POP_FAILURE_ELT() fail_stack.stack[--fail_stack.avail] /* Used to omit pushing failure point id's when we're not debugging. */ # ifdef DEBUG # define DEBUG_PUSH PUSH_FAILURE_INT # define DEBUG_POP(item_addr) *(item_addr) = POP_FAILURE_INT () # else # define DEBUG_PUSH(item) # define DEBUG_POP(item_addr) # endif /* Push the information about the state we will need if we ever fail back to it. Requires variables fail_stack, regstart, regend, reg_info, and num_regs_pushed be declared. DOUBLE_FAIL_STACK requires `destination' be declared. Does `return FAILURE_CODE' if runs out of memory. */ # define PUSH_FAILURE_POINT(pattern_place, string_place, failure_code) \ do { \ char *destination; \ /* Must be int, so when we don't save any registers, the arithmetic \ of 0 + -1 isn't done as unsigned. */ \ /* Can't be int, since there is not a shred of a guarantee that int \ is wide enough to hold a value of something to which pointer can \ be assigned */ \ active_reg_t this_reg; \ \ DEBUG_STATEMENT (failure_id++); \ DEBUG_STATEMENT (nfailure_points_pushed++); \ DEBUG_PRINT2 ("\nPUSH_FAILURE_POINT #%u:\n", failure_id); \ DEBUG_PRINT2 (" Before push, next avail: %d\n", (fail_stack).avail);\ DEBUG_PRINT2 (" size: %d\n", (fail_stack).size);\ \ DEBUG_PRINT2 (" slots needed: %ld\n", NUM_FAILURE_ITEMS); \ DEBUG_PRINT2 (" available: %d\n", REMAINING_AVAIL_SLOTS); \ \ /* Ensure we have enough space allocated for what we will push. */ \ while (REMAINING_AVAIL_SLOTS < NUM_FAILURE_ITEMS) \ { \ if (!DOUBLE_FAIL_STACK (fail_stack)) \ return failure_code; \ \ DEBUG_PRINT2 ("\n Doubled stack; size now: %d\n", \ (fail_stack).size); \ DEBUG_PRINT2 (" slots available: %d\n", REMAINING_AVAIL_SLOTS);\ } \ \ /* Push the info, starting with the registers. */ \ DEBUG_PRINT1 ("\n"); \ \ if (1) \ for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; \ this_reg++) \ { \ DEBUG_PRINT2 (" Pushing reg: %lu\n", this_reg); \ DEBUG_STATEMENT (num_regs_pushed++); \ \ DEBUG_PRINT2 (" start: %p\n", regstart[this_reg]); \ PUSH_FAILURE_POINTER (regstart[this_reg]); \ \ DEBUG_PRINT2 (" end: %p\n", regend[this_reg]); \ PUSH_FAILURE_POINTER (regend[this_reg]); \ \ DEBUG_PRINT2 (" info: %p\n ", \ reg_info[this_reg].word.pointer); \ DEBUG_PRINT2 (" match_null=%d", \ REG_MATCH_NULL_STRING_P (reg_info[this_reg])); \ DEBUG_PRINT2 (" active=%d", IS_ACTIVE (reg_info[this_reg])); \ DEBUG_PRINT2 (" matched_something=%d", \ MATCHED_SOMETHING (reg_info[this_reg])); \ DEBUG_PRINT2 (" ever_matched=%d", \ EVER_MATCHED_SOMETHING (reg_info[this_reg])); \ DEBUG_PRINT1 ("\n"); \ PUSH_FAILURE_ELT (reg_info[this_reg].word); \ } \ \ DEBUG_PRINT2 (" Pushing low active reg: %ld\n", lowest_active_reg);\ PUSH_FAILURE_INT (lowest_active_reg); \ \ DEBUG_PRINT2 (" Pushing high active reg: %ld\n", highest_active_reg);\ PUSH_FAILURE_INT (highest_active_reg); \ \ DEBUG_PRINT2 (" Pushing pattern %p:\n", pattern_place); \ DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern_place, pend); \ PUSH_FAILURE_POINTER (pattern_place); \ \ DEBUG_PRINT2 (" Pushing string %p: `", string_place); \ DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2, \ size2); \ DEBUG_PRINT1 ("'\n"); \ PUSH_FAILURE_POINTER (string_place); \ \ DEBUG_PRINT2 (" Pushing failure id: %u\n", failure_id); \ DEBUG_PUSH (failure_id); \ } while (0) # ifndef DEFINED_ONCE /* This is the number of items that are pushed and popped on the stack for each register. */ # define NUM_REG_ITEMS 3 /* Individual items aside from the registers. */ # ifdef DEBUG # define NUM_NONREG_ITEMS 5 /* Includes failure point id. */ # else # define NUM_NONREG_ITEMS 4 # endif /* We push at most this many items on the stack. */ /* We used to use (num_regs - 1), which is the number of registers this regexp will save; but that was changed to 5 to avoid stack overflow for a regexp with lots of parens. */ # define MAX_FAILURE_ITEMS (5 * NUM_REG_ITEMS + NUM_NONREG_ITEMS) /* We actually push this many items. */ # define NUM_FAILURE_ITEMS \ (((0 \ ? 0 : highest_active_reg - lowest_active_reg + 1) \ * NUM_REG_ITEMS) \ + NUM_NONREG_ITEMS) /* How many items can still be added to the stack without overflowing it. */ # define REMAINING_AVAIL_SLOTS ((fail_stack).size - (fail_stack).avail) # endif /* not DEFINED_ONCE */ /* Pops what PUSH_FAIL_STACK pushes. We restore into the parameters, all of which should be lvalues: STR -- the saved data position. PAT -- the saved pattern position. LOW_REG, HIGH_REG -- the highest and lowest active registers. REGSTART, REGEND -- arrays of string positions. REG_INFO -- array of information about each subexpression. Also assumes the variables `fail_stack' and (if debugging), `bufp', `pend', `string1', `size1', `string2', and `size2'. */ # define POP_FAILURE_POINT(str, pat, low_reg, high_reg, regstart, regend, reg_info)\ { \ DEBUG_STATEMENT (unsigned failure_id;) \ active_reg_t this_reg; \ const UCHAR_T *string_temp; \ \ assert (!FAIL_STACK_EMPTY ()); \ \ /* Remove failure points and point to how many regs pushed. */ \ DEBUG_PRINT1 ("POP_FAILURE_POINT:\n"); \ DEBUG_PRINT2 (" Before pop, next avail: %d\n", fail_stack.avail); \ DEBUG_PRINT2 (" size: %d\n", fail_stack.size); \ \ assert (fail_stack.avail >= NUM_NONREG_ITEMS); \ \ DEBUG_POP (&failure_id); \ DEBUG_PRINT2 (" Popping failure id: %u\n", failure_id); \ \ /* If the saved string location is NULL, it came from an \ on_failure_keep_string_jump opcode, and we want to throw away the \ saved NULL, thus retaining our current position in the string. */ \ string_temp = POP_FAILURE_POINTER (); \ if (string_temp != NULL) \ str = (const CHAR_T *) string_temp; \ \ DEBUG_PRINT2 (" Popping string %p: `", str); \ DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2); \ DEBUG_PRINT1 ("'\n"); \ \ pat = (UCHAR_T *) POP_FAILURE_POINTER (); \ DEBUG_PRINT2 (" Popping pattern %p:\n", pat); \ DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend); \ \ /* Restore register info. */ \ high_reg = (active_reg_t) POP_FAILURE_INT (); \ DEBUG_PRINT2 (" Popping high active reg: %ld\n", high_reg); \ \ low_reg = (active_reg_t) POP_FAILURE_INT (); \ DEBUG_PRINT2 (" Popping low active reg: %ld\n", low_reg); \ \ if (1) \ for (this_reg = high_reg; this_reg >= low_reg; this_reg--) \ { \ DEBUG_PRINT2 (" Popping reg: %ld\n", this_reg); \ \ reg_info[this_reg].word = POP_FAILURE_ELT (); \ DEBUG_PRINT2 (" info: %p\n", \ reg_info[this_reg].word.pointer); \ \ regend[this_reg] = (const CHAR_T *) POP_FAILURE_POINTER (); \ DEBUG_PRINT2 (" end: %p\n", regend[this_reg]); \ \ regstart[this_reg] = (const CHAR_T *) POP_FAILURE_POINTER (); \ DEBUG_PRINT2 (" start: %p\n", regstart[this_reg]); \ } \ else \ { \ for (this_reg = highest_active_reg; this_reg > high_reg; this_reg--) \ { \ reg_info[this_reg].word.integer = 0; \ regend[this_reg] = 0; \ regstart[this_reg] = 0; \ } \ highest_active_reg = high_reg; \ } \ \ set_regs_matched_done = 0; \ DEBUG_STATEMENT (nfailure_points_popped++); \ } /* POP_FAILURE_POINT */ /* Structure for per-register (a.k.a. per-group) information. Other register information, such as the starting and ending positions (which are addresses), and the list of inner groups (which is a bits list) are maintained in separate variables. We are making a (strictly speaking) nonportable assumption here: that the compiler will pack our bit fields into something that fits into the type of `word', i.e., is something that fits into one item on the failure stack. */ /* Declarations and macros for re_match_2. */ typedef union { PREFIX(fail_stack_elt_t) word; struct { /* This field is one if this group can match the empty string, zero if not. If not yet determined, `MATCH_NULL_UNSET_VALUE'. */ # define MATCH_NULL_UNSET_VALUE 3 unsigned match_null_string_p : 2; unsigned is_active : 1; unsigned matched_something : 1; unsigned ever_matched_something : 1; } bits; } PREFIX(register_info_type); # ifndef DEFINED_ONCE # define REG_MATCH_NULL_STRING_P(R) ((R).bits.match_null_string_p) # define IS_ACTIVE(R) ((R).bits.is_active) # define MATCHED_SOMETHING(R) ((R).bits.matched_something) # define EVER_MATCHED_SOMETHING(R) ((R).bits.ever_matched_something) /* Call this when have matched a real character; it sets `matched' flags for the subexpressions which we are currently inside. Also records that those subexprs have matched. */ # define SET_REGS_MATCHED() \ do \ { \ if (!set_regs_matched_done) \ { \ active_reg_t r; \ set_regs_matched_done = 1; \ for (r = lowest_active_reg; r <= highest_active_reg; r++) \ { \ MATCHED_SOMETHING (reg_info[r]) \ = EVER_MATCHED_SOMETHING (reg_info[r]) \ = 1; \ } \ } \ } \ while (0) # endif /* not DEFINED_ONCE */ /* Registers are set to a sentinel when they haven't yet matched. */ static CHAR_T PREFIX(reg_unset_dummy); # define REG_UNSET_VALUE (&PREFIX(reg_unset_dummy)) # define REG_UNSET(e) ((e) == REG_UNSET_VALUE) /* Subroutine declarations and macros for regex_compile. */ static void PREFIX(store_op1) (re_opcode_t op, UCHAR_T *loc, int arg); static void PREFIX(store_op2) (re_opcode_t op, UCHAR_T *loc, int arg1, int arg2); static void PREFIX(insert_op1) (re_opcode_t op, UCHAR_T *loc, int arg, UCHAR_T *end); static void PREFIX(insert_op2) (re_opcode_t op, UCHAR_T *loc, int arg1, int arg2, UCHAR_T *end); static boolean PREFIX(at_begline_loc_p) (const CHAR_T *pattern, const CHAR_T *p, reg_syntax_t syntax); static boolean PREFIX(at_endline_loc_p) (const CHAR_T *p, const CHAR_T *pend, reg_syntax_t syntax); # ifdef WCHAR static reg_errcode_t wcs_compile_range (CHAR_T range_start, const CHAR_T **p_ptr, const CHAR_T *pend, char *translate, reg_syntax_t syntax, UCHAR_T *b, CHAR_T *char_set); static void insert_space (int num, CHAR_T *loc, CHAR_T *end); # else /* BYTE */ static reg_errcode_t byte_compile_range (unsigned int range_start, const char **p_ptr, const char *pend, char *translate, reg_syntax_t syntax, unsigned char *b); # endif /* WCHAR */ /* Fetch the next character in the uncompiled pattern---translating it if necessary. Also cast from a signed character in the constant string passed to us by the user to an unsigned char that we can use as an array index (in, e.g., `translate'). */ /* ifdef MBS_SUPPORT, we translate only if character <= 0xff, because it is impossible to allocate 4GB array for some encodings which have 4 byte character_set like UCS4. */ # ifndef PATFETCH # ifdef WCHAR # define PATFETCH(c) \ do {if (p == pend) return REG_EEND; \ c = (UCHAR_T) *p++; \ if (translate && (c <= 0xff)) c = (UCHAR_T) translate[c]; \ } while (0) # else /* BYTE */ # define PATFETCH(c) \ do {if (p == pend) return REG_EEND; \ c = (unsigned char) *p++; \ if (translate) c = (unsigned char) translate[c]; \ } while (0) # endif /* WCHAR */ # endif /* Fetch the next character in the uncompiled pattern, with no translation. */ # define PATFETCH_RAW(c) \ do {if (p == pend) return REG_EEND; \ c = (UCHAR_T) *p++; \ } while (0) /* Go backwards one character in the pattern. */ # define PATUNFETCH p-- /* If `translate' is non-null, return translate[D], else just D. We cast the subscript to translate because some data is declared as `char *', to avoid warnings when a string constant is passed. But when we use a character as a subscript we must make it unsigned. */ /* ifdef MBS_SUPPORT, we translate only if character <= 0xff, because it is impossible to allocate 4GB array for some encodings which have 4 byte character_set like UCS4. */ # ifndef TRANSLATE # ifdef WCHAR # define TRANSLATE(d) \ ((translate && ((UCHAR_T) (d)) <= 0xff) \ ? (char) translate[(unsigned char) (d)] : (d)) # else /* BYTE */ # define TRANSLATE(d) \ (translate ? (char) translate[(unsigned char) (d)] : (char) (d)) # endif /* WCHAR */ # endif /* Macros for outputting the compiled pattern into `buffer'. */ /* If the buffer isn't allocated when it comes in, use this. */ # define INIT_BUF_SIZE (32 * sizeof(UCHAR_T)) /* Make sure we have at least N more bytes of space in buffer. */ # ifdef WCHAR # define GET_BUFFER_SPACE(n) \ while (((unsigned long)b - (unsigned long)COMPILED_BUFFER_VAR \ + (n)*sizeof(CHAR_T)) > bufp->allocated) \ EXTEND_BUFFER () # else /* BYTE */ # define GET_BUFFER_SPACE(n) \ while ((unsigned long) (b - bufp->buffer + (n)) > bufp->allocated) \ EXTEND_BUFFER () # endif /* WCHAR */ /* Make sure we have one more byte of buffer space and then add C to it. */ # define BUF_PUSH(c) \ do { \ GET_BUFFER_SPACE (1); \ *b++ = (UCHAR_T) (c); \ } while (0) /* Ensure we have two more bytes of buffer space and then append C1 and C2. */ # define BUF_PUSH_2(c1, c2) \ do { \ GET_BUFFER_SPACE (2); \ *b++ = (UCHAR_T) (c1); \ *b++ = (UCHAR_T) (c2); \ } while (0) /* As with BUF_PUSH_2, except for three bytes. */ # define BUF_PUSH_3(c1, c2, c3) \ do { \ GET_BUFFER_SPACE (3); \ *b++ = (UCHAR_T) (c1); \ *b++ = (UCHAR_T) (c2); \ *b++ = (UCHAR_T) (c3); \ } while (0) /* Store a jump with opcode OP at LOC to location TO. We store a relative address offset by the three bytes the jump itself occupies. */ # define STORE_JUMP(op, loc, to) \ PREFIX(store_op1) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE))) /* Likewise, for a two-argument jump. */ # define STORE_JUMP2(op, loc, to, arg) \ PREFIX(store_op2) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE)), arg) /* Like `STORE_JUMP', but for inserting. Assume `b' is the buffer end. */ # define INSERT_JUMP(op, loc, to) \ PREFIX(insert_op1) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE)), b) /* Like `STORE_JUMP2', but for inserting. Assume `b' is the buffer end. */ # define INSERT_JUMP2(op, loc, to, arg) \ PREFIX(insert_op2) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE)),\ arg, b) /* This is not an arbitrary limit: the arguments which represent offsets into the pattern are two bytes long. So if 2^16 bytes turns out to be too small, many things would have to change. */ /* Any other compiler which, like MSC, has allocation limit below 2^16 bytes will have to use approach similar to what was done below for MSC and drop MAX_BUF_SIZE a bit. Otherwise you may end up reallocating to 0 bytes. Such thing is not going to work too well. You have been warned!! */ # ifndef DEFINED_ONCE # if defined _MSC_VER && !defined WIN32 /* Microsoft C 16-bit versions limit malloc to approx 65512 bytes. The REALLOC define eliminates a flurry of conversion warnings, but is not required. */ # define MAX_BUF_SIZE 65500L # define REALLOC(p,s) realloc ((p), (size_t) (s)) # else # define MAX_BUF_SIZE (1L << 16) # define REALLOC(p,s) realloc ((p), (s)) # endif /* Extend the buffer by twice its current size via realloc and reset the pointers that pointed into the old block to point to the correct places in the new one. If extending the buffer results in it being larger than MAX_BUF_SIZE, then flag memory exhausted. */ # if __BOUNDED_POINTERS__ # define SET_HIGH_BOUND(P) (__ptrhigh (P) = __ptrlow (P) + bufp->allocated) # define MOVE_BUFFER_POINTER(P) \ (__ptrlow (P) += incr, SET_HIGH_BOUND (P), __ptrvalue (P) += incr) # define ELSE_EXTEND_BUFFER_HIGH_BOUND \ else \ { \ SET_HIGH_BOUND (b); \ SET_HIGH_BOUND (begalt); \ if (fixup_alt_jump) \ SET_HIGH_BOUND (fixup_alt_jump); \ if (laststart) \ SET_HIGH_BOUND (laststart); \ if (pending_exact) \ SET_HIGH_BOUND (pending_exact); \ } # else # define MOVE_BUFFER_POINTER(P) (P) += incr # define ELSE_EXTEND_BUFFER_HIGH_BOUND # endif # endif /* not DEFINED_ONCE */ # ifdef WCHAR # define EXTEND_BUFFER() \ do { \ UCHAR_T *old_buffer = COMPILED_BUFFER_VAR; \ int wchar_count; \ if (bufp->allocated + sizeof(UCHAR_T) > MAX_BUF_SIZE) \ return REG_ESIZE; \ bufp->allocated <<= 1; \ if (bufp->allocated > MAX_BUF_SIZE) \ bufp->allocated = MAX_BUF_SIZE; \ /* How many characters the new buffer can have? */ \ wchar_count = bufp->allocated / sizeof(UCHAR_T); \ if (wchar_count == 0) wchar_count = 1; \ /* Truncate the buffer to CHAR_T align. */ \ bufp->allocated = wchar_count * sizeof(UCHAR_T); \ RETALLOC (COMPILED_BUFFER_VAR, wchar_count, UCHAR_T); \ bufp->buffer = (char*)COMPILED_BUFFER_VAR; \ if (COMPILED_BUFFER_VAR == NULL) \ return REG_ESPACE; \ /* If the buffer moved, move all the pointers into it. */ \ if (old_buffer != COMPILED_BUFFER_VAR) \ { \ int incr = COMPILED_BUFFER_VAR - old_buffer; \ MOVE_BUFFER_POINTER (b); \ MOVE_BUFFER_POINTER (begalt); \ if (fixup_alt_jump) \ MOVE_BUFFER_POINTER (fixup_alt_jump); \ if (laststart) \ MOVE_BUFFER_POINTER (laststart); \ if (pending_exact) \ MOVE_BUFFER_POINTER (pending_exact); \ } \ ELSE_EXTEND_BUFFER_HIGH_BOUND \ } while (0) # else /* BYTE */ # define EXTEND_BUFFER() \ do { \ UCHAR_T *old_buffer = COMPILED_BUFFER_VAR; \ if (bufp->allocated == MAX_BUF_SIZE) \ return REG_ESIZE; \ bufp->allocated <<= 1; \ if (bufp->allocated > MAX_BUF_SIZE) \ bufp->allocated = MAX_BUF_SIZE; \ bufp->buffer = (UCHAR_T *) REALLOC (COMPILED_BUFFER_VAR, \ bufp->allocated); \ if (COMPILED_BUFFER_VAR == NULL) \ return REG_ESPACE; \ /* If the buffer moved, move all the pointers into it. */ \ if (old_buffer != COMPILED_BUFFER_VAR) \ { \ int incr = COMPILED_BUFFER_VAR - old_buffer; \ MOVE_BUFFER_POINTER (b); \ MOVE_BUFFER_POINTER (begalt); \ if (fixup_alt_jump) \ MOVE_BUFFER_POINTER (fixup_alt_jump); \ if (laststart) \ MOVE_BUFFER_POINTER (laststart); \ if (pending_exact) \ MOVE_BUFFER_POINTER (pending_exact); \ } \ ELSE_EXTEND_BUFFER_HIGH_BOUND \ } while (0) # endif /* WCHAR */ # ifndef DEFINED_ONCE /* Since we have one byte reserved for the register number argument to {start,stop}_memory, the maximum number of groups we can report things about is what fits in that byte. */ # define MAX_REGNUM 255 /* But patterns can have more than `MAX_REGNUM' registers. We just ignore the excess. */ typedef unsigned regnum_t; /* Macros for the compile stack. */ /* Since offsets can go either forwards or backwards, this type needs to be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1. */ /* int may be not enough when sizeof(int) == 2. */ typedef long pattern_offset_t; typedef struct { pattern_offset_t begalt_offset; pattern_offset_t fixup_alt_jump; pattern_offset_t inner_group_offset; pattern_offset_t laststart_offset; regnum_t regnum; } compile_stack_elt_t; typedef struct { compile_stack_elt_t *stack; unsigned size; unsigned avail; /* Offset of next open position. */ } compile_stack_type; # define INIT_COMPILE_STACK_SIZE 32 # define COMPILE_STACK_EMPTY (compile_stack.avail == 0) # define COMPILE_STACK_FULL (compile_stack.avail == compile_stack.size) /* The next available element. */ # define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail]) # endif /* not DEFINED_ONCE */ /* Set the bit for character C in a list. */ # ifndef DEFINED_ONCE # define SET_LIST_BIT(c) \ (b[((unsigned char) (c)) / BYTEWIDTH] \ |= 1 << (((unsigned char) c) % BYTEWIDTH)) # endif /* DEFINED_ONCE */ /* Get the next unsigned number in the uncompiled pattern. */ # define GET_UNSIGNED_NUMBER(num) \ { \ while (p != pend) \ { \ PATFETCH (c); \ if (c < '0' || c > '9') \ break; \ if (num <= RE_DUP_MAX) \ { \ if (num < 0) \ num = 0; \ num = num * 10 + c - '0'; \ } \ } \ } # ifndef DEFINED_ONCE # if defined _LIBC || WIDE_CHAR_SUPPORT /* The GNU C library provides support for user-defined character classes and the functions from ISO C amendement 1. */ # ifdef CHARCLASS_NAME_MAX # define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX # else /* This shouldn't happen but some implementation might still have this problem. Use a reasonable default value. */ # define CHAR_CLASS_MAX_LENGTH 256 # endif # ifdef _LIBC # define IS_CHAR_CLASS(string) __wctype (string) # else # define IS_CHAR_CLASS(string) wctype (string) # endif # else # define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */ # define IS_CHAR_CLASS(string) \ (STREQ (string, "alpha") || STREQ (string, "upper") \ || STREQ (string, "lower") || STREQ (string, "digit") \ || STREQ (string, "alnum") || STREQ (string, "xdigit") \ || STREQ (string, "space") || STREQ (string, "print") \ || STREQ (string, "punct") || STREQ (string, "graph") \ || STREQ (string, "cntrl") || STREQ (string, "blank")) # endif # endif /* DEFINED_ONCE */ # ifndef MATCH_MAY_ALLOCATE /* If we cannot allocate large objects within re_match_2_internal, we make the fail stack and register vectors global. The fail stack, we grow to the maximum size when a regexp is compiled. The register vectors, we adjust in size each time we compile a regexp, according to the number of registers it needs. */ static PREFIX(fail_stack_type) fail_stack; /* Size with which the following vectors are currently allocated. That is so we can make them bigger as needed, but never make them smaller. */ # ifdef DEFINED_ONCE static int regs_allocated_size; static const char ** regstart, ** regend; static const char ** old_regstart, ** old_regend; static const char **best_regstart, **best_regend; static const char **reg_dummy; # endif /* DEFINED_ONCE */ static PREFIX(register_info_type) *PREFIX(reg_info); static PREFIX(register_info_type) *PREFIX(reg_info_dummy); /* Make the register vectors big enough for NUM_REGS registers, but don't make them smaller. */ static void PREFIX(regex_grow_registers) (int num_regs) { if (num_regs > regs_allocated_size) { RETALLOC_IF (regstart, num_regs, const char *); RETALLOC_IF (regend, num_regs, const char *); RETALLOC_IF (old_regstart, num_regs, const char *); RETALLOC_IF (old_regend, num_regs, const char *); RETALLOC_IF (best_regstart, num_regs, const char *); RETALLOC_IF (best_regend, num_regs, const char *); RETALLOC_IF (PREFIX(reg_info), num_regs, PREFIX(register_info_type)); RETALLOC_IF (reg_dummy, num_regs, const char *); RETALLOC_IF (PREFIX(reg_info_dummy), num_regs, PREFIX(register_info_type)); regs_allocated_size = num_regs; } } # endif /* not MATCH_MAY_ALLOCATE */ # ifndef DEFINED_ONCE static boolean group_in_compile_stack (compile_stack_type compile_stack, regnum_t regnum); # endif /* not DEFINED_ONCE */ /* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX. Returns one of error codes defined in `regex.h', or zero for success. Assumes the `allocated' (and perhaps `buffer') and `translate' fields are set in BUFP on entry. If it succeeds, results are put in BUFP (if it returns an error, the contents of BUFP are undefined): `buffer' is the compiled pattern; `syntax' is set to SYNTAX; `used' is set to the length of the compiled pattern; `fastmap_accurate' is zero; `re_nsub' is the number of subexpressions in PATTERN; `not_bol' and `not_eol' are zero; The `fastmap' and `newline_anchor' fields are neither examined nor set. */ /* Return, freeing storage we allocated. */ # ifdef WCHAR # define FREE_STACK_RETURN(value) \ return (free(pattern), free(mbs_offset), free(is_binary), free (compile_stack.stack), value) # else # define FREE_STACK_RETURN(value) \ return (free (compile_stack.stack), value) # endif /* WCHAR */ static reg_errcode_t PREFIX(regex_compile) (const char *ARG_PREFIX(pattern), size_t ARG_PREFIX(size), reg_syntax_t syntax, struct re_pattern_buffer *bufp) { /* We fetch characters from PATTERN here. Even though PATTERN is `char *' (i.e., signed), we declare these variables as unsigned, so they can be reliably used as array indices. */ register UCHAR_T c, c1; #ifdef WCHAR /* A temporary space to keep wchar_t pattern and compiled pattern. */ CHAR_T *pattern, *COMPILED_BUFFER_VAR; size_t size; /* offset buffer for optimization. See convert_mbs_to_wc. */ int *mbs_offset = NULL; /* It hold whether each wchar_t is binary data or not. */ char *is_binary = NULL; /* A flag whether exactn is handling binary data or not. */ char is_exactn_bin = FALSE; #endif /* WCHAR */ /* A random temporary spot in PATTERN. */ const CHAR_T *p1; /* Points to the end of the buffer, where we should append. */ register UCHAR_T *b; /* Keeps track of unclosed groups. */ compile_stack_type compile_stack; /* Points to the current (ending) position in the pattern. */ #ifdef WCHAR const CHAR_T *p; const CHAR_T *pend; #else /* BYTE */ const CHAR_T *p = pattern; const CHAR_T *pend = pattern + size; #endif /* WCHAR */ /* How to translate the characters in the pattern. */ RE_TRANSLATE_TYPE translate = bufp->translate; /* Address of the count-byte of the most recently inserted `exactn' command. This makes it possible to tell if a new exact-match character can be added to that command or if the character requires a new `exactn' command. */ UCHAR_T *pending_exact = 0; /* Address of start of the most recently finished expression. This tells, e.g., postfix * where to find the start of its operand. Reset at the beginning of groups and alternatives. */ UCHAR_T *laststart = 0; /* Address of beginning of regexp, or inside of last group. */ UCHAR_T *begalt; /* Address of the place where a forward jump should go to the end of the containing expression. Each alternative of an `or' -- except the last -- ends with a forward jump of this sort. */ UCHAR_T *fixup_alt_jump = 0; /* Counts open-groups as they are encountered. Remembered for the matching close-group on the compile stack, so the same register number is put in the stop_memory as the start_memory. */ regnum_t regnum = 0; #ifdef WCHAR /* Initialize the wchar_t PATTERN and offset_buffer. */ p = pend = pattern = TALLOC(csize + 1, CHAR_T); mbs_offset = TALLOC(csize + 1, int); is_binary = TALLOC(csize + 1, char); if (pattern == NULL || mbs_offset == NULL || is_binary == NULL) { free(pattern); free(mbs_offset); free(is_binary); return REG_ESPACE; } pattern[csize] = L'\0'; /* sentinel */ size = convert_mbs_to_wcs(pattern, cpattern, csize, mbs_offset, is_binary); pend = p + size; if (size < 0) { free(pattern); free(mbs_offset); free(is_binary); return REG_BADPAT; } #endif #ifdef DEBUG DEBUG_PRINT1 ("\nCompiling pattern: "); if (debug) { unsigned debug_count; for (debug_count = 0; debug_count < size; debug_count++) PUT_CHAR (pattern[debug_count]); putchar ('\n'); } #endif /* DEBUG */ /* Initialize the compile stack. */ compile_stack.stack = TALLOC (INIT_COMPILE_STACK_SIZE, compile_stack_elt_t); if (compile_stack.stack == NULL) { #ifdef WCHAR free(pattern); free(mbs_offset); free(is_binary); #endif return REG_ESPACE; } compile_stack.size = INIT_COMPILE_STACK_SIZE; compile_stack.avail = 0; /* Initialize the pattern buffer. */ bufp->syntax = syntax; bufp->fastmap_accurate = 0; bufp->not_bol = bufp->not_eol = 0; /* Set `used' to zero, so that if we return an error, the pattern printer (for debugging) will think there's no pattern. We reset it at the end. */ bufp->used = 0; /* Always count groups, whether or not bufp->no_sub is set. */ bufp->re_nsub = 0; #if !defined emacs && !defined SYNTAX_TABLE /* Initialize the syntax table. */ init_syntax_once (); #endif if (bufp->allocated == 0) { if (bufp->buffer) { /* If zero allocated, but buffer is non-null, try to realloc enough space. This loses if buffer's address is bogus, but that is the user's responsibility. */ #ifdef WCHAR /* Free bufp->buffer and allocate an array for wchar_t pattern buffer. */ free(bufp->buffer); COMPILED_BUFFER_VAR = TALLOC (INIT_BUF_SIZE/sizeof(UCHAR_T), UCHAR_T); #else RETALLOC (COMPILED_BUFFER_VAR, INIT_BUF_SIZE, UCHAR_T); #endif /* WCHAR */ } else { /* Caller did not allocate a buffer. Do it for them. */ COMPILED_BUFFER_VAR = TALLOC (INIT_BUF_SIZE / sizeof(UCHAR_T), UCHAR_T); } if (!COMPILED_BUFFER_VAR) FREE_STACK_RETURN (REG_ESPACE); #ifdef WCHAR bufp->buffer = (char*)COMPILED_BUFFER_VAR; #endif /* WCHAR */ bufp->allocated = INIT_BUF_SIZE; } #ifdef WCHAR else COMPILED_BUFFER_VAR = (UCHAR_T*) bufp->buffer; #endif begalt = b = COMPILED_BUFFER_VAR; /* Loop through the uncompiled pattern until we're at the end. */ while (p != pend) { PATFETCH (c); switch (c) { case '^': { if ( /* If at start of pattern, it's an operator. */ p == pattern + 1 /* If context independent, it's an operator. */ || syntax & RE_CONTEXT_INDEP_ANCHORS /* Otherwise, depends on what's come before. */ || PREFIX(at_begline_loc_p) (pattern, p, syntax)) BUF_PUSH (begline); else goto normal_char; } break; case '$': { if ( /* If at end of pattern, it's an operator. */ p == pend /* If context independent, it's an operator. */ || syntax & RE_CONTEXT_INDEP_ANCHORS /* Otherwise, depends on what's next. */ || PREFIX(at_endline_loc_p) (p, pend, syntax)) BUF_PUSH (endline); else goto normal_char; } break; case '+': case '?': if ((syntax & RE_BK_PLUS_QM) || (syntax & RE_LIMITED_OPS)) goto normal_char; handle_plus: case '*': /* If there is no previous pattern... */ if (!laststart) { if (syntax & RE_CONTEXT_INVALID_OPS) FREE_STACK_RETURN (REG_BADRPT); else if (!(syntax & RE_CONTEXT_INDEP_OPS)) goto normal_char; } { /* Are we optimizing this jump? */ boolean keep_string_p = false; /* 1 means zero (many) matches is allowed. */ char zero_times_ok = 0, many_times_ok = 0; /* If there is a sequence of repetition chars, collapse it down to just one (the right one). We can't combine interval operators with these because of, e.g., `a{2}*', which should only match an even number of `a's. */ for (;;) { zero_times_ok |= c != '+'; many_times_ok |= c != '?'; if (p == pend) break; PATFETCH (c); if (c == '*' || (!(syntax & RE_BK_PLUS_QM) && (c == '+' || c == '?'))) ; else if (syntax & RE_BK_PLUS_QM && c == '\\') { if (p == pend) FREE_STACK_RETURN (REG_EESCAPE); PATFETCH (c1); if (!(c1 == '+' || c1 == '?')) { PATUNFETCH; PATUNFETCH; break; } c = c1; } else { PATUNFETCH; break; } /* If we get here, we found another repeat character. */ } /* Star, etc. applied to an empty pattern is equivalent to an empty pattern. */ if (!laststart) break; /* Now we know whether or not zero matches is allowed and also whether or not two or more matches is allowed. */ if (many_times_ok) { /* More than one repetition is allowed, so put in at the end a backward relative jump from `b' to before the next jump we're going to put in below (which jumps from laststart to after this jump). But if we are at the `*' in the exact sequence `.*\n', insert an unconditional jump backwards to the ., instead of the beginning of the loop. This way we only push a failure point once, instead of every time through the loop. */ assert (p - 1 > pattern); /* Allocate the space for the jump. */ GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE); /* We know we are not at the first character of the pattern, because laststart was nonzero. And we've already incremented `p', by the way, to be the character after the `*'. Do we have to do something analogous here for null bytes, because of RE_DOT_NOT_NULL? */ if (TRANSLATE (*(p - 2)) == TRANSLATE ('.') && zero_times_ok && p < pend && TRANSLATE (*p) == TRANSLATE ('\n') && !(syntax & RE_DOT_NEWLINE)) { /* We have .*\n. */ STORE_JUMP (jump, b, laststart); keep_string_p = true; } else /* Anything else. */ STORE_JUMP (maybe_pop_jump, b, laststart - (1 + OFFSET_ADDRESS_SIZE)); /* We've added more stuff to the buffer. */ b += 1 + OFFSET_ADDRESS_SIZE; } /* On failure, jump from laststart to b + 3, which will be the end of the buffer after this jump is inserted. */ /* ifdef WCHAR, 'b + 1 + OFFSET_ADDRESS_SIZE' instead of 'b + 3'. */ GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE); INSERT_JUMP (keep_string_p ? on_failure_keep_string_jump : on_failure_jump, laststart, b + 1 + OFFSET_ADDRESS_SIZE); pending_exact = 0; b += 1 + OFFSET_ADDRESS_SIZE; if (!zero_times_ok) { /* At least one repetition is required, so insert a `dummy_failure_jump' before the initial `on_failure_jump' instruction of the loop. This effects a skip over that instruction the first time we hit that loop. */ GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE); INSERT_JUMP (dummy_failure_jump, laststart, laststart + 2 + 2 * OFFSET_ADDRESS_SIZE); b += 1 + OFFSET_ADDRESS_SIZE; } } break; case '.': laststart = b; BUF_PUSH (anychar); break; case '[': { boolean had_char_class = false; #ifdef WCHAR CHAR_T range_start = 0xffffffff; #else unsigned int range_start = 0xffffffff; #endif if (p == pend) FREE_STACK_RETURN (REG_EBRACK); #ifdef WCHAR /* We assume a charset(_not) structure as a wchar_t array. charset[0] = (re_opcode_t) charset(_not) charset[1] = l (= length of char_classes) charset[2] = m (= length of collating_symbols) charset[3] = n (= length of equivalence_classes) charset[4] = o (= length of char_ranges) charset[5] = p (= length of chars) charset[6] = char_class (wctype_t) charset[6+CHAR_CLASS_SIZE] = char_class (wctype_t) ... charset[l+5] = char_class (wctype_t) charset[l+6] = collating_symbol (wchar_t) ... charset[l+m+5] = collating_symbol (wchar_t) ifdef _LIBC we use the index if _NL_COLLATE_SYMB_EXTRAMB instead of wchar_t string. charset[l+m+6] = equivalence_classes (wchar_t) ... charset[l+m+n+5] = equivalence_classes (wchar_t) ifdef _LIBC we use the index in _NL_COLLATE_WEIGHT instead of wchar_t string. charset[l+m+n+6] = range_start charset[l+m+n+7] = range_end ... charset[l+m+n+2o+4] = range_start charset[l+m+n+2o+5] = range_end ifdef _LIBC we use the value looked up in _NL_COLLATE_COLLSEQ instead of wchar_t character. charset[l+m+n+2o+6] = char ... charset[l+m+n+2o+p+5] = char */ /* We need at least 6 spaces: the opcode, the length of char_classes, the length of collating_symbols, the length of equivalence_classes, the length of char_ranges, the length of chars. */ GET_BUFFER_SPACE (6); /* Save b as laststart. And We use laststart as the pointer to the first element of the charset here. In other words, laststart[i] indicates charset[i]. */ laststart = b; /* We test `*p == '^' twice, instead of using an if statement, so we only need one BUF_PUSH. */ BUF_PUSH (*p == '^' ? charset_not : charset); if (*p == '^') p++; /* Push the length of char_classes, the length of collating_symbols, the length of equivalence_classes, the length of char_ranges and the length of chars. */ BUF_PUSH_3 (0, 0, 0); BUF_PUSH_2 (0, 0); /* Remember the first position in the bracket expression. */ p1 = p; /* charset_not matches newline according to a syntax bit. */ if ((re_opcode_t) b[-6] == charset_not && (syntax & RE_HAT_LISTS_NOT_NEWLINE)) { BUF_PUSH('\n'); laststart[5]++; /* Update the length of characters */ } /* Read in characters and ranges, setting map bits. */ for (;;) { if (p == pend) FREE_STACK_RETURN (REG_EBRACK); PATFETCH (c); /* \ might escape characters inside [...] and [^...]. */ if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\') { if (p == pend) FREE_STACK_RETURN (REG_EESCAPE); PATFETCH (c1); BUF_PUSH(c1); laststart[5]++; /* Update the length of chars */ range_start = c1; continue; } /* Could be the end of the bracket expression. If it's not (i.e., when the bracket expression is `[]' so far), the ']' character bit gets set way below. */ if (c == ']' && p != p1 + 1) break; /* Look ahead to see if it's a range when the last thing was a character class. */ if (had_char_class && c == '-' && *p != ']') FREE_STACK_RETURN (REG_ERANGE); /* Look ahead to see if it's a range when the last thing was a character: if this is a hyphen not at the beginning or the end of a list, then it's the range operator. */ if (c == '-' && !(p - 2 >= pattern && p[-2] == '[') && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^') && *p != ']') { reg_errcode_t ret; /* Allocate the space for range_start and range_end. */ GET_BUFFER_SPACE (2); /* Update the pointer to indicate end of buffer. */ b += 2; ret = wcs_compile_range (range_start, &p, pend, translate, syntax, b, laststart); if (ret != REG_NOERROR) FREE_STACK_RETURN (ret); range_start = 0xffffffff; } else if (p[0] == '-' && p[1] != ']') { /* This handles ranges made up of characters only. */ reg_errcode_t ret; /* Move past the `-'. */ PATFETCH (c1); /* Allocate the space for range_start and range_end. */ GET_BUFFER_SPACE (2); /* Update the pointer to indicate end of buffer. */ b += 2; ret = wcs_compile_range (c, &p, pend, translate, syntax, b, laststart); if (ret != REG_NOERROR) FREE_STACK_RETURN (ret); range_start = 0xffffffff; } /* See if we're at the beginning of a possible character class. */ else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':') { /* Leave room for the null. */ char str[CHAR_CLASS_MAX_LENGTH + 1]; PATFETCH (c); c1 = 0; /* If pattern is `[[:'. */ if (p == pend) FREE_STACK_RETURN (REG_EBRACK); for (;;) { PATFETCH (c); if ((c == ':' && *p == ']') || p == pend) break; if (c1 < CHAR_CLASS_MAX_LENGTH) str[c1++] = c; else /* This is in any case an invalid class name. */ str[0] = '\0'; } str[c1] = '\0'; /* If isn't a word bracketed by `[:' and `:]': undo the ending character, the letters, and leave the leading `:' and `[' (but store them as character). */ if (c == ':' && *p == ']') { wctype_t wt; uintptr_t alignedp; /* Query the character class as wctype_t. */ wt = IS_CHAR_CLASS (str); if (wt == 0) FREE_STACK_RETURN (REG_ECTYPE); /* Throw away the ] at the end of the character class. */ PATFETCH (c); if (p == pend) FREE_STACK_RETURN (REG_EBRACK); /* Allocate the space for character class. */ GET_BUFFER_SPACE(CHAR_CLASS_SIZE); /* Update the pointer to indicate end of buffer. */ b += CHAR_CLASS_SIZE; /* Move data which follow character classes not to violate the data. */ insert_space(CHAR_CLASS_SIZE, laststart + 6 + laststart[1], b - 1); alignedp = ((uintptr_t)(laststart + 6 + laststart[1]) + __alignof__(wctype_t) - 1) & ~(uintptr_t)(__alignof__(wctype_t) - 1); /* Store the character class. */ *((wctype_t*)alignedp) = wt; /* Update length of char_classes */ laststart[1] += CHAR_CLASS_SIZE; had_char_class = true; } else { c1++; while (c1--) PATUNFETCH; BUF_PUSH ('['); BUF_PUSH (':'); laststart[5] += 2; /* Update the length of characters */ range_start = ':'; had_char_class = false; } } else if (syntax & RE_CHAR_CLASSES && c == '[' && (*p == '=' || *p == '.')) { CHAR_T str[128]; /* Should be large enough. */ CHAR_T delim = *p; /* '=' or '.' */ # ifdef _LIBC uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); # endif PATFETCH (c); c1 = 0; /* If pattern is `[[=' or '[[.'. */ if (p == pend) FREE_STACK_RETURN (REG_EBRACK); for (;;) { PATFETCH (c); if ((c == delim && *p == ']') || p == pend) break; if (c1 < sizeof (str) - 1) str[c1++] = c; else /* This is in any case an invalid class name. */ str[0] = '\0'; } str[c1] = '\0'; if (c == delim && *p == ']' && str[0] != '\0') { unsigned int i, offset; /* If we have no collation data we use the default collation in which each character is in a class by itself. It also means that ASCII is the character set and therefore we cannot have character with more than one byte in the multibyte representation. */ /* If not defined _LIBC, we push the name and `\0' for the sake of matching performance. */ int datasize = c1 + 1; # ifdef _LIBC int32_t idx = 0; if (nrules == 0) # endif { if (c1 != 1) FREE_STACK_RETURN (REG_ECOLLATE); } # ifdef _LIBC else { const int32_t *table; const int32_t *weights; const int32_t *extra; const int32_t *indirect; wint_t *cp; /* This #include defines a local function! */ # include if(delim == '=') { /* We push the index for equivalence class. */ cp = (wint_t*)str; table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEWC); weights = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTWC); extra = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAWC); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTWC); idx = findidx ((const wint_t**)&cp); if (idx == 0 || cp < (wint_t*) str + c1) /* This is no valid character. */ FREE_STACK_RETURN (REG_ECOLLATE); str[0] = (wchar_t)idx; } else /* delim == '.' */ { /* We push collation sequence value for collating symbol. */ int32_t table_size; const int32_t *symb_table; const unsigned char *extra; int32_t idx; int32_t elem; int32_t second; int32_t hash; char char_str[c1]; /* We have to convert the name to a single-byte string. This is possible since the names consist of ASCII characters and the internal representation is UCS4. */ for (i = 0; i < c1; ++i) char_str[i] = str[i]; table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB); symb_table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_TABLEMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); /* Locate the character in the hashing table. */ hash = elem_hash (char_str, c1); idx = 0; elem = hash % table_size; second = hash % (table_size - 2); while (symb_table[2 * elem] != 0) { /* First compare the hashing value. */ if (symb_table[2 * elem] == hash && c1 == extra[symb_table[2 * elem + 1]] && memcmp (char_str, &extra[symb_table[2 * elem + 1] + 1], c1) == 0) { /* Yep, this is the entry. */ idx = symb_table[2 * elem + 1]; idx += 1 + extra[idx]; break; } /* Next entry. */ elem += second; } if (symb_table[2 * elem] != 0) { /* Compute the index of the byte sequence in the table. */ idx += 1 + extra[idx]; /* Adjust for the alignment. */ idx = (idx + 3) & ~3; str[0] = (wchar_t) idx + 4; } else if (symb_table[2 * elem] == 0 && c1 == 1) { /* No valid character. Match it as a single byte character. */ had_char_class = false; BUF_PUSH(str[0]); /* Update the length of characters */ laststart[5]++; range_start = str[0]; /* Throw away the ] at the end of the collating symbol. */ PATFETCH (c); /* exit from the switch block. */ continue; } else FREE_STACK_RETURN (REG_ECOLLATE); } datasize = 1; } # endif /* Throw away the ] at the end of the equivalence class (or collating symbol). */ PATFETCH (c); /* Allocate the space for the equivalence class (or collating symbol) (and '\0' if needed). */ GET_BUFFER_SPACE(datasize); /* Update the pointer to indicate end of buffer. */ b += datasize; if (delim == '=') { /* equivalence class */ /* Calculate the offset of char_ranges, which is next to equivalence_classes. */ offset = laststart[1] + laststart[2] + laststart[3] +6; /* Insert space. */ insert_space(datasize, laststart + offset, b - 1); /* Write the equivalence_class and \0. */ for (i = 0 ; i < datasize ; i++) laststart[offset + i] = str[i]; /* Update the length of equivalence_classes. */ laststart[3] += datasize; had_char_class = true; } else /* delim == '.' */ { /* collating symbol */ /* Calculate the offset of the equivalence_classes, which is next to collating_symbols. */ offset = laststart[1] + laststart[2] + 6; /* Insert space and write the collationg_symbol and \0. */ insert_space(datasize, laststart + offset, b-1); for (i = 0 ; i < datasize ; i++) laststart[offset + i] = str[i]; /* In re_match_2_internal if range_start < -1, we assume -range_start is the offset of the collating symbol which is specified as the character of the range start. So we assign -(laststart[1] + laststart[2] + 6) to range_start. */ range_start = -(laststart[1] + laststart[2] + 6); /* Update the length of collating_symbol. */ laststart[2] += datasize; had_char_class = false; } } else { c1++; while (c1--) PATUNFETCH; BUF_PUSH ('['); BUF_PUSH (delim); laststart[5] += 2; /* Update the length of characters */ range_start = delim; had_char_class = false; } } else { had_char_class = false; BUF_PUSH(c); laststart[5]++; /* Update the length of characters */ range_start = c; } } #else /* BYTE */ /* Ensure that we have enough space to push a charset: the opcode, the length count, and the bitset; 34 bytes in all. */ GET_BUFFER_SPACE (34); laststart = b; /* We test `*p == '^' twice, instead of using an if statement, so we only need one BUF_PUSH. */ BUF_PUSH (*p == '^' ? charset_not : charset); if (*p == '^') p++; /* Remember the first position in the bracket expression. */ p1 = p; /* Push the number of bytes in the bitmap. */ BUF_PUSH ((1 << BYTEWIDTH) / BYTEWIDTH); /* Clear the whole map. */ bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH); /* charset_not matches newline according to a syntax bit. */ if ((re_opcode_t) b[-2] == charset_not && (syntax & RE_HAT_LISTS_NOT_NEWLINE)) SET_LIST_BIT ('\n'); /* Read in characters and ranges, setting map bits. */ for (;;) { if (p == pend) FREE_STACK_RETURN (REG_EBRACK); PATFETCH (c); /* \ might escape characters inside [...] and [^...]. */ if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\') { if (p == pend) FREE_STACK_RETURN (REG_EESCAPE); PATFETCH (c1); SET_LIST_BIT (c1); range_start = c1; continue; } /* Could be the end of the bracket expression. If it's not (i.e., when the bracket expression is `[]' so far), the ']' character bit gets set way below. */ if (c == ']' && p != p1 + 1) break; /* Look ahead to see if it's a range when the last thing was a character class. */ if (had_char_class && c == '-' && *p != ']') FREE_STACK_RETURN (REG_ERANGE); /* Look ahead to see if it's a range when the last thing was a character: if this is a hyphen not at the beginning or the end of a list, then it's the range operator. */ if (c == '-' && !(p - 2 >= pattern && p[-2] == '[') && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^') && *p != ']') { reg_errcode_t ret = byte_compile_range (range_start, &p, pend, translate, syntax, b); if (ret != REG_NOERROR) FREE_STACK_RETURN (ret); range_start = 0xffffffff; } else if (p[0] == '-' && p[1] != ']') { /* This handles ranges made up of characters only. */ reg_errcode_t ret; /* Move past the `-'. */ PATFETCH (c1); ret = byte_compile_range (c, &p, pend, translate, syntax, b); if (ret != REG_NOERROR) FREE_STACK_RETURN (ret); range_start = 0xffffffff; } /* See if we're at the beginning of a possible character class. */ else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':') { /* Leave room for the null. */ char str[CHAR_CLASS_MAX_LENGTH + 1]; PATFETCH (c); c1 = 0; /* If pattern is `[[:'. */ if (p == pend) FREE_STACK_RETURN (REG_EBRACK); for (;;) { PATFETCH (c); if ((c == ':' && *p == ']') || p == pend) break; if (c1 < CHAR_CLASS_MAX_LENGTH) str[c1++] = c; else /* This is in any case an invalid class name. */ str[0] = '\0'; } str[c1] = '\0'; /* If isn't a word bracketed by `[:' and `:]': undo the ending character, the letters, and leave the leading `:' and `[' (but set bits for them). */ if (c == ':' && *p == ']') { # if defined _LIBC || WIDE_CHAR_SUPPORT boolean is_lower = STREQ (str, "lower"); boolean is_upper = STREQ (str, "upper"); wctype_t wt; int ch; wt = IS_CHAR_CLASS (str); if (wt == 0) FREE_STACK_RETURN (REG_ECTYPE); /* Throw away the ] at the end of the character class. */ PATFETCH (c); if (p == pend) FREE_STACK_RETURN (REG_EBRACK); for (ch = 0; ch < 1 << BYTEWIDTH; ++ch) { # ifdef _LIBC if (__iswctype (__btowc (ch), wt)) SET_LIST_BIT (ch); # else if (iswctype (btowc (ch), wt)) SET_LIST_BIT (ch); # endif if (translate && (is_upper || is_lower) && (ISUPPER (ch) || ISLOWER (ch))) SET_LIST_BIT (ch); } had_char_class = true; # else int ch; boolean is_alnum = STREQ (str, "alnum"); boolean is_alpha = STREQ (str, "alpha"); boolean is_blank = STREQ (str, "blank"); boolean is_cntrl = STREQ (str, "cntrl"); boolean is_digit = STREQ (str, "digit"); boolean is_graph = STREQ (str, "graph"); boolean is_lower = STREQ (str, "lower"); boolean is_print = STREQ (str, "print"); boolean is_punct = STREQ (str, "punct"); boolean is_space = STREQ (str, "space"); boolean is_upper = STREQ (str, "upper"); boolean is_xdigit = STREQ (str, "xdigit"); if (!IS_CHAR_CLASS (str)) FREE_STACK_RETURN (REG_ECTYPE); /* Throw away the ] at the end of the character class. */ PATFETCH (c); if (p == pend) FREE_STACK_RETURN (REG_EBRACK); for (ch = 0; ch < 1 << BYTEWIDTH; ch++) { /* This was split into 3 if's to avoid an arbitrary limit in some compiler. */ if ( (is_alnum && ISALNUM (ch)) || (is_alpha && ISALPHA (ch)) || (is_blank && ISBLANK (ch)) || (is_cntrl && ISCNTRL (ch))) SET_LIST_BIT (ch); if ( (is_digit && ISDIGIT (ch)) || (is_graph && ISGRAPH (ch)) || (is_lower && ISLOWER (ch)) || (is_print && ISPRINT (ch))) SET_LIST_BIT (ch); if ( (is_punct && ISPUNCT (ch)) || (is_space && ISSPACE (ch)) || (is_upper && ISUPPER (ch)) || (is_xdigit && ISXDIGIT (ch))) SET_LIST_BIT (ch); if ( translate && (is_upper || is_lower) && (ISUPPER (ch) || ISLOWER (ch))) SET_LIST_BIT (ch); } had_char_class = true; # endif /* libc || wctype.h */ } else { c1++; while (c1--) PATUNFETCH; SET_LIST_BIT ('['); SET_LIST_BIT (':'); range_start = ':'; had_char_class = false; } } else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == '=') { unsigned char str[MB_LEN_MAX + 1]; # ifdef _LIBC uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); # endif PATFETCH (c); c1 = 0; /* If pattern is `[[='. */ if (p == pend) FREE_STACK_RETURN (REG_EBRACK); for (;;) { PATFETCH (c); if ((c == '=' && *p == ']') || p == pend) break; if (c1 < MB_LEN_MAX) str[c1++] = c; else /* This is in any case an invalid class name. */ str[0] = '\0'; } str[c1] = '\0'; if (c == '=' && *p == ']' && str[0] != '\0') { /* If we have no collation data we use the default collation in which each character is in a class by itself. It also means that ASCII is the character set and therefore we cannot have character with more than one byte in the multibyte representation. */ # ifdef _LIBC if (nrules == 0) # endif { if (c1 != 1) FREE_STACK_RETURN (REG_ECOLLATE); /* Throw away the ] at the end of the equivalence class. */ PATFETCH (c); /* Set the bit for the character. */ SET_LIST_BIT (str[0]); } # ifdef _LIBC else { /* Try to match the byte sequence in `str' against those known to the collate implementation. First find out whether the bytes in `str' are actually from exactly one character. */ const int32_t *table; const unsigned char *weights; const unsigned char *extra; const int32_t *indirect; int32_t idx; const unsigned char *cp = str; int ch; /* This #include defines a local function! */ # include table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); idx = findidx (&cp); if (idx == 0 || cp < str + c1) /* This is no valid character. */ FREE_STACK_RETURN (REG_ECOLLATE); /* Throw away the ] at the end of the equivalence class. */ PATFETCH (c); /* Now we have to go throught the whole table and find all characters which have the same first level weight. XXX Note that this is not entirely correct. we would have to match multibyte sequences but this is not possible with the current implementation. */ for (ch = 1; ch < 256; ++ch) /* XXX This test would have to be changed if we would allow matching multibyte sequences. */ if (table[ch] > 0) { int32_t idx2 = table[ch]; size_t len = weights[idx2]; /* Test whether the lenghts match. */ if (weights[idx] == len) { /* They do. New compare the bytes of the weight. */ size_t cnt = 0; while (cnt < len && (weights[idx + 1 + cnt] == weights[idx2 + 1 + cnt])) ++cnt; if (cnt == len) /* They match. Mark the character as acceptable. */ SET_LIST_BIT (ch); } } } # endif had_char_class = true; } else { c1++; while (c1--) PATUNFETCH; SET_LIST_BIT ('['); SET_LIST_BIT ('='); range_start = '='; had_char_class = false; } } else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == '.') { unsigned char str[128]; /* Should be large enough. */ # ifdef _LIBC uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); # endif PATFETCH (c); c1 = 0; /* If pattern is `[[.'. */ if (p == pend) FREE_STACK_RETURN (REG_EBRACK); for (;;) { PATFETCH (c); if ((c == '.' && *p == ']') || p == pend) break; if (c1 < sizeof (str)) str[c1++] = c; else /* This is in any case an invalid class name. */ str[0] = '\0'; } str[c1] = '\0'; if (c == '.' && *p == ']' && str[0] != '\0') { /* If we have no collation data we use the default collation in which each character is the name for its own class which contains only the one character. It also means that ASCII is the character set and therefore we cannot have character with more than one byte in the multibyte representation. */ # ifdef _LIBC if (nrules == 0) # endif { if (c1 != 1) FREE_STACK_RETURN (REG_ECOLLATE); /* Throw away the ] at the end of the equivalence class. */ PATFETCH (c); /* Set the bit for the character. */ SET_LIST_BIT (str[0]); range_start = ((const unsigned char *) str)[0]; } # ifdef _LIBC else { /* Try to match the byte sequence in `str' against those known to the collate implementation. First find out whether the bytes in `str' are actually from exactly one character. */ int32_t table_size; const int32_t *symb_table; const unsigned char *extra; int32_t idx; int32_t elem; int32_t second; int32_t hash; table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB); symb_table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_TABLEMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); /* Locate the character in the hashing table. */ hash = elem_hash (str, c1); idx = 0; elem = hash % table_size; second = hash % (table_size - 2); while (symb_table[2 * elem] != 0) { /* First compare the hashing value. */ if (symb_table[2 * elem] == hash && c1 == extra[symb_table[2 * elem + 1]] && memcmp (str, &extra[symb_table[2 * elem + 1] + 1], c1) == 0) { /* Yep, this is the entry. */ idx = symb_table[2 * elem + 1]; idx += 1 + extra[idx]; break; } /* Next entry. */ elem += second; } if (symb_table[2 * elem] == 0) /* This is no valid character. */ FREE_STACK_RETURN (REG_ECOLLATE); /* Throw away the ] at the end of the equivalence class. */ PATFETCH (c); /* Now add the multibyte character(s) we found to the accept list. XXX Note that this is not entirely correct. we would have to match multibyte sequences but this is not possible with the current implementation. Also, we have to match collating symbols, which expand to more than one file, as a whole and not allow the individual bytes. */ c1 = extra[idx++]; if (c1 == 1) range_start = extra[idx]; while (c1-- > 0) { SET_LIST_BIT (extra[idx]); ++idx; } } # endif had_char_class = false; } else { c1++; while (c1--) PATUNFETCH; SET_LIST_BIT ('['); SET_LIST_BIT ('.'); range_start = '.'; had_char_class = false; } } else { had_char_class = false; SET_LIST_BIT (c); range_start = c; } } /* Discard any (non)matching list bytes that are all 0 at the end of the map. Decrease the map-length byte too. */ while ((int) b[-1] > 0 && b[b[-1] - 1] == 0) b[-1]--; b += b[-1]; #endif /* WCHAR */ } break; case '(': if (syntax & RE_NO_BK_PARENS) goto handle_open; else goto normal_char; case ')': if (syntax & RE_NO_BK_PARENS) goto handle_close; else goto normal_char; case '\n': if (syntax & RE_NEWLINE_ALT) goto handle_alt; else goto normal_char; case '|': if (syntax & RE_NO_BK_VBAR) goto handle_alt; else goto normal_char; case '{': if (syntax & RE_INTERVALS && syntax & RE_NO_BK_BRACES) goto handle_interval; else goto normal_char; case '\\': if (p == pend) FREE_STACK_RETURN (REG_EESCAPE); /* Do not translate the character after the \, so that we can distinguish, e.g., \B from \b, even if we normally would translate, e.g., B to b. */ PATFETCH_RAW (c); switch (c) { case '(': if (syntax & RE_NO_BK_PARENS) goto normal_backslash; handle_open: bufp->re_nsub++; regnum++; if (COMPILE_STACK_FULL) { RETALLOC (compile_stack.stack, compile_stack.size << 1, compile_stack_elt_t); if (compile_stack.stack == NULL) return REG_ESPACE; compile_stack.size <<= 1; } /* These are the values to restore when we hit end of this group. They are all relative offsets, so that if the whole pattern moves because of realloc, they will still be valid. */ COMPILE_STACK_TOP.begalt_offset = begalt - COMPILED_BUFFER_VAR; COMPILE_STACK_TOP.fixup_alt_jump = fixup_alt_jump ? fixup_alt_jump - COMPILED_BUFFER_VAR + 1 : 0; COMPILE_STACK_TOP.laststart_offset = b - COMPILED_BUFFER_VAR; COMPILE_STACK_TOP.regnum = regnum; /* We will eventually replace the 0 with the number of groups inner to this one. But do not push a start_memory for groups beyond the last one we can represent in the compiled pattern. */ if (regnum <= MAX_REGNUM) { COMPILE_STACK_TOP.inner_group_offset = b - COMPILED_BUFFER_VAR + 2; BUF_PUSH_3 (start_memory, regnum, 0); } compile_stack.avail++; fixup_alt_jump = 0; laststart = 0; begalt = b; /* If we've reached MAX_REGNUM groups, then this open won't actually generate any code, so we'll have to clear pending_exact explicitly. */ pending_exact = 0; break; case ')': if (syntax & RE_NO_BK_PARENS) goto normal_backslash; if (COMPILE_STACK_EMPTY) { if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD) goto normal_backslash; else FREE_STACK_RETURN (REG_ERPAREN); } handle_close: if (fixup_alt_jump) { /* Push a dummy failure point at the end of the alternative for a possible future `pop_failure_jump' to pop. See comments at `push_dummy_failure' in `re_match_2'. */ BUF_PUSH (push_dummy_failure); /* We allocated space for this jump when we assigned to `fixup_alt_jump', in the `handle_alt' case below. */ STORE_JUMP (jump_past_alt, fixup_alt_jump, b - 1); } /* See similar code for backslashed left paren above. */ if (COMPILE_STACK_EMPTY) { if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD) goto normal_char; else FREE_STACK_RETURN (REG_ERPAREN); } /* Since we just checked for an empty stack above, this ``can't happen''. */ assert (compile_stack.avail != 0); { /* We don't just want to restore into `regnum', because later groups should continue to be numbered higher, as in `(ab)c(de)' -- the second group is #2. */ regnum_t this_group_regnum; compile_stack.avail--; begalt = COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.begalt_offset; fixup_alt_jump = COMPILE_STACK_TOP.fixup_alt_jump ? COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.fixup_alt_jump - 1 : 0; laststart = COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.laststart_offset; this_group_regnum = COMPILE_STACK_TOP.regnum; /* If we've reached MAX_REGNUM groups, then this open won't actually generate any code, so we'll have to clear pending_exact explicitly. */ pending_exact = 0; /* We're at the end of the group, so now we know how many groups were inside this one. */ if (this_group_regnum <= MAX_REGNUM) { UCHAR_T *inner_group_loc = COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.inner_group_offset; *inner_group_loc = regnum - this_group_regnum; BUF_PUSH_3 (stop_memory, this_group_regnum, regnum - this_group_regnum); } } break; case '|': /* `\|'. */ if (syntax & RE_LIMITED_OPS || syntax & RE_NO_BK_VBAR) goto normal_backslash; handle_alt: if (syntax & RE_LIMITED_OPS) goto normal_char; /* Insert before the previous alternative a jump which jumps to this alternative if the former fails. */ GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE); INSERT_JUMP (on_failure_jump, begalt, b + 2 + 2 * OFFSET_ADDRESS_SIZE); pending_exact = 0; b += 1 + OFFSET_ADDRESS_SIZE; /* The alternative before this one has a jump after it which gets executed if it gets matched. Adjust that jump so it will jump to this alternative's analogous jump (put in below, which in turn will jump to the next (if any) alternative's such jump, etc.). The last such jump jumps to the correct final destination. A picture: _____ _____ | | | | | v | v a | b | c If we are at `b', then fixup_alt_jump right now points to a three-byte space after `a'. We'll put in the jump, set fixup_alt_jump to right after `b', and leave behind three bytes which we'll fill in when we get to after `c'. */ if (fixup_alt_jump) STORE_JUMP (jump_past_alt, fixup_alt_jump, b); /* Mark and leave space for a jump after this alternative, to be filled in later either by next alternative or when know we're at the end of a series of alternatives. */ fixup_alt_jump = b; GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE); b += 1 + OFFSET_ADDRESS_SIZE; laststart = 0; begalt = b; break; case '{': /* If \{ is a literal. */ if (!(syntax & RE_INTERVALS) /* If we're at `\{' and it's not the open-interval operator. */ || (syntax & RE_NO_BK_BRACES)) goto normal_backslash; handle_interval: { /* If got here, then the syntax allows intervals. */ /* At least (most) this many matches must be made. */ int lower_bound = -1, upper_bound = -1; /* Place in the uncompiled pattern (i.e., just after the '{') to go back to if the interval is invalid. */ const CHAR_T *beg_interval = p; if (p == pend) goto invalid_interval; GET_UNSIGNED_NUMBER (lower_bound); if (c == ',') { GET_UNSIGNED_NUMBER (upper_bound); if (upper_bound < 0) upper_bound = RE_DUP_MAX; } else /* Interval such as `{1}' => match exactly once. */ upper_bound = lower_bound; if (! (0 <= lower_bound && lower_bound <= upper_bound)) goto invalid_interval; if (!(syntax & RE_NO_BK_BRACES)) { if (c != '\\' || p == pend) goto invalid_interval; PATFETCH (c); } if (c != '}') goto invalid_interval; /* If it's invalid to have no preceding re. */ if (!laststart) { if (syntax & RE_CONTEXT_INVALID_OPS && !(syntax & RE_INVALID_INTERVAL_ORD)) FREE_STACK_RETURN (REG_BADRPT); else if (syntax & RE_CONTEXT_INDEP_OPS) laststart = b; else goto unfetch_interval; } /* We just parsed a valid interval. */ if (RE_DUP_MAX < upper_bound) FREE_STACK_RETURN (REG_BADBR); /* If the upper bound is zero, don't want to succeed at all; jump from `laststart' to `b + 3', which will be the end of the buffer after we insert the jump. */ /* ifdef WCHAR, 'b + 1 + OFFSET_ADDRESS_SIZE' instead of 'b + 3'. */ if (upper_bound == 0) { GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE); INSERT_JUMP (jump, laststart, b + 1 + OFFSET_ADDRESS_SIZE); b += 1 + OFFSET_ADDRESS_SIZE; } /* Otherwise, we have a nontrivial interval. When we're all done, the pattern will look like: set_number_at set_number_at succeed_n jump_n (The upper bound and `jump_n' are omitted if `upper_bound' is 1, though.) */ else { /* If the upper bound is > 1, we need to insert more at the end of the loop. */ unsigned nbytes = 2 + 4 * OFFSET_ADDRESS_SIZE + (upper_bound > 1) * (2 + 4 * OFFSET_ADDRESS_SIZE); GET_BUFFER_SPACE (nbytes); /* Initialize lower bound of the `succeed_n', even though it will be set during matching by its attendant `set_number_at' (inserted next), because `re_compile_fastmap' needs to know. Jump to the `jump_n' we might insert below. */ INSERT_JUMP2 (succeed_n, laststart, b + 1 + 2 * OFFSET_ADDRESS_SIZE + (upper_bound > 1) * (1 + 2 * OFFSET_ADDRESS_SIZE) , lower_bound); b += 1 + 2 * OFFSET_ADDRESS_SIZE; /* Code to initialize the lower bound. Insert before the `succeed_n'. The `5' is the last two bytes of this `set_number_at', plus 3 bytes of the following `succeed_n'. */ /* ifdef WCHAR, The '1+2*OFFSET_ADDRESS_SIZE' is the 'set_number_at', plus '1+OFFSET_ADDRESS_SIZE' of the following `succeed_n'. */ PREFIX(insert_op2) (set_number_at, laststart, 1 + 2 * OFFSET_ADDRESS_SIZE, lower_bound, b); b += 1 + 2 * OFFSET_ADDRESS_SIZE; if (upper_bound > 1) { /* More than one repetition is allowed, so append a backward jump to the `succeed_n' that starts this interval. When we've reached this during matching, we'll have matched the interval once, so jump back only `upper_bound - 1' times. */ STORE_JUMP2 (jump_n, b, laststart + 2 * OFFSET_ADDRESS_SIZE + 1, upper_bound - 1); b += 1 + 2 * OFFSET_ADDRESS_SIZE; /* The location we want to set is the second parameter of the `jump_n'; that is `b-2' as an absolute address. `laststart' will be the `set_number_at' we're about to insert; `laststart+3' the number to set, the source for the relative address. But we are inserting into the middle of the pattern -- so everything is getting moved up by 5. Conclusion: (b - 2) - (laststart + 3) + 5, i.e., b - laststart. We insert this at the beginning of the loop so that if we fail during matching, we'll reinitialize the bounds. */ PREFIX(insert_op2) (set_number_at, laststart, b - laststart, upper_bound - 1, b); b += 1 + 2 * OFFSET_ADDRESS_SIZE; } } pending_exact = 0; break; invalid_interval: if (!(syntax & RE_INVALID_INTERVAL_ORD)) FREE_STACK_RETURN (p == pend ? REG_EBRACE : REG_BADBR); unfetch_interval: /* Match the characters as literals. */ p = beg_interval; c = '{'; if (syntax & RE_NO_BK_BRACES) goto normal_char; else goto normal_backslash; } #ifdef emacs /* There is no way to specify the before_dot and after_dot operators. rms says this is ok. --karl */ case '=': BUF_PUSH (at_dot); break; case 's': laststart = b; PATFETCH (c); BUF_PUSH_2 (syntaxspec, syntax_spec_code[c]); break; case 'S': laststart = b; PATFETCH (c); BUF_PUSH_2 (notsyntaxspec, syntax_spec_code[c]); break; #endif /* emacs */ case 'w': if (syntax & RE_NO_GNU_OPS) goto normal_char; laststart = b; BUF_PUSH (wordchar); break; case 'W': if (syntax & RE_NO_GNU_OPS) goto normal_char; laststart = b; BUF_PUSH (notwordchar); break; case '<': if (syntax & RE_NO_GNU_OPS) goto normal_char; BUF_PUSH (wordbeg); break; case '>': if (syntax & RE_NO_GNU_OPS) goto normal_char; BUF_PUSH (wordend); break; case 'b': if (syntax & RE_NO_GNU_OPS) goto normal_char; BUF_PUSH (wordbound); break; case 'B': if (syntax & RE_NO_GNU_OPS) goto normal_char; BUF_PUSH (notwordbound); break; case '`': if (syntax & RE_NO_GNU_OPS) goto normal_char; BUF_PUSH (begbuf); break; case '\'': if (syntax & RE_NO_GNU_OPS) goto normal_char; BUF_PUSH (endbuf); break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (syntax & RE_NO_BK_REFS) goto normal_char; c1 = c - '0'; if (c1 > regnum) FREE_STACK_RETURN (REG_ESUBREG); /* Can't back reference to a subexpression if inside of it. */ if (group_in_compile_stack (compile_stack, (regnum_t) c1)) goto normal_char; laststart = b; BUF_PUSH_2 (duplicate, c1); break; case '+': case '?': if (syntax & RE_BK_PLUS_QM) goto handle_plus; else goto normal_backslash; default: normal_backslash: /* You might think it would be useful for \ to mean not to translate; but if we don't translate it it will never match anything. */ c = TRANSLATE (c); goto normal_char; } break; default: /* Expects the character in `c'. */ normal_char: /* If no exactn currently being built. */ if (!pending_exact #ifdef WCHAR /* If last exactn handle binary(or character) and new exactn handle character(or binary). */ || is_exactn_bin != is_binary[p - 1 - pattern] #endif /* WCHAR */ /* If last exactn not at current position. */ || pending_exact + *pending_exact + 1 != b /* We have only one byte following the exactn for the count. */ || *pending_exact == (1 << BYTEWIDTH) - 1 /* If followed by a repetition operator. */ || *p == '*' || *p == '^' || ((syntax & RE_BK_PLUS_QM) ? *p == '\\' && (p[1] == '+' || p[1] == '?') : (*p == '+' || *p == '?')) || ((syntax & RE_INTERVALS) && ((syntax & RE_NO_BK_BRACES) ? *p == '{' : (p[0] == '\\' && p[1] == '{')))) { /* Start building a new exactn. */ laststart = b; #ifdef WCHAR /* Is this exactn binary data or character? */ is_exactn_bin = is_binary[p - 1 - pattern]; if (is_exactn_bin) BUF_PUSH_2 (exactn_bin, 0); else BUF_PUSH_2 (exactn, 0); #else BUF_PUSH_2 (exactn, 0); #endif /* WCHAR */ pending_exact = b - 1; } BUF_PUSH (c); (*pending_exact)++; break; } /* switch (c) */ } /* while p != pend */ /* Through the pattern now. */ if (fixup_alt_jump) STORE_JUMP (jump_past_alt, fixup_alt_jump, b); if (!COMPILE_STACK_EMPTY) FREE_STACK_RETURN (REG_EPAREN); /* If we don't want backtracking, force success the first time we reach the end of the compiled pattern. */ if (syntax & RE_NO_POSIX_BACKTRACKING) BUF_PUSH (succeed); #ifdef WCHAR free (pattern); free (mbs_offset); free (is_binary); #endif free (compile_stack.stack); /* We have succeeded; set the length of the buffer. */ #ifdef WCHAR bufp->used = (uintptr_t) b - (uintptr_t) COMPILED_BUFFER_VAR; #else bufp->used = b - bufp->buffer; #endif #ifdef DEBUG if (debug) { DEBUG_PRINT1 ("\nCompiled pattern: \n"); PREFIX(print_compiled_pattern) (bufp); } #endif /* DEBUG */ #ifndef MATCH_MAY_ALLOCATE /* Initialize the failure stack to the largest possible stack. This isn't necessary unless we're trying to avoid calling alloca in the search and match routines. */ { int num_regs = bufp->re_nsub + 1; /* Since DOUBLE_FAIL_STACK refuses to double only if the current size is strictly greater than re_max_failures, the largest possible stack is 2 * re_max_failures failure points. */ if (fail_stack.size < (2 * re_max_failures * MAX_FAILURE_ITEMS)) { fail_stack.size = (2 * re_max_failures * MAX_FAILURE_ITEMS); # ifdef emacs if (! fail_stack.stack) fail_stack.stack = (PREFIX(fail_stack_elt_t) *) xmalloc (fail_stack.size * sizeof (PREFIX(fail_stack_elt_t))); else fail_stack.stack = (PREFIX(fail_stack_elt_t) *) xrealloc (fail_stack.stack, (fail_stack.size * sizeof (PREFIX(fail_stack_elt_t)))); # else /* not emacs */ if (! fail_stack.stack) fail_stack.stack = (PREFIX(fail_stack_elt_t) *) malloc (fail_stack.size * sizeof (PREFIX(fail_stack_elt_t))); else fail_stack.stack = (PREFIX(fail_stack_elt_t) *) realloc (fail_stack.stack, (fail_stack.size * sizeof (PREFIX(fail_stack_elt_t)))); # endif /* not emacs */ } PREFIX(regex_grow_registers) (num_regs); } #endif /* not MATCH_MAY_ALLOCATE */ return REG_NOERROR; } /* regex_compile */ /* Subroutines for `regex_compile'. */ /* Store OP at LOC followed by two-byte integer parameter ARG. */ /* ifdef WCHAR, integer parameter is 1 wchar_t. */ static void PREFIX(store_op1) (re_opcode_t op, UCHAR_T *loc, int arg) { *loc = (UCHAR_T) op; STORE_NUMBER (loc + 1, arg); } /* Like `store_op1', but for two two-byte parameters ARG1 and ARG2. */ /* ifdef WCHAR, integer parameter is 1 wchar_t. */ static void PREFIX(store_op2) (re_opcode_t op, UCHAR_T *loc, int arg1, int arg2) { *loc = (UCHAR_T) op; STORE_NUMBER (loc + 1, arg1); STORE_NUMBER (loc + 1 + OFFSET_ADDRESS_SIZE, arg2); } /* Copy the bytes from LOC to END to open up three bytes of space at LOC for OP followed by two-byte integer parameter ARG. */ /* ifdef WCHAR, integer parameter is 1 wchar_t. */ static void PREFIX(insert_op1) (re_opcode_t op, UCHAR_T *loc, int arg, UCHAR_T *end) { register UCHAR_T *pfrom = end; register UCHAR_T *pto = end + 1 + OFFSET_ADDRESS_SIZE; while (pfrom != loc) *--pto = *--pfrom; PREFIX(store_op1) (op, loc, arg); } /* Like `insert_op1', but for two two-byte parameters ARG1 and ARG2. */ /* ifdef WCHAR, integer parameter is 1 wchar_t. */ static void PREFIX(insert_op2) (re_opcode_t op, UCHAR_T *loc, int arg1, int arg2, UCHAR_T *end) { register UCHAR_T *pfrom = end; register UCHAR_T *pto = end + 1 + 2 * OFFSET_ADDRESS_SIZE; while (pfrom != loc) *--pto = *--pfrom; PREFIX(store_op2) (op, loc, arg1, arg2); } /* P points to just after a ^ in PATTERN. Return true if that ^ comes after an alternative or a begin-subexpression. We assume there is at least one character before the ^. */ static boolean PREFIX(at_begline_loc_p) (const CHAR_T *pattern, const CHAR_T *p, reg_syntax_t syntax) { const CHAR_T *prev = p - 2; boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\'; return /* After a subexpression? */ (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash)) /* After an alternative? */ || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash)); } /* The dual of at_begline_loc_p. This one is for $. We assume there is at least one character after the $, i.e., `P < PEND'. */ static boolean PREFIX(at_endline_loc_p) (const CHAR_T *p, const CHAR_T *pend, reg_syntax_t syntax) { const CHAR_T *next = p; boolean next_backslash = *next == '\\'; const CHAR_T *next_next = p + 1 < pend ? p + 1 : 0; return /* Before a subexpression? */ (syntax & RE_NO_BK_PARENS ? *next == ')' : next_backslash && next_next && *next_next == ')') /* Before an alternative? */ || (syntax & RE_NO_BK_VBAR ? *next == '|' : next_backslash && next_next && *next_next == '|'); } #else /* not INSIDE_RECURSION */ /* Returns true if REGNUM is in one of COMPILE_STACK's elements and false if it's not. */ static boolean group_in_compile_stack (compile_stack_type compile_stack, regnum_t regnum) { int this_element; for (this_element = compile_stack.avail - 1; this_element >= 0; this_element--) if (compile_stack.stack[this_element].regnum == regnum) return true; return false; } #endif /* not INSIDE_RECURSION */ #ifdef INSIDE_RECURSION #ifdef WCHAR /* This insert space, which size is "num", into the pattern at "loc". "end" must point the end of the allocated buffer. */ static void insert_space (int num, CHAR_T *loc, CHAR_T *end) { register CHAR_T *pto = end; register CHAR_T *pfrom = end - num; while (pfrom >= loc) *pto-- = *pfrom--; } #endif /* WCHAR */ #ifdef WCHAR static reg_errcode_t wcs_compile_range (CHAR_T range_start_char, const CHAR_T **p_ptr, const CHAR_T *pend, RE_TRANSLATE_TYPE translate, reg_syntax_t syntax, CHAR_T *b, CHAR_T *char_set) { const CHAR_T *p = *p_ptr; CHAR_T range_start, range_end; reg_errcode_t ret; # ifdef _LIBC uint32_t nrules; uint32_t start_val, end_val; # endif if (p == pend) return REG_ERANGE; # ifdef _LIBC nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) { const char *collseq = (const char *) _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQWC); const unsigned char *extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); if (range_start_char < -1) { /* range_start is a collating symbol. */ int32_t *wextra; /* Retreive the index and get collation sequence value. */ wextra = (int32_t*)(extra + char_set[-range_start_char]); start_val = wextra[1 + *wextra]; } else start_val = collseq_table_lookup(collseq, TRANSLATE(range_start_char)); end_val = collseq_table_lookup (collseq, TRANSLATE (p[0])); /* Report an error if the range is empty and the syntax prohibits this. */ ret = ((syntax & RE_NO_EMPTY_RANGES) && (start_val > end_val))? REG_ERANGE : REG_NOERROR; /* Insert space to the end of the char_ranges. */ insert_space(2, b - char_set[5] - 2, b - 1); *(b - char_set[5] - 2) = (wchar_t)start_val; *(b - char_set[5] - 1) = (wchar_t)end_val; char_set[4]++; /* ranges_index */ } else # endif { range_start = (range_start_char >= 0)? TRANSLATE (range_start_char): range_start_char; range_end = TRANSLATE (p[0]); /* Report an error if the range is empty and the syntax prohibits this. */ ret = ((syntax & RE_NO_EMPTY_RANGES) && (range_start > range_end))? REG_ERANGE : REG_NOERROR; /* Insert space to the end of the char_ranges. */ insert_space(2, b - char_set[5] - 2, b - 1); *(b - char_set[5] - 2) = range_start; *(b - char_set[5] - 1) = range_end; char_set[4]++; /* ranges_index */ } /* Have to increment the pointer into the pattern string, so the caller isn't still at the ending character. */ (*p_ptr)++; return ret; } #else /* BYTE */ /* Read the ending character of a range (in a bracket expression) from the uncompiled pattern *P_PTR (which ends at PEND). We assume the starting character is in `P[-2]'. (`P[-1]' is the character `-'.) Then we set the translation of all bits between the starting and ending characters (inclusive) in the compiled pattern B. Return an error code. We use these short variable names so we can use the same macros as `regex_compile' itself. */ static reg_errcode_t byte_compile_range (unsigned int range_start_char, const char **p_ptr, const char *pend, RE_TRANSLATE_TYPE translate, reg_syntax_t syntax, unsigned char *b) { unsigned this_char; const char *p = *p_ptr; reg_errcode_t ret; # if _LIBC const unsigned char *collseq; unsigned int start_colseq; unsigned int end_colseq; # else unsigned end_char; # endif if (p == pend) return REG_ERANGE; /* Have to increment the pointer into the pattern string, so the caller isn't still at the ending character. */ (*p_ptr)++; /* Report an error if the range is empty and the syntax prohibits this. */ ret = syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR; # if _LIBC collseq = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); start_colseq = collseq[(unsigned char) TRANSLATE (range_start_char)]; end_colseq = collseq[(unsigned char) TRANSLATE (p[0])]; for (this_char = 0; this_char <= (unsigned char) -1; ++this_char) { unsigned int this_colseq = collseq[(unsigned char) TRANSLATE (this_char)]; if (start_colseq <= this_colseq && this_colseq <= end_colseq) { SET_LIST_BIT (TRANSLATE (this_char)); ret = REG_NOERROR; } } # else /* Here we see why `this_char' has to be larger than an `unsigned char' -- we would otherwise go into an infinite loop, since all characters <= 0xff. */ range_start_char = TRANSLATE (range_start_char); /* TRANSLATE(p[0]) is casted to char (not unsigned char) in TRANSLATE, and some compilers cast it to int implicitly, so following for_loop may fall to (almost) infinite loop. e.g. If translate[p[0]] = 0xff, end_char may equals to 0xffffffff. To avoid this, we cast p[0] to unsigned int and truncate it. */ end_char = ((unsigned)TRANSLATE(p[0]) & ((1 << BYTEWIDTH) - 1)); for (this_char = range_start_char; this_char <= end_char; ++this_char) { SET_LIST_BIT (TRANSLATE (this_char)); ret = REG_NOERROR; } # endif return ret; } #endif /* WCHAR */ /* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in BUFP. A fastmap records which of the (1 << BYTEWIDTH) possible characters can start a string that matches the pattern. This fastmap is used by re_search to skip quickly over impossible starting points. The caller must supply the address of a (1 << BYTEWIDTH)-byte data area as BUFP->fastmap. We set the `fastmap', `fastmap_accurate', and `can_be_null' fields in the pattern buffer. Returns 0 if we succeed, -2 if an internal error. */ #ifdef WCHAR /* local function for re_compile_fastmap. truncate wchar_t character to char. */ static unsigned char truncate_wchar (CHAR_T c); static unsigned char truncate_wchar (CHAR_T c) { unsigned char buf[MB_CUR_MAX]; mbstate_t state; int retval; memset (&state, '\0', sizeof (state)); # ifdef _LIBC retval = __wcrtomb (buf, c, &state); # else retval = wcrtomb (buf, c, &state); # endif return retval > 0 ? buf[0] : (unsigned char) c; } #endif /* WCHAR */ static int PREFIX(re_compile_fastmap) (struct re_pattern_buffer *bufp) { int j, k; #ifdef MATCH_MAY_ALLOCATE PREFIX(fail_stack_type) fail_stack; #endif #ifndef REGEX_MALLOC char *destination; #endif register char *fastmap = bufp->fastmap; #ifdef WCHAR /* We need to cast pattern to (wchar_t*), because we casted this compiled pattern to (char*) in regex_compile. */ UCHAR_T *pattern = (UCHAR_T*)bufp->buffer; register UCHAR_T *pend = (UCHAR_T*) (bufp->buffer + bufp->used); #else /* BYTE */ UCHAR_T *pattern = bufp->buffer; register UCHAR_T *pend = pattern + bufp->used; #endif /* WCHAR */ UCHAR_T *p = pattern; #ifdef REL_ALLOC /* This holds the pointer to the failure stack, when it is allocated relocatably. */ fail_stack_elt_t *failure_stack_ptr; #endif /* Assume that each path through the pattern can be null until proven otherwise. We set this false at the bottom of switch statement, to which we get only if a particular path doesn't match the empty string. */ boolean path_can_be_null = true; /* We aren't doing a `succeed_n' to begin with. */ boolean succeed_n_p = false; assert (fastmap != NULL && p != NULL); INIT_FAIL_STACK (); bzero (fastmap, 1 << BYTEWIDTH); /* Assume nothing's valid. */ bufp->fastmap_accurate = 1; /* It will be when we're done. */ bufp->can_be_null = 0; while (1) { if (p == pend || *p == (UCHAR_T) succeed) { /* We have reached the (effective) end of pattern. */ if (!FAIL_STACK_EMPTY ()) { bufp->can_be_null |= path_can_be_null; /* Reset for next path. */ path_can_be_null = true; p = fail_stack.stack[--fail_stack.avail].pointer; continue; } else break; } /* We should never be about to go beyond the end of the pattern. */ assert (p < pend); switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++)) { /* I guess the idea here is to simply not bother with a fastmap if a backreference is used, since it's too hard to figure out the fastmap for the corresponding group. Setting `can_be_null' stops `re_search_2' from using the fastmap, so that is all we do. */ case duplicate: bufp->can_be_null = 1; goto done; /* Following are the cases which match a character. These end with `break'. */ #ifdef WCHAR case exactn: fastmap[truncate_wchar(p[1])] = 1; break; #else /* BYTE */ case exactn: fastmap[p[1]] = 1; break; #endif /* WCHAR */ #ifdef MBS_SUPPORT case exactn_bin: fastmap[p[1]] = 1; break; #endif #ifdef WCHAR /* It is hard to distinguish fastmap from (multi byte) characters which depends on current locale. */ case charset: case charset_not: case wordchar: case notwordchar: bufp->can_be_null = 1; goto done; #else /* BYTE */ case charset: for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--) if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))) fastmap[j] = 1; break; case charset_not: /* Chars beyond end of map must be allowed. */ for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++) fastmap[j] = 1; for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--) if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))) fastmap[j] = 1; break; case wordchar: for (j = 0; j < (1 << BYTEWIDTH); j++) if (SYNTAX (j) == Sword) fastmap[j] = 1; break; case notwordchar: for (j = 0; j < (1 << BYTEWIDTH); j++) if (SYNTAX (j) != Sword) fastmap[j] = 1; break; #endif /* WCHAR */ case anychar: { int fastmap_newline = fastmap['\n']; /* `.' matches anything ... */ for (j = 0; j < (1 << BYTEWIDTH); j++) fastmap[j] = 1; /* ... except perhaps newline. */ if (!(bufp->syntax & RE_DOT_NEWLINE)) fastmap['\n'] = fastmap_newline; /* Return if we have already set `can_be_null'; if we have, then the fastmap is irrelevant. Something's wrong here. */ else if (bufp->can_be_null) goto done; /* Otherwise, have to check alternative paths. */ break; } #ifdef emacs case syntaxspec: k = *p++; for (j = 0; j < (1 << BYTEWIDTH); j++) if (SYNTAX (j) == (enum syntaxcode) k) fastmap[j] = 1; break; case notsyntaxspec: k = *p++; for (j = 0; j < (1 << BYTEWIDTH); j++) if (SYNTAX (j) != (enum syntaxcode) k) fastmap[j] = 1; break; /* All cases after this match the empty string. These end with `continue'. */ case before_dot: case at_dot: case after_dot: continue; #endif /* emacs */ case no_op: case begline: case endline: case begbuf: case endbuf: case wordbound: case notwordbound: case wordbeg: case wordend: case push_dummy_failure: continue; case jump_n: case pop_failure_jump: case maybe_pop_jump: case jump: case jump_past_alt: case dummy_failure_jump: EXTRACT_NUMBER_AND_INCR (j, p); p += j; if (j > 0) continue; /* Jump backward implies we just went through the body of a loop and matched nothing. Opcode jumped to should be `on_failure_jump' or `succeed_n'. Just treat it like an ordinary jump. For a * loop, it has pushed its failure point already; if so, discard that as redundant. */ if ((re_opcode_t) *p != on_failure_jump && (re_opcode_t) *p != succeed_n) continue; p++; EXTRACT_NUMBER_AND_INCR (j, p); p += j; /* If what's on the stack is where we are now, pop it. */ if (!FAIL_STACK_EMPTY () && fail_stack.stack[fail_stack.avail - 1].pointer == p) fail_stack.avail--; continue; case on_failure_jump: case on_failure_keep_string_jump: handle_on_failure_jump: EXTRACT_NUMBER_AND_INCR (j, p); /* For some patterns, e.g., `(a?)?', `p+j' here points to the end of the pattern. We don't want to push such a point, since when we restore it above, entering the switch will increment `p' past the end of the pattern. We don't need to push such a point since we obviously won't find any more fastmap entries beyond `pend'. Such a pattern can match the null string, though. */ if (p + j < pend) { if (!PUSH_PATTERN_OP (p + j, fail_stack)) { RESET_FAIL_STACK (); return -2; } } else bufp->can_be_null = 1; if (succeed_n_p) { EXTRACT_NUMBER_AND_INCR (k, p); /* Skip the n. */ succeed_n_p = false; } continue; case succeed_n: /* Get to the number of times to succeed. */ p += OFFSET_ADDRESS_SIZE; /* Increment p past the n for when k != 0. */ EXTRACT_NUMBER_AND_INCR (k, p); if (k == 0) { p -= 2 * OFFSET_ADDRESS_SIZE; succeed_n_p = true; /* Spaghetti code alert. */ goto handle_on_failure_jump; } continue; case set_number_at: p += 2 * OFFSET_ADDRESS_SIZE; continue; case start_memory: case stop_memory: p += 2; continue; default: abort (); /* We have listed all the cases. */ } /* switch *p++ */ /* Getting here means we have found the possible starting characters for one path of the pattern -- and that the empty string does not match. We need not follow this path further. Instead, look at the next alternative (remembered on the stack), or quit if no more. The test at the top of the loop does these things. */ path_can_be_null = false; p = pend; } /* while p */ /* Set `can_be_null' for the last path (also the first path, if the pattern is empty). */ bufp->can_be_null |= path_can_be_null; done: RESET_FAIL_STACK (); return 0; } #else /* not INSIDE_RECURSION */ int re_compile_fastmap (struct re_pattern_buffer *bufp) { # ifdef MBS_SUPPORT if (MB_CUR_MAX != 1) return wcs_re_compile_fastmap(bufp); else # endif return byte_re_compile_fastmap(bufp); } /* re_compile_fastmap */ #ifdef _LIBC weak_alias (__re_compile_fastmap, re_compile_fastmap) #endif /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated using the malloc library routine, and must each be at least NUM_REGS * sizeof (regoff_t) bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using PATTERN_BUFFER will allocate its own register data, without freeing the old data. */ void re_set_registers (struct re_pattern_buffer *bufp, struct re_registers *regs, unsigned num_regs, regoff_t *starts, regoff_t *ends) { if (num_regs) { bufp->regs_allocated = REGS_REALLOCATE; regs->num_regs = num_regs; regs->start = starts; regs->end = ends; } else { bufp->regs_allocated = REGS_UNALLOCATED; regs->num_regs = 0; regs->start = regs->end = (regoff_t *) 0; } } #ifdef _LIBC weak_alias (__re_set_registers, re_set_registers) #endif /* Searching routines. */ /* Like re_search_2, below, but only one string is specified, and doesn't let you say where to stop matching. */ int re_search (struct re_pattern_buffer *bufp, const char *string, int size, int startpos, int range, struct re_registers *regs) { return re_search_2 (bufp, NULL, 0, string, size, startpos, range, regs, size); } #ifdef _LIBC weak_alias (__re_search, re_search) #endif /* Using the compiled pattern in BUFP->buffer, first tries to match the virtual concatenation of STRING1 and STRING2, starting first at index STARTPOS, then at STARTPOS + 1, and so on. STRING1 and STRING2 have length SIZE1 and SIZE2, respectively. RANGE is how far to scan while trying to match. RANGE = 0 means try only at STARTPOS; in general, the last start tried is STARTPOS + RANGE. In REGS, return the indices of the virtual concatenation of STRING1 and STRING2 that matched the entire BUFP->buffer and its contained subexpressions. Do not consider matching one past the index STOP in the virtual concatenation of STRING1 and STRING2. We return either the position in the strings at which the match was found, -1 if no match, or -2 if error (such as failure stack overflow). */ int re_search_2 (struct re_pattern_buffer *bufp, const char *string1, int size1, const char *string2, int size2, int startpos, int range, struct re_registers *regs, int stop) { # ifdef MBS_SUPPORT if (MB_CUR_MAX != 1) return wcs_re_search_2 (bufp, string1, size1, string2, size2, startpos, range, regs, stop); else # endif return byte_re_search_2 (bufp, string1, size1, string2, size2, startpos, range, regs, stop); } /* re_search_2 */ #ifdef _LIBC weak_alias (__re_search_2, re_search_2) #endif #endif /* not INSIDE_RECURSION */ #ifdef INSIDE_RECURSION #ifdef MATCH_MAY_ALLOCATE # define FREE_VAR(var) if (var) REGEX_FREE (var); var = NULL #else # define FREE_VAR(var) if (var) free (var); var = NULL #endif #ifdef WCHAR # define MAX_ALLOCA_SIZE 2000 # define FREE_WCS_BUFFERS() \ do { \ if (size1 > MAX_ALLOCA_SIZE) \ { \ free (wcs_string1); \ free (mbs_offset1); \ } \ else \ { \ FREE_VAR (wcs_string1); \ FREE_VAR (mbs_offset1); \ } \ if (size2 > MAX_ALLOCA_SIZE) \ { \ free (wcs_string2); \ free (mbs_offset2); \ } \ else \ { \ FREE_VAR (wcs_string2); \ FREE_VAR (mbs_offset2); \ } \ } while (0) #endif static int PREFIX(re_search_2) (struct re_pattern_buffer *bufp, const char *string1, int size1, const char *string2, int size2, int startpos, int range, struct re_registers *regs, int stop) { int val; register char *fastmap = bufp->fastmap; register RE_TRANSLATE_TYPE translate = bufp->translate; int total_size = size1 + size2; int endpos = startpos + range; #ifdef WCHAR /* We need wchar_t* buffers correspond to cstring1, cstring2. */ wchar_t *wcs_string1 = NULL, *wcs_string2 = NULL; /* We need the size of wchar_t buffers correspond to csize1, csize2. */ int wcs_size1 = 0, wcs_size2 = 0; /* offset buffer for optimizatoin. See convert_mbs_to_wc. */ int *mbs_offset1 = NULL, *mbs_offset2 = NULL; /* They hold whether each wchar_t is binary data or not. */ char *is_binary = NULL; #endif /* WCHAR */ /* Check for out-of-range STARTPOS. */ if (startpos < 0 || startpos > total_size) return -1; /* Fix up RANGE if it might eventually take us outside the virtual concatenation of STRING1 and STRING2. Make sure we won't move STARTPOS below 0 or above TOTAL_SIZE. */ if (endpos < 0) range = 0 - startpos; else if (endpos > total_size) range = total_size - startpos; /* If the search isn't to be a backwards one, don't waste time in a search for a pattern that must be anchored. */ if (bufp->used > 0 && range > 0 && ((re_opcode_t) bufp->buffer[0] == begbuf /* `begline' is like `begbuf' if it cannot match at newlines. */ || ((re_opcode_t) bufp->buffer[0] == begline && !bufp->newline_anchor))) { if (startpos > 0) return -1; else range = 1; } #ifdef emacs /* In a forward search for something that starts with \=. don't keep searching past point. */ if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == at_dot && range > 0) { range = PT - startpos; if (range <= 0) return -1; } #endif /* emacs */ /* Update the fastmap now if not correct already. */ if (fastmap && !bufp->fastmap_accurate) if (re_compile_fastmap (bufp) == -2) return -2; #ifdef WCHAR /* Allocate wchar_t array for wcs_string1 and wcs_string2 and fill them with converted string. */ if (size1 != 0) { if (size1 > MAX_ALLOCA_SIZE) { wcs_string1 = TALLOC (size1 + 1, CHAR_T); mbs_offset1 = TALLOC (size1 + 1, int); is_binary = TALLOC (size1 + 1, char); } else { wcs_string1 = REGEX_TALLOC (size1 + 1, CHAR_T); mbs_offset1 = REGEX_TALLOC (size1 + 1, int); is_binary = REGEX_TALLOC (size1 + 1, char); } if (!wcs_string1 || !mbs_offset1 || !is_binary) { if (size1 > MAX_ALLOCA_SIZE) { free (wcs_string1); free (mbs_offset1); free (is_binary); } else { FREE_VAR (wcs_string1); FREE_VAR (mbs_offset1); FREE_VAR (is_binary); } return -2; } wcs_size1 = convert_mbs_to_wcs(wcs_string1, string1, size1, mbs_offset1, is_binary); wcs_string1[wcs_size1] = L'\0'; /* for a sentinel */ if (size1 > MAX_ALLOCA_SIZE) free (is_binary); else FREE_VAR (is_binary); } if (size2 != 0) { if (size2 > MAX_ALLOCA_SIZE) { wcs_string2 = TALLOC (size2 + 1, CHAR_T); mbs_offset2 = TALLOC (size2 + 1, int); is_binary = TALLOC (size2 + 1, char); } else { wcs_string2 = REGEX_TALLOC (size2 + 1, CHAR_T); mbs_offset2 = REGEX_TALLOC (size2 + 1, int); is_binary = REGEX_TALLOC (size2 + 1, char); } if (!wcs_string2 || !mbs_offset2 || !is_binary) { FREE_WCS_BUFFERS (); if (size2 > MAX_ALLOCA_SIZE) free (is_binary); else FREE_VAR (is_binary); return -2; } wcs_size2 = convert_mbs_to_wcs(wcs_string2, string2, size2, mbs_offset2, is_binary); wcs_string2[wcs_size2] = L'\0'; /* for a sentinel */ if (size2 > MAX_ALLOCA_SIZE) free (is_binary); else FREE_VAR (is_binary); } #endif /* WCHAR */ /* Loop through the string, looking for a place to start matching. */ for (;;) { /* If a fastmap is supplied, skip quickly over characters that cannot be the start of a match. If the pattern can match the null string, however, we don't need to skip characters; we want the first null string. */ if (fastmap && startpos < total_size && !bufp->can_be_null) { if (range > 0) /* Searching forwards. */ { register const char *d; register int lim = 0; int irange = range; if (startpos < size1 && startpos + range >= size1) lim = range - (size1 - startpos); d = (startpos >= size1 ? string2 - size1 : string1) + startpos; /* Written out as an if-else to avoid testing `translate' inside the loop. */ if (translate) while (range > lim && !fastmap[(unsigned char) translate[(unsigned char) *d++]]) range--; else while (range > lim && !fastmap[(unsigned char) *d++]) range--; startpos += irange - range; } else /* Searching backwards. */ { register CHAR_T c = (size1 == 0 || startpos >= size1 ? string2[startpos - size1] : string1[startpos]); if (!fastmap[(unsigned char) TRANSLATE (c)]) goto advance; } } /* If can't match the null string, and that's all we have left, fail. */ if (range >= 0 && startpos == total_size && fastmap && !bufp->can_be_null) { #ifdef WCHAR FREE_WCS_BUFFERS (); #endif return -1; } #ifdef WCHAR val = wcs_re_match_2_internal (bufp, string1, size1, string2, size2, startpos, regs, stop, wcs_string1, wcs_size1, wcs_string2, wcs_size2, mbs_offset1, mbs_offset2); #else /* BYTE */ val = byte_re_match_2_internal (bufp, string1, size1, string2, size2, startpos, regs, stop); #endif /* BYTE */ #ifndef REGEX_MALLOC # ifdef C_ALLOCA alloca (0); # endif #endif if (val >= 0) { #ifdef WCHAR FREE_WCS_BUFFERS (); #endif return startpos; } if (val == -2) { #ifdef WCHAR FREE_WCS_BUFFERS (); #endif return -2; } advance: if (!range) break; else if (range > 0) { range--; startpos++; } else { range++; startpos--; } } #ifdef WCHAR FREE_WCS_BUFFERS (); #endif return -1; } #ifdef WCHAR /* This converts PTR, a pointer into one of the search wchar_t strings `string1' and `string2' into an multibyte string offset from the beginning of that string. We use mbs_offset to optimize. See convert_mbs_to_wcs. */ # define POINTER_TO_OFFSET(ptr) \ (FIRST_STRING_P (ptr) \ ? ((regoff_t)(mbs_offset1 != NULL? mbs_offset1[(ptr)-string1] : 0)) \ : ((regoff_t)((mbs_offset2 != NULL? mbs_offset2[(ptr)-string2] : 0) \ + csize1))) #else /* BYTE */ /* This converts PTR, a pointer into one of the search strings `string1' and `string2' into an offset from the beginning of that string. */ # define POINTER_TO_OFFSET(ptr) \ (FIRST_STRING_P (ptr) \ ? ((regoff_t) ((ptr) - string1)) \ : ((regoff_t) ((ptr) - string2 + size1))) #endif /* WCHAR */ /* Macros for dealing with the split strings in re_match_2. */ #define MATCHING_IN_FIRST_STRING (dend == end_match_1) /* Call before fetching a character with *d. This switches over to string2 if necessary. */ #define PREFETCH() \ while (d == dend) \ { \ /* End of string2 => fail. */ \ if (dend == end_match_2) \ goto fail; \ /* End of string1 => advance to string2. */ \ d = string2; \ dend = end_match_2; \ } /* Test if at very beginning or at very end of the virtual concatenation of `string1' and `string2'. If only one string, it's `string2'. */ #define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2) #define AT_STRINGS_END(d) ((d) == end2) /* Test if D points to a character which is word-constituent. We have two special cases to check for: if past the end of string1, look at the first character in string2; and if before the beginning of string2, look at the last character in string1. */ #ifdef WCHAR /* Use internationalized API instead of SYNTAX. */ # define WORDCHAR_P(d) \ (iswalnum ((wint_t)((d) == end1 ? *string2 \ : (d) == string2 - 1 ? *(end1 - 1) : *(d))) != 0 \ || ((d) == end1 ? *string2 \ : (d) == string2 - 1 ? *(end1 - 1) : *(d)) == L'_') #else /* BYTE */ # define WORDCHAR_P(d) \ (SYNTAX ((d) == end1 ? *string2 \ : (d) == string2 - 1 ? *(end1 - 1) : *(d)) \ == Sword) #endif /* WCHAR */ /* Disabled due to a compiler bug -- see comment at case wordbound */ #if 0 /* Test if the character before D and the one at D differ with respect to being word-constituent. */ #define AT_WORD_BOUNDARY(d) \ (AT_STRINGS_BEG (d) || AT_STRINGS_END (d) \ || WORDCHAR_P (d - 1) != WORDCHAR_P (d)) #endif /* Free everything we malloc. */ #ifdef MATCH_MAY_ALLOCATE # ifdef WCHAR # define FREE_VARIABLES() \ do { \ REGEX_FREE_STACK (fail_stack.stack); \ FREE_VAR (regstart); \ FREE_VAR (regend); \ FREE_VAR (old_regstart); \ FREE_VAR (old_regend); \ FREE_VAR (best_regstart); \ FREE_VAR (best_regend); \ FREE_VAR (reg_info); \ FREE_VAR (reg_dummy); \ FREE_VAR (reg_info_dummy); \ if (!cant_free_wcs_buf) \ { \ FREE_VAR (string1); \ FREE_VAR (string2); \ FREE_VAR (mbs_offset1); \ FREE_VAR (mbs_offset2); \ } \ } while (0) # else /* BYTE */ # define FREE_VARIABLES() \ do { \ REGEX_FREE_STACK (fail_stack.stack); \ FREE_VAR (regstart); \ FREE_VAR (regend); \ FREE_VAR (old_regstart); \ FREE_VAR (old_regend); \ FREE_VAR (best_regstart); \ FREE_VAR (best_regend); \ FREE_VAR (reg_info); \ FREE_VAR (reg_dummy); \ FREE_VAR (reg_info_dummy); \ } while (0) # endif /* WCHAR */ #else # ifdef WCHAR # define FREE_VARIABLES() \ do { \ if (!cant_free_wcs_buf) \ { \ FREE_VAR (string1); \ FREE_VAR (string2); \ FREE_VAR (mbs_offset1); \ FREE_VAR (mbs_offset2); \ } \ } while (0) # else /* BYTE */ # define FREE_VARIABLES() ((void)0) /* Do nothing! But inhibit gcc warning. */ # endif /* WCHAR */ #endif /* not MATCH_MAY_ALLOCATE */ /* These values must meet several constraints. They must not be valid register values; since we have a limit of 255 registers (because we use only one byte in the pattern for the register number), we can use numbers larger than 255. They must differ by 1, because of NUM_FAILURE_ITEMS above. And the value for the lowest register must be larger than the value for the highest register, so we do not try to actually save any registers when none are active. */ #define NO_HIGHEST_ACTIVE_REG (1 << BYTEWIDTH) #define NO_LOWEST_ACTIVE_REG (NO_HIGHEST_ACTIVE_REG + 1) #else /* not INSIDE_RECURSION */ /* Matching routines. */ #ifndef emacs /* Emacs never uses this. */ /* re_match is like re_match_2 except it takes only a single string. */ int re_match (struct re_pattern_buffer *bufp, const char *string, int size, int pos, struct re_registers *regs) { int result; # ifdef MBS_SUPPORT if (MB_CUR_MAX != 1) result = wcs_re_match_2_internal (bufp, NULL, 0, string, size, pos, regs, size, NULL, 0, NULL, 0, NULL, NULL); else # endif result = byte_re_match_2_internal (bufp, NULL, 0, string, size, pos, regs, size); # ifndef REGEX_MALLOC # ifdef C_ALLOCA alloca (0); # endif # endif return result; } # ifdef _LIBC weak_alias (__re_match, re_match) # endif #endif /* not emacs */ #endif /* not INSIDE_RECURSION */ #ifdef INSIDE_RECURSION static boolean PREFIX(group_match_null_string_p) (UCHAR_T **p, UCHAR_T *end, PREFIX(register_info_type) *reg_info); static boolean PREFIX(alt_match_null_string_p) (UCHAR_T *p, UCHAR_T *end, PREFIX(register_info_type) *reg_info); static boolean PREFIX(common_op_match_null_string_p) (UCHAR_T **p, UCHAR_T *end, PREFIX(register_info_type) *reg_info); static int PREFIX(bcmp_translate) (const CHAR_T *s1, const CHAR_T *s2, int len, char *translate); #else /* not INSIDE_RECURSION */ /* re_match_2 matches the compiled pattern in BUFP against the the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1 and SIZE2, respectively). We start matching at POS, and stop matching at STOP. If REGS is non-null and the `no_sub' field of BUFP is nonzero, we store offsets for the substring each group matched in REGS. See the documentation for exactly how many groups we fill. We return -1 if no match, -2 if an internal error (such as the failure stack overflowing). Otherwise, we return the length of the matched substring. */ int re_match_2 (struct re_pattern_buffer *bufp, const char *string1, int size1, const char *string2, int size2, int pos, struct re_registers *regs, int stop) { int result; # ifdef MBS_SUPPORT if (MB_CUR_MAX != 1) result = wcs_re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop, NULL, 0, NULL, 0, NULL, NULL); else # endif result = byte_re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop); #ifndef REGEX_MALLOC # ifdef C_ALLOCA alloca (0); # endif #endif return result; } #ifdef _LIBC weak_alias (__re_match_2, re_match_2) #endif #endif /* not INSIDE_RECURSION */ #ifdef INSIDE_RECURSION #ifdef WCHAR static int count_mbs_length (int *, int); /* This check the substring (from 0, to length) of the multibyte string, to which offset_buffer correspond. And count how many wchar_t_characters the substring occupy. We use offset_buffer to optimization. See convert_mbs_to_wcs. */ static int count_mbs_length(int *offset_buffer, int length) { int upper, lower; /* Check whether the size is valid. */ if (length < 0) return -1; if (offset_buffer == NULL) return 0; /* If there are no multibyte character, offset_buffer[i] == i. Optmize for this case. */ if (offset_buffer[length] == length) return length; /* Set up upper with length. (because for all i, offset_buffer[i] >= i) */ upper = length; lower = 0; while (true) { int middle = (lower + upper) / 2; if (middle == lower || middle == upper) break; if (offset_buffer[middle] > length) upper = middle; else if (offset_buffer[middle] < length) lower = middle; else return middle; } return -1; } #endif /* WCHAR */ /* This is a separate function so that we can force an alloca cleanup afterwards. */ #ifdef WCHAR static int wcs_re_match_2_internal (struct re_pattern_buffer *bufp, const char *cstring1, int csize1, const char *cstring2, int csize2, int pos, struct re_registers *regs, int stop, /* string1 == string2 == NULL means string1/2, size1/2 and mbs_offset1/2 need seting up in this function. */ /* We need wchar_t* buffers correspond to cstring1, cstring2. */ wchar_t *string1, int size1, wchar_t *string2, int size2, /* offset buffer for optimizatoin. See convert_mbs_to_wc. */ int *mbs_offset1, int *mbs_offset2) #else /* BYTE */ static int byte_re_match_2_internal (struct re_pattern_buffer *bufp, const char *string1, int size1, const char *string2, int size2, int pos, struct re_registers *regs, int stop) #endif /* BYTE */ { /* General temporaries. */ int mcnt; UCHAR_T *p1; #ifdef WCHAR /* They hold whether each wchar_t is binary data or not. */ char *is_binary = NULL; /* If true, we can't free string1/2, mbs_offset1/2. */ int cant_free_wcs_buf = 1; #endif /* WCHAR */ /* Just past the end of the corresponding string. */ const CHAR_T *end1, *end2; /* Pointers into string1 and string2, just past the last characters in each to consider matching. */ const CHAR_T *end_match_1, *end_match_2; /* Where we are in the data, and the end of the current string. */ const CHAR_T *d, *dend; /* Where we are in the pattern, and the end of the pattern. */ #ifdef WCHAR UCHAR_T *pattern, *p; register UCHAR_T *pend; #else /* BYTE */ UCHAR_T *p = bufp->buffer; register UCHAR_T *pend = p + bufp->used; #endif /* WCHAR */ /* Mark the opcode just after a start_memory, so we can test for an empty subpattern when we get to the stop_memory. */ UCHAR_T *just_past_start_mem = 0; /* We use this to map every character in the string. */ RE_TRANSLATE_TYPE translate = bufp->translate; /* Failure point stack. Each place that can handle a failure further down the line pushes a failure point on this stack. It consists of restart, regend, and reg_info for all registers corresponding to the subexpressions we're currently inside, plus the number of such registers, and, finally, two char *'s. The first char * is where to resume scanning the pattern; the second one is where to resume scanning the strings. If the latter is zero, the failure point is a ``dummy''; if a failure happens and the failure point is a dummy, it gets discarded and the next next one is tried. */ #ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global. */ PREFIX(fail_stack_type) fail_stack; #endif #ifdef DEBUG static unsigned failure_id; unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0; #endif #ifdef REL_ALLOC /* This holds the pointer to the failure stack, when it is allocated relocatably. */ fail_stack_elt_t *failure_stack_ptr; #endif /* We fill all the registers internally, independent of what we return, for use in backreferences. The number here includes an element for register zero. */ size_t num_regs = bufp->re_nsub + 1; /* The currently active registers. */ active_reg_t lowest_active_reg = NO_LOWEST_ACTIVE_REG; active_reg_t highest_active_reg = NO_HIGHEST_ACTIVE_REG; /* Information on the contents of registers. These are pointers into the input strings; they record just what was matched (on this attempt) by a subexpression part of the pattern, that is, the regnum-th regstart pointer points to where in the pattern we began matching and the regnum-th regend points to right after where we stopped matching the regnum-th subexpression. (The zeroth register keeps track of what the whole pattern matches.) */ #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ const CHAR_T **regstart, **regend; #endif /* If a group that's operated upon by a repetition operator fails to match anything, then the register for its start will need to be restored because it will have been set to wherever in the string we are when we last see its open-group operator. Similarly for a register's end. */ #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ const CHAR_T **old_regstart, **old_regend; #endif /* The is_active field of reg_info helps us keep track of which (possibly nested) subexpressions we are currently in. The matched_something field of reg_info[reg_num] helps us tell whether or not we have matched any of the pattern so far this time through the reg_num-th subexpression. These two fields get reset each time through any loop their register is in. */ #ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global. */ PREFIX(register_info_type) *reg_info; #endif /* The following record the register info as found in the above variables when we find a match better than any we've seen before. This happens as we backtrack through the failure points, which in turn happens only if we have not yet matched the entire string. */ unsigned best_regs_set = false; #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ const CHAR_T **best_regstart, **best_regend; #endif /* Logically, this is `best_regend[0]'. But we don't want to have to allocate space for that if we're not allocating space for anything else (see below). Also, we never need info about register 0 for any of the other register vectors, and it seems rather a kludge to treat `best_regend' differently than the rest. So we keep track of the end of the best match so far in a separate variable. We initialize this to NULL so that when we backtrack the first time and need to test it, it's not garbage. */ const CHAR_T *match_end = NULL; /* This helps SET_REGS_MATCHED avoid doing redundant work. */ int set_regs_matched_done = 0; /* Used when we pop values we don't care about. */ #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ const CHAR_T **reg_dummy; PREFIX(register_info_type) *reg_info_dummy; #endif #ifdef DEBUG /* Counts the total number of registers pushed. */ unsigned num_regs_pushed = 0; #endif DEBUG_PRINT1 ("\n\nEntering re_match_2.\n"); INIT_FAIL_STACK (); #ifdef MATCH_MAY_ALLOCATE /* Do not bother to initialize all the register variables if there are no groups in the pattern, as it takes a fair amount of time. If there are groups, we include space for register 0 (the whole pattern), even though we never use it, since it simplifies the array indexing. We should fix this. */ if (bufp->re_nsub) { regstart = REGEX_TALLOC (num_regs, const CHAR_T *); regend = REGEX_TALLOC (num_regs, const CHAR_T *); old_regstart = REGEX_TALLOC (num_regs, const CHAR_T *); old_regend = REGEX_TALLOC (num_regs, const CHAR_T *); best_regstart = REGEX_TALLOC (num_regs, const CHAR_T *); best_regend = REGEX_TALLOC (num_regs, const CHAR_T *); reg_info = REGEX_TALLOC (num_regs, PREFIX(register_info_type)); reg_dummy = REGEX_TALLOC (num_regs, const CHAR_T *); reg_info_dummy = REGEX_TALLOC (num_regs, PREFIX(register_info_type)); if (!(regstart && regend && old_regstart && old_regend && reg_info && best_regstart && best_regend && reg_dummy && reg_info_dummy)) { FREE_VARIABLES (); return -2; } } else { /* We must initialize all our variables to NULL, so that `FREE_VARIABLES' doesn't try to free them. */ regstart = regend = old_regstart = old_regend = best_regstart = best_regend = reg_dummy = NULL; reg_info = reg_info_dummy = (PREFIX(register_info_type) *) NULL; } #endif /* MATCH_MAY_ALLOCATE */ /* The starting position is bogus. */ #ifdef WCHAR if (pos < 0 || pos > csize1 + csize2) #else /* BYTE */ if (pos < 0 || pos > size1 + size2) #endif { FREE_VARIABLES (); return -1; } #ifdef WCHAR /* Allocate wchar_t array for string1 and string2 and fill them with converted string. */ if (string1 == NULL && string2 == NULL) { /* We need seting up buffers here. */ /* We must free wcs buffers in this function. */ cant_free_wcs_buf = 0; if (csize1 != 0) { string1 = REGEX_TALLOC (csize1 + 1, CHAR_T); mbs_offset1 = REGEX_TALLOC (csize1 + 1, int); is_binary = REGEX_TALLOC (csize1 + 1, char); if (!string1 || !mbs_offset1 || !is_binary) { FREE_VAR (string1); FREE_VAR (mbs_offset1); FREE_VAR (is_binary); return -2; } } if (csize2 != 0) { string2 = REGEX_TALLOC (csize2 + 1, CHAR_T); mbs_offset2 = REGEX_TALLOC (csize2 + 1, int); is_binary = REGEX_TALLOC (csize2 + 1, char); if (!string2 || !mbs_offset2 || !is_binary) { FREE_VAR (string1); FREE_VAR (mbs_offset1); FREE_VAR (string2); FREE_VAR (mbs_offset2); FREE_VAR (is_binary); return -2; } size2 = convert_mbs_to_wcs(string2, cstring2, csize2, mbs_offset2, is_binary); string2[size2] = L'\0'; /* for a sentinel */ FREE_VAR (is_binary); } } /* We need to cast pattern to (wchar_t*), because we casted this compiled pattern to (char*) in regex_compile. */ p = pattern = (CHAR_T*)bufp->buffer; pend = (CHAR_T*)(bufp->buffer + bufp->used); #endif /* WCHAR */ /* Initialize subexpression text positions to -1 to mark ones that no start_memory/stop_memory has been seen for. Also initialize the register information struct. */ for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++) { regstart[mcnt] = regend[mcnt] = old_regstart[mcnt] = old_regend[mcnt] = REG_UNSET_VALUE; REG_MATCH_NULL_STRING_P (reg_info[mcnt]) = MATCH_NULL_UNSET_VALUE; IS_ACTIVE (reg_info[mcnt]) = 0; MATCHED_SOMETHING (reg_info[mcnt]) = 0; EVER_MATCHED_SOMETHING (reg_info[mcnt]) = 0; } /* We move `string1' into `string2' if the latter's empty -- but not if `string1' is null. */ if (size2 == 0 && string1 != NULL) { string2 = string1; size2 = size1; string1 = 0; size1 = 0; #ifdef WCHAR mbs_offset2 = mbs_offset1; csize2 = csize1; mbs_offset1 = NULL; csize1 = 0; #endif } end1 = string1 + size1; end2 = string2 + size2; /* Compute where to stop matching, within the two strings. */ #ifdef WCHAR if (stop <= csize1) { mcnt = count_mbs_length(mbs_offset1, stop); end_match_1 = string1 + mcnt; end_match_2 = string2; } else { if (stop > csize1 + csize2) stop = csize1 + csize2; end_match_1 = end1; mcnt = count_mbs_length(mbs_offset2, stop-csize1); end_match_2 = string2 + mcnt; } if (mcnt < 0) { /* count_mbs_length return error. */ FREE_VARIABLES (); return -1; } #else if (stop <= size1) { end_match_1 = string1 + stop; end_match_2 = string2; } else { end_match_1 = end1; end_match_2 = string2 + stop - size1; } #endif /* WCHAR */ /* `p' scans through the pattern as `d' scans through the data. `dend' is the end of the input string that `d' points within. `d' is advanced into the following input string whenever necessary, but this happens before fetching; therefore, at the beginning of the loop, `d' can be pointing at the end of a string, but it cannot equal `string2'. */ #ifdef WCHAR if (size1 > 0 && pos <= csize1) { mcnt = count_mbs_length(mbs_offset1, pos); d = string1 + mcnt; dend = end_match_1; } else { mcnt = count_mbs_length(mbs_offset2, pos-csize1); d = string2 + mcnt; dend = end_match_2; } if (mcnt < 0) { /* count_mbs_length return error. */ FREE_VARIABLES (); return -1; } #else if (size1 > 0 && pos <= size1) { d = string1 + pos; dend = end_match_1; } else { d = string2 + pos - size1; dend = end_match_2; } #endif /* WCHAR */ DEBUG_PRINT1 ("The compiled pattern is:\n"); DEBUG_PRINT_COMPILED_PATTERN (bufp, p, pend); DEBUG_PRINT1 ("The string to match is: `"); DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2); DEBUG_PRINT1 ("'\n"); /* This loops over pattern commands. It exits by returning from the function if the match is complete, or it drops through if the match fails at this starting point in the input data. */ for (;;) { #ifdef _LIBC DEBUG_PRINT2 ("\n%p: ", p); #else DEBUG_PRINT2 ("\n0x%x: ", p); #endif if (p == pend) { /* End of pattern means we might have succeeded. */ DEBUG_PRINT1 ("end of pattern ... "); /* If we haven't matched the entire string, and we want the longest match, try backtracking. */ if (d != end_match_2) { /* 1 if this match ends in the same string (string1 or string2) as the best previous match. */ boolean same_str_p = (FIRST_STRING_P (match_end) == MATCHING_IN_FIRST_STRING); /* 1 if this match is the best seen so far. */ boolean best_match_p; /* AIX compiler got confused when this was combined with the previous declaration. */ if (same_str_p) best_match_p = d > match_end; else best_match_p = !MATCHING_IN_FIRST_STRING; DEBUG_PRINT1 ("backtracking.\n"); if (!FAIL_STACK_EMPTY ()) { /* More failure points to try. */ /* If exceeds best match so far, save it. */ if (!best_regs_set || best_match_p) { best_regs_set = true; match_end = d; DEBUG_PRINT1 ("\nSAVING match as best so far.\n"); for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++) { best_regstart[mcnt] = regstart[mcnt]; best_regend[mcnt] = regend[mcnt]; } } goto fail; } /* If no failure points, don't restore garbage. And if last match is real best match, don't restore second best one. */ else if (best_regs_set && !best_match_p) { restore_best_regs: /* Restore best match. It may happen that `dend == end_match_1' while the restored d is in string2. For example, the pattern `x.*y.*z' against the strings `x-' and `y-z-', if the two strings are not consecutive in memory. */ DEBUG_PRINT1 ("Restoring best registers.\n"); d = match_end; dend = ((d >= string1 && d <= end1) ? end_match_1 : end_match_2); for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++) { regstart[mcnt] = best_regstart[mcnt]; regend[mcnt] = best_regend[mcnt]; } } } /* d != end_match_2 */ succeed_label: DEBUG_PRINT1 ("Accepting match.\n"); /* If caller wants register contents data back, do it. */ if (regs && !bufp->no_sub) { /* Have the register data arrays been allocated? */ if (bufp->regs_allocated == REGS_UNALLOCATED) { /* No. So allocate them with malloc. We need one extra element beyond `num_regs' for the `-1' marker GNU code uses. */ regs->num_regs = MAX (RE_NREGS, num_regs + 1); regs->start = TALLOC (regs->num_regs, regoff_t); regs->end = TALLOC (regs->num_regs, regoff_t); if (regs->start == NULL || regs->end == NULL) { FREE_VARIABLES (); return -2; } bufp->regs_allocated = REGS_REALLOCATE; } else if (bufp->regs_allocated == REGS_REALLOCATE) { /* Yes. If we need more elements than were already allocated, reallocate them. If we need fewer, just leave it alone. */ if (regs->num_regs < num_regs + 1) { regs->num_regs = num_regs + 1; RETALLOC (regs->start, regs->num_regs, regoff_t); RETALLOC (regs->end, regs->num_regs, regoff_t); if (regs->start == NULL || regs->end == NULL) { FREE_VARIABLES (); return -2; } } } else { /* These braces fend off a "empty body in an else-statement" warning under GCC when assert expands to nothing. */ assert (bufp->regs_allocated == REGS_FIXED); } /* Convert the pointer data in `regstart' and `regend' to indices. Register zero has to be set differently, since we haven't kept track of any info for it. */ if (regs->num_regs > 0) { regs->start[0] = pos; #ifdef WCHAR if (MATCHING_IN_FIRST_STRING) regs->end[0] = mbs_offset1 != NULL ? mbs_offset1[d-string1] : 0; else regs->end[0] = csize1 + (mbs_offset2 != NULL ? mbs_offset2[d-string2] : 0); #else regs->end[0] = (MATCHING_IN_FIRST_STRING ? ((regoff_t) (d - string1)) : ((regoff_t) (d - string2 + size1))); #endif /* WCHAR */ } /* Go through the first `min (num_regs, regs->num_regs)' registers, since that is all we initialized. */ for (mcnt = 1; (unsigned) mcnt < MIN (num_regs, regs->num_regs); mcnt++) { if (REG_UNSET (regstart[mcnt]) || REG_UNSET (regend[mcnt])) regs->start[mcnt] = regs->end[mcnt] = -1; else { regs->start[mcnt] = (regoff_t) POINTER_TO_OFFSET (regstart[mcnt]); regs->end[mcnt] = (regoff_t) POINTER_TO_OFFSET (regend[mcnt]); } } /* If the regs structure we return has more elements than were in the pattern, set the extra elements to -1. If we (re)allocated the registers, this is the case, because we always allocate enough to have at least one -1 at the end. */ for (mcnt = num_regs; (unsigned) mcnt < regs->num_regs; mcnt++) regs->start[mcnt] = regs->end[mcnt] = -1; } /* regs && !bufp->no_sub */ DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n", nfailure_points_pushed, nfailure_points_popped, nfailure_points_pushed - nfailure_points_popped); DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed); #ifdef WCHAR if (MATCHING_IN_FIRST_STRING) mcnt = mbs_offset1 != NULL ? mbs_offset1[d-string1] : 0; else mcnt = (mbs_offset2 != NULL ? mbs_offset2[d-string2] : 0) + csize1; mcnt -= pos; #else mcnt = d - pos - (MATCHING_IN_FIRST_STRING ? string1 : string2 - size1); #endif /* WCHAR */ DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt); FREE_VARIABLES (); return mcnt; } /* Otherwise match next pattern command. */ switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++)) { /* Ignore these. Used to ignore the n of succeed_n's which currently have n == 0. */ case no_op: DEBUG_PRINT1 ("EXECUTING no_op.\n"); break; case succeed: DEBUG_PRINT1 ("EXECUTING succeed.\n"); goto succeed_label; /* Match the next n pattern characters exactly. The following byte in the pattern defines n, and the n bytes after that are the characters to match. */ case exactn: #ifdef MBS_SUPPORT case exactn_bin: #endif mcnt = *p++; DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt); /* This is written out as an if-else so we don't waste time testing `translate' inside the loop. */ if (translate) { do { PREFETCH (); #ifdef WCHAR if (*d <= 0xff) { if ((UCHAR_T) translate[(unsigned char) *d++] != (UCHAR_T) *p++) goto fail; } else { if (*d++ != (CHAR_T) *p++) goto fail; } #else if ((UCHAR_T) translate[(unsigned char) *d++] != (UCHAR_T) *p++) goto fail; #endif /* WCHAR */ } while (--mcnt); } else { do { PREFETCH (); if (*d++ != (CHAR_T) *p++) goto fail; } while (--mcnt); } SET_REGS_MATCHED (); break; /* Match any character except possibly a newline or a null. */ case anychar: DEBUG_PRINT1 ("EXECUTING anychar.\n"); PREFETCH (); if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n') || (bufp->syntax & RE_DOT_NOT_NULL && TRANSLATE (*d) == '\000')) goto fail; SET_REGS_MATCHED (); DEBUG_PRINT2 (" Matched `%ld'.\n", (long int) *d); d++; break; case charset: case charset_not: { register UCHAR_T c; #ifdef WCHAR unsigned int i, char_class_length, coll_symbol_length, equiv_class_length, ranges_length, chars_length, length; CHAR_T *workp, *workp2, *charset_top; #define WORK_BUFFER_SIZE 128 CHAR_T str_buf[WORK_BUFFER_SIZE]; # ifdef _LIBC uint32_t nrules; # endif /* _LIBC */ #endif /* WCHAR */ boolean negate = (re_opcode_t) *(p - 1) == charset_not; DEBUG_PRINT2 ("EXECUTING charset%s.\n", negate ? "_not" : ""); PREFETCH (); c = TRANSLATE (*d); /* The character to match. */ #ifdef WCHAR # ifdef _LIBC nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); # endif /* _LIBC */ charset_top = p - 1; char_class_length = *p++; coll_symbol_length = *p++; equiv_class_length = *p++; ranges_length = *p++; chars_length = *p++; /* p points charset[6], so the address of the next instruction (charset[l+m+n+2o+k+p']) equals p[l+m+n+2*o+p'], where l=length of char_classes, m=length of collating_symbol, n=equivalence_class, o=length of char_range, p'=length of character. */ workp = p; /* Update p to indicate the next instruction. */ p += char_class_length + coll_symbol_length+ equiv_class_length + 2*ranges_length + chars_length; /* match with char_class? */ for (i = 0; i < char_class_length ; i += CHAR_CLASS_SIZE) { wctype_t wctype; uintptr_t alignedp = ((uintptr_t)workp + __alignof__(wctype_t) - 1) & ~(uintptr_t)(__alignof__(wctype_t) - 1); wctype = *((wctype_t*)alignedp); workp += CHAR_CLASS_SIZE; # ifdef _LIBC if (__iswctype((wint_t)c, wctype)) goto char_set_matched; # else if (iswctype((wint_t)c, wctype)) goto char_set_matched; # endif } /* match with collating_symbol? */ # ifdef _LIBC if (nrules != 0) { const unsigned char *extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); for (workp2 = workp + coll_symbol_length ; workp < workp2 ; workp++) { int32_t *wextra; wextra = (int32_t*)(extra + *workp++); for (i = 0; i < *wextra; ++i) if (TRANSLATE(d[i]) != wextra[1 + i]) break; if (i == *wextra) { /* Update d, however d will be incremented at char_set_matched:, we decrement d here. */ d += i - 1; goto char_set_matched; } } } else /* (nrules == 0) */ # endif /* If we can't look up collation data, we use wcscoll instead. */ { for (workp2 = workp + coll_symbol_length ; workp < workp2 ;) { const CHAR_T *backup_d = d, *backup_dend = dend; # ifdef _LIBC length = __wcslen (workp); # else length = wcslen (workp); # endif /* If wcscoll(the collating symbol, whole string) > 0, any substring of the string never match with the collating symbol. */ # ifdef _LIBC if (__wcscoll (workp, d) > 0) # else if (wcscoll (workp, d) > 0) # endif { workp += length + 1; continue; } /* First, we compare the collating symbol with the first character of the string. If it don't match, we add the next character to the compare buffer in turn. */ for (i = 0 ; i < WORK_BUFFER_SIZE-1 ; i++, d++) { int match; if (d == dend) { if (dend == end_match_2) break; d = string2; dend = end_match_2; } /* add next character to the compare buffer. */ str_buf[i] = TRANSLATE(*d); str_buf[i+1] = '\0'; # ifdef _LIBC match = __wcscoll (workp, str_buf); # else match = wcscoll (workp, str_buf); # endif if (match == 0) goto char_set_matched; if (match < 0) /* (str_buf > workp) indicate (str_buf + X > workp), because for all X (str_buf + X > str_buf). So we don't need continue this loop. */ break; /* Otherwise(str_buf < workp), (str_buf+next_character) may equals (workp). So we continue this loop. */ } /* not matched */ d = backup_d; dend = backup_dend; workp += length + 1; } } /* match with equivalence_class? */ # ifdef _LIBC if (nrules != 0) { const CHAR_T *backup_d = d, *backup_dend = dend; /* Try to match the equivalence class against those known to the collate implementation. */ const int32_t *table; const int32_t *weights; const int32_t *extra; const int32_t *indirect; int32_t idx, idx2; wint_t *cp; size_t len; /* This #include defines a local function! */ # include table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEWC); weights = (const wint_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTWC); extra = (const wint_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAWC); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTWC); /* Write 1 collating element to str_buf, and get its index. */ idx2 = 0; for (i = 0 ; idx2 == 0 && i < WORK_BUFFER_SIZE - 1; i++) { cp = (wint_t*)str_buf; if (d == dend) { if (dend == end_match_2) break; d = string2; dend = end_match_2; } str_buf[i] = TRANSLATE(*(d+i)); str_buf[i+1] = '\0'; /* sentinel */ idx2 = findidx ((const wint_t**)&cp); } /* Update d, however d will be incremented at char_set_matched:, we decrement d here. */ d = backup_d + ((wchar_t*)cp - (wchar_t*)str_buf - 1); if (d >= dend) { if (dend == end_match_2) d = dend; else { d = string2; dend = end_match_2; } } len = weights[idx2]; for (workp2 = workp + equiv_class_length ; workp < workp2 ; workp++) { idx = (int32_t)*workp; /* We already checked idx != 0 in regex_compile. */ if (idx2 != 0 && len == weights[idx]) { int cnt = 0; while (cnt < len && (weights[idx + 1 + cnt] == weights[idx2 + 1 + cnt])) ++cnt; if (cnt == len) goto char_set_matched; } } /* not matched */ d = backup_d; dend = backup_dend; } else /* (nrules == 0) */ # endif /* If we can't look up collation data, we use wcscoll instead. */ { for (workp2 = workp + equiv_class_length ; workp < workp2 ;) { const CHAR_T *backup_d = d, *backup_dend = dend; # ifdef _LIBC length = __wcslen (workp); # else length = wcslen (workp); # endif /* If wcscoll(the collating symbol, whole string) > 0, any substring of the string never match with the collating symbol. */ # ifdef _LIBC if (__wcscoll (workp, d) > 0) # else if (wcscoll (workp, d) > 0) # endif { workp += length + 1; break; } /* First, we compare the equivalence class with the first character of the string. If it don't match, we add the next character to the compare buffer in turn. */ for (i = 0 ; i < WORK_BUFFER_SIZE - 1 ; i++, d++) { int match; if (d == dend) { if (dend == end_match_2) break; d = string2; dend = end_match_2; } /* add next character to the compare buffer. */ str_buf[i] = TRANSLATE(*d); str_buf[i+1] = '\0'; # ifdef _LIBC match = __wcscoll (workp, str_buf); # else match = wcscoll (workp, str_buf); # endif if (match == 0) goto char_set_matched; if (match < 0) /* (str_buf > workp) indicate (str_buf + X > workp), because for all X (str_buf + X > str_buf). So we don't need continue this loop. */ break; /* Otherwise(str_buf < workp), (str_buf+next_character) may equals (workp). So we continue this loop. */ } /* not matched */ d = backup_d; dend = backup_dend; workp += length + 1; } } /* match with char_range? */ # ifdef _LIBC if (nrules != 0) { uint32_t collseqval; const char *collseq = (const char *) _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQWC); collseqval = collseq_table_lookup (collseq, c); for (; workp < p - chars_length ;) { uint32_t start_val, end_val; /* We already compute the collation sequence value of the characters (or collating symbols). */ start_val = (uint32_t) *workp++; /* range_start */ end_val = (uint32_t) *workp++; /* range_end */ if (start_val <= collseqval && collseqval <= end_val) goto char_set_matched; } } else # endif { /* We set range_start_char at str_buf[0], range_end_char at str_buf[4], and compared char at str_buf[2]. */ str_buf[1] = 0; str_buf[2] = c; str_buf[3] = 0; str_buf[5] = 0; for (; workp < p - chars_length ;) { wchar_t *range_start_char, *range_end_char; /* match if (range_start_char <= c <= range_end_char). */ /* If range_start(or end) < 0, we assume -range_start(end) is the offset of the collating symbol which is specified as the character of the range start(end). */ /* range_start */ if (*workp < 0) range_start_char = charset_top - (*workp++); else { str_buf[0] = *workp++; range_start_char = str_buf; } /* range_end */ if (*workp < 0) range_end_char = charset_top - (*workp++); else { str_buf[4] = *workp++; range_end_char = str_buf + 4; } # ifdef _LIBC if (__wcscoll (range_start_char, str_buf+2) <= 0 && __wcscoll (str_buf+2, range_end_char) <= 0) # else if (wcscoll (range_start_char, str_buf+2) <= 0 && wcscoll (str_buf+2, range_end_char) <= 0) # endif goto char_set_matched; } } /* match with char? */ for (; workp < p ; workp++) if (c == *workp) goto char_set_matched; negate = !negate; char_set_matched: if (negate) goto fail; #else /* Cast to `unsigned' instead of `unsigned char' in case the bit list is a full 32 bytes long. */ if (c < (unsigned) (*p * BYTEWIDTH) && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH))) negate = !negate; p += 1 + *p; if (!negate) goto fail; #undef WORK_BUFFER_SIZE #endif /* WCHAR */ SET_REGS_MATCHED (); d++; break; } /* The beginning of a group is represented by start_memory. The arguments are the register number in the next byte, and the number of groups inner to this one in the next. The text matched within the group is recorded (in the internal registers data structure) under the register number. */ case start_memory: DEBUG_PRINT3 ("EXECUTING start_memory %ld (%ld):\n", (long int) *p, (long int) p[1]); /* Find out if this group can match the empty string. */ p1 = p; /* To send to group_match_null_string_p. */ if (REG_MATCH_NULL_STRING_P (reg_info[*p]) == MATCH_NULL_UNSET_VALUE) REG_MATCH_NULL_STRING_P (reg_info[*p]) = PREFIX(group_match_null_string_p) (&p1, pend, reg_info); /* Save the position in the string where we were the last time we were at this open-group operator in case the group is operated upon by a repetition operator, e.g., with `(a*)*b' against `ab'; then we want to ignore where we are now in the string in case this attempt to match fails. */ old_regstart[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p]) ? REG_UNSET (regstart[*p]) ? d : regstart[*p] : regstart[*p]; DEBUG_PRINT2 (" old_regstart: %d\n", POINTER_TO_OFFSET (old_regstart[*p])); regstart[*p] = d; DEBUG_PRINT2 (" regstart: %d\n", POINTER_TO_OFFSET (regstart[*p])); IS_ACTIVE (reg_info[*p]) = 1; MATCHED_SOMETHING (reg_info[*p]) = 0; /* Clear this whenever we change the register activity status. */ set_regs_matched_done = 0; /* This is the new highest active register. */ highest_active_reg = *p; /* If nothing was active before, this is the new lowest active register. */ if (lowest_active_reg == NO_LOWEST_ACTIVE_REG) lowest_active_reg = *p; /* Move past the register number and inner group count. */ p += 2; just_past_start_mem = p; break; /* The stop_memory opcode represents the end of a group. Its arguments are the same as start_memory's: the register number, and the number of inner groups. */ case stop_memory: DEBUG_PRINT3 ("EXECUTING stop_memory %ld (%ld):\n", (long int) *p, (long int) p[1]); /* We need to save the string position the last time we were at this close-group operator in case the group is operated upon by a repetition operator, e.g., with `((a*)*(b*)*)*' against `aba'; then we want to ignore where we are now in the string in case this attempt to match fails. */ old_regend[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p]) ? REG_UNSET (regend[*p]) ? d : regend[*p] : regend[*p]; DEBUG_PRINT2 (" old_regend: %d\n", POINTER_TO_OFFSET (old_regend[*p])); regend[*p] = d; DEBUG_PRINT2 (" regend: %d\n", POINTER_TO_OFFSET (regend[*p])); /* This register isn't active anymore. */ IS_ACTIVE (reg_info[*p]) = 0; /* Clear this whenever we change the register activity status. */ set_regs_matched_done = 0; /* If this was the only register active, nothing is active anymore. */ if (lowest_active_reg == highest_active_reg) { lowest_active_reg = NO_LOWEST_ACTIVE_REG; highest_active_reg = NO_HIGHEST_ACTIVE_REG; } else { /* We must scan for the new highest active register, since it isn't necessarily one less than now: consider (a(b)c(d(e)f)g). When group 3 ends, after the f), the new highest active register is 1. */ UCHAR_T r = *p - 1; while (r > 0 && !IS_ACTIVE (reg_info[r])) r--; /* If we end up at register zero, that means that we saved the registers as the result of an `on_failure_jump', not a `start_memory', and we jumped to past the innermost `stop_memory'. For example, in ((.)*) we save registers 1 and 2 as a result of the *, but when we pop back to the second ), we are at the stop_memory 1. Thus, nothing is active. */ if (r == 0) { lowest_active_reg = NO_LOWEST_ACTIVE_REG; highest_active_reg = NO_HIGHEST_ACTIVE_REG; } else highest_active_reg = r; } /* If just failed to match something this time around with a group that's operated on by a repetition operator, try to force exit from the ``loop'', and restore the register information for this group that we had before trying this last match. */ if ((!MATCHED_SOMETHING (reg_info[*p]) || just_past_start_mem == p - 1) && (p + 2) < pend) { boolean is_a_jump_n = false; p1 = p + 2; mcnt = 0; switch ((re_opcode_t) *p1++) { case jump_n: is_a_jump_n = true; case pop_failure_jump: case maybe_pop_jump: case jump: case dummy_failure_jump: EXTRACT_NUMBER_AND_INCR (mcnt, p1); if (is_a_jump_n) p1 += OFFSET_ADDRESS_SIZE; break; default: /* do nothing */ ; } p1 += mcnt; /* If the next operation is a jump backwards in the pattern to an on_failure_jump right before the start_memory corresponding to this stop_memory, exit from the loop by forcing a failure after pushing on the stack the on_failure_jump's jump in the pattern, and d. */ if (mcnt < 0 && (re_opcode_t) *p1 == on_failure_jump && (re_opcode_t) p1[1+OFFSET_ADDRESS_SIZE] == start_memory && p1[2+OFFSET_ADDRESS_SIZE] == *p) { /* If this group ever matched anything, then restore what its registers were before trying this last failed match, e.g., with `(a*)*b' against `ab' for regstart[1], and, e.g., with `((a*)*(b*)*)*' against `aba' for regend[3]. Also restore the registers for inner groups for, e.g., `((a*)(b*))*' against `aba' (register 3 would otherwise get trashed). */ if (EVER_MATCHED_SOMETHING (reg_info[*p])) { unsigned r; EVER_MATCHED_SOMETHING (reg_info[*p]) = 0; /* Restore this and inner groups' (if any) registers. */ for (r = *p; r < (unsigned) *p + (unsigned) *(p + 1); r++) { regstart[r] = old_regstart[r]; /* xx why this test? */ if (old_regend[r] >= regstart[r]) regend[r] = old_regend[r]; } } p1++; EXTRACT_NUMBER_AND_INCR (mcnt, p1); PUSH_FAILURE_POINT (p1 + mcnt, d, -2); goto fail; } } /* Move past the register number and the inner group count. */ p += 2; break; /* \ has been turned into a `duplicate' command which is followed by the numeric value of as the register number. */ case duplicate: { register const CHAR_T *d2, *dend2; int regno = *p++; /* Get which register to match against. */ DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno); /* Can't back reference a group which we've never matched. */ if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno])) goto fail; /* Where in input to try to start matching. */ d2 = regstart[regno]; /* Where to stop matching; if both the place to start and the place to stop matching are in the same string, then set to the place to stop, otherwise, for now have to use the end of the first string. */ dend2 = ((FIRST_STRING_P (regstart[regno]) == FIRST_STRING_P (regend[regno])) ? regend[regno] : end_match_1); for (;;) { /* If necessary, advance to next segment in register contents. */ while (d2 == dend2) { if (dend2 == end_match_2) break; if (dend2 == regend[regno]) break; /* End of string1 => advance to string2. */ d2 = string2; dend2 = regend[regno]; } /* At end of register contents => success */ if (d2 == dend2) break; /* If necessary, advance to next segment in data. */ PREFETCH (); /* How many characters left in this segment to match. */ mcnt = dend - d; /* Want how many consecutive characters we can match in one shot, so, if necessary, adjust the count. */ if (mcnt > dend2 - d2) mcnt = dend2 - d2; /* Compare that many; failure if mismatch, else move past them. */ if (translate ? PREFIX(bcmp_translate) (d, d2, mcnt, translate) : memcmp (d, d2, mcnt*sizeof(UCHAR_T))) goto fail; d += mcnt, d2 += mcnt; /* Do this because we've match some characters. */ SET_REGS_MATCHED (); } } break; /* begline matches the empty string at the beginning of the string (unless `not_bol' is set in `bufp'), and, if `newline_anchor' is set, after newlines. */ case begline: DEBUG_PRINT1 ("EXECUTING begline.\n"); if (AT_STRINGS_BEG (d)) { if (!bufp->not_bol) break; } else if (d[-1] == '\n' && bufp->newline_anchor) { break; } /* In all other cases, we fail. */ goto fail; /* endline is the dual of begline. */ case endline: DEBUG_PRINT1 ("EXECUTING endline.\n"); if (AT_STRINGS_END (d)) { if (!bufp->not_eol) break; } /* We have to ``prefetch'' the next character. */ else if ((d == end1 ? *string2 : *d) == '\n' && bufp->newline_anchor) { break; } goto fail; /* Match at the very beginning of the data. */ case begbuf: DEBUG_PRINT1 ("EXECUTING begbuf.\n"); if (AT_STRINGS_BEG (d)) break; goto fail; /* Match at the very end of the data. */ case endbuf: DEBUG_PRINT1 ("EXECUTING endbuf.\n"); if (AT_STRINGS_END (d)) break; goto fail; /* on_failure_keep_string_jump is used to optimize `.*\n'. It pushes NULL as the value for the string on the stack. Then `pop_failure_point' will keep the current value for the string, instead of restoring it. To see why, consider matching `foo\nbar' against `.*\n'. The .* matches the foo; then the . fails against the \n. But the next thing we want to do is match the \n against the \n; if we restored the string value, we would be back at the foo. Because this is used only in specific cases, we don't need to check all the things that `on_failure_jump' does, to make sure the right things get saved on the stack. Hence we don't share its code. The only reason to push anything on the stack at all is that otherwise we would have to change `anychar's code to do something besides goto fail in this case; that seems worse than this. */ case on_failure_keep_string_jump: DEBUG_PRINT1 ("EXECUTING on_failure_keep_string_jump"); EXTRACT_NUMBER_AND_INCR (mcnt, p); #ifdef _LIBC DEBUG_PRINT3 (" %d (to %p):\n", mcnt, p + mcnt); #else DEBUG_PRINT3 (" %d (to 0x%x):\n", mcnt, p + mcnt); #endif PUSH_FAILURE_POINT (p + mcnt, NULL, -2); break; /* Uses of on_failure_jump: Each alternative starts with an on_failure_jump that points to the beginning of the next alternative. Each alternative except the last ends with a jump that in effect jumps past the rest of the alternatives. (They really jump to the ending jump of the following alternative, because tensioning these jumps is a hassle.) Repeats start with an on_failure_jump that points past both the repetition text and either the following jump or pop_failure_jump back to this on_failure_jump. */ case on_failure_jump: on_failure: DEBUG_PRINT1 ("EXECUTING on_failure_jump"); EXTRACT_NUMBER_AND_INCR (mcnt, p); #ifdef _LIBC DEBUG_PRINT3 (" %d (to %p)", mcnt, p + mcnt); #else DEBUG_PRINT3 (" %d (to 0x%x)", mcnt, p + mcnt); #endif /* If this on_failure_jump comes right before a group (i.e., the original * applied to a group), save the information for that group and all inner ones, so that if we fail back to this point, the group's information will be correct. For example, in \(a*\)*\1, we need the preceding group, and in \(zz\(a*\)b*\)\2, we need the inner group. */ /* We can't use `p' to check ahead because we push a failure point to `p + mcnt' after we do this. */ p1 = p; /* We need to skip no_op's before we look for the start_memory in case this on_failure_jump is happening as the result of a completed succeed_n, as in \(a\)\{1,3\}b\1 against aba. */ while (p1 < pend && (re_opcode_t) *p1 == no_op) p1++; if (p1 < pend && (re_opcode_t) *p1 == start_memory) { /* We have a new highest active register now. This will get reset at the start_memory we are about to get to, but we will have saved all the registers relevant to this repetition op, as described above. */ highest_active_reg = *(p1 + 1) + *(p1 + 2); if (lowest_active_reg == NO_LOWEST_ACTIVE_REG) lowest_active_reg = *(p1 + 1); } DEBUG_PRINT1 (":\n"); PUSH_FAILURE_POINT (p + mcnt, d, -2); break; /* A smart repeat ends with `maybe_pop_jump'. We change it to either `pop_failure_jump' or `jump'. */ case maybe_pop_jump: EXTRACT_NUMBER_AND_INCR (mcnt, p); DEBUG_PRINT2 ("EXECUTING maybe_pop_jump %d.\n", mcnt); { register UCHAR_T *p2 = p; /* Compare the beginning of the repeat with what in the pattern follows its end. If we can establish that there is nothing that they would both match, i.e., that we would have to backtrack because of (as in, e.g., `a*a') then we can change to pop_failure_jump, because we'll never have to backtrack. This is not true in the case of alternatives: in `(a|ab)*' we do need to backtrack to the `ab' alternative (e.g., if the string was `ab'). But instead of trying to detect that here, the alternative has put on a dummy failure point which is what we will end up popping. */ /* Skip over open/close-group commands. If what follows this loop is a ...+ construct, look at what begins its body, since we will have to match at least one of that. */ while (1) { if (p2 + 2 < pend && ((re_opcode_t) *p2 == stop_memory || (re_opcode_t) *p2 == start_memory)) p2 += 3; else if (p2 + 2 + 2 * OFFSET_ADDRESS_SIZE < pend && (re_opcode_t) *p2 == dummy_failure_jump) p2 += 2 + 2 * OFFSET_ADDRESS_SIZE; else break; } p1 = p + mcnt; /* p1[0] ... p1[2] are the `on_failure_jump' corresponding to the `maybe_finalize_jump' of this case. Examine what follows. */ /* If we're at the end of the pattern, we can change. */ if (p2 == pend) { /* Consider what happens when matching ":\(.*\)" against ":/". I don't really understand this code yet. */ p[-(1+OFFSET_ADDRESS_SIZE)] = (UCHAR_T) pop_failure_jump; DEBUG_PRINT1 (" End of pattern: change to `pop_failure_jump'.\n"); } else if ((re_opcode_t) *p2 == exactn #ifdef MBS_SUPPORT || (re_opcode_t) *p2 == exactn_bin #endif || (bufp->newline_anchor && (re_opcode_t) *p2 == endline)) { register UCHAR_T c = *p2 == (UCHAR_T) endline ? '\n' : p2[2]; if (((re_opcode_t) p1[1+OFFSET_ADDRESS_SIZE] == exactn #ifdef MBS_SUPPORT || (re_opcode_t) p1[1+OFFSET_ADDRESS_SIZE] == exactn_bin #endif ) && p1[3+OFFSET_ADDRESS_SIZE] != c) { p[-(1+OFFSET_ADDRESS_SIZE)] = (UCHAR_T) pop_failure_jump; #ifdef WCHAR DEBUG_PRINT3 (" %C != %C => pop_failure_jump.\n", (wint_t) c, (wint_t) p1[3+OFFSET_ADDRESS_SIZE]); #else DEBUG_PRINT3 (" %c != %c => pop_failure_jump.\n", (char) c, (char) p1[3+OFFSET_ADDRESS_SIZE]); #endif } #ifndef WCHAR else if ((re_opcode_t) p1[3] == charset || (re_opcode_t) p1[3] == charset_not) { int negate = (re_opcode_t) p1[3] == charset_not; if (c < (unsigned) (p1[4] * BYTEWIDTH) && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH))) negate = !negate; /* `negate' is equal to 1 if c would match, which means that we can't change to pop_failure_jump. */ if (!negate) { p[-3] = (unsigned char) pop_failure_jump; DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); } } #endif /* not WCHAR */ } #ifndef WCHAR else if ((re_opcode_t) *p2 == charset) { /* We win if the first character of the loop is not part of the charset. */ if ((re_opcode_t) p1[3] == exactn && ! ((int) p2[1] * BYTEWIDTH > (int) p1[5] && (p2[2 + p1[5] / BYTEWIDTH] & (1 << (p1[5] % BYTEWIDTH))))) { p[-3] = (unsigned char) pop_failure_jump; DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); } else if ((re_opcode_t) p1[3] == charset_not) { int idx; /* We win if the charset_not inside the loop lists every character listed in the charset after. */ for (idx = 0; idx < (int) p2[1]; idx++) if (! (p2[2 + idx] == 0 || (idx < (int) p1[4] && ((p2[2 + idx] & ~ p1[5 + idx]) == 0)))) break; if (idx == p2[1]) { p[-3] = (unsigned char) pop_failure_jump; DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); } } else if ((re_opcode_t) p1[3] == charset) { int idx; /* We win if the charset inside the loop has no overlap with the one after the loop. */ for (idx = 0; idx < (int) p2[1] && idx < (int) p1[4]; idx++) if ((p2[2 + idx] & p1[5 + idx]) != 0) break; if (idx == p2[1] || idx == p1[4]) { p[-3] = (unsigned char) pop_failure_jump; DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); } } } #endif /* not WCHAR */ } p -= OFFSET_ADDRESS_SIZE; /* Point at relative address again. */ if ((re_opcode_t) p[-1] != pop_failure_jump) { p[-1] = (UCHAR_T) jump; DEBUG_PRINT1 (" Match => jump.\n"); goto unconditional_jump; } /* Note fall through. */ /* The end of a simple repeat has a pop_failure_jump back to its matching on_failure_jump, where the latter will push a failure point. The pop_failure_jump takes off failure points put on by this pop_failure_jump's matching on_failure_jump; we got through the pattern to here from the matching on_failure_jump, so didn't fail. */ case pop_failure_jump: { /* We need to pass separate storage for the lowest and highest registers, even though we don't care about the actual values. Otherwise, we will restore only one register from the stack, since lowest will == highest in `pop_failure_point'. */ active_reg_t dummy_low_reg, dummy_high_reg; UCHAR_T *pdummy = NULL; const CHAR_T *sdummy = NULL; DEBUG_PRINT1 ("EXECUTING pop_failure_jump.\n"); POP_FAILURE_POINT (sdummy, pdummy, dummy_low_reg, dummy_high_reg, reg_dummy, reg_dummy, reg_info_dummy); } /* Note fall through. */ unconditional_jump: #ifdef _LIBC DEBUG_PRINT2 ("\n%p: ", p); #else DEBUG_PRINT2 ("\n0x%x: ", p); #endif /* Note fall through. */ /* Unconditionally jump (without popping any failure points). */ case jump: EXTRACT_NUMBER_AND_INCR (mcnt, p); /* Get the amount to jump. */ DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt); p += mcnt; /* Do the jump. */ #ifdef _LIBC DEBUG_PRINT2 ("(to %p).\n", p); #else DEBUG_PRINT2 ("(to 0x%x).\n", p); #endif break; /* We need this opcode so we can detect where alternatives end in `group_match_null_string_p' et al. */ case jump_past_alt: DEBUG_PRINT1 ("EXECUTING jump_past_alt.\n"); goto unconditional_jump; /* Normally, the on_failure_jump pushes a failure point, which then gets popped at pop_failure_jump. We will end up at pop_failure_jump, also, and with a pattern of, say, `a+', we are skipping over the on_failure_jump, so we have to push something meaningless for pop_failure_jump to pop. */ case dummy_failure_jump: DEBUG_PRINT1 ("EXECUTING dummy_failure_jump.\n"); /* It doesn't matter what we push for the string here. What the code at `fail' tests is the value for the pattern. */ PUSH_FAILURE_POINT (NULL, NULL, -2); goto unconditional_jump; /* At the end of an alternative, we need to push a dummy failure point in case we are followed by a `pop_failure_jump', because we don't want the failure point for the alternative to be popped. For example, matching `(a|ab)*' against `aab' requires that we match the `ab' alternative. */ case push_dummy_failure: DEBUG_PRINT1 ("EXECUTING push_dummy_failure.\n"); /* See comments just above at `dummy_failure_jump' about the two zeroes. */ PUSH_FAILURE_POINT (NULL, NULL, -2); break; /* Have to succeed matching what follows at least n times. After that, handle like `on_failure_jump'. */ case succeed_n: EXTRACT_NUMBER (mcnt, p + OFFSET_ADDRESS_SIZE); DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt); assert (mcnt >= 0); /* Originally, this is how many times we HAVE to succeed. */ if (mcnt > 0) { mcnt--; p += OFFSET_ADDRESS_SIZE; STORE_NUMBER_AND_INCR (p, mcnt); #ifdef _LIBC DEBUG_PRINT3 (" Setting %p to %d.\n", p - OFFSET_ADDRESS_SIZE , mcnt); #else DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p - OFFSET_ADDRESS_SIZE , mcnt); #endif } else if (mcnt == 0) { #ifdef _LIBC DEBUG_PRINT2 (" Setting two bytes from %p to no_op.\n", p + OFFSET_ADDRESS_SIZE); #else DEBUG_PRINT2 (" Setting two bytes from 0x%x to no_op.\n", p + OFFSET_ADDRESS_SIZE); #endif /* _LIBC */ #ifdef WCHAR p[1] = (UCHAR_T) no_op; #else p[2] = (UCHAR_T) no_op; p[3] = (UCHAR_T) no_op; #endif /* WCHAR */ goto on_failure; } break; case jump_n: EXTRACT_NUMBER (mcnt, p + OFFSET_ADDRESS_SIZE); DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt); /* Originally, this is how many times we CAN jump. */ if (mcnt) { mcnt--; STORE_NUMBER (p + OFFSET_ADDRESS_SIZE, mcnt); #ifdef _LIBC DEBUG_PRINT3 (" Setting %p to %d.\n", p + OFFSET_ADDRESS_SIZE, mcnt); #else DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p + OFFSET_ADDRESS_SIZE, mcnt); #endif /* _LIBC */ goto unconditional_jump; } /* If don't have to jump any more, skip over the rest of command. */ else p += 2 * OFFSET_ADDRESS_SIZE; break; case set_number_at: { DEBUG_PRINT1 ("EXECUTING set_number_at.\n"); EXTRACT_NUMBER_AND_INCR (mcnt, p); p1 = p + mcnt; EXTRACT_NUMBER_AND_INCR (mcnt, p); #ifdef _LIBC DEBUG_PRINT3 (" Setting %p to %d.\n", p1, mcnt); #else DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p1, mcnt); #endif STORE_NUMBER (p1, mcnt); break; } #if 0 /* The DEC Alpha C compiler 3.x generates incorrect code for the test WORDCHAR_P (d - 1) != WORDCHAR_P (d) in the expansion of AT_WORD_BOUNDARY, so this code is disabled. Expanding the macro and introducing temporary variables works around the bug. */ case wordbound: DEBUG_PRINT1 ("EXECUTING wordbound.\n"); if (AT_WORD_BOUNDARY (d)) break; goto fail; case notwordbound: DEBUG_PRINT1 ("EXECUTING notwordbound.\n"); if (AT_WORD_BOUNDARY (d)) goto fail; break; #else case wordbound: { boolean prevchar, thischar; DEBUG_PRINT1 ("EXECUTING wordbound.\n"); if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d)) break; prevchar = WORDCHAR_P (d - 1); thischar = WORDCHAR_P (d); if (prevchar != thischar) break; goto fail; } case notwordbound: { boolean prevchar, thischar; DEBUG_PRINT1 ("EXECUTING notwordbound.\n"); if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d)) goto fail; prevchar = WORDCHAR_P (d - 1); thischar = WORDCHAR_P (d); if (prevchar != thischar) goto fail; break; } #endif case wordbeg: DEBUG_PRINT1 ("EXECUTING wordbeg.\n"); if (!AT_STRINGS_END (d) && WORDCHAR_P (d) && (AT_STRINGS_BEG (d) || !WORDCHAR_P (d - 1))) break; goto fail; case wordend: DEBUG_PRINT1 ("EXECUTING wordend.\n"); if (!AT_STRINGS_BEG (d) && WORDCHAR_P (d - 1) && (AT_STRINGS_END (d) || !WORDCHAR_P (d))) break; goto fail; #ifdef emacs case before_dot: DEBUG_PRINT1 ("EXECUTING before_dot.\n"); if (PTR_CHAR_POS ((unsigned char *) d) >= point) goto fail; break; case at_dot: DEBUG_PRINT1 ("EXECUTING at_dot.\n"); if (PTR_CHAR_POS ((unsigned char *) d) != point) goto fail; break; case after_dot: DEBUG_PRINT1 ("EXECUTING after_dot.\n"); if (PTR_CHAR_POS ((unsigned char *) d) <= point) goto fail; break; case syntaxspec: DEBUG_PRINT2 ("EXECUTING syntaxspec %d.\n", mcnt); mcnt = *p++; goto matchsyntax; case wordchar: DEBUG_PRINT1 ("EXECUTING Emacs wordchar.\n"); mcnt = (int) Sword; matchsyntax: PREFETCH (); /* Can't use *d++ here; SYNTAX may be an unsafe macro. */ d++; if (SYNTAX (d[-1]) != (enum syntaxcode) mcnt) goto fail; SET_REGS_MATCHED (); break; case notsyntaxspec: DEBUG_PRINT2 ("EXECUTING notsyntaxspec %d.\n", mcnt); mcnt = *p++; goto matchnotsyntax; case notwordchar: DEBUG_PRINT1 ("EXECUTING Emacs notwordchar.\n"); mcnt = (int) Sword; matchnotsyntax: PREFETCH (); /* Can't use *d++ here; SYNTAX may be an unsafe macro. */ d++; if (SYNTAX (d[-1]) == (enum syntaxcode) mcnt) goto fail; SET_REGS_MATCHED (); break; #else /* not emacs */ case wordchar: DEBUG_PRINT1 ("EXECUTING non-Emacs wordchar.\n"); PREFETCH (); if (!WORDCHAR_P (d)) goto fail; SET_REGS_MATCHED (); d++; break; case notwordchar: DEBUG_PRINT1 ("EXECUTING non-Emacs notwordchar.\n"); PREFETCH (); if (WORDCHAR_P (d)) goto fail; SET_REGS_MATCHED (); d++; break; #endif /* not emacs */ default: abort (); } continue; /* Successfully executed one pattern command; keep going. */ /* We goto here if a matching operation fails. */ fail: if (!FAIL_STACK_EMPTY ()) { /* A restart point is known. Restore to that state. */ DEBUG_PRINT1 ("\nFAIL:\n"); POP_FAILURE_POINT (d, p, lowest_active_reg, highest_active_reg, regstart, regend, reg_info); /* If this failure point is a dummy, try the next one. */ if (!p) goto fail; /* If we failed to the end of the pattern, don't examine *p. */ assert (p <= pend); if (p < pend) { boolean is_a_jump_n = false; /* If failed to a backwards jump that's part of a repetition loop, need to pop this failure point and use the next one. */ switch ((re_opcode_t) *p) { case jump_n: is_a_jump_n = true; case maybe_pop_jump: case pop_failure_jump: case jump: p1 = p + 1; EXTRACT_NUMBER_AND_INCR (mcnt, p1); p1 += mcnt; if ((is_a_jump_n && (re_opcode_t) *p1 == succeed_n) || (!is_a_jump_n && (re_opcode_t) *p1 == on_failure_jump)) goto fail; break; default: /* do nothing */ ; } } if (d >= string1 && d <= end1) dend = end_match_1; } else break; /* Matching at this starting point really fails. */ } /* for (;;) */ if (best_regs_set) goto restore_best_regs; FREE_VARIABLES (); return -1; /* Failure to match. */ } /* re_match_2 */ /* Subroutine definitions for re_match_2. */ /* We are passed P pointing to a register number after a start_memory. Return true if the pattern up to the corresponding stop_memory can match the empty string, and false otherwise. If we find the matching stop_memory, sets P to point to one past its number. Otherwise, sets P to an undefined byte less than or equal to END. We don't handle duplicates properly (yet). */ static boolean PREFIX(group_match_null_string_p) (UCHAR_T **p, UCHAR_T *end, PREFIX(register_info_type) *reg_info) { int mcnt; /* Point to after the args to the start_memory. */ UCHAR_T *p1 = *p + 2; while (p1 < end) { /* Skip over opcodes that can match nothing, and return true or false, as appropriate, when we get to one that can't, or to the matching stop_memory. */ switch ((re_opcode_t) *p1) { /* Could be either a loop or a series of alternatives. */ case on_failure_jump: p1++; EXTRACT_NUMBER_AND_INCR (mcnt, p1); /* If the next operation is not a jump backwards in the pattern. */ if (mcnt >= 0) { /* Go through the on_failure_jumps of the alternatives, seeing if any of the alternatives cannot match nothing. The last alternative starts with only a jump, whereas the rest start with on_failure_jump and end with a jump, e.g., here is the pattern for `a|b|c': /on_failure_jump/0/6/exactn/1/a/jump_past_alt/0/6 /on_failure_jump/0/6/exactn/1/b/jump_past_alt/0/3 /exactn/1/c So, we have to first go through the first (n-1) alternatives and then deal with the last one separately. */ /* Deal with the first (n-1) alternatives, which start with an on_failure_jump (see above) that jumps to right past a jump_past_alt. */ while ((re_opcode_t) p1[mcnt-(1+OFFSET_ADDRESS_SIZE)] == jump_past_alt) { /* `mcnt' holds how many bytes long the alternative is, including the ending `jump_past_alt' and its number. */ if (!PREFIX(alt_match_null_string_p) (p1, p1 + mcnt - (1 + OFFSET_ADDRESS_SIZE), reg_info)) return false; /* Move to right after this alternative, including the jump_past_alt. */ p1 += mcnt; /* Break if it's the beginning of an n-th alternative that doesn't begin with an on_failure_jump. */ if ((re_opcode_t) *p1 != on_failure_jump) break; /* Still have to check that it's not an n-th alternative that starts with an on_failure_jump. */ p1++; EXTRACT_NUMBER_AND_INCR (mcnt, p1); if ((re_opcode_t) p1[mcnt-(1+OFFSET_ADDRESS_SIZE)] != jump_past_alt) { /* Get to the beginning of the n-th alternative. */ p1 -= 1 + OFFSET_ADDRESS_SIZE; break; } } /* Deal with the last alternative: go back and get number of the `jump_past_alt' just before it. `mcnt' contains the length of the alternative. */ EXTRACT_NUMBER (mcnt, p1 - OFFSET_ADDRESS_SIZE); if (!PREFIX(alt_match_null_string_p) (p1, p1 + mcnt, reg_info)) return false; p1 += mcnt; /* Get past the n-th alternative. */ } /* if mcnt > 0 */ break; case stop_memory: assert (p1[1] == **p); *p = p1 + 2; return true; default: if (!PREFIX(common_op_match_null_string_p) (&p1, end, reg_info)) return false; } } /* while p1 < end */ return false; } /* group_match_null_string_p */ /* Similar to group_match_null_string_p, but doesn't deal with alternatives: It expects P to be the first byte of a single alternative and END one byte past the last. The alternative can contain groups. */ static boolean PREFIX(alt_match_null_string_p) (UCHAR_T *p, UCHAR_T *end, PREFIX(register_info_type) *reg_info) { int mcnt; UCHAR_T *p1 = p; while (p1 < end) { /* Skip over opcodes that can match nothing, and break when we get to one that can't. */ switch ((re_opcode_t) *p1) { /* It's a loop. */ case on_failure_jump: p1++; EXTRACT_NUMBER_AND_INCR (mcnt, p1); p1 += mcnt; break; default: if (!PREFIX(common_op_match_null_string_p) (&p1, end, reg_info)) return false; } } /* while p1 < end */ return true; } /* alt_match_null_string_p */ /* Deals with the ops common to group_match_null_string_p and alt_match_null_string_p. Sets P to one after the op and its arguments, if any. */ static boolean PREFIX(common_op_match_null_string_p) (UCHAR_T **p, UCHAR_T *end, PREFIX(register_info_type) *reg_info) { int mcnt; boolean ret; int reg_no; UCHAR_T *p1 = *p; switch ((re_opcode_t) *p1++) { case no_op: case begline: case endline: case begbuf: case endbuf: case wordbeg: case wordend: case wordbound: case notwordbound: #ifdef emacs case before_dot: case at_dot: case after_dot: #endif break; case start_memory: reg_no = *p1; assert (reg_no > 0 && reg_no <= MAX_REGNUM); ret = PREFIX(group_match_null_string_p) (&p1, end, reg_info); /* Have to set this here in case we're checking a group which contains a group and a back reference to it. */ if (REG_MATCH_NULL_STRING_P (reg_info[reg_no]) == MATCH_NULL_UNSET_VALUE) REG_MATCH_NULL_STRING_P (reg_info[reg_no]) = ret; if (!ret) return false; break; /* If this is an optimized succeed_n for zero times, make the jump. */ case jump: EXTRACT_NUMBER_AND_INCR (mcnt, p1); if (mcnt >= 0) p1 += mcnt; else return false; break; case succeed_n: /* Get to the number of times to succeed. */ p1 += OFFSET_ADDRESS_SIZE; EXTRACT_NUMBER_AND_INCR (mcnt, p1); if (mcnt == 0) { p1 -= 2 * OFFSET_ADDRESS_SIZE; EXTRACT_NUMBER_AND_INCR (mcnt, p1); p1 += mcnt; } else return false; break; case duplicate: if (!REG_MATCH_NULL_STRING_P (reg_info[*p1])) return false; break; case set_number_at: p1 += 2 * OFFSET_ADDRESS_SIZE; default: /* All other opcodes mean we cannot match the empty string. */ return false; } *p = p1; return true; } /* common_op_match_null_string_p */ /* Return zero if TRANSLATE[S1] and TRANSLATE[S2] are identical for LEN bytes; nonzero otherwise. */ static int PREFIX(bcmp_translate) (const CHAR_T *s1, const CHAR_T *s2, register int len, RE_TRANSLATE_TYPE translate) { register const UCHAR_T *p1 = (const UCHAR_T *) s1; register const UCHAR_T *p2 = (const UCHAR_T *) s2; while (len) { #ifdef WCHAR if (((*p1<=0xff)?translate[*p1++]:*p1++) != ((*p2<=0xff)?translate[*p2++]:*p2++)) return 1; #else /* BYTE */ if (translate[*p1++] != translate[*p2++]) return 1; #endif /* WCHAR */ len--; } return 0; } #else /* not INSIDE_RECURSION */ /* Entry points for GNU code. */ /* re_compile_pattern is the GNU regular expression compiler: it compiles PATTERN (of length SIZE) and puts the result in BUFP. Returns 0 if the pattern was valid, otherwise an error string. Assumes the `allocated' (and perhaps `buffer') and `translate' fields are set in BUFP on entry. We call regex_compile to do the actual compilation. */ const char * re_compile_pattern (const char *pattern, size_t length, struct re_pattern_buffer *bufp) { reg_errcode_t ret; /* GNU code is written to assume at least RE_NREGS registers will be set (and at least one extra will be -1). */ bufp->regs_allocated = REGS_UNALLOCATED; /* And GNU code determines whether or not to get register information by passing null for the REGS argument to re_match, etc., not by setting no_sub. */ bufp->no_sub = 0; /* Match anchors at newline. */ bufp->newline_anchor = 1; # ifdef MBS_SUPPORT if (MB_CUR_MAX != 1) ret = wcs_regex_compile (pattern, length, re_syntax_options, bufp); else # endif ret = byte_regex_compile (pattern, length, re_syntax_options, bufp); if (!ret) return NULL; return gettext (re_error_msgid[(int) ret]); } #ifdef _LIBC weak_alias (__re_compile_pattern, re_compile_pattern) #endif /* Entry points compatible with 4.2 BSD regex library. We don't define them unless specifically requested. */ #if defined _REGEX_RE_COMP || defined _LIBC /* BSD has one and only one pattern buffer. */ static struct re_pattern_buffer re_comp_buf; char * #ifdef _LIBC /* Make these definitions weak in libc, so POSIX programs can redefine these names if they don't use our functions, and still use regcomp/regexec below without link errors. */ weak_function #endif re_comp (const char *s) { reg_errcode_t ret; if (!s) { if (!re_comp_buf.buffer) return (char *) gettext ("No previous regular expression"); return 0; } if (!re_comp_buf.buffer) { re_comp_buf.buffer = (unsigned char *) malloc (200); if (re_comp_buf.buffer == NULL) return (char *) gettext (re_error_msgid[(int) REG_ESPACE]); re_comp_buf.allocated = 200; re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH); if (re_comp_buf.fastmap == NULL) return (char *) gettext (re_error_msgid[(int) REG_ESPACE]); } /* Since `re_exec' always passes NULL for the `regs' argument, we don't need to initialize the pattern buffer fields which affect it. */ /* Match anchors at newlines. */ re_comp_buf.newline_anchor = 1; # ifdef MBS_SUPPORT if (MB_CUR_MAX != 1) ret = wcs_regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf); else # endif ret = byte_regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf); if (!ret) return NULL; /* Yes, we're discarding `const' here if !HAVE_LIBINTL. */ return (char *) gettext (re_error_msgid[(int) ret]); } int #ifdef _LIBC weak_function #endif re_exec (const char *s) { const int len = strlen (s); return 0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0); } #endif /* _REGEX_RE_COMP */ /* POSIX.2 functions. Don't define these for Emacs. */ #ifndef emacs /* regcomp takes a regular expression as a string and compiles it. PREG is a regex_t *. We do not expect any fields to be initialized, since POSIX says we shouldn't. Thus, we set `buffer' to the compiled pattern; `used' to the length of the compiled pattern; `syntax' to RE_SYNTAX_POSIX_EXTENDED if the REG_EXTENDED bit in CFLAGS is set; otherwise, to RE_SYNTAX_POSIX_BASIC; `newline_anchor' to REG_NEWLINE being set in CFLAGS; `fastmap' to an allocated space for the fastmap; `fastmap_accurate' to zero; `re_nsub' to the number of subexpressions in PATTERN. PATTERN is the address of the pattern string. CFLAGS is a series of bits which affect compilation. If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we use POSIX basic syntax. If REG_NEWLINE is set, then . and [^...] don't match newline. Also, regexec will try a match beginning after every newline. If REG_ICASE is set, then we considers upper- and lowercase versions of letters to be equivalent when matching. If REG_NOSUB is set, then when PREG is passed to regexec, that routine will report only success or failure, and nothing about the registers. It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for the return codes and their meanings.) */ int regcomp (regex_t *preg, const char *pattern, int cflags) { reg_errcode_t ret; reg_syntax_t syntax = (cflags & REG_EXTENDED) ? RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC; /* regex_compile will allocate the space for the compiled pattern. */ preg->buffer = 0; preg->allocated = 0; preg->used = 0; /* Try to allocate space for the fastmap. */ preg->fastmap = (char *) malloc (1 << BYTEWIDTH); if (cflags & REG_ICASE) { int i; preg->translate = (RE_TRANSLATE_TYPE) malloc (CHAR_SET_SIZE * sizeof (*(RE_TRANSLATE_TYPE)0)); if (preg->translate == NULL) return (int) REG_ESPACE; /* Map uppercase characters to corresponding lowercase ones. */ for (i = 0; i < CHAR_SET_SIZE; i++) preg->translate[i] = ISUPPER (i) ? TOLOWER (i) : i; } else preg->translate = NULL; /* If REG_NEWLINE is set, newlines are treated differently. */ if (cflags & REG_NEWLINE) { /* REG_NEWLINE implies neither . nor [^...] match newline. */ syntax &= ~RE_DOT_NEWLINE; syntax |= RE_HAT_LISTS_NOT_NEWLINE; /* It also changes the matching behavior. */ preg->newline_anchor = 1; } else preg->newline_anchor = 0; preg->no_sub = !!(cflags & REG_NOSUB); /* POSIX says a null character in the pattern terminates it, so we can use strlen here in compiling the pattern. */ # ifdef MBS_SUPPORT if (MB_CUR_MAX != 1) ret = wcs_regex_compile (pattern, strlen (pattern), syntax, preg); else # endif ret = byte_regex_compile (pattern, strlen (pattern), syntax, preg); /* POSIX doesn't distinguish between an unmatched open-group and an unmatched close-group: both are REG_EPAREN. */ if (ret == REG_ERPAREN) ret = REG_EPAREN; if (ret == REG_NOERROR && preg->fastmap) { /* Compute the fastmap now, since regexec cannot modify the pattern buffer. */ if (re_compile_fastmap (preg) == -2) { /* Some error occurred while computing the fastmap, just forget about it. */ free (preg->fastmap); preg->fastmap = NULL; } } return (int) ret; } #ifdef _LIBC weak_alias (__regcomp, regcomp) #endif /* regexec searches for a given pattern, specified by PREG, in the string STRING. If NMATCH is zero or REG_NOSUB was set in the cflags argument to `regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at least NMATCH elements, and we set them to the offsets of the corresponding matched substrings. EFLAGS specifies `execution flags' which affect matching: if REG_NOTBOL is set, then ^ does not match at the beginning of the string; if REG_NOTEOL is set, then $ does not match at the end. We return 0 if we find a match and REG_NOMATCH if not. */ int regexec (const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags) { int ret; struct re_registers regs; regex_t private_preg; int len = strlen (string); boolean want_reg_info = !preg->no_sub && nmatch > 0; private_preg = *preg; private_preg.not_bol = !!(eflags & REG_NOTBOL); private_preg.not_eol = !!(eflags & REG_NOTEOL); /* The user has told us exactly how many registers to return information about, via `nmatch'. We have to pass that on to the matching routines. */ private_preg.regs_allocated = REGS_FIXED; if (want_reg_info) { regs.num_regs = nmatch; regs.start = TALLOC (nmatch * 2, regoff_t); if (regs.start == NULL) return (int) REG_NOMATCH; regs.end = regs.start + nmatch; } /* Perform the searching operation. */ ret = re_search (&private_preg, string, len, /* start: */ 0, /* range: */ len, want_reg_info ? ®s : (struct re_registers *) 0); /* Copy the register information to the POSIX structure. */ if (want_reg_info) { if (ret >= 0) { unsigned r; for (r = 0; r < nmatch; r++) { pmatch[r].rm_so = regs.start[r]; pmatch[r].rm_eo = regs.end[r]; } } /* If we needed the temporary register info, free the space now. */ free (regs.start); } /* We want zero return to mean success, unlike `re_search'. */ return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH; } #ifdef _LIBC weak_alias (__regexec, regexec) #endif /* Returns a message corresponding to an error code, ERRCODE, returned from either regcomp or regexec. We don't use PREG here. */ size_t regerror (int errcode, const regex_t *preg ATTRIBUTE_UNUSED, char *errbuf, size_t errbuf_size) { const char *msg; size_t msg_size; if (errcode < 0 || errcode >= (int) (sizeof (re_error_msgid) / sizeof (re_error_msgid[0]))) /* Only error codes returned by the rest of the code should be passed to this routine. If we are given anything else, or if other regex code generates an invalid error code, then the program has a bug. Dump core so we can fix it. */ abort (); msg = gettext (re_error_msgid[errcode]); msg_size = strlen (msg) + 1; /* Includes the null. */ if (errbuf_size != 0) { if (msg_size > errbuf_size) { #if defined HAVE_MEMPCPY || defined _LIBC *((char *) mempcpy (errbuf, msg, errbuf_size - 1)) = '\0'; #else memcpy (errbuf, msg, errbuf_size - 1); errbuf[errbuf_size - 1] = 0; #endif } else memcpy (errbuf, msg, msg_size); } return msg_size; } #ifdef _LIBC weak_alias (__regerror, regerror) #endif /* Free dynamically allocated space used by PREG. */ void regfree (regex_t *preg) { if (preg->buffer != NULL) free (preg->buffer); preg->buffer = NULL; preg->allocated = 0; preg->used = 0; if (preg->fastmap != NULL) free (preg->fastmap); preg->fastmap = NULL; preg->fastmap_accurate = 0; if (preg->translate != NULL) free (preg->translate); preg->translate = NULL; } #ifdef _LIBC weak_alias (__regfree, regfree) #endif #endif /* not emacs */ #endif /* not INSIDE_RECURSION */ #undef STORE_NUMBER #undef STORE_NUMBER_AND_INCR #undef EXTRACT_NUMBER #undef EXTRACT_NUMBER_AND_INCR #undef DEBUG_PRINT_COMPILED_PATTERN #undef DEBUG_PRINT_DOUBLE_STRING #undef INIT_FAIL_STACK #undef RESET_FAIL_STACK #undef DOUBLE_FAIL_STACK #undef PUSH_PATTERN_OP #undef PUSH_FAILURE_POINTER #undef PUSH_FAILURE_INT #undef PUSH_FAILURE_ELT #undef POP_FAILURE_POINTER #undef POP_FAILURE_INT #undef POP_FAILURE_ELT #undef DEBUG_PUSH #undef DEBUG_POP #undef PUSH_FAILURE_POINT #undef POP_FAILURE_POINT #undef REG_UNSET_VALUE #undef REG_UNSET #undef PATFETCH #undef PATFETCH_RAW #undef PATUNFETCH #undef TRANSLATE #undef INIT_BUF_SIZE #undef GET_BUFFER_SPACE #undef BUF_PUSH #undef BUF_PUSH_2 #undef BUF_PUSH_3 #undef STORE_JUMP #undef STORE_JUMP2 #undef INSERT_JUMP #undef INSERT_JUMP2 #undef EXTEND_BUFFER #undef GET_UNSIGNED_NUMBER #undef FREE_STACK_RETURN # undef POINTER_TO_OFFSET # undef MATCHING_IN_FRST_STRING # undef PREFETCH # undef AT_STRINGS_BEG # undef AT_STRINGS_END # undef WORDCHAR_P # undef FREE_VAR # undef FREE_VARIABLES # undef NO_HIGHEST_ACTIVE_REG # undef NO_LOWEST_ACTIVE_REG # undef CHAR_T # undef UCHAR_T # undef COMPILED_BUFFER_VAR # undef OFFSET_ADDRESS_SIZE # undef CHAR_CLASS_SIZE # undef PREFIX # undef ARG_PREFIX # undef PUT_CHAR # undef BYTE # undef WCHAR # define DEFINED_ONCE nescc-1.3.4/libiberty/rename.c000066400000000000000000000011711177770303300162220ustar00rootroot00000000000000/* rename -- rename a file This function is in the public domain. */ /* @deftypefn Supplemental int rename (const char *@var{old}, const char *@var{new}) Renames a file from @var{old} to @var{new}. If @var{new} already exists, it is removed. @end deftypefn */ #include "ansidecl.h" #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifdef HAVE_UNISTD_H #include #endif int rename (const char *zfrom, const char *zto) { if (link (zfrom, zto) < 0) { if (errno != EEXIST) return -1; if (unlink (zto) < 0 || link (zfrom, zto) < 0) return -1; } return unlink (zfrom); } nescc-1.3.4/libiberty/rindex.c000066400000000000000000000007141177770303300162460ustar00rootroot00000000000000/* Stub implementation of (obsolete) rindex(). */ /* @deftypefn Supplemental char* rindex (const char *@var{s}, int @var{c}) Returns a pointer to the last occurrence of the character @var{c} in the string @var{s}, or @code{NULL} if not found. The use of @code{rindex} is deprecated in new programs in favor of @code{strrchr}. @end deftypefn */ extern char *strrchr (const char *, int); char * rindex (const char *s, int c) { return strrchr (s, c); } nescc-1.3.4/libiberty/safe-ctype.c000066400000000000000000000241071177770303300170170ustar00rootroot00000000000000/* replacement macros. Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. Contributed by Zack Weinberg . This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* @defvr Extension HOST_CHARSET This macro indicates the basic character set and encoding used by the host: more precisely, the encoding used for character constants in preprocessor @samp{#if} statements (the C "execution character set"). It is defined by @file{safe-ctype.h}, and will be an integer constant with one of the following values: @ftable @code @item HOST_CHARSET_UNKNOWN The host character set is unknown - that is, not one of the next two possibilities. @item HOST_CHARSET_ASCII The host character set is ASCII. @item HOST_CHARSET_EBCDIC The host character set is some variant of EBCDIC. (Only one of the nineteen EBCDIC varying characters is tested; exercise caution.) @end ftable @end defvr @deffn Extension ISALPHA (@var{c}) @deffnx Extension ISALNUM (@var{c}) @deffnx Extension ISBLANK (@var{c}) @deffnx Extension ISCNTRL (@var{c}) @deffnx Extension ISDIGIT (@var{c}) @deffnx Extension ISGRAPH (@var{c}) @deffnx Extension ISLOWER (@var{c}) @deffnx Extension ISPRINT (@var{c}) @deffnx Extension ISPUNCT (@var{c}) @deffnx Extension ISSPACE (@var{c}) @deffnx Extension ISUPPER (@var{c}) @deffnx Extension ISXDIGIT (@var{c}) These twelve macros are defined by @file{safe-ctype.h}. Each has the same meaning as the corresponding macro (with name in lowercase) defined by the standard header @file{ctype.h}. For example, @code{ISALPHA} returns true for alphabetic characters and false for others. However, there are two differences between these macros and those provided by @file{ctype.h}: @itemize @bullet @item These macros are guaranteed to have well-defined behavior for all values representable by @code{signed char} and @code{unsigned char}, and for @code{EOF}. @item These macros ignore the current locale; they are true for these fixed sets of characters: @multitable {@code{XDIGIT}} {yada yada yada yada yada yada yada yada} @item @code{ALPHA} @tab @kbd{A-Za-z} @item @code{ALNUM} @tab @kbd{A-Za-z0-9} @item @code{BLANK} @tab @kbd{space tab} @item @code{CNTRL} @tab @code{!PRINT} @item @code{DIGIT} @tab @kbd{0-9} @item @code{GRAPH} @tab @code{ALNUM || PUNCT} @item @code{LOWER} @tab @kbd{a-z} @item @code{PRINT} @tab @code{GRAPH ||} @kbd{space} @item @code{PUNCT} @tab @kbd{`~!@@#$%^&*()_-=+[@{]@}\|;:'",<.>/?} @item @code{SPACE} @tab @kbd{space tab \n \r \f \v} @item @code{UPPER} @tab @kbd{A-Z} @item @code{XDIGIT} @tab @kbd{0-9A-Fa-f} @end multitable Note that, if the host character set is ASCII or a superset thereof, all these macros will return false for all values of @code{char} outside the range of 7-bit ASCII. In particular, both ISPRINT and ISCNTRL return false for characters with numeric values from 128 to 255. @end itemize @end deffn @deffn Extension ISIDNUM (@var{c}) @deffnx Extension ISIDST (@var{c}) @deffnx Extension IS_VSPACE (@var{c}) @deffnx Extension IS_NVSPACE (@var{c}) @deffnx Extension IS_SPACE_OR_NUL (@var{c}) @deffnx Extension IS_ISOBASIC (@var{c}) These six macros are defined by @file{safe-ctype.h} and provide additional character classes which are useful when doing lexical analysis of C or similar languages. They are true for the following sets of characters: @multitable {@code{SPACE_OR_NUL}} {yada yada yada yada yada yada yada yada} @item @code{IDNUM} @tab @kbd{A-Za-z0-9_} @item @code{IDST} @tab @kbd{A-Za-z_} @item @code{VSPACE} @tab @kbd{\r \n} @item @code{NVSPACE} @tab @kbd{space tab \f \v \0} @item @code{SPACE_OR_NUL} @tab @code{VSPACE || NVSPACE} @item @code{ISOBASIC} @tab @code{VSPACE || NVSPACE || PRINT} @end multitable @end deffn */ #include "ansidecl.h" #include #include /* for EOF */ #if EOF != -1 #error " requires EOF == -1" #endif /* Shorthand */ #define bl _sch_isblank #define cn _sch_iscntrl #define di _sch_isdigit #define is _sch_isidst #define lo _sch_islower #define nv _sch_isnvsp #define pn _sch_ispunct #define pr _sch_isprint #define sp _sch_isspace #define up _sch_isupper #define vs _sch_isvsp #define xd _sch_isxdigit /* Masks. */ #define L (const unsigned short) (lo|is |pr) /* lower case letter */ #define XL (const unsigned short) (lo|is|xd|pr) /* lowercase hex digit */ #define U (const unsigned short) (up|is |pr) /* upper case letter */ #define XU (const unsigned short) (up|is|xd|pr) /* uppercase hex digit */ #define D (const unsigned short) (di |xd|pr) /* decimal digit */ #define P (const unsigned short) (pn |pr) /* punctuation */ #define _ (const unsigned short) (pn|is |pr) /* underscore */ #define C (const unsigned short) ( cn) /* control character */ #define Z (const unsigned short) (nv |cn) /* NUL */ #define M (const unsigned short) (nv|sp |cn) /* cursor movement: \f \v */ #define V (const unsigned short) (vs|sp |cn) /* vertical space: \r \n */ #define T (const unsigned short) (nv|sp|bl|cn) /* tab */ #define S (const unsigned short) (nv|sp|bl|pr) /* space */ /* Are we ASCII? */ #if HOST_CHARSET == HOST_CHARSET_ASCII const unsigned short _sch_istable[256] = { Z, C, C, C, C, C, C, C, /* NUL SOH STX ETX EOT ENQ ACK BEL */ C, T, V, M, M, V, C, C, /* BS HT LF VT FF CR SO SI */ C, C, C, C, C, C, C, C, /* DLE DC1 DC2 DC3 DC4 NAK SYN ETB */ C, C, C, C, C, C, C, C, /* CAN EM SUB ESC FS GS RS US */ S, P, P, P, P, P, P, P, /* SP ! " # $ % & ' */ P, P, P, P, P, P, P, P, /* ( ) * + , - . / */ D, D, D, D, D, D, D, D, /* 0 1 2 3 4 5 6 7 */ D, D, P, P, P, P, P, P, /* 8 9 : ; < = > ? */ P, XU, XU, XU, XU, XU, XU, U, /* @ A B C D E F G */ U, U, U, U, U, U, U, U, /* H I J K L M N O */ U, U, U, U, U, U, U, U, /* P Q R S T U V W */ U, U, U, P, P, P, P, _, /* X Y Z [ \ ] ^ _ */ P, XL, XL, XL, XL, XL, XL, L, /* ` a b c d e f g */ L, L, L, L, L, L, L, L, /* h i j k l m n o */ L, L, L, L, L, L, L, L, /* p q r s t u v w */ L, L, L, P, P, P, P, C, /* x y z { | } ~ DEL */ /* high half of unsigned char is locale-specific, so all tests are false in "C" locale */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; const unsigned char _sch_tolower[256] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 91, 92, 93, 94, 95, 96, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 123,124,125,126,127, 128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143, 144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159, 160,161,162,163, 164,165,166,167, 168,169,170,171, 172,173,174,175, 176,177,178,179, 180,181,182,183, 184,185,186,187, 188,189,190,191, 192,193,194,195, 196,197,198,199, 200,201,202,203, 204,205,206,207, 208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223, 224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239, 240,241,242,243, 244,245,246,247, 248,249,250,251, 252,253,254,255, }; const unsigned char _sch_toupper[256] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 91, 92, 93, 94, 95, 96, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 123,124,125,126,127, 128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143, 144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159, 160,161,162,163, 164,165,166,167, 168,169,170,171, 172,173,174,175, 176,177,178,179, 180,181,182,183, 184,185,186,187, 188,189,190,191, 192,193,194,195, 196,197,198,199, 200,201,202,203, 204,205,206,207, 208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223, 224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239, 240,241,242,243, 244,245,246,247, 248,249,250,251, 252,253,254,255, }; #else # if HOST_CHARSET == HOST_CHARSET_EBCDIC #error "FIXME: write tables for EBCDIC" # else #error "Unrecognized host character set" # endif #endif nescc-1.3.4/libiberty/setenv.c000066400000000000000000000107521177770303300162640ustar00rootroot00000000000000/* Copyright (C) 1992, 1995, 1996, 1997, 2002 Free Software Foundation, Inc. This file based on setenv.c in the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* @deftypefn Supplemental int setenv (const char *@var{name}, const char *@var{value}, int @var{overwrite}) @deftypefnx Supplemental void unsetenv (const char *@var{name}) @code{setenv} adds @var{name} to the environment with value @var{value}. If the name was already present in the environment, the new value will be stored only if @var{overwrite} is nonzero. The companion @code{unsetenv} function removes @var{name} from the environment. This implementation is not safe for multithreaded code. @end deftypefn */ #if HAVE_CONFIG_H # include #endif #define setenv libiberty_setenv #define unsetenv libiberty_unsetenv #include "ansidecl.h" #include /* For `size_t' */ #include /* For `NULL' */ #include #if !defined(errno) && !defined(HAVE_ERRNO_DECL) extern int errno; #endif #define __set_errno(ev) ((errno) = (ev)) #if HAVE_STDLIB_H # include #endif #if HAVE_STRING_H # include #endif #if HAVE_UNISTD_H # include #endif #define __environ environ #ifndef HAVE_ENVIRON_DECL extern char **environ; #endif #undef setenv #undef unsetenv /* LOCK and UNLOCK are defined as no-ops. This makes the libiberty * implementation MT-Unsafe. */ #define LOCK #define UNLOCK /* Below this point, it's verbatim code from the glibc-2.0 implementation */ /* If this variable is not a null pointer we allocated the current environment. */ static char **last_environ; int setenv (const char *name, const char *value, int replace) { register char **ep = 0; register size_t size; const size_t namelen = strlen (name); const size_t vallen = strlen (value) + 1; LOCK; size = 0; if (__environ != NULL) { for (ep = __environ; *ep != NULL; ++ep) if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=') break; else ++size; } if (__environ == NULL || *ep == NULL) { char **new_environ; if (__environ == last_environ && __environ != NULL) /* We allocated this space; we can extend it. */ new_environ = (char **) realloc (last_environ, (size + 2) * sizeof (char *)); else new_environ = (char **) malloc ((size + 2) * sizeof (char *)); if (new_environ == NULL) { UNLOCK; return -1; } new_environ[size] = (char *) malloc (namelen + 1 + vallen); if (new_environ[size] == NULL) { free ((char *) new_environ); __set_errno (ENOMEM); UNLOCK; return -1; } if (__environ != last_environ) memcpy ((char *) new_environ, (char *) __environ, size * sizeof (char *)); memcpy (new_environ[size], name, namelen); new_environ[size][namelen] = '='; memcpy (&new_environ[size][namelen + 1], value, vallen); new_environ[size + 1] = NULL; last_environ = __environ = new_environ; } else if (replace) { size_t len = strlen (*ep); if (len + 1 < namelen + 1 + vallen) { /* The existing string is too short; malloc a new one. */ char *new_string = (char *) malloc (namelen + 1 + vallen); if (new_string == NULL) { UNLOCK; return -1; } *ep = new_string; } memcpy (*ep, name, namelen); (*ep)[namelen] = '='; memcpy (&(*ep)[namelen + 1], value, vallen); } UNLOCK; return 0; } void unsetenv (const char *name) { const size_t len = strlen (name); char **ep; LOCK; for (ep = __environ; *ep; ++ep) if (!strncmp (*ep, name, len) && (*ep)[len] == '=') { /* Found it. Remove this pointer by moving later ones back. */ char **dp = ep; do dp[0] = dp[1]; while (*dp++); /* Continue the loop in case NAME appears again. */ } UNLOCK; } nescc-1.3.4/libiberty/sigsetmask.c000066400000000000000000000016341177770303300171310ustar00rootroot00000000000000/* Version of sigsetmask.c Written by Steve Chamberlain (sac@cygnus.com). Contributed by Cygnus Support. This file is in the public doamin. */ /* @deftypefn Supplemental int sigsetmask (int @var{set}) Sets the signal mask to the one provided in @var{set} and returns the old mask (which, for libiberty's implementation, will always be the value @code{1}). @end deftypefn */ #define _POSIX_SOURCE #include /* Including seems to be needed by ISC. */ #include #include extern void abort (void) ATTRIBUTE_NORETURN; #ifdef SIG_SETMASK int sigsetmask (int set) { sigset_t new_sig; sigset_t old_sig; sigemptyset (&new_sig); if (set != 0) { abort(); /* FIXME, we don't know how to translate old mask to new */ } sigprocmask(SIG_SETMASK, &new_sig, &old_sig); return 1; /* FIXME, we always return 1 as old value. */ } #endif nescc-1.3.4/libiberty/snprintf.c000066400000000000000000000042111177770303300166140ustar00rootroot00000000000000/* Implement the snprintf function. Copyright (C) 2003 Free Software Foundation, Inc. Written by Kaveh R. Ghazi . This file is part of the libiberty library. This library 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. This library 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 GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. As a special exception, if you link this library with files compiled with a GNU compiler to produce an executable, this does not cause the resulting executable to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ /* @deftypefn Supplemental int snprintf (char *@var{buf}, size_t @var{n}, const char *@var{format}, ...) This function is similar to sprintf, but it will print at most @var{n} characters. On error the return value is -1, otherwise it returns the number of characters that would have been printed had @var{n} been sufficiently large, regardless of the actual value of @var{n}. Note some pre-C99 system libraries do not implement this correctly so users cannot generally rely on the return value if the system version of this function is used. @end deftypefn */ #include "ansidecl.h" #include #include int vsnprintf (char *, size_t, const char *, va_list); int snprintf (char *s, size_t n, const char *format, ...) { int result; VA_OPEN (ap, format); VA_FIXEDARG (ap, char *, s); VA_FIXEDARG (ap, size_t, n); VA_FIXEDARG (ap, const char *, format); result = vsnprintf (s, n, format, ap); VA_CLOSE (ap); return result; } nescc-1.3.4/libiberty/sort.c000066400000000000000000000115061177770303300157450ustar00rootroot00000000000000/* Sorting algorithms. Copyright (C) 2000 Free Software Foundation, Inc. Contributed by Mark Mitchell . This file is part of GNU CC. GNU CC 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. GNU CC 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 GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "libiberty.h" #include "sort.h" #ifdef HAVE_LIMITS_H #include #endif #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifndef UCHAR_MAX #define UCHAR_MAX ((unsigned char)(-1)) #endif /* POINTERS and WORK are both arrays of N pointers. When this function returns POINTERS will be sorted in ascending order. */ void sort_pointers (size_t n, void **pointers, void **work) { /* The type of a single digit. This can be any unsigned integral type. When changing this, DIGIT_MAX should be changed as well. */ typedef unsigned char digit_t; /* The maximum value a single digit can have. */ #define DIGIT_MAX (UCHAR_MAX + 1) /* The Ith entry is the number of elements in *POINTERSP that have I in the digit on which we are currently sorting. */ unsigned int count[DIGIT_MAX]; /* Nonzero if we are running on a big-endian machine. */ int big_endian_p; size_t i; size_t j; /* The algorithm used here is radix sort which takes time linear in the number of elements in the array. */ /* The algorithm here depends on being able to swap the two arrays an even number of times. */ if ((sizeof (void *) / sizeof (digit_t)) % 2 != 0) abort (); /* Figure out the endianness of the machine. */ for (i = 0, j = 0; i < sizeof (size_t); ++i) { j *= (UCHAR_MAX + 1); j += i; } big_endian_p = (((char *)&j)[0] == 0); /* Move through the pointer values from least significant to most significant digits. */ for (i = 0; i < sizeof (void *) / sizeof (digit_t); ++i) { digit_t *digit; digit_t *bias; digit_t *top; unsigned int *countp; void **pointerp; /* The offset from the start of the pointer will depend on the endianness of the machine. */ if (big_endian_p) j = sizeof (void *) / sizeof (digit_t) - i; else j = i; /* Now, perform a stable sort on this digit. We use counting sort. */ memset (count, 0, DIGIT_MAX * sizeof (unsigned int)); /* Compute the address of the appropriate digit in the first and one-past-the-end elements of the array. On a little-endian machine, the least-significant digit is closest to the front. */ bias = ((digit_t *) pointers) + j; top = ((digit_t *) (pointers + n)) + j; /* Count how many there are of each value. At the end of this loop, COUNT[K] will contain the number of pointers whose Ith digit is K. */ for (digit = bias; digit < top; digit += sizeof (void *) / sizeof (digit_t)) ++count[*digit]; /* Now, make COUNT[K] contain the number of pointers whose Ith digit is less than or equal to K. */ for (countp = count + 1; countp < count + DIGIT_MAX; ++countp) *countp += countp[-1]; /* Now, drop the pointers into their correct locations. */ for (pointerp = pointers + n - 1; pointerp >= pointers; --pointerp) work[--count[((digit_t *) pointerp)[j]]] = *pointerp; /* Swap WORK and POINTERS so that POINTERS contains the sorted array. */ pointerp = pointers; pointers = work; work = pointerp; } } /* Everything below here is a unit test for the routines in this file. */ #ifdef UNIT_TEST #include void *xmalloc (size_t n) { return malloc (n); } int main (int argc, char **argv) { int k; int result; size_t i; void **pointers; void **work; if (argc > 1) k = atoi (argv[1]); else k = 10; pointers = XNEWVEC (void*, k); work = XNEWVEC (void*, k); for (i = 0; i < k; ++i) { pointers[i] = (void *) random (); printf ("%x\n", pointers[i]); } sort_pointers (k, pointers, work); printf ("\nSorted\n\n"); result = 0; for (i = 0; i < k; ++i) { printf ("%x\n", pointers[i]); if (i > 0 && (char*) pointers[i] < (char*) pointers[i - 1]) result = 1; } free (pointers); free (work); return result; } #endif nescc-1.3.4/libiberty/spaces.c000066400000000000000000000034211177770303300162310ustar00rootroot00000000000000/* Allocate memory region filled with spaces. Copyright (C) 1991 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* @deftypefn Extension char* spaces (int @var{count}) Returns a pointer to a memory region filled with the specified number of spaces and null terminated. The returned pointer is valid until at least the next call. @end deftypefn */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "ansidecl.h" #include "libiberty.h" #if VMS #include #include #else /* For systems with larger pointers than ints, these must be declared. */ extern PTR malloc (size_t); extern void free (PTR); #endif const char * spaces (int count) { register char *t; static char *buf; static int maxsize; if (count > maxsize) { if (buf) { free (buf); } buf = (char *) malloc (count + 1); if (buf == (char *) 0) return 0; for (t = buf + count ; t != buf ; ) { *--t = ' '; } maxsize = count; buf[count] = '\0'; } return (const char *) (buf + maxsize - count); } nescc-1.3.4/libiberty/splay-tree.c000066400000000000000000000316651177770303300170530ustar00rootroot00000000000000/* A splay-tree datatype. Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Mark Mitchell (mark@markmitchell.com). This file is part of GNU CC. GNU CC 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. GNU CC 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 GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* For an easily readable description of splay-trees, see: Lewis, Harry R. and Denenberg, Larry. Data Structures and Their Algorithms. Harper-Collins, Inc. 1991. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_STDLIB_H #include #endif #include #include "libiberty.h" #include "splay-tree.h" static void splay_tree_delete_helper (splay_tree, splay_tree_node); static inline void rotate_left (splay_tree_node *, splay_tree_node, splay_tree_node); static inline void rotate_right (splay_tree_node *, splay_tree_node, splay_tree_node); static void splay_tree_splay (splay_tree, splay_tree_key); static int splay_tree_foreach_helper (splay_tree, splay_tree_node, splay_tree_foreach_fn, void*); /* Deallocate NODE (a member of SP), and all its sub-trees. */ static void splay_tree_delete_helper (splay_tree sp, splay_tree_node node) { splay_tree_node pending = 0; splay_tree_node active = 0; if (!node) return; #define KDEL(x) if (sp->delete_key) (*sp->delete_key)(x); #define VDEL(x) if (sp->delete_value) (*sp->delete_value)(x); KDEL (node->key); VDEL (node->value); /* We use the "key" field to hold the "next" pointer. */ node->key = (splay_tree_key)pending; pending = (splay_tree_node)node; /* Now, keep processing the pending list until there aren't any more. This is a little more complicated than just recursing, but it doesn't toast the stack for large trees. */ while (pending) { active = pending; pending = 0; while (active) { splay_tree_node temp; /* active points to a node which has its key and value deallocated, we just need to process left and right. */ if (active->left) { KDEL (active->left->key); VDEL (active->left->value); active->left->key = (splay_tree_key)pending; pending = (splay_tree_node)(active->left); } if (active->right) { KDEL (active->right->key); VDEL (active->right->value); active->right->key = (splay_tree_key)pending; pending = (splay_tree_node)(active->right); } temp = active; active = (splay_tree_node)(temp->key); (*sp->deallocate) ((char*) temp, sp->allocate_data); } } #undef KDEL #undef VDEL } /* Rotate the edge joining the left child N with its parent P. PP is the grandparents pointer to P. */ static inline void rotate_left (splay_tree_node *pp, splay_tree_node p, splay_tree_node n) { splay_tree_node tmp; tmp = n->right; n->right = p; p->left = tmp; *pp = n; } /* Rotate the edge joining the right child N with its parent P. PP is the grandparents pointer to P. */ static inline void rotate_right (splay_tree_node *pp, splay_tree_node p, splay_tree_node n) { splay_tree_node tmp; tmp = n->left; n->left = p; p->right = tmp; *pp = n; } /* Bottom up splay of key. */ static void splay_tree_splay (splay_tree sp, splay_tree_key key) { if (sp->root == 0) return; do { int cmp1, cmp2; splay_tree_node n, c; n = sp->root; cmp1 = (*sp->comp) (key, n->key); /* Found. */ if (cmp1 == 0) return; /* Left or right? If no child, then we're done. */ if (cmp1 < 0) c = n->left; else c = n->right; if (!c) return; /* Next one left or right? If found or no child, we're done after one rotation. */ cmp2 = (*sp->comp) (key, c->key); if (cmp2 == 0 || (cmp2 < 0 && !c->left) || (cmp2 > 0 && !c->right)) { if (cmp1 < 0) rotate_left (&sp->root, n, c); else rotate_right (&sp->root, n, c); return; } /* Now we have the four cases of double-rotation. */ if (cmp1 < 0 && cmp2 < 0) { rotate_left (&n->left, c, c->left); rotate_left (&sp->root, n, n->left); } else if (cmp1 > 0 && cmp2 > 0) { rotate_right (&n->right, c, c->right); rotate_right (&sp->root, n, n->right); } else if (cmp1 < 0 && cmp2 > 0) { rotate_right (&n->left, c, c->right); rotate_left (&sp->root, n, n->left); } else if (cmp1 > 0 && cmp2 < 0) { rotate_left (&n->right, c, c->left); rotate_right (&sp->root, n, n->right); } } while (1); } /* Call FN, passing it the DATA, for every node below NODE, all of which are from SP, following an in-order traversal. If FN every returns a non-zero value, the iteration ceases immediately, and the value is returned. Otherwise, this function returns 0. */ static int splay_tree_foreach_helper (splay_tree sp, splay_tree_node node, splay_tree_foreach_fn fn, void *data) { int val; if (!node) return 0; val = splay_tree_foreach_helper (sp, node->left, fn, data); if (val) return val; val = (*fn)(node, data); if (val) return val; return splay_tree_foreach_helper (sp, node->right, fn, data); } /* An allocator and deallocator based on xmalloc. */ static void * splay_tree_xmalloc_allocate (int size, void *data ATTRIBUTE_UNUSED) { return (void *) xmalloc (size); } static void splay_tree_xmalloc_deallocate (void *object, void *data ATTRIBUTE_UNUSED) { free (object); } /* Allocate a new splay tree, using COMPARE_FN to compare nodes, DELETE_KEY_FN to deallocate keys, and DELETE_VALUE_FN to deallocate values. Use xmalloc to allocate the splay tree structure, and any nodes added. */ splay_tree splay_tree_new (splay_tree_compare_fn compare_fn, splay_tree_delete_key_fn delete_key_fn, splay_tree_delete_value_fn delete_value_fn) { return (splay_tree_new_with_allocator (compare_fn, delete_key_fn, delete_value_fn, splay_tree_xmalloc_allocate, splay_tree_xmalloc_deallocate, 0)); } /* Allocate a new splay tree, using COMPARE_FN to compare nodes, DELETE_KEY_FN to deallocate keys, and DELETE_VALUE_FN to deallocate values. */ splay_tree splay_tree_new_with_allocator (splay_tree_compare_fn compare_fn, splay_tree_delete_key_fn delete_key_fn, splay_tree_delete_value_fn delete_value_fn, splay_tree_allocate_fn allocate_fn, splay_tree_deallocate_fn deallocate_fn, void *allocate_data) { splay_tree sp = (splay_tree) (*allocate_fn) (sizeof (struct splay_tree_s), allocate_data); sp->root = 0; sp->comp = compare_fn; sp->delete_key = delete_key_fn; sp->delete_value = delete_value_fn; sp->allocate = allocate_fn; sp->deallocate = deallocate_fn; sp->allocate_data = allocate_data; return sp; } /* Deallocate SP. */ void splay_tree_delete (splay_tree sp) { splay_tree_delete_helper (sp, sp->root); (*sp->deallocate) ((char*) sp, sp->allocate_data); } /* Insert a new node (associating KEY with DATA) into SP. If a previous node with the indicated KEY exists, its data is replaced with the new value. Returns the new node. */ splay_tree_node splay_tree_insert (splay_tree sp, splay_tree_key key, splay_tree_value value) { int comparison = 0; splay_tree_splay (sp, key); if (sp->root) comparison = (*sp->comp)(sp->root->key, key); if (sp->root && comparison == 0) { /* If the root of the tree already has the indicated KEY, just replace the value with VALUE. */ if (sp->delete_value) (*sp->delete_value)(sp->root->value); sp->root->value = value; } else { /* Create a new node, and insert it at the root. */ splay_tree_node node; node = ((splay_tree_node) (*sp->allocate) (sizeof (struct splay_tree_node_s), sp->allocate_data)); node->key = key; node->value = value; if (!sp->root) node->left = node->right = 0; else if (comparison < 0) { node->left = sp->root; node->right = node->left->right; node->left->right = 0; } else { node->right = sp->root; node->left = node->right->left; node->right->left = 0; } sp->root = node; } return sp->root; } /* Remove KEY from SP. It is not an error if it did not exist. */ void splay_tree_remove (splay_tree sp, splay_tree_key key) { splay_tree_splay (sp, key); if (sp->root && (*sp->comp) (sp->root->key, key) == 0) { splay_tree_node left, right; left = sp->root->left; right = sp->root->right; /* Delete the root node itself. */ if (sp->delete_value) (*sp->delete_value) (sp->root->value); (*sp->deallocate) (sp->root, sp->allocate_data); /* One of the children is now the root. Doesn't matter much which, so long as we preserve the properties of the tree. */ if (left) { sp->root = left; /* If there was a right child as well, hang it off the right-most leaf of the left child. */ if (right) { while (left->right) left = left->right; left->right = right; } } else sp->root = right; } } /* Lookup KEY in SP, returning VALUE if present, and NULL otherwise. */ splay_tree_node splay_tree_lookup (splay_tree sp, splay_tree_key key) { splay_tree_splay (sp, key); if (sp->root && (*sp->comp)(sp->root->key, key) == 0) return sp->root; else return 0; } /* Return the node in SP with the greatest key. */ splay_tree_node splay_tree_max (splay_tree sp) { splay_tree_node n = sp->root; if (!n) return NULL; while (n->right) n = n->right; return n; } /* Return the node in SP with the smallest key. */ splay_tree_node splay_tree_min (splay_tree sp) { splay_tree_node n = sp->root; if (!n) return NULL; while (n->left) n = n->left; return n; } /* Return the immediate predecessor KEY, or NULL if there is no predecessor. KEY need not be present in the tree. */ splay_tree_node splay_tree_predecessor (splay_tree sp, splay_tree_key key) { int comparison; splay_tree_node node; /* If the tree is empty, there is certainly no predecessor. */ if (!sp->root) return NULL; /* Splay the tree around KEY. That will leave either the KEY itself, its predecessor, or its successor at the root. */ splay_tree_splay (sp, key); comparison = (*sp->comp)(sp->root->key, key); /* If the predecessor is at the root, just return it. */ if (comparison < 0) return sp->root; /* Otherwise, find the rightmost element of the left subtree. */ node = sp->root->left; if (node) while (node->right) node = node->right; return node; } /* Return the immediate successor KEY, or NULL if there is no successor. KEY need not be present in the tree. */ splay_tree_node splay_tree_successor (splay_tree sp, splay_tree_key key) { int comparison; splay_tree_node node; /* If the tree is empty, there is certainly no successor. */ if (!sp->root) return NULL; /* Splay the tree around KEY. That will leave either the KEY itself, its predecessor, or its successor at the root. */ splay_tree_splay (sp, key); comparison = (*sp->comp)(sp->root->key, key); /* If the successor is at the root, just return it. */ if (comparison > 0) return sp->root; /* Otherwise, find the leftmost element of the right subtree. */ node = sp->root->right; if (node) while (node->left) node = node->left; return node; } /* Call FN, passing it the DATA, for every node in SP, following an in-order traversal. If FN every returns a non-zero value, the iteration ceases immediately, and the value is returned. Otherwise, this function returns 0. */ int splay_tree_foreach (splay_tree sp, splay_tree_foreach_fn fn, void *data) { return splay_tree_foreach_helper (sp, sp->root, fn, data); } /* Splay-tree comparison function, treating the keys as ints. */ int splay_tree_compare_ints (splay_tree_key k1, splay_tree_key k2) { if ((int) k1 < (int) k2) return -1; else if ((int) k1 > (int) k2) return 1; else return 0; } /* Splay-tree comparison function, treating the keys as pointers. */ int splay_tree_compare_pointers (splay_tree_key k1, splay_tree_key k2) { if ((char*) k1 < (char*) k2) return -1; else if ((char*) k1 > (char*) k2) return 1; else return 0; } nescc-1.3.4/libiberty/stpcpy.c000066400000000000000000000025401177770303300162760ustar00rootroot00000000000000/* Implement the stpcpy function. Copyright (C) 2003 Free Software Foundation, Inc. Written by Kaveh R. Ghazi . This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* @deftypefn Supplemental char* stpcpy (char *@var{dst}, const char *@var{src}) Copies the string @var{src} into @var{dst}. Returns a pointer to @var{dst} + strlen(@var{src}). @end deftypefn */ #include #include extern size_t strlen (const char *); extern PTR memcpy (PTR, const PTR, size_t); char * stpcpy (char *dst, const char *src) { const size_t len = strlen (src); return (char *) memcpy (dst, src, len + 1) + len; } nescc-1.3.4/libiberty/stpncpy.c000066400000000000000000000030201177770303300164460ustar00rootroot00000000000000/* Implement the stpncpy function. Copyright (C) 2003 Free Software Foundation, Inc. Written by Kaveh R. Ghazi . This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* @deftypefn Supplemental char* stpncpy (char *@var{dst}, const char *@var{src}, size_t @var{len}) Copies the string @var{src} into @var{dst}, copying exactly @var{len} and padding with zeros if necessary. If @var{len} < strlen(@var{src}) then return @var{dst} + @var{len}, otherwise returns @var{dst} + strlen(@var{src}). @end deftypefn */ #include #include extern size_t strlen (const char *); extern char *strncpy (char *, const char *, size_t); char * stpncpy (char *dst, const char *src, size_t len) { size_t n = strlen (src); if (n > len) n = len; return strncpy (dst, src, len) + n; } nescc-1.3.4/libiberty/strcasecmp.c000066400000000000000000000102371177770303300171220ustar00rootroot00000000000000/* * Copyright (c) 1987 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that this notice is preserved and that due credit is given * to the University of California at Berkeley. The name of the University * may not be used to endorse or promote products derived from this * software without specific written prior permission. This software * is provided ``as is'' without express or implied warranty. */ /* @deftypefn Supplemental int strcasecmp (const char *@var{s1}, const char *@var{s2}) A case-insensitive @code{strcmp}. @end deftypefn */ #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)strcasecmp.c 5.5 (Berkeley) 11/24/87"; #endif /* LIBC_SCCS and not lint */ #include #include /* * This array is designed for mapping upper and lower case letter * together for a case independent comparison. The mappings are * based upon ascii character sequences. */ typedef unsigned char uc; static const unsigned char charmap[] = { (uc)'\000',(uc)'\001',(uc)'\002',(uc)'\003',(uc)'\004',(uc)'\005',(uc)'\006',(uc)'\007', (uc)'\010',(uc)'\011',(uc)'\012',(uc)'\013',(uc)'\014',(uc)'\015',(uc)'\016',(uc)'\017', (uc)'\020',(uc)'\021',(uc)'\022',(uc)'\023',(uc)'\024',(uc)'\025',(uc)'\026',(uc)'\027', (uc)'\030',(uc)'\031',(uc)'\032',(uc)'\033',(uc)'\034',(uc)'\035',(uc)'\036',(uc)'\037', (uc)'\040',(uc)'\041',(uc)'\042',(uc)'\043',(uc)'\044',(uc)'\045',(uc)'\046',(uc)'\047', (uc)'\050',(uc)'\051',(uc)'\052',(uc)'\053',(uc)'\054',(uc)'\055',(uc)'\056',(uc)'\057', (uc)'\060',(uc)'\061',(uc)'\062',(uc)'\063',(uc)'\064',(uc)'\065',(uc)'\066',(uc)'\067', (uc)'\070',(uc)'\071',(uc)'\072',(uc)'\073',(uc)'\074',(uc)'\075',(uc)'\076',(uc)'\077', (uc)'\100',(uc)'\141',(uc)'\142',(uc)'\143',(uc)'\144',(uc)'\145',(uc)'\146',(uc)'\147', (uc)'\150',(uc)'\151',(uc)'\152',(uc)'\153',(uc)'\154',(uc)'\155',(uc)'\156',(uc)'\157', (uc)'\160',(uc)'\161',(uc)'\162',(uc)'\163',(uc)'\164',(uc)'\165',(uc)'\166',(uc)'\167', (uc)'\170',(uc)'\171',(uc)'\172',(uc)'\133',(uc)'\134',(uc)'\135',(uc)'\136',(uc)'\137', (uc)'\140',(uc)'\141',(uc)'\142',(uc)'\143',(uc)'\144',(uc)'\145',(uc)'\146',(uc)'\147', (uc)'\150',(uc)'\151',(uc)'\152',(uc)'\153',(uc)'\154',(uc)'\155',(uc)'\156',(uc)'\157', (uc)'\160',(uc)'\161',(uc)'\162',(uc)'\163',(uc)'\164',(uc)'\165',(uc)'\166',(uc)'\167', (uc)'\170',(uc)'\171',(uc)'\172',(uc)'\173',(uc)'\174',(uc)'\175',(uc)'\176',(uc)'\177', (uc)'\200',(uc)'\201',(uc)'\202',(uc)'\203',(uc)'\204',(uc)'\205',(uc)'\206',(uc)'\207', (uc)'\210',(uc)'\211',(uc)'\212',(uc)'\213',(uc)'\214',(uc)'\215',(uc)'\216',(uc)'\217', (uc)'\220',(uc)'\221',(uc)'\222',(uc)'\223',(uc)'\224',(uc)'\225',(uc)'\226',(uc)'\227', (uc)'\230',(uc)'\231',(uc)'\232',(uc)'\233',(uc)'\234',(uc)'\235',(uc)'\236',(uc)'\237', (uc)'\240',(uc)'\241',(uc)'\242',(uc)'\243',(uc)'\244',(uc)'\245',(uc)'\246',(uc)'\247', (uc)'\250',(uc)'\251',(uc)'\252',(uc)'\253',(uc)'\254',(uc)'\255',(uc)'\256',(uc)'\257', (uc)'\260',(uc)'\261',(uc)'\262',(uc)'\263',(uc)'\264',(uc)'\265',(uc)'\266',(uc)'\267', (uc)'\270',(uc)'\271',(uc)'\272',(uc)'\273',(uc)'\274',(uc)'\275',(uc)'\276',(uc)'\277', (uc)'\300',(uc)'\341',(uc)'\342',(uc)'\343',(uc)'\344',(uc)'\345',(uc)'\346',(uc)'\347', (uc)'\350',(uc)'\351',(uc)'\352',(uc)'\353',(uc)'\354',(uc)'\355',(uc)'\356',(uc)'\357', (uc)'\360',(uc)'\361',(uc)'\362',(uc)'\363',(uc)'\364',(uc)'\365',(uc)'\366',(uc)'\367', (uc)'\370',(uc)'\371',(uc)'\372',(uc)'\333',(uc)'\334',(uc)'\335',(uc)'\336',(uc)'\337', (uc)'\340',(uc)'\341',(uc)'\342',(uc)'\343',(uc)'\344',(uc)'\345',(uc)'\346',(uc)'\347', (uc)'\350',(uc)'\351',(uc)'\352',(uc)'\353',(uc)'\354',(uc)'\355',(uc)'\356',(uc)'\357', (uc)'\360',(uc)'\361',(uc)'\362',(uc)'\363',(uc)'\364',(uc)'\365',(uc)'\366',(uc)'\367', (uc)'\370',(uc)'\371',(uc)'\372',(uc)'\373',(uc)'\374',(uc)'\375',(uc)'\376',(uc)'\377', }; int strcasecmp(const char *s1, const char *s2) { register unsigned char u1, u2; for (;;) { u1 = (unsigned char) *s1++; u2 = (unsigned char) *s2++; if (charmap[u1] != charmap[u2]) { return charmap[u1] - charmap[u2]; } if (u1 == '\0') { return 0; } } } nescc-1.3.4/libiberty/strchr.c000066400000000000000000000010201177770303300162510ustar00rootroot00000000000000/* Portable version of strchr() This function is in the public domain. */ /* @deftypefn Supplemental char* strchr (const char *@var{s}, int @var{c}) Returns a pointer to the first occurrence of the character @var{c} in the string @var{s}, or @code{NULL} if not found. If @var{c} is itself the null character, the results are undefined. @end deftypefn */ #include char * strchr (register const char *s, int c) { do { if (*s == c) { return (char*)s; } } while (*s++); return (0); } nescc-1.3.4/libiberty/strdup.c000066400000000000000000000010621177770303300162730ustar00rootroot00000000000000/* @deftypefn Supplemental char* strdup (const char *@var{s}) Returns a pointer to a copy of @var{s} in memory obtained from @code{malloc}, or @code{NULL} if insufficient memory was available. @end deftypefn */ #include #include extern size_t strlen (const char*); extern PTR malloc (size_t); extern PTR memcpy (PTR, const PTR, size_t); char * strdup(const char *s) { size_t len = strlen (s) + 1; char *result = (char*) malloc (len); if (result == (char*) 0) return (char*) 0; return (char*) memcpy (result, s, len); } nescc-1.3.4/libiberty/strerror.c000066400000000000000000000514331177770303300166430ustar00rootroot00000000000000/* Extended support for using errno values. Written by Fred Fish. fnf@cygnus.com This file is in the public domain. --Per Bothner. */ #include "config.h" #ifdef HAVE_SYS_ERRLIST /* Note that errno.h (not sure what OS) or stdio.h (BSD 4.4, at least) might declare sys_errlist in a way that the compiler might consider incompatible with our later declaration, perhaps by using const attributes. So we hide the declaration in errno.h (if any) using a macro. */ #define sys_nerr sys_nerr__ #define sys_errlist sys_errlist__ #endif #include "ansidecl.h" #include "libiberty.h" #include #include #ifdef HAVE_SYS_ERRLIST #undef sys_nerr #undef sys_errlist #endif /* Routines imported from standard C runtime libraries. */ #ifdef HAVE_STDLIB_H #include #else extern PTR malloc (); #endif #ifdef HAVE_STRING_H #include #else extern PTR memset (); #endif #ifndef MAX # define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif static void init_error_tables (void); /* Translation table for errno values. See intro(2) in most UNIX systems Programmers Reference Manuals. Note that this table is generally only accessed when it is used at runtime to initialize errno name and message tables that are indexed by errno value. Not all of these errnos will exist on all systems. This table is the only thing that should have to be updated as new error numbers are introduced. It's sort of ugly, but at least its portable. */ struct error_info { const int value; /* The numeric value from */ const char *const name; /* The equivalent symbolic value */ #ifndef HAVE_SYS_ERRLIST const char *const msg; /* Short message about this value */ #endif }; #ifndef HAVE_SYS_ERRLIST # define ENTRY(value, name, msg) {value, name, msg} #else # define ENTRY(value, name, msg) {value, name} #endif static const struct error_info error_table[] = { #if defined (EPERM) ENTRY(EPERM, "EPERM", "Not owner"), #endif #if defined (ENOENT) ENTRY(ENOENT, "ENOENT", "No such file or directory"), #endif #if defined (ESRCH) ENTRY(ESRCH, "ESRCH", "No such process"), #endif #if defined (EINTR) ENTRY(EINTR, "EINTR", "Interrupted system call"), #endif #if defined (EIO) ENTRY(EIO, "EIO", "I/O error"), #endif #if defined (ENXIO) ENTRY(ENXIO, "ENXIO", "No such device or address"), #endif #if defined (E2BIG) ENTRY(E2BIG, "E2BIG", "Arg list too long"), #endif #if defined (ENOEXEC) ENTRY(ENOEXEC, "ENOEXEC", "Exec format error"), #endif #if defined (EBADF) ENTRY(EBADF, "EBADF", "Bad file number"), #endif #if defined (ECHILD) ENTRY(ECHILD, "ECHILD", "No child processes"), #endif #if defined (EWOULDBLOCK) /* Put before EAGAIN, sometimes aliased */ ENTRY(EWOULDBLOCK, "EWOULDBLOCK", "Operation would block"), #endif #if defined (EAGAIN) ENTRY(EAGAIN, "EAGAIN", "No more processes"), #endif #if defined (ENOMEM) ENTRY(ENOMEM, "ENOMEM", "Not enough space"), #endif #if defined (EACCES) ENTRY(EACCES, "EACCES", "Permission denied"), #endif #if defined (EFAULT) ENTRY(EFAULT, "EFAULT", "Bad address"), #endif #if defined (ENOTBLK) ENTRY(ENOTBLK, "ENOTBLK", "Block device required"), #endif #if defined (EBUSY) ENTRY(EBUSY, "EBUSY", "Device busy"), #endif #if defined (EEXIST) ENTRY(EEXIST, "EEXIST", "File exists"), #endif #if defined (EXDEV) ENTRY(EXDEV, "EXDEV", "Cross-device link"), #endif #if defined (ENODEV) ENTRY(ENODEV, "ENODEV", "No such device"), #endif #if defined (ENOTDIR) ENTRY(ENOTDIR, "ENOTDIR", "Not a directory"), #endif #if defined (EISDIR) ENTRY(EISDIR, "EISDIR", "Is a directory"), #endif #if defined (EINVAL) ENTRY(EINVAL, "EINVAL", "Invalid argument"), #endif #if defined (ENFILE) ENTRY(ENFILE, "ENFILE", "File table overflow"), #endif #if defined (EMFILE) ENTRY(EMFILE, "EMFILE", "Too many open files"), #endif #if defined (ENOTTY) ENTRY(ENOTTY, "ENOTTY", "Not a typewriter"), #endif #if defined (ETXTBSY) ENTRY(ETXTBSY, "ETXTBSY", "Text file busy"), #endif #if defined (EFBIG) ENTRY(EFBIG, "EFBIG", "File too large"), #endif #if defined (ENOSPC) ENTRY(ENOSPC, "ENOSPC", "No space left on device"), #endif #if defined (ESPIPE) ENTRY(ESPIPE, "ESPIPE", "Illegal seek"), #endif #if defined (EROFS) ENTRY(EROFS, "EROFS", "Read-only file system"), #endif #if defined (EMLINK) ENTRY(EMLINK, "EMLINK", "Too many links"), #endif #if defined (EPIPE) ENTRY(EPIPE, "EPIPE", "Broken pipe"), #endif #if defined (EDOM) ENTRY(EDOM, "EDOM", "Math argument out of domain of func"), #endif #if defined (ERANGE) ENTRY(ERANGE, "ERANGE", "Math result not representable"), #endif #if defined (ENOMSG) ENTRY(ENOMSG, "ENOMSG", "No message of desired type"), #endif #if defined (EIDRM) ENTRY(EIDRM, "EIDRM", "Identifier removed"), #endif #if defined (ECHRNG) ENTRY(ECHRNG, "ECHRNG", "Channel number out of range"), #endif #if defined (EL2NSYNC) ENTRY(EL2NSYNC, "EL2NSYNC", "Level 2 not synchronized"), #endif #if defined (EL3HLT) ENTRY(EL3HLT, "EL3HLT", "Level 3 halted"), #endif #if defined (EL3RST) ENTRY(EL3RST, "EL3RST", "Level 3 reset"), #endif #if defined (ELNRNG) ENTRY(ELNRNG, "ELNRNG", "Link number out of range"), #endif #if defined (EUNATCH) ENTRY(EUNATCH, "EUNATCH", "Protocol driver not attached"), #endif #if defined (ENOCSI) ENTRY(ENOCSI, "ENOCSI", "No CSI structure available"), #endif #if defined (EL2HLT) ENTRY(EL2HLT, "EL2HLT", "Level 2 halted"), #endif #if defined (EDEADLK) ENTRY(EDEADLK, "EDEADLK", "Deadlock condition"), #endif #if defined (ENOLCK) ENTRY(ENOLCK, "ENOLCK", "No record locks available"), #endif #if defined (EBADE) ENTRY(EBADE, "EBADE", "Invalid exchange"), #endif #if defined (EBADR) ENTRY(EBADR, "EBADR", "Invalid request descriptor"), #endif #if defined (EXFULL) ENTRY(EXFULL, "EXFULL", "Exchange full"), #endif #if defined (ENOANO) ENTRY(ENOANO, "ENOANO", "No anode"), #endif #if defined (EBADRQC) ENTRY(EBADRQC, "EBADRQC", "Invalid request code"), #endif #if defined (EBADSLT) ENTRY(EBADSLT, "EBADSLT", "Invalid slot"), #endif #if defined (EDEADLOCK) ENTRY(EDEADLOCK, "EDEADLOCK", "File locking deadlock error"), #endif #if defined (EBFONT) ENTRY(EBFONT, "EBFONT", "Bad font file format"), #endif #if defined (ENOSTR) ENTRY(ENOSTR, "ENOSTR", "Device not a stream"), #endif #if defined (ENODATA) ENTRY(ENODATA, "ENODATA", "No data available"), #endif #if defined (ETIME) ENTRY(ETIME, "ETIME", "Timer expired"), #endif #if defined (ENOSR) ENTRY(ENOSR, "ENOSR", "Out of streams resources"), #endif #if defined (ENONET) ENTRY(ENONET, "ENONET", "Machine is not on the network"), #endif #if defined (ENOPKG) ENTRY(ENOPKG, "ENOPKG", "Package not installed"), #endif #if defined (EREMOTE) ENTRY(EREMOTE, "EREMOTE", "Object is remote"), #endif #if defined (ENOLINK) ENTRY(ENOLINK, "ENOLINK", "Link has been severed"), #endif #if defined (EADV) ENTRY(EADV, "EADV", "Advertise error"), #endif #if defined (ESRMNT) ENTRY(ESRMNT, "ESRMNT", "Srmount error"), #endif #if defined (ECOMM) ENTRY(ECOMM, "ECOMM", "Communication error on send"), #endif #if defined (EPROTO) ENTRY(EPROTO, "EPROTO", "Protocol error"), #endif #if defined (EMULTIHOP) ENTRY(EMULTIHOP, "EMULTIHOP", "Multihop attempted"), #endif #if defined (EDOTDOT) ENTRY(EDOTDOT, "EDOTDOT", "RFS specific error"), #endif #if defined (EBADMSG) ENTRY(EBADMSG, "EBADMSG", "Not a data message"), #endif #if defined (ENAMETOOLONG) ENTRY(ENAMETOOLONG, "ENAMETOOLONG", "File name too long"), #endif #if defined (EOVERFLOW) ENTRY(EOVERFLOW, "EOVERFLOW", "Value too large for defined data type"), #endif #if defined (ENOTUNIQ) ENTRY(ENOTUNIQ, "ENOTUNIQ", "Name not unique on network"), #endif #if defined (EBADFD) ENTRY(EBADFD, "EBADFD", "File descriptor in bad state"), #endif #if defined (EREMCHG) ENTRY(EREMCHG, "EREMCHG", "Remote address changed"), #endif #if defined (ELIBACC) ENTRY(ELIBACC, "ELIBACC", "Can not access a needed shared library"), #endif #if defined (ELIBBAD) ENTRY(ELIBBAD, "ELIBBAD", "Accessing a corrupted shared library"), #endif #if defined (ELIBSCN) ENTRY(ELIBSCN, "ELIBSCN", ".lib section in a.out corrupted"), #endif #if defined (ELIBMAX) ENTRY(ELIBMAX, "ELIBMAX", "Attempting to link in too many shared libraries"), #endif #if defined (ELIBEXEC) ENTRY(ELIBEXEC, "ELIBEXEC", "Cannot exec a shared library directly"), #endif #if defined (EILSEQ) ENTRY(EILSEQ, "EILSEQ", "Illegal byte sequence"), #endif #if defined (ENOSYS) ENTRY(ENOSYS, "ENOSYS", "Operation not applicable"), #endif #if defined (ELOOP) ENTRY(ELOOP, "ELOOP", "Too many symbolic links encountered"), #endif #if defined (ERESTART) ENTRY(ERESTART, "ERESTART", "Interrupted system call should be restarted"), #endif #if defined (ESTRPIPE) ENTRY(ESTRPIPE, "ESTRPIPE", "Streams pipe error"), #endif #if defined (ENOTEMPTY) ENTRY(ENOTEMPTY, "ENOTEMPTY", "Directory not empty"), #endif #if defined (EUSERS) ENTRY(EUSERS, "EUSERS", "Too many users"), #endif #if defined (ENOTSOCK) ENTRY(ENOTSOCK, "ENOTSOCK", "Socket operation on non-socket"), #endif #if defined (EDESTADDRREQ) ENTRY(EDESTADDRREQ, "EDESTADDRREQ", "Destination address required"), #endif #if defined (EMSGSIZE) ENTRY(EMSGSIZE, "EMSGSIZE", "Message too long"), #endif #if defined (EPROTOTYPE) ENTRY(EPROTOTYPE, "EPROTOTYPE", "Protocol wrong type for socket"), #endif #if defined (ENOPROTOOPT) ENTRY(ENOPROTOOPT, "ENOPROTOOPT", "Protocol not available"), #endif #if defined (EPROTONOSUPPORT) ENTRY(EPROTONOSUPPORT, "EPROTONOSUPPORT", "Protocol not supported"), #endif #if defined (ESOCKTNOSUPPORT) ENTRY(ESOCKTNOSUPPORT, "ESOCKTNOSUPPORT", "Socket type not supported"), #endif #if defined (EOPNOTSUPP) ENTRY(EOPNOTSUPP, "EOPNOTSUPP", "Operation not supported on transport endpoint"), #endif #if defined (EPFNOSUPPORT) ENTRY(EPFNOSUPPORT, "EPFNOSUPPORT", "Protocol family not supported"), #endif #if defined (EAFNOSUPPORT) ENTRY(EAFNOSUPPORT, "EAFNOSUPPORT", "Address family not supported by protocol"), #endif #if defined (EADDRINUSE) ENTRY(EADDRINUSE, "EADDRINUSE", "Address already in use"), #endif #if defined (EADDRNOTAVAIL) ENTRY(EADDRNOTAVAIL, "EADDRNOTAVAIL","Cannot assign requested address"), #endif #if defined (ENETDOWN) ENTRY(ENETDOWN, "ENETDOWN", "Network is down"), #endif #if defined (ENETUNREACH) ENTRY(ENETUNREACH, "ENETUNREACH", "Network is unreachable"), #endif #if defined (ENETRESET) ENTRY(ENETRESET, "ENETRESET", "Network dropped connection because of reset"), #endif #if defined (ECONNABORTED) ENTRY(ECONNABORTED, "ECONNABORTED", "Software caused connection abort"), #endif #if defined (ECONNRESET) ENTRY(ECONNRESET, "ECONNRESET", "Connection reset by peer"), #endif #if defined (ENOBUFS) ENTRY(ENOBUFS, "ENOBUFS", "No buffer space available"), #endif #if defined (EISCONN) ENTRY(EISCONN, "EISCONN", "Transport endpoint is already connected"), #endif #if defined (ENOTCONN) ENTRY(ENOTCONN, "ENOTCONN", "Transport endpoint is not connected"), #endif #if defined (ESHUTDOWN) ENTRY(ESHUTDOWN, "ESHUTDOWN", "Cannot send after transport endpoint shutdown"), #endif #if defined (ETOOMANYREFS) ENTRY(ETOOMANYREFS, "ETOOMANYREFS", "Too many references: cannot splice"), #endif #if defined (ETIMEDOUT) ENTRY(ETIMEDOUT, "ETIMEDOUT", "Connection timed out"), #endif #if defined (ECONNREFUSED) ENTRY(ECONNREFUSED, "ECONNREFUSED", "Connection refused"), #endif #if defined (EHOSTDOWN) ENTRY(EHOSTDOWN, "EHOSTDOWN", "Host is down"), #endif #if defined (EHOSTUNREACH) ENTRY(EHOSTUNREACH, "EHOSTUNREACH", "No route to host"), #endif #if defined (EALREADY) ENTRY(EALREADY, "EALREADY", "Operation already in progress"), #endif #if defined (EINPROGRESS) ENTRY(EINPROGRESS, "EINPROGRESS", "Operation now in progress"), #endif #if defined (ESTALE) ENTRY(ESTALE, "ESTALE", "Stale NFS file handle"), #endif #if defined (EUCLEAN) ENTRY(EUCLEAN, "EUCLEAN", "Structure needs cleaning"), #endif #if defined (ENOTNAM) ENTRY(ENOTNAM, "ENOTNAM", "Not a XENIX named type file"), #endif #if defined (ENAVAIL) ENTRY(ENAVAIL, "ENAVAIL", "No XENIX semaphores available"), #endif #if defined (EISNAM) ENTRY(EISNAM, "EISNAM", "Is a named type file"), #endif #if defined (EREMOTEIO) ENTRY(EREMOTEIO, "EREMOTEIO", "Remote I/O error"), #endif ENTRY(0, NULL, NULL) }; #ifdef EVMSERR /* This is not in the table, because the numeric value of EVMSERR (32767) lies outside the range of sys_errlist[]. */ static struct { int value; const char *name, *msg; } evmserr = { EVMSERR, "EVMSERR", "VMS-specific error" }; #endif /* Translation table allocated and initialized at runtime. Indexed by the errno value to find the equivalent symbolic value. */ static const char **error_names; static int num_error_names = 0; /* Translation table allocated and initialized at runtime, if it does not already exist in the host environment. Indexed by the errno value to find the descriptive string. We don't export it for use in other modules because even though it has the same name, it differs from other implementations in that it is dynamically initialized rather than statically initialized. */ #ifndef HAVE_SYS_ERRLIST #define sys_nerr sys_nerr__ #define sys_errlist sys_errlist__ static int sys_nerr; static const char **sys_errlist; #else extern int sys_nerr; extern char *sys_errlist[]; #endif /* NAME init_error_tables -- initialize the name and message tables SYNOPSIS static void init_error_tables (); DESCRIPTION Using the error_table, which is initialized at compile time, generate the error_names and the sys_errlist (if needed) tables, which are indexed at runtime by a specific errno value. BUGS The initialization of the tables may fail under low memory conditions, in which case we don't do anything particularly useful, but we don't bomb either. Who knows, it might succeed at a later point if we free some memory in the meantime. In any case, the other routines know how to deal with lack of a table after trying to initialize it. This may or may not be considered to be a bug, that we don't specifically warn about this particular failure mode. */ static void init_error_tables (void) { const struct error_info *eip; int nbytes; /* If we haven't already scanned the error_table once to find the maximum errno value, then go find it now. */ if (num_error_names == 0) { for (eip = error_table; eip -> name != NULL; eip++) { if (eip -> value >= num_error_names) { num_error_names = eip -> value + 1; } } } /* Now attempt to allocate the error_names table, zero it out, and then initialize it from the statically initialized error_table. */ if (error_names == NULL) { nbytes = num_error_names * sizeof (char *); if ((error_names = (const char **) malloc (nbytes)) != NULL) { memset (error_names, 0, nbytes); for (eip = error_table; eip -> name != NULL; eip++) { error_names[eip -> value] = eip -> name; } } } #ifndef HAVE_SYS_ERRLIST /* Now attempt to allocate the sys_errlist table, zero it out, and then initialize it from the statically initialized error_table. */ if (sys_errlist == NULL) { nbytes = num_error_names * sizeof (char *); if ((sys_errlist = (const char **) malloc (nbytes)) != NULL) { memset (sys_errlist, 0, nbytes); sys_nerr = num_error_names; for (eip = error_table; eip -> name != NULL; eip++) { sys_errlist[eip -> value] = eip -> msg; } } } #endif } /* @deftypefn Extension int errno_max (void) Returns the maximum @code{errno} value for which a corresponding symbolic name or message is available. Note that in the case where we use the @code{sys_errlist} supplied by the system, it is possible for there to be more symbolic names than messages, or vice versa. In fact, the manual page for @code{perror(3C)} explicitly warns that one should check the size of the table (@code{sys_nerr}) before indexing it, since new error codes may be added to the system before they are added to the table. Thus @code{sys_nerr} might be smaller than value implied by the largest @code{errno} value defined in @code{}. We return the maximum value that can be used to obtain a meaningful symbolic name or message. @end deftypefn */ int errno_max (void) { int maxsize; if (error_names == NULL) { init_error_tables (); } maxsize = MAX (sys_nerr, num_error_names); return (maxsize - 1); } #ifndef HAVE_STRERROR /* @deftypefn Supplemental char* strerror (int @var{errnoval}) Maps an @code{errno} number to an error message string, the contents of which are implementation defined. On systems which have the external variables @code{sys_nerr} and @code{sys_errlist}, these strings will be the same as the ones used by @code{perror}. If the supplied error number is within the valid range of indices for the @code{sys_errlist}, but no message is available for the particular error number, then returns the string @samp{Error @var{num}}, where @var{num} is the error number. If the supplied error number is not a valid index into @code{sys_errlist}, returns @code{NULL}. The returned string is only guaranteed to be valid only until the next call to @code{strerror}. @end deftypefn */ char * strerror (int errnoval) { const char *msg; static char buf[32]; #ifndef HAVE_SYS_ERRLIST if (error_names == NULL) { init_error_tables (); } #endif if ((errnoval < 0) || (errnoval >= sys_nerr)) { #ifdef EVMSERR if (errnoval == evmserr.value) msg = evmserr.msg; else #endif /* Out of range, just return NULL */ msg = NULL; } else if ((sys_errlist == NULL) || (sys_errlist[errnoval] == NULL)) { /* In range, but no sys_errlist or no entry at this index. */ sprintf (buf, "Error %d", errnoval); msg = buf; } else { /* In range, and a valid message. Just return the message. */ msg = (char *) sys_errlist[errnoval]; } return (msg); } #endif /* ! HAVE_STRERROR */ /* @deftypefn Replacement {const char*} strerrno (int @var{errnum}) Given an error number returned from a system call (typically returned in @code{errno}), returns a pointer to a string containing the symbolic name of that error number, as found in @code{}. If the supplied error number is within the valid range of indices for symbolic names, but no name is available for the particular error number, then returns the string @samp{Error @var{num}}, where @var{num} is the error number. If the supplied error number is not within the range of valid indices, then returns @code{NULL}. The contents of the location pointed to are only guaranteed to be valid until the next call to @code{strerrno}. @end deftypefn */ const char * strerrno (int errnoval) { const char *name; static char buf[32]; if (error_names == NULL) { init_error_tables (); } if ((errnoval < 0) || (errnoval >= num_error_names)) { #ifdef EVMSERR if (errnoval == evmserr.value) name = evmserr.name; else #endif /* Out of range, just return NULL */ name = NULL; } else if ((error_names == NULL) || (error_names[errnoval] == NULL)) { /* In range, but no error_names or no entry at this index. */ sprintf (buf, "Error %d", errnoval); name = (const char *) buf; } else { /* In range, and a valid name. Just return the name. */ name = error_names[errnoval]; } return (name); } /* @deftypefn Extension int strtoerrno (const char *@var{name}) Given the symbolic name of a error number (e.g., @code{EACCES}), map it to an errno value. If no translation is found, returns 0. @end deftypefn */ int strtoerrno (const char *name) { int errnoval = 0; if (name != NULL) { if (error_names == NULL) { init_error_tables (); } for (errnoval = 0; errnoval < num_error_names; errnoval++) { if ((error_names[errnoval] != NULL) && (strcmp (name, error_names[errnoval]) == 0)) { break; } } if (errnoval == num_error_names) { #ifdef EVMSERR if (strcmp (name, evmserr.name) == 0) errnoval = evmserr.value; else #endif errnoval = 0; } } return (errnoval); } /* A simple little main that does nothing but print all the errno translations if MAIN is defined and this file is compiled and linked. */ #ifdef MAIN #include int main (void) { int errn; int errnmax; const char *name; const char *msg; char *strerror (); errnmax = errno_max (); printf ("%d entries in names table.\n", num_error_names); printf ("%d entries in messages table.\n", sys_nerr); printf ("%d is max useful index.\n", errnmax); /* Keep printing values until we get to the end of *both* tables, not *either* table. Note that knowing the maximum useful index does *not* relieve us of the responsibility of testing the return pointer for NULL. */ for (errn = 0; errn <= errnmax; errn++) { name = strerrno (errn); name = (name == NULL) ? "" : name; msg = strerror (errn); msg = (msg == NULL) ? "" : msg; printf ("%-4d%-18s%s\n", errn, name, msg); } return 0; } #endif nescc-1.3.4/libiberty/strncasecmp.c000066400000000000000000000066231177770303300173040ustar00rootroot00000000000000/* * Copyright (c) 1987 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that this notice is preserved and that due credit is given * to the University of California at Berkeley. The name of the University * may not be used to endorse or promote products derived from this * software without specific written prior permission. This software * is provided ``as is'' without express or implied warranty. */ /* @deftypefn Supplemental int strncasecmp (const char *@var{s1}, const char *@var{s2}) A case-insensitive @code{strncmp}. @end deftypefn */ #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)strcasecmp.c 5.5 (Berkeley) 11/24/87"; #endif /* LIBC_SCCS and not lint */ #include #include /* * This array is designed for mapping upper and lower case letter * together for a case independent comparison. The mappings are * based upon ascii character sequences. */ static const unsigned char charmap[] = { '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', '\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347', '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', '\370', '\371', '\372', '\333', '\334', '\335', '\336', '\337', '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377', }; int strncasecmp(const char *s1, const char *s2, register size_t n) { register unsigned char u1, u2; for (; n != 0; --n) { u1 = (unsigned char) *s1++; u2 = (unsigned char) *s2++; if (charmap[u1] != charmap[u2]) { return charmap[u1] - charmap[u2]; } if (u1 == '\0') { return 0; } } return 0; } nescc-1.3.4/libiberty/strncmp.c000066400000000000000000000011721177770303300164420ustar00rootroot00000000000000/* strncmp -- compare two strings, stop after n bytes. This function is in the public domain. */ /* @deftypefn Supplemental int strncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n}) Compares the first @var{n} bytes of two strings, returning a value as @code{strcmp}. @end deftypefn */ #include #include int strncmp(const char *s1, const char *s2, register size_t n) { register unsigned char u1, u2; while (n-- > 0) { u1 = (unsigned char) *s1++; u2 = (unsigned char) *s2++; if (u1 != u2) return u1 - u2; if (u1 == '\0') return 0; } return 0; } nescc-1.3.4/libiberty/strndup.c000066400000000000000000000031241177770303300164520ustar00rootroot00000000000000/* Implement the strndup function. Copyright (C) 2005 Free Software Foundation, Inc. Written by Kaveh R. Ghazi . This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* @deftypefn Extension char* strndup (const char *@var{s}, size_t @var{n}) Returns a pointer to a copy of @var{s} with at most @var{n} characters in memory obtained from @code{malloc}, or @code{NULL} if insufficient memory was available. The result is always NUL terminated. @end deftypefn */ #include "ansidecl.h" #include extern size_t strlen (const char*); extern PTR malloc (size_t); extern PTR memcpy (PTR, const PTR, size_t); char * strndup (const char *s, size_t n) { char *result; size_t len = strlen (s); if (n < len) len = n; result = (char *) malloc (len + 1); if (!result) return 0; result[len] = '\0'; return (char *) memcpy (result, s, len); } nescc-1.3.4/libiberty/strrchr.c000066400000000000000000000010441177770303300164410ustar00rootroot00000000000000/* Portable version of strrchr(). This function is in the public domain. */ /* @deftypefn Supplemental char* strrchr (const char *@var{s}, int @var{c}) Returns a pointer to the last occurrence of the character @var{c} in the string @var{s}, or @code{NULL} if not found. If @var{c} is itself the null character, the results are undefined. @end deftypefn */ #include char * strrchr (register const char *s, int c) { char *rtnval = 0; do { if (*s == c) rtnval = (char*) s; } while (*s++); return (rtnval); } nescc-1.3.4/libiberty/strsignal.c000066400000000000000000000356071177770303300167740ustar00rootroot00000000000000/* Extended support for using signal values. Written by Fred Fish. fnf@cygnus.com This file is in the public domain. */ #include "config.h" #include "ansidecl.h" #include "libiberty.h" /* We need to declare sys_siglist, because even if the system provides it we can't assume that it is declared in (for example, SunOS provides sys_siglist, but it does not declare it in any header file). However, we can't declare sys_siglist portably, because on some systems it is declared with const and on some systems it is declared without const. If we were using autoconf, we could work out the right declaration. Until, then we just ignore any declaration in the system header files, and always declare it ourselves. With luck, this will always work. */ #define sys_siglist no_such_symbol #define sys_nsig sys_nsig__no_such_symbol #include #include /* Routines imported from standard C runtime libraries. */ #ifdef HAVE_STDLIB_H #include #else extern PTR malloc (); #endif #ifdef HAVE_STRING_H #include #else extern PTR memset (); #endif /* Undefine the macro we used to hide the definition of sys_siglist found in the system header files. */ #undef sys_siglist #undef sys_nsig #ifndef NULL # define NULL (void *) 0 #endif #ifndef MAX # define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif static void init_signal_tables (void); /* Translation table for signal values. Note that this table is generally only accessed when it is used at runtime to initialize signal name and message tables that are indexed by signal value. Not all of these signals will exist on all systems. This table is the only thing that should have to be updated as new signal numbers are introduced. It's sort of ugly, but at least its portable. */ struct signal_info { const int value; /* The numeric value from */ const char *const name; /* The equivalent symbolic value */ #ifndef HAVE_SYS_SIGLIST const char *const msg; /* Short message about this value */ #endif }; #ifndef HAVE_SYS_SIGLIST # define ENTRY(value, name, msg) {value, name, msg} #else # define ENTRY(value, name, msg) {value, name} #endif static const struct signal_info signal_table[] = { #if defined (SIGHUP) ENTRY(SIGHUP, "SIGHUP", "Hangup"), #endif #if defined (SIGINT) ENTRY(SIGINT, "SIGINT", "Interrupt"), #endif #if defined (SIGQUIT) ENTRY(SIGQUIT, "SIGQUIT", "Quit"), #endif #if defined (SIGILL) ENTRY(SIGILL, "SIGILL", "Illegal instruction"), #endif #if defined (SIGTRAP) ENTRY(SIGTRAP, "SIGTRAP", "Trace/breakpoint trap"), #endif /* Put SIGIOT before SIGABRT, so that if SIGIOT==SIGABRT then SIGABRT overrides SIGIOT. SIGABRT is in ANSI and POSIX.1, and SIGIOT isn't. */ #if defined (SIGIOT) ENTRY(SIGIOT, "SIGIOT", "IOT trap"), #endif #if defined (SIGABRT) ENTRY(SIGABRT, "SIGABRT", "Aborted"), #endif #if defined (SIGEMT) ENTRY(SIGEMT, "SIGEMT", "Emulation trap"), #endif #if defined (SIGFPE) ENTRY(SIGFPE, "SIGFPE", "Arithmetic exception"), #endif #if defined (SIGKILL) ENTRY(SIGKILL, "SIGKILL", "Killed"), #endif #if defined (SIGBUS) ENTRY(SIGBUS, "SIGBUS", "Bus error"), #endif #if defined (SIGSEGV) ENTRY(SIGSEGV, "SIGSEGV", "Segmentation fault"), #endif #if defined (SIGSYS) ENTRY(SIGSYS, "SIGSYS", "Bad system call"), #endif #if defined (SIGPIPE) ENTRY(SIGPIPE, "SIGPIPE", "Broken pipe"), #endif #if defined (SIGALRM) ENTRY(SIGALRM, "SIGALRM", "Alarm clock"), #endif #if defined (SIGTERM) ENTRY(SIGTERM, "SIGTERM", "Terminated"), #endif #if defined (SIGUSR1) ENTRY(SIGUSR1, "SIGUSR1", "User defined signal 1"), #endif #if defined (SIGUSR2) ENTRY(SIGUSR2, "SIGUSR2", "User defined signal 2"), #endif /* Put SIGCLD before SIGCHLD, so that if SIGCLD==SIGCHLD then SIGCHLD overrides SIGCLD. SIGCHLD is in POXIX.1 */ #if defined (SIGCLD) ENTRY(SIGCLD, "SIGCLD", "Child status changed"), #endif #if defined (SIGCHLD) ENTRY(SIGCHLD, "SIGCHLD", "Child status changed"), #endif #if defined (SIGPWR) ENTRY(SIGPWR, "SIGPWR", "Power fail/restart"), #endif #if defined (SIGWINCH) ENTRY(SIGWINCH, "SIGWINCH", "Window size changed"), #endif #if defined (SIGURG) ENTRY(SIGURG, "SIGURG", "Urgent I/O condition"), #endif #if defined (SIGIO) /* "I/O pending" has also been suggested, but is misleading since the signal only happens when the process has asked for it, not everytime I/O is pending. */ ENTRY(SIGIO, "SIGIO", "I/O possible"), #endif #if defined (SIGPOLL) ENTRY(SIGPOLL, "SIGPOLL", "Pollable event occurred"), #endif #if defined (SIGSTOP) ENTRY(SIGSTOP, "SIGSTOP", "Stopped (signal)"), #endif #if defined (SIGTSTP) ENTRY(SIGTSTP, "SIGTSTP", "Stopped (user)"), #endif #if defined (SIGCONT) ENTRY(SIGCONT, "SIGCONT", "Continued"), #endif #if defined (SIGTTIN) ENTRY(SIGTTIN, "SIGTTIN", "Stopped (tty input)"), #endif #if defined (SIGTTOU) ENTRY(SIGTTOU, "SIGTTOU", "Stopped (tty output)"), #endif #if defined (SIGVTALRM) ENTRY(SIGVTALRM, "SIGVTALRM", "Virtual timer expired"), #endif #if defined (SIGPROF) ENTRY(SIGPROF, "SIGPROF", "Profiling timer expired"), #endif #if defined (SIGXCPU) ENTRY(SIGXCPU, "SIGXCPU", "CPU time limit exceeded"), #endif #if defined (SIGXFSZ) ENTRY(SIGXFSZ, "SIGXFSZ", "File size limit exceeded"), #endif #if defined (SIGWIND) ENTRY(SIGWIND, "SIGWIND", "SIGWIND"), #endif #if defined (SIGPHONE) ENTRY(SIGPHONE, "SIGPHONE", "SIGPHONE"), #endif #if defined (SIGLOST) ENTRY(SIGLOST, "SIGLOST", "Resource lost"), #endif #if defined (SIGWAITING) ENTRY(SIGWAITING, "SIGWAITING", "Process's LWPs are blocked"), #endif #if defined (SIGLWP) ENTRY(SIGLWP, "SIGLWP", "Signal LWP"), #endif #if defined (SIGDANGER) ENTRY(SIGDANGER, "SIGDANGER", "Swap space dangerously low"), #endif #if defined (SIGGRANT) ENTRY(SIGGRANT, "SIGGRANT", "Monitor mode granted"), #endif #if defined (SIGRETRACT) ENTRY(SIGRETRACT, "SIGRETRACT", "Need to relinguish monitor mode"), #endif #if defined (SIGMSG) ENTRY(SIGMSG, "SIGMSG", "Monitor mode data available"), #endif #if defined (SIGSOUND) ENTRY(SIGSOUND, "SIGSOUND", "Sound completed"), #endif #if defined (SIGSAK) ENTRY(SIGSAK, "SIGSAK", "Secure attention"), #endif ENTRY(0, NULL, NULL) }; /* Translation table allocated and initialized at runtime. Indexed by the signal value to find the equivalent symbolic value. */ static const char **signal_names; static int num_signal_names = 0; /* Translation table allocated and initialized at runtime, if it does not already exist in the host environment. Indexed by the signal value to find the descriptive string. We don't export it for use in other modules because even though it has the same name, it differs from other implementations in that it is dynamically initialized rather than statically initialized. */ #ifndef HAVE_SYS_SIGLIST static int sys_nsig; static const char **sys_siglist; #else #ifdef NSIG static int sys_nsig = NSIG; #else #ifdef _NSIG static int sys_nsig = _NSIG; #endif #endif extern const char * const sys_siglist[]; #endif /* NAME init_signal_tables -- initialize the name and message tables SYNOPSIS static void init_signal_tables (); DESCRIPTION Using the signal_table, which is initialized at compile time, generate the signal_names and the sys_siglist (if needed) tables, which are indexed at runtime by a specific signal value. BUGS The initialization of the tables may fail under low memory conditions, in which case we don't do anything particularly useful, but we don't bomb either. Who knows, it might succeed at a later point if we free some memory in the meantime. In any case, the other routines know how to deal with lack of a table after trying to initialize it. This may or may not be considered to be a bug, that we don't specifically warn about this particular failure mode. */ static void init_signal_tables (void) { const struct signal_info *eip; int nbytes; /* If we haven't already scanned the signal_table once to find the maximum signal value, then go find it now. */ if (num_signal_names == 0) { for (eip = signal_table; eip -> name != NULL; eip++) { if (eip -> value >= num_signal_names) { num_signal_names = eip -> value + 1; } } } /* Now attempt to allocate the signal_names table, zero it out, and then initialize it from the statically initialized signal_table. */ if (signal_names == NULL) { nbytes = num_signal_names * sizeof (char *); if ((signal_names = (const char **) malloc (nbytes)) != NULL) { memset (signal_names, 0, nbytes); for (eip = signal_table; eip -> name != NULL; eip++) { signal_names[eip -> value] = eip -> name; } } } #ifndef HAVE_SYS_SIGLIST /* Now attempt to allocate the sys_siglist table, zero it out, and then initialize it from the statically initialized signal_table. */ if (sys_siglist == NULL) { nbytes = num_signal_names * sizeof (char *); if ((sys_siglist = (const char **) malloc (nbytes)) != NULL) { memset (sys_siglist, 0, nbytes); sys_nsig = num_signal_names; for (eip = signal_table; eip -> name != NULL; eip++) { sys_siglist[eip -> value] = eip -> msg; } } } #endif } /* @deftypefn Extension int signo_max (void) Returns the maximum signal value for which a corresponding symbolic name or message is available. Note that in the case where we use the @code{sys_siglist} supplied by the system, it is possible for there to be more symbolic names than messages, or vice versa. In fact, the manual page for @code{psignal(3b)} explicitly warns that one should check the size of the table (@code{NSIG}) before indexing it, since new signal codes may be added to the system before they are added to the table. Thus @code{NSIG} might be smaller than value implied by the largest signo value defined in @code{}. We return the maximum value that can be used to obtain a meaningful symbolic name or message. @end deftypefn */ int signo_max (void) { int maxsize; if (signal_names == NULL) { init_signal_tables (); } maxsize = MAX (sys_nsig, num_signal_names); return (maxsize - 1); } /* @deftypefn Supplemental {const char *} strsignal (int @var{signo}) Maps an signal number to an signal message string, the contents of which are implementation defined. On systems which have the external variable @code{sys_siglist}, these strings will be the same as the ones used by @code{psignal()}. If the supplied signal number is within the valid range of indices for the @code{sys_siglist}, but no message is available for the particular signal number, then returns the string @samp{Signal @var{num}}, where @var{num} is the signal number. If the supplied signal number is not a valid index into @code{sys_siglist}, returns @code{NULL}. The returned string is only guaranteed to be valid only until the next call to @code{strsignal}. @end deftypefn */ #ifndef HAVE_STRSIGNAL const char * strsignal (int signo) { const char *msg; static char buf[32]; #ifndef HAVE_SYS_SIGLIST if (signal_names == NULL) { init_signal_tables (); } #endif if ((signo < 0) || (signo >= sys_nsig)) { /* Out of range, just return NULL */ msg = NULL; } else if ((sys_siglist == NULL) || (sys_siglist[signo] == NULL)) { /* In range, but no sys_siglist or no entry at this index. */ sprintf (buf, "Signal %d", signo); msg = (const char *) buf; } else { /* In range, and a valid message. Just return the message. */ msg = (const char *) sys_siglist[signo]; } return (msg); } #endif /* ! HAVE_STRSIGNAL */ /* @deftypefn Extension {const char*} strsigno (int @var{signo}) Given an signal number, returns a pointer to a string containing the symbolic name of that signal number, as found in @code{}. If the supplied signal number is within the valid range of indices for symbolic names, but no name is available for the particular signal number, then returns the string @samp{Signal @var{num}}, where @var{num} is the signal number. If the supplied signal number is not within the range of valid indices, then returns @code{NULL}. The contents of the location pointed to are only guaranteed to be valid until the next call to @code{strsigno}. @end deftypefn */ const char * strsigno (int signo) { const char *name; static char buf[32]; if (signal_names == NULL) { init_signal_tables (); } if ((signo < 0) || (signo >= num_signal_names)) { /* Out of range, just return NULL */ name = NULL; } else if ((signal_names == NULL) || (signal_names[signo] == NULL)) { /* In range, but no signal_names or no entry at this index. */ sprintf (buf, "Signal %d", signo); name = (const char *) buf; } else { /* In range, and a valid name. Just return the name. */ name = signal_names[signo]; } return (name); } /* @deftypefn Extension int strtosigno (const char *@var{name}) Given the symbolic name of a signal, map it to a signal number. If no translation is found, returns 0. @end deftypefn */ int strtosigno (const char *name) { int signo = 0; if (name != NULL) { if (signal_names == NULL) { init_signal_tables (); } for (signo = 0; signo < num_signal_names; signo++) { if ((signal_names[signo] != NULL) && (strcmp (name, signal_names[signo]) == 0)) { break; } } if (signo == num_signal_names) { signo = 0; } } return (signo); } /* @deftypefn Supplemental void psignal (int @var{signo}, char *@var{message}) Print @var{message} to the standard error, followed by a colon, followed by the description of the signal specified by @var{signo}, followed by a newline. @end deftypefn */ #ifndef HAVE_PSIGNAL void psignal (int signo, char *message) { if (signal_names == NULL) { init_signal_tables (); } if ((signo <= 0) || (signo >= sys_nsig)) { fprintf (stderr, "%s: unknown signal\n", message); } else { fprintf (stderr, "%s: %s\n", message, sys_siglist[signo]); } } #endif /* ! HAVE_PSIGNAL */ /* A simple little main that does nothing but print all the signal translations if MAIN is defined and this file is compiled and linked. */ #ifdef MAIN #include int main (void) { int signo; int maxsigno; const char *name; const char *msg; maxsigno = signo_max (); printf ("%d entries in names table.\n", num_signal_names); printf ("%d entries in messages table.\n", sys_nsig); printf ("%d is max useful index.\n", maxsigno); /* Keep printing values until we get to the end of *both* tables, not *either* table. Note that knowing the maximum useful index does *not* relieve us of the responsibility of testing the return pointer for NULL. */ for (signo = 0; signo <= maxsigno; signo++) { name = strsigno (signo); name = (name == NULL) ? "" : name; msg = strsignal (signo); msg = (msg == NULL) ? "" : msg; printf ("%-4d%-18s%s\n", signo, name, msg); } return 0; } #endif nescc-1.3.4/libiberty/strstr.c000066400000000000000000000020301177770303300163070ustar00rootroot00000000000000/* Simple implementation of strstr for systems without it. This function is in the public domain. */ /* @deftypefn Supplemental char* strstr (const char *@var{string}, const char *@var{sub}) This function searches for the substring @var{sub} in the string @var{string}, not including the terminating null characters. A pointer to the first occurrence of @var{sub} is returned, or @code{NULL} if the substring is absent. If @var{sub} points to a string with zero length, the function returns @var{string}. @end deftypefn */ /* FIXME: The above description is ANSI compiliant. This routine has not been validated to comply with it. -fnf */ #include extern char *strchr (const char *, int); extern int strncmp (const void *, const void *, size_t); extern size_t strlen (const char *); char * strstr (const char *s1, const char *s2) { const char *p = s1; const size_t len = strlen (s2); for (; (p = strchr (p, *s2)) != 0; p++) { if (strncmp (p, s2, len) == 0) return (char *)p; } return (0); } nescc-1.3.4/libiberty/strtod.c000066400000000000000000000066271177770303300163050ustar00rootroot00000000000000/* Implementation of strtod for systems with atof. Copyright (C) 1991, 1995, 2002 Free Software Foundation, Inc. This file is part of the libiberty library. This library 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. This library 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 GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. As a special exception, if you link this library with files compiled with a GNU compiler to produce an executable, this does not cause the resulting executable to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ /* @deftypefn Supplemental double strtod (const char *@var{string}, char **@var{endptr}) This ISO C function converts the initial portion of @var{string} to a @code{double}. If @var{endptr} is not @code{NULL}, a pointer to the character after the last character used in the conversion is stored in the location referenced by @var{endptr}. If no conversion is performed, zero is returned and the value of @var{string} is stored in the location referenced by @var{endptr}. @end deftypefn */ #include "ansidecl.h" #include "safe-ctype.h" extern double atof (const char *); /* Disclaimer: this is currently just used by CHILL in GDB and therefore has not been tested well. It may have been tested for nothing except that it compiles. */ double strtod (char *str, char **ptr) { char *p; if (ptr == (char **)0) return atof (str); p = str; while (ISSPACE (*p)) ++p; if (*p == '+' || *p == '-') ++p; /* INF or INFINITY. */ if ((p[0] == 'i' || p[0] == 'I') && (p[1] == 'n' || p[1] == 'N') && (p[2] == 'f' || p[2] == 'F')) { if ((p[3] == 'i' || p[3] == 'I') && (p[4] == 'n' || p[4] == 'N') && (p[5] == 'i' || p[5] == 'I') && (p[6] == 't' || p[6] == 'T') && (p[7] == 'y' || p[7] == 'Y')) { *ptr = p + 8; return atof (str); } else { *ptr = p + 3; return atof (str); } } /* NAN or NAN(foo). */ if ((p[0] == 'n' || p[0] == 'N') && (p[1] == 'a' || p[1] == 'A') && (p[2] == 'n' || p[2] == 'N')) { p += 3; if (*p == '(') { ++p; while (*p != '\0' && *p != ')') ++p; if (*p == ')') ++p; } *ptr = p; return atof (str); } /* digits, with 0 or 1 periods in it. */ if (ISDIGIT (*p) || *p == '.') { int got_dot = 0; while (ISDIGIT (*p) || (!got_dot && *p == '.')) { if (*p == '.') got_dot = 1; ++p; } /* Exponent. */ if (*p == 'e' || *p == 'E') { int i; i = 1; if (p[i] == '+' || p[i] == '-') ++i; if (ISDIGIT (p[i])) { while (ISDIGIT (p[i])) ++i; *ptr = p + i; return atof (str); } } *ptr = p; return atof (str); } /* Didn't find any digits. Doesn't look like a number. */ *ptr = str; return 0.0; } nescc-1.3.4/libiberty/strtol.c000066400000000000000000000124231177770303300163040ustar00rootroot00000000000000/*- * Copyright (c) 1990 The Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. [rescinded 22 July 1999] * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* @deftypefn Supplemental {long int} strtol (const char *@var{string}, char **@var{endptr}, int @var{base}) @deftypefnx Supplemental {unsigned long int} strtoul (const char *@var{string}, char **@var{endptr}, int @var{base}) The @code{strtol} function converts the string in @var{string} to a long integer value according to the given @var{base}, which must be between 2 and 36 inclusive, or be the special value 0. If @var{base} is 0, @code{strtol} will look for the prefixes @code{0} and @code{0x} to indicate bases 8 and 16, respectively, else default to base 10. When the base is 16 (either explicitly or implicitly), a prefix of @code{0x} is allowed. The handling of @var{endptr} is as that of @code{strtod} above. The @code{strtoul} function is the same, except that the converted value is unsigned. @end deftypefn */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_LIMITS_H #include #endif #ifdef HAVE_SYS_PARAM_H #include #endif #include #ifdef NEED_DECLARATION_ERRNO extern int errno; #endif #include "safe-ctype.h" /* FIXME: It'd be nice to configure around these, but the include files are too painful. These macros should at least be more portable than hardwired hex constants. */ #ifndef ULONG_MAX #define ULONG_MAX ((unsigned long)(~0L)) /* 0xFFFFFFFF */ #endif #ifndef LONG_MAX #define LONG_MAX ((long)(ULONG_MAX >> 1)) /* 0x7FFFFFFF */ #endif #ifndef LONG_MIN #define LONG_MIN ((long)(~LONG_MAX)) /* 0x80000000 */ #endif /* * Convert a string to a long integer. * * Ignores `locale' stuff. Assumes that the upper and lower case * alphabets and digits are each contiguous. */ long strtol(const char *nptr, char **endptr, register int base) { register const char *s = nptr; register unsigned long acc; register int c; register unsigned long cutoff; register int neg = 0, any, cutlim; /* * Skip white space and pick up leading +/- sign if any. * If base is 0, allow 0x for hex and 0 for octal, else * assume decimal; if base is already 16, allow 0x. */ do { c = *s++; } while (ISSPACE(c)); if (c == '-') { neg = 1; c = *s++; } else if (c == '+') c = *s++; if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) { c = s[1]; s += 2; base = 16; } if (base == 0) base = c == '0' ? 8 : 10; /* * Compute the cutoff value between legal numbers and illegal * numbers. That is the largest legal value, divided by the * base. An input number that is greater than this value, if * followed by a legal input character, is too big. One that * is equal to this value may be valid or not; the limit * between valid and invalid numbers is then based on the last * digit. For instance, if the range for longs is * [-2147483648..2147483647] and the input base is 10, * cutoff will be set to 214748364 and cutlim to either * 7 (neg==0) or 8 (neg==1), meaning that if we have accumulated * a value > 214748364, or equal but the next digit is > 7 (or 8), * the number is too big, and we will return a range error. * * Set any if any `digits' consumed; make it negative to indicate * overflow. */ cutoff = neg ? -(unsigned long)LONG_MIN : LONG_MAX; cutlim = cutoff % (unsigned long)base; cutoff /= (unsigned long)base; for (acc = 0, any = 0;; c = *s++) { if (ISDIGIT(c)) c -= '0'; else if (ISALPHA(c)) c -= ISUPPER(c) ? 'A' - 10 : 'a' - 10; else break; if (c >= base) break; if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) any = -1; else { any = 1; acc *= base; acc += c; } } if (any < 0) { acc = neg ? LONG_MIN : LONG_MAX; errno = ERANGE; } else if (neg) acc = -acc; if (endptr != 0) *endptr = (char *) (any ? s - 1 : nptr); return (acc); } nescc-1.3.4/libiberty/strtoul.c000066400000000000000000000063711177770303300164760ustar00rootroot00000000000000/* * Copyright (c) 1990 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. [rescinded 22 July 1999] * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_LIMITS_H #include #endif #ifdef HAVE_SYS_PARAM_H #include #endif #include #ifdef NEED_DECLARATION_ERRNO extern int errno; #endif #if 0 #include #endif #include "ansidecl.h" #include "safe-ctype.h" #ifndef ULONG_MAX #define ULONG_MAX ((unsigned long)(~0L)) /* 0xFFFFFFFF */ #endif /* * Convert a string to an unsigned long integer. * * Ignores `locale' stuff. Assumes that the upper and lower case * alphabets and digits are each contiguous. */ unsigned long strtoul(const char *nptr, char **endptr, register int base) { register const char *s = nptr; register unsigned long acc; register int c; register unsigned long cutoff; register int neg = 0, any, cutlim; /* * See strtol for comments as to the logic used. */ do { c = *s++; } while (ISSPACE(c)); if (c == '-') { neg = 1; c = *s++; } else if (c == '+') c = *s++; if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) { c = s[1]; s += 2; base = 16; } if (base == 0) base = c == '0' ? 8 : 10; cutoff = (unsigned long)ULONG_MAX / (unsigned long)base; cutlim = (unsigned long)ULONG_MAX % (unsigned long)base; for (acc = 0, any = 0;; c = *s++) { if (ISDIGIT(c)) c -= '0'; else if (ISALPHA(c)) c -= ISUPPER(c) ? 'A' - 10 : 'a' - 10; else break; if (c >= base) break; if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) any = -1; else { any = 1; acc *= base; acc += c; } } if (any < 0) { acc = ULONG_MAX; errno = ERANGE; } else if (neg) acc = -acc; if (endptr != 0) *endptr = (char *) (any ? s - 1 : nptr); return (acc); } nescc-1.3.4/libiberty/strverscmp.c000066400000000000000000000122531177770303300171660ustar00rootroot00000000000000/* Compare strings while treating digits characters numerically. Copyright (C) 1997, 2002, 2005 Free Software Foundation, Inc. This file is part of the libiberty library. Contributed by Jean-Franois Bignolles , 1997. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. Libiberty 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "libiberty.h" #include "safe-ctype.h" /* @deftypefun int strverscmp (const char *@var{s1}, const char *@var{s2}) The @code{strverscmp} function compares the string @var{s1} against @var{s2}, considering them as holding indices/version numbers. Return value follows the same conventions as found in the @code{strverscmp} function. In fact, if @var{s1} and @var{s2} contain no digits, @code{strverscmp} behaves like @code{strcmp}. Basically, we compare strings normally (character by character), until we find a digit in each string - then we enter a special comparison mode, where each sequence of digits is taken as a whole. If we reach the end of these two parts without noticing a difference, we return to the standard comparison mode. There are two types of numeric parts: "integral" and "fractional" (those begin with a '0'). The types of the numeric parts affect the way we sort them: @itemize @bullet @item integral/integral: we compare values as you would expect. @item fractional/integral: the fractional part is less than the integral one. Again, no surprise. @item fractional/fractional: the things become a bit more complex. If the common prefix contains only leading zeroes, the longest part is less than the other one; else the comparison behaves normally. @end itemize @smallexample strverscmp ("no digit", "no digit") @result{} 0 // @r{same behavior as strcmp.} strverscmp ("item#99", "item#100") @result{} <0 // @r{same prefix, but 99 < 100.} strverscmp ("alpha1", "alpha001") @result{} >0 // @r{fractional part inferior to integral one.} strverscmp ("part1_f012", "part1_f01") @result{} >0 // @r{two fractional parts.} strverscmp ("foo.009", "foo.0") @result{} <0 // @r{idem, but with leading zeroes only.} @end smallexample This function is especially useful when dealing with filename sorting, because filenames frequently hold indices/version numbers. @end deftypefun */ /* states: S_N: normal, S_I: comparing integral part, S_F: comparing fractional parts, S_Z: idem but with leading Zeroes only */ #define S_N 0x0 #define S_I 0x4 #define S_F 0x8 #define S_Z 0xC /* result_type: CMP: return diff; LEN: compare using len_diff/diff */ #define CMP 2 #define LEN 3 /* Compare S1 and S2 as strings holding indices/version numbers, returning less than, equal to or greater than zero if S1 is less than, equal to or greater than S2 (for more info, see the Glibc texinfo doc). */ int strverscmp (const char *s1, const char *s2) { const unsigned char *p1 = (const unsigned char *) s1; const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; int state; int diff; /* Symbol(s) 0 [1-9] others (padding) Transition (10) 0 (01) d (00) x (11) - */ static const unsigned int next_state[] = { /* state x d 0 - */ /* S_N */ S_N, S_I, S_Z, S_N, /* S_I */ S_N, S_I, S_I, S_I, /* S_F */ S_N, S_F, S_F, S_F, /* S_Z */ S_N, S_F, S_Z, S_Z }; static const int result_type[] = { /* state x/x x/d x/0 x/- d/x d/d d/0 d/- 0/x 0/d 0/0 0/- -/x -/d -/0 -/- */ /* S_N */ CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, /* S_I */ CMP, -1, -1, CMP, +1, LEN, LEN, CMP, +1, LEN, LEN, CMP, CMP, CMP, CMP, CMP, /* S_F */ CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, /* S_Z */ CMP, +1, +1, CMP, -1, CMP, CMP, CMP, -1, CMP, CMP, CMP }; if (p1 == p2) return 0; c1 = *p1++; c2 = *p2++; /* Hint: '0' is a digit too. */ state = S_N | ((c1 == '0') + (ISDIGIT (c1) != 0)); while ((diff = c1 - c2) == 0 && c1 != '\0') { state = next_state[state]; c1 = *p1++; c2 = *p2++; state |= (c1 == '0') + (ISDIGIT (c1) != 0); } state = result_type[state << 2 | (((c2 == '0') + (ISDIGIT (c2) != 0)))]; switch (state) { case CMP: return diff; case LEN: while (ISDIGIT (*p1++)) if (!ISDIGIT (*p2++)) return 1; return ISDIGIT (*p2) ? -1 : diff; default: return state; } } nescc-1.3.4/libiberty/tmpnam.c000066400000000000000000000020161177770303300162460ustar00rootroot00000000000000/* @deftypefn Supplemental char* tmpnam (char *@var{s}) This function attempts to create a name for a temporary file, which will be a valid file name yet not exist when @code{tmpnam} checks for it. @var{s} must point to a buffer of at least @code{L_tmpnam} bytes, or be @code{NULL}. Use of this function creates a security risk, and it must not be used in new projects. Use @code{mkstemp} instead. @end deftypefn */ #include #ifndef L_tmpnam #define L_tmpnam 100 #endif #ifndef P_tmpdir #define P_tmpdir "/usr/tmp" #endif static char tmpnam_buffer[L_tmpnam]; static int tmpnam_counter; extern int getpid (void); char * tmpnam (char *s) { int pid = getpid (); if (s == NULL) s = tmpnam_buffer; /* Generate the filename and make sure that there isn't one called it already. */ while (1) { FILE *f; sprintf (s, "%s/%s%x.%x", P_tmpdir, "t", pid, tmpnam_counter); f = fopen (s, "r"); if (f == NULL) break; tmpnam_counter++; fclose (f); } return s; } nescc-1.3.4/libiberty/unlink-if-ordinary.c000066400000000000000000000040411177770303300204730ustar00rootroot00000000000000/* unlink-if-ordinary.c - remove link to a file unless it is special Copyright (C) 2004, 2005 Free Software Foundation, Inc. This file is part of the libiberty library. This library 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. This library 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 GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. As a special exception, if you link this library with files compiled with a GNU compiler to produce an executable, this does not cause the resulting executable to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ /* @deftypefn Supplemental int unlink_if_ordinary (const char*) Unlinks the named file, unless it is special (e.g. a device file). Returns 0 when the file was unlinked, a negative value (and errno set) when there was an error deleting the file, and a positive value if no attempt was made to unlink the file because it is special. @end deftypefn */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifdef HAVE_UNISTD_H #include #endif #if HAVE_SYS_STAT_H #include #endif #include "libiberty.h" #ifndef S_ISLNK #ifdef S_IFLNK #define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) #else #define S_ISLNK(m) 0 #define lstat stat #endif #endif int unlink_if_ordinary (const char *name) { struct stat st; if (lstat (name, &st) == 0 && (S_ISREG (st.st_mode) || S_ISLNK (st.st_mode))) return unlink (name); return 1; } nescc-1.3.4/libiberty/vasprintf.c000066400000000000000000000113271177770303300167730ustar00rootroot00000000000000/* Like vsprintf but provides a pointer to malloc'd storage, which must be freed by the caller. Copyright (C) 1994, 2003 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #if !defined (va_copy) && defined (__va_copy) # define va_copy(d,s) __va_copy((d),(s)) #endif #include #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STDLIB_H #include #else extern unsigned long strtoul (); extern PTR malloc (); #endif #include "libiberty.h" #ifdef TEST int global_total_width; #endif /* @deftypefn Extension int vasprintf (char **@var{resptr}, const char *@var{format}, va_list @var{args}) Like @code{vsprintf}, but instead of passing a pointer to a buffer, you pass a pointer to a pointer. This function will compute the size of the buffer needed, allocate memory with @code{malloc}, and store a pointer to the allocated memory in @code{*@var{resptr}}. The value returned is the same as @code{vsprintf} would return. If memory could not be allocated, minus one is returned and @code{NULL} is stored in @code{*@var{resptr}}. @end deftypefn */ static int int_vasprintf (char **, const char *, va_list); static int int_vasprintf (char **result, const char *format, va_list args) { const char *p = format; /* Add one to make sure that it is never zero, which might cause malloc to return NULL. */ int total_width = strlen (format) + 1; va_list ap; #ifdef va_copy va_copy (ap, args); #else memcpy ((PTR) &ap, (PTR) &args, sizeof (va_list)); #endif while (*p != '\0') { if (*p++ == '%') { while (strchr ("-+ #0", *p)) ++p; if (*p == '*') { ++p; total_width += abs (va_arg (ap, int)); } else total_width += strtoul (p, (char **) &p, 10); if (*p == '.') { ++p; if (*p == '*') { ++p; total_width += abs (va_arg (ap, int)); } else total_width += strtoul (p, (char **) &p, 10); } while (strchr ("hlL", *p)) ++p; /* Should be big enough for any format specifier except %s and floats. */ total_width += 30; switch (*p) { case 'd': case 'i': case 'o': case 'u': case 'x': case 'X': case 'c': (void) va_arg (ap, int); break; case 'f': case 'e': case 'E': case 'g': case 'G': (void) va_arg (ap, double); /* Since an ieee double can have an exponent of 307, we'll make the buffer wide enough to cover the gross case. */ total_width += 307; break; case 's': total_width += strlen (va_arg (ap, char *)); break; case 'p': case 'n': (void) va_arg (ap, char *); break; } p++; } } #ifdef va_copy va_end (ap); #endif #ifdef TEST global_total_width = total_width; #endif *result = (char *) malloc (total_width); if (*result != NULL) return vsprintf (*result, format, args); else return -1; } int vasprintf (char **result, const char *format, #if defined (_BSD_VA_LIST_) && defined (__FreeBSD__) _BSD_VA_LIST_ args) #else va_list args) #endif { return int_vasprintf (result, format, args); } #ifdef TEST static void ATTRIBUTE_PRINTF_1 checkit (const char *format, ...) { char *result; VA_OPEN (args, format); VA_FIXEDARG (args, const char *, format); vasprintf (&result, format, args); VA_CLOSE (args); if (strlen (result) < (size_t) global_total_width) printf ("PASS: "); else printf ("FAIL: "); printf ("%d %s\n", global_total_width, result); free (result); } extern int main (void); int main (void) { checkit ("%d", 0x12345678); checkit ("%200d", 5); checkit ("%.300d", 6); checkit ("%100.150d", 7); checkit ("%s", "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\ 777777777777777777333333333333366666666666622222222222777777777777733333"); checkit ("%f%s%d%s", 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx"); return 0; } #endif /* TEST */ nescc-1.3.4/libiberty/vfork.c000066400000000000000000000005321177770303300161020ustar00rootroot00000000000000/* Emulate vfork using just plain fork, for systems without a real vfork. This function is in the public domain. */ /* @deftypefn Supplemental int vfork (void) Emulates @code{vfork} by calling @code{fork} and returning its value. @end deftypefn */ #include "ansidecl.h" extern int fork (void); int vfork (void) { return (fork ()); } nescc-1.3.4/libiberty/vfprintf.c000066400000000000000000000005271177770303300166150ustar00rootroot00000000000000/* Provide a version vfprintf in terms of _doprnt. By Kaveh Ghazi (ghazi@caip.rutgers.edu) 3/29/98 Copyright (C) 1998 Free Software Foundation, Inc. */ #include "ansidecl.h" #include #include #undef vfprintf int vfprintf (FILE *stream, const char *format, va_list ap) { return _doprnt (format, ap, stream); } nescc-1.3.4/libiberty/vmsbuild.com000066400000000000000000000116621177770303300171420ustar00rootroot00000000000000$! libiberty/vmsbuild.com -- build liberty.olb for VMS host, VMS target $! $ CC = "gcc /noVerbose/Debug/Incl=([],[-.include])" $ LIBR = "library /Obj" $ LINK = "link" $ DELETE= "delete /noConfirm" $ SEARCH= "search /Exact" $ ECHO = "write sys$output" $ ABORT = "exit %x002C" $! $ LIB_NAME = "liberty.olb" !this is what we're going to construct $ WORK_LIB = "new-lib.olb" !used to guard against an incomplete build $ $! manually copied from Makefile.in $ REQUIRED_OFILES = "argv.o basename.o choose-temp.o concat.o cplus-dem.o "- + "fdmatch.o fnmatch.o getopt.o getopt1.o getruntime.o hex.o "- + "floatformat.o objalloc.o obstack.o spaces.o strerror.o strsignal.o "- + "xatexit.o xexit.o xmalloc.o xmemdup.o xstrdup.o xstrerror.o" $! anything not caught by link+search of dummy.* should be added here $ EXTRA_OFILES = "" $! $! move to the directory which contains this command procedure $ old_dir = f$environ("DEFAULT") $ new_dir = f$parse("_._;",f$environ("PROCEDURE")) - "_._;" $ set default 'new_dir' $ $ ECHO "Starting libiberty build..." $ create config.h /* libiberty config.h for VMS */ #define NEED_sys_siglist #define NEED_strsignal #define NEED_psignal #define NEED_basename $ LIBR 'WORK_LIB' /Create $ $! first pass: compile "required" modules $ ofiles = REQUIRED_OFILES + " " + EXTRA_OFILES $ pass = 1 $ gosub do_ofiles $ $! second pass: process dummy.c, using the first pass' results $ ECHO " now checking run-time library for missing functionality" $ if f$search("dummy.obj").nes."" then DELETE dummy.obj;* $ define/noLog sys$error _NL: !can't use /User_Mode here due to gcc $ define/noLog sys$output _NL: ! driver's use of multiple image activation $ on error then continue $ 'CC' dummy.c $ deassign sys$error !restore, more or less $ deassign sys$output $ if f$search("dummy.obj").eqs."" then goto pass2_failure1 $! link dummy.obj, capturing full linker feedback in dummy.map $ oldmsg = f$environ("MESSAGE") $ set message /Facility/Severity/Identification/Text $ define/User sys$output _NL: $ define/User sys$error _NL: $ LINK/Map=dummy.map/noExe dummy.obj,'WORK_LIB'/Libr,- gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr $ set message 'oldmsg' $ if f$search("dummy.map").eqs."" then goto pass2_failure2 $ DELETE dummy.obj;* $ SEARCH dummy.map "%LINK-I-UDFSYM" /Output=dummy.list $ DELETE dummy.map;* $ ECHO " check completed" $! we now have a file with one entry per line of unresolvable symbols $ ofiles = "" $ if f$trnlnm("IFILE$").nes."" then close/noLog ifile$ $ open/Read ifile$ dummy.list $iloop: read/End=idone ifile$ iline $ iline = f$edit(iline,"COMPRESS,TRIM,LOWERCASE") $ ofiles = ofiles + " " + f$element(1," ",iline) + ".o" $ goto iloop $idone: close ifile$ $ DELETE dummy.list;* $ on error then ABORT $ $! third pass: compile "missing" modules collected in pass 2 $ pass = 3 $ gosub do_ofiles $ $! finish up $ LIBR 'WORK_LIB' /Compress /Output='LIB_NAME' !new-lib.olb -> liberty.olb $ DELETE 'WORK_LIB';* $ $! all done $ ECHO "Completed libiberty build." $ type sys$input: You many wish to do $ COPY LIBERTY.OLB GNU_CC:[000000] so that this run-time library resides in the same location as gcc's support library. When building gas, be sure to leave the original copy of liberty.olb here so that gas's build procedure can find it. $ set default 'old_dir' $ exit $ $! $! compile each element of the space-delimited list 'ofiles' $! $do_ofiles: $ ofiles = f$edit(ofiles,"COMPRESS,TRIM") $ i = 0 $oloop: $ f = f$element(i," ",ofiles) $ if f.eqs." " then goto odone $ f = f - ".o" !strip dummy suffix $ ECHO " ''f'" $ skip_f = 0 $ if pass.eq.3 .and. f$search("''f'.c").eqs."" then gosub chk_deffunc $ if .not.skip_f $ then $ 'CC' 'f'.c $ LIBR 'WORK_LIB' 'f'.obj /Insert $ DELETE 'f'.obj;* $ endif $ i = i + 1 $ goto oloop $odone: $ return $ $! $! check functions.def for a DEFFUNC() entry corresponding to missing file 'f'.c $! $chk_deffunc: $ define/User sys$output _NL: $ define/User sys$error _NL: $ SEARCH functions.def "DEFFUNC","''f'" /Match=AND $ if (($status.and.%x7FFFFFFF) .eq. 1) $ then $ skip_f = 1 $ open/Append config_h config.h $ write config_h "#define NEED_''f'" $ close config_h $ endif $ return $ $! $pass2_failure1: $! if we reach here, dummy.c failed to compile and we're really stuck $ type sys$input: Cannot compile the library contents checker (dummy.c + functions.def), so cannot continue! $! attempt the compile again, without suppressing diagnostic messages this time $ on error then ABORT +0*f$verify(v) $ v = f$verify(1) $ 'CC' dummy.c $ ABORT +0*f$verify(v) !'f$verify(0)' $! $pass2_failure2: $! should never reach here.. $ type sys$input: Cannot link the library contents checker (dummy.obj), so cannot continue! $! attempt the link again, without suppressing diagnostic messages this time $ on error then ABORT +0*f$verify(v) $ v = f$verify(1) $ LINK/Map=dummy.map/noExe dummy.obj,'WORK_LIB'/Libr,- gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr $ ABORT +0*f$verify(v) !'f$verify(0)' $ $! not reached $ exit nescc-1.3.4/libiberty/vprintf.c000066400000000000000000000015201177770303300164410ustar00rootroot00000000000000/* @deftypefn Supplemental int vprintf (const char *@var{format}, va_list @var{ap}) @deftypefnx Supplemental int vfprintf (FILE *@var{stream}, const char *@var{format}, va_list @var{ap}) @deftypefnx Supplemental int vsprintf (char *@var{str}, const char *@var{format}, va_list @var{ap}) These functions are the same as @code{printf}, @code{fprintf}, and @code{sprintf}, respectively, except that they are called with a @code{va_list} instead of a variable number of arguments. Note that they do not call @code{va_end}; this is the application's responsibility. In @libib{} they are implemented in terms of the nonstandard but common function @code{_doprnt}. @end deftypefn */ #include #include #include #undef vprintf int vprintf (const char *format, va_list ap) { return vfprintf (stdout, format, ap); } nescc-1.3.4/libiberty/vsnprintf.c000066400000000000000000000101471177770303300170070ustar00rootroot00000000000000/* Implement the vsnprintf function. Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. Written by Kaveh R. Ghazi . This file is part of the libiberty library. This library 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. This library 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 GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. As a special exception, if you link this library with files compiled with a GNU compiler to produce an executable, this does not cause the resulting executable to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ /* @deftypefn Supplemental int vsnprintf (char *@var{buf}, size_t @var{n}, const char *@var{format}, va_list @var{ap}) This function is similar to vsprintf, but it will print at most @var{n} characters. On error the return value is -1, otherwise it returns the number of characters that would have been printed had @var{n} been sufficiently large, regardless of the actual value of @var{n}. Note some pre-C99 system libraries do not implement this correctly so users cannot generally rely on the return value if the system version of this function is used. @end deftypefn */ #include "config.h" #include "ansidecl.h" #include #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #include "libiberty.h" /* This implementation relies on a working vasprintf. */ int vsnprintf (char *s, size_t n, const char *format, va_list ap) { char *buf = 0; int result = vasprintf (&buf, format, ap); if (!buf) return -1; if (result < 0) { free (buf); return -1; } result = strlen (buf); if (n > 0) { if ((long) n > result) memcpy (s, buf, result+1); else { memcpy (s, buf, n-1); s[n - 1] = 0; } } free (buf); return result; } #ifdef TEST /* Set the buffer to a known state. */ #define CLEAR(BUF) do { memset ((BUF), 'X', sizeof (BUF)); (BUF)[14] = '\0'; } while (0) /* For assertions. */ #define VERIFY(P) do { if (!(P)) abort(); } while (0) static int ATTRIBUTE_PRINTF_3 checkit (char *s, size_t n, const char *format, ...) { int result; VA_OPEN (ap, format); VA_FIXEDARG (ap, char *, s); VA_FIXEDARG (ap, size_t, n); VA_FIXEDARG (ap, const char *, format); result = vsnprintf (s, n, format, ap); VA_CLOSE (ap); return result; } extern int main (void); int main (void) { char buf[128]; int status; CLEAR (buf); status = checkit (buf, 10, "%s:%d", "foobar", 9); VERIFY (status==8 && memcmp (buf, "foobar:9\0XXXXX\0", 15) == 0); CLEAR (buf); status = checkit (buf, 9, "%s:%d", "foobar", 9); VERIFY (status==8 && memcmp (buf, "foobar:9\0XXXXX\0", 15) == 0); CLEAR (buf); status = checkit (buf, 8, "%s:%d", "foobar", 9); VERIFY (status==8 && memcmp (buf, "foobar:\0XXXXXX\0", 15) == 0); CLEAR (buf); status = checkit (buf, 7, "%s:%d", "foobar", 9); VERIFY (status==8 && memcmp (buf, "foobar\0XXXXXXX\0", 15) == 0); CLEAR (buf); status = checkit (buf, 6, "%s:%d", "foobar", 9); VERIFY (status==8 && memcmp (buf, "fooba\0XXXXXXXX\0", 15) == 0); CLEAR (buf); status = checkit (buf, 2, "%s:%d", "foobar", 9); VERIFY (status==8 && memcmp (buf, "f\0XXXXXXXXXXXX\0", 15) == 0); CLEAR (buf); status = checkit (buf, 1, "%s:%d", "foobar", 9); VERIFY (status==8 && memcmp (buf, "\0XXXXXXXXXXXXX\0", 15) == 0); CLEAR (buf); status = checkit (buf, 0, "%s:%d", "foobar", 9); VERIFY (status==8 && memcmp (buf, "XXXXXXXXXXXXXX\0", 15) == 0); return 0; } #endif /* TEST */ nescc-1.3.4/libiberty/vsprintf.c000066400000000000000000000035261177770303300166340ustar00rootroot00000000000000/* Simple implementation of vsprintf for systems without it. Highly system-dependent, but should work on most "traditional" implementations of stdio; newer ones should already have vsprintf. Written by Per Bothner of Cygnus Support. Based on libg++'s "form" (written by Doug Lea; dl@rocky.oswego.edu). Copyright (C) 1991, 1995, 2002 Free Software Foundation, Inc. This file is part of the libiberty library. This library 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. This library 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 GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. As a special exception, if you link this library with files compiled with a GNU compiler to produce an executable, this does not cause the resulting executable to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ #include #include #include #undef vsprintf #if defined _IOSTRG && defined _IOWRT int vsprintf (char *buf, const char *format, va_list ap) { FILE b; int ret; #ifdef VMS b->_flag = _IOWRT|_IOSTRG; b->_ptr = buf; b->_cnt = 12000; #else b._flag = _IOWRT|_IOSTRG; b._ptr = buf; b._cnt = 12000; #endif ret = _doprnt(format, ap, &b); putc('\0', &b); return ret; } #endif nescc-1.3.4/libiberty/waitpid.c000066400000000000000000000014111177770303300164110ustar00rootroot00000000000000/* @deftypefn Supplemental int waitpid (int @var{pid}, int *@var{status}, int) This is a wrapper around the @code{wait} function. Any ``special'' values of @var{pid} depend on your implementation of @code{wait}, as does the return value. The third argument is unused in @libib{}. @end deftypefn */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "ansidecl.h" /* On some systems (such as WindISS), you must include to get the definition of "pid_t" before you include . */ #include #ifdef HAVE_SYS_WAIT_H #include #endif pid_t waitpid (pid_t pid, int *stat_loc, int options ATTRIBUTE_UNUSED) { for (;;) { int wpid = wait(stat_loc); if (wpid == pid || wpid == -1) return wpid; } } nescc-1.3.4/libiberty/xatexit.c000066400000000000000000000041251177770303300164430ustar00rootroot00000000000000/* * Copyright (c) 1990 Regents of the University of California. * All rights reserved. * * %sccs.include.redist.c% */ /* @deftypefun int xatexit (void (*@var{fn}) (void)) Behaves as the standard @code{atexit} function, but with no limit on the number of registered functions. Returns 0 on success, or @minus{}1 on failure. If you use @code{xatexit} to register functions, you must use @code{xexit} to terminate your program. @end deftypefun */ /* Adapted from newlib/libc/stdlib/{,at}exit.[ch]. If you use xatexit, you must call xexit instead of exit. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "ansidecl.h" #include "libiberty.h" #include #include #if VMS #include #include #else /* For systems with larger pointers than ints, this must be declared. */ PTR malloc (size_t); #endif static void xatexit_cleanup (void); /* Pointer to function run by xexit. */ extern void (*_xexit_cleanup) (void); #define XATEXIT_SIZE 32 struct xatexit { struct xatexit *next; /* next in list */ int ind; /* next index in this table */ void (*fns[XATEXIT_SIZE]) (void); /* the table itself */ }; /* Allocate one struct statically to guarantee that we can register at least a few handlers. */ static struct xatexit xatexit_first; /* Points to head of LIFO stack. */ static struct xatexit *xatexit_head = &xatexit_first; /* Register function FN to be run by xexit. Return 0 if successful, -1 if not. */ int xatexit (void (*fn) (void)) { register struct xatexit *p; /* Tell xexit to call xatexit_cleanup. */ if (!_xexit_cleanup) _xexit_cleanup = xatexit_cleanup; p = xatexit_head; if (p->ind >= XATEXIT_SIZE) { if ((p = (struct xatexit *) malloc (sizeof *p)) == NULL) return -1; p->ind = 0; p->next = xatexit_head; xatexit_head = p; } p->fns[p->ind++] = fn; return 0; } /* Call any cleanup functions. */ static void xatexit_cleanup (void) { register struct xatexit *p; register int n; for (p = xatexit_head; p; p = p->next) for (n = p->ind; --n >= 0;) (*p->fns[n]) (); } nescc-1.3.4/libiberty/xexit.c000066400000000000000000000030121177770303300161100ustar00rootroot00000000000000/* xexit.c -- Run any exit handlers, then exit. Copyright (C) 1994, 95, 1997 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* @deftypefn Replacement void xexit (int @var{code}) Terminates the program. If any functions have been registered with the @code{xatexit} replacement function, they will be called first. Termination is handled via the system's normal @code{exit} call. @end deftypefn */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifdef HAVE_STDLIB_H #include #endif #include "libiberty.h" /* This variable is set by xatexit if it is called. This way, xmalloc doesn't drag xatexit into the link. */ void (*_xexit_cleanup) (void); void xexit (int code) { if (_xexit_cleanup != NULL) (*_xexit_cleanup) (); exit (code); } nescc-1.3.4/libiberty/xmalloc.c000066400000000000000000000111161177770303300164120ustar00rootroot00000000000000/* memory allocation routines with error checking. Copyright 1989, 90, 91, 92, 93, 94 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* @deftypefn Replacement void* xmalloc (size_t) Allocate memory without fail. If @code{malloc} fails, this will print a message to @code{stderr} (using the name set by @code{xmalloc_set_program_name}, if any) and then call @code{xexit}. Note that it is therefore safe for a program to contain @code{#define malloc xmalloc} in its source. @end deftypefn @deftypefn Replacement void* xrealloc (void *@var{ptr}, size_t @var{size}) Reallocate memory without fail. This routine functions like @code{realloc}, but will behave the same as @code{xmalloc} if memory cannot be found. @end deftypefn @deftypefn Replacement void* xcalloc (size_t @var{nelem}, size_t @var{elsize}) Allocate memory without fail, and set it to zero. This routine functions like @code{calloc}, but will behave the same as @code{xmalloc} if memory cannot be found. @end deftypefn @deftypefn Replacement void xmalloc_set_program_name (const char *@var{name}) You can use this to set the name of the program used by @code{xmalloc_failed} when printing a failure message. @end deftypefn @deftypefn Replacement void xmalloc_failed (size_t) This function is not meant to be called by client code, and is listed here for completeness only. If any of the allocation routines fail, this function will be called to print an error message and terminate execution. @end deftypefn */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "ansidecl.h" #include "libiberty.h" #include #include #if VMS #include #include #else /* For systems with larger pointers than ints, these must be declared. */ # if HAVE_STDLIB_H && HAVE_UNISTD_H && HAVE_DECL_MALLOC \ && HAVE_DECL_REALLOC && HAVE_DECL_CALLOC && HAVE_DECL_SBRK # include # include # else # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ void *malloc (size_t); void *realloc (void *, size_t); void *calloc (size_t, size_t); void *sbrk (ptrdiff_t); # ifdef __cplusplus } # endif /* __cplusplus */ # endif /* HAVE_STDLIB_H ... */ #endif /* VMS */ /* The program name if set. */ static const char *name = ""; #ifdef HAVE_SBRK /* The initial sbrk, set when the program name is set. Not used for win32 ports other than cygwin32. */ static char *first_break = NULL; #endif /* HAVE_SBRK */ void xmalloc_set_program_name (const char *s) { name = s; #ifdef HAVE_SBRK /* Win32 ports other than cygwin32 don't have brk() */ if (first_break == NULL) first_break = (char *) sbrk (0); #endif /* HAVE_SBRK */ } void xmalloc_failed (size_t size) { #ifdef HAVE_SBRK extern char **environ; size_t allocated; if (first_break != NULL) allocated = (char *) sbrk (0) - first_break; else allocated = (char *) sbrk (0) - (char *) &environ; fprintf (stderr, "\n%s%sout of memory allocating %lu bytes after a total of %lu bytes\n", name, *name ? ": " : "", (unsigned long) size, (unsigned long) allocated); #else /* HAVE_SBRK */ fprintf (stderr, "\n%s%sout of memory allocating %lu bytes\n", name, *name ? ": " : "", (unsigned long) size); #endif /* HAVE_SBRK */ xexit (1); } PTR xmalloc (size_t size) { PTR newmem; if (size == 0) size = 1; newmem = malloc (size); if (!newmem) xmalloc_failed (size); return (newmem); } PTR xcalloc (size_t nelem, size_t elsize) { PTR newmem; if (nelem == 0 || elsize == 0) nelem = elsize = 1; newmem = calloc (nelem, elsize); if (!newmem) xmalloc_failed (nelem * elsize); return (newmem); } PTR xrealloc (PTR oldmem, size_t size) { PTR newmem; if (size == 0) size = 1; if (!oldmem) newmem = malloc (size); else newmem = realloc (oldmem, size); if (!newmem) xmalloc_failed (size); return (newmem); } nescc-1.3.4/libiberty/xmemdup.c000066400000000000000000000016641177770303300164410ustar00rootroot00000000000000/* xmemdup.c -- Duplicate a memory buffer, using xcalloc. This trivial function is in the public domain. Jeff Garzik, September 1999. */ /* @deftypefn Replacement void* xmemdup (void *@var{input}, size_t @var{copy_size}, size_t @var{alloc_size}) Duplicates a region of memory without fail. First, @var{alloc_size} bytes are allocated, then @var{copy_size} bytes from @var{input} are copied into it, and the new memory is returned. If fewer bytes are copied than were allocated, the remaining memory is zeroed. @end deftypefn */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "ansidecl.h" #include "libiberty.h" #include /* For size_t. */ #ifdef HAVE_STRING_H #include #else # ifdef HAVE_STRINGS_H # include # endif #endif PTR xmemdup (const PTR input, size_t copy_size, size_t alloc_size) { PTR output = xcalloc (1, alloc_size); return (PTR) memcpy (output, input, copy_size); } nescc-1.3.4/libiberty/xstrdup.c000066400000000000000000000013201177770303300164600ustar00rootroot00000000000000/* xstrdup.c -- Duplicate a string in memory, using xmalloc. This trivial function is in the public domain. Ian Lance Taylor, Cygnus Support, December 1995. */ /* @deftypefn Replacement char* xstrdup (const char *@var{s}) Duplicates a character string without fail, using @code{xmalloc} to obtain memory. @end deftypefn */ #include #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_STRING_H #include #else # ifdef HAVE_STRINGS_H # include # endif #endif #include "ansidecl.h" #include "libiberty.h" char * xstrdup (const char *s) { register size_t len = strlen (s) + 1; register char *ret = XNEWVEC (char, len); return (char *) memcpy (ret, s, len); } nescc-1.3.4/libiberty/xstrerror.c000066400000000000000000000037661177770303300170410ustar00rootroot00000000000000/* xstrerror.c -- jacket routine for more robust strerror() usage. Fri Jun 16 18:30:00 1995 Pat Rankin This code is in the public domain. */ /* @deftypefn Replacement char* xstrerror (int @var{errnum}) Behaves exactly like the standard @code{strerror} function, but will never return a @code{NULL} pointer. @end deftypefn */ #include #include "config.h" #include "libiberty.h" #ifdef VMS # include # if !defined (__STRICT_ANSI__) && !defined (__HIDE_FORBIDDEN_NAMES) # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ extern char *strerror (int,...); # define DONT_DECLARE_STRERROR # ifdef __cplusplus } # endif /* __cplusplus */ # endif #endif /* VMS */ #ifndef DONT_DECLARE_STRERROR # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ extern char *strerror (int); # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* If strerror returns NULL, we'll format the number into a static buffer. */ #define ERRSTR_FMT "undocumented error #%d" static char xstrerror_buf[sizeof ERRSTR_FMT + 20]; /* Like strerror, but result is never a null pointer. */ char * xstrerror (int errnum) { char *errstr; #ifdef VMS char *(*vmslib_strerror) (int,...); /* Override any possibly-conflicting declaration from system header. */ vmslib_strerror = (char *(*) (int,...)) strerror; /* Second argument matters iff first is EVMSERR, but it's simpler to pass it unconditionally. `vaxc$errno' is declared in and maintained by the run-time library in parallel to `errno'. We assume that `errnum' corresponds to the last value assigned to errno by the run-time library, hence vaxc$errno will be relevant. */ errstr = (*vmslib_strerror) (errnum, vaxc$errno); #else errstr = strerror (errnum); #endif /* If `errnum' is out of range, result might be NULL. We'll fix that. */ if (!errstr) { sprintf (xstrerror_buf, ERRSTR_FMT, errnum); errstr = xstrerror_buf; } return errstr; } nescc-1.3.4/libiberty/xstrndup.c000066400000000000000000000031341177770303300166430ustar00rootroot00000000000000/* Implement the xstrndup function. Copyright (C) 2005 Free Software Foundation, Inc. Written by Kaveh R. Ghazi . This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Libiberty 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with libiberty; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ /* @deftypefn Replacement char* xstrndup (const char *@var{s}, size_t @var{n}) Returns a pointer to a copy of @var{s} with at most @var{n} characters without fail, using @code{xmalloc} to obtain memory. The result is always NUL terminated. @end deftypefn */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #ifdef HAVE_STRING_H #include #else # ifdef HAVE_STRINGS_H # include # endif #endif #include "ansidecl.h" #include "libiberty.h" char * xstrndup (const char *s, size_t n) { char *result; size_t len = strlen (s); if (n < len) len = n; result = XNEWVEC (char, len + 1); result[len] = '\0'; return (char *) memcpy (result, s, len); } nescc-1.3.4/src/000077500000000000000000000000001177770303300134115ustar00rootroot00000000000000nescc-1.3.4/src/.gdbinit000066400000000000000000000012761177770303300150400ustar00rootroot00000000000000define pname if $arg0->container printf "%s$", $arg0->container->name end if $arg0->interface printf "%s$", $arg0->interface->name end printf "%s\n", $arg0->name end define regress cd ../nregress/$arg0 end define app cd /home/dgay/motes/tinyos-1.x/apps/$arg0 end define app2 cd /home/dgay/motes/2.x/apps/$arg0 end define mrun run -_fnesc-include=tos -_fnesc-target=avr -_fnesc-no-debug -mmcu=atmega103 -DPLATFORM_MICA -DNESC=110 -I\/home/dgay/motes/tinyos-1.x/tos/platform/mica -I\/home/dgay/motes/tinyos-1.x/tos/platform/avrmote -I\/home/dgay/motes/tinyos-1.x/tos/interfaces -I\/home/dgay/motes/tinyos-1.x/tos/types -I\/home/dgay/motes/tinyos-1.x/tos/system -v $arg0 end nescc-1.3.4/src/AST.c000066400000000000000000000123041177770303300142040ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "semantics.h" #include "AST_types.c" #include "AST_list_node.c" void insert_before(node sameregion *list, node before, node n) { while (*list != before) list = &(*list)->next; *list = n; n->next = before; } unary newkind_unary(region r, AST_kind kind, location location, expression arg1) { unary obj = new_unary(r, location, arg1); obj->kind = kind; return obj; } binary newkind_binary(region r, AST_kind kind, location location, expression arg1, expression arg2) { binary obj; if (kind >= kind_assignment && kind <= postkind_assignment) /* XXX: Yuck */ obj = CAST(binary, new_assign(r, location, arg1, arg2)); else obj = new_binary(r, location, arg1, arg2); obj->kind = kind; return obj; } tag_ref newkind_tag_ref(region r, AST_kind kind, location location, word word1, attribute attributes, declaration fields, bool defined) { tag_ref obj = new_tag_ref(r, location, word1, attributes, fields, defined); obj->kind = kind; return obj; } /* The separate static version of AST_set_parent allows the qualifier check optimiser to figure out a useful signature for this function */ static void AST_set_parent(node sameregion *nptr, node parent) { (*nptr)->parent = parent; (*nptr)->parent_ptr = nptr; } void set_parent(node sameregion *nptr, node parent) { (*nptr)->parent = parent; (*nptr)->parent_ptr = nptr; } void set_parent_list(node sameregion *list, node parent) { while (*list) { set_parent(list, parent); list = &(*list)->next; } } static void AST_set_parent_list(void *vnptr, node parent); static void AST_set_parent1(node sameregion *nptr, node parent) { node n = *nptr; if (parent) AST_set_parent(nptr, parent); switch (n->kind) { /* Template: case kind_foo: { foo x = CAST(foo, n); AST_set_parent_list(&x->field1, n); AST_set_parent_list(&x->field2, n); break; } */ #include "AST_parent.c" default: assert(0); } } static void AST_set_parent_list(void *vnptr, node parent) { node sameregion *nptr = CASTSRPTR(node, vnptr); while (*nptr) { AST_set_parent1(nptr, parent); nptr = &(*nptr)->next; } } void AST_set_parents(node n) { AST_set_parent_list(&n, NULL); } node AST_clone(region r, node n) { int k = n->kind - kind_node; node copy; /* Copy all of n's field except parent, parent_ptr */ copy = typed_ralloc(r, AST_sizeof[k], AST_typeof[k]); typed_rarraycopy(copy, n, 1, AST_sizeof[k], AST_typeof[k]); copy->parent = NULL; copy->parent_ptr = NULL; return copy; } static void AST_print_list(int indent, void *vn); static void pindent(int by) { int i; for (i = 0; i < by; i++) putchar(' '); } static void AST_print1(int indent, node n) { pindent(indent); indent += 1; /* Special cases */ switch (n->kind) { case kind_identifier: { identifier x = CAST(identifier, n); printf("identifier %s\n", x->ddecl->name); return; } case kind_lexical_cst: { lexical_cst x = CAST(lexical_cst, n); printf("lexical_cst %s\n", x->cstring.data); return; } case kind_string_cst: { string_cst x = CAST(string_cst, n); printf("string_cst %s\n", x->cstring.data); return; } case kind_id_label: { id_label x = CAST(id_label, n); printf("id_label %s\n", x->cstring.data); return; } case kind_identifier_declarator: { identifier_declarator x = CAST(identifier_declarator, n); printf("identifier_declarator %s\n", x->cstring.data); return; } case kind_word: { word x = CAST(word, n); printf("word %s\n", x->cstring.data); return; } case kind_rid: { rid x = CAST(rid, n); printf("rid %s\n", rid_name(x)); return; } default: break; } switch (n->kind) { /* Template: case kind_foo: { foo x = CAST(foo, n); puts("foo\n"); pindent(indent); puts("field1:\n"); AST_print_list(indent, x->field1); pindent(indent); puts("field2:\n"); AST_print_list(indent, x->field2); break; } */ #include "AST_print.c" default: assert(0); } } static void AST_print_list(int indent, void *vn) { node n = CAST(node, vn); while (n) { AST_print1(indent, n); n = n->next; } } void AST_print(node n) { fflush(stdout); AST_print_list(0, n); fflush(stdout); } nescc-1.3.4/src/AST.h000066400000000000000000000054311177770303300142140ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef AST_H #define AST_H typedef int id_declaration_list; typedef struct typelist *typelist; typedef struct type *type; typedef struct known_cst *known_cst; typedef struct ivalue *ivalue; typedef struct edge *edge; #ifdef NODEREFINT typedef unsigned short noderef; #else struct node; typedef struct AST_node *noderef; #endif #include "sd_list.h" #include "dd_list.h" #include "graph.h" #include "dhash.h" #include "c-lex.h" #include "nesc-ndoc.h" #include "AST_types.h" #include "AST_list_node.h" #include "decls.h" #include "env.h" #include "types.h" #include "cval.h" #include "utils.h" enum { struct_type, union_type, enum_type }; typedef enum { command_call, event_signal, post_task, normal_call } nesc_call_kind; typedef enum { ATOMIC_ANY, /* atomic come what may */ ATOMIC_SINGLE, /* atomic as long as the only such operation */ NOT_ATOMIC } atomic_t; #include "AST_defs.h" #define CAST AST_CAST #define CASTPTR AST_CASTPTR #define CASTSRPTR AST_CASTSRPTR unary newkind_unary(region r, AST_kind kind, location location, expression arg1); binary newkind_binary(region r, AST_kind kind, location location, expression arg1, expression arg2); tag_ref newkind_tag_ref(region r, AST_kind kind, location location, word word1, attribute attributes, declaration fields, bool defined); void insert_before(node sameregion *list, node before, node n); void AST_set_parents(node n); void set_parent(node sameregion *nptr, node parent); void set_parent_list(node sameregion *list, node parent); node AST_clone(region r, node n); void AST_print(node n); #define AST_SET(parent, ptr, value) \ (*(ptr) = (value), (value) ? (set_parent(CASTSRPTR(node, (ptr)), CAST(node, (parent))), 0) : 0) #define AST_SET_FIELD(parent, field, value) \ AST_SET((parent), &(parent)->field, (value)) #define AST_SET_NEXT(previous, value) \ AST_SET((previous)->parent, &(previous)->next, (value)) #define AST_REPLACE(n, value) \ AST_SET((n)->parent_ptr, (n)->parent, (value)) #endif nescc-1.3.4/src/AST_defs.h000066400000000000000000001653371177770303300152310ustar00rootroot00000000000000/* Automatically generated from nodetypes.def, do not edit. */ /* See the copyright notice in nodetypes.def */ /* The common supertype of all AST nodes */ struct AST_node { /* extends nil */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; }; /* The common type of all definitions */ struct AST_declaration { /* extends node */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; }; /* The common type of all statements PARENT_LOOP: - for break and continue: the containing for/while/do-while/switch statement they escape from - for for/while/do-while: the containing for/while/do-while/switch statement CONTAINING_ATOMIC - for return statement: their containing atomic statement - for labels and looping statements, their containing atomic statement (or NULL for none). Used to check that break, continue and goto do not break in or out of an atomic statement. (Note: for nested atomic statements, CONTAINING_ATOMIC will point to a dangling node as we drop these nested statements from the AST) ISATOMIC is ATOMIC_ANY if the statement does not involve any shared variable accesses ATOMIC_SINGLE if the statement involves a single access to a shared variable, and that access is guaranteed to be atomic (e.g., a single byte) NOT_ATOMIC otherwise */ struct AST_statement { /* extends node */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; statement parent_loop; atomic_stmt containing_atomic; atomic_t isatomic; }; /* Expression nodes are subtypes of this type. LVALUE is true if this expression can be used in a context requiring an lvalue. BITFIELD is true if this lvalue is a bitfield. ISREGISTER is true if this lvalue is (declared to be) in a register. SIDE_EFFECTS is true if the expression has side effects. CST is non-null (and points to an appropriate constant) if this expression is constant. STATIC_ADDRESS is true for lvalues whose address is a constant expression CONVERTED_TO_POINTER is true for expressions which default_conversion indicates need converting to pointer type (note that these nodes did not have their type changed) CST_CHECKED is set to true once we've successfully checked this expression's constantness, and associated constant value (used to avoid duplicate error messages in repeated constant folding passes) SPELLING saves the `spelling' (a user-friendly name) of expressions used in initialisers. PARENS is TRUE if the expression is in parentheses IVALUE is a pointer to an ivalue (see init.h) holding the value of an initialiser expression. On an init_list or in an expression used as a simple initialiser (e.g., '3 + 2' in 'int x = 3 + 2'), this is the value of the initialiser. Inside these initialisers, ivalue points into the ivalue structure of the containing initialiser. CONTEXT is the usage context for this expression (see nesc-uses.h) ISATOMIC is ATOMIC_ANY if the statement does not involve any shared variable accesses ATOMIC_SINGLE if the statement involves a single access to a shared variable, and that access is guaranteed to be atomic (e.g., a single byte) NOT_ATOMIC otherwise */ struct AST_expression { /* extends node */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; }; /* A common super-type for all type-building elements (qualifiers, etc) */ struct AST_type_element { /* extends node */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; }; /* A common super-type for all declarator elements */ struct AST_declarator { /* extends node */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; }; /* A common super-type for all labels. NEXT_LABEL points to the next case or default label of a switch (for case or default labels only) */ struct AST_label { /* extends node */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; label next_label; }; /* Asm statement STMT at the top level of a file (GCC) */ struct AST_asm_decl { /* extends declaration */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; asm_stmt sameregion asm_stmt; }; /* The declaration MODIFIERS DECLS; DECLS is a list */ struct AST_data_decl { /* extends declaration */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; type_element sameregion modifiers; declaration sameregion decls; }; /* __extension__ DECL; (GCC) */ struct AST_extension_decl { /* extends declaration */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; declaration sameregion decl; }; /* A pseudo-declaration to represent ... in a function argument list */ struct AST_ellipsis_decl { /* extends declaration */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; }; /* The enumeration element CSTRING = ARG1. CSTRING is optional */ struct AST_enumerator { /* extends declaration */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; cstring cstring; expression sameregion arg1; data_declaration ddecl; }; /* CSTRING in an old-style parameter list */ struct AST_oldidentifier_decl { /* extends declaration */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; cstring cstring; data_declaration ddecl; }; /* A function declaration with body STMT OLD_PARMS is the old-style parameter declaration list. */ struct AST_function_decl { /* extends declaration */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; declarator sameregion declarator; type_element sameregion modifiers; attribute sameregion attributes; declaration old_parms; statement sameregion stmt; function_decl parent_function; data_declaration ddecl; function_declarator fdeclarator; type declared_type; env undeclared_variables; env base_labels; env scoped_labels; statement current_loop; int nlocals; }; /* Used as the AST node for implicit declarations. IDENT points to the identifier node that implicitly declared the function */ struct AST_implicit_decl { /* extends declaration */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; identifier ident; }; /* Declaration of DECLARATOR ASM_STMT ATTRIBUTES = ARG1. ATTRIBUTES is a list. ASM_STMT is optional (GCC specific). ARG1 is an optional initialiser. DDECL points to the declaration for this item. DECLARED_TYPE is the type in this declaration (which may be different than that in DDECL->TYPE) FORWARD is true for parameters that are forward declarations */ struct AST_variable_decl { /* extends declaration */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; declarator sameregion declarator; attribute sameregion attributes; expression sameregion arg1; asm_stmt sameregion asm_stmt; data_declaration ddecl; type declared_type; bool forward; }; /* Declaration of field DECLARATOR ATTRIBUTES : ARG1. QUALIFIERS and ATTRIBUTEES are lists. ARG1 is an optional bitfield specifier TYPE_CHECKED is set to true once it has been checked that this field is of network type (inside network structures) FDECL is this field's declaration */ struct AST_field_decl { /* extends declaration */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; declarator sameregion declarator; attribute sameregion attributes; expression sameregion arg1; bool type_checked; field_declaration fdecl; }; /* The source-level type QUALIFIERS DECLARATOR */ struct AST_asttype { /* extends node */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; declarator sameregion declarator; type_element sameregion qualifiers; type type; }; /* typedef-type with declaration DDECL. The name is ddecl->name */ struct AST_typename { /* extends type_element */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; data_declaration ddecl; }; /* typeof ARG1 */ struct AST_typeof_expr { /* extends type_element */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; expression sameregion arg1; }; /* typeof(ASTTYPE) */ struct AST_typeof_type { /* extends type_element */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; asttype sameregion asttype; }; /* base type for gcc and nesc attributes */ struct AST_attribute { /* extends type_element */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; word sameregion word1; }; /* The (gcc) attribute WORD1(ARGS). args can be empty, and may not be semantically valid */ struct AST_gcc_attribute { /* extends attribute */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; word sameregion word1; expression sameregion args; }; /* Storage class specifier, type specifier or type qualifier ID (see RID_xxx) */ struct AST_rid { /* extends type_element */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; enum rid id; }; /* Type or function qualifier ID (see qualifiers.h and type_quals in types.h) */ struct AST_qualifier { /* extends type_element */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; enum rid id; }; /* struct/union/enum WORD1 { FIELDS; } ATTRIBUTES ATTRIBUTES and FIELDS are lists. ATTRIBUTES is GCC specific. WORD1 is optional. DEFINED is TRUE if this declaration defines the struct/union/enum. DEFINED == FALSE => FIELDS == NULL TDECL points to the internal declaration node for this type */ struct AST_tag_ref { /* extends type_element */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; word sameregion word1; attribute sameregion attributes; declaration sameregion fields; bool defined; tag_declaration tdecl; }; /* A struct */ struct AST_struct_ref { /* extends tag_ref */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; word sameregion word1; attribute sameregion attributes; declaration sameregion fields; bool defined; tag_declaration tdecl; }; /* A union */ struct AST_union_ref { /* extends tag_ref */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; word sameregion word1; attribute sameregion attributes; declaration sameregion fields; bool defined; tag_declaration tdecl; }; /* A common supertype for function/pointer/array declarator which includes the nested DECLARATOR */ struct AST_nested_declarator { /* extends declarator */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; declarator sameregion declarator; }; /* Function declarator DECLARATOR(PARMS). PARMS is a list of declarations. ENV is the environment for parms GPARMS is the list of declarations of generic parameters (commands, events only) RETURN_TYPE (optional) contains an overridden return type from nesdoc */ struct AST_function_declarator { /* extends nested_declarator */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; declarator sameregion declarator; declaration sameregion parms; declaration sameregion gparms; type_element sameregion qualifiers; environment env; asttype sameregion return_type; }; /* Pointer declarator *DECLARATOR */ struct AST_pointer_declarator { /* extends nested_declarator */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; declarator sameregion declarator; }; /* Declarator MODIFIERS DECLARATOR. The MODIFIERS are qualifiers or attributes. Note: MODIFIERS is never NULL */ struct AST_qualified_declarator { /* extends nested_declarator */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; declarator sameregion declarator; type_element sameregion modifiers; }; /* Array declarator DECLARATOR[ARG1]. ARG1 is optional */ struct AST_array_declarator { /* extends nested_declarator */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; declarator sameregion declarator; expression sameregion arg1; }; /* Declaration of CSTRING */ struct AST_identifier_declarator { /* extends declarator */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; cstring cstring; }; /* The statement asm QUALIFIERS (ARG1 : ASM_OPERANDS1 : ASM_OPERANDS2 : ASM_CLOBBERS) where ASM_OPERANDS1, ASM_OPERANDS2, QUALIFIERS are optional, ASM_CLOBBERS is a list (GCC) */ struct AST_asm_stmt { /* extends statement */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; statement parent_loop; atomic_stmt containing_atomic; atomic_t isatomic; expression sameregion arg1; asm_operand sameregion asm_operands1; asm_operand sameregion asm_operands2; string sameregion asm_clobbers; type_element sameregion qualifiers; }; /* { ID_LABELS DECLS STMTS }. The ID_LABELS are GCC-specific. ID_LABELS, DECLS, STMTS are lists ENV is the environment for the block */ struct AST_compound_stmt { /* extends statement */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; statement parent_loop; atomic_stmt containing_atomic; atomic_t isatomic; id_label sameregion id_labels; declaration sameregion decls; statement sameregion stmts; environment env; }; /* IF (CONDITION) STMT1 ELSE STMT2. STMT2 is optional */ struct AST_if_stmt { /* extends statement */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; statement parent_loop; atomic_stmt containing_atomic; atomic_t isatomic; expression sameregion condition; statement sameregion stmt1; statement sameregion stmt2; }; /* LABEL: STMT */ struct AST_labeled_stmt { /* extends statement */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; statement parent_loop; atomic_stmt containing_atomic; atomic_t isatomic; label sameregion label; statement sameregion stmt; }; /* EXPR; */ struct AST_expression_stmt { /* extends statement */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; statement parent_loop; atomic_stmt containing_atomic; atomic_t isatomic; expression sameregion arg1; }; /* Basic type for all conditional statements */ struct AST_conditional_stmt { /* extends statement */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; statement parent_loop; atomic_stmt containing_atomic; atomic_t isatomic; expression sameregion condition; statement sameregion stmt; }; /* SWITCH (CONDITION) STMT. NEXT_LABEL points to the switches first label */ struct AST_switch_stmt { /* extends conditional_stmt */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; statement parent_loop; atomic_stmt containing_atomic; atomic_t isatomic; expression sameregion condition; statement sameregion stmt; label next_label; }; /* FOR (ARG1; ARG2; ARG3) STMT. ARG1, ARG2, ARG3 are optional */ struct AST_for_stmt { /* extends statement */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; statement parent_loop; atomic_stmt containing_atomic; atomic_t isatomic; expression sameregion arg1; expression sameregion arg2; expression sameregion arg3; statement sameregion stmt; }; /* BREAK; */ struct AST_break_stmt { /* extends statement */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; statement parent_loop; atomic_stmt containing_atomic; atomic_t isatomic; }; /* CONTINUE; */ struct AST_continue_stmt { /* extends statement */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; statement parent_loop; atomic_stmt containing_atomic; atomic_t isatomic; }; /* RETURN ARG1. ARG1 is optional */ struct AST_return_stmt { /* extends statement */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; statement parent_loop; atomic_stmt containing_atomic; atomic_t isatomic; expression sameregion arg1; }; /* GOTO ID_LABEL */ struct AST_goto_stmt { /* extends statement */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; statement parent_loop; atomic_stmt containing_atomic; atomic_t isatomic; id_label sameregion id_label; }; /* GOTO *ARG1 (GCC) */ struct AST_computed_goto_stmt { /* extends statement */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; statement parent_loop; atomic_stmt containing_atomic; atomic_t isatomic; expression sameregion arg1; }; /* ; */ struct AST_empty_stmt { /* extends statement */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; statement parent_loop; atomic_stmt containing_atomic; atomic_t isatomic; }; /* Unary expression nodes, kind defines operator */ struct AST_unary { /* extends expression */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; expression sameregion arg1; }; /* Binary expression nodes, kind defines operator */ struct AST_binary { /* extends expression */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; expression sameregion arg1; expression sameregion arg2; }; /* A comma separated list of expressions ARG1 */ struct AST_comma { /* extends expression */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; expression sameregion arg1; }; /* sizeof (ASTTYPE) */ struct AST_sizeof_type { /* extends expression */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; asttype sameregion asttype; }; /* __alignof (ASTTYPE) (GCC) */ struct AST_alignof_type { /* extends expression */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; asttype sameregion asttype; }; /* &&ID_LABEL (GCC) */ struct AST_label_address { /* extends expression */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; id_label sameregion id_label; }; /* (ASTTYPE)ARG1 */ struct AST_cast { /* extends unary */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; expression sameregion arg1; asttype sameregion asttype; }; /* (ASTTYPE){INIT_EXPR} (GCC) */ struct AST_cast_list { /* extends expression */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; asttype sameregion asttype; expression sameregion init_expr; }; /* CONDITION ? ARG1 : ARG2 GCC specific: ARG1 is optional */ struct AST_conditional { /* extends expression */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; expression sameregion condition; expression sameregion arg1; expression sameregion arg2; }; /* The identrifier CSTRING DEAD_USE is true for identifiers used as the target of a regular assignment */ struct AST_identifier { /* extends expression */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; cstring cstring; data_declaration ddecl; }; /* ({stmt}) (GCC) */ struct AST_compound_expr { /* extends expression */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; statement sameregion stmt; }; /* ARG1(ARGS). ARGS is a list of expressions If VA_ARG_CALL is non-null, this is actually a call to the pseudo-function __builtin_va_arg(args, va_arg_call) (where va_arg_call is a type). In this case arg1 is a dummy identifier. CALL_KIND is one of normal_call, post_task, command_call or event_signal. */ struct AST_function_call { /* extends expression */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; expression sameregion arg1; expression sameregion args; asttype va_arg_call; nesc_call_kind call_kind; }; /* ARG1.CSTRING The field_declaration is saved in FDECL */ struct AST_field_ref { /* extends unary */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; expression sameregion arg1; cstring cstring; field_declaration fdecl; }; /* parent for increment nodes */ struct AST_increment { /* extends unary */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; expression sameregion arg1; data_declaration temp1; data_declaration temp2; }; /* binary comparison ops */ struct AST_comparison { /* extends binary */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; expression sameregion arg1; expression sameregion arg2; }; /* ARG1 ARG2 */ struct AST_assignment { /* extends binary */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; expression sameregion arg1; expression sameregion arg2; data_declaration temp1; }; /* { ARGS }. ARGS is a list of expressions The type of the init_list is the type of the initialised entity. If this entity is an incomplete array type, the type of the init_list is the actual array size deduced from the initialiser. */ struct AST_init_list { /* extends expression */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; expression sameregion args; }; /* DESIGNATOR = INIT_EXPR in an init_list. DESIGNATOR is a list The type is not set in init_specific nodes */ struct AST_init_specific { /* extends expression */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; designator sameregion designator; expression sameregion init_expr; }; /* Base type for designators */ struct AST_designator { /* extends node */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; }; /* . CSTRING in an initialisation designator */ struct AST_designate_field { /* extends designator */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; cstring cstring; }; /* [ARG1] or [ARG1 ... ARG2] in a designator. ARG2 is optional. ARG2 is a GCC extension */ struct AST_designate_index { /* extends designator */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; expression sameregion arg1; expression sameregion arg2; }; /* A constant represented as in its unparsed lexical form CSTRING. These appear in the AST. */ struct AST_lexical_cst { /* extends expression */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; cstring cstring; }; /* A single lexical string - a sequence of these gets concatenated to form a string. The source form of the constant can be found in CSTRING. */ struct AST_string_cst { /* extends lexical_cst */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; cstring cstring; }; /* A list of STRINGS forming a single string constant. DDECL is the magic_string declaration for this string. */ struct AST_string { /* extends expression */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; string_cst sameregion strings; data_declaration ddecl; }; /* The label CSTRING: */ struct AST_id_label { /* extends label */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; label next_label; cstring cstring; label_declaration ldecl; }; /* CASE ARG1 ... ARG2: ARG2 is optional, it's presence is GCC-specific */ struct AST_case_label { /* extends label */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; label next_label; expression sameregion arg1; expression sameregion arg2; }; /* DEFAULT: */ struct AST_default_label { /* extends label */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; label next_label; }; /* The identifier CSTRING used uninterpreted */ struct AST_word { /* extends node */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; cstring cstring; }; /* STRING(EXPR) or [WORD1] STRING(EXPR) (GCC) */ struct AST_asm_operand { /* extends node */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; word sameregion word1; string sameregion string; expression sameregion arg1; }; /* a supertype for interface/component declarations of WORD1 CDECL is the declaration for this interface/component ATTRIBUTES are its attributes */ struct AST_nesc_decl { /* extends declaration */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; word sameregion word1; attribute sameregion attributes; nesc_declaration cdecl; }; /* interface WORD1 { DECLS } */ struct AST_interface { /* extends nesc_decl */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; word sameregion word1; attribute sameregion attributes; nesc_declaration cdecl; declaration sameregion decls; }; /* ABSTRACT configuration/module WORD1 PARMS { DECLS } IMPLEMENTATION If ABSTRACT is true, this is a generic component, and PARMS is its parameters. */ struct AST_component { /* extends nesc_decl */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; word sameregion word1; attribute sameregion attributes; nesc_declaration cdecl; bool abstract; declaration sameregion parms; declaration sameregion decls; implementation sameregion implementation; }; /* a base type for module and configuration implementations IENV is the implementation's environment CDECL is the declaration for this component */ struct AST_implementation { /* extends node */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; environment ienv; nesc_declaration cdecl; }; /* configuration implementation { DECLS } where DECLS include regular declarations, component_refs and connections */ struct AST_configuration { /* extends implementation */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; environment ienv; nesc_declaration cdecl; declaration sameregion decls; }; /* module implementation { DECLS }' */ struct AST_module { /* extends implementation */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; environment ienv; nesc_declaration cdecl; declaration sameregion decls; }; /* binary component implementation placeholder */ struct AST_binary_component { /* extends implementation */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; environment ienv; nesc_declaration cdecl; }; /* a required or provided function or interface declaration (DECL is either a data_decl or an interface_ref). REQUIRED is true for 'requires', false for 'provides' clauses */ struct AST_rp_interface { /* extends declaration */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool required; declaration sameregion decls; }; /* an interface which is required or provided by a component: interface WORD1 < ARGS > WORD2 [ GPARMS ] ATTRIBUTES ARGS is a list of type_arguments for template interfaces WORD2 is optional, GPARMS, ARGS, ATTRIBUTES are optional */ struct AST_interface_ref { /* extends declaration */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; word sameregion word1; expression sameregion args; word sameregion word2; declaration sameregion gparms; attribute sameregion attributes; data_declaration ddecl; }; /* a reference to component WORD1 'as' WORD2 WORD2 is optional ABSTRACT is true for abstract component instantiations, false otherwise ARGS is the argument list for abstract component instantiations CDECL is filled in to point to the loaded component */ struct AST_component_ref { /* extends declaration */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; word sameregion word1; word sameregion word2; bool abstract; expression sameregion args; nesc_declaration cdecl; }; /* A connection between interfaces EP1 and EP2 */ struct AST_connection { /* extends declaration */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; endpoint sameregion ep1; endpoint sameregion ep2; }; /* a list of parameterised_identifier in IDS */ struct AST_endpoint { /* extends node */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; parameterised_identifier sameregion ids; }; /* WORD1[ARGS] if ARGS != null, just WORD1 otherwise */ struct AST_parameterised_identifier { /* extends node */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; word sameregion word1; expression sameregion args; }; /* parameterised declaration DECLARATOR [ PARMS ] */ struct AST_generic_declarator { /* extends declarator */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; declarator sameregion declarator; declaration sameregion parms; }; /* ARG1[ARGS]. ARGS is a list of expressions, ARG1 is a generic function */ struct AST_generic_call { /* extends expression */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; expression sameregion arg1; expression sameregion args; }; /* WORD1 . DECLARATOR in a declarator (for defining commands, events in component implementations For now at least, DECLARATOR is always an identifier_declarator */ struct AST_interface_ref_declarator { /* extends nested_declarator */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; declarator sameregion declarator; word sameregion word1; }; /* ARG1.CSTRING where ARG1 is an interface_ref. DDECL is the command or event's declaration */ struct AST_interface_deref { /* extends unary */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; expression sameregion arg1; cstring cstring; data_declaration ddecl; }; /* ARG1.CSTRING where ARG1 is a component_ref. component_deref is *not* used for references to typedefed types in components. DDECL is the specification element's declaration */ struct AST_component_deref { /* extends unary */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; expression sameregion arg1; cstring cstring; data_declaration ddecl; }; /* CSTRING . typedef-name, a typedef-from-component-type with declaration DDECL. The typedef-name is in ddecl->name */ struct AST_component_typeref { /* extends typename */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; data_declaration ddecl; cstring cstring; }; /* ATOMIC stmt An atomic_stmt is not made for lexically nested atomic statements */ struct AST_atomic_stmt { /* extends statement */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; statement parent_loop; atomic_stmt containing_atomic; atomic_t isatomic; statement sameregion stmt; }; /* @WORD1(ARG1), a nesC attribute. ARG1 is an init_list. TDECL is the reference to the declaration of attribute WORD1 */ struct AST_nesc_attribute { /* extends attribute */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; word sameregion word1; expression sameregion arg1; tag_declaration tdecl; }; /* A declaration of type parameter CSTRING */ struct AST_type_parm_decl { /* extends declaration */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; cstring cstring; data_declaration ddecl; }; /* ASTTYPE used as a template argument */ struct AST_type_argument { /* extends expression */ AST_kind kind; location location; node sameregion next; node sameregion parent; node sameregion *sameregion parent_ptr; node instantiation; bool lvalue; bool side_effects; known_cst cst; bool bitfield; bool isregister; type type; known_cst static_address; bool converted_to_pointer; bool cst_checked; const char * spelling; bool parens; ivalue ivalue; context context; atomic_t isatomic; asttype sameregion asttype; }; node new_node(region r, location location); declaration new_declaration(region r, location location); statement new_statement(region r, location location); expression new_expression(region r, location location); type_element new_type_element(region r, location location); declarator new_declarator(region r, location location); label new_label(region r, location location); asm_decl new_asm_decl(region r, location location, asm_stmt asm_stmt); data_decl new_data_decl(region r, location location, type_element modifiers, declaration decls); extension_decl new_extension_decl(region r, location location, declaration decl); ellipsis_decl new_ellipsis_decl(region r, location location); enumerator new_enumerator(region r, location location, cstring cstring, expression arg1, data_declaration ddecl); oldidentifier_decl new_oldidentifier_decl(region r, location location, cstring cstring, data_declaration ddecl); function_decl new_function_decl(region r, location location, declarator declarator, type_element modifiers, attribute attributes, declaration old_parms, statement stmt, function_decl parent_function, data_declaration ddecl); implicit_decl new_implicit_decl(region r, location location, identifier ident); variable_decl new_variable_decl(region r, location location, declarator declarator, attribute attributes, expression arg1, asm_stmt asm_stmt, data_declaration ddecl); field_decl new_field_decl(region r, location location, declarator declarator, attribute attributes, expression arg1); asttype new_asttype(region r, location location, declarator declarator, type_element qualifiers); typename new_typename(region r, location location, data_declaration ddecl); typeof_expr new_typeof_expr(region r, location location, expression arg1); typeof_type new_typeof_type(region r, location location, asttype asttype); attribute new_attribute(region r, location location, word word1); gcc_attribute new_gcc_attribute(region r, location location, word word1, expression args); rid new_rid(region r, location location, enum rid id); qualifier new_qualifier(region r, location location, enum rid id); tag_ref new_tag_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined); struct_ref new_struct_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined); union_ref new_union_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined); nested_declarator new_nested_declarator(region r, location location, declarator declarator); function_declarator new_function_declarator(region r, location location, declarator declarator, declaration parms, declaration gparms, type_element qualifiers, environment env); pointer_declarator new_pointer_declarator(region r, location location, declarator declarator); qualified_declarator new_qualified_declarator(region r, location location, declarator declarator, type_element modifiers); array_declarator new_array_declarator(region r, location location, declarator declarator, expression arg1); identifier_declarator new_identifier_declarator(region r, location location, cstring cstring); asm_stmt new_asm_stmt(region r, location location, expression arg1, asm_operand asm_operands1, asm_operand asm_operands2, string asm_clobbers, type_element qualifiers); compound_stmt new_compound_stmt(region r, location location, id_label id_labels, declaration decls, statement stmts, environment env); if_stmt new_if_stmt(region r, location location, expression condition, statement stmt1, statement stmt2); labeled_stmt new_labeled_stmt(region r, location location, label label, statement stmt); expression_stmt new_expression_stmt(region r, location location, expression arg1); conditional_stmt new_conditional_stmt(region r, location location, expression condition, statement stmt); switch_stmt new_switch_stmt(region r, location location, expression condition, statement stmt); for_stmt new_for_stmt(region r, location location, expression arg1, expression arg2, expression arg3, statement stmt); break_stmt new_break_stmt(region r, location location); continue_stmt new_continue_stmt(region r, location location); return_stmt new_return_stmt(region r, location location, expression arg1); goto_stmt new_goto_stmt(region r, location location, id_label id_label); computed_goto_stmt new_computed_goto_stmt(region r, location location, expression arg1); empty_stmt new_empty_stmt(region r, location location); unary new_unary(region r, location location, expression arg1); binary new_binary(region r, location location, expression arg1, expression arg2); comma new_comma(region r, location location, expression arg1); sizeof_type new_sizeof_type(region r, location location, asttype asttype); alignof_type new_alignof_type(region r, location location, asttype asttype); label_address new_label_address(region r, location location, id_label id_label); cast new_cast(region r, location location, expression arg1, asttype asttype); cast_list new_cast_list(region r, location location, asttype asttype, expression init_expr); conditional new_conditional(region r, location location, expression condition, expression arg1, expression arg2); identifier new_identifier(region r, location location, cstring cstring, data_declaration ddecl); compound_expr new_compound_expr(region r, location location, statement stmt); function_call new_function_call(region r, location location, expression arg1, expression args, asttype va_arg_call, nesc_call_kind call_kind); field_ref new_field_ref(region r, location location, expression arg1, cstring cstring); increment new_increment(region r, location location, expression arg1); comparison new_comparison(region r, location location, expression arg1, expression arg2); assignment new_assignment(region r, location location, expression arg1, expression arg2); init_list new_init_list(region r, location location, expression args); init_specific new_init_specific(region r, location location, designator designator, expression init_expr); designator new_designator(region r, location location); designate_field new_designate_field(region r, location location, cstring cstring); designate_index new_designate_index(region r, location location, expression arg1, expression arg2); lexical_cst new_lexical_cst(region r, location location, cstring cstring); string_cst new_string_cst(region r, location location, cstring cstring); string new_string(region r, location location, string_cst strings, data_declaration ddecl); id_label new_id_label(region r, location location, cstring cstring); case_label new_case_label(region r, location location, expression arg1, expression arg2); default_label new_default_label(region r, location location); word new_word(region r, location location, cstring cstring); asm_operand new_asm_operand(region r, location location, word word1, string string, expression arg1); nesc_decl new_nesc_decl(region r, location location, word word1, attribute attributes); interface new_interface(region r, location location, word word1, attribute attributes, declaration decls); component new_component(region r, location location, word word1, attribute attributes, bool abstract, declaration parms, declaration decls, implementation implementation); implementation new_implementation(region r, location location, environment ienv); configuration new_configuration(region r, location location, environment ienv, declaration decls); module new_module(region r, location location, environment ienv, declaration decls); binary_component new_binary_component(region r, location location, environment ienv); rp_interface new_rp_interface(region r, location location, bool required, declaration decls); interface_ref new_interface_ref(region r, location location, word word1, expression args, word word2, declaration gparms, attribute attributes, data_declaration ddecl); component_ref new_component_ref(region r, location location, word word1, word word2, bool abstract, expression args); connection new_connection(region r, location location, endpoint ep1, endpoint ep2); endpoint new_endpoint(region r, location location, parameterised_identifier ids); parameterised_identifier new_parameterised_identifier(region r, location location, word word1, expression args); generic_declarator new_generic_declarator(region r, location location, declarator declarator, declaration parms); generic_call new_generic_call(region r, location location, expression arg1, expression args); interface_ref_declarator new_interface_ref_declarator(region r, location location, declarator declarator, word word1); interface_deref new_interface_deref(region r, location location, expression arg1, cstring cstring, data_declaration ddecl); component_deref new_component_deref(region r, location location, expression arg1, cstring cstring, data_declaration ddecl); component_typeref new_component_typeref(region r, location location, data_declaration ddecl, cstring cstring); atomic_stmt new_atomic_stmt(region r, location location, statement stmt); nesc_attribute new_nesc_attribute(region r, location location, word word1, expression arg1); type_parm_decl new_type_parm_decl(region r, location location, cstring cstring, data_declaration ddecl); type_argument new_type_argument(region r, location location, asttype asttype); error_decl new_error_decl(region r, location location); attribute_ref new_attribute_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined); enum_ref new_enum_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined); error_stmt new_error_stmt(region r, location location); while_stmt new_while_stmt(region r, location location, expression condition, statement stmt); dowhile_stmt new_dowhile_stmt(region r, location location, expression condition, statement stmt); error_expr new_error_expr(region r, location location); array_ref new_array_ref(region r, location location, expression arg1, expression arg2); dereference new_dereference(region r, location location, expression arg1); extension_expr new_extension_expr(region r, location location, expression arg1); sizeof_expr new_sizeof_expr(region r, location location, expression arg1); alignof_expr new_alignof_expr(region r, location location, expression arg1); realpart new_realpart(region r, location location, expression arg1); imagpart new_imagpart(region r, location location, expression arg1); address_of new_address_of(region r, location location, expression arg1); unary_minus new_unary_minus(region r, location location, expression arg1); unary_plus new_unary_plus(region r, location location, expression arg1); conjugate new_conjugate(region r, location location, expression arg1); bitnot new_bitnot(region r, location location, expression arg1); not new_not(region r, location location, expression arg1); preincrement new_preincrement(region r, location location, expression arg1); predecrement new_predecrement(region r, location location, expression arg1); postincrement new_postincrement(region r, location location, expression arg1); postdecrement new_postdecrement(region r, location location, expression arg1); plus new_plus(region r, location location, expression arg1, expression arg2); minus new_minus(region r, location location, expression arg1, expression arg2); times new_times(region r, location location, expression arg1, expression arg2); divide new_divide(region r, location location, expression arg1, expression arg2); modulo new_modulo(region r, location location, expression arg1, expression arg2); lshift new_lshift(region r, location location, expression arg1, expression arg2); rshift new_rshift(region r, location location, expression arg1, expression arg2); leq new_leq(region r, location location, expression arg1, expression arg2); geq new_geq(region r, location location, expression arg1, expression arg2); lt new_lt(region r, location location, expression arg1, expression arg2); gt new_gt(region r, location location, expression arg1, expression arg2); eq new_eq(region r, location location, expression arg1, expression arg2); ne new_ne(region r, location location, expression arg1, expression arg2); bitand new_bitand(region r, location location, expression arg1, expression arg2); bitor new_bitor(region r, location location, expression arg1, expression arg2); bitxor new_bitxor(region r, location location, expression arg1, expression arg2); andand new_andand(region r, location location, expression arg1, expression arg2); oror new_oror(region r, location location, expression arg1, expression arg2); assign new_assign(region r, location location, expression arg1, expression arg2); plus_assign new_plus_assign(region r, location location, expression arg1, expression arg2); minus_assign new_minus_assign(region r, location location, expression arg1, expression arg2); times_assign new_times_assign(region r, location location, expression arg1, expression arg2); divide_assign new_divide_assign(region r, location location, expression arg1, expression arg2); modulo_assign new_modulo_assign(region r, location location, expression arg1, expression arg2); lshift_assign new_lshift_assign(region r, location location, expression arg1, expression arg2); rshift_assign new_rshift_assign(region r, location location, expression arg1, expression arg2); bitand_assign new_bitand_assign(region r, location location, expression arg1, expression arg2); bitor_assign new_bitor_assign(region r, location location, expression arg1, expression arg2); bitxor_assign new_bitxor_assign(region r, location location, expression arg1, expression arg2); rp_connection new_rp_connection(region r, location location, endpoint ep1, endpoint ep2); eq_connection new_eq_connection(region r, location location, endpoint ep1, endpoint ep2); nx_struct_ref new_nx_struct_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined); nx_union_ref new_nx_union_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined); target_attribute new_target_attribute(region r, location location, word word1, expression args); nescc-1.3.4/src/AST_list_node.c000066400000000000000000000540331177770303300162510ustar00rootroot00000000000000/* Automatically generated from nodetypes.def, do not edit. */ /* See the copyright notice in nodetypes.def */ node AST_node_last(node l){ if (!l) return NULL; while (l->next) l = l->next; return l; } node AST_node_chain(node l1, node l2){ if (!l1) return l2; AST_node_last(l1)->next = l2; return l1; } int AST_node_length(node l){ int len = 0; while (l) { l = l->next; len++; } return len; } node AST_node_reverse(node l){ node last = NULL, next; for (;;) { if (!l) return last; next = l->next; l->next = last; last = l; l = next; } } node node_chain(node l1, node l2) { return CAST(node, AST_node_chain(CAST(node, l1), CAST(node, l2))); } declaration declaration_chain(declaration l1, declaration l2) { return CAST(declaration, AST_node_chain(CAST(node, l1), CAST(node, l2))); } statement statement_chain(statement l1, statement l2) { return CAST(statement, AST_node_chain(CAST(node, l1), CAST(node, l2))); } expression expression_chain(expression l1, expression l2) { return CAST(expression, AST_node_chain(CAST(node, l1), CAST(node, l2))); } type_element type_element_chain(type_element l1, type_element l2) { return CAST(type_element, AST_node_chain(CAST(node, l1), CAST(node, l2))); } declarator declarator_chain(declarator l1, declarator l2) { return CAST(declarator, AST_node_chain(CAST(node, l1), CAST(node, l2))); } label label_chain(label l1, label l2) { return CAST(label, AST_node_chain(CAST(node, l1), CAST(node, l2))); } asm_decl asm_decl_chain(asm_decl l1, asm_decl l2) { return CAST(asm_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); } data_decl data_decl_chain(data_decl l1, data_decl l2) { return CAST(data_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); } extension_decl extension_decl_chain(extension_decl l1, extension_decl l2) { return CAST(extension_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); } ellipsis_decl ellipsis_decl_chain(ellipsis_decl l1, ellipsis_decl l2) { return CAST(ellipsis_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); } enumerator enumerator_chain(enumerator l1, enumerator l2) { return CAST(enumerator, AST_node_chain(CAST(node, l1), CAST(node, l2))); } oldidentifier_decl oldidentifier_decl_chain(oldidentifier_decl l1, oldidentifier_decl l2) { return CAST(oldidentifier_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); } function_decl function_decl_chain(function_decl l1, function_decl l2) { return CAST(function_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); } implicit_decl implicit_decl_chain(implicit_decl l1, implicit_decl l2) { return CAST(implicit_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); } variable_decl variable_decl_chain(variable_decl l1, variable_decl l2) { return CAST(variable_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); } field_decl field_decl_chain(field_decl l1, field_decl l2) { return CAST(field_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); } asttype asttype_chain(asttype l1, asttype l2) { return CAST(asttype, AST_node_chain(CAST(node, l1), CAST(node, l2))); } typename typename_chain(typename l1, typename l2) { return CAST(typename, AST_node_chain(CAST(node, l1), CAST(node, l2))); } typeof_expr typeof_expr_chain(typeof_expr l1, typeof_expr l2) { return CAST(typeof_expr, AST_node_chain(CAST(node, l1), CAST(node, l2))); } typeof_type typeof_type_chain(typeof_type l1, typeof_type l2) { return CAST(typeof_type, AST_node_chain(CAST(node, l1), CAST(node, l2))); } attribute attribute_chain(attribute l1, attribute l2) { return CAST(attribute, AST_node_chain(CAST(node, l1), CAST(node, l2))); } gcc_attribute gcc_attribute_chain(gcc_attribute l1, gcc_attribute l2) { return CAST(gcc_attribute, AST_node_chain(CAST(node, l1), CAST(node, l2))); } rid rid_chain(rid l1, rid l2) { return CAST(rid, AST_node_chain(CAST(node, l1), CAST(node, l2))); } qualifier qualifier_chain(qualifier l1, qualifier l2) { return CAST(qualifier, AST_node_chain(CAST(node, l1), CAST(node, l2))); } tag_ref tag_ref_chain(tag_ref l1, tag_ref l2) { return CAST(tag_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); } struct_ref struct_ref_chain(struct_ref l1, struct_ref l2) { return CAST(struct_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); } union_ref union_ref_chain(union_ref l1, union_ref l2) { return CAST(union_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); } nested_declarator nested_declarator_chain(nested_declarator l1, nested_declarator l2) { return CAST(nested_declarator, AST_node_chain(CAST(node, l1), CAST(node, l2))); } function_declarator function_declarator_chain(function_declarator l1, function_declarator l2) { return CAST(function_declarator, AST_node_chain(CAST(node, l1), CAST(node, l2))); } pointer_declarator pointer_declarator_chain(pointer_declarator l1, pointer_declarator l2) { return CAST(pointer_declarator, AST_node_chain(CAST(node, l1), CAST(node, l2))); } qualified_declarator qualified_declarator_chain(qualified_declarator l1, qualified_declarator l2) { return CAST(qualified_declarator, AST_node_chain(CAST(node, l1), CAST(node, l2))); } array_declarator array_declarator_chain(array_declarator l1, array_declarator l2) { return CAST(array_declarator, AST_node_chain(CAST(node, l1), CAST(node, l2))); } identifier_declarator identifier_declarator_chain(identifier_declarator l1, identifier_declarator l2) { return CAST(identifier_declarator, AST_node_chain(CAST(node, l1), CAST(node, l2))); } asm_stmt asm_stmt_chain(asm_stmt l1, asm_stmt l2) { return CAST(asm_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } compound_stmt compound_stmt_chain(compound_stmt l1, compound_stmt l2) { return CAST(compound_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } if_stmt if_stmt_chain(if_stmt l1, if_stmt l2) { return CAST(if_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } labeled_stmt labeled_stmt_chain(labeled_stmt l1, labeled_stmt l2) { return CAST(labeled_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } expression_stmt expression_stmt_chain(expression_stmt l1, expression_stmt l2) { return CAST(expression_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } conditional_stmt conditional_stmt_chain(conditional_stmt l1, conditional_stmt l2) { return CAST(conditional_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } switch_stmt switch_stmt_chain(switch_stmt l1, switch_stmt l2) { return CAST(switch_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } for_stmt for_stmt_chain(for_stmt l1, for_stmt l2) { return CAST(for_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } break_stmt break_stmt_chain(break_stmt l1, break_stmt l2) { return CAST(break_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } continue_stmt continue_stmt_chain(continue_stmt l1, continue_stmt l2) { return CAST(continue_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } return_stmt return_stmt_chain(return_stmt l1, return_stmt l2) { return CAST(return_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } goto_stmt goto_stmt_chain(goto_stmt l1, goto_stmt l2) { return CAST(goto_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } computed_goto_stmt computed_goto_stmt_chain(computed_goto_stmt l1, computed_goto_stmt l2) { return CAST(computed_goto_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } empty_stmt empty_stmt_chain(empty_stmt l1, empty_stmt l2) { return CAST(empty_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } unary unary_chain(unary l1, unary l2) { return CAST(unary, AST_node_chain(CAST(node, l1), CAST(node, l2))); } binary binary_chain(binary l1, binary l2) { return CAST(binary, AST_node_chain(CAST(node, l1), CAST(node, l2))); } comma comma_chain(comma l1, comma l2) { return CAST(comma, AST_node_chain(CAST(node, l1), CAST(node, l2))); } sizeof_type sizeof_type_chain(sizeof_type l1, sizeof_type l2) { return CAST(sizeof_type, AST_node_chain(CAST(node, l1), CAST(node, l2))); } alignof_type alignof_type_chain(alignof_type l1, alignof_type l2) { return CAST(alignof_type, AST_node_chain(CAST(node, l1), CAST(node, l2))); } label_address label_address_chain(label_address l1, label_address l2) { return CAST(label_address, AST_node_chain(CAST(node, l1), CAST(node, l2))); } cast cast_chain(cast l1, cast l2) { return CAST(cast, AST_node_chain(CAST(node, l1), CAST(node, l2))); } cast_list cast_list_chain(cast_list l1, cast_list l2) { return CAST(cast_list, AST_node_chain(CAST(node, l1), CAST(node, l2))); } conditional conditional_chain(conditional l1, conditional l2) { return CAST(conditional, AST_node_chain(CAST(node, l1), CAST(node, l2))); } identifier identifier_chain(identifier l1, identifier l2) { return CAST(identifier, AST_node_chain(CAST(node, l1), CAST(node, l2))); } compound_expr compound_expr_chain(compound_expr l1, compound_expr l2) { return CAST(compound_expr, AST_node_chain(CAST(node, l1), CAST(node, l2))); } function_call function_call_chain(function_call l1, function_call l2) { return CAST(function_call, AST_node_chain(CAST(node, l1), CAST(node, l2))); } field_ref field_ref_chain(field_ref l1, field_ref l2) { return CAST(field_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); } increment increment_chain(increment l1, increment l2) { return CAST(increment, AST_node_chain(CAST(node, l1), CAST(node, l2))); } comparison comparison_chain(comparison l1, comparison l2) { return CAST(comparison, AST_node_chain(CAST(node, l1), CAST(node, l2))); } assignment assignment_chain(assignment l1, assignment l2) { return CAST(assignment, AST_node_chain(CAST(node, l1), CAST(node, l2))); } init_list init_list_chain(init_list l1, init_list l2) { return CAST(init_list, AST_node_chain(CAST(node, l1), CAST(node, l2))); } init_specific init_specific_chain(init_specific l1, init_specific l2) { return CAST(init_specific, AST_node_chain(CAST(node, l1), CAST(node, l2))); } designator designator_chain(designator l1, designator l2) { return CAST(designator, AST_node_chain(CAST(node, l1), CAST(node, l2))); } designate_field designate_field_chain(designate_field l1, designate_field l2) { return CAST(designate_field, AST_node_chain(CAST(node, l1), CAST(node, l2))); } designate_index designate_index_chain(designate_index l1, designate_index l2) { return CAST(designate_index, AST_node_chain(CAST(node, l1), CAST(node, l2))); } lexical_cst lexical_cst_chain(lexical_cst l1, lexical_cst l2) { return CAST(lexical_cst, AST_node_chain(CAST(node, l1), CAST(node, l2))); } string_cst string_cst_chain(string_cst l1, string_cst l2) { return CAST(string_cst, AST_node_chain(CAST(node, l1), CAST(node, l2))); } string string_chain(string l1, string l2) { return CAST(string, AST_node_chain(CAST(node, l1), CAST(node, l2))); } id_label id_label_chain(id_label l1, id_label l2) { return CAST(id_label, AST_node_chain(CAST(node, l1), CAST(node, l2))); } case_label case_label_chain(case_label l1, case_label l2) { return CAST(case_label, AST_node_chain(CAST(node, l1), CAST(node, l2))); } default_label default_label_chain(default_label l1, default_label l2) { return CAST(default_label, AST_node_chain(CAST(node, l1), CAST(node, l2))); } word word_chain(word l1, word l2) { return CAST(word, AST_node_chain(CAST(node, l1), CAST(node, l2))); } asm_operand asm_operand_chain(asm_operand l1, asm_operand l2) { return CAST(asm_operand, AST_node_chain(CAST(node, l1), CAST(node, l2))); } nesc_decl nesc_decl_chain(nesc_decl l1, nesc_decl l2) { return CAST(nesc_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); } interface interface_chain(interface l1, interface l2) { return CAST(interface, AST_node_chain(CAST(node, l1), CAST(node, l2))); } component component_chain(component l1, component l2) { return CAST(component, AST_node_chain(CAST(node, l1), CAST(node, l2))); } implementation implementation_chain(implementation l1, implementation l2) { return CAST(implementation, AST_node_chain(CAST(node, l1), CAST(node, l2))); } configuration configuration_chain(configuration l1, configuration l2) { return CAST(configuration, AST_node_chain(CAST(node, l1), CAST(node, l2))); } module module_chain(module l1, module l2) { return CAST(module, AST_node_chain(CAST(node, l1), CAST(node, l2))); } binary_component binary_component_chain(binary_component l1, binary_component l2) { return CAST(binary_component, AST_node_chain(CAST(node, l1), CAST(node, l2))); } rp_interface rp_interface_chain(rp_interface l1, rp_interface l2) { return CAST(rp_interface, AST_node_chain(CAST(node, l1), CAST(node, l2))); } interface_ref interface_ref_chain(interface_ref l1, interface_ref l2) { return CAST(interface_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); } component_ref component_ref_chain(component_ref l1, component_ref l2) { return CAST(component_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); } connection connection_chain(connection l1, connection l2) { return CAST(connection, AST_node_chain(CAST(node, l1), CAST(node, l2))); } endpoint endpoint_chain(endpoint l1, endpoint l2) { return CAST(endpoint, AST_node_chain(CAST(node, l1), CAST(node, l2))); } parameterised_identifier parameterised_identifier_chain(parameterised_identifier l1, parameterised_identifier l2) { return CAST(parameterised_identifier, AST_node_chain(CAST(node, l1), CAST(node, l2))); } generic_declarator generic_declarator_chain(generic_declarator l1, generic_declarator l2) { return CAST(generic_declarator, AST_node_chain(CAST(node, l1), CAST(node, l2))); } generic_call generic_call_chain(generic_call l1, generic_call l2) { return CAST(generic_call, AST_node_chain(CAST(node, l1), CAST(node, l2))); } interface_ref_declarator interface_ref_declarator_chain(interface_ref_declarator l1, interface_ref_declarator l2) { return CAST(interface_ref_declarator, AST_node_chain(CAST(node, l1), CAST(node, l2))); } interface_deref interface_deref_chain(interface_deref l1, interface_deref l2) { return CAST(interface_deref, AST_node_chain(CAST(node, l1), CAST(node, l2))); } component_deref component_deref_chain(component_deref l1, component_deref l2) { return CAST(component_deref, AST_node_chain(CAST(node, l1), CAST(node, l2))); } component_typeref component_typeref_chain(component_typeref l1, component_typeref l2) { return CAST(component_typeref, AST_node_chain(CAST(node, l1), CAST(node, l2))); } atomic_stmt atomic_stmt_chain(atomic_stmt l1, atomic_stmt l2) { return CAST(atomic_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } nesc_attribute nesc_attribute_chain(nesc_attribute l1, nesc_attribute l2) { return CAST(nesc_attribute, AST_node_chain(CAST(node, l1), CAST(node, l2))); } type_parm_decl type_parm_decl_chain(type_parm_decl l1, type_parm_decl l2) { return CAST(type_parm_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); } type_argument type_argument_chain(type_argument l1, type_argument l2) { return CAST(type_argument, AST_node_chain(CAST(node, l1), CAST(node, l2))); } error_decl error_decl_chain(error_decl l1, error_decl l2) { return CAST(error_decl, AST_node_chain(CAST(node, l1), CAST(node, l2))); } attribute_ref attribute_ref_chain(attribute_ref l1, attribute_ref l2) { return CAST(attribute_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); } enum_ref enum_ref_chain(enum_ref l1, enum_ref l2) { return CAST(enum_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); } error_stmt error_stmt_chain(error_stmt l1, error_stmt l2) { return CAST(error_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } while_stmt while_stmt_chain(while_stmt l1, while_stmt l2) { return CAST(while_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } dowhile_stmt dowhile_stmt_chain(dowhile_stmt l1, dowhile_stmt l2) { return CAST(dowhile_stmt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } error_expr error_expr_chain(error_expr l1, error_expr l2) { return CAST(error_expr, AST_node_chain(CAST(node, l1), CAST(node, l2))); } array_ref array_ref_chain(array_ref l1, array_ref l2) { return CAST(array_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); } dereference dereference_chain(dereference l1, dereference l2) { return CAST(dereference, AST_node_chain(CAST(node, l1), CAST(node, l2))); } extension_expr extension_expr_chain(extension_expr l1, extension_expr l2) { return CAST(extension_expr, AST_node_chain(CAST(node, l1), CAST(node, l2))); } sizeof_expr sizeof_expr_chain(sizeof_expr l1, sizeof_expr l2) { return CAST(sizeof_expr, AST_node_chain(CAST(node, l1), CAST(node, l2))); } alignof_expr alignof_expr_chain(alignof_expr l1, alignof_expr l2) { return CAST(alignof_expr, AST_node_chain(CAST(node, l1), CAST(node, l2))); } realpart realpart_chain(realpart l1, realpart l2) { return CAST(realpart, AST_node_chain(CAST(node, l1), CAST(node, l2))); } imagpart imagpart_chain(imagpart l1, imagpart l2) { return CAST(imagpart, AST_node_chain(CAST(node, l1), CAST(node, l2))); } address_of address_of_chain(address_of l1, address_of l2) { return CAST(address_of, AST_node_chain(CAST(node, l1), CAST(node, l2))); } unary_minus unary_minus_chain(unary_minus l1, unary_minus l2) { return CAST(unary_minus, AST_node_chain(CAST(node, l1), CAST(node, l2))); } unary_plus unary_plus_chain(unary_plus l1, unary_plus l2) { return CAST(unary_plus, AST_node_chain(CAST(node, l1), CAST(node, l2))); } conjugate conjugate_chain(conjugate l1, conjugate l2) { return CAST(conjugate, AST_node_chain(CAST(node, l1), CAST(node, l2))); } bitnot bitnot_chain(bitnot l1, bitnot l2) { return CAST(bitnot, AST_node_chain(CAST(node, l1), CAST(node, l2))); } not not_chain(not l1, not l2) { return CAST(not, AST_node_chain(CAST(node, l1), CAST(node, l2))); } preincrement preincrement_chain(preincrement l1, preincrement l2) { return CAST(preincrement, AST_node_chain(CAST(node, l1), CAST(node, l2))); } predecrement predecrement_chain(predecrement l1, predecrement l2) { return CAST(predecrement, AST_node_chain(CAST(node, l1), CAST(node, l2))); } postincrement postincrement_chain(postincrement l1, postincrement l2) { return CAST(postincrement, AST_node_chain(CAST(node, l1), CAST(node, l2))); } postdecrement postdecrement_chain(postdecrement l1, postdecrement l2) { return CAST(postdecrement, AST_node_chain(CAST(node, l1), CAST(node, l2))); } plus plus_chain(plus l1, plus l2) { return CAST(plus, AST_node_chain(CAST(node, l1), CAST(node, l2))); } minus minus_chain(minus l1, minus l2) { return CAST(minus, AST_node_chain(CAST(node, l1), CAST(node, l2))); } times times_chain(times l1, times l2) { return CAST(times, AST_node_chain(CAST(node, l1), CAST(node, l2))); } divide divide_chain(divide l1, divide l2) { return CAST(divide, AST_node_chain(CAST(node, l1), CAST(node, l2))); } modulo modulo_chain(modulo l1, modulo l2) { return CAST(modulo, AST_node_chain(CAST(node, l1), CAST(node, l2))); } lshift lshift_chain(lshift l1, lshift l2) { return CAST(lshift, AST_node_chain(CAST(node, l1), CAST(node, l2))); } rshift rshift_chain(rshift l1, rshift l2) { return CAST(rshift, AST_node_chain(CAST(node, l1), CAST(node, l2))); } leq leq_chain(leq l1, leq l2) { return CAST(leq, AST_node_chain(CAST(node, l1), CAST(node, l2))); } geq geq_chain(geq l1, geq l2) { return CAST(geq, AST_node_chain(CAST(node, l1), CAST(node, l2))); } lt lt_chain(lt l1, lt l2) { return CAST(lt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } gt gt_chain(gt l1, gt l2) { return CAST(gt, AST_node_chain(CAST(node, l1), CAST(node, l2))); } eq eq_chain(eq l1, eq l2) { return CAST(eq, AST_node_chain(CAST(node, l1), CAST(node, l2))); } ne ne_chain(ne l1, ne l2) { return CAST(ne, AST_node_chain(CAST(node, l1), CAST(node, l2))); } bitand bitand_chain(bitand l1, bitand l2) { return CAST(bitand, AST_node_chain(CAST(node, l1), CAST(node, l2))); } bitor bitor_chain(bitor l1, bitor l2) { return CAST(bitor, AST_node_chain(CAST(node, l1), CAST(node, l2))); } bitxor bitxor_chain(bitxor l1, bitxor l2) { return CAST(bitxor, AST_node_chain(CAST(node, l1), CAST(node, l2))); } andand andand_chain(andand l1, andand l2) { return CAST(andand, AST_node_chain(CAST(node, l1), CAST(node, l2))); } oror oror_chain(oror l1, oror l2) { return CAST(oror, AST_node_chain(CAST(node, l1), CAST(node, l2))); } assign assign_chain(assign l1, assign l2) { return CAST(assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); } plus_assign plus_assign_chain(plus_assign l1, plus_assign l2) { return CAST(plus_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); } minus_assign minus_assign_chain(minus_assign l1, minus_assign l2) { return CAST(minus_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); } times_assign times_assign_chain(times_assign l1, times_assign l2) { return CAST(times_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); } divide_assign divide_assign_chain(divide_assign l1, divide_assign l2) { return CAST(divide_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); } modulo_assign modulo_assign_chain(modulo_assign l1, modulo_assign l2) { return CAST(modulo_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); } lshift_assign lshift_assign_chain(lshift_assign l1, lshift_assign l2) { return CAST(lshift_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); } rshift_assign rshift_assign_chain(rshift_assign l1, rshift_assign l2) { return CAST(rshift_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); } bitand_assign bitand_assign_chain(bitand_assign l1, bitand_assign l2) { return CAST(bitand_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); } bitor_assign bitor_assign_chain(bitor_assign l1, bitor_assign l2) { return CAST(bitor_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); } bitxor_assign bitxor_assign_chain(bitxor_assign l1, bitxor_assign l2) { return CAST(bitxor_assign, AST_node_chain(CAST(node, l1), CAST(node, l2))); } rp_connection rp_connection_chain(rp_connection l1, rp_connection l2) { return CAST(rp_connection, AST_node_chain(CAST(node, l1), CAST(node, l2))); } eq_connection eq_connection_chain(eq_connection l1, eq_connection l2) { return CAST(eq_connection, AST_node_chain(CAST(node, l1), CAST(node, l2))); } nx_struct_ref nx_struct_ref_chain(nx_struct_ref l1, nx_struct_ref l2) { return CAST(nx_struct_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); } nx_union_ref nx_union_ref_chain(nx_union_ref l1, nx_union_ref l2) { return CAST(nx_union_ref, AST_node_chain(CAST(node, l1), CAST(node, l2))); } target_attribute target_attribute_chain(target_attribute l1, target_attribute l2) { return CAST(target_attribute, AST_node_chain(CAST(node, l1), CAST(node, l2))); } nescc-1.3.4/src/AST_list_node.h000066400000000000000000001653421177770303300162640ustar00rootroot00000000000000/* Automatically generated from nodetypes.def, do not edit. */ /* See the copyright notice in nodetypes.def */ node AST_node_last(node l); node AST_node_chain(node l1, node l2); int AST_node_length(node l); node AST_node_reverse(node l); #define node_reverse(x) CAST(node, AST_node_reverse(CAST(node, (x)))) #define node_length(x) AST_node_length(CAST(node, (x))) #define last_node(x) CAST(node, AST_node_last(CAST(node, (x)))) #define scan_node(var, list) for (var = (list); var; var = CAST(node, var->next)) #define declaration_reverse(x) CAST(declaration, AST_node_reverse(CAST(node, (x)))) #define declaration_length(x) AST_node_length(CAST(node, (x))) #define last_declaration(x) CAST(declaration, AST_node_last(CAST(node, (x)))) #define scan_declaration(var, list) for (var = (list); var; var = CAST(declaration, var->next)) #define statement_reverse(x) CAST(statement, AST_node_reverse(CAST(node, (x)))) #define statement_length(x) AST_node_length(CAST(node, (x))) #define last_statement(x) CAST(statement, AST_node_last(CAST(node, (x)))) #define scan_statement(var, list) for (var = (list); var; var = CAST(statement, var->next)) #define expression_reverse(x) CAST(expression, AST_node_reverse(CAST(node, (x)))) #define expression_length(x) AST_node_length(CAST(node, (x))) #define last_expression(x) CAST(expression, AST_node_last(CAST(node, (x)))) #define scan_expression(var, list) for (var = (list); var; var = CAST(expression, var->next)) #define type_element_reverse(x) CAST(type_element, AST_node_reverse(CAST(node, (x)))) #define type_element_length(x) AST_node_length(CAST(node, (x))) #define last_type_element(x) CAST(type_element, AST_node_last(CAST(node, (x)))) #define scan_type_element(var, list) for (var = (list); var; var = CAST(type_element, var->next)) #define declarator_reverse(x) CAST(declarator, AST_node_reverse(CAST(node, (x)))) #define declarator_length(x) AST_node_length(CAST(node, (x))) #define last_declarator(x) CAST(declarator, AST_node_last(CAST(node, (x)))) #define scan_declarator(var, list) for (var = (list); var; var = CAST(declarator, var->next)) #define label_reverse(x) CAST(label, AST_node_reverse(CAST(node, (x)))) #define label_length(x) AST_node_length(CAST(node, (x))) #define last_label(x) CAST(label, AST_node_last(CAST(node, (x)))) #define scan_label(var, list) for (var = (list); var; var = CAST(label, var->next)) #define asm_decl_reverse(x) CAST(asm_decl, AST_node_reverse(CAST(node, (x)))) #define asm_decl_length(x) AST_node_length(CAST(node, (x))) #define last_asm_decl(x) CAST(asm_decl, AST_node_last(CAST(node, (x)))) #define scan_asm_decl(var, list) for (var = (list); var; var = CAST(asm_decl, var->next)) #define data_decl_reverse(x) CAST(data_decl, AST_node_reverse(CAST(node, (x)))) #define data_decl_length(x) AST_node_length(CAST(node, (x))) #define last_data_decl(x) CAST(data_decl, AST_node_last(CAST(node, (x)))) #define scan_data_decl(var, list) for (var = (list); var; var = CAST(data_decl, var->next)) #define extension_decl_reverse(x) CAST(extension_decl, AST_node_reverse(CAST(node, (x)))) #define extension_decl_length(x) AST_node_length(CAST(node, (x))) #define last_extension_decl(x) CAST(extension_decl, AST_node_last(CAST(node, (x)))) #define scan_extension_decl(var, list) for (var = (list); var; var = CAST(extension_decl, var->next)) #define ellipsis_decl_reverse(x) CAST(ellipsis_decl, AST_node_reverse(CAST(node, (x)))) #define ellipsis_decl_length(x) AST_node_length(CAST(node, (x))) #define last_ellipsis_decl(x) CAST(ellipsis_decl, AST_node_last(CAST(node, (x)))) #define scan_ellipsis_decl(var, list) for (var = (list); var; var = CAST(ellipsis_decl, var->next)) #define enumerator_reverse(x) CAST(enumerator, AST_node_reverse(CAST(node, (x)))) #define enumerator_length(x) AST_node_length(CAST(node, (x))) #define last_enumerator(x) CAST(enumerator, AST_node_last(CAST(node, (x)))) #define scan_enumerator(var, list) for (var = (list); var; var = CAST(enumerator, var->next)) #define oldidentifier_decl_reverse(x) CAST(oldidentifier_decl, AST_node_reverse(CAST(node, (x)))) #define oldidentifier_decl_length(x) AST_node_length(CAST(node, (x))) #define last_oldidentifier_decl(x) CAST(oldidentifier_decl, AST_node_last(CAST(node, (x)))) #define scan_oldidentifier_decl(var, list) for (var = (list); var; var = CAST(oldidentifier_decl, var->next)) #define function_decl_reverse(x) CAST(function_decl, AST_node_reverse(CAST(node, (x)))) #define function_decl_length(x) AST_node_length(CAST(node, (x))) #define last_function_decl(x) CAST(function_decl, AST_node_last(CAST(node, (x)))) #define scan_function_decl(var, list) for (var = (list); var; var = CAST(function_decl, var->next)) #define implicit_decl_reverse(x) CAST(implicit_decl, AST_node_reverse(CAST(node, (x)))) #define implicit_decl_length(x) AST_node_length(CAST(node, (x))) #define last_implicit_decl(x) CAST(implicit_decl, AST_node_last(CAST(node, (x)))) #define scan_implicit_decl(var, list) for (var = (list); var; var = CAST(implicit_decl, var->next)) #define variable_decl_reverse(x) CAST(variable_decl, AST_node_reverse(CAST(node, (x)))) #define variable_decl_length(x) AST_node_length(CAST(node, (x))) #define last_variable_decl(x) CAST(variable_decl, AST_node_last(CAST(node, (x)))) #define scan_variable_decl(var, list) for (var = (list); var; var = CAST(variable_decl, var->next)) #define field_decl_reverse(x) CAST(field_decl, AST_node_reverse(CAST(node, (x)))) #define field_decl_length(x) AST_node_length(CAST(node, (x))) #define last_field_decl(x) CAST(field_decl, AST_node_last(CAST(node, (x)))) #define scan_field_decl(var, list) for (var = (list); var; var = CAST(field_decl, var->next)) #define asttype_reverse(x) CAST(asttype, AST_node_reverse(CAST(node, (x)))) #define asttype_length(x) AST_node_length(CAST(node, (x))) #define last_asttype(x) CAST(asttype, AST_node_last(CAST(node, (x)))) #define scan_asttype(var, list) for (var = (list); var; var = CAST(asttype, var->next)) #define typename_reverse(x) CAST(typename, AST_node_reverse(CAST(node, (x)))) #define typename_length(x) AST_node_length(CAST(node, (x))) #define last_typename(x) CAST(typename, AST_node_last(CAST(node, (x)))) #define scan_typename(var, list) for (var = (list); var; var = CAST(typename, var->next)) #define typeof_expr_reverse(x) CAST(typeof_expr, AST_node_reverse(CAST(node, (x)))) #define typeof_expr_length(x) AST_node_length(CAST(node, (x))) #define last_typeof_expr(x) CAST(typeof_expr, AST_node_last(CAST(node, (x)))) #define scan_typeof_expr(var, list) for (var = (list); var; var = CAST(typeof_expr, var->next)) #define typeof_type_reverse(x) CAST(typeof_type, AST_node_reverse(CAST(node, (x)))) #define typeof_type_length(x) AST_node_length(CAST(node, (x))) #define last_typeof_type(x) CAST(typeof_type, AST_node_last(CAST(node, (x)))) #define scan_typeof_type(var, list) for (var = (list); var; var = CAST(typeof_type, var->next)) #define attribute_reverse(x) CAST(attribute, AST_node_reverse(CAST(node, (x)))) #define attribute_length(x) AST_node_length(CAST(node, (x))) #define last_attribute(x) CAST(attribute, AST_node_last(CAST(node, (x)))) #define scan_attribute(var, list) for (var = (list); var; var = CAST(attribute, var->next)) #define gcc_attribute_reverse(x) CAST(gcc_attribute, AST_node_reverse(CAST(node, (x)))) #define gcc_attribute_length(x) AST_node_length(CAST(node, (x))) #define last_gcc_attribute(x) CAST(gcc_attribute, AST_node_last(CAST(node, (x)))) #define scan_gcc_attribute(var, list) for (var = (list); var; var = CAST(gcc_attribute, var->next)) #define rid_reverse(x) CAST(rid, AST_node_reverse(CAST(node, (x)))) #define rid_length(x) AST_node_length(CAST(node, (x))) #define last_rid(x) CAST(rid, AST_node_last(CAST(node, (x)))) #define scan_rid(var, list) for (var = (list); var; var = CAST(rid, var->next)) #define qualifier_reverse(x) CAST(qualifier, AST_node_reverse(CAST(node, (x)))) #define qualifier_length(x) AST_node_length(CAST(node, (x))) #define last_qualifier(x) CAST(qualifier, AST_node_last(CAST(node, (x)))) #define scan_qualifier(var, list) for (var = (list); var; var = CAST(qualifier, var->next)) #define tag_ref_reverse(x) CAST(tag_ref, AST_node_reverse(CAST(node, (x)))) #define tag_ref_length(x) AST_node_length(CAST(node, (x))) #define last_tag_ref(x) CAST(tag_ref, AST_node_last(CAST(node, (x)))) #define scan_tag_ref(var, list) for (var = (list); var; var = CAST(tag_ref, var->next)) #define struct_ref_reverse(x) CAST(struct_ref, AST_node_reverse(CAST(node, (x)))) #define struct_ref_length(x) AST_node_length(CAST(node, (x))) #define last_struct_ref(x) CAST(struct_ref, AST_node_last(CAST(node, (x)))) #define scan_struct_ref(var, list) for (var = (list); var; var = CAST(struct_ref, var->next)) #define union_ref_reverse(x) CAST(union_ref, AST_node_reverse(CAST(node, (x)))) #define union_ref_length(x) AST_node_length(CAST(node, (x))) #define last_union_ref(x) CAST(union_ref, AST_node_last(CAST(node, (x)))) #define scan_union_ref(var, list) for (var = (list); var; var = CAST(union_ref, var->next)) #define nested_declarator_reverse(x) CAST(nested_declarator, AST_node_reverse(CAST(node, (x)))) #define nested_declarator_length(x) AST_node_length(CAST(node, (x))) #define last_nested_declarator(x) CAST(nested_declarator, AST_node_last(CAST(node, (x)))) #define scan_nested_declarator(var, list) for (var = (list); var; var = CAST(nested_declarator, var->next)) #define function_declarator_reverse(x) CAST(function_declarator, AST_node_reverse(CAST(node, (x)))) #define function_declarator_length(x) AST_node_length(CAST(node, (x))) #define last_function_declarator(x) CAST(function_declarator, AST_node_last(CAST(node, (x)))) #define scan_function_declarator(var, list) for (var = (list); var; var = CAST(function_declarator, var->next)) #define pointer_declarator_reverse(x) CAST(pointer_declarator, AST_node_reverse(CAST(node, (x)))) #define pointer_declarator_length(x) AST_node_length(CAST(node, (x))) #define last_pointer_declarator(x) CAST(pointer_declarator, AST_node_last(CAST(node, (x)))) #define scan_pointer_declarator(var, list) for (var = (list); var; var = CAST(pointer_declarator, var->next)) #define qualified_declarator_reverse(x) CAST(qualified_declarator, AST_node_reverse(CAST(node, (x)))) #define qualified_declarator_length(x) AST_node_length(CAST(node, (x))) #define last_qualified_declarator(x) CAST(qualified_declarator, AST_node_last(CAST(node, (x)))) #define scan_qualified_declarator(var, list) for (var = (list); var; var = CAST(qualified_declarator, var->next)) #define array_declarator_reverse(x) CAST(array_declarator, AST_node_reverse(CAST(node, (x)))) #define array_declarator_length(x) AST_node_length(CAST(node, (x))) #define last_array_declarator(x) CAST(array_declarator, AST_node_last(CAST(node, (x)))) #define scan_array_declarator(var, list) for (var = (list); var; var = CAST(array_declarator, var->next)) #define identifier_declarator_reverse(x) CAST(identifier_declarator, AST_node_reverse(CAST(node, (x)))) #define identifier_declarator_length(x) AST_node_length(CAST(node, (x))) #define last_identifier_declarator(x) CAST(identifier_declarator, AST_node_last(CAST(node, (x)))) #define scan_identifier_declarator(var, list) for (var = (list); var; var = CAST(identifier_declarator, var->next)) #define asm_stmt_reverse(x) CAST(asm_stmt, AST_node_reverse(CAST(node, (x)))) #define asm_stmt_length(x) AST_node_length(CAST(node, (x))) #define last_asm_stmt(x) CAST(asm_stmt, AST_node_last(CAST(node, (x)))) #define scan_asm_stmt(var, list) for (var = (list); var; var = CAST(asm_stmt, var->next)) #define compound_stmt_reverse(x) CAST(compound_stmt, AST_node_reverse(CAST(node, (x)))) #define compound_stmt_length(x) AST_node_length(CAST(node, (x))) #define last_compound_stmt(x) CAST(compound_stmt, AST_node_last(CAST(node, (x)))) #define scan_compound_stmt(var, list) for (var = (list); var; var = CAST(compound_stmt, var->next)) #define if_stmt_reverse(x) CAST(if_stmt, AST_node_reverse(CAST(node, (x)))) #define if_stmt_length(x) AST_node_length(CAST(node, (x))) #define last_if_stmt(x) CAST(if_stmt, AST_node_last(CAST(node, (x)))) #define scan_if_stmt(var, list) for (var = (list); var; var = CAST(if_stmt, var->next)) #define labeled_stmt_reverse(x) CAST(labeled_stmt, AST_node_reverse(CAST(node, (x)))) #define labeled_stmt_length(x) AST_node_length(CAST(node, (x))) #define last_labeled_stmt(x) CAST(labeled_stmt, AST_node_last(CAST(node, (x)))) #define scan_labeled_stmt(var, list) for (var = (list); var; var = CAST(labeled_stmt, var->next)) #define expression_stmt_reverse(x) CAST(expression_stmt, AST_node_reverse(CAST(node, (x)))) #define expression_stmt_length(x) AST_node_length(CAST(node, (x))) #define last_expression_stmt(x) CAST(expression_stmt, AST_node_last(CAST(node, (x)))) #define scan_expression_stmt(var, list) for (var = (list); var; var = CAST(expression_stmt, var->next)) #define conditional_stmt_reverse(x) CAST(conditional_stmt, AST_node_reverse(CAST(node, (x)))) #define conditional_stmt_length(x) AST_node_length(CAST(node, (x))) #define last_conditional_stmt(x) CAST(conditional_stmt, AST_node_last(CAST(node, (x)))) #define scan_conditional_stmt(var, list) for (var = (list); var; var = CAST(conditional_stmt, var->next)) #define switch_stmt_reverse(x) CAST(switch_stmt, AST_node_reverse(CAST(node, (x)))) #define switch_stmt_length(x) AST_node_length(CAST(node, (x))) #define last_switch_stmt(x) CAST(switch_stmt, AST_node_last(CAST(node, (x)))) #define scan_switch_stmt(var, list) for (var = (list); var; var = CAST(switch_stmt, var->next)) #define for_stmt_reverse(x) CAST(for_stmt, AST_node_reverse(CAST(node, (x)))) #define for_stmt_length(x) AST_node_length(CAST(node, (x))) #define last_for_stmt(x) CAST(for_stmt, AST_node_last(CAST(node, (x)))) #define scan_for_stmt(var, list) for (var = (list); var; var = CAST(for_stmt, var->next)) #define break_stmt_reverse(x) CAST(break_stmt, AST_node_reverse(CAST(node, (x)))) #define break_stmt_length(x) AST_node_length(CAST(node, (x))) #define last_break_stmt(x) CAST(break_stmt, AST_node_last(CAST(node, (x)))) #define scan_break_stmt(var, list) for (var = (list); var; var = CAST(break_stmt, var->next)) #define continue_stmt_reverse(x) CAST(continue_stmt, AST_node_reverse(CAST(node, (x)))) #define continue_stmt_length(x) AST_node_length(CAST(node, (x))) #define last_continue_stmt(x) CAST(continue_stmt, AST_node_last(CAST(node, (x)))) #define scan_continue_stmt(var, list) for (var = (list); var; var = CAST(continue_stmt, var->next)) #define return_stmt_reverse(x) CAST(return_stmt, AST_node_reverse(CAST(node, (x)))) #define return_stmt_length(x) AST_node_length(CAST(node, (x))) #define last_return_stmt(x) CAST(return_stmt, AST_node_last(CAST(node, (x)))) #define scan_return_stmt(var, list) for (var = (list); var; var = CAST(return_stmt, var->next)) #define goto_stmt_reverse(x) CAST(goto_stmt, AST_node_reverse(CAST(node, (x)))) #define goto_stmt_length(x) AST_node_length(CAST(node, (x))) #define last_goto_stmt(x) CAST(goto_stmt, AST_node_last(CAST(node, (x)))) #define scan_goto_stmt(var, list) for (var = (list); var; var = CAST(goto_stmt, var->next)) #define computed_goto_stmt_reverse(x) CAST(computed_goto_stmt, AST_node_reverse(CAST(node, (x)))) #define computed_goto_stmt_length(x) AST_node_length(CAST(node, (x))) #define last_computed_goto_stmt(x) CAST(computed_goto_stmt, AST_node_last(CAST(node, (x)))) #define scan_computed_goto_stmt(var, list) for (var = (list); var; var = CAST(computed_goto_stmt, var->next)) #define empty_stmt_reverse(x) CAST(empty_stmt, AST_node_reverse(CAST(node, (x)))) #define empty_stmt_length(x) AST_node_length(CAST(node, (x))) #define last_empty_stmt(x) CAST(empty_stmt, AST_node_last(CAST(node, (x)))) #define scan_empty_stmt(var, list) for (var = (list); var; var = CAST(empty_stmt, var->next)) #define unary_reverse(x) CAST(unary, AST_node_reverse(CAST(node, (x)))) #define unary_length(x) AST_node_length(CAST(node, (x))) #define last_unary(x) CAST(unary, AST_node_last(CAST(node, (x)))) #define scan_unary(var, list) for (var = (list); var; var = CAST(unary, var->next)) #define binary_reverse(x) CAST(binary, AST_node_reverse(CAST(node, (x)))) #define binary_length(x) AST_node_length(CAST(node, (x))) #define last_binary(x) CAST(binary, AST_node_last(CAST(node, (x)))) #define scan_binary(var, list) for (var = (list); var; var = CAST(binary, var->next)) #define comma_reverse(x) CAST(comma, AST_node_reverse(CAST(node, (x)))) #define comma_length(x) AST_node_length(CAST(node, (x))) #define last_comma(x) CAST(comma, AST_node_last(CAST(node, (x)))) #define scan_comma(var, list) for (var = (list); var; var = CAST(comma, var->next)) #define sizeof_type_reverse(x) CAST(sizeof_type, AST_node_reverse(CAST(node, (x)))) #define sizeof_type_length(x) AST_node_length(CAST(node, (x))) #define last_sizeof_type(x) CAST(sizeof_type, AST_node_last(CAST(node, (x)))) #define scan_sizeof_type(var, list) for (var = (list); var; var = CAST(sizeof_type, var->next)) #define alignof_type_reverse(x) CAST(alignof_type, AST_node_reverse(CAST(node, (x)))) #define alignof_type_length(x) AST_node_length(CAST(node, (x))) #define last_alignof_type(x) CAST(alignof_type, AST_node_last(CAST(node, (x)))) #define scan_alignof_type(var, list) for (var = (list); var; var = CAST(alignof_type, var->next)) #define label_address_reverse(x) CAST(label_address, AST_node_reverse(CAST(node, (x)))) #define label_address_length(x) AST_node_length(CAST(node, (x))) #define last_label_address(x) CAST(label_address, AST_node_last(CAST(node, (x)))) #define scan_label_address(var, list) for (var = (list); var; var = CAST(label_address, var->next)) #define cast_reverse(x) CAST(cast, AST_node_reverse(CAST(node, (x)))) #define cast_length(x) AST_node_length(CAST(node, (x))) #define last_cast(x) CAST(cast, AST_node_last(CAST(node, (x)))) #define scan_cast(var, list) for (var = (list); var; var = CAST(cast, var->next)) #define cast_list_reverse(x) CAST(cast_list, AST_node_reverse(CAST(node, (x)))) #define cast_list_length(x) AST_node_length(CAST(node, (x))) #define last_cast_list(x) CAST(cast_list, AST_node_last(CAST(node, (x)))) #define scan_cast_list(var, list) for (var = (list); var; var = CAST(cast_list, var->next)) #define conditional_reverse(x) CAST(conditional, AST_node_reverse(CAST(node, (x)))) #define conditional_length(x) AST_node_length(CAST(node, (x))) #define last_conditional(x) CAST(conditional, AST_node_last(CAST(node, (x)))) #define scan_conditional(var, list) for (var = (list); var; var = CAST(conditional, var->next)) #define identifier_reverse(x) CAST(identifier, AST_node_reverse(CAST(node, (x)))) #define identifier_length(x) AST_node_length(CAST(node, (x))) #define last_identifier(x) CAST(identifier, AST_node_last(CAST(node, (x)))) #define scan_identifier(var, list) for (var = (list); var; var = CAST(identifier, var->next)) #define compound_expr_reverse(x) CAST(compound_expr, AST_node_reverse(CAST(node, (x)))) #define compound_expr_length(x) AST_node_length(CAST(node, (x))) #define last_compound_expr(x) CAST(compound_expr, AST_node_last(CAST(node, (x)))) #define scan_compound_expr(var, list) for (var = (list); var; var = CAST(compound_expr, var->next)) #define function_call_reverse(x) CAST(function_call, AST_node_reverse(CAST(node, (x)))) #define function_call_length(x) AST_node_length(CAST(node, (x))) #define last_function_call(x) CAST(function_call, AST_node_last(CAST(node, (x)))) #define scan_function_call(var, list) for (var = (list); var; var = CAST(function_call, var->next)) #define field_ref_reverse(x) CAST(field_ref, AST_node_reverse(CAST(node, (x)))) #define field_ref_length(x) AST_node_length(CAST(node, (x))) #define last_field_ref(x) CAST(field_ref, AST_node_last(CAST(node, (x)))) #define scan_field_ref(var, list) for (var = (list); var; var = CAST(field_ref, var->next)) #define increment_reverse(x) CAST(increment, AST_node_reverse(CAST(node, (x)))) #define increment_length(x) AST_node_length(CAST(node, (x))) #define last_increment(x) CAST(increment, AST_node_last(CAST(node, (x)))) #define scan_increment(var, list) for (var = (list); var; var = CAST(increment, var->next)) #define comparison_reverse(x) CAST(comparison, AST_node_reverse(CAST(node, (x)))) #define comparison_length(x) AST_node_length(CAST(node, (x))) #define last_comparison(x) CAST(comparison, AST_node_last(CAST(node, (x)))) #define scan_comparison(var, list) for (var = (list); var; var = CAST(comparison, var->next)) #define assignment_reverse(x) CAST(assignment, AST_node_reverse(CAST(node, (x)))) #define assignment_length(x) AST_node_length(CAST(node, (x))) #define last_assignment(x) CAST(assignment, AST_node_last(CAST(node, (x)))) #define scan_assignment(var, list) for (var = (list); var; var = CAST(assignment, var->next)) #define init_list_reverse(x) CAST(init_list, AST_node_reverse(CAST(node, (x)))) #define init_list_length(x) AST_node_length(CAST(node, (x))) #define last_init_list(x) CAST(init_list, AST_node_last(CAST(node, (x)))) #define scan_init_list(var, list) for (var = (list); var; var = CAST(init_list, var->next)) #define init_specific_reverse(x) CAST(init_specific, AST_node_reverse(CAST(node, (x)))) #define init_specific_length(x) AST_node_length(CAST(node, (x))) #define last_init_specific(x) CAST(init_specific, AST_node_last(CAST(node, (x)))) #define scan_init_specific(var, list) for (var = (list); var; var = CAST(init_specific, var->next)) #define designator_reverse(x) CAST(designator, AST_node_reverse(CAST(node, (x)))) #define designator_length(x) AST_node_length(CAST(node, (x))) #define last_designator(x) CAST(designator, AST_node_last(CAST(node, (x)))) #define scan_designator(var, list) for (var = (list); var; var = CAST(designator, var->next)) #define designate_field_reverse(x) CAST(designate_field, AST_node_reverse(CAST(node, (x)))) #define designate_field_length(x) AST_node_length(CAST(node, (x))) #define last_designate_field(x) CAST(designate_field, AST_node_last(CAST(node, (x)))) #define scan_designate_field(var, list) for (var = (list); var; var = CAST(designate_field, var->next)) #define designate_index_reverse(x) CAST(designate_index, AST_node_reverse(CAST(node, (x)))) #define designate_index_length(x) AST_node_length(CAST(node, (x))) #define last_designate_index(x) CAST(designate_index, AST_node_last(CAST(node, (x)))) #define scan_designate_index(var, list) for (var = (list); var; var = CAST(designate_index, var->next)) #define lexical_cst_reverse(x) CAST(lexical_cst, AST_node_reverse(CAST(node, (x)))) #define lexical_cst_length(x) AST_node_length(CAST(node, (x))) #define last_lexical_cst(x) CAST(lexical_cst, AST_node_last(CAST(node, (x)))) #define scan_lexical_cst(var, list) for (var = (list); var; var = CAST(lexical_cst, var->next)) #define string_cst_reverse(x) CAST(string_cst, AST_node_reverse(CAST(node, (x)))) #define string_cst_length(x) AST_node_length(CAST(node, (x))) #define last_string_cst(x) CAST(string_cst, AST_node_last(CAST(node, (x)))) #define scan_string_cst(var, list) for (var = (list); var; var = CAST(string_cst, var->next)) #define string_reverse(x) CAST(string, AST_node_reverse(CAST(node, (x)))) #define string_length(x) AST_node_length(CAST(node, (x))) #define last_string(x) CAST(string, AST_node_last(CAST(node, (x)))) #define scan_string(var, list) for (var = (list); var; var = CAST(string, var->next)) #define id_label_reverse(x) CAST(id_label, AST_node_reverse(CAST(node, (x)))) #define id_label_length(x) AST_node_length(CAST(node, (x))) #define last_id_label(x) CAST(id_label, AST_node_last(CAST(node, (x)))) #define scan_id_label(var, list) for (var = (list); var; var = CAST(id_label, var->next)) #define case_label_reverse(x) CAST(case_label, AST_node_reverse(CAST(node, (x)))) #define case_label_length(x) AST_node_length(CAST(node, (x))) #define last_case_label(x) CAST(case_label, AST_node_last(CAST(node, (x)))) #define scan_case_label(var, list) for (var = (list); var; var = CAST(case_label, var->next)) #define default_label_reverse(x) CAST(default_label, AST_node_reverse(CAST(node, (x)))) #define default_label_length(x) AST_node_length(CAST(node, (x))) #define last_default_label(x) CAST(default_label, AST_node_last(CAST(node, (x)))) #define scan_default_label(var, list) for (var = (list); var; var = CAST(default_label, var->next)) #define word_reverse(x) CAST(word, AST_node_reverse(CAST(node, (x)))) #define word_length(x) AST_node_length(CAST(node, (x))) #define last_word(x) CAST(word, AST_node_last(CAST(node, (x)))) #define scan_word(var, list) for (var = (list); var; var = CAST(word, var->next)) #define asm_operand_reverse(x) CAST(asm_operand, AST_node_reverse(CAST(node, (x)))) #define asm_operand_length(x) AST_node_length(CAST(node, (x))) #define last_asm_operand(x) CAST(asm_operand, AST_node_last(CAST(node, (x)))) #define scan_asm_operand(var, list) for (var = (list); var; var = CAST(asm_operand, var->next)) #define nesc_decl_reverse(x) CAST(nesc_decl, AST_node_reverse(CAST(node, (x)))) #define nesc_decl_length(x) AST_node_length(CAST(node, (x))) #define last_nesc_decl(x) CAST(nesc_decl, AST_node_last(CAST(node, (x)))) #define scan_nesc_decl(var, list) for (var = (list); var; var = CAST(nesc_decl, var->next)) #define interface_reverse(x) CAST(interface, AST_node_reverse(CAST(node, (x)))) #define interface_length(x) AST_node_length(CAST(node, (x))) #define last_interface(x) CAST(interface, AST_node_last(CAST(node, (x)))) #define scan_interface(var, list) for (var = (list); var; var = CAST(interface, var->next)) #define component_reverse(x) CAST(component, AST_node_reverse(CAST(node, (x)))) #define component_length(x) AST_node_length(CAST(node, (x))) #define last_component(x) CAST(component, AST_node_last(CAST(node, (x)))) #define scan_component(var, list) for (var = (list); var; var = CAST(component, var->next)) #define implementation_reverse(x) CAST(implementation, AST_node_reverse(CAST(node, (x)))) #define implementation_length(x) AST_node_length(CAST(node, (x))) #define last_implementation(x) CAST(implementation, AST_node_last(CAST(node, (x)))) #define scan_implementation(var, list) for (var = (list); var; var = CAST(implementation, var->next)) #define configuration_reverse(x) CAST(configuration, AST_node_reverse(CAST(node, (x)))) #define configuration_length(x) AST_node_length(CAST(node, (x))) #define last_configuration(x) CAST(configuration, AST_node_last(CAST(node, (x)))) #define scan_configuration(var, list) for (var = (list); var; var = CAST(configuration, var->next)) #define module_reverse(x) CAST(module, AST_node_reverse(CAST(node, (x)))) #define module_length(x) AST_node_length(CAST(node, (x))) #define last_module(x) CAST(module, AST_node_last(CAST(node, (x)))) #define scan_module(var, list) for (var = (list); var; var = CAST(module, var->next)) #define binary_component_reverse(x) CAST(binary_component, AST_node_reverse(CAST(node, (x)))) #define binary_component_length(x) AST_node_length(CAST(node, (x))) #define last_binary_component(x) CAST(binary_component, AST_node_last(CAST(node, (x)))) #define scan_binary_component(var, list) for (var = (list); var; var = CAST(binary_component, var->next)) #define rp_interface_reverse(x) CAST(rp_interface, AST_node_reverse(CAST(node, (x)))) #define rp_interface_length(x) AST_node_length(CAST(node, (x))) #define last_rp_interface(x) CAST(rp_interface, AST_node_last(CAST(node, (x)))) #define scan_rp_interface(var, list) for (var = (list); var; var = CAST(rp_interface, var->next)) #define interface_ref_reverse(x) CAST(interface_ref, AST_node_reverse(CAST(node, (x)))) #define interface_ref_length(x) AST_node_length(CAST(node, (x))) #define last_interface_ref(x) CAST(interface_ref, AST_node_last(CAST(node, (x)))) #define scan_interface_ref(var, list) for (var = (list); var; var = CAST(interface_ref, var->next)) #define component_ref_reverse(x) CAST(component_ref, AST_node_reverse(CAST(node, (x)))) #define component_ref_length(x) AST_node_length(CAST(node, (x))) #define last_component_ref(x) CAST(component_ref, AST_node_last(CAST(node, (x)))) #define scan_component_ref(var, list) for (var = (list); var; var = CAST(component_ref, var->next)) #define connection_reverse(x) CAST(connection, AST_node_reverse(CAST(node, (x)))) #define connection_length(x) AST_node_length(CAST(node, (x))) #define last_connection(x) CAST(connection, AST_node_last(CAST(node, (x)))) #define scan_connection(var, list) for (var = (list); var; var = CAST(connection, var->next)) #define endpoint_reverse(x) CAST(endpoint, AST_node_reverse(CAST(node, (x)))) #define endpoint_length(x) AST_node_length(CAST(node, (x))) #define last_endpoint(x) CAST(endpoint, AST_node_last(CAST(node, (x)))) #define scan_endpoint(var, list) for (var = (list); var; var = CAST(endpoint, var->next)) #define parameterised_identifier_reverse(x) CAST(parameterised_identifier, AST_node_reverse(CAST(node, (x)))) #define parameterised_identifier_length(x) AST_node_length(CAST(node, (x))) #define last_parameterised_identifier(x) CAST(parameterised_identifier, AST_node_last(CAST(node, (x)))) #define scan_parameterised_identifier(var, list) for (var = (list); var; var = CAST(parameterised_identifier, var->next)) #define generic_declarator_reverse(x) CAST(generic_declarator, AST_node_reverse(CAST(node, (x)))) #define generic_declarator_length(x) AST_node_length(CAST(node, (x))) #define last_generic_declarator(x) CAST(generic_declarator, AST_node_last(CAST(node, (x)))) #define scan_generic_declarator(var, list) for (var = (list); var; var = CAST(generic_declarator, var->next)) #define generic_call_reverse(x) CAST(generic_call, AST_node_reverse(CAST(node, (x)))) #define generic_call_length(x) AST_node_length(CAST(node, (x))) #define last_generic_call(x) CAST(generic_call, AST_node_last(CAST(node, (x)))) #define scan_generic_call(var, list) for (var = (list); var; var = CAST(generic_call, var->next)) #define interface_ref_declarator_reverse(x) CAST(interface_ref_declarator, AST_node_reverse(CAST(node, (x)))) #define interface_ref_declarator_length(x) AST_node_length(CAST(node, (x))) #define last_interface_ref_declarator(x) CAST(interface_ref_declarator, AST_node_last(CAST(node, (x)))) #define scan_interface_ref_declarator(var, list) for (var = (list); var; var = CAST(interface_ref_declarator, var->next)) #define interface_deref_reverse(x) CAST(interface_deref, AST_node_reverse(CAST(node, (x)))) #define interface_deref_length(x) AST_node_length(CAST(node, (x))) #define last_interface_deref(x) CAST(interface_deref, AST_node_last(CAST(node, (x)))) #define scan_interface_deref(var, list) for (var = (list); var; var = CAST(interface_deref, var->next)) #define component_deref_reverse(x) CAST(component_deref, AST_node_reverse(CAST(node, (x)))) #define component_deref_length(x) AST_node_length(CAST(node, (x))) #define last_component_deref(x) CAST(component_deref, AST_node_last(CAST(node, (x)))) #define scan_component_deref(var, list) for (var = (list); var; var = CAST(component_deref, var->next)) #define component_typeref_reverse(x) CAST(component_typeref, AST_node_reverse(CAST(node, (x)))) #define component_typeref_length(x) AST_node_length(CAST(node, (x))) #define last_component_typeref(x) CAST(component_typeref, AST_node_last(CAST(node, (x)))) #define scan_component_typeref(var, list) for (var = (list); var; var = CAST(component_typeref, var->next)) #define atomic_stmt_reverse(x) CAST(atomic_stmt, AST_node_reverse(CAST(node, (x)))) #define atomic_stmt_length(x) AST_node_length(CAST(node, (x))) #define last_atomic_stmt(x) CAST(atomic_stmt, AST_node_last(CAST(node, (x)))) #define scan_atomic_stmt(var, list) for (var = (list); var; var = CAST(atomic_stmt, var->next)) #define nesc_attribute_reverse(x) CAST(nesc_attribute, AST_node_reverse(CAST(node, (x)))) #define nesc_attribute_length(x) AST_node_length(CAST(node, (x))) #define last_nesc_attribute(x) CAST(nesc_attribute, AST_node_last(CAST(node, (x)))) #define scan_nesc_attribute(var, list) for (var = (list); var; var = CAST(nesc_attribute, var->next)) #define type_parm_decl_reverse(x) CAST(type_parm_decl, AST_node_reverse(CAST(node, (x)))) #define type_parm_decl_length(x) AST_node_length(CAST(node, (x))) #define last_type_parm_decl(x) CAST(type_parm_decl, AST_node_last(CAST(node, (x)))) #define scan_type_parm_decl(var, list) for (var = (list); var; var = CAST(type_parm_decl, var->next)) #define type_argument_reverse(x) CAST(type_argument, AST_node_reverse(CAST(node, (x)))) #define type_argument_length(x) AST_node_length(CAST(node, (x))) #define last_type_argument(x) CAST(type_argument, AST_node_last(CAST(node, (x)))) #define scan_type_argument(var, list) for (var = (list); var; var = CAST(type_argument, var->next)) #define error_decl_reverse(x) CAST(error_decl, AST_node_reverse(CAST(node, (x)))) #define error_decl_length(x) AST_node_length(CAST(node, (x))) #define last_error_decl(x) CAST(error_decl, AST_node_last(CAST(node, (x)))) #define scan_error_decl(var, list) for (var = (list); var; var = CAST(error_decl, var->next)) #define attribute_ref_reverse(x) CAST(attribute_ref, AST_node_reverse(CAST(node, (x)))) #define attribute_ref_length(x) AST_node_length(CAST(node, (x))) #define last_attribute_ref(x) CAST(attribute_ref, AST_node_last(CAST(node, (x)))) #define scan_attribute_ref(var, list) for (var = (list); var; var = CAST(attribute_ref, var->next)) #define enum_ref_reverse(x) CAST(enum_ref, AST_node_reverse(CAST(node, (x)))) #define enum_ref_length(x) AST_node_length(CAST(node, (x))) #define last_enum_ref(x) CAST(enum_ref, AST_node_last(CAST(node, (x)))) #define scan_enum_ref(var, list) for (var = (list); var; var = CAST(enum_ref, var->next)) #define error_stmt_reverse(x) CAST(error_stmt, AST_node_reverse(CAST(node, (x)))) #define error_stmt_length(x) AST_node_length(CAST(node, (x))) #define last_error_stmt(x) CAST(error_stmt, AST_node_last(CAST(node, (x)))) #define scan_error_stmt(var, list) for (var = (list); var; var = CAST(error_stmt, var->next)) #define while_stmt_reverse(x) CAST(while_stmt, AST_node_reverse(CAST(node, (x)))) #define while_stmt_length(x) AST_node_length(CAST(node, (x))) #define last_while_stmt(x) CAST(while_stmt, AST_node_last(CAST(node, (x)))) #define scan_while_stmt(var, list) for (var = (list); var; var = CAST(while_stmt, var->next)) #define dowhile_stmt_reverse(x) CAST(dowhile_stmt, AST_node_reverse(CAST(node, (x)))) #define dowhile_stmt_length(x) AST_node_length(CAST(node, (x))) #define last_dowhile_stmt(x) CAST(dowhile_stmt, AST_node_last(CAST(node, (x)))) #define scan_dowhile_stmt(var, list) for (var = (list); var; var = CAST(dowhile_stmt, var->next)) #define error_expr_reverse(x) CAST(error_expr, AST_node_reverse(CAST(node, (x)))) #define error_expr_length(x) AST_node_length(CAST(node, (x))) #define last_error_expr(x) CAST(error_expr, AST_node_last(CAST(node, (x)))) #define scan_error_expr(var, list) for (var = (list); var; var = CAST(error_expr, var->next)) #define array_ref_reverse(x) CAST(array_ref, AST_node_reverse(CAST(node, (x)))) #define array_ref_length(x) AST_node_length(CAST(node, (x))) #define last_array_ref(x) CAST(array_ref, AST_node_last(CAST(node, (x)))) #define scan_array_ref(var, list) for (var = (list); var; var = CAST(array_ref, var->next)) #define dereference_reverse(x) CAST(dereference, AST_node_reverse(CAST(node, (x)))) #define dereference_length(x) AST_node_length(CAST(node, (x))) #define last_dereference(x) CAST(dereference, AST_node_last(CAST(node, (x)))) #define scan_dereference(var, list) for (var = (list); var; var = CAST(dereference, var->next)) #define extension_expr_reverse(x) CAST(extension_expr, AST_node_reverse(CAST(node, (x)))) #define extension_expr_length(x) AST_node_length(CAST(node, (x))) #define last_extension_expr(x) CAST(extension_expr, AST_node_last(CAST(node, (x)))) #define scan_extension_expr(var, list) for (var = (list); var; var = CAST(extension_expr, var->next)) #define sizeof_expr_reverse(x) CAST(sizeof_expr, AST_node_reverse(CAST(node, (x)))) #define sizeof_expr_length(x) AST_node_length(CAST(node, (x))) #define last_sizeof_expr(x) CAST(sizeof_expr, AST_node_last(CAST(node, (x)))) #define scan_sizeof_expr(var, list) for (var = (list); var; var = CAST(sizeof_expr, var->next)) #define alignof_expr_reverse(x) CAST(alignof_expr, AST_node_reverse(CAST(node, (x)))) #define alignof_expr_length(x) AST_node_length(CAST(node, (x))) #define last_alignof_expr(x) CAST(alignof_expr, AST_node_last(CAST(node, (x)))) #define scan_alignof_expr(var, list) for (var = (list); var; var = CAST(alignof_expr, var->next)) #define realpart_reverse(x) CAST(realpart, AST_node_reverse(CAST(node, (x)))) #define realpart_length(x) AST_node_length(CAST(node, (x))) #define last_realpart(x) CAST(realpart, AST_node_last(CAST(node, (x)))) #define scan_realpart(var, list) for (var = (list); var; var = CAST(realpart, var->next)) #define imagpart_reverse(x) CAST(imagpart, AST_node_reverse(CAST(node, (x)))) #define imagpart_length(x) AST_node_length(CAST(node, (x))) #define last_imagpart(x) CAST(imagpart, AST_node_last(CAST(node, (x)))) #define scan_imagpart(var, list) for (var = (list); var; var = CAST(imagpart, var->next)) #define address_of_reverse(x) CAST(address_of, AST_node_reverse(CAST(node, (x)))) #define address_of_length(x) AST_node_length(CAST(node, (x))) #define last_address_of(x) CAST(address_of, AST_node_last(CAST(node, (x)))) #define scan_address_of(var, list) for (var = (list); var; var = CAST(address_of, var->next)) #define unary_minus_reverse(x) CAST(unary_minus, AST_node_reverse(CAST(node, (x)))) #define unary_minus_length(x) AST_node_length(CAST(node, (x))) #define last_unary_minus(x) CAST(unary_minus, AST_node_last(CAST(node, (x)))) #define scan_unary_minus(var, list) for (var = (list); var; var = CAST(unary_minus, var->next)) #define unary_plus_reverse(x) CAST(unary_plus, AST_node_reverse(CAST(node, (x)))) #define unary_plus_length(x) AST_node_length(CAST(node, (x))) #define last_unary_plus(x) CAST(unary_plus, AST_node_last(CAST(node, (x)))) #define scan_unary_plus(var, list) for (var = (list); var; var = CAST(unary_plus, var->next)) #define conjugate_reverse(x) CAST(conjugate, AST_node_reverse(CAST(node, (x)))) #define conjugate_length(x) AST_node_length(CAST(node, (x))) #define last_conjugate(x) CAST(conjugate, AST_node_last(CAST(node, (x)))) #define scan_conjugate(var, list) for (var = (list); var; var = CAST(conjugate, var->next)) #define bitnot_reverse(x) CAST(bitnot, AST_node_reverse(CAST(node, (x)))) #define bitnot_length(x) AST_node_length(CAST(node, (x))) #define last_bitnot(x) CAST(bitnot, AST_node_last(CAST(node, (x)))) #define scan_bitnot(var, list) for (var = (list); var; var = CAST(bitnot, var->next)) #define not_reverse(x) CAST(not, AST_node_reverse(CAST(node, (x)))) #define not_length(x) AST_node_length(CAST(node, (x))) #define last_not(x) CAST(not, AST_node_last(CAST(node, (x)))) #define scan_not(var, list) for (var = (list); var; var = CAST(not, var->next)) #define preincrement_reverse(x) CAST(preincrement, AST_node_reverse(CAST(node, (x)))) #define preincrement_length(x) AST_node_length(CAST(node, (x))) #define last_preincrement(x) CAST(preincrement, AST_node_last(CAST(node, (x)))) #define scan_preincrement(var, list) for (var = (list); var; var = CAST(preincrement, var->next)) #define predecrement_reverse(x) CAST(predecrement, AST_node_reverse(CAST(node, (x)))) #define predecrement_length(x) AST_node_length(CAST(node, (x))) #define last_predecrement(x) CAST(predecrement, AST_node_last(CAST(node, (x)))) #define scan_predecrement(var, list) for (var = (list); var; var = CAST(predecrement, var->next)) #define postincrement_reverse(x) CAST(postincrement, AST_node_reverse(CAST(node, (x)))) #define postincrement_length(x) AST_node_length(CAST(node, (x))) #define last_postincrement(x) CAST(postincrement, AST_node_last(CAST(node, (x)))) #define scan_postincrement(var, list) for (var = (list); var; var = CAST(postincrement, var->next)) #define postdecrement_reverse(x) CAST(postdecrement, AST_node_reverse(CAST(node, (x)))) #define postdecrement_length(x) AST_node_length(CAST(node, (x))) #define last_postdecrement(x) CAST(postdecrement, AST_node_last(CAST(node, (x)))) #define scan_postdecrement(var, list) for (var = (list); var; var = CAST(postdecrement, var->next)) #define plus_reverse(x) CAST(plus, AST_node_reverse(CAST(node, (x)))) #define plus_length(x) AST_node_length(CAST(node, (x))) #define last_plus(x) CAST(plus, AST_node_last(CAST(node, (x)))) #define scan_plus(var, list) for (var = (list); var; var = CAST(plus, var->next)) #define minus_reverse(x) CAST(minus, AST_node_reverse(CAST(node, (x)))) #define minus_length(x) AST_node_length(CAST(node, (x))) #define last_minus(x) CAST(minus, AST_node_last(CAST(node, (x)))) #define scan_minus(var, list) for (var = (list); var; var = CAST(minus, var->next)) #define times_reverse(x) CAST(times, AST_node_reverse(CAST(node, (x)))) #define times_length(x) AST_node_length(CAST(node, (x))) #define last_times(x) CAST(times, AST_node_last(CAST(node, (x)))) #define scan_times(var, list) for (var = (list); var; var = CAST(times, var->next)) #define divide_reverse(x) CAST(divide, AST_node_reverse(CAST(node, (x)))) #define divide_length(x) AST_node_length(CAST(node, (x))) #define last_divide(x) CAST(divide, AST_node_last(CAST(node, (x)))) #define scan_divide(var, list) for (var = (list); var; var = CAST(divide, var->next)) #define modulo_reverse(x) CAST(modulo, AST_node_reverse(CAST(node, (x)))) #define modulo_length(x) AST_node_length(CAST(node, (x))) #define last_modulo(x) CAST(modulo, AST_node_last(CAST(node, (x)))) #define scan_modulo(var, list) for (var = (list); var; var = CAST(modulo, var->next)) #define lshift_reverse(x) CAST(lshift, AST_node_reverse(CAST(node, (x)))) #define lshift_length(x) AST_node_length(CAST(node, (x))) #define last_lshift(x) CAST(lshift, AST_node_last(CAST(node, (x)))) #define scan_lshift(var, list) for (var = (list); var; var = CAST(lshift, var->next)) #define rshift_reverse(x) CAST(rshift, AST_node_reverse(CAST(node, (x)))) #define rshift_length(x) AST_node_length(CAST(node, (x))) #define last_rshift(x) CAST(rshift, AST_node_last(CAST(node, (x)))) #define scan_rshift(var, list) for (var = (list); var; var = CAST(rshift, var->next)) #define leq_reverse(x) CAST(leq, AST_node_reverse(CAST(node, (x)))) #define leq_length(x) AST_node_length(CAST(node, (x))) #define last_leq(x) CAST(leq, AST_node_last(CAST(node, (x)))) #define scan_leq(var, list) for (var = (list); var; var = CAST(leq, var->next)) #define geq_reverse(x) CAST(geq, AST_node_reverse(CAST(node, (x)))) #define geq_length(x) AST_node_length(CAST(node, (x))) #define last_geq(x) CAST(geq, AST_node_last(CAST(node, (x)))) #define scan_geq(var, list) for (var = (list); var; var = CAST(geq, var->next)) #define lt_reverse(x) CAST(lt, AST_node_reverse(CAST(node, (x)))) #define lt_length(x) AST_node_length(CAST(node, (x))) #define last_lt(x) CAST(lt, AST_node_last(CAST(node, (x)))) #define scan_lt(var, list) for (var = (list); var; var = CAST(lt, var->next)) #define gt_reverse(x) CAST(gt, AST_node_reverse(CAST(node, (x)))) #define gt_length(x) AST_node_length(CAST(node, (x))) #define last_gt(x) CAST(gt, AST_node_last(CAST(node, (x)))) #define scan_gt(var, list) for (var = (list); var; var = CAST(gt, var->next)) #define eq_reverse(x) CAST(eq, AST_node_reverse(CAST(node, (x)))) #define eq_length(x) AST_node_length(CAST(node, (x))) #define last_eq(x) CAST(eq, AST_node_last(CAST(node, (x)))) #define scan_eq(var, list) for (var = (list); var; var = CAST(eq, var->next)) #define ne_reverse(x) CAST(ne, AST_node_reverse(CAST(node, (x)))) #define ne_length(x) AST_node_length(CAST(node, (x))) #define last_ne(x) CAST(ne, AST_node_last(CAST(node, (x)))) #define scan_ne(var, list) for (var = (list); var; var = CAST(ne, var->next)) #define bitand_reverse(x) CAST(bitand, AST_node_reverse(CAST(node, (x)))) #define bitand_length(x) AST_node_length(CAST(node, (x))) #define last_bitand(x) CAST(bitand, AST_node_last(CAST(node, (x)))) #define scan_bitand(var, list) for (var = (list); var; var = CAST(bitand, var->next)) #define bitor_reverse(x) CAST(bitor, AST_node_reverse(CAST(node, (x)))) #define bitor_length(x) AST_node_length(CAST(node, (x))) #define last_bitor(x) CAST(bitor, AST_node_last(CAST(node, (x)))) #define scan_bitor(var, list) for (var = (list); var; var = CAST(bitor, var->next)) #define bitxor_reverse(x) CAST(bitxor, AST_node_reverse(CAST(node, (x)))) #define bitxor_length(x) AST_node_length(CAST(node, (x))) #define last_bitxor(x) CAST(bitxor, AST_node_last(CAST(node, (x)))) #define scan_bitxor(var, list) for (var = (list); var; var = CAST(bitxor, var->next)) #define andand_reverse(x) CAST(andand, AST_node_reverse(CAST(node, (x)))) #define andand_length(x) AST_node_length(CAST(node, (x))) #define last_andand(x) CAST(andand, AST_node_last(CAST(node, (x)))) #define scan_andand(var, list) for (var = (list); var; var = CAST(andand, var->next)) #define oror_reverse(x) CAST(oror, AST_node_reverse(CAST(node, (x)))) #define oror_length(x) AST_node_length(CAST(node, (x))) #define last_oror(x) CAST(oror, AST_node_last(CAST(node, (x)))) #define scan_oror(var, list) for (var = (list); var; var = CAST(oror, var->next)) #define assign_reverse(x) CAST(assign, AST_node_reverse(CAST(node, (x)))) #define assign_length(x) AST_node_length(CAST(node, (x))) #define last_assign(x) CAST(assign, AST_node_last(CAST(node, (x)))) #define scan_assign(var, list) for (var = (list); var; var = CAST(assign, var->next)) #define plus_assign_reverse(x) CAST(plus_assign, AST_node_reverse(CAST(node, (x)))) #define plus_assign_length(x) AST_node_length(CAST(node, (x))) #define last_plus_assign(x) CAST(plus_assign, AST_node_last(CAST(node, (x)))) #define scan_plus_assign(var, list) for (var = (list); var; var = CAST(plus_assign, var->next)) #define minus_assign_reverse(x) CAST(minus_assign, AST_node_reverse(CAST(node, (x)))) #define minus_assign_length(x) AST_node_length(CAST(node, (x))) #define last_minus_assign(x) CAST(minus_assign, AST_node_last(CAST(node, (x)))) #define scan_minus_assign(var, list) for (var = (list); var; var = CAST(minus_assign, var->next)) #define times_assign_reverse(x) CAST(times_assign, AST_node_reverse(CAST(node, (x)))) #define times_assign_length(x) AST_node_length(CAST(node, (x))) #define last_times_assign(x) CAST(times_assign, AST_node_last(CAST(node, (x)))) #define scan_times_assign(var, list) for (var = (list); var; var = CAST(times_assign, var->next)) #define divide_assign_reverse(x) CAST(divide_assign, AST_node_reverse(CAST(node, (x)))) #define divide_assign_length(x) AST_node_length(CAST(node, (x))) #define last_divide_assign(x) CAST(divide_assign, AST_node_last(CAST(node, (x)))) #define scan_divide_assign(var, list) for (var = (list); var; var = CAST(divide_assign, var->next)) #define modulo_assign_reverse(x) CAST(modulo_assign, AST_node_reverse(CAST(node, (x)))) #define modulo_assign_length(x) AST_node_length(CAST(node, (x))) #define last_modulo_assign(x) CAST(modulo_assign, AST_node_last(CAST(node, (x)))) #define scan_modulo_assign(var, list) for (var = (list); var; var = CAST(modulo_assign, var->next)) #define lshift_assign_reverse(x) CAST(lshift_assign, AST_node_reverse(CAST(node, (x)))) #define lshift_assign_length(x) AST_node_length(CAST(node, (x))) #define last_lshift_assign(x) CAST(lshift_assign, AST_node_last(CAST(node, (x)))) #define scan_lshift_assign(var, list) for (var = (list); var; var = CAST(lshift_assign, var->next)) #define rshift_assign_reverse(x) CAST(rshift_assign, AST_node_reverse(CAST(node, (x)))) #define rshift_assign_length(x) AST_node_length(CAST(node, (x))) #define last_rshift_assign(x) CAST(rshift_assign, AST_node_last(CAST(node, (x)))) #define scan_rshift_assign(var, list) for (var = (list); var; var = CAST(rshift_assign, var->next)) #define bitand_assign_reverse(x) CAST(bitand_assign, AST_node_reverse(CAST(node, (x)))) #define bitand_assign_length(x) AST_node_length(CAST(node, (x))) #define last_bitand_assign(x) CAST(bitand_assign, AST_node_last(CAST(node, (x)))) #define scan_bitand_assign(var, list) for (var = (list); var; var = CAST(bitand_assign, var->next)) #define bitor_assign_reverse(x) CAST(bitor_assign, AST_node_reverse(CAST(node, (x)))) #define bitor_assign_length(x) AST_node_length(CAST(node, (x))) #define last_bitor_assign(x) CAST(bitor_assign, AST_node_last(CAST(node, (x)))) #define scan_bitor_assign(var, list) for (var = (list); var; var = CAST(bitor_assign, var->next)) #define bitxor_assign_reverse(x) CAST(bitxor_assign, AST_node_reverse(CAST(node, (x)))) #define bitxor_assign_length(x) AST_node_length(CAST(node, (x))) #define last_bitxor_assign(x) CAST(bitxor_assign, AST_node_last(CAST(node, (x)))) #define scan_bitxor_assign(var, list) for (var = (list); var; var = CAST(bitxor_assign, var->next)) #define rp_connection_reverse(x) CAST(rp_connection, AST_node_reverse(CAST(node, (x)))) #define rp_connection_length(x) AST_node_length(CAST(node, (x))) #define last_rp_connection(x) CAST(rp_connection, AST_node_last(CAST(node, (x)))) #define scan_rp_connection(var, list) for (var = (list); var; var = CAST(rp_connection, var->next)) #define eq_connection_reverse(x) CAST(eq_connection, AST_node_reverse(CAST(node, (x)))) #define eq_connection_length(x) AST_node_length(CAST(node, (x))) #define last_eq_connection(x) CAST(eq_connection, AST_node_last(CAST(node, (x)))) #define scan_eq_connection(var, list) for (var = (list); var; var = CAST(eq_connection, var->next)) #define nx_struct_ref_reverse(x) CAST(nx_struct_ref, AST_node_reverse(CAST(node, (x)))) #define nx_struct_ref_length(x) AST_node_length(CAST(node, (x))) #define last_nx_struct_ref(x) CAST(nx_struct_ref, AST_node_last(CAST(node, (x)))) #define scan_nx_struct_ref(var, list) for (var = (list); var; var = CAST(nx_struct_ref, var->next)) #define nx_union_ref_reverse(x) CAST(nx_union_ref, AST_node_reverse(CAST(node, (x)))) #define nx_union_ref_length(x) AST_node_length(CAST(node, (x))) #define last_nx_union_ref(x) CAST(nx_union_ref, AST_node_last(CAST(node, (x)))) #define scan_nx_union_ref(var, list) for (var = (list); var; var = CAST(nx_union_ref, var->next)) #define target_attribute_reverse(x) CAST(target_attribute, AST_node_reverse(CAST(node, (x)))) #define target_attribute_length(x) AST_node_length(CAST(node, (x))) #define last_target_attribute(x) CAST(target_attribute, AST_node_last(CAST(node, (x)))) #define scan_target_attribute(var, list) for (var = (list); var; var = CAST(target_attribute, var->next)) node node_chain(node l1, node l2); declaration declaration_chain(declaration l1, declaration l2); statement statement_chain(statement l1, statement l2); expression expression_chain(expression l1, expression l2); type_element type_element_chain(type_element l1, type_element l2); declarator declarator_chain(declarator l1, declarator l2); label label_chain(label l1, label l2); asm_decl asm_decl_chain(asm_decl l1, asm_decl l2); data_decl data_decl_chain(data_decl l1, data_decl l2); extension_decl extension_decl_chain(extension_decl l1, extension_decl l2); ellipsis_decl ellipsis_decl_chain(ellipsis_decl l1, ellipsis_decl l2); enumerator enumerator_chain(enumerator l1, enumerator l2); oldidentifier_decl oldidentifier_decl_chain(oldidentifier_decl l1, oldidentifier_decl l2); function_decl function_decl_chain(function_decl l1, function_decl l2); implicit_decl implicit_decl_chain(implicit_decl l1, implicit_decl l2); variable_decl variable_decl_chain(variable_decl l1, variable_decl l2); field_decl field_decl_chain(field_decl l1, field_decl l2); asttype asttype_chain(asttype l1, asttype l2); typename typename_chain(typename l1, typename l2); typeof_expr typeof_expr_chain(typeof_expr l1, typeof_expr l2); typeof_type typeof_type_chain(typeof_type l1, typeof_type l2); attribute attribute_chain(attribute l1, attribute l2); gcc_attribute gcc_attribute_chain(gcc_attribute l1, gcc_attribute l2); rid rid_chain(rid l1, rid l2); qualifier qualifier_chain(qualifier l1, qualifier l2); tag_ref tag_ref_chain(tag_ref l1, tag_ref l2); struct_ref struct_ref_chain(struct_ref l1, struct_ref l2); union_ref union_ref_chain(union_ref l1, union_ref l2); nested_declarator nested_declarator_chain(nested_declarator l1, nested_declarator l2); function_declarator function_declarator_chain(function_declarator l1, function_declarator l2); pointer_declarator pointer_declarator_chain(pointer_declarator l1, pointer_declarator l2); qualified_declarator qualified_declarator_chain(qualified_declarator l1, qualified_declarator l2); array_declarator array_declarator_chain(array_declarator l1, array_declarator l2); identifier_declarator identifier_declarator_chain(identifier_declarator l1, identifier_declarator l2); asm_stmt asm_stmt_chain(asm_stmt l1, asm_stmt l2); compound_stmt compound_stmt_chain(compound_stmt l1, compound_stmt l2); if_stmt if_stmt_chain(if_stmt l1, if_stmt l2); labeled_stmt labeled_stmt_chain(labeled_stmt l1, labeled_stmt l2); expression_stmt expression_stmt_chain(expression_stmt l1, expression_stmt l2); conditional_stmt conditional_stmt_chain(conditional_stmt l1, conditional_stmt l2); switch_stmt switch_stmt_chain(switch_stmt l1, switch_stmt l2); for_stmt for_stmt_chain(for_stmt l1, for_stmt l2); break_stmt break_stmt_chain(break_stmt l1, break_stmt l2); continue_stmt continue_stmt_chain(continue_stmt l1, continue_stmt l2); return_stmt return_stmt_chain(return_stmt l1, return_stmt l2); goto_stmt goto_stmt_chain(goto_stmt l1, goto_stmt l2); computed_goto_stmt computed_goto_stmt_chain(computed_goto_stmt l1, computed_goto_stmt l2); empty_stmt empty_stmt_chain(empty_stmt l1, empty_stmt l2); unary unary_chain(unary l1, unary l2); binary binary_chain(binary l1, binary l2); comma comma_chain(comma l1, comma l2); sizeof_type sizeof_type_chain(sizeof_type l1, sizeof_type l2); alignof_type alignof_type_chain(alignof_type l1, alignof_type l2); label_address label_address_chain(label_address l1, label_address l2); cast cast_chain(cast l1, cast l2); cast_list cast_list_chain(cast_list l1, cast_list l2); conditional conditional_chain(conditional l1, conditional l2); identifier identifier_chain(identifier l1, identifier l2); compound_expr compound_expr_chain(compound_expr l1, compound_expr l2); function_call function_call_chain(function_call l1, function_call l2); field_ref field_ref_chain(field_ref l1, field_ref l2); increment increment_chain(increment l1, increment l2); comparison comparison_chain(comparison l1, comparison l2); assignment assignment_chain(assignment l1, assignment l2); init_list init_list_chain(init_list l1, init_list l2); init_specific init_specific_chain(init_specific l1, init_specific l2); designator designator_chain(designator l1, designator l2); designate_field designate_field_chain(designate_field l1, designate_field l2); designate_index designate_index_chain(designate_index l1, designate_index l2); lexical_cst lexical_cst_chain(lexical_cst l1, lexical_cst l2); string_cst string_cst_chain(string_cst l1, string_cst l2); string string_chain(string l1, string l2); id_label id_label_chain(id_label l1, id_label l2); case_label case_label_chain(case_label l1, case_label l2); default_label default_label_chain(default_label l1, default_label l2); word word_chain(word l1, word l2); asm_operand asm_operand_chain(asm_operand l1, asm_operand l2); nesc_decl nesc_decl_chain(nesc_decl l1, nesc_decl l2); interface interface_chain(interface l1, interface l2); component component_chain(component l1, component l2); implementation implementation_chain(implementation l1, implementation l2); configuration configuration_chain(configuration l1, configuration l2); module module_chain(module l1, module l2); binary_component binary_component_chain(binary_component l1, binary_component l2); rp_interface rp_interface_chain(rp_interface l1, rp_interface l2); interface_ref interface_ref_chain(interface_ref l1, interface_ref l2); component_ref component_ref_chain(component_ref l1, component_ref l2); connection connection_chain(connection l1, connection l2); endpoint endpoint_chain(endpoint l1, endpoint l2); parameterised_identifier parameterised_identifier_chain(parameterised_identifier l1, parameterised_identifier l2); generic_declarator generic_declarator_chain(generic_declarator l1, generic_declarator l2); generic_call generic_call_chain(generic_call l1, generic_call l2); interface_ref_declarator interface_ref_declarator_chain(interface_ref_declarator l1, interface_ref_declarator l2); interface_deref interface_deref_chain(interface_deref l1, interface_deref l2); component_deref component_deref_chain(component_deref l1, component_deref l2); component_typeref component_typeref_chain(component_typeref l1, component_typeref l2); atomic_stmt atomic_stmt_chain(atomic_stmt l1, atomic_stmt l2); nesc_attribute nesc_attribute_chain(nesc_attribute l1, nesc_attribute l2); type_parm_decl type_parm_decl_chain(type_parm_decl l1, type_parm_decl l2); type_argument type_argument_chain(type_argument l1, type_argument l2); error_decl error_decl_chain(error_decl l1, error_decl l2); attribute_ref attribute_ref_chain(attribute_ref l1, attribute_ref l2); enum_ref enum_ref_chain(enum_ref l1, enum_ref l2); error_stmt error_stmt_chain(error_stmt l1, error_stmt l2); while_stmt while_stmt_chain(while_stmt l1, while_stmt l2); dowhile_stmt dowhile_stmt_chain(dowhile_stmt l1, dowhile_stmt l2); error_expr error_expr_chain(error_expr l1, error_expr l2); array_ref array_ref_chain(array_ref l1, array_ref l2); dereference dereference_chain(dereference l1, dereference l2); extension_expr extension_expr_chain(extension_expr l1, extension_expr l2); sizeof_expr sizeof_expr_chain(sizeof_expr l1, sizeof_expr l2); alignof_expr alignof_expr_chain(alignof_expr l1, alignof_expr l2); realpart realpart_chain(realpart l1, realpart l2); imagpart imagpart_chain(imagpart l1, imagpart l2); address_of address_of_chain(address_of l1, address_of l2); unary_minus unary_minus_chain(unary_minus l1, unary_minus l2); unary_plus unary_plus_chain(unary_plus l1, unary_plus l2); conjugate conjugate_chain(conjugate l1, conjugate l2); bitnot bitnot_chain(bitnot l1, bitnot l2); not not_chain(not l1, not l2); preincrement preincrement_chain(preincrement l1, preincrement l2); predecrement predecrement_chain(predecrement l1, predecrement l2); postincrement postincrement_chain(postincrement l1, postincrement l2); postdecrement postdecrement_chain(postdecrement l1, postdecrement l2); plus plus_chain(plus l1, plus l2); minus minus_chain(minus l1, minus l2); times times_chain(times l1, times l2); divide divide_chain(divide l1, divide l2); modulo modulo_chain(modulo l1, modulo l2); lshift lshift_chain(lshift l1, lshift l2); rshift rshift_chain(rshift l1, rshift l2); leq leq_chain(leq l1, leq l2); geq geq_chain(geq l1, geq l2); lt lt_chain(lt l1, lt l2); gt gt_chain(gt l1, gt l2); eq eq_chain(eq l1, eq l2); ne ne_chain(ne l1, ne l2); bitand bitand_chain(bitand l1, bitand l2); bitor bitor_chain(bitor l1, bitor l2); bitxor bitxor_chain(bitxor l1, bitxor l2); andand andand_chain(andand l1, andand l2); oror oror_chain(oror l1, oror l2); assign assign_chain(assign l1, assign l2); plus_assign plus_assign_chain(plus_assign l1, plus_assign l2); minus_assign minus_assign_chain(minus_assign l1, minus_assign l2); times_assign times_assign_chain(times_assign l1, times_assign l2); divide_assign divide_assign_chain(divide_assign l1, divide_assign l2); modulo_assign modulo_assign_chain(modulo_assign l1, modulo_assign l2); lshift_assign lshift_assign_chain(lshift_assign l1, lshift_assign l2); rshift_assign rshift_assign_chain(rshift_assign l1, rshift_assign l2); bitand_assign bitand_assign_chain(bitand_assign l1, bitand_assign l2); bitor_assign bitor_assign_chain(bitor_assign l1, bitor_assign l2); bitxor_assign bitxor_assign_chain(bitxor_assign l1, bitxor_assign l2); rp_connection rp_connection_chain(rp_connection l1, rp_connection l2); eq_connection eq_connection_chain(eq_connection l1, eq_connection l2); nx_struct_ref nx_struct_ref_chain(nx_struct_ref l1, nx_struct_ref l2); nx_union_ref nx_union_ref_chain(nx_union_ref l1, nx_union_ref l2); target_attribute target_attribute_chain(target_attribute l1, target_attribute l2); nescc-1.3.4/src/AST_parent.c000066400000000000000000000315451177770303300155650ustar00rootroot00000000000000/* Automatically generated from nodetypes.def, do not edit. */ /* See the copyright notice in nodetypes.def */ case kind_node: break; case kind_declaration: case kind_error_decl: break; case kind_statement: case kind_error_stmt: break; case kind_expression: case kind_error_expr: break; case kind_type_element: break; case kind_declarator: break; case kind_label: break; case kind_asm_decl: { asm_decl x = CAST(asm_decl, n); AST_set_parent_list(&x->asm_stmt, n); break; } case kind_data_decl: { data_decl x = CAST(data_decl, n); AST_set_parent_list(&x->modifiers, n); AST_set_parent_list(&x->decls, n); break; } case kind_extension_decl: { extension_decl x = CAST(extension_decl, n); AST_set_parent_list(&x->decl, n); break; } case kind_ellipsis_decl: break; case kind_enumerator: { enumerator x = CAST(enumerator, n); AST_set_parent_list(&x->arg1, n); break; } case kind_oldidentifier_decl: break; case kind_function_decl: { function_decl x = CAST(function_decl, n); AST_set_parent_list(&x->declarator, n); AST_set_parent_list(&x->modifiers, n); AST_set_parent_list(&x->attributes, n); AST_set_parent_list(&x->stmt, n); break; } case kind_implicit_decl: break; case kind_variable_decl: { variable_decl x = CAST(variable_decl, n); AST_set_parent_list(&x->declarator, n); AST_set_parent_list(&x->attributes, n); AST_set_parent_list(&x->arg1, n); AST_set_parent_list(&x->asm_stmt, n); break; } case kind_field_decl: { field_decl x = CAST(field_decl, n); AST_set_parent_list(&x->declarator, n); AST_set_parent_list(&x->attributes, n); AST_set_parent_list(&x->arg1, n); break; } case kind_asttype: { asttype x = CAST(asttype, n); AST_set_parent_list(&x->declarator, n); AST_set_parent_list(&x->qualifiers, n); break; } case kind_typename: break; case kind_typeof_expr: { typeof_expr x = CAST(typeof_expr, n); AST_set_parent_list(&x->arg1, n); break; } case kind_typeof_type: { typeof_type x = CAST(typeof_type, n); AST_set_parent_list(&x->asttype, n); break; } case kind_attribute: { attribute x = CAST(attribute, n); AST_set_parent_list(&x->word1, n); break; } case kind_gcc_attribute: case kind_target_attribute: { gcc_attribute x = CAST(gcc_attribute, n); AST_set_parent_list(&x->word1, n); AST_set_parent_list(&x->args, n); break; } case kind_rid: break; case kind_qualifier: break; case kind_tag_ref: case kind_enum_ref: case kind_attribute_ref: { tag_ref x = CAST(tag_ref, n); AST_set_parent_list(&x->word1, n); AST_set_parent_list(&x->attributes, n); AST_set_parent_list(&x->fields, n); break; } case kind_struct_ref: case kind_nx_struct_ref: { struct_ref x = CAST(struct_ref, n); AST_set_parent_list(&x->word1, n); AST_set_parent_list(&x->attributes, n); AST_set_parent_list(&x->fields, n); break; } case kind_union_ref: case kind_nx_union_ref: { union_ref x = CAST(union_ref, n); AST_set_parent_list(&x->word1, n); AST_set_parent_list(&x->attributes, n); AST_set_parent_list(&x->fields, n); break; } case kind_nested_declarator: { nested_declarator x = CAST(nested_declarator, n); AST_set_parent_list(&x->declarator, n); break; } case kind_function_declarator: { function_declarator x = CAST(function_declarator, n); AST_set_parent_list(&x->declarator, n); AST_set_parent_list(&x->parms, n); AST_set_parent_list(&x->gparms, n); AST_set_parent_list(&x->qualifiers, n); AST_set_parent_list(&x->return_type, n); break; } case kind_pointer_declarator: { pointer_declarator x = CAST(pointer_declarator, n); AST_set_parent_list(&x->declarator, n); break; } case kind_qualified_declarator: { qualified_declarator x = CAST(qualified_declarator, n); AST_set_parent_list(&x->declarator, n); AST_set_parent_list(&x->modifiers, n); break; } case kind_array_declarator: { array_declarator x = CAST(array_declarator, n); AST_set_parent_list(&x->declarator, n); AST_set_parent_list(&x->arg1, n); break; } case kind_identifier_declarator: break; case kind_asm_stmt: { asm_stmt x = CAST(asm_stmt, n); AST_set_parent_list(&x->arg1, n); AST_set_parent_list(&x->asm_operands1, n); AST_set_parent_list(&x->asm_operands2, n); AST_set_parent_list(&x->asm_clobbers, n); AST_set_parent_list(&x->qualifiers, n); break; } case kind_compound_stmt: { compound_stmt x = CAST(compound_stmt, n); AST_set_parent_list(&x->id_labels, n); AST_set_parent_list(&x->decls, n); AST_set_parent_list(&x->stmts, n); break; } case kind_if_stmt: { if_stmt x = CAST(if_stmt, n); AST_set_parent_list(&x->condition, n); AST_set_parent_list(&x->stmt1, n); AST_set_parent_list(&x->stmt2, n); break; } case kind_labeled_stmt: { labeled_stmt x = CAST(labeled_stmt, n); AST_set_parent_list(&x->label, n); AST_set_parent_list(&x->stmt, n); break; } case kind_expression_stmt: { expression_stmt x = CAST(expression_stmt, n); AST_set_parent_list(&x->arg1, n); break; } case kind_conditional_stmt: case kind_dowhile_stmt: case kind_while_stmt: { conditional_stmt x = CAST(conditional_stmt, n); AST_set_parent_list(&x->condition, n); AST_set_parent_list(&x->stmt, n); break; } case kind_switch_stmt: { switch_stmt x = CAST(switch_stmt, n); AST_set_parent_list(&x->condition, n); AST_set_parent_list(&x->stmt, n); break; } case kind_for_stmt: { for_stmt x = CAST(for_stmt, n); AST_set_parent_list(&x->arg1, n); AST_set_parent_list(&x->arg2, n); AST_set_parent_list(&x->arg3, n); AST_set_parent_list(&x->stmt, n); break; } case kind_break_stmt: break; case kind_continue_stmt: break; case kind_return_stmt: { return_stmt x = CAST(return_stmt, n); AST_set_parent_list(&x->arg1, n); break; } case kind_goto_stmt: { goto_stmt x = CAST(goto_stmt, n); AST_set_parent_list(&x->id_label, n); break; } case kind_computed_goto_stmt: { computed_goto_stmt x = CAST(computed_goto_stmt, n); AST_set_parent_list(&x->arg1, n); break; } case kind_empty_stmt: break; case kind_unary: case kind_not: case kind_bitnot: case kind_conjugate: case kind_unary_plus: case kind_unary_minus: case kind_address_of: case kind_imagpart: case kind_realpart: case kind_alignof_expr: case kind_sizeof_expr: case kind_extension_expr: case kind_dereference: { unary x = CAST(unary, n); AST_set_parent_list(&x->arg1, n); break; } case kind_binary: case kind_oror: case kind_andand: case kind_bitxor: case kind_bitor: case kind_bitand: case kind_rshift: case kind_lshift: case kind_modulo: case kind_divide: case kind_times: case kind_minus: case kind_plus: case kind_array_ref: { binary x = CAST(binary, n); AST_set_parent_list(&x->arg1, n); AST_set_parent_list(&x->arg2, n); break; } case kind_comma: { comma x = CAST(comma, n); AST_set_parent_list(&x->arg1, n); break; } case kind_sizeof_type: { sizeof_type x = CAST(sizeof_type, n); AST_set_parent_list(&x->asttype, n); break; } case kind_alignof_type: { alignof_type x = CAST(alignof_type, n); AST_set_parent_list(&x->asttype, n); break; } case kind_label_address: { label_address x = CAST(label_address, n); AST_set_parent_list(&x->id_label, n); break; } case kind_cast: { cast x = CAST(cast, n); AST_set_parent_list(&x->arg1, n); AST_set_parent_list(&x->asttype, n); break; } case kind_cast_list: { cast_list x = CAST(cast_list, n); AST_set_parent_list(&x->asttype, n); AST_set_parent_list(&x->init_expr, n); break; } case kind_conditional: { conditional x = CAST(conditional, n); AST_set_parent_list(&x->condition, n); AST_set_parent_list(&x->arg1, n); AST_set_parent_list(&x->arg2, n); break; } case kind_identifier: break; case kind_compound_expr: { compound_expr x = CAST(compound_expr, n); AST_set_parent_list(&x->stmt, n); break; } case kind_function_call: { function_call x = CAST(function_call, n); AST_set_parent_list(&x->arg1, n); AST_set_parent_list(&x->args, n); break; } case kind_field_ref: { field_ref x = CAST(field_ref, n); AST_set_parent_list(&x->arg1, n); break; } case kind_increment: case kind_postdecrement: case kind_postincrement: case kind_predecrement: case kind_preincrement: { increment x = CAST(increment, n); AST_set_parent_list(&x->arg1, n); break; } case kind_comparison: case kind_ne: case kind_eq: case kind_gt: case kind_lt: case kind_geq: case kind_leq: { comparison x = CAST(comparison, n); AST_set_parent_list(&x->arg1, n); AST_set_parent_list(&x->arg2, n); break; } case kind_assignment: case kind_bitxor_assign: case kind_bitor_assign: case kind_bitand_assign: case kind_rshift_assign: case kind_lshift_assign: case kind_modulo_assign: case kind_divide_assign: case kind_times_assign: case kind_minus_assign: case kind_plus_assign: case kind_assign: { assignment x = CAST(assignment, n); AST_set_parent_list(&x->arg1, n); AST_set_parent_list(&x->arg2, n); break; } case kind_init_list: { init_list x = CAST(init_list, n); AST_set_parent_list(&x->args, n); break; } case kind_init_specific: { init_specific x = CAST(init_specific, n); AST_set_parent_list(&x->designator, n); AST_set_parent_list(&x->init_expr, n); break; } case kind_designator: break; case kind_designate_field: break; case kind_designate_index: { designate_index x = CAST(designate_index, n); AST_set_parent_list(&x->arg1, n); AST_set_parent_list(&x->arg2, n); break; } case kind_lexical_cst: break; case kind_string_cst: break; case kind_string: { string x = CAST(string, n); AST_set_parent_list(&x->strings, n); break; } case kind_id_label: break; case kind_case_label: { case_label x = CAST(case_label, n); AST_set_parent_list(&x->arg1, n); AST_set_parent_list(&x->arg2, n); break; } case kind_default_label: break; case kind_word: break; case kind_asm_operand: { asm_operand x = CAST(asm_operand, n); AST_set_parent_list(&x->word1, n); AST_set_parent_list(&x->string, n); AST_set_parent_list(&x->arg1, n); break; } case kind_nesc_decl: { nesc_decl x = CAST(nesc_decl, n); AST_set_parent_list(&x->word1, n); AST_set_parent_list(&x->attributes, n); break; } case kind_interface: { interface x = CAST(interface, n); AST_set_parent_list(&x->word1, n); AST_set_parent_list(&x->attributes, n); AST_set_parent_list(&x->decls, n); break; } case kind_component: { component x = CAST(component, n); AST_set_parent_list(&x->word1, n); AST_set_parent_list(&x->attributes, n); AST_set_parent_list(&x->parms, n); AST_set_parent_list(&x->decls, n); AST_set_parent_list(&x->implementation, n); break; } case kind_implementation: break; case kind_configuration: { configuration x = CAST(configuration, n); AST_set_parent_list(&x->decls, n); break; } case kind_module: { module x = CAST(module, n); AST_set_parent_list(&x->decls, n); break; } case kind_binary_component: break; case kind_rp_interface: { rp_interface x = CAST(rp_interface, n); AST_set_parent_list(&x->decls, n); break; } case kind_interface_ref: { interface_ref x = CAST(interface_ref, n); AST_set_parent_list(&x->word1, n); AST_set_parent_list(&x->args, n); AST_set_parent_list(&x->word2, n); AST_set_parent_list(&x->gparms, n); AST_set_parent_list(&x->attributes, n); break; } case kind_component_ref: { component_ref x = CAST(component_ref, n); AST_set_parent_list(&x->word1, n); AST_set_parent_list(&x->word2, n); AST_set_parent_list(&x->args, n); break; } case kind_connection: case kind_eq_connection: case kind_rp_connection: { connection x = CAST(connection, n); AST_set_parent_list(&x->ep1, n); AST_set_parent_list(&x->ep2, n); break; } case kind_endpoint: { endpoint x = CAST(endpoint, n); AST_set_parent_list(&x->ids, n); break; } case kind_parameterised_identifier: { parameterised_identifier x = CAST(parameterised_identifier, n); AST_set_parent_list(&x->word1, n); AST_set_parent_list(&x->args, n); break; } case kind_generic_declarator: { generic_declarator x = CAST(generic_declarator, n); AST_set_parent_list(&x->declarator, n); AST_set_parent_list(&x->parms, n); break; } case kind_generic_call: { generic_call x = CAST(generic_call, n); AST_set_parent_list(&x->arg1, n); AST_set_parent_list(&x->args, n); break; } case kind_interface_ref_declarator: { interface_ref_declarator x = CAST(interface_ref_declarator, n); AST_set_parent_list(&x->declarator, n); AST_set_parent_list(&x->word1, n); break; } case kind_interface_deref: { interface_deref x = CAST(interface_deref, n); AST_set_parent_list(&x->arg1, n); break; } case kind_component_deref: { component_deref x = CAST(component_deref, n); AST_set_parent_list(&x->arg1, n); break; } case kind_component_typeref: break; case kind_atomic_stmt: { atomic_stmt x = CAST(atomic_stmt, n); AST_set_parent_list(&x->stmt, n); break; } case kind_nesc_attribute: { nesc_attribute x = CAST(nesc_attribute, n); AST_set_parent_list(&x->word1, n); AST_set_parent_list(&x->arg1, n); break; } case kind_type_parm_decl: break; case kind_type_argument: { type_argument x = CAST(type_argument, n); AST_set_parent_list(&x->asttype, n); break; } nescc-1.3.4/src/AST_print.c000066400000000000000000000757041177770303300154350ustar00rootroot00000000000000/* Automatically generated from nodetypes.def, do not edit. */ /* See the copyright notice in nodetypes.def */ case kind_node: puts("node"); break; case kind_declaration: puts("declaration"); break; case kind_statement: puts("statement"); break; case kind_expression: puts("expression"); break; case kind_type_element: puts("type_element"); break; case kind_declarator: puts("declarator"); break; case kind_label: puts("label"); break; case kind_asm_decl: { asm_decl x = CAST(asm_decl, n); puts("asm_decl"); pindent(indent); puts("asm_stmt:"); AST_print_list(indent + 1, x->asm_stmt); break; } case kind_data_decl: { data_decl x = CAST(data_decl, n); puts("data_decl"); pindent(indent); puts("modifiers:"); AST_print_list(indent + 1, x->modifiers); pindent(indent); puts("decls:"); AST_print_list(indent + 1, x->decls); break; } case kind_extension_decl: { extension_decl x = CAST(extension_decl, n); puts("extension_decl"); pindent(indent); puts("decl:"); AST_print_list(indent + 1, x->decl); break; } case kind_ellipsis_decl: puts("ellipsis_decl"); break; case kind_enumerator: { enumerator x = CAST(enumerator, n); puts("enumerator"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_oldidentifier_decl: puts("oldidentifier_decl"); break; case kind_function_decl: { function_decl x = CAST(function_decl, n); puts("function_decl"); pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator); pindent(indent); puts("modifiers:"); AST_print_list(indent + 1, x->modifiers); pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes); pindent(indent); puts("stmt:"); AST_print_list(indent + 1, x->stmt); break; } case kind_implicit_decl: puts("implicit_decl"); break; case kind_variable_decl: { variable_decl x = CAST(variable_decl, n); puts("variable_decl"); pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator); pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("asm_stmt:"); AST_print_list(indent + 1, x->asm_stmt); break; } case kind_field_decl: { field_decl x = CAST(field_decl, n); puts("field_decl"); pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator); pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_asttype: { asttype x = CAST(asttype, n); puts("asttype"); pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator); pindent(indent); puts("qualifiers:"); AST_print_list(indent + 1, x->qualifiers); break; } case kind_typename: puts("typename"); break; case kind_typeof_expr: { typeof_expr x = CAST(typeof_expr, n); puts("typeof_expr"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_typeof_type: { typeof_type x = CAST(typeof_type, n); puts("typeof_type"); pindent(indent); puts("asttype:"); AST_print_list(indent + 1, x->asttype); break; } case kind_attribute: { attribute x = CAST(attribute, n); puts("attribute"); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); break; } case kind_gcc_attribute: { gcc_attribute x = CAST(gcc_attribute, n); puts("gcc_attribute"); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); pindent(indent); puts("args:"); AST_print_list(indent + 1, x->args); break; } case kind_rid: puts("rid"); break; case kind_qualifier: puts("qualifier"); break; case kind_tag_ref: { tag_ref x = CAST(tag_ref, n); puts("tag_ref"); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes); pindent(indent); puts("fields:"); AST_print_list(indent + 1, x->fields); break; } case kind_struct_ref: { struct_ref x = CAST(struct_ref, n); puts("struct_ref"); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes); pindent(indent); puts("fields:"); AST_print_list(indent + 1, x->fields); break; } case kind_union_ref: { union_ref x = CAST(union_ref, n); puts("union_ref"); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes); pindent(indent); puts("fields:"); AST_print_list(indent + 1, x->fields); break; } case kind_nested_declarator: { nested_declarator x = CAST(nested_declarator, n); puts("nested_declarator"); pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator); break; } case kind_function_declarator: { function_declarator x = CAST(function_declarator, n); puts("function_declarator"); pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator); pindent(indent); puts("parms:"); AST_print_list(indent + 1, x->parms); pindent(indent); puts("gparms:"); AST_print_list(indent + 1, x->gparms); pindent(indent); puts("qualifiers:"); AST_print_list(indent + 1, x->qualifiers); pindent(indent); puts("return_type:"); AST_print_list(indent + 1, x->return_type); break; } case kind_pointer_declarator: { pointer_declarator x = CAST(pointer_declarator, n); puts("pointer_declarator"); pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator); break; } case kind_qualified_declarator: { qualified_declarator x = CAST(qualified_declarator, n); puts("qualified_declarator"); pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator); pindent(indent); puts("modifiers:"); AST_print_list(indent + 1, x->modifiers); break; } case kind_array_declarator: { array_declarator x = CAST(array_declarator, n); puts("array_declarator"); pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_identifier_declarator: puts("identifier_declarator"); break; case kind_asm_stmt: { asm_stmt x = CAST(asm_stmt, n); puts("asm_stmt"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("asm_operands1:"); AST_print_list(indent + 1, x->asm_operands1); pindent(indent); puts("asm_operands2:"); AST_print_list(indent + 1, x->asm_operands2); pindent(indent); puts("asm_clobbers:"); AST_print_list(indent + 1, x->asm_clobbers); pindent(indent); puts("qualifiers:"); AST_print_list(indent + 1, x->qualifiers); break; } case kind_compound_stmt: { compound_stmt x = CAST(compound_stmt, n); puts("compound_stmt"); pindent(indent); puts("id_labels:"); AST_print_list(indent + 1, x->id_labels); pindent(indent); puts("decls:"); AST_print_list(indent + 1, x->decls); pindent(indent); puts("stmts:"); AST_print_list(indent + 1, x->stmts); break; } case kind_if_stmt: { if_stmt x = CAST(if_stmt, n); puts("if_stmt"); pindent(indent); puts("condition:"); AST_print_list(indent + 1, x->condition); pindent(indent); puts("stmt1:"); AST_print_list(indent + 1, x->stmt1); pindent(indent); puts("stmt2:"); AST_print_list(indent + 1, x->stmt2); break; } case kind_labeled_stmt: { labeled_stmt x = CAST(labeled_stmt, n); puts("labeled_stmt"); pindent(indent); puts("label:"); AST_print_list(indent + 1, x->label); pindent(indent); puts("stmt:"); AST_print_list(indent + 1, x->stmt); break; } case kind_expression_stmt: { expression_stmt x = CAST(expression_stmt, n); puts("expression_stmt"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_conditional_stmt: { conditional_stmt x = CAST(conditional_stmt, n); puts("conditional_stmt"); pindent(indent); puts("condition:"); AST_print_list(indent + 1, x->condition); pindent(indent); puts("stmt:"); AST_print_list(indent + 1, x->stmt); break; } case kind_switch_stmt: { switch_stmt x = CAST(switch_stmt, n); puts("switch_stmt"); pindent(indent); puts("condition:"); AST_print_list(indent + 1, x->condition); pindent(indent); puts("stmt:"); AST_print_list(indent + 1, x->stmt); break; } case kind_for_stmt: { for_stmt x = CAST(for_stmt, n); puts("for_stmt"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); pindent(indent); puts("arg3:"); AST_print_list(indent + 1, x->arg3); pindent(indent); puts("stmt:"); AST_print_list(indent + 1, x->stmt); break; } case kind_break_stmt: puts("break_stmt"); break; case kind_continue_stmt: puts("continue_stmt"); break; case kind_return_stmt: { return_stmt x = CAST(return_stmt, n); puts("return_stmt"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_goto_stmt: { goto_stmt x = CAST(goto_stmt, n); puts("goto_stmt"); pindent(indent); puts("id_label:"); AST_print_list(indent + 1, x->id_label); break; } case kind_computed_goto_stmt: { computed_goto_stmt x = CAST(computed_goto_stmt, n); puts("computed_goto_stmt"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_empty_stmt: puts("empty_stmt"); break; case kind_unary: { unary x = CAST(unary, n); puts("unary"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_binary: { binary x = CAST(binary, n); puts("binary"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_comma: { comma x = CAST(comma, n); puts("comma"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_sizeof_type: { sizeof_type x = CAST(sizeof_type, n); puts("sizeof_type"); pindent(indent); puts("asttype:"); AST_print_list(indent + 1, x->asttype); break; } case kind_alignof_type: { alignof_type x = CAST(alignof_type, n); puts("alignof_type"); pindent(indent); puts("asttype:"); AST_print_list(indent + 1, x->asttype); break; } case kind_label_address: { label_address x = CAST(label_address, n); puts("label_address"); pindent(indent); puts("id_label:"); AST_print_list(indent + 1, x->id_label); break; } case kind_cast: { cast x = CAST(cast, n); puts("cast"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("asttype:"); AST_print_list(indent + 1, x->asttype); break; } case kind_cast_list: { cast_list x = CAST(cast_list, n); puts("cast_list"); pindent(indent); puts("asttype:"); AST_print_list(indent + 1, x->asttype); pindent(indent); puts("init_expr:"); AST_print_list(indent + 1, x->init_expr); break; } case kind_conditional: { conditional x = CAST(conditional, n); puts("conditional"); pindent(indent); puts("condition:"); AST_print_list(indent + 1, x->condition); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_identifier: puts("identifier"); break; case kind_compound_expr: { compound_expr x = CAST(compound_expr, n); puts("compound_expr"); pindent(indent); puts("stmt:"); AST_print_list(indent + 1, x->stmt); break; } case kind_function_call: { function_call x = CAST(function_call, n); puts("function_call"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("args:"); AST_print_list(indent + 1, x->args); break; } case kind_field_ref: { field_ref x = CAST(field_ref, n); puts("field_ref"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_increment: { increment x = CAST(increment, n); puts("increment"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_comparison: { comparison x = CAST(comparison, n); puts("comparison"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_assignment: { assignment x = CAST(assignment, n); puts("assignment"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_init_list: { init_list x = CAST(init_list, n); puts("init_list"); pindent(indent); puts("args:"); AST_print_list(indent + 1, x->args); break; } case kind_init_specific: { init_specific x = CAST(init_specific, n); puts("init_specific"); pindent(indent); puts("designator:"); AST_print_list(indent + 1, x->designator); pindent(indent); puts("init_expr:"); AST_print_list(indent + 1, x->init_expr); break; } case kind_designator: puts("designator"); break; case kind_designate_field: puts("designate_field"); break; case kind_designate_index: { designate_index x = CAST(designate_index, n); puts("designate_index"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_lexical_cst: puts("lexical_cst"); break; case kind_string_cst: puts("string_cst"); break; case kind_string: { string x = CAST(string, n); puts("string"); pindent(indent); puts("strings:"); AST_print_list(indent + 1, x->strings); break; } case kind_id_label: puts("id_label"); break; case kind_case_label: { case_label x = CAST(case_label, n); puts("case_label"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_default_label: puts("default_label"); break; case kind_word: puts("word"); break; case kind_asm_operand: { asm_operand x = CAST(asm_operand, n); puts("asm_operand"); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); pindent(indent); puts("string:"); AST_print_list(indent + 1, x->string); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_nesc_decl: { nesc_decl x = CAST(nesc_decl, n); puts("nesc_decl"); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes); break; } case kind_interface: { interface x = CAST(interface, n); puts("interface"); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes); pindent(indent); puts("decls:"); AST_print_list(indent + 1, x->decls); break; } case kind_component: { component x = CAST(component, n); puts("component"); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes); pindent(indent); puts("parms:"); AST_print_list(indent + 1, x->parms); pindent(indent); puts("decls:"); AST_print_list(indent + 1, x->decls); pindent(indent); puts("implementation:"); AST_print_list(indent + 1, x->implementation); break; } case kind_implementation: puts("implementation"); break; case kind_configuration: { configuration x = CAST(configuration, n); puts("configuration"); pindent(indent); puts("decls:"); AST_print_list(indent + 1, x->decls); break; } case kind_module: { module x = CAST(module, n); puts("module"); pindent(indent); puts("decls:"); AST_print_list(indent + 1, x->decls); break; } case kind_binary_component: puts("binary_component"); break; case kind_rp_interface: { rp_interface x = CAST(rp_interface, n); puts("rp_interface"); pindent(indent); puts("decls:"); AST_print_list(indent + 1, x->decls); break; } case kind_interface_ref: { interface_ref x = CAST(interface_ref, n); puts("interface_ref"); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); pindent(indent); puts("args:"); AST_print_list(indent + 1, x->args); pindent(indent); puts("word2:"); AST_print_list(indent + 1, x->word2); pindent(indent); puts("gparms:"); AST_print_list(indent + 1, x->gparms); pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes); break; } case kind_component_ref: { component_ref x = CAST(component_ref, n); puts("component_ref"); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); pindent(indent); puts("word2:"); AST_print_list(indent + 1, x->word2); pindent(indent); puts("args:"); AST_print_list(indent + 1, x->args); break; } case kind_connection: { connection x = CAST(connection, n); puts("connection"); pindent(indent); puts("ep1:"); AST_print_list(indent + 1, x->ep1); pindent(indent); puts("ep2:"); AST_print_list(indent + 1, x->ep2); break; } case kind_endpoint: { endpoint x = CAST(endpoint, n); puts("endpoint"); pindent(indent); puts("ids:"); AST_print_list(indent + 1, x->ids); break; } case kind_parameterised_identifier: { parameterised_identifier x = CAST(parameterised_identifier, n); puts("parameterised_identifier"); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); pindent(indent); puts("args:"); AST_print_list(indent + 1, x->args); break; } case kind_generic_declarator: { generic_declarator x = CAST(generic_declarator, n); puts("generic_declarator"); pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator); pindent(indent); puts("parms:"); AST_print_list(indent + 1, x->parms); break; } case kind_generic_call: { generic_call x = CAST(generic_call, n); puts("generic_call"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("args:"); AST_print_list(indent + 1, x->args); break; } case kind_interface_ref_declarator: { interface_ref_declarator x = CAST(interface_ref_declarator, n); puts("interface_ref_declarator"); pindent(indent); puts("declarator:"); AST_print_list(indent + 1, x->declarator); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); break; } case kind_interface_deref: { interface_deref x = CAST(interface_deref, n); puts("interface_deref"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_component_deref: { component_deref x = CAST(component_deref, n); puts("component_deref"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_component_typeref: puts("component_typeref"); break; case kind_atomic_stmt: { atomic_stmt x = CAST(atomic_stmt, n); puts("atomic_stmt"); pindent(indent); puts("stmt:"); AST_print_list(indent + 1, x->stmt); break; } case kind_nesc_attribute: { nesc_attribute x = CAST(nesc_attribute, n); puts("nesc_attribute"); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_type_parm_decl: puts("type_parm_decl"); break; case kind_type_argument: { type_argument x = CAST(type_argument, n); puts("type_argument"); pindent(indent); puts("asttype:"); AST_print_list(indent + 1, x->asttype); break; } case kind_error_decl: puts("error_decl"); break; case kind_attribute_ref: { attribute_ref x = CAST(attribute_ref, n); puts("attribute_ref"); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes); pindent(indent); puts("fields:"); AST_print_list(indent + 1, x->fields); break; } case kind_enum_ref: { enum_ref x = CAST(enum_ref, n); puts("enum_ref"); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes); pindent(indent); puts("fields:"); AST_print_list(indent + 1, x->fields); break; } case kind_error_stmt: puts("error_stmt"); break; case kind_while_stmt: { while_stmt x = CAST(while_stmt, n); puts("while_stmt"); pindent(indent); puts("condition:"); AST_print_list(indent + 1, x->condition); pindent(indent); puts("stmt:"); AST_print_list(indent + 1, x->stmt); break; } case kind_dowhile_stmt: { dowhile_stmt x = CAST(dowhile_stmt, n); puts("dowhile_stmt"); pindent(indent); puts("condition:"); AST_print_list(indent + 1, x->condition); pindent(indent); puts("stmt:"); AST_print_list(indent + 1, x->stmt); break; } case kind_error_expr: puts("error_expr"); break; case kind_array_ref: { array_ref x = CAST(array_ref, n); puts("array_ref"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_dereference: { dereference x = CAST(dereference, n); puts("dereference"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_extension_expr: { extension_expr x = CAST(extension_expr, n); puts("extension_expr"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_sizeof_expr: { sizeof_expr x = CAST(sizeof_expr, n); puts("sizeof_expr"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_alignof_expr: { alignof_expr x = CAST(alignof_expr, n); puts("alignof_expr"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_realpart: { realpart x = CAST(realpart, n); puts("realpart"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_imagpart: { imagpart x = CAST(imagpart, n); puts("imagpart"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_address_of: { address_of x = CAST(address_of, n); puts("address_of"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_unary_minus: { unary_minus x = CAST(unary_minus, n); puts("unary_minus"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_unary_plus: { unary_plus x = CAST(unary_plus, n); puts("unary_plus"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_conjugate: { conjugate x = CAST(conjugate, n); puts("conjugate"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_bitnot: { bitnot x = CAST(bitnot, n); puts("bitnot"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_not: { not x = CAST(not, n); puts("not"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_preincrement: { preincrement x = CAST(preincrement, n); puts("preincrement"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_predecrement: { predecrement x = CAST(predecrement, n); puts("predecrement"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_postincrement: { postincrement x = CAST(postincrement, n); puts("postincrement"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_postdecrement: { postdecrement x = CAST(postdecrement, n); puts("postdecrement"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); break; } case kind_plus: { plus x = CAST(plus, n); puts("plus"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_minus: { minus x = CAST(minus, n); puts("minus"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_times: { times x = CAST(times, n); puts("times"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_divide: { divide x = CAST(divide, n); puts("divide"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_modulo: { modulo x = CAST(modulo, n); puts("modulo"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_lshift: { lshift x = CAST(lshift, n); puts("lshift"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_rshift: { rshift x = CAST(rshift, n); puts("rshift"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_leq: { leq x = CAST(leq, n); puts("leq"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_geq: { geq x = CAST(geq, n); puts("geq"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_lt: { lt x = CAST(lt, n); puts("lt"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_gt: { gt x = CAST(gt, n); puts("gt"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_eq: { eq x = CAST(eq, n); puts("eq"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_ne: { ne x = CAST(ne, n); puts("ne"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_bitand: { bitand x = CAST(bitand, n); puts("bitand"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_bitor: { bitor x = CAST(bitor, n); puts("bitor"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_bitxor: { bitxor x = CAST(bitxor, n); puts("bitxor"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_andand: { andand x = CAST(andand, n); puts("andand"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_oror: { oror x = CAST(oror, n); puts("oror"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_assign: { assign x = CAST(assign, n); puts("assign"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_plus_assign: { plus_assign x = CAST(plus_assign, n); puts("plus_assign"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_minus_assign: { minus_assign x = CAST(minus_assign, n); puts("minus_assign"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_times_assign: { times_assign x = CAST(times_assign, n); puts("times_assign"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_divide_assign: { divide_assign x = CAST(divide_assign, n); puts("divide_assign"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_modulo_assign: { modulo_assign x = CAST(modulo_assign, n); puts("modulo_assign"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_lshift_assign: { lshift_assign x = CAST(lshift_assign, n); puts("lshift_assign"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_rshift_assign: { rshift_assign x = CAST(rshift_assign, n); puts("rshift_assign"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_bitand_assign: { bitand_assign x = CAST(bitand_assign, n); puts("bitand_assign"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_bitor_assign: { bitor_assign x = CAST(bitor_assign, n); puts("bitor_assign"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_bitxor_assign: { bitxor_assign x = CAST(bitxor_assign, n); puts("bitxor_assign"); pindent(indent); puts("arg1:"); AST_print_list(indent + 1, x->arg1); pindent(indent); puts("arg2:"); AST_print_list(indent + 1, x->arg2); break; } case kind_rp_connection: { rp_connection x = CAST(rp_connection, n); puts("rp_connection"); pindent(indent); puts("ep1:"); AST_print_list(indent + 1, x->ep1); pindent(indent); puts("ep2:"); AST_print_list(indent + 1, x->ep2); break; } case kind_eq_connection: { eq_connection x = CAST(eq_connection, n); puts("eq_connection"); pindent(indent); puts("ep1:"); AST_print_list(indent + 1, x->ep1); pindent(indent); puts("ep2:"); AST_print_list(indent + 1, x->ep2); break; } case kind_nx_struct_ref: { nx_struct_ref x = CAST(nx_struct_ref, n); puts("nx_struct_ref"); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes); pindent(indent); puts("fields:"); AST_print_list(indent + 1, x->fields); break; } case kind_nx_union_ref: { nx_union_ref x = CAST(nx_union_ref, n); puts("nx_union_ref"); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); pindent(indent); puts("attributes:"); AST_print_list(indent + 1, x->attributes); pindent(indent); puts("fields:"); AST_print_list(indent + 1, x->fields); break; } case kind_target_attribute: { target_attribute x = CAST(target_attribute, n); puts("target_attribute"); pindent(indent); puts("word1:"); AST_print_list(indent + 1, x->word1); pindent(indent); puts("args:"); AST_print_list(indent + 1, x->args); break; } nescc-1.3.4/src/AST_types.c000066400000000000000000001714371177770303300154450ustar00rootroot00000000000000/* Automatically generated from nodetypes.def, do not edit. */ /* See the copyright notice in nodetypes.def */ node new_node(region r, location location) { node obj = ralloc(r, struct AST_node); obj->kind = kind_node; obj->location = location; return obj; } declaration new_declaration(region r, location location) { declaration obj = ralloc(r, struct AST_declaration); obj->kind = kind_declaration; obj->location = location; return obj; } statement new_statement(region r, location location) { statement obj = ralloc(r, struct AST_statement); obj->kind = kind_statement; obj->location = location; obj->isatomic = NOT_ATOMIC; return obj; } expression new_expression(region r, location location) { expression obj = ralloc(r, struct AST_expression); obj->kind = kind_expression; obj->location = location; obj->isatomic = NOT_ATOMIC; return obj; } type_element new_type_element(region r, location location) { type_element obj = ralloc(r, struct AST_type_element); obj->kind = kind_type_element; obj->location = location; return obj; } declarator new_declarator(region r, location location) { declarator obj = ralloc(r, struct AST_declarator); obj->kind = kind_declarator; obj->location = location; return obj; } label new_label(region r, location location) { label obj = ralloc(r, struct AST_label); obj->kind = kind_label; obj->location = location; return obj; } asm_decl new_asm_decl(region r, location location, asm_stmt asm_stmt) { asm_decl obj = ralloc(r, struct AST_asm_decl); obj->kind = kind_asm_decl; obj->location = location; obj->asm_stmt = asm_stmt; return obj; } data_decl new_data_decl(region r, location location, type_element modifiers, declaration decls) { data_decl obj = ralloc(r, struct AST_data_decl); obj->kind = kind_data_decl; obj->location = location; obj->modifiers = modifiers; obj->decls = decls; return obj; } extension_decl new_extension_decl(region r, location location, declaration decl) { extension_decl obj = ralloc(r, struct AST_extension_decl); obj->kind = kind_extension_decl; obj->location = location; obj->decl = decl; return obj; } ellipsis_decl new_ellipsis_decl(region r, location location) { ellipsis_decl obj = ralloc(r, struct AST_ellipsis_decl); obj->kind = kind_ellipsis_decl; obj->location = location; return obj; } enumerator new_enumerator(region r, location location, cstring cstring, expression arg1, data_declaration ddecl) { enumerator obj = ralloc(r, struct AST_enumerator); obj->kind = kind_enumerator; obj->location = location; obj->cstring = cstring; obj->arg1 = arg1; obj->ddecl = ddecl; return obj; } oldidentifier_decl new_oldidentifier_decl(region r, location location, cstring cstring, data_declaration ddecl) { oldidentifier_decl obj = ralloc(r, struct AST_oldidentifier_decl); obj->kind = kind_oldidentifier_decl; obj->location = location; obj->cstring = cstring; obj->ddecl = ddecl; return obj; } function_decl new_function_decl(region r, location location, declarator declarator, type_element modifiers, attribute attributes, declaration old_parms, statement stmt, function_decl parent_function, data_declaration ddecl) { function_decl obj = ralloc(r, struct AST_function_decl); obj->kind = kind_function_decl; obj->location = location; obj->declarator = declarator; obj->modifiers = modifiers; obj->attributes = attributes; obj->old_parms = old_parms; obj->stmt = stmt; obj->parent_function = parent_function; obj->ddecl = ddecl; return obj; } implicit_decl new_implicit_decl(region r, location location, identifier ident) { implicit_decl obj = ralloc(r, struct AST_implicit_decl); obj->kind = kind_implicit_decl; obj->location = location; obj->ident = ident; return obj; } variable_decl new_variable_decl(region r, location location, declarator declarator, attribute attributes, expression arg1, asm_stmt asm_stmt, data_declaration ddecl) { variable_decl obj = ralloc(r, struct AST_variable_decl); obj->kind = kind_variable_decl; obj->location = location; obj->declarator = declarator; obj->attributes = attributes; obj->arg1 = arg1; obj->asm_stmt = asm_stmt; obj->ddecl = ddecl; return obj; } field_decl new_field_decl(region r, location location, declarator declarator, attribute attributes, expression arg1) { field_decl obj = ralloc(r, struct AST_field_decl); obj->kind = kind_field_decl; obj->location = location; obj->declarator = declarator; obj->attributes = attributes; obj->arg1 = arg1; return obj; } asttype new_asttype(region r, location location, declarator declarator, type_element qualifiers) { asttype obj = ralloc(r, struct AST_asttype); obj->kind = kind_asttype; obj->location = location; obj->declarator = declarator; obj->qualifiers = qualifiers; return obj; } typename new_typename(region r, location location, data_declaration ddecl) { typename obj = ralloc(r, struct AST_typename); obj->kind = kind_typename; obj->location = location; obj->ddecl = ddecl; return obj; } typeof_expr new_typeof_expr(region r, location location, expression arg1) { typeof_expr obj = ralloc(r, struct AST_typeof_expr); obj->kind = kind_typeof_expr; obj->location = location; obj->arg1 = arg1; return obj; } typeof_type new_typeof_type(region r, location location, asttype asttype) { typeof_type obj = ralloc(r, struct AST_typeof_type); obj->kind = kind_typeof_type; obj->location = location; obj->asttype = asttype; return obj; } attribute new_attribute(region r, location location, word word1) { attribute obj = ralloc(r, struct AST_attribute); obj->kind = kind_attribute; obj->location = location; obj->word1 = word1; return obj; } gcc_attribute new_gcc_attribute(region r, location location, word word1, expression args) { gcc_attribute obj = ralloc(r, struct AST_gcc_attribute); obj->kind = kind_gcc_attribute; obj->location = location; obj->word1 = word1; obj->args = args; return obj; } rid new_rid(region r, location location, enum rid id) { rid obj = ralloc(r, struct AST_rid); obj->kind = kind_rid; obj->location = location; obj->id = id; return obj; } qualifier new_qualifier(region r, location location, enum rid id) { qualifier obj = ralloc(r, struct AST_qualifier); obj->kind = kind_qualifier; obj->location = location; obj->id = id; return obj; } tag_ref new_tag_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined) { tag_ref obj = ralloc(r, struct AST_tag_ref); obj->kind = kind_tag_ref; obj->location = location; obj->word1 = word1; obj->attributes = attributes; obj->fields = fields; obj->defined = defined; return obj; } struct_ref new_struct_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined) { struct_ref obj = ralloc(r, struct AST_struct_ref); obj->kind = kind_struct_ref; obj->location = location; obj->word1 = word1; obj->attributes = attributes; obj->fields = fields; obj->defined = defined; return obj; } union_ref new_union_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined) { union_ref obj = ralloc(r, struct AST_union_ref); obj->kind = kind_union_ref; obj->location = location; obj->word1 = word1; obj->attributes = attributes; obj->fields = fields; obj->defined = defined; return obj; } nested_declarator new_nested_declarator(region r, location location, declarator declarator) { nested_declarator obj = ralloc(r, struct AST_nested_declarator); obj->kind = kind_nested_declarator; obj->location = location; obj->declarator = declarator; return obj; } function_declarator new_function_declarator(region r, location location, declarator declarator, declaration parms, declaration gparms, type_element qualifiers, environment env) { function_declarator obj = ralloc(r, struct AST_function_declarator); obj->kind = kind_function_declarator; obj->location = location; obj->declarator = declarator; obj->parms = parms; obj->gparms = gparms; obj->qualifiers = qualifiers; obj->env = env; return obj; } pointer_declarator new_pointer_declarator(region r, location location, declarator declarator) { pointer_declarator obj = ralloc(r, struct AST_pointer_declarator); obj->kind = kind_pointer_declarator; obj->location = location; obj->declarator = declarator; return obj; } qualified_declarator new_qualified_declarator(region r, location location, declarator declarator, type_element modifiers) { qualified_declarator obj = ralloc(r, struct AST_qualified_declarator); obj->kind = kind_qualified_declarator; obj->location = location; obj->declarator = declarator; obj->modifiers = modifiers; return obj; } array_declarator new_array_declarator(region r, location location, declarator declarator, expression arg1) { array_declarator obj = ralloc(r, struct AST_array_declarator); obj->kind = kind_array_declarator; obj->location = location; obj->declarator = declarator; obj->arg1 = arg1; return obj; } identifier_declarator new_identifier_declarator(region r, location location, cstring cstring) { identifier_declarator obj = ralloc(r, struct AST_identifier_declarator); obj->kind = kind_identifier_declarator; obj->location = location; obj->cstring = cstring; return obj; } asm_stmt new_asm_stmt(region r, location location, expression arg1, asm_operand asm_operands1, asm_operand asm_operands2, string asm_clobbers, type_element qualifiers) { asm_stmt obj = ralloc(r, struct AST_asm_stmt); obj->kind = kind_asm_stmt; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->asm_operands1 = asm_operands1; obj->asm_operands2 = asm_operands2; obj->asm_clobbers = asm_clobbers; obj->qualifiers = qualifiers; return obj; } compound_stmt new_compound_stmt(region r, location location, id_label id_labels, declaration decls, statement stmts, environment env) { compound_stmt obj = ralloc(r, struct AST_compound_stmt); obj->kind = kind_compound_stmt; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->id_labels = id_labels; obj->decls = decls; obj->stmts = stmts; obj->env = env; return obj; } if_stmt new_if_stmt(region r, location location, expression condition, statement stmt1, statement stmt2) { if_stmt obj = ralloc(r, struct AST_if_stmt); obj->kind = kind_if_stmt; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->condition = condition; obj->stmt1 = stmt1; obj->stmt2 = stmt2; return obj; } labeled_stmt new_labeled_stmt(region r, location location, label label, statement stmt) { labeled_stmt obj = ralloc(r, struct AST_labeled_stmt); obj->kind = kind_labeled_stmt; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->label = label; obj->stmt = stmt; return obj; } expression_stmt new_expression_stmt(region r, location location, expression arg1) { expression_stmt obj = ralloc(r, struct AST_expression_stmt); obj->kind = kind_expression_stmt; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } conditional_stmt new_conditional_stmt(region r, location location, expression condition, statement stmt) { conditional_stmt obj = ralloc(r, struct AST_conditional_stmt); obj->kind = kind_conditional_stmt; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->condition = condition; obj->stmt = stmt; return obj; } switch_stmt new_switch_stmt(region r, location location, expression condition, statement stmt) { switch_stmt obj = ralloc(r, struct AST_switch_stmt); obj->kind = kind_switch_stmt; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->condition = condition; obj->stmt = stmt; return obj; } for_stmt new_for_stmt(region r, location location, expression arg1, expression arg2, expression arg3, statement stmt) { for_stmt obj = ralloc(r, struct AST_for_stmt); obj->kind = kind_for_stmt; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; obj->arg3 = arg3; obj->stmt = stmt; return obj; } break_stmt new_break_stmt(region r, location location) { break_stmt obj = ralloc(r, struct AST_break_stmt); obj->kind = kind_break_stmt; obj->location = location; obj->isatomic = NOT_ATOMIC; return obj; } continue_stmt new_continue_stmt(region r, location location) { continue_stmt obj = ralloc(r, struct AST_continue_stmt); obj->kind = kind_continue_stmt; obj->location = location; obj->isatomic = NOT_ATOMIC; return obj; } return_stmt new_return_stmt(region r, location location, expression arg1) { return_stmt obj = ralloc(r, struct AST_return_stmt); obj->kind = kind_return_stmt; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } goto_stmt new_goto_stmt(region r, location location, id_label id_label) { goto_stmt obj = ralloc(r, struct AST_goto_stmt); obj->kind = kind_goto_stmt; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->id_label = id_label; return obj; } computed_goto_stmt new_computed_goto_stmt(region r, location location, expression arg1) { computed_goto_stmt obj = ralloc(r, struct AST_computed_goto_stmt); obj->kind = kind_computed_goto_stmt; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } empty_stmt new_empty_stmt(region r, location location) { empty_stmt obj = ralloc(r, struct AST_empty_stmt); obj->kind = kind_empty_stmt; obj->location = location; obj->isatomic = NOT_ATOMIC; return obj; } unary new_unary(region r, location location, expression arg1) { unary obj = ralloc(r, struct AST_unary); obj->kind = kind_unary; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } binary new_binary(region r, location location, expression arg1, expression arg2) { binary obj = ralloc(r, struct AST_binary); obj->kind = kind_binary; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } comma new_comma(region r, location location, expression arg1) { comma obj = ralloc(r, struct AST_comma); obj->kind = kind_comma; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } sizeof_type new_sizeof_type(region r, location location, asttype asttype) { sizeof_type obj = ralloc(r, struct AST_sizeof_type); obj->kind = kind_sizeof_type; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->asttype = asttype; return obj; } alignof_type new_alignof_type(region r, location location, asttype asttype) { alignof_type obj = ralloc(r, struct AST_alignof_type); obj->kind = kind_alignof_type; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->asttype = asttype; return obj; } label_address new_label_address(region r, location location, id_label id_label) { label_address obj = ralloc(r, struct AST_label_address); obj->kind = kind_label_address; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->id_label = id_label; return obj; } cast new_cast(region r, location location, expression arg1, asttype asttype) { cast obj = ralloc(r, struct AST_cast); obj->kind = kind_cast; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->asttype = asttype; return obj; } cast_list new_cast_list(region r, location location, asttype asttype, expression init_expr) { cast_list obj = ralloc(r, struct AST_cast_list); obj->kind = kind_cast_list; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->asttype = asttype; obj->init_expr = init_expr; return obj; } conditional new_conditional(region r, location location, expression condition, expression arg1, expression arg2) { conditional obj = ralloc(r, struct AST_conditional); obj->kind = kind_conditional; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->condition = condition; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } identifier new_identifier(region r, location location, cstring cstring, data_declaration ddecl) { identifier obj = ralloc(r, struct AST_identifier); obj->kind = kind_identifier; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->cstring = cstring; obj->ddecl = ddecl; return obj; } compound_expr new_compound_expr(region r, location location, statement stmt) { compound_expr obj = ralloc(r, struct AST_compound_expr); obj->kind = kind_compound_expr; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->stmt = stmt; return obj; } function_call new_function_call(region r, location location, expression arg1, expression args, asttype va_arg_call, nesc_call_kind call_kind) { function_call obj = ralloc(r, struct AST_function_call); obj->kind = kind_function_call; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->args = args; obj->va_arg_call = va_arg_call; obj->call_kind = call_kind; return obj; } field_ref new_field_ref(region r, location location, expression arg1, cstring cstring) { field_ref obj = ralloc(r, struct AST_field_ref); obj->kind = kind_field_ref; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->cstring = cstring; return obj; } increment new_increment(region r, location location, expression arg1) { increment obj = ralloc(r, struct AST_increment); obj->kind = kind_increment; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } comparison new_comparison(region r, location location, expression arg1, expression arg2) { comparison obj = ralloc(r, struct AST_comparison); obj->kind = kind_comparison; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } assignment new_assignment(region r, location location, expression arg1, expression arg2) { assignment obj = ralloc(r, struct AST_assignment); obj->kind = kind_assignment; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } init_list new_init_list(region r, location location, expression args) { init_list obj = ralloc(r, struct AST_init_list); obj->kind = kind_init_list; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->args = args; return obj; } init_specific new_init_specific(region r, location location, designator designator, expression init_expr) { init_specific obj = ralloc(r, struct AST_init_specific); obj->kind = kind_init_specific; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->designator = designator; obj->init_expr = init_expr; return obj; } designator new_designator(region r, location location) { designator obj = ralloc(r, struct AST_designator); obj->kind = kind_designator; obj->location = location; return obj; } designate_field new_designate_field(region r, location location, cstring cstring) { designate_field obj = ralloc(r, struct AST_designate_field); obj->kind = kind_designate_field; obj->location = location; obj->cstring = cstring; return obj; } designate_index new_designate_index(region r, location location, expression arg1, expression arg2) { designate_index obj = ralloc(r, struct AST_designate_index); obj->kind = kind_designate_index; obj->location = location; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } lexical_cst new_lexical_cst(region r, location location, cstring cstring) { lexical_cst obj = ralloc(r, struct AST_lexical_cst); obj->kind = kind_lexical_cst; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->cstring = cstring; return obj; } string_cst new_string_cst(region r, location location, cstring cstring) { string_cst obj = ralloc(r, struct AST_string_cst); obj->kind = kind_string_cst; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->cstring = cstring; return obj; } string new_string(region r, location location, string_cst strings, data_declaration ddecl) { string obj = ralloc(r, struct AST_string); obj->kind = kind_string; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->strings = strings; obj->ddecl = ddecl; return obj; } id_label new_id_label(region r, location location, cstring cstring) { id_label obj = ralloc(r, struct AST_id_label); obj->kind = kind_id_label; obj->location = location; obj->cstring = cstring; return obj; } case_label new_case_label(region r, location location, expression arg1, expression arg2) { case_label obj = ralloc(r, struct AST_case_label); obj->kind = kind_case_label; obj->location = location; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } default_label new_default_label(region r, location location) { default_label obj = ralloc(r, struct AST_default_label); obj->kind = kind_default_label; obj->location = location; return obj; } word new_word(region r, location location, cstring cstring) { word obj = ralloc(r, struct AST_word); obj->kind = kind_word; obj->location = location; obj->cstring = cstring; return obj; } asm_operand new_asm_operand(region r, location location, word word1, string string, expression arg1) { asm_operand obj = ralloc(r, struct AST_asm_operand); obj->kind = kind_asm_operand; obj->location = location; obj->word1 = word1; obj->string = string; obj->arg1 = arg1; return obj; } nesc_decl new_nesc_decl(region r, location location, word word1, attribute attributes) { nesc_decl obj = ralloc(r, struct AST_nesc_decl); obj->kind = kind_nesc_decl; obj->location = location; obj->word1 = word1; obj->attributes = attributes; return obj; } interface new_interface(region r, location location, word word1, attribute attributes, declaration decls) { interface obj = ralloc(r, struct AST_interface); obj->kind = kind_interface; obj->location = location; obj->word1 = word1; obj->attributes = attributes; obj->decls = decls; return obj; } component new_component(region r, location location, word word1, attribute attributes, bool abstract, declaration parms, declaration decls, implementation implementation) { component obj = ralloc(r, struct AST_component); obj->kind = kind_component; obj->location = location; obj->word1 = word1; obj->attributes = attributes; obj->abstract = abstract; obj->parms = parms; obj->decls = decls; obj->implementation = implementation; return obj; } implementation new_implementation(region r, location location, environment ienv) { implementation obj = ralloc(r, struct AST_implementation); obj->kind = kind_implementation; obj->location = location; obj->ienv = ienv; return obj; } configuration new_configuration(region r, location location, environment ienv, declaration decls) { configuration obj = ralloc(r, struct AST_configuration); obj->kind = kind_configuration; obj->location = location; obj->ienv = ienv; obj->decls = decls; return obj; } module new_module(region r, location location, environment ienv, declaration decls) { module obj = ralloc(r, struct AST_module); obj->kind = kind_module; obj->location = location; obj->ienv = ienv; obj->decls = decls; return obj; } binary_component new_binary_component(region r, location location, environment ienv) { binary_component obj = ralloc(r, struct AST_binary_component); obj->kind = kind_binary_component; obj->location = location; obj->ienv = ienv; return obj; } rp_interface new_rp_interface(region r, location location, bool required, declaration decls) { rp_interface obj = ralloc(r, struct AST_rp_interface); obj->kind = kind_rp_interface; obj->location = location; obj->required = required; obj->decls = decls; return obj; } interface_ref new_interface_ref(region r, location location, word word1, expression args, word word2, declaration gparms, attribute attributes, data_declaration ddecl) { interface_ref obj = ralloc(r, struct AST_interface_ref); obj->kind = kind_interface_ref; obj->location = location; obj->word1 = word1; obj->args = args; obj->word2 = word2; obj->gparms = gparms; obj->attributes = attributes; obj->ddecl = ddecl; return obj; } component_ref new_component_ref(region r, location location, word word1, word word2, bool abstract, expression args) { component_ref obj = ralloc(r, struct AST_component_ref); obj->kind = kind_component_ref; obj->location = location; obj->word1 = word1; obj->word2 = word2; obj->abstract = abstract; obj->args = args; return obj; } connection new_connection(region r, location location, endpoint ep1, endpoint ep2) { connection obj = ralloc(r, struct AST_connection); obj->kind = kind_connection; obj->location = location; obj->ep1 = ep1; obj->ep2 = ep2; return obj; } endpoint new_endpoint(region r, location location, parameterised_identifier ids) { endpoint obj = ralloc(r, struct AST_endpoint); obj->kind = kind_endpoint; obj->location = location; obj->ids = ids; return obj; } parameterised_identifier new_parameterised_identifier(region r, location location, word word1, expression args) { parameterised_identifier obj = ralloc(r, struct AST_parameterised_identifier); obj->kind = kind_parameterised_identifier; obj->location = location; obj->word1 = word1; obj->args = args; return obj; } generic_declarator new_generic_declarator(region r, location location, declarator declarator, declaration parms) { generic_declarator obj = ralloc(r, struct AST_generic_declarator); obj->kind = kind_generic_declarator; obj->location = location; obj->declarator = declarator; obj->parms = parms; return obj; } generic_call new_generic_call(region r, location location, expression arg1, expression args) { generic_call obj = ralloc(r, struct AST_generic_call); obj->kind = kind_generic_call; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->args = args; return obj; } interface_ref_declarator new_interface_ref_declarator(region r, location location, declarator declarator, word word1) { interface_ref_declarator obj = ralloc(r, struct AST_interface_ref_declarator); obj->kind = kind_interface_ref_declarator; obj->location = location; obj->declarator = declarator; obj->word1 = word1; return obj; } interface_deref new_interface_deref(region r, location location, expression arg1, cstring cstring, data_declaration ddecl) { interface_deref obj = ralloc(r, struct AST_interface_deref); obj->kind = kind_interface_deref; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->cstring = cstring; obj->ddecl = ddecl; return obj; } component_deref new_component_deref(region r, location location, expression arg1, cstring cstring, data_declaration ddecl) { component_deref obj = ralloc(r, struct AST_component_deref); obj->kind = kind_component_deref; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->cstring = cstring; obj->ddecl = ddecl; return obj; } component_typeref new_component_typeref(region r, location location, data_declaration ddecl, cstring cstring) { component_typeref obj = ralloc(r, struct AST_component_typeref); obj->kind = kind_component_typeref; obj->location = location; obj->ddecl = ddecl; obj->cstring = cstring; return obj; } atomic_stmt new_atomic_stmt(region r, location location, statement stmt) { atomic_stmt obj = ralloc(r, struct AST_atomic_stmt); obj->kind = kind_atomic_stmt; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->stmt = stmt; return obj; } nesc_attribute new_nesc_attribute(region r, location location, word word1, expression arg1) { nesc_attribute obj = ralloc(r, struct AST_nesc_attribute); obj->kind = kind_nesc_attribute; obj->location = location; obj->word1 = word1; obj->arg1 = arg1; return obj; } type_parm_decl new_type_parm_decl(region r, location location, cstring cstring, data_declaration ddecl) { type_parm_decl obj = ralloc(r, struct AST_type_parm_decl); obj->kind = kind_type_parm_decl; obj->location = location; obj->cstring = cstring; obj->ddecl = ddecl; return obj; } type_argument new_type_argument(region r, location location, asttype asttype) { type_argument obj = ralloc(r, struct AST_type_argument); obj->kind = kind_type_argument; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->asttype = asttype; return obj; } error_decl new_error_decl(region r, location location) { error_decl obj = ralloc(r, struct AST_declaration); obj->kind = kind_error_decl; obj->location = location; return obj; } attribute_ref new_attribute_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined) { attribute_ref obj = ralloc(r, struct AST_tag_ref); obj->kind = kind_attribute_ref; obj->location = location; obj->word1 = word1; obj->attributes = attributes; obj->fields = fields; obj->defined = defined; return obj; } enum_ref new_enum_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined) { enum_ref obj = ralloc(r, struct AST_tag_ref); obj->kind = kind_enum_ref; obj->location = location; obj->word1 = word1; obj->attributes = attributes; obj->fields = fields; obj->defined = defined; return obj; } error_stmt new_error_stmt(region r, location location) { error_stmt obj = ralloc(r, struct AST_statement); obj->kind = kind_error_stmt; obj->location = location; obj->isatomic = NOT_ATOMIC; return obj; } while_stmt new_while_stmt(region r, location location, expression condition, statement stmt) { while_stmt obj = ralloc(r, struct AST_conditional_stmt); obj->kind = kind_while_stmt; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->condition = condition; obj->stmt = stmt; return obj; } dowhile_stmt new_dowhile_stmt(region r, location location, expression condition, statement stmt) { dowhile_stmt obj = ralloc(r, struct AST_conditional_stmt); obj->kind = kind_dowhile_stmt; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->condition = condition; obj->stmt = stmt; return obj; } error_expr new_error_expr(region r, location location) { error_expr obj = ralloc(r, struct AST_expression); obj->kind = kind_error_expr; obj->location = location; obj->isatomic = NOT_ATOMIC; return obj; } array_ref new_array_ref(region r, location location, expression arg1, expression arg2) { array_ref obj = ralloc(r, struct AST_binary); obj->kind = kind_array_ref; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } dereference new_dereference(region r, location location, expression arg1) { dereference obj = ralloc(r, struct AST_unary); obj->kind = kind_dereference; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } extension_expr new_extension_expr(region r, location location, expression arg1) { extension_expr obj = ralloc(r, struct AST_unary); obj->kind = kind_extension_expr; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } sizeof_expr new_sizeof_expr(region r, location location, expression arg1) { sizeof_expr obj = ralloc(r, struct AST_unary); obj->kind = kind_sizeof_expr; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } alignof_expr new_alignof_expr(region r, location location, expression arg1) { alignof_expr obj = ralloc(r, struct AST_unary); obj->kind = kind_alignof_expr; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } realpart new_realpart(region r, location location, expression arg1) { realpart obj = ralloc(r, struct AST_unary); obj->kind = kind_realpart; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } imagpart new_imagpart(region r, location location, expression arg1) { imagpart obj = ralloc(r, struct AST_unary); obj->kind = kind_imagpart; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } address_of new_address_of(region r, location location, expression arg1) { address_of obj = ralloc(r, struct AST_unary); obj->kind = kind_address_of; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } unary_minus new_unary_minus(region r, location location, expression arg1) { unary_minus obj = ralloc(r, struct AST_unary); obj->kind = kind_unary_minus; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } unary_plus new_unary_plus(region r, location location, expression arg1) { unary_plus obj = ralloc(r, struct AST_unary); obj->kind = kind_unary_plus; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } conjugate new_conjugate(region r, location location, expression arg1) { conjugate obj = ralloc(r, struct AST_unary); obj->kind = kind_conjugate; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } bitnot new_bitnot(region r, location location, expression arg1) { bitnot obj = ralloc(r, struct AST_unary); obj->kind = kind_bitnot; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } not new_not(region r, location location, expression arg1) { not obj = ralloc(r, struct AST_unary); obj->kind = kind_not; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } preincrement new_preincrement(region r, location location, expression arg1) { preincrement obj = ralloc(r, struct AST_increment); obj->kind = kind_preincrement; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } predecrement new_predecrement(region r, location location, expression arg1) { predecrement obj = ralloc(r, struct AST_increment); obj->kind = kind_predecrement; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } postincrement new_postincrement(region r, location location, expression arg1) { postincrement obj = ralloc(r, struct AST_increment); obj->kind = kind_postincrement; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } postdecrement new_postdecrement(region r, location location, expression arg1) { postdecrement obj = ralloc(r, struct AST_increment); obj->kind = kind_postdecrement; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; return obj; } plus new_plus(region r, location location, expression arg1, expression arg2) { plus obj = ralloc(r, struct AST_binary); obj->kind = kind_plus; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } minus new_minus(region r, location location, expression arg1, expression arg2) { minus obj = ralloc(r, struct AST_binary); obj->kind = kind_minus; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } times new_times(region r, location location, expression arg1, expression arg2) { times obj = ralloc(r, struct AST_binary); obj->kind = kind_times; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } divide new_divide(region r, location location, expression arg1, expression arg2) { divide obj = ralloc(r, struct AST_binary); obj->kind = kind_divide; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } modulo new_modulo(region r, location location, expression arg1, expression arg2) { modulo obj = ralloc(r, struct AST_binary); obj->kind = kind_modulo; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } lshift new_lshift(region r, location location, expression arg1, expression arg2) { lshift obj = ralloc(r, struct AST_binary); obj->kind = kind_lshift; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } rshift new_rshift(region r, location location, expression arg1, expression arg2) { rshift obj = ralloc(r, struct AST_binary); obj->kind = kind_rshift; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } leq new_leq(region r, location location, expression arg1, expression arg2) { leq obj = ralloc(r, struct AST_comparison); obj->kind = kind_leq; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } geq new_geq(region r, location location, expression arg1, expression arg2) { geq obj = ralloc(r, struct AST_comparison); obj->kind = kind_geq; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } lt new_lt(region r, location location, expression arg1, expression arg2) { lt obj = ralloc(r, struct AST_comparison); obj->kind = kind_lt; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } gt new_gt(region r, location location, expression arg1, expression arg2) { gt obj = ralloc(r, struct AST_comparison); obj->kind = kind_gt; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } eq new_eq(region r, location location, expression arg1, expression arg2) { eq obj = ralloc(r, struct AST_comparison); obj->kind = kind_eq; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } ne new_ne(region r, location location, expression arg1, expression arg2) { ne obj = ralloc(r, struct AST_comparison); obj->kind = kind_ne; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } bitand new_bitand(region r, location location, expression arg1, expression arg2) { bitand obj = ralloc(r, struct AST_binary); obj->kind = kind_bitand; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } bitor new_bitor(region r, location location, expression arg1, expression arg2) { bitor obj = ralloc(r, struct AST_binary); obj->kind = kind_bitor; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } bitxor new_bitxor(region r, location location, expression arg1, expression arg2) { bitxor obj = ralloc(r, struct AST_binary); obj->kind = kind_bitxor; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } andand new_andand(region r, location location, expression arg1, expression arg2) { andand obj = ralloc(r, struct AST_binary); obj->kind = kind_andand; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } oror new_oror(region r, location location, expression arg1, expression arg2) { oror obj = ralloc(r, struct AST_binary); obj->kind = kind_oror; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } assign new_assign(region r, location location, expression arg1, expression arg2) { assign obj = ralloc(r, struct AST_assignment); obj->kind = kind_assign; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } plus_assign new_plus_assign(region r, location location, expression arg1, expression arg2) { plus_assign obj = ralloc(r, struct AST_assignment); obj->kind = kind_plus_assign; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } minus_assign new_minus_assign(region r, location location, expression arg1, expression arg2) { minus_assign obj = ralloc(r, struct AST_assignment); obj->kind = kind_minus_assign; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } times_assign new_times_assign(region r, location location, expression arg1, expression arg2) { times_assign obj = ralloc(r, struct AST_assignment); obj->kind = kind_times_assign; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } divide_assign new_divide_assign(region r, location location, expression arg1, expression arg2) { divide_assign obj = ralloc(r, struct AST_assignment); obj->kind = kind_divide_assign; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } modulo_assign new_modulo_assign(region r, location location, expression arg1, expression arg2) { modulo_assign obj = ralloc(r, struct AST_assignment); obj->kind = kind_modulo_assign; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } lshift_assign new_lshift_assign(region r, location location, expression arg1, expression arg2) { lshift_assign obj = ralloc(r, struct AST_assignment); obj->kind = kind_lshift_assign; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } rshift_assign new_rshift_assign(region r, location location, expression arg1, expression arg2) { rshift_assign obj = ralloc(r, struct AST_assignment); obj->kind = kind_rshift_assign; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } bitand_assign new_bitand_assign(region r, location location, expression arg1, expression arg2) { bitand_assign obj = ralloc(r, struct AST_assignment); obj->kind = kind_bitand_assign; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } bitor_assign new_bitor_assign(region r, location location, expression arg1, expression arg2) { bitor_assign obj = ralloc(r, struct AST_assignment); obj->kind = kind_bitor_assign; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } bitxor_assign new_bitxor_assign(region r, location location, expression arg1, expression arg2) { bitxor_assign obj = ralloc(r, struct AST_assignment); obj->kind = kind_bitxor_assign; obj->location = location; obj->isatomic = NOT_ATOMIC; obj->arg1 = arg1; obj->arg2 = arg2; return obj; } rp_connection new_rp_connection(region r, location location, endpoint ep1, endpoint ep2) { rp_connection obj = ralloc(r, struct AST_connection); obj->kind = kind_rp_connection; obj->location = location; obj->ep1 = ep1; obj->ep2 = ep2; return obj; } eq_connection new_eq_connection(region r, location location, endpoint ep1, endpoint ep2) { eq_connection obj = ralloc(r, struct AST_connection); obj->kind = kind_eq_connection; obj->location = location; obj->ep1 = ep1; obj->ep2 = ep2; return obj; } nx_struct_ref new_nx_struct_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined) { nx_struct_ref obj = ralloc(r, struct AST_struct_ref); obj->kind = kind_nx_struct_ref; obj->location = location; obj->word1 = word1; obj->attributes = attributes; obj->fields = fields; obj->defined = defined; return obj; } nx_union_ref new_nx_union_ref(region r, location location, word word1, attribute attributes, declaration fields, bool defined) { nx_union_ref obj = ralloc(r, struct AST_union_ref); obj->kind = kind_nx_union_ref; obj->location = location; obj->word1 = word1; obj->attributes = attributes; obj->fields = fields; obj->defined = defined; return obj; } target_attribute new_target_attribute(region r, location location, word word1, expression args) { target_attribute obj = ralloc(r, struct AST_gcc_attribute); obj->kind = kind_target_attribute; obj->location = location; obj->word1 = word1; obj->args = args; return obj; } AST_kind AST_parent_kind[] = { 0, kind_node, kind_declaration, kind_declaration, kind_declaration, kind_declaration, kind_declaration, kind_declaration, kind_declaration, kind_declaration, kind_declaration, kind_declaration, kind_declaration, kind_nesc_decl, kind_nesc_decl, kind_declaration, kind_declaration, kind_declaration, kind_declaration, kind_connection, kind_connection, kind_declaration, kind_declaration, kind_node, kind_statement, kind_statement, kind_statement, kind_statement, kind_statement, kind_statement, kind_conditional_stmt, kind_conditional_stmt, kind_conditional_stmt, kind_statement, kind_statement, kind_statement, kind_statement, kind_statement, kind_statement, kind_statement, kind_statement, kind_statement, kind_node, kind_expression, kind_unary, kind_unary, kind_unary, kind_increment, kind_increment, kind_increment, kind_increment, kind_unary, kind_unary, kind_unary, kind_unary, kind_unary, kind_unary, kind_unary, kind_unary, kind_unary, kind_unary, kind_unary, kind_unary, kind_unary, kind_unary, kind_expression, kind_binary, kind_comparison, kind_comparison, kind_comparison, kind_comparison, kind_comparison, kind_comparison, kind_binary, kind_assignment, kind_assignment, kind_assignment, kind_assignment, kind_assignment, kind_assignment, kind_assignment, kind_assignment, kind_assignment, kind_assignment, kind_assignment, kind_binary, kind_binary, kind_binary, kind_binary, kind_binary, kind_binary, kind_binary, kind_binary, kind_binary, kind_binary, kind_binary, kind_binary, kind_binary, kind_expression, kind_expression, kind_expression, kind_expression, kind_expression, kind_expression, kind_expression, kind_expression, kind_expression, kind_expression, kind_expression, kind_expression, kind_lexical_cst, kind_expression, kind_expression, kind_expression, kind_expression, kind_node, kind_type_element, kind_typename, kind_type_element, kind_type_element, kind_type_element, kind_attribute, kind_gcc_attribute, kind_attribute, kind_type_element, kind_type_element, kind_type_element, kind_tag_ref, kind_struct_ref, kind_tag_ref, kind_union_ref, kind_tag_ref, kind_tag_ref, kind_node, kind_declarator, kind_nested_declarator, kind_nested_declarator, kind_nested_declarator, kind_nested_declarator, kind_nested_declarator, kind_declarator, kind_declarator, kind_node, kind_label, kind_label, kind_label, kind_node, kind_node, kind_designator, kind_designator, kind_node, kind_node, kind_node, kind_implementation, kind_implementation, kind_implementation, kind_node, kind_node, }; AST_kind AST_post_kind[] = { postkind_node, postkind_declaration, postkind_asm_decl, postkind_data_decl, postkind_extension_decl, postkind_ellipsis_decl, postkind_enumerator, postkind_oldidentifier_decl, postkind_function_decl, postkind_implicit_decl, postkind_variable_decl, postkind_field_decl, postkind_nesc_decl, postkind_interface, postkind_component, postkind_rp_interface, postkind_interface_ref, postkind_component_ref, postkind_connection, postkind_rp_connection, postkind_eq_connection, postkind_type_parm_decl, postkind_error_decl, postkind_statement, postkind_asm_stmt, postkind_compound_stmt, postkind_if_stmt, postkind_labeled_stmt, postkind_expression_stmt, postkind_conditional_stmt, postkind_switch_stmt, postkind_while_stmt, postkind_dowhile_stmt, postkind_for_stmt, postkind_break_stmt, postkind_continue_stmt, postkind_return_stmt, postkind_goto_stmt, postkind_computed_goto_stmt, postkind_empty_stmt, postkind_atomic_stmt, postkind_error_stmt, postkind_expression, postkind_unary, postkind_cast, postkind_field_ref, postkind_increment, postkind_preincrement, postkind_predecrement, postkind_postincrement, postkind_postdecrement, postkind_interface_deref, postkind_component_deref, postkind_dereference, postkind_extension_expr, postkind_sizeof_expr, postkind_alignof_expr, postkind_realpart, postkind_imagpart, postkind_address_of, postkind_unary_minus, postkind_unary_plus, postkind_conjugate, postkind_bitnot, postkind_not, postkind_binary, postkind_comparison, postkind_leq, postkind_geq, postkind_lt, postkind_gt, postkind_eq, postkind_ne, postkind_assignment, postkind_assign, postkind_plus_assign, postkind_minus_assign, postkind_times_assign, postkind_divide_assign, postkind_modulo_assign, postkind_lshift_assign, postkind_rshift_assign, postkind_bitand_assign, postkind_bitor_assign, postkind_bitxor_assign, postkind_array_ref, postkind_plus, postkind_minus, postkind_times, postkind_divide, postkind_modulo, postkind_lshift, postkind_rshift, postkind_bitand, postkind_bitor, postkind_bitxor, postkind_andand, postkind_oror, postkind_comma, postkind_sizeof_type, postkind_alignof_type, postkind_label_address, postkind_cast_list, postkind_conditional, postkind_identifier, postkind_compound_expr, postkind_function_call, postkind_init_list, postkind_init_specific, postkind_lexical_cst, postkind_string_cst, postkind_string, postkind_generic_call, postkind_type_argument, postkind_error_expr, postkind_type_element, postkind_typename, postkind_component_typeref, postkind_typeof_expr, postkind_typeof_type, postkind_attribute, postkind_gcc_attribute, postkind_target_attribute, postkind_nesc_attribute, postkind_rid, postkind_qualifier, postkind_tag_ref, postkind_struct_ref, postkind_nx_struct_ref, postkind_union_ref, postkind_nx_union_ref, postkind_attribute_ref, postkind_enum_ref, postkind_declarator, postkind_nested_declarator, postkind_function_declarator, postkind_pointer_declarator, postkind_qualified_declarator, postkind_array_declarator, postkind_interface_ref_declarator, postkind_identifier_declarator, postkind_generic_declarator, postkind_label, postkind_id_label, postkind_case_label, postkind_default_label, postkind_asttype, postkind_designator, postkind_designate_field, postkind_designate_index, postkind_word, postkind_asm_operand, postkind_implementation, postkind_configuration, postkind_module, postkind_binary_component, postkind_endpoint, postkind_parameterised_identifier, }; size_t AST_sizeof[] = { sizeof(struct AST_node), sizeof(struct AST_declaration), sizeof(struct AST_asm_decl), sizeof(struct AST_data_decl), sizeof(struct AST_extension_decl), sizeof(struct AST_ellipsis_decl), sizeof(struct AST_enumerator), sizeof(struct AST_oldidentifier_decl), sizeof(struct AST_function_decl), sizeof(struct AST_implicit_decl), sizeof(struct AST_variable_decl), sizeof(struct AST_field_decl), sizeof(struct AST_nesc_decl), sizeof(struct AST_interface), sizeof(struct AST_component), sizeof(struct AST_rp_interface), sizeof(struct AST_interface_ref), sizeof(struct AST_component_ref), sizeof(struct AST_connection), sizeof(struct AST_connection), sizeof(struct AST_connection), sizeof(struct AST_type_parm_decl), sizeof(struct AST_declaration), sizeof(struct AST_statement), sizeof(struct AST_asm_stmt), sizeof(struct AST_compound_stmt), sizeof(struct AST_if_stmt), sizeof(struct AST_labeled_stmt), sizeof(struct AST_expression_stmt), sizeof(struct AST_conditional_stmt), sizeof(struct AST_switch_stmt), sizeof(struct AST_conditional_stmt), sizeof(struct AST_conditional_stmt), sizeof(struct AST_for_stmt), sizeof(struct AST_break_stmt), sizeof(struct AST_continue_stmt), sizeof(struct AST_return_stmt), sizeof(struct AST_goto_stmt), sizeof(struct AST_computed_goto_stmt), sizeof(struct AST_empty_stmt), sizeof(struct AST_atomic_stmt), sizeof(struct AST_statement), sizeof(struct AST_expression), sizeof(struct AST_unary), sizeof(struct AST_cast), sizeof(struct AST_field_ref), sizeof(struct AST_increment), sizeof(struct AST_increment), sizeof(struct AST_increment), sizeof(struct AST_increment), sizeof(struct AST_increment), sizeof(struct AST_interface_deref), sizeof(struct AST_component_deref), sizeof(struct AST_unary), sizeof(struct AST_unary), sizeof(struct AST_unary), sizeof(struct AST_unary), sizeof(struct AST_unary), sizeof(struct AST_unary), sizeof(struct AST_unary), sizeof(struct AST_unary), sizeof(struct AST_unary), sizeof(struct AST_unary), sizeof(struct AST_unary), sizeof(struct AST_unary), sizeof(struct AST_binary), sizeof(struct AST_comparison), sizeof(struct AST_comparison), sizeof(struct AST_comparison), sizeof(struct AST_comparison), sizeof(struct AST_comparison), sizeof(struct AST_comparison), sizeof(struct AST_comparison), sizeof(struct AST_assignment), sizeof(struct AST_assignment), sizeof(struct AST_assignment), sizeof(struct AST_assignment), sizeof(struct AST_assignment), sizeof(struct AST_assignment), sizeof(struct AST_assignment), sizeof(struct AST_assignment), sizeof(struct AST_assignment), sizeof(struct AST_assignment), sizeof(struct AST_assignment), sizeof(struct AST_assignment), sizeof(struct AST_binary), sizeof(struct AST_binary), sizeof(struct AST_binary), sizeof(struct AST_binary), sizeof(struct AST_binary), sizeof(struct AST_binary), sizeof(struct AST_binary), sizeof(struct AST_binary), sizeof(struct AST_binary), sizeof(struct AST_binary), sizeof(struct AST_binary), sizeof(struct AST_binary), sizeof(struct AST_binary), sizeof(struct AST_comma), sizeof(struct AST_sizeof_type), sizeof(struct AST_alignof_type), sizeof(struct AST_label_address), sizeof(struct AST_cast_list), sizeof(struct AST_conditional), sizeof(struct AST_identifier), sizeof(struct AST_compound_expr), sizeof(struct AST_function_call), sizeof(struct AST_init_list), sizeof(struct AST_init_specific), sizeof(struct AST_lexical_cst), sizeof(struct AST_string_cst), sizeof(struct AST_string), sizeof(struct AST_generic_call), sizeof(struct AST_type_argument), sizeof(struct AST_expression), sizeof(struct AST_type_element), sizeof(struct AST_typename), sizeof(struct AST_component_typeref), sizeof(struct AST_typeof_expr), sizeof(struct AST_typeof_type), sizeof(struct AST_attribute), sizeof(struct AST_gcc_attribute), sizeof(struct AST_gcc_attribute), sizeof(struct AST_nesc_attribute), sizeof(struct AST_rid), sizeof(struct AST_qualifier), sizeof(struct AST_tag_ref), sizeof(struct AST_struct_ref), sizeof(struct AST_struct_ref), sizeof(struct AST_union_ref), sizeof(struct AST_union_ref), sizeof(struct AST_tag_ref), sizeof(struct AST_tag_ref), sizeof(struct AST_declarator), sizeof(struct AST_nested_declarator), sizeof(struct AST_function_declarator), sizeof(struct AST_pointer_declarator), sizeof(struct AST_qualified_declarator), sizeof(struct AST_array_declarator), sizeof(struct AST_interface_ref_declarator), sizeof(struct AST_identifier_declarator), sizeof(struct AST_generic_declarator), sizeof(struct AST_label), sizeof(struct AST_id_label), sizeof(struct AST_case_label), sizeof(struct AST_default_label), sizeof(struct AST_asttype), sizeof(struct AST_designator), sizeof(struct AST_designate_field), sizeof(struct AST_designate_index), sizeof(struct AST_word), sizeof(struct AST_asm_operand), sizeof(struct AST_implementation), sizeof(struct AST_configuration), sizeof(struct AST_module), sizeof(struct AST_binary_component), sizeof(struct AST_endpoint), sizeof(struct AST_parameterised_identifier), }; type_t AST_typeof[] = { rctypeof(struct AST_node), rctypeof(struct AST_declaration), rctypeof(struct AST_asm_decl), rctypeof(struct AST_data_decl), rctypeof(struct AST_extension_decl), rctypeof(struct AST_ellipsis_decl), rctypeof(struct AST_enumerator), rctypeof(struct AST_oldidentifier_decl), rctypeof(struct AST_function_decl), rctypeof(struct AST_implicit_decl), rctypeof(struct AST_variable_decl), rctypeof(struct AST_field_decl), rctypeof(struct AST_nesc_decl), rctypeof(struct AST_interface), rctypeof(struct AST_component), rctypeof(struct AST_rp_interface), rctypeof(struct AST_interface_ref), rctypeof(struct AST_component_ref), rctypeof(struct AST_connection), rctypeof(struct AST_connection), rctypeof(struct AST_connection), rctypeof(struct AST_type_parm_decl), rctypeof(struct AST_declaration), rctypeof(struct AST_statement), rctypeof(struct AST_asm_stmt), rctypeof(struct AST_compound_stmt), rctypeof(struct AST_if_stmt), rctypeof(struct AST_labeled_stmt), rctypeof(struct AST_expression_stmt), rctypeof(struct AST_conditional_stmt), rctypeof(struct AST_switch_stmt), rctypeof(struct AST_conditional_stmt), rctypeof(struct AST_conditional_stmt), rctypeof(struct AST_for_stmt), rctypeof(struct AST_break_stmt), rctypeof(struct AST_continue_stmt), rctypeof(struct AST_return_stmt), rctypeof(struct AST_goto_stmt), rctypeof(struct AST_computed_goto_stmt), rctypeof(struct AST_empty_stmt), rctypeof(struct AST_atomic_stmt), rctypeof(struct AST_statement), rctypeof(struct AST_expression), rctypeof(struct AST_unary), rctypeof(struct AST_cast), rctypeof(struct AST_field_ref), rctypeof(struct AST_increment), rctypeof(struct AST_increment), rctypeof(struct AST_increment), rctypeof(struct AST_increment), rctypeof(struct AST_increment), rctypeof(struct AST_interface_deref), rctypeof(struct AST_component_deref), rctypeof(struct AST_unary), rctypeof(struct AST_unary), rctypeof(struct AST_unary), rctypeof(struct AST_unary), rctypeof(struct AST_unary), rctypeof(struct AST_unary), rctypeof(struct AST_unary), rctypeof(struct AST_unary), rctypeof(struct AST_unary), rctypeof(struct AST_unary), rctypeof(struct AST_unary), rctypeof(struct AST_unary), rctypeof(struct AST_binary), rctypeof(struct AST_comparison), rctypeof(struct AST_comparison), rctypeof(struct AST_comparison), rctypeof(struct AST_comparison), rctypeof(struct AST_comparison), rctypeof(struct AST_comparison), rctypeof(struct AST_comparison), rctypeof(struct AST_assignment), rctypeof(struct AST_assignment), rctypeof(struct AST_assignment), rctypeof(struct AST_assignment), rctypeof(struct AST_assignment), rctypeof(struct AST_assignment), rctypeof(struct AST_assignment), rctypeof(struct AST_assignment), rctypeof(struct AST_assignment), rctypeof(struct AST_assignment), rctypeof(struct AST_assignment), rctypeof(struct AST_assignment), rctypeof(struct AST_binary), rctypeof(struct AST_binary), rctypeof(struct AST_binary), rctypeof(struct AST_binary), rctypeof(struct AST_binary), rctypeof(struct AST_binary), rctypeof(struct AST_binary), rctypeof(struct AST_binary), rctypeof(struct AST_binary), rctypeof(struct AST_binary), rctypeof(struct AST_binary), rctypeof(struct AST_binary), rctypeof(struct AST_binary), rctypeof(struct AST_comma), rctypeof(struct AST_sizeof_type), rctypeof(struct AST_alignof_type), rctypeof(struct AST_label_address), rctypeof(struct AST_cast_list), rctypeof(struct AST_conditional), rctypeof(struct AST_identifier), rctypeof(struct AST_compound_expr), rctypeof(struct AST_function_call), rctypeof(struct AST_init_list), rctypeof(struct AST_init_specific), rctypeof(struct AST_lexical_cst), rctypeof(struct AST_string_cst), rctypeof(struct AST_string), rctypeof(struct AST_generic_call), rctypeof(struct AST_type_argument), rctypeof(struct AST_expression), rctypeof(struct AST_type_element), rctypeof(struct AST_typename), rctypeof(struct AST_component_typeref), rctypeof(struct AST_typeof_expr), rctypeof(struct AST_typeof_type), rctypeof(struct AST_attribute), rctypeof(struct AST_gcc_attribute), rctypeof(struct AST_gcc_attribute), rctypeof(struct AST_nesc_attribute), rctypeof(struct AST_rid), rctypeof(struct AST_qualifier), rctypeof(struct AST_tag_ref), rctypeof(struct AST_struct_ref), rctypeof(struct AST_struct_ref), rctypeof(struct AST_union_ref), rctypeof(struct AST_union_ref), rctypeof(struct AST_tag_ref), rctypeof(struct AST_tag_ref), rctypeof(struct AST_declarator), rctypeof(struct AST_nested_declarator), rctypeof(struct AST_function_declarator), rctypeof(struct AST_pointer_declarator), rctypeof(struct AST_qualified_declarator), rctypeof(struct AST_array_declarator), rctypeof(struct AST_interface_ref_declarator), rctypeof(struct AST_identifier_declarator), rctypeof(struct AST_generic_declarator), rctypeof(struct AST_label), rctypeof(struct AST_id_label), rctypeof(struct AST_case_label), rctypeof(struct AST_default_label), rctypeof(struct AST_asttype), rctypeof(struct AST_designator), rctypeof(struct AST_designate_field), rctypeof(struct AST_designate_index), rctypeof(struct AST_word), rctypeof(struct AST_asm_operand), rctypeof(struct AST_implementation), rctypeof(struct AST_configuration), rctypeof(struct AST_module), rctypeof(struct AST_binary_component), rctypeof(struct AST_endpoint), rctypeof(struct AST_parameterised_identifier), }; nescc-1.3.4/src/AST_types.h000066400000000000000000000753231177770303300154470ustar00rootroot00000000000000/* Automatically generated from nodetypes.def, do not edit. */ /* See the copyright notice in nodetypes.def */ typedef struct AST_node *node; typedef struct AST_declaration *declaration; typedef struct AST_statement *statement; typedef struct AST_expression *expression; typedef struct AST_type_element *type_element; typedef struct AST_declarator *declarator; typedef struct AST_label *label; typedef struct AST_asm_decl *asm_decl; typedef struct AST_data_decl *data_decl; typedef struct AST_extension_decl *extension_decl; typedef struct AST_ellipsis_decl *ellipsis_decl; typedef struct AST_enumerator *enumerator; typedef struct AST_oldidentifier_decl *oldidentifier_decl; typedef struct AST_function_decl *function_decl; typedef struct AST_implicit_decl *implicit_decl; typedef struct AST_variable_decl *variable_decl; typedef struct AST_field_decl *field_decl; typedef struct AST_asttype *asttype; typedef struct AST_typename *typename; typedef struct AST_typeof_expr *typeof_expr; typedef struct AST_typeof_type *typeof_type; typedef struct AST_attribute *attribute; typedef struct AST_gcc_attribute *gcc_attribute; typedef struct AST_rid *rid; typedef struct AST_qualifier *qualifier; typedef struct AST_tag_ref *tag_ref; typedef struct AST_struct_ref *struct_ref; typedef struct AST_union_ref *union_ref; typedef struct AST_nested_declarator *nested_declarator; typedef struct AST_function_declarator *function_declarator; typedef struct AST_pointer_declarator *pointer_declarator; typedef struct AST_qualified_declarator *qualified_declarator; typedef struct AST_array_declarator *array_declarator; typedef struct AST_identifier_declarator *identifier_declarator; typedef struct AST_asm_stmt *asm_stmt; typedef struct AST_compound_stmt *compound_stmt; typedef struct AST_if_stmt *if_stmt; typedef struct AST_labeled_stmt *labeled_stmt; typedef struct AST_expression_stmt *expression_stmt; typedef struct AST_conditional_stmt *conditional_stmt; typedef struct AST_switch_stmt *switch_stmt; typedef struct AST_for_stmt *for_stmt; typedef struct AST_break_stmt *break_stmt; typedef struct AST_continue_stmt *continue_stmt; typedef struct AST_return_stmt *return_stmt; typedef struct AST_goto_stmt *goto_stmt; typedef struct AST_computed_goto_stmt *computed_goto_stmt; typedef struct AST_empty_stmt *empty_stmt; typedef struct AST_unary *unary; typedef struct AST_binary *binary; typedef struct AST_comma *comma; typedef struct AST_sizeof_type *sizeof_type; typedef struct AST_alignof_type *alignof_type; typedef struct AST_label_address *label_address; typedef struct AST_cast *cast; typedef struct AST_cast_list *cast_list; typedef struct AST_conditional *conditional; typedef struct AST_identifier *identifier; typedef struct AST_compound_expr *compound_expr; typedef struct AST_function_call *function_call; typedef struct AST_field_ref *field_ref; typedef struct AST_increment *increment; typedef struct AST_comparison *comparison; typedef struct AST_assignment *assignment; typedef struct AST_init_list *init_list; typedef struct AST_init_specific *init_specific; typedef struct AST_designator *designator; typedef struct AST_designate_field *designate_field; typedef struct AST_designate_index *designate_index; typedef struct AST_lexical_cst *lexical_cst; typedef struct AST_string_cst *string_cst; typedef struct AST_string *string; typedef struct AST_id_label *id_label; typedef struct AST_case_label *case_label; typedef struct AST_default_label *default_label; typedef struct AST_word *word; typedef struct AST_asm_operand *asm_operand; typedef struct AST_nesc_decl *nesc_decl; typedef struct AST_interface *interface; typedef struct AST_component *component; typedef struct AST_implementation *implementation; typedef struct AST_configuration *configuration; typedef struct AST_module *module; typedef struct AST_binary_component *binary_component; typedef struct AST_rp_interface *rp_interface; typedef struct AST_interface_ref *interface_ref; typedef struct AST_component_ref *component_ref; typedef struct AST_connection *connection; typedef struct AST_endpoint *endpoint; typedef struct AST_parameterised_identifier *parameterised_identifier; typedef struct AST_generic_declarator *generic_declarator; typedef struct AST_generic_call *generic_call; typedef struct AST_interface_ref_declarator *interface_ref_declarator; typedef struct AST_interface_deref *interface_deref; typedef struct AST_component_deref *component_deref; typedef struct AST_component_typeref *component_typeref; typedef struct AST_atomic_stmt *atomic_stmt; typedef struct AST_nesc_attribute *nesc_attribute; typedef struct AST_type_parm_decl *type_parm_decl; typedef struct AST_type_argument *type_argument; typedef struct AST_declaration *error_decl; typedef struct AST_tag_ref *attribute_ref; typedef struct AST_tag_ref *enum_ref; typedef struct AST_statement *error_stmt; typedef struct AST_conditional_stmt *while_stmt; typedef struct AST_conditional_stmt *dowhile_stmt; typedef struct AST_expression *error_expr; typedef struct AST_binary *array_ref; typedef struct AST_unary *dereference; typedef struct AST_unary *extension_expr; typedef struct AST_unary *sizeof_expr; typedef struct AST_unary *alignof_expr; typedef struct AST_unary *realpart; typedef struct AST_unary *imagpart; typedef struct AST_unary *address_of; typedef struct AST_unary *unary_minus; typedef struct AST_unary *unary_plus; typedef struct AST_unary *conjugate; typedef struct AST_unary *bitnot; typedef struct AST_unary *not; typedef struct AST_increment *preincrement; typedef struct AST_increment *predecrement; typedef struct AST_increment *postincrement; typedef struct AST_increment *postdecrement; typedef struct AST_binary *plus; typedef struct AST_binary *minus; typedef struct AST_binary *times; typedef struct AST_binary *divide; typedef struct AST_binary *modulo; typedef struct AST_binary *lshift; typedef struct AST_binary *rshift; typedef struct AST_comparison *leq; typedef struct AST_comparison *geq; typedef struct AST_comparison *lt; typedef struct AST_comparison *gt; typedef struct AST_comparison *eq; typedef struct AST_comparison *ne; typedef struct AST_binary *bitand; typedef struct AST_binary *bitor; typedef struct AST_binary *bitxor; typedef struct AST_binary *andand; typedef struct AST_binary *oror; typedef struct AST_assignment *assign; typedef struct AST_assignment *plus_assign; typedef struct AST_assignment *minus_assign; typedef struct AST_assignment *times_assign; typedef struct AST_assignment *divide_assign; typedef struct AST_assignment *modulo_assign; typedef struct AST_assignment *lshift_assign; typedef struct AST_assignment *rshift_assign; typedef struct AST_assignment *bitand_assign; typedef struct AST_assignment *bitor_assign; typedef struct AST_assignment *bitxor_assign; typedef struct AST_connection *rp_connection; typedef struct AST_connection *eq_connection; typedef struct AST_struct_ref *nx_struct_ref; typedef struct AST_union_ref *nx_union_ref; typedef struct AST_gcc_attribute *target_attribute; typedef enum { kind_node = 42, postkind_node = 199, kind_declaration = 43, postkind_declaration = 64, kind_statement = 65, postkind_statement = 83, kind_expression = 84, postkind_expression = 156, kind_type_element = 157, postkind_type_element = 174, kind_declarator = 175, postkind_declarator = 183, kind_label = 184, postkind_label = 187, kind_asm_decl = 44, postkind_asm_decl = 44, kind_data_decl = 45, postkind_data_decl = 45, kind_extension_decl = 46, postkind_extension_decl = 46, kind_ellipsis_decl = 47, postkind_ellipsis_decl = 47, kind_enumerator = 48, postkind_enumerator = 48, kind_oldidentifier_decl = 49, postkind_oldidentifier_decl = 49, kind_function_decl = 50, postkind_function_decl = 50, kind_implicit_decl = 51, postkind_implicit_decl = 51, kind_variable_decl = 52, postkind_variable_decl = 52, kind_field_decl = 53, postkind_field_decl = 53, kind_asttype = 188, postkind_asttype = 188, kind_typename = 158, postkind_typename = 159, kind_typeof_expr = 160, postkind_typeof_expr = 160, kind_typeof_type = 161, postkind_typeof_type = 161, kind_attribute = 162, postkind_attribute = 165, kind_gcc_attribute = 163, postkind_gcc_attribute = 164, kind_rid = 166, postkind_rid = 166, kind_qualifier = 167, postkind_qualifier = 167, kind_tag_ref = 168, postkind_tag_ref = 174, kind_struct_ref = 169, postkind_struct_ref = 170, kind_union_ref = 171, postkind_union_ref = 172, kind_nested_declarator = 176, postkind_nested_declarator = 181, kind_function_declarator = 177, postkind_function_declarator = 177, kind_pointer_declarator = 178, postkind_pointer_declarator = 178, kind_qualified_declarator = 179, postkind_qualified_declarator = 179, kind_array_declarator = 180, postkind_array_declarator = 180, kind_identifier_declarator = 182, postkind_identifier_declarator = 182, kind_asm_stmt = 66, postkind_asm_stmt = 66, kind_compound_stmt = 67, postkind_compound_stmt = 67, kind_if_stmt = 68, postkind_if_stmt = 68, kind_labeled_stmt = 69, postkind_labeled_stmt = 69, kind_expression_stmt = 70, postkind_expression_stmt = 70, kind_conditional_stmt = 71, postkind_conditional_stmt = 74, kind_switch_stmt = 72, postkind_switch_stmt = 72, kind_for_stmt = 75, postkind_for_stmt = 75, kind_break_stmt = 76, postkind_break_stmt = 76, kind_continue_stmt = 77, postkind_continue_stmt = 77, kind_return_stmt = 78, postkind_return_stmt = 78, kind_goto_stmt = 79, postkind_goto_stmt = 79, kind_computed_goto_stmt = 80, postkind_computed_goto_stmt = 80, kind_empty_stmt = 81, postkind_empty_stmt = 81, kind_unary = 85, postkind_unary = 106, kind_binary = 107, postkind_binary = 139, kind_comma = 140, postkind_comma = 140, kind_sizeof_type = 141, postkind_sizeof_type = 141, kind_alignof_type = 142, postkind_alignof_type = 142, kind_label_address = 143, postkind_label_address = 143, kind_cast = 86, postkind_cast = 86, kind_cast_list = 144, postkind_cast_list = 144, kind_conditional = 145, postkind_conditional = 145, kind_identifier = 146, postkind_identifier = 146, kind_compound_expr = 147, postkind_compound_expr = 147, kind_function_call = 148, postkind_function_call = 148, kind_field_ref = 87, postkind_field_ref = 87, kind_increment = 88, postkind_increment = 92, kind_comparison = 108, postkind_comparison = 114, kind_assignment = 115, postkind_assignment = 126, kind_init_list = 149, postkind_init_list = 149, kind_init_specific = 150, postkind_init_specific = 150, kind_designator = 189, postkind_designator = 191, kind_designate_field = 190, postkind_designate_field = 190, kind_designate_index = 191, postkind_designate_index = 191, kind_lexical_cst = 151, postkind_lexical_cst = 152, kind_string_cst = 152, postkind_string_cst = 152, kind_string = 153, postkind_string = 153, kind_id_label = 185, postkind_id_label = 185, kind_case_label = 186, postkind_case_label = 186, kind_default_label = 187, postkind_default_label = 187, kind_word = 192, postkind_word = 192, kind_asm_operand = 193, postkind_asm_operand = 193, kind_nesc_decl = 54, postkind_nesc_decl = 56, kind_interface = 55, postkind_interface = 55, kind_component = 56, postkind_component = 56, kind_implementation = 194, postkind_implementation = 197, kind_configuration = 195, postkind_configuration = 195, kind_module = 196, postkind_module = 196, kind_binary_component = 197, postkind_binary_component = 197, kind_rp_interface = 57, postkind_rp_interface = 57, kind_interface_ref = 58, postkind_interface_ref = 58, kind_component_ref = 59, postkind_component_ref = 59, kind_connection = 60, postkind_connection = 62, kind_endpoint = 198, postkind_endpoint = 198, kind_parameterised_identifier = 199, postkind_parameterised_identifier = 199, kind_generic_declarator = 183, postkind_generic_declarator = 183, kind_generic_call = 154, postkind_generic_call = 154, kind_interface_ref_declarator = 181, postkind_interface_ref_declarator = 181, kind_interface_deref = 93, postkind_interface_deref = 93, kind_component_deref = 94, postkind_component_deref = 94, kind_component_typeref = 159, postkind_component_typeref = 159, kind_atomic_stmt = 82, postkind_atomic_stmt = 82, kind_nesc_attribute = 165, postkind_nesc_attribute = 165, kind_type_parm_decl = 63, postkind_type_parm_decl = 63, kind_type_argument = 155, postkind_type_argument = 155, kind_error_decl = 64, postkind_error_decl = 64, kind_attribute_ref = 173, postkind_attribute_ref = 173, kind_enum_ref = 174, postkind_enum_ref = 174, kind_error_stmt = 83, postkind_error_stmt = 83, kind_while_stmt = 73, postkind_while_stmt = 73, kind_dowhile_stmt = 74, postkind_dowhile_stmt = 74, kind_error_expr = 156, postkind_error_expr = 156, kind_array_ref = 127, postkind_array_ref = 127, kind_dereference = 95, postkind_dereference = 95, kind_extension_expr = 96, postkind_extension_expr = 96, kind_sizeof_expr = 97, postkind_sizeof_expr = 97, kind_alignof_expr = 98, postkind_alignof_expr = 98, kind_realpart = 99, postkind_realpart = 99, kind_imagpart = 100, postkind_imagpart = 100, kind_address_of = 101, postkind_address_of = 101, kind_unary_minus = 102, postkind_unary_minus = 102, kind_unary_plus = 103, postkind_unary_plus = 103, kind_conjugate = 104, postkind_conjugate = 104, kind_bitnot = 105, postkind_bitnot = 105, kind_not = 106, postkind_not = 106, kind_preincrement = 89, postkind_preincrement = 89, kind_predecrement = 90, postkind_predecrement = 90, kind_postincrement = 91, postkind_postincrement = 91, kind_postdecrement = 92, postkind_postdecrement = 92, kind_plus = 128, postkind_plus = 128, kind_minus = 129, postkind_minus = 129, kind_times = 130, postkind_times = 130, kind_divide = 131, postkind_divide = 131, kind_modulo = 132, postkind_modulo = 132, kind_lshift = 133, postkind_lshift = 133, kind_rshift = 134, postkind_rshift = 134, kind_leq = 109, postkind_leq = 109, kind_geq = 110, postkind_geq = 110, kind_lt = 111, postkind_lt = 111, kind_gt = 112, postkind_gt = 112, kind_eq = 113, postkind_eq = 113, kind_ne = 114, postkind_ne = 114, kind_bitand = 135, postkind_bitand = 135, kind_bitor = 136, postkind_bitor = 136, kind_bitxor = 137, postkind_bitxor = 137, kind_andand = 138, postkind_andand = 138, kind_oror = 139, postkind_oror = 139, kind_assign = 116, postkind_assign = 116, kind_plus_assign = 117, postkind_plus_assign = 117, kind_minus_assign = 118, postkind_minus_assign = 118, kind_times_assign = 119, postkind_times_assign = 119, kind_divide_assign = 120, postkind_divide_assign = 120, kind_modulo_assign = 121, postkind_modulo_assign = 121, kind_lshift_assign = 122, postkind_lshift_assign = 122, kind_rshift_assign = 123, postkind_rshift_assign = 123, kind_bitand_assign = 124, postkind_bitand_assign = 124, kind_bitor_assign = 125, postkind_bitor_assign = 125, kind_bitxor_assign = 126, postkind_bitxor_assign = 126, kind_rp_connection = 61, postkind_rp_connection = 61, kind_eq_connection = 62, postkind_eq_connection = 62, kind_nx_struct_ref = 170, postkind_nx_struct_ref = 170, kind_nx_union_ref = 172, postkind_nx_union_ref = 172, kind_target_attribute = 164, postkind_target_attribute = 164 } AST_kind; extern AST_kind AST_parent_kind[]; /* indexed by kind - kind_node */ extern AST_kind AST_post_kind[]; /* indexed by kind - kind_node */ extern size_t AST_sizeof[]; /* indexed by kind - kind_node */ extern type_t AST_typeof[]; /* indexed by kind - kind_node */ #define is_node(x) ((x)->kind >= kind_node && (x)->kind <= postkind_node) #define is_declaration(x) ((x)->kind >= kind_declaration && (x)->kind <= postkind_declaration) #define is_statement(x) ((x)->kind >= kind_statement && (x)->kind <= postkind_statement) #define is_expression(x) ((x)->kind >= kind_expression && (x)->kind <= postkind_expression) #define is_type_element(x) ((x)->kind >= kind_type_element && (x)->kind <= postkind_type_element) #define is_declarator(x) ((x)->kind >= kind_declarator && (x)->kind <= postkind_declarator) #define is_label(x) ((x)->kind >= kind_label && (x)->kind <= postkind_label) #define is_asm_decl(x) ((x)->kind >= kind_asm_decl && (x)->kind <= postkind_asm_decl) #define is_data_decl(x) ((x)->kind >= kind_data_decl && (x)->kind <= postkind_data_decl) #define is_extension_decl(x) ((x)->kind >= kind_extension_decl && (x)->kind <= postkind_extension_decl) #define is_ellipsis_decl(x) ((x)->kind >= kind_ellipsis_decl && (x)->kind <= postkind_ellipsis_decl) #define is_enumerator(x) ((x)->kind >= kind_enumerator && (x)->kind <= postkind_enumerator) #define is_oldidentifier_decl(x) ((x)->kind >= kind_oldidentifier_decl && (x)->kind <= postkind_oldidentifier_decl) #define is_function_decl(x) ((x)->kind >= kind_function_decl && (x)->kind <= postkind_function_decl) #define is_implicit_decl(x) ((x)->kind >= kind_implicit_decl && (x)->kind <= postkind_implicit_decl) #define is_variable_decl(x) ((x)->kind >= kind_variable_decl && (x)->kind <= postkind_variable_decl) #define is_field_decl(x) ((x)->kind >= kind_field_decl && (x)->kind <= postkind_field_decl) #define is_asttype(x) ((x)->kind >= kind_asttype && (x)->kind <= postkind_asttype) #define is_typename(x) ((x)->kind >= kind_typename && (x)->kind <= postkind_typename) #define is_typeof_expr(x) ((x)->kind >= kind_typeof_expr && (x)->kind <= postkind_typeof_expr) #define is_typeof_type(x) ((x)->kind >= kind_typeof_type && (x)->kind <= postkind_typeof_type) #define is_attribute(x) ((x)->kind >= kind_attribute && (x)->kind <= postkind_attribute) #define is_gcc_attribute(x) ((x)->kind >= kind_gcc_attribute && (x)->kind <= postkind_gcc_attribute) #define is_rid(x) ((x)->kind >= kind_rid && (x)->kind <= postkind_rid) #define is_qualifier(x) ((x)->kind >= kind_qualifier && (x)->kind <= postkind_qualifier) #define is_tag_ref(x) ((x)->kind >= kind_tag_ref && (x)->kind <= postkind_tag_ref) #define is_struct_ref(x) ((x)->kind >= kind_struct_ref && (x)->kind <= postkind_struct_ref) #define is_union_ref(x) ((x)->kind >= kind_union_ref && (x)->kind <= postkind_union_ref) #define is_nested_declarator(x) ((x)->kind >= kind_nested_declarator && (x)->kind <= postkind_nested_declarator) #define is_function_declarator(x) ((x)->kind >= kind_function_declarator && (x)->kind <= postkind_function_declarator) #define is_pointer_declarator(x) ((x)->kind >= kind_pointer_declarator && (x)->kind <= postkind_pointer_declarator) #define is_qualified_declarator(x) ((x)->kind >= kind_qualified_declarator && (x)->kind <= postkind_qualified_declarator) #define is_array_declarator(x) ((x)->kind >= kind_array_declarator && (x)->kind <= postkind_array_declarator) #define is_identifier_declarator(x) ((x)->kind >= kind_identifier_declarator && (x)->kind <= postkind_identifier_declarator) #define is_asm_stmt(x) ((x)->kind >= kind_asm_stmt && (x)->kind <= postkind_asm_stmt) #define is_compound_stmt(x) ((x)->kind >= kind_compound_stmt && (x)->kind <= postkind_compound_stmt) #define is_if_stmt(x) ((x)->kind >= kind_if_stmt && (x)->kind <= postkind_if_stmt) #define is_labeled_stmt(x) ((x)->kind >= kind_labeled_stmt && (x)->kind <= postkind_labeled_stmt) #define is_expression_stmt(x) ((x)->kind >= kind_expression_stmt && (x)->kind <= postkind_expression_stmt) #define is_conditional_stmt(x) ((x)->kind >= kind_conditional_stmt && (x)->kind <= postkind_conditional_stmt) #define is_switch_stmt(x) ((x)->kind >= kind_switch_stmt && (x)->kind <= postkind_switch_stmt) #define is_for_stmt(x) ((x)->kind >= kind_for_stmt && (x)->kind <= postkind_for_stmt) #define is_break_stmt(x) ((x)->kind >= kind_break_stmt && (x)->kind <= postkind_break_stmt) #define is_continue_stmt(x) ((x)->kind >= kind_continue_stmt && (x)->kind <= postkind_continue_stmt) #define is_return_stmt(x) ((x)->kind >= kind_return_stmt && (x)->kind <= postkind_return_stmt) #define is_goto_stmt(x) ((x)->kind >= kind_goto_stmt && (x)->kind <= postkind_goto_stmt) #define is_computed_goto_stmt(x) ((x)->kind >= kind_computed_goto_stmt && (x)->kind <= postkind_computed_goto_stmt) #define is_empty_stmt(x) ((x)->kind >= kind_empty_stmt && (x)->kind <= postkind_empty_stmt) #define is_unary(x) ((x)->kind >= kind_unary && (x)->kind <= postkind_unary) #define is_binary(x) ((x)->kind >= kind_binary && (x)->kind <= postkind_binary) #define is_comma(x) ((x)->kind >= kind_comma && (x)->kind <= postkind_comma) #define is_sizeof_type(x) ((x)->kind >= kind_sizeof_type && (x)->kind <= postkind_sizeof_type) #define is_alignof_type(x) ((x)->kind >= kind_alignof_type && (x)->kind <= postkind_alignof_type) #define is_label_address(x) ((x)->kind >= kind_label_address && (x)->kind <= postkind_label_address) #define is_cast(x) ((x)->kind >= kind_cast && (x)->kind <= postkind_cast) #define is_cast_list(x) ((x)->kind >= kind_cast_list && (x)->kind <= postkind_cast_list) #define is_conditional(x) ((x)->kind >= kind_conditional && (x)->kind <= postkind_conditional) #define is_identifier(x) ((x)->kind >= kind_identifier && (x)->kind <= postkind_identifier) #define is_compound_expr(x) ((x)->kind >= kind_compound_expr && (x)->kind <= postkind_compound_expr) #define is_function_call(x) ((x)->kind >= kind_function_call && (x)->kind <= postkind_function_call) #define is_field_ref(x) ((x)->kind >= kind_field_ref && (x)->kind <= postkind_field_ref) #define is_increment(x) ((x)->kind >= kind_increment && (x)->kind <= postkind_increment) #define is_comparison(x) ((x)->kind >= kind_comparison && (x)->kind <= postkind_comparison) #define is_assignment(x) ((x)->kind >= kind_assignment && (x)->kind <= postkind_assignment) #define is_init_list(x) ((x)->kind >= kind_init_list && (x)->kind <= postkind_init_list) #define is_init_specific(x) ((x)->kind >= kind_init_specific && (x)->kind <= postkind_init_specific) #define is_designator(x) ((x)->kind >= kind_designator && (x)->kind <= postkind_designator) #define is_designate_field(x) ((x)->kind >= kind_designate_field && (x)->kind <= postkind_designate_field) #define is_designate_index(x) ((x)->kind >= kind_designate_index && (x)->kind <= postkind_designate_index) #define is_lexical_cst(x) ((x)->kind >= kind_lexical_cst && (x)->kind <= postkind_lexical_cst) #define is_string_cst(x) ((x)->kind >= kind_string_cst && (x)->kind <= postkind_string_cst) #define is_string(x) ((x)->kind >= kind_string && (x)->kind <= postkind_string) #define is_id_label(x) ((x)->kind >= kind_id_label && (x)->kind <= postkind_id_label) #define is_case_label(x) ((x)->kind >= kind_case_label && (x)->kind <= postkind_case_label) #define is_default_label(x) ((x)->kind >= kind_default_label && (x)->kind <= postkind_default_label) #define is_word(x) ((x)->kind >= kind_word && (x)->kind <= postkind_word) #define is_asm_operand(x) ((x)->kind >= kind_asm_operand && (x)->kind <= postkind_asm_operand) #define is_nesc_decl(x) ((x)->kind >= kind_nesc_decl && (x)->kind <= postkind_nesc_decl) #define is_interface(x) ((x)->kind >= kind_interface && (x)->kind <= postkind_interface) #define is_component(x) ((x)->kind >= kind_component && (x)->kind <= postkind_component) #define is_implementation(x) ((x)->kind >= kind_implementation && (x)->kind <= postkind_implementation) #define is_configuration(x) ((x)->kind >= kind_configuration && (x)->kind <= postkind_configuration) #define is_module(x) ((x)->kind >= kind_module && (x)->kind <= postkind_module) #define is_binary_component(x) ((x)->kind >= kind_binary_component && (x)->kind <= postkind_binary_component) #define is_rp_interface(x) ((x)->kind >= kind_rp_interface && (x)->kind <= postkind_rp_interface) #define is_interface_ref(x) ((x)->kind >= kind_interface_ref && (x)->kind <= postkind_interface_ref) #define is_component_ref(x) ((x)->kind >= kind_component_ref && (x)->kind <= postkind_component_ref) #define is_connection(x) ((x)->kind >= kind_connection && (x)->kind <= postkind_connection) #define is_endpoint(x) ((x)->kind >= kind_endpoint && (x)->kind <= postkind_endpoint) #define is_parameterised_identifier(x) ((x)->kind >= kind_parameterised_identifier && (x)->kind <= postkind_parameterised_identifier) #define is_generic_declarator(x) ((x)->kind >= kind_generic_declarator && (x)->kind <= postkind_generic_declarator) #define is_generic_call(x) ((x)->kind >= kind_generic_call && (x)->kind <= postkind_generic_call) #define is_interface_ref_declarator(x) ((x)->kind >= kind_interface_ref_declarator && (x)->kind <= postkind_interface_ref_declarator) #define is_interface_deref(x) ((x)->kind >= kind_interface_deref && (x)->kind <= postkind_interface_deref) #define is_component_deref(x) ((x)->kind >= kind_component_deref && (x)->kind <= postkind_component_deref) #define is_component_typeref(x) ((x)->kind >= kind_component_typeref && (x)->kind <= postkind_component_typeref) #define is_atomic_stmt(x) ((x)->kind >= kind_atomic_stmt && (x)->kind <= postkind_atomic_stmt) #define is_nesc_attribute(x) ((x)->kind >= kind_nesc_attribute && (x)->kind <= postkind_nesc_attribute) #define is_type_parm_decl(x) ((x)->kind >= kind_type_parm_decl && (x)->kind <= postkind_type_parm_decl) #define is_type_argument(x) ((x)->kind >= kind_type_argument && (x)->kind <= postkind_type_argument) #define is_error_decl(x) ((x)->kind >= kind_error_decl && (x)->kind <= postkind_error_decl) #define is_attribute_ref(x) ((x)->kind >= kind_attribute_ref && (x)->kind <= postkind_attribute_ref) #define is_enum_ref(x) ((x)->kind >= kind_enum_ref && (x)->kind <= postkind_enum_ref) #define is_error_stmt(x) ((x)->kind >= kind_error_stmt && (x)->kind <= postkind_error_stmt) #define is_while_stmt(x) ((x)->kind >= kind_while_stmt && (x)->kind <= postkind_while_stmt) #define is_dowhile_stmt(x) ((x)->kind >= kind_dowhile_stmt && (x)->kind <= postkind_dowhile_stmt) #define is_error_expr(x) ((x)->kind >= kind_error_expr && (x)->kind <= postkind_error_expr) #define is_array_ref(x) ((x)->kind >= kind_array_ref && (x)->kind <= postkind_array_ref) #define is_dereference(x) ((x)->kind >= kind_dereference && (x)->kind <= postkind_dereference) #define is_extension_expr(x) ((x)->kind >= kind_extension_expr && (x)->kind <= postkind_extension_expr) #define is_sizeof_expr(x) ((x)->kind >= kind_sizeof_expr && (x)->kind <= postkind_sizeof_expr) #define is_alignof_expr(x) ((x)->kind >= kind_alignof_expr && (x)->kind <= postkind_alignof_expr) #define is_realpart(x) ((x)->kind >= kind_realpart && (x)->kind <= postkind_realpart) #define is_imagpart(x) ((x)->kind >= kind_imagpart && (x)->kind <= postkind_imagpart) #define is_address_of(x) ((x)->kind >= kind_address_of && (x)->kind <= postkind_address_of) #define is_unary_minus(x) ((x)->kind >= kind_unary_minus && (x)->kind <= postkind_unary_minus) #define is_unary_plus(x) ((x)->kind >= kind_unary_plus && (x)->kind <= postkind_unary_plus) #define is_conjugate(x) ((x)->kind >= kind_conjugate && (x)->kind <= postkind_conjugate) #define is_bitnot(x) ((x)->kind >= kind_bitnot && (x)->kind <= postkind_bitnot) #define is_not(x) ((x)->kind >= kind_not && (x)->kind <= postkind_not) #define is_preincrement(x) ((x)->kind >= kind_preincrement && (x)->kind <= postkind_preincrement) #define is_predecrement(x) ((x)->kind >= kind_predecrement && (x)->kind <= postkind_predecrement) #define is_postincrement(x) ((x)->kind >= kind_postincrement && (x)->kind <= postkind_postincrement) #define is_postdecrement(x) ((x)->kind >= kind_postdecrement && (x)->kind <= postkind_postdecrement) #define is_plus(x) ((x)->kind >= kind_plus && (x)->kind <= postkind_plus) #define is_minus(x) ((x)->kind >= kind_minus && (x)->kind <= postkind_minus) #define is_times(x) ((x)->kind >= kind_times && (x)->kind <= postkind_times) #define is_divide(x) ((x)->kind >= kind_divide && (x)->kind <= postkind_divide) #define is_modulo(x) ((x)->kind >= kind_modulo && (x)->kind <= postkind_modulo) #define is_lshift(x) ((x)->kind >= kind_lshift && (x)->kind <= postkind_lshift) #define is_rshift(x) ((x)->kind >= kind_rshift && (x)->kind <= postkind_rshift) #define is_leq(x) ((x)->kind >= kind_leq && (x)->kind <= postkind_leq) #define is_geq(x) ((x)->kind >= kind_geq && (x)->kind <= postkind_geq) #define is_lt(x) ((x)->kind >= kind_lt && (x)->kind <= postkind_lt) #define is_gt(x) ((x)->kind >= kind_gt && (x)->kind <= postkind_gt) #define is_eq(x) ((x)->kind >= kind_eq && (x)->kind <= postkind_eq) #define is_ne(x) ((x)->kind >= kind_ne && (x)->kind <= postkind_ne) #define is_bitand(x) ((x)->kind >= kind_bitand && (x)->kind <= postkind_bitand) #define is_bitor(x) ((x)->kind >= kind_bitor && (x)->kind <= postkind_bitor) #define is_bitxor(x) ((x)->kind >= kind_bitxor && (x)->kind <= postkind_bitxor) #define is_andand(x) ((x)->kind >= kind_andand && (x)->kind <= postkind_andand) #define is_oror(x) ((x)->kind >= kind_oror && (x)->kind <= postkind_oror) #define is_assign(x) ((x)->kind >= kind_assign && (x)->kind <= postkind_assign) #define is_plus_assign(x) ((x)->kind >= kind_plus_assign && (x)->kind <= postkind_plus_assign) #define is_minus_assign(x) ((x)->kind >= kind_minus_assign && (x)->kind <= postkind_minus_assign) #define is_times_assign(x) ((x)->kind >= kind_times_assign && (x)->kind <= postkind_times_assign) #define is_divide_assign(x) ((x)->kind >= kind_divide_assign && (x)->kind <= postkind_divide_assign) #define is_modulo_assign(x) ((x)->kind >= kind_modulo_assign && (x)->kind <= postkind_modulo_assign) #define is_lshift_assign(x) ((x)->kind >= kind_lshift_assign && (x)->kind <= postkind_lshift_assign) #define is_rshift_assign(x) ((x)->kind >= kind_rshift_assign && (x)->kind <= postkind_rshift_assign) #define is_bitand_assign(x) ((x)->kind >= kind_bitand_assign && (x)->kind <= postkind_bitand_assign) #define is_bitor_assign(x) ((x)->kind >= kind_bitor_assign && (x)->kind <= postkind_bitor_assign) #define is_bitxor_assign(x) ((x)->kind >= kind_bitxor_assign && (x)->kind <= postkind_bitxor_assign) #define is_rp_connection(x) ((x)->kind >= kind_rp_connection && (x)->kind <= postkind_rp_connection) #define is_eq_connection(x) ((x)->kind >= kind_eq_connection && (x)->kind <= postkind_eq_connection) #define is_nx_struct_ref(x) ((x)->kind >= kind_nx_struct_ref && (x)->kind <= postkind_nx_struct_ref) #define is_nx_union_ref(x) ((x)->kind >= kind_nx_union_ref && (x)->kind <= postkind_nx_union_ref) #define is_target_attribute(x) ((x)->kind >= kind_target_attribute && (x)->kind <= postkind_target_attribute) typedef struct { AST_kind kind; } *AST_generic; #ifdef __GNUC__ #define AST_CAST(type, x) ({AST_generic tEmPcast = (AST_generic)(x); if (tEmPcast) assert(is_ ## type(tEmPcast)); (type)(tEmPcast); }) #define AST_CASTPTR(type, x) ({AST_generic *tEmPcast = (AST_generic *)(x); if (tEmPcast && *tEmPcast) assert(is_ ## type(*tEmPcast)); (type *)(tEmPcast); }) #define AST_CASTSRPTR(type, x) ({AST_generic *tEmPcast = (AST_generic *)(x); if (tEmPcast && *tEmPcast) assert(is_ ## type(*tEmPcast)); (type sameregion *)(tEmPcast); }) #else /* Could also generate some code to make this safe */ #define AST_CAST(type, x) ((type)(x)) #define AST_CASTPTR(type, x) ((type *)(x)) #define AST_CASTSRPTR(type, x) ((type sameregion *)(x)) #endif nescc-1.3.4/src/AST_utils.c000066400000000000000000000212621177770303300154270ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "AST_utils.h" #include "constants.h" bool oldstyle_function(function_decl fn) { return !fn->fdeclarator->parms || is_oldidentifier_decl(fn->fdeclarator->parms); } /* True if the parameters is just the parameter list '(void)' */ bool is_void_parms(declaration parms) { data_decl dd; variable_decl vd; if (!parms || parms->next || !is_data_decl(parms)) return FALSE; dd = CAST(data_decl, parms); vd = CAST(variable_decl, dd->decls); assert(!vd->next); return !vd->declarator && dd->modifiers && !dd->modifiers->next && is_rid(dd->modifiers) && CAST(rid, dd->modifiers)->id == RID_VOID; } function_declarator get_fdeclarator(declarator d) { function_declarator fd = NULL; while (d) switch (d->kind) { case kind_identifier_declarator: return fd; case kind_function_declarator: fd = CAST(function_declarator, d); /* fallthrough */ default: d = CAST(nested_declarator, d)->declarator; break; } return fd; } data_declaration get_parameter(declaration d) { switch (d->kind) { case kind_ellipsis_decl: return NULL; case kind_oldidentifier_decl: return CAST(oldidentifier_decl, d)->ddecl; case kind_data_decl: return CAST(variable_decl, CAST(data_decl, d)->decls)->ddecl; default: assert(0); return NULL; } } data_declaration base_identifier(data_declaration d) { while (d->isfilescoperef && d->shadowed) d = d->shadowed; return d; } bool same_function(data_declaration d1, data_declaration d2) { d1 = base_identifier(d1); d2 = base_identifier(d2); return d1->kind == decl_function && d1 == d2; } bool call_to(data_declaration fnd, function_call fce) { return is_identifier(fce->arg1) && fnd && same_function(CAST(identifier, fce->arg1)->ddecl, fnd); } bool is_localvar(expression e) { data_declaration decl; if (!is_identifier(e)) return FALSE; decl = CAST(identifier, e)->ddecl; return decl->kind == decl_variable && decl->islocal; } compound_stmt parent_block(node n) { /* Don't consider statement expressions as parent blocks - the last statement is special (value of the block) which confuses code that assumes arbitrary statements can be added to the end of a block */ while (!is_compound_stmt(n) || is_compound_expr(n->parent)) n = n->parent; return CAST(compound_stmt, n); } function_decl parent_function(node n) { while (!is_function_decl(n)) n = n->parent; return CAST(function_decl, n); } expression ignore_fields(expression e) { while (e->kind == kind_field_ref) e = CAST(field_ref, e)->arg1; return e; } expression expression_of_stmt(compound_expr ce) { compound_stmt blk = CAST(compound_stmt, ce->stmt); statement last_stmt = last_statement(blk->stmts); if (last_stmt && is_expression_stmt(last_stmt)) { expression_stmt es = CAST(expression_stmt, last_stmt); return es->arg1; } return NULL; } bool expression_used(expression e) { node p1 = e->parent, n1 = e->next; /* Figure out if result of assignment is used. Logic: used(e): case parent(e) of expression_stmt: false comma: false if e not last, used(parent(e)) otherwise everything else: true */ for (;;) { if (is_expression_stmt(p1)) return FALSE; if (!is_comma(p1)) return TRUE; if (n1) return FALSE; /* Not last in a comma */ n1 = p1->next; p1 = p1->parent; } } bool zero_expression(expression e) { /* a = 0 is not a constant expression but it's value is known to be 0, and other similar cases */ for (;;) { if (is_assign(e)) { e = CAST(assign, e)->arg2; continue; } if (is_cast(e)) { e = CAST(cast, e)->arg1; continue; } if (is_comma(e)) { e = CAST(expression, last_node(CAST(node, CAST(comma, e)->arg1))); continue; } break; } return definite_zero(e); } expression build_int_constant(region r, location loc, type t, largest_int c) { char cstbuf[64]; cstring csts; lexical_cst cst; snprintf(cstbuf, sizeof cstbuf, "%lld", c); csts.data = rstrdup(r, cstbuf); csts.length = strlen(cstbuf); cst = new_lexical_cst(r, loc, csts); cst->type = t; cst->cst = make_cst(make_cval_signed(c, t), t); return CAST(expression, cst); } expression build_uint_constant(region r, location loc, type t, largest_uint c) { char cstbuf[64]; cstring csts; lexical_cst cst; snprintf(cstbuf, sizeof cstbuf, "%llu", c); csts.data = rstrdup(r, cstbuf); csts.length = strlen(cstbuf); cst = new_lexical_cst(r, loc, csts); cst->type = t; cst->cst = make_cst(make_cval_unsigned(c, t), t); return CAST(expression, cst); } cval value_of_enumerator(enumerator e) { return e->ddecl->value->cval; } expression build_identifier(region r, location loc, data_declaration id) { identifier e = new_identifier(r, loc, str2cstring(r, id->name), id); assert(id->kind == decl_variable || id->kind == decl_function || id->kind == decl_constant || id->kind == decl_magic_function); e->type = id->type; e->cst = fold_identifier(CAST(expression, e), id, 0); return CAST(expression, e); } int asm_rwmode(string s) { if (s->ddecl->schars.length > 0) return s->ddecl->schars.data[0]; else return -1; } declaration ignore_extensions(declaration d) { while (is_extension_decl(d)) d = CAST(extension_decl, d)->decl; return d; } tag_declaration get_unnamed_tag_decl(data_decl decl) { /* decl has no actual declarations. Check to see if it is a struct or union, and if so return that struct or union's declaration */ type_element elem; scan_type_element (elem, decl->modifiers) if (is_struct_ref(elem) || is_union_ref(elem)) return CAST(tag_ref, elem)->tdecl; return NULL; } const char *nice_field_name(const char *s) /* Returns: "(anonymous)" if s == NULL, s otherwise This helps printing the name of potentially unnamed entities */ { if (s) return s; return "(anonymous)"; } const char *tagkind_name(int tagkind) { switch (tagkind) { case kind_attribute_ref: return "attribute"; case kind_struct_ref: return "struct"; case kind_union_ref: return "union"; case kind_nx_struct_ref: return "nx_struct"; case kind_nx_union_ref: return "nx_union"; case kind_enum_ref: return "enum"; default: assert(0); return NULL; } } conditional conditional_lvalue(expression e) { /* a = 0 is not a constant expression but it's value is known to be 0, and other similar cases */ for (;;) { if (is_cast(e)) { e = CAST(cast, e)->arg1; continue; } if (is_comma(e)) { e = CAST(expression, last_node(CAST(node, CAST(comma, e)->arg1))); continue; } break; } if (is_conditional(e)) return CAST(conditional, e); else return NULL; } data_declaration string_ddecl(expression s) { if (s->cst && constant_address(s->cst)) { data_declaration sdecl = cval_ddecl(s->cst->cval); /* Must be an offsetless string */ if (sdecl && sdecl->kind == decl_magic_string && cval_knownbool(s->cst->cval)) return sdecl; } return NULL; } char *ddecl2str(region r, data_declaration ddecl) /* Returns: a newly allocated string (in region r) for the string specified by ddecl, or NULL if str contains wide characters Requires: ddecl->kind == decl_magic_string */ { assert(ddecl->kind == decl_magic_string); if (!type_char(type_array_of(ddecl->type))) return NULL; /* Wide string */ else return cstring2str(r, ddecl->schars); } /* True if arg is name or __name__ */ bool is_attr_name(const char *arg, const char *name) { int l; if (!strcmp(arg, name)) return TRUE; if (strncmp(arg, "__", 2)) return FALSE; l = strlen(name); return !strncmp(arg + 2, name, l) && !strcmp(arg + 2 + l, "__"); } type_element interesting_element(type_element elems) { type_element elem; scan_type_element (elem, elems) if (is_tag_ref(elem)) return elem; return NULL; } nescc-1.3.4/src/AST_utils.h000066400000000000000000000064051177770303300154360ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef AST_UTILS_H #define AST_UTILS_H #define IS_A(n, k) \ ((n)->kind >= (k) && (n)->kind <= AST_post_kind[(k) - kind_node]) data_declaration get_parameter(declaration d); function_declarator get_fdeclarator(declarator d); bool oldstyle_function(function_decl fn); bool is_void_parms(declaration parms); bool is_localvar(expression e); compound_stmt parent_block(node n); function_decl parent_function(node n); expression expression_of_stmt(compound_expr ce); /* Return expression which is value of compound statement expression, or NULL of node ("void" compound expression) */ bool expression_used(expression e); data_declaration base_identifier(data_declaration d); bool same_function(data_declaration d1, data_declaration d2); bool call_to(data_declaration fnd, function_call fce); expression ignore_fields(expression e); /* True for expressions whose value is known to be 0 (but which may not be constant expressions) */ bool zero_expression(expression e); expression build_int_constant(region r, location loc, type t, largest_int c); expression build_uint_constant(region r, location loc, type t, largest_uint c); #define build_zero(r, loc) build_int_constant(r, loc, int_type, 0) expression build_identifier(region r, location loc, data_declaration id); cval value_of_enumerator(enumerator e); int asm_rwmode(string s); /* Return: The first char of asm operand mode specifier s, this indicates the r/w mode for the operand (see gcc docs) The result is -1 if s is the empty string. */ declaration ignore_extensions(declaration d); /* Ignore extension_decls at d, returning the "real" declaration */ tag_declaration get_unnamed_tag_decl(data_decl decl); /* Returns:. Check to see if it is a struct or union, and if so return that struct or union's declaration */ const char *nice_field_name(const char *s); /* Returns: "(anonymous)" if s == NULL, s otherwise This helps printing the name of potentially unnamed entities */ const char *tagkind_name(int tagkind); conditional conditional_lvalue(expression e); data_declaration string_ddecl(expression s); char *ddecl2str(region r, data_declaration str); /* Returns: a newly allocated string (in region r) for the string specified by str, or NULL if str contains wide characters Requires: str->kind == decl_magic_string */ bool is_attr_name(const char *arg, const char *name); /* Returns: True if arg is name or __name__ */ type_element interesting_element(type_element elems); #endif nescc-1.3.4/src/AST_walk.c000066400000000000000000000046441177770303300152320ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "AST_walk.h" #include "AST_utils.h" struct AST_walker { AST_walker_fn walkers[postkind_node + 1 - kind_node]; }; static AST_walker_result default_walker(AST_walker spec, void *data, node *n) { return aw_walk; } AST_walker new_AST_walker(region r) /* Effcts: creates a new AST walker in region r. Default behaviour is to assert(0); */ { AST_walker walker = ralloc(r, struct AST_walker); AST_walker_handle(walker, kind_node, default_walker); return walker; } void AST_walker_handle(AST_walker spec, AST_kind kind, AST_walker_fn fn) /* Effects: Sets walker function for node kind and all its children to fn */ { AST_kind k; assert(kind >= kind_node && kind <= postkind_node); for (k = kind; k <= AST_post_kind[kind - kind_node]; k++) spec->walkers[k - kind_node] = fn; } /* Just execute the walker function for node-type 'kind' */ AST_walker_result AST_walker_call(AST_walker spec, AST_kind kind, void *data, node *n) { assert(kind >= kind_node && kind <= postkind_node && IS_A(*n, kind)); return spec->walkers[kind - kind_node](spec, data, n); } void AST_walk_list(AST_walker s, void *d, node *n) { while (*n) { AST_walk(s, d, n); n = &(*n)->next; } } void AST_walk_children(AST_walker s, void *d, node n) { switch (n->kind) { #include "AST_walk_children.c" default: break; } } /* Recursive walk from n */ void AST_walk(AST_walker spec, void *data, node *n) { for (;;) { AST_kind k = (*n)->kind; switch (AST_walker_call(spec, k, data, n)) { case aw_done: return; case aw_call_parent: k = AST_parent_kind[k - kind_node]; if (!k) return; break; case aw_walk: AST_walk_children(spec, data, *n); return; } } } nescc-1.3.4/src/AST_walk.h000066400000000000000000000045441177770303300152360ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef AST_WALK_H #define AST_WALK_H /* A generic, OO-ish AST walker. This is probably a visitor, for those into that kind of thing. The walker functions receive a node * rather than a node, so can modify the tree during the walk. This allows, e.g., cloning the AST. */ /* Untyped to make declaration easier. Actual signature is AST_walker_result AST_walker_fn(AST_walker spec, void *data, *n); Note: the aw_walk and aw_call_parent results will be applied to *n after the walker function returns, not to the orignal node. */ typedef enum { aw_walk, /* walk children */ aw_call_parent, /* call parent function */ aw_done /* don't walk children */ } AST_walker_result; typedef AST_walker_result (*AST_walker_fn)(); typedef struct AST_walker *AST_walker; AST_walker new_AST_walker(region r); /* Effcts: creates a new AST walker in region r. Default behaviour is to just walk through the children (i.e., a function returning aw_walk) */ void AST_walker_handle(AST_walker spec, AST_kind kind, AST_walker_fn fn); /* Effects: Sets walker function for node kind and all its children to fn */ /* Recursive walk from n */ void AST_walk(AST_walker spec, void *data, node *n); void AST_walk_list(AST_walker spec, void *data, node *n); /* Effects: Walks through the list starting at *n The walkers "divert" AST_walk_list if they modify the node or node pointer they receive. */ /* Walk children of n */ void AST_walk_children(AST_walker spec, void *data, node n); /* Just execute the walker function for node-type 'kind' */ AST_walker_result AST_walker_call(AST_walker spec, AST_kind kind, void *data, node *n); #endif nescc-1.3.4/src/AST_walk_children.c000066400000000000000000000464141177770303300171030ustar00rootroot00000000000000/* Automatically generated from nodetypes.def, do not edit. */ /* See the copyright notice in nodetypes.def */ case kind_asm_decl: { asm_decl x = CAST(asm_decl, n); AST_walk_list(s, d, (node *)&x->asm_stmt); break; } case kind_data_decl: { data_decl x = CAST(data_decl, n); AST_walk_list(s, d, (node *)&x->modifiers); AST_walk_list(s, d, (node *)&x->decls); break; } case kind_extension_decl: { extension_decl x = CAST(extension_decl, n); AST_walk_list(s, d, (node *)&x->decl); break; } case kind_enumerator: { enumerator x = CAST(enumerator, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_function_decl: { function_decl x = CAST(function_decl, n); AST_walk_list(s, d, (node *)&x->declarator); AST_walk_list(s, d, (node *)&x->modifiers); AST_walk_list(s, d, (node *)&x->attributes); AST_walk_list(s, d, (node *)&x->stmt); break; } case kind_variable_decl: { variable_decl x = CAST(variable_decl, n); AST_walk_list(s, d, (node *)&x->declarator); AST_walk_list(s, d, (node *)&x->attributes); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->asm_stmt); break; } case kind_field_decl: { field_decl x = CAST(field_decl, n); AST_walk_list(s, d, (node *)&x->declarator); AST_walk_list(s, d, (node *)&x->attributes); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_asttype: { asttype x = CAST(asttype, n); AST_walk_list(s, d, (node *)&x->declarator); AST_walk_list(s, d, (node *)&x->qualifiers); break; } case kind_typeof_expr: { typeof_expr x = CAST(typeof_expr, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_typeof_type: { typeof_type x = CAST(typeof_type, n); AST_walk_list(s, d, (node *)&x->asttype); break; } case kind_attribute: { attribute x = CAST(attribute, n); AST_walk_list(s, d, (node *)&x->word1); break; } case kind_gcc_attribute: { gcc_attribute x = CAST(gcc_attribute, n); AST_walk_list(s, d, (node *)&x->word1); AST_walk_list(s, d, (node *)&x->args); break; } case kind_tag_ref: { tag_ref x = CAST(tag_ref, n); AST_walk_list(s, d, (node *)&x->word1); AST_walk_list(s, d, (node *)&x->attributes); AST_walk_list(s, d, (node *)&x->fields); break; } case kind_struct_ref: { struct_ref x = CAST(struct_ref, n); AST_walk_list(s, d, (node *)&x->word1); AST_walk_list(s, d, (node *)&x->attributes); AST_walk_list(s, d, (node *)&x->fields); break; } case kind_union_ref: { union_ref x = CAST(union_ref, n); AST_walk_list(s, d, (node *)&x->word1); AST_walk_list(s, d, (node *)&x->attributes); AST_walk_list(s, d, (node *)&x->fields); break; } case kind_nested_declarator: { nested_declarator x = CAST(nested_declarator, n); AST_walk_list(s, d, (node *)&x->declarator); break; } case kind_function_declarator: { function_declarator x = CAST(function_declarator, n); AST_walk_list(s, d, (node *)&x->declarator); AST_walk_list(s, d, (node *)&x->parms); AST_walk_list(s, d, (node *)&x->gparms); AST_walk_list(s, d, (node *)&x->qualifiers); AST_walk_list(s, d, (node *)&x->return_type); break; } case kind_pointer_declarator: { pointer_declarator x = CAST(pointer_declarator, n); AST_walk_list(s, d, (node *)&x->declarator); break; } case kind_qualified_declarator: { qualified_declarator x = CAST(qualified_declarator, n); AST_walk_list(s, d, (node *)&x->declarator); AST_walk_list(s, d, (node *)&x->modifiers); break; } case kind_array_declarator: { array_declarator x = CAST(array_declarator, n); AST_walk_list(s, d, (node *)&x->declarator); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_asm_stmt: { asm_stmt x = CAST(asm_stmt, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->asm_operands1); AST_walk_list(s, d, (node *)&x->asm_operands2); AST_walk_list(s, d, (node *)&x->asm_clobbers); AST_walk_list(s, d, (node *)&x->qualifiers); break; } case kind_compound_stmt: { compound_stmt x = CAST(compound_stmt, n); AST_walk_list(s, d, (node *)&x->id_labels); AST_walk_list(s, d, (node *)&x->decls); AST_walk_list(s, d, (node *)&x->stmts); break; } case kind_if_stmt: { if_stmt x = CAST(if_stmt, n); AST_walk_list(s, d, (node *)&x->condition); AST_walk_list(s, d, (node *)&x->stmt1); AST_walk_list(s, d, (node *)&x->stmt2); break; } case kind_labeled_stmt: { labeled_stmt x = CAST(labeled_stmt, n); AST_walk_list(s, d, (node *)&x->label); AST_walk_list(s, d, (node *)&x->stmt); break; } case kind_expression_stmt: { expression_stmt x = CAST(expression_stmt, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_conditional_stmt: { conditional_stmt x = CAST(conditional_stmt, n); AST_walk_list(s, d, (node *)&x->condition); AST_walk_list(s, d, (node *)&x->stmt); break; } case kind_switch_stmt: { switch_stmt x = CAST(switch_stmt, n); AST_walk_list(s, d, (node *)&x->condition); AST_walk_list(s, d, (node *)&x->stmt); break; } case kind_for_stmt: { for_stmt x = CAST(for_stmt, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); AST_walk_list(s, d, (node *)&x->arg3); AST_walk_list(s, d, (node *)&x->stmt); break; } case kind_return_stmt: { return_stmt x = CAST(return_stmt, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_goto_stmt: { goto_stmt x = CAST(goto_stmt, n); AST_walk_list(s, d, (node *)&x->id_label); break; } case kind_computed_goto_stmt: { computed_goto_stmt x = CAST(computed_goto_stmt, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_unary: { unary x = CAST(unary, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_binary: { binary x = CAST(binary, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_comma: { comma x = CAST(comma, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_sizeof_type: { sizeof_type x = CAST(sizeof_type, n); AST_walk_list(s, d, (node *)&x->asttype); break; } case kind_alignof_type: { alignof_type x = CAST(alignof_type, n); AST_walk_list(s, d, (node *)&x->asttype); break; } case kind_label_address: { label_address x = CAST(label_address, n); AST_walk_list(s, d, (node *)&x->id_label); break; } case kind_cast: { cast x = CAST(cast, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->asttype); break; } case kind_cast_list: { cast_list x = CAST(cast_list, n); AST_walk_list(s, d, (node *)&x->asttype); AST_walk_list(s, d, (node *)&x->init_expr); break; } case kind_conditional: { conditional x = CAST(conditional, n); AST_walk_list(s, d, (node *)&x->condition); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_compound_expr: { compound_expr x = CAST(compound_expr, n); AST_walk_list(s, d, (node *)&x->stmt); break; } case kind_function_call: { function_call x = CAST(function_call, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->args); break; } case kind_field_ref: { field_ref x = CAST(field_ref, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_increment: { increment x = CAST(increment, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_comparison: { comparison x = CAST(comparison, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_assignment: { assignment x = CAST(assignment, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_init_list: { init_list x = CAST(init_list, n); AST_walk_list(s, d, (node *)&x->args); break; } case kind_init_specific: { init_specific x = CAST(init_specific, n); AST_walk_list(s, d, (node *)&x->designator); AST_walk_list(s, d, (node *)&x->init_expr); break; } case kind_designate_index: { designate_index x = CAST(designate_index, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_string: { string x = CAST(string, n); AST_walk_list(s, d, (node *)&x->strings); break; } case kind_case_label: { case_label x = CAST(case_label, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_asm_operand: { asm_operand x = CAST(asm_operand, n); AST_walk_list(s, d, (node *)&x->word1); AST_walk_list(s, d, (node *)&x->string); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_nesc_decl: { nesc_decl x = CAST(nesc_decl, n); AST_walk_list(s, d, (node *)&x->word1); AST_walk_list(s, d, (node *)&x->attributes); break; } case kind_interface: { interface x = CAST(interface, n); AST_walk_list(s, d, (node *)&x->word1); AST_walk_list(s, d, (node *)&x->attributes); AST_walk_list(s, d, (node *)&x->decls); break; } case kind_component: { component x = CAST(component, n); AST_walk_list(s, d, (node *)&x->word1); AST_walk_list(s, d, (node *)&x->attributes); AST_walk_list(s, d, (node *)&x->parms); AST_walk_list(s, d, (node *)&x->decls); AST_walk_list(s, d, (node *)&x->implementation); break; } case kind_configuration: { configuration x = CAST(configuration, n); AST_walk_list(s, d, (node *)&x->decls); break; } case kind_module: { module x = CAST(module, n); AST_walk_list(s, d, (node *)&x->decls); break; } case kind_rp_interface: { rp_interface x = CAST(rp_interface, n); AST_walk_list(s, d, (node *)&x->decls); break; } case kind_interface_ref: { interface_ref x = CAST(interface_ref, n); AST_walk_list(s, d, (node *)&x->word1); AST_walk_list(s, d, (node *)&x->args); AST_walk_list(s, d, (node *)&x->word2); AST_walk_list(s, d, (node *)&x->gparms); AST_walk_list(s, d, (node *)&x->attributes); break; } case kind_component_ref: { component_ref x = CAST(component_ref, n); AST_walk_list(s, d, (node *)&x->word1); AST_walk_list(s, d, (node *)&x->word2); AST_walk_list(s, d, (node *)&x->args); break; } case kind_connection: { connection x = CAST(connection, n); AST_walk_list(s, d, (node *)&x->ep1); AST_walk_list(s, d, (node *)&x->ep2); break; } case kind_endpoint: { endpoint x = CAST(endpoint, n); AST_walk_list(s, d, (node *)&x->ids); break; } case kind_parameterised_identifier: { parameterised_identifier x = CAST(parameterised_identifier, n); AST_walk_list(s, d, (node *)&x->word1); AST_walk_list(s, d, (node *)&x->args); break; } case kind_generic_declarator: { generic_declarator x = CAST(generic_declarator, n); AST_walk_list(s, d, (node *)&x->declarator); AST_walk_list(s, d, (node *)&x->parms); break; } case kind_generic_call: { generic_call x = CAST(generic_call, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->args); break; } case kind_interface_ref_declarator: { interface_ref_declarator x = CAST(interface_ref_declarator, n); AST_walk_list(s, d, (node *)&x->declarator); AST_walk_list(s, d, (node *)&x->word1); break; } case kind_interface_deref: { interface_deref x = CAST(interface_deref, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_component_deref: { component_deref x = CAST(component_deref, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_atomic_stmt: { atomic_stmt x = CAST(atomic_stmt, n); AST_walk_list(s, d, (node *)&x->stmt); break; } case kind_nesc_attribute: { nesc_attribute x = CAST(nesc_attribute, n); AST_walk_list(s, d, (node *)&x->word1); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_type_argument: { type_argument x = CAST(type_argument, n); AST_walk_list(s, d, (node *)&x->asttype); break; } case kind_attribute_ref: { attribute_ref x = CAST(attribute_ref, n); AST_walk_list(s, d, (node *)&x->word1); AST_walk_list(s, d, (node *)&x->attributes); AST_walk_list(s, d, (node *)&x->fields); break; } case kind_enum_ref: { enum_ref x = CAST(enum_ref, n); AST_walk_list(s, d, (node *)&x->word1); AST_walk_list(s, d, (node *)&x->attributes); AST_walk_list(s, d, (node *)&x->fields); break; } case kind_while_stmt: { while_stmt x = CAST(while_stmt, n); AST_walk_list(s, d, (node *)&x->condition); AST_walk_list(s, d, (node *)&x->stmt); break; } case kind_dowhile_stmt: { dowhile_stmt x = CAST(dowhile_stmt, n); AST_walk_list(s, d, (node *)&x->condition); AST_walk_list(s, d, (node *)&x->stmt); break; } case kind_array_ref: { array_ref x = CAST(array_ref, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_dereference: { dereference x = CAST(dereference, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_extension_expr: { extension_expr x = CAST(extension_expr, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_sizeof_expr: { sizeof_expr x = CAST(sizeof_expr, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_alignof_expr: { alignof_expr x = CAST(alignof_expr, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_realpart: { realpart x = CAST(realpart, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_imagpart: { imagpart x = CAST(imagpart, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_address_of: { address_of x = CAST(address_of, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_unary_minus: { unary_minus x = CAST(unary_minus, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_unary_plus: { unary_plus x = CAST(unary_plus, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_conjugate: { conjugate x = CAST(conjugate, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_bitnot: { bitnot x = CAST(bitnot, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_not: { not x = CAST(not, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_preincrement: { preincrement x = CAST(preincrement, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_predecrement: { predecrement x = CAST(predecrement, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_postincrement: { postincrement x = CAST(postincrement, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_postdecrement: { postdecrement x = CAST(postdecrement, n); AST_walk_list(s, d, (node *)&x->arg1); break; } case kind_plus: { plus x = CAST(plus, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_minus: { minus x = CAST(minus, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_times: { times x = CAST(times, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_divide: { divide x = CAST(divide, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_modulo: { modulo x = CAST(modulo, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_lshift: { lshift x = CAST(lshift, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_rshift: { rshift x = CAST(rshift, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_leq: { leq x = CAST(leq, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_geq: { geq x = CAST(geq, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_lt: { lt x = CAST(lt, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_gt: { gt x = CAST(gt, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_eq: { eq x = CAST(eq, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_ne: { ne x = CAST(ne, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_bitand: { bitand x = CAST(bitand, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_bitor: { bitor x = CAST(bitor, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_bitxor: { bitxor x = CAST(bitxor, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_andand: { andand x = CAST(andand, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_oror: { oror x = CAST(oror, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_assign: { assign x = CAST(assign, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_plus_assign: { plus_assign x = CAST(plus_assign, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_minus_assign: { minus_assign x = CAST(minus_assign, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_times_assign: { times_assign x = CAST(times_assign, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_divide_assign: { divide_assign x = CAST(divide_assign, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_modulo_assign: { modulo_assign x = CAST(modulo_assign, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_lshift_assign: { lshift_assign x = CAST(lshift_assign, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_rshift_assign: { rshift_assign x = CAST(rshift_assign, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_bitand_assign: { bitand_assign x = CAST(bitand_assign, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_bitor_assign: { bitor_assign x = CAST(bitor_assign, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_bitxor_assign: { bitxor_assign x = CAST(bitxor_assign, n); AST_walk_list(s, d, (node *)&x->arg1); AST_walk_list(s, d, (node *)&x->arg2); break; } case kind_rp_connection: { rp_connection x = CAST(rp_connection, n); AST_walk_list(s, d, (node *)&x->ep1); AST_walk_list(s, d, (node *)&x->ep2); break; } case kind_eq_connection: { eq_connection x = CAST(eq_connection, n); AST_walk_list(s, d, (node *)&x->ep1); AST_walk_list(s, d, (node *)&x->ep2); break; } case kind_nx_struct_ref: { nx_struct_ref x = CAST(nx_struct_ref, n); AST_walk_list(s, d, (node *)&x->word1); AST_walk_list(s, d, (node *)&x->attributes); AST_walk_list(s, d, (node *)&x->fields); break; } case kind_nx_union_ref: { nx_union_ref x = CAST(nx_union_ref, n); AST_walk_list(s, d, (node *)&x->word1); AST_walk_list(s, d, (node *)&x->attributes); AST_walk_list(s, d, (node *)&x->fields); break; } case kind_target_attribute: { target_attribute x = CAST(target_attribute, n); AST_walk_list(s, d, (node *)&x->word1); AST_walk_list(s, d, (node *)&x->args); break; } nescc-1.3.4/src/COPYING000066400000000000000000000431271177770303300144530ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program 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 of the License, or (at your option) any later version. This program 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 this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. nescc-1.3.4/src/COPYRIGHT000066400000000000000000000015411177770303300147050ustar00rootroot00000000000000The nesC compiler is derived from RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. nescc-1.3.4/src/Makefile.am000066400000000000000000000167511177770303300154570ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in -*- makefile -*- # This file is part of the nesC compiler. # # This file is derived from the RC Compiler. It is thus # Copyright (C) 2000-2001 The Regents of the University of California. # Changes for nesC are # Copyright (C) 2002 Intel Corporation # # The attached "nesC" software is provided to you under the terms and # conditions of the GNU General Public License Version 2 as published by the # Free Software Foundation. # # nesC 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 nesC; see the file COPYING. If not, write to # the Free Software Foundation, 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. AUTOMAKE_OPTIONS = foreign if USING_RCC regiondir = lib else SUBDIRS = libcompat regiondir = libcompat endif extra_inc := if NEED_REGEX extra_inc += -Ilibcompat/regex endif if NEED_FNMATCH extra_inc += -Ilibcompat/fnmatch endif ncclibdir=$(libdir)/ncc INCLUDES = $(regionflags) -I$(srcdir)/$(regiondir) -I$(srcdir)/../libcpp/include -I$(srcdir)/../libcpp -I$(srcdir)/../include $(extra_inc) noinst_LIBRARIES = libparser.a ncclib_PROGRAMS = nesc1 ncclib_DATA = tdspecs ncclib_SCRIPTS = nesc-compile libregions = $(regiondir)/libregions.a libparser_a_SOURCES = \ AST.c \ AST.h \ AST_list_node.h \ AST_types.h \ AST_utils.c \ AST_utils.h \ AST_walk.c \ AST_walk.h \ ND_list_nd_arg.h \ ND_types.h \ array.h \ array.c \ attributes.h \ attributes.c \ c-gperf.h \ c-lex.c \ c-lex.h \ c-lex-int.h \ c-lex-state.h \ c-parse.h \ c-parse.tab.h \ c-parse.tab.c \ constants.c \ constants.h \ cstring.h \ cval.h \ cval.c \ decls.h \ dd_list.c \ dd_list.h \ dhash.c \ dhash.h \ edit.c \ edit.h \ env.c \ env.h \ errors.c \ errors.h \ expr.c \ expr.h \ flags.c \ flags.h \ gcc-cpp.h \ graph.c \ graph.h \ init.c \ init.h \ lex.nd.c \ machine.c \ machine.h \ nconfig.h \ nesc-abstract.c \ nesc-abstract.h \ nesc-atomic.c \ nesc-atomic.h \ nesc-attributes.c \ nesc-attributes.h \ nesc-c.c \ nesc-c.h \ nesc-cg.c \ nesc-cg.h \ nesc-component.c \ nesc-component.h \ nesc-concurrency.c \ nesc-concurrency.h \ nesc-configuration.c \ nesc-configuration.h \ nesc-constants.c \ nesc-constants.h \ nesc-cpp.c \ nesc-cpp.h \ nesc-decls.h \ nesc-deputy.c \ nesc-deputy.h \ nesc-dfilter.c \ nesc-dfilter.h \ nesc-doc.c \ nesc-doc.h \ nesc-dspec.h \ nesc-dspec-int.h \ nesc-dspec.tab.c \ nesc-dspec.tab.h \ nesc-dump.c \ nesc-dump.h \ nesc-env.c \ nesc-env.h \ nesc-gcc.c \ nesc-gcc.h \ nesc-generate.c \ nesc-generate.h \ nesc-inline.c \ nesc-inline.h \ nesc-interface.c \ nesc-interface.h \ nesc-keywords.h \ nesc-magic.c \ nesc-magic.h \ nesc-main.c \ nesc-main.h \ nesc-module.c \ nesc-module.h \ nesc-msg.c \ nesc-msg.h \ nesc-ndoc.c \ nesc-ndoc.h \ nesc-network.c \ nesc-network.h \ nesc-paths.c \ nesc-paths.h \ nesc-semantics.c \ nesc-semantics.h \ nesc-task.c \ nesc-task.h \ nesc-uses.c \ nesc-uses.h \ nesc-xml.c \ nesc-xml.h \ parser.h \ qualifiers.h \ sd_list.c \ sd_list.h \ semantics.c \ semantics.h \ stmt.c \ stmt.h \ types.c \ types.h \ unparse.c \ unparse.h \ utils.c \ utils.h \ machine/keil-gperf.h \ machine/sdcc-gperf.h # Character encoding conversion library. LIBICONV = @LIBICONV@ LIBICONV_DEP = @LIBICONV_DEP@ nesc1_SOURCES = toplev.c nesc1_LDADD = libparser.a \ $(libregions) \ ../libcpp/libcpp.a \ ../libiberty/libiberty.a \ -lm \ $(LIBICONV) BUILT_SOURCES = \ AST_defs.h \ AST_list_node.c \ AST_list_node.h \ AST_parent.c \ AST_print.c \ AST_types.c \ AST_types.h \ AST_walk_children.c \ ND_defs.h \ ND_list_nd_arg.c \ ND_list_nd_arg.h \ ND_types.c \ ND_types.h \ c-gperf.h \ c-parse.tab.c \ c-parse.tab.h \ lex.nd.c \ nesc-dspec.tab.c \ nesc-dspec.tab.h \ machine/keil-gperf.h \ machine/sdcc-gperf.h EXTRA_DIST = \ build-basics.el \ build-list.el \ build-parent.el \ build-print.el \ build-types.el \ build-walk.el \ c-parse.gperf \ c-parse.y \ cg_help.c \ cg_help.fig \ nodetypes.def \ AST_defs.h \ AST_list_node.c \ AST_parent.c \ AST_print.c \ AST_types.c \ AST_walk_children.c \ ND_defs.h \ ND_list_nd_arg.c \ ND_types.c \ machine/self.c \ machine/avr.c \ machine/env_machine.c \ machine/msp430.c \ machine/keil.c \ machine/keil.gperf \ machine/sdcc.c \ machine/sdcc.gperf \ nesc-dspec.def \ nesc-dspec.l \ nesc-dspec.y \ tdspecs \ nesc-compile \ COPYING \ COPYRIGHT \ .gdbinit BISON = bison FLEX = flex EMACS = emacs M4 = m4 GPERF = gperf $(srcdir)/c-parse.tab.c $(srcdir)/c-parse.tab.h: c-parse.y $(BISON) $(BISONFLAGS) -dv $< $(srcdir)/nesc-dspec.tab.c $(srcdir)/nesc-dspec.tab.h: nesc-dspec.y $(BISON) $(BISONFLAGS) -p nd -dv $< $(srcdir)/lex.nd.c: nesc-dspec.l $(FLEX) -Pnd -s $< $(srcdir)/ND_types.c $(srcdir)/ND_types.h $(srcdir)/ND_defs.h: build-types.el nesc-dspec.def build-basics.el cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-types.el ND nesc-dspec.def 10000 $(srcdir)/ND_list_nd_arg.c $(srcdir)/ND_list_nd_arg.h: build-list.el nesc-dspec.def build-basics.el cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-list.el ND nesc-dspec.def nd_arg $(srcdir)/AST_types.c $(srcdir)/AST_types.h $(srcdir)/AST_defs.h: build-types.el nodetypes.def build-basics.el cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-types.el AST nodetypes.def 42 $(srcdir)/AST_list_node.c $(srcdir)/AST_list_node.h: build-list.el nodetypes.def build-basics.el cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-list.el AST nodetypes.def node $(srcdir)/AST_parent.c: build-parent.el nodetypes.def build-basics.el cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-parent.el AST nodetypes.def $(srcdir)/AST_print.c: build-print.el nodetypes.def build-basics.el cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-print.el AST nodetypes.def $(srcdir)/AST_walk_children.c: build-walk.el nodetypes.def build-basics.el cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-walk.el AST nodetypes.def $(srcdir)/c-gperf.h: c-parse.gperf qualifiers.h nesc-keywords.h cd $(srcdir) && $(M4) $(M4FLAGS) c-parse.gperf | grep -v '^$$' | \ $(GPERF) $(GPERFFLAGS) -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,8,$$ >$@- mv $@- $@ $(srcdir)/machine/sdcc-gperf.h: machine/sdcc.gperf $(GPERF) $(GPERFFLAGS) -j1 -t -E -H sdcc_hash -N is_sdcc_word -k1,3 machine/sdcc.gperf >$@- mv $@- $@ $(srcdir)/machine/keil-gperf.h: machine/keil.gperf $(GPERF) $(GPERFFLAGS) -j1 -t -E -H keil_hash -N is_keil_word -k1,3,$$ machine/keil.gperf >$@- mv $@- $@ # Regression testing stuff testdoc: nesc-ndoc.c nesc-ndoc.h dd_list.c $(libregions) $(COMPILE) -o $@ -DTESTING nesc-ndoc.c dd_list.c $(libregions) regress: nesc1 testdoc (cd ../nregress && ./runtest) nescc-1.3.4/src/Makefile.in000066400000000000000000001244531177770303300154670ustar00rootroot00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This file is part of the nesC compiler. # # This file is derived from the RC Compiler. It is thus # Copyright (C) 2000-2001 The Regents of the University of California. # Changes for nesC are # Copyright (C) 2002 Intel Corporation # # The attached "nesC" software is provided to you under the terms and # conditions of the GNU General Public License Version 2 as published by the # Free Software Foundation. # # nesC 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 nesC; see the file COPYING. If not, write to # the Free Software Foundation, 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @NEED_REGEX_TRUE@am__append_1 = -Ilibcompat/regex @NEED_FNMATCH_TRUE@am__append_2 = -Ilibcompat/fnmatch ncclib_PROGRAMS = nesc1$(EXEEXT) subdir = . DIST_COMMON = $(am__configure_deps) \ $(srcdir)/../config-aux/config.guess \ $(srcdir)/../config-aux/config.sub \ $(srcdir)/../config-aux/depcomp \ $(srcdir)/../config-aux/install-sh \ $(srcdir)/../config-aux/missing \ $(srcdir)/../config-aux/mkinstalldirs $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/autoconf.h.in \ $(top_srcdir)/configure ../config-aux/config.guess \ ../config-aux/config.rpath ../config-aux/config.sub \ ../config-aux/depcomp ../config-aux/install-sh \ ../config-aux/missing ../config-aux/mkinstalldirs COPYING ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config-aux/depstand.m4 \ $(top_srcdir)/../config-aux/iconv.m4 \ $(top_srcdir)/../config-aux/lead-dot.m4 \ $(top_srcdir)/../config-aux/lib-ld.m4 \ $(top_srcdir)/../config-aux/lib-link.m4 \ $(top_srcdir)/../config-aux/lib-prefix.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/../config-aux/mkinstalldirs CONFIG_HEADER = autoconf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libparser_a_AR = $(AR) $(ARFLAGS) libparser_a_LIBADD = am_libparser_a_OBJECTS = AST.$(OBJEXT) AST_utils.$(OBJEXT) \ AST_walk.$(OBJEXT) array.$(OBJEXT) attributes.$(OBJEXT) \ c-lex.$(OBJEXT) c-parse.tab.$(OBJEXT) constants.$(OBJEXT) \ cval.$(OBJEXT) dd_list.$(OBJEXT) dhash.$(OBJEXT) \ edit.$(OBJEXT) env.$(OBJEXT) errors.$(OBJEXT) expr.$(OBJEXT) \ flags.$(OBJEXT) graph.$(OBJEXT) init.$(OBJEXT) \ lex.nd.$(OBJEXT) machine.$(OBJEXT) nesc-abstract.$(OBJEXT) \ nesc-atomic.$(OBJEXT) nesc-attributes.$(OBJEXT) \ nesc-c.$(OBJEXT) nesc-cg.$(OBJEXT) nesc-component.$(OBJEXT) \ nesc-concurrency.$(OBJEXT) nesc-configuration.$(OBJEXT) \ nesc-constants.$(OBJEXT) nesc-cpp.$(OBJEXT) \ nesc-deputy.$(OBJEXT) nesc-dfilter.$(OBJEXT) \ nesc-doc.$(OBJEXT) nesc-dspec.tab.$(OBJEXT) \ nesc-dump.$(OBJEXT) nesc-env.$(OBJEXT) nesc-gcc.$(OBJEXT) \ nesc-generate.$(OBJEXT) nesc-inline.$(OBJEXT) \ nesc-interface.$(OBJEXT) nesc-magic.$(OBJEXT) \ nesc-main.$(OBJEXT) nesc-module.$(OBJEXT) nesc-msg.$(OBJEXT) \ nesc-ndoc.$(OBJEXT) nesc-network.$(OBJEXT) \ nesc-paths.$(OBJEXT) nesc-semantics.$(OBJEXT) \ nesc-task.$(OBJEXT) nesc-uses.$(OBJEXT) nesc-xml.$(OBJEXT) \ sd_list.$(OBJEXT) semantics.$(OBJEXT) stmt.$(OBJEXT) \ types.$(OBJEXT) unparse.$(OBJEXT) utils.$(OBJEXT) libparser_a_OBJECTS = $(am_libparser_a_OBJECTS) am__installdirs = "$(DESTDIR)$(ncclibdir)" "$(DESTDIR)$(ncclibdir)" \ "$(DESTDIR)$(ncclibdir)" PROGRAMS = $(ncclib_PROGRAMS) am_nesc1_OBJECTS = toplev.$(OBJEXT) nesc1_OBJECTS = $(am_nesc1_OBJECTS) am__DEPENDENCIES_1 = nesc1_DEPENDENCIES = libparser.a $(libregions) ../libcpp/libcpp.a \ ../libiberty/libiberty.a $(am__DEPENDENCIES_1) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' SCRIPTS = $(ncclib_SCRIPTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/../config-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libparser_a_SOURCES) $(nesc1_SOURCES) DIST_SOURCES = $(libparser_a_SOURCES) $(nesc1_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive DATA = $(ncclib_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = libcompat DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(distdir)"; }; } am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ # Character encoding conversion library. LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign @USING_RCC_FALSE@regiondir = libcompat @USING_RCC_TRUE@regiondir = lib @USING_RCC_FALSE@SUBDIRS = libcompat extra_inc := $(am__append_1) $(am__append_2) ncclibdir = $(libdir)/ncc INCLUDES = $(regionflags) -I$(srcdir)/$(regiondir) -I$(srcdir)/../libcpp/include -I$(srcdir)/../libcpp -I$(srcdir)/../include $(extra_inc) noinst_LIBRARIES = libparser.a ncclib_DATA = tdspecs ncclib_SCRIPTS = nesc-compile libregions = $(regiondir)/libregions.a libparser_a_SOURCES = \ AST.c \ AST.h \ AST_list_node.h \ AST_types.h \ AST_utils.c \ AST_utils.h \ AST_walk.c \ AST_walk.h \ ND_list_nd_arg.h \ ND_types.h \ array.h \ array.c \ attributes.h \ attributes.c \ c-gperf.h \ c-lex.c \ c-lex.h \ c-lex-int.h \ c-lex-state.h \ c-parse.h \ c-parse.tab.h \ c-parse.tab.c \ constants.c \ constants.h \ cstring.h \ cval.h \ cval.c \ decls.h \ dd_list.c \ dd_list.h \ dhash.c \ dhash.h \ edit.c \ edit.h \ env.c \ env.h \ errors.c \ errors.h \ expr.c \ expr.h \ flags.c \ flags.h \ gcc-cpp.h \ graph.c \ graph.h \ init.c \ init.h \ lex.nd.c \ machine.c \ machine.h \ nconfig.h \ nesc-abstract.c \ nesc-abstract.h \ nesc-atomic.c \ nesc-atomic.h \ nesc-attributes.c \ nesc-attributes.h \ nesc-c.c \ nesc-c.h \ nesc-cg.c \ nesc-cg.h \ nesc-component.c \ nesc-component.h \ nesc-concurrency.c \ nesc-concurrency.h \ nesc-configuration.c \ nesc-configuration.h \ nesc-constants.c \ nesc-constants.h \ nesc-cpp.c \ nesc-cpp.h \ nesc-decls.h \ nesc-deputy.c \ nesc-deputy.h \ nesc-dfilter.c \ nesc-dfilter.h \ nesc-doc.c \ nesc-doc.h \ nesc-dspec.h \ nesc-dspec-int.h \ nesc-dspec.tab.c \ nesc-dspec.tab.h \ nesc-dump.c \ nesc-dump.h \ nesc-env.c \ nesc-env.h \ nesc-gcc.c \ nesc-gcc.h \ nesc-generate.c \ nesc-generate.h \ nesc-inline.c \ nesc-inline.h \ nesc-interface.c \ nesc-interface.h \ nesc-keywords.h \ nesc-magic.c \ nesc-magic.h \ nesc-main.c \ nesc-main.h \ nesc-module.c \ nesc-module.h \ nesc-msg.c \ nesc-msg.h \ nesc-ndoc.c \ nesc-ndoc.h \ nesc-network.c \ nesc-network.h \ nesc-paths.c \ nesc-paths.h \ nesc-semantics.c \ nesc-semantics.h \ nesc-task.c \ nesc-task.h \ nesc-uses.c \ nesc-uses.h \ nesc-xml.c \ nesc-xml.h \ parser.h \ qualifiers.h \ sd_list.c \ sd_list.h \ semantics.c \ semantics.h \ stmt.c \ stmt.h \ types.c \ types.h \ unparse.c \ unparse.h \ utils.c \ utils.h \ machine/keil-gperf.h \ machine/sdcc-gperf.h LIBICONV_DEP = @LIBICONV_DEP@ nesc1_SOURCES = toplev.c nesc1_LDADD = libparser.a \ $(libregions) \ ../libcpp/libcpp.a \ ../libiberty/libiberty.a \ -lm \ $(LIBICONV) BUILT_SOURCES = \ AST_defs.h \ AST_list_node.c \ AST_list_node.h \ AST_parent.c \ AST_print.c \ AST_types.c \ AST_types.h \ AST_walk_children.c \ ND_defs.h \ ND_list_nd_arg.c \ ND_list_nd_arg.h \ ND_types.c \ ND_types.h \ c-gperf.h \ c-parse.tab.c \ c-parse.tab.h \ lex.nd.c \ nesc-dspec.tab.c \ nesc-dspec.tab.h \ machine/keil-gperf.h \ machine/sdcc-gperf.h EXTRA_DIST = \ build-basics.el \ build-list.el \ build-parent.el \ build-print.el \ build-types.el \ build-walk.el \ c-parse.gperf \ c-parse.y \ cg_help.c \ cg_help.fig \ nodetypes.def \ AST_defs.h \ AST_list_node.c \ AST_parent.c \ AST_print.c \ AST_types.c \ AST_walk_children.c \ ND_defs.h \ ND_list_nd_arg.c \ ND_types.c \ machine/self.c \ machine/avr.c \ machine/env_machine.c \ machine/msp430.c \ machine/keil.c \ machine/keil.gperf \ machine/sdcc.c \ machine/sdcc.gperf \ nesc-dspec.def \ nesc-dspec.l \ nesc-dspec.y \ tdspecs \ nesc-compile \ COPYING \ COPYRIGHT \ .gdbinit BISON = bison FLEX = flex EMACS = emacs M4 = m4 GPERF = gperf all: $(BUILT_SOURCES) autoconf.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .o .obj am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): autoconf.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/autoconf.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status autoconf.h $(srcdir)/autoconf.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f autoconf.h stamp-h1 clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libparser.a: $(libparser_a_OBJECTS) $(libparser_a_DEPENDENCIES) -rm -f libparser.a $(libparser_a_AR) libparser.a $(libparser_a_OBJECTS) $(libparser_a_LIBADD) $(RANLIB) libparser.a install-ncclibPROGRAMS: $(ncclib_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(ncclibdir)" || $(MKDIR_P) "$(DESTDIR)$(ncclibdir)" @list='$(ncclib_PROGRAMS)'; test -n "$(ncclibdir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(ncclibdir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(ncclibdir)$$dir" || exit $$?; \ } \ ; done uninstall-ncclibPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(ncclib_PROGRAMS)'; test -n "$(ncclibdir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(ncclibdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(ncclibdir)" && rm -f $$files clean-ncclibPROGRAMS: -test -z "$(ncclib_PROGRAMS)" || rm -f $(ncclib_PROGRAMS) nesc1$(EXEEXT): $(nesc1_OBJECTS) $(nesc1_DEPENDENCIES) @rm -f nesc1$(EXEEXT) $(LINK) $(nesc1_OBJECTS) $(nesc1_LDADD) $(LIBS) install-ncclibSCRIPTS: $(ncclib_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(ncclibdir)" || $(MKDIR_P) "$(DESTDIR)$(ncclibdir)" @list='$(ncclib_SCRIPTS)'; test -n "$(ncclibdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(ncclibdir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(ncclibdir)$$dir" || exit $$?; \ } \ ; done uninstall-ncclibSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(ncclib_SCRIPTS)'; test -n "$(ncclibdir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(ncclibdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(ncclibdir)" && rm -f $$files mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AST.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AST_utils.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AST_walk.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/array.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/attributes.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-lex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-parse.tab.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/constants.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cval.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dd_list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dhash.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/env.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errors.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flags.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/graph.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lex.nd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/machine.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-abstract.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-atomic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-attributes.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-c.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-cg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-component.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-concurrency.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-configuration.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-constants.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-cpp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-deputy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-dfilter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-doc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-dspec.tab.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-dump.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-env.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-gcc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-generate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-inline.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-interface.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-magic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-module.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-msg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-ndoc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-network.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-paths.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-semantics.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-task.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-uses.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nesc-xml.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sd_list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/semantics.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stmt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/toplev.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/types.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unparse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` install-ncclibDATA: $(ncclib_DATA) @$(NORMAL_INSTALL) test -z "$(ncclibdir)" || $(MKDIR_P) "$(DESTDIR)$(ncclibdir)" @list='$(ncclib_DATA)'; test -n "$(ncclibdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(ncclibdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(ncclibdir)" || exit $$?; \ done uninstall-ncclibDATA: @$(NORMAL_UNINSTALL) @list='$(ncclib_DATA)'; test -n "$(ncclibdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(ncclibdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(ncclibdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) autoconf.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) autoconf.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) autoconf.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) autoconf.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(SCRIPTS) $(DATA) \ autoconf.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(ncclibdir)" "$(DESTDIR)$(ncclibdir)" "$(DESTDIR)$(ncclibdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-generic clean-ncclibPROGRAMS clean-noinstLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-ncclibDATA install-ncclibPROGRAMS \ install-ncclibSCRIPTS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-ncclibDATA uninstall-ncclibPROGRAMS \ uninstall-ncclibSCRIPTS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ ctags-recursive install install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ clean-ncclibPROGRAMS clean-noinstLIBRARIES ctags \ ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-lzma \ dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-compile distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-ncclibDATA \ install-ncclibPROGRAMS install-ncclibSCRIPTS install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-ncclibDATA uninstall-ncclibPROGRAMS \ uninstall-ncclibSCRIPTS $(srcdir)/c-parse.tab.c $(srcdir)/c-parse.tab.h: c-parse.y $(BISON) $(BISONFLAGS) -dv $< $(srcdir)/nesc-dspec.tab.c $(srcdir)/nesc-dspec.tab.h: nesc-dspec.y $(BISON) $(BISONFLAGS) -p nd -dv $< $(srcdir)/lex.nd.c: nesc-dspec.l $(FLEX) -Pnd -s $< $(srcdir)/ND_types.c $(srcdir)/ND_types.h $(srcdir)/ND_defs.h: build-types.el nesc-dspec.def build-basics.el cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-types.el ND nesc-dspec.def 10000 $(srcdir)/ND_list_nd_arg.c $(srcdir)/ND_list_nd_arg.h: build-list.el nesc-dspec.def build-basics.el cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-list.el ND nesc-dspec.def nd_arg $(srcdir)/AST_types.c $(srcdir)/AST_types.h $(srcdir)/AST_defs.h: build-types.el nodetypes.def build-basics.el cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-types.el AST nodetypes.def 42 $(srcdir)/AST_list_node.c $(srcdir)/AST_list_node.h: build-list.el nodetypes.def build-basics.el cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-list.el AST nodetypes.def node $(srcdir)/AST_parent.c: build-parent.el nodetypes.def build-basics.el cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-parent.el AST nodetypes.def $(srcdir)/AST_print.c: build-print.el nodetypes.def build-basics.el cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-print.el AST nodetypes.def $(srcdir)/AST_walk_children.c: build-walk.el nodetypes.def build-basics.el cd $(srcdir) && $(EMACS) $(EMACSFLAGS) -batch -load build-walk.el AST nodetypes.def $(srcdir)/c-gperf.h: c-parse.gperf qualifiers.h nesc-keywords.h cd $(srcdir) && $(M4) $(M4FLAGS) c-parse.gperf | grep -v '^$$' | \ $(GPERF) $(GPERFFLAGS) -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,8,$$ >$@- mv $@- $@ $(srcdir)/machine/sdcc-gperf.h: machine/sdcc.gperf $(GPERF) $(GPERFFLAGS) -j1 -t -E -H sdcc_hash -N is_sdcc_word -k1,3 machine/sdcc.gperf >$@- mv $@- $@ $(srcdir)/machine/keil-gperf.h: machine/keil.gperf $(GPERF) $(GPERFFLAGS) -j1 -t -E -H keil_hash -N is_keil_word -k1,3,$$ machine/keil.gperf >$@- mv $@- $@ # Regression testing stuff testdoc: nesc-ndoc.c nesc-ndoc.h dd_list.c $(libregions) $(COMPILE) -o $@ -DTESTING nesc-ndoc.c dd_list.c $(libregions) regress: nesc1 testdoc (cd ../nregress && ./runtest) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nescc-1.3.4/src/ND_defs.h000066400000000000000000000040101177770303300150570ustar00rootroot00000000000000/* Automatically generated from nesc-dspec.def, do not edit. */ /* See the copyright notice in nesc-dspec.def */ /* the dump option NAME(ARGS). ARGS may be NULL COUNT is the number of elements in ARGS */ struct ND_nd_option { /* extends nil */ ND_kind kind; const char * name; nd_arg sameregion args; int count; }; /* supertype for arguments */ struct ND_nd_arg { /* extends nil */ ND_kind kind; nd_arg next; }; /* an integer argument VAL */ struct ND_nd_int { /* extends nd_arg */ ND_kind kind; nd_arg next; largest_int val; }; /* some token argument STR */ struct ND_nd_token { /* extends nd_arg */ ND_kind kind; nd_arg next; const char * str; }; /* a filter */ struct ND_nd_filter { /* extends nd_arg */ ND_kind kind; nd_arg next; }; /* FILTER1 & FILTER2 */ struct ND_ndf_and { /* extends nd_filter */ ND_kind kind; nd_arg next; nd_filter sameregion filter1; nd_filter sameregion filter2; }; /* FILTER1 | FILTER2 */ struct ND_ndf_or { /* extends nd_filter */ ND_kind kind; nd_arg next; nd_filter sameregion filter1; nd_filter sameregion filter2; }; /* !FILTER1 */ struct ND_ndf_not { /* extends nd_filter */ ND_kind kind; nd_arg next; nd_filter sameregion filter1; }; /* the basic filter NAME(ARGS). COUNT is the number of elements in ARGS (>= 1) INFO can be used to save extra information (e.g., compiled regexp info) */ struct ND_ndf_op { /* extends nd_filter */ ND_kind kind; nd_arg next; const char * name; nd_arg sameregion args; int count; void * info; int filter_index; }; nd_option new_nd_option(region r, const char * name, nd_arg args, int count); nd_arg new_nd_arg(region r); nd_int new_nd_int(region r, largest_int val); nd_token new_nd_token(region r, const char * str); nd_filter new_nd_filter(region r); ndf_and new_ndf_and(region r, nd_filter filter1, nd_filter filter2); ndf_or new_ndf_or(region r, nd_filter filter1, nd_filter filter2); ndf_not new_ndf_not(region r, nd_filter filter1); ndf_op new_ndf_op(region r, const char * name, nd_arg args, int count); nescc-1.3.4/src/ND_list_nd_arg.c000066400000000000000000000034041177770303300164240ustar00rootroot00000000000000/* Automatically generated from nesc-dspec.def, do not edit. */ /* See the copyright notice in nesc-dspec.def */ nd_arg ND_nd_arg_last(nd_arg l){ if (!l) return NULL; while (l->next) l = l->next; return l; } nd_arg ND_nd_arg_chain(nd_arg l1, nd_arg l2){ if (!l1) return l2; ND_nd_arg_last(l1)->next = l2; return l1; } int ND_nd_arg_length(nd_arg l){ int len = 0; while (l) { l = l->next; len++; } return len; } nd_arg ND_nd_arg_reverse(nd_arg l){ nd_arg last = NULL, next; for (;;) { if (!l) return last; next = l->next; l->next = last; last = l; l = next; } } nd_option nd_option_chain(nd_option l1, nd_option l2) { return CAST(nd_option, ND_nd_arg_chain(CAST(nd_arg, l1), CAST(nd_arg, l2))); } nd_arg nd_arg_chain(nd_arg l1, nd_arg l2) { return CAST(nd_arg, ND_nd_arg_chain(CAST(nd_arg, l1), CAST(nd_arg, l2))); } nd_int nd_int_chain(nd_int l1, nd_int l2) { return CAST(nd_int, ND_nd_arg_chain(CAST(nd_arg, l1), CAST(nd_arg, l2))); } nd_token nd_token_chain(nd_token l1, nd_token l2) { return CAST(nd_token, ND_nd_arg_chain(CAST(nd_arg, l1), CAST(nd_arg, l2))); } nd_filter nd_filter_chain(nd_filter l1, nd_filter l2) { return CAST(nd_filter, ND_nd_arg_chain(CAST(nd_arg, l1), CAST(nd_arg, l2))); } ndf_and ndf_and_chain(ndf_and l1, ndf_and l2) { return CAST(ndf_and, ND_nd_arg_chain(CAST(nd_arg, l1), CAST(nd_arg, l2))); } ndf_or ndf_or_chain(ndf_or l1, ndf_or l2) { return CAST(ndf_or, ND_nd_arg_chain(CAST(nd_arg, l1), CAST(nd_arg, l2))); } ndf_not ndf_not_chain(ndf_not l1, ndf_not l2) { return CAST(ndf_not, ND_nd_arg_chain(CAST(nd_arg, l1), CAST(nd_arg, l2))); } ndf_op ndf_op_chain(ndf_op l1, ndf_op l2) { return CAST(ndf_op, ND_nd_arg_chain(CAST(nd_arg, l1), CAST(nd_arg, l2))); } nescc-1.3.4/src/ND_list_nd_arg.h000066400000000000000000000065251177770303300164400ustar00rootroot00000000000000/* Automatically generated from nesc-dspec.def, do not edit. */ /* See the copyright notice in nesc-dspec.def */ nd_arg ND_nd_arg_last(nd_arg l); nd_arg ND_nd_arg_chain(nd_arg l1, nd_arg l2); int ND_nd_arg_length(nd_arg l); nd_arg ND_nd_arg_reverse(nd_arg l); #define nd_option_reverse(x) CAST(nd_option, ND_nd_arg_reverse(CAST(nd_arg, (x)))) #define nd_option_length(x) ND_nd_arg_length(CAST(nd_arg, (x))) #define last_nd_option(x) CAST(nd_option, ND_nd_arg_last(CAST(nd_arg, (x)))) #define scan_nd_option(var, list) for (var = (list); var; var = CAST(nd_option, var->next)) #define nd_arg_reverse(x) CAST(nd_arg, ND_nd_arg_reverse(CAST(nd_arg, (x)))) #define nd_arg_length(x) ND_nd_arg_length(CAST(nd_arg, (x))) #define last_nd_arg(x) CAST(nd_arg, ND_nd_arg_last(CAST(nd_arg, (x)))) #define scan_nd_arg(var, list) for (var = (list); var; var = CAST(nd_arg, var->next)) #define nd_int_reverse(x) CAST(nd_int, ND_nd_arg_reverse(CAST(nd_arg, (x)))) #define nd_int_length(x) ND_nd_arg_length(CAST(nd_arg, (x))) #define last_nd_int(x) CAST(nd_int, ND_nd_arg_last(CAST(nd_arg, (x)))) #define scan_nd_int(var, list) for (var = (list); var; var = CAST(nd_int, var->next)) #define nd_token_reverse(x) CAST(nd_token, ND_nd_arg_reverse(CAST(nd_arg, (x)))) #define nd_token_length(x) ND_nd_arg_length(CAST(nd_arg, (x))) #define last_nd_token(x) CAST(nd_token, ND_nd_arg_last(CAST(nd_arg, (x)))) #define scan_nd_token(var, list) for (var = (list); var; var = CAST(nd_token, var->next)) #define nd_filter_reverse(x) CAST(nd_filter, ND_nd_arg_reverse(CAST(nd_arg, (x)))) #define nd_filter_length(x) ND_nd_arg_length(CAST(nd_arg, (x))) #define last_nd_filter(x) CAST(nd_filter, ND_nd_arg_last(CAST(nd_arg, (x)))) #define scan_nd_filter(var, list) for (var = (list); var; var = CAST(nd_filter, var->next)) #define ndf_and_reverse(x) CAST(ndf_and, ND_nd_arg_reverse(CAST(nd_arg, (x)))) #define ndf_and_length(x) ND_nd_arg_length(CAST(nd_arg, (x))) #define last_ndf_and(x) CAST(ndf_and, ND_nd_arg_last(CAST(nd_arg, (x)))) #define scan_ndf_and(var, list) for (var = (list); var; var = CAST(ndf_and, var->next)) #define ndf_or_reverse(x) CAST(ndf_or, ND_nd_arg_reverse(CAST(nd_arg, (x)))) #define ndf_or_length(x) ND_nd_arg_length(CAST(nd_arg, (x))) #define last_ndf_or(x) CAST(ndf_or, ND_nd_arg_last(CAST(nd_arg, (x)))) #define scan_ndf_or(var, list) for (var = (list); var; var = CAST(ndf_or, var->next)) #define ndf_not_reverse(x) CAST(ndf_not, ND_nd_arg_reverse(CAST(nd_arg, (x)))) #define ndf_not_length(x) ND_nd_arg_length(CAST(nd_arg, (x))) #define last_ndf_not(x) CAST(ndf_not, ND_nd_arg_last(CAST(nd_arg, (x)))) #define scan_ndf_not(var, list) for (var = (list); var; var = CAST(ndf_not, var->next)) #define ndf_op_reverse(x) CAST(ndf_op, ND_nd_arg_reverse(CAST(nd_arg, (x)))) #define ndf_op_length(x) ND_nd_arg_length(CAST(nd_arg, (x))) #define last_ndf_op(x) CAST(ndf_op, ND_nd_arg_last(CAST(nd_arg, (x)))) #define scan_ndf_op(var, list) for (var = (list); var; var = CAST(ndf_op, var->next)) nd_option nd_option_chain(nd_option l1, nd_option l2); nd_arg nd_arg_chain(nd_arg l1, nd_arg l2); nd_int nd_int_chain(nd_int l1, nd_int l2); nd_token nd_token_chain(nd_token l1, nd_token l2); nd_filter nd_filter_chain(nd_filter l1, nd_filter l2); ndf_and ndf_and_chain(ndf_and l1, ndf_and l2); ndf_or ndf_or_chain(ndf_or l1, ndf_or l2); ndf_not ndf_not_chain(ndf_not l1, ndf_not l2); ndf_op ndf_op_chain(ndf_op l1, ndf_op l2); nescc-1.3.4/src/ND_types.c000066400000000000000000000052401177770303300153030ustar00rootroot00000000000000/* Automatically generated from nesc-dspec.def, do not edit. */ /* See the copyright notice in nesc-dspec.def */ nd_option new_nd_option(region r, const char * name, nd_arg args, int count) { nd_option obj = ralloc(r, struct ND_nd_option); obj->kind = kind_nd_option; obj->name = name; obj->args = args; obj->count = count; return obj; } nd_arg new_nd_arg(region r) { nd_arg obj = ralloc(r, struct ND_nd_arg); obj->kind = kind_nd_arg; return obj; } nd_int new_nd_int(region r, largest_int val) { nd_int obj = ralloc(r, struct ND_nd_int); obj->kind = kind_nd_int; obj->val = val; return obj; } nd_token new_nd_token(region r, const char * str) { nd_token obj = ralloc(r, struct ND_nd_token); obj->kind = kind_nd_token; obj->str = str; return obj; } nd_filter new_nd_filter(region r) { nd_filter obj = ralloc(r, struct ND_nd_filter); obj->kind = kind_nd_filter; return obj; } ndf_and new_ndf_and(region r, nd_filter filter1, nd_filter filter2) { ndf_and obj = ralloc(r, struct ND_ndf_and); obj->kind = kind_ndf_and; obj->filter1 = filter1; obj->filter2 = filter2; return obj; } ndf_or new_ndf_or(region r, nd_filter filter1, nd_filter filter2) { ndf_or obj = ralloc(r, struct ND_ndf_or); obj->kind = kind_ndf_or; obj->filter1 = filter1; obj->filter2 = filter2; return obj; } ndf_not new_ndf_not(region r, nd_filter filter1) { ndf_not obj = ralloc(r, struct ND_ndf_not); obj->kind = kind_ndf_not; obj->filter1 = filter1; return obj; } ndf_op new_ndf_op(region r, const char * name, nd_arg args, int count) { ndf_op obj = ralloc(r, struct ND_ndf_op); obj->kind = kind_ndf_op; obj->name = name; obj->args = args; obj->count = count; return obj; } ND_kind ND_parent_kind[] = { 0, 0, kind_nd_arg, kind_nd_arg, kind_nd_arg, kind_nd_filter, kind_nd_filter, kind_nd_filter, kind_nd_filter, }; ND_kind ND_post_kind[] = { postkind_nd_option, postkind_nd_arg, postkind_nd_int, postkind_nd_token, postkind_nd_filter, postkind_ndf_and, postkind_ndf_or, postkind_ndf_not, postkind_ndf_op, }; size_t ND_sizeof[] = { sizeof(struct ND_nd_option), sizeof(struct ND_nd_arg), sizeof(struct ND_nd_int), sizeof(struct ND_nd_token), sizeof(struct ND_nd_filter), sizeof(struct ND_ndf_and), sizeof(struct ND_ndf_or), sizeof(struct ND_ndf_not), sizeof(struct ND_ndf_op), }; type_t ND_typeof[] = { rctypeof(struct ND_nd_option), rctypeof(struct ND_nd_arg), rctypeof(struct ND_nd_int), rctypeof(struct ND_nd_token), rctypeof(struct ND_nd_filter), rctypeof(struct ND_ndf_and), rctypeof(struct ND_ndf_or), rctypeof(struct ND_ndf_not), rctypeof(struct ND_ndf_op), }; nescc-1.3.4/src/ND_types.h000066400000000000000000000051471177770303300153160ustar00rootroot00000000000000/* Automatically generated from nesc-dspec.def, do not edit. */ /* See the copyright notice in nesc-dspec.def */ typedef struct ND_nd_option *nd_option; typedef struct ND_nd_arg *nd_arg; typedef struct ND_nd_int *nd_int; typedef struct ND_nd_token *nd_token; typedef struct ND_nd_filter *nd_filter; typedef struct ND_ndf_and *ndf_and; typedef struct ND_ndf_or *ndf_or; typedef struct ND_ndf_not *ndf_not; typedef struct ND_ndf_op *ndf_op; typedef enum { kind_nd_option = 10000, postkind_nd_option = 10000, kind_nd_arg = 10001, postkind_nd_arg = 10008, kind_nd_int = 10002, postkind_nd_int = 10002, kind_nd_token = 10003, postkind_nd_token = 10003, kind_nd_filter = 10004, postkind_nd_filter = 10008, kind_ndf_and = 10005, postkind_ndf_and = 10005, kind_ndf_or = 10006, postkind_ndf_or = 10006, kind_ndf_not = 10007, postkind_ndf_not = 10007, kind_ndf_op = 10008, postkind_ndf_op = 10008 } ND_kind; extern ND_kind ND_parent_kind[]; /* indexed by kind - kind_node */ extern ND_kind ND_post_kind[]; /* indexed by kind - kind_node */ extern size_t ND_sizeof[]; /* indexed by kind - kind_node */ extern type_t ND_typeof[]; /* indexed by kind - kind_node */ #define is_nd_option(x) ((x)->kind >= kind_nd_option && (x)->kind <= postkind_nd_option) #define is_nd_arg(x) ((x)->kind >= kind_nd_arg && (x)->kind <= postkind_nd_arg) #define is_nd_int(x) ((x)->kind >= kind_nd_int && (x)->kind <= postkind_nd_int) #define is_nd_token(x) ((x)->kind >= kind_nd_token && (x)->kind <= postkind_nd_token) #define is_nd_filter(x) ((x)->kind >= kind_nd_filter && (x)->kind <= postkind_nd_filter) #define is_ndf_and(x) ((x)->kind >= kind_ndf_and && (x)->kind <= postkind_ndf_and) #define is_ndf_or(x) ((x)->kind >= kind_ndf_or && (x)->kind <= postkind_ndf_or) #define is_ndf_not(x) ((x)->kind >= kind_ndf_not && (x)->kind <= postkind_ndf_not) #define is_ndf_op(x) ((x)->kind >= kind_ndf_op && (x)->kind <= postkind_ndf_op) typedef struct { AST_kind kind; } *ND_generic; #ifdef __GNUC__ #define ND_CAST(type, x) ({ND_generic tEmPcast = (ND_generic)(x); if (tEmPcast) assert(is_ ## type(tEmPcast)); (type)(tEmPcast); }) #define ND_CASTPTR(type, x) ({ND_generic *tEmPcast = (ND_generic *)(x); if (tEmPcast && *tEmPcast) assert(is_ ## type(*tEmPcast)); (type *)(tEmPcast); }) #define ND_CASTSRPTR(type, x) ({ND_generic *tEmPcast = (ND_generic *)(x); if (tEmPcast && *tEmPcast) assert(is_ ## type(*tEmPcast)); (type sameregion *)(tEmPcast); }) #else /* Could also generate some code to make this safe */ #define ND_CAST(type, x) ((type)(x)) #define ND_CASTPTR(type, x) ((type *)(x)) #define ND_CASTSRPTR(type, x) ((type sameregion *)(x)) #endif nescc-1.3.4/src/acinclude.m4000066400000000000000000000042571177770303300156120ustar00rootroot00000000000000dnl CPARSE_TRY_CFLAGS(FLAGS) dnl dnl Try running the C compiler with FLAGS appended to $CFLAGS. If dnl it completes without error, retain the additional flags. dnl AC_DEFUN([CPARSE_TRY_CFLAGS],[ AC_REQUIRE([AC_PROG_CC]) AC_MSG_CHECKING(whether ${CC-cc} accepts $1) save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $1" AC_LANG_SAVE AC_LANG_C AC_TRY_COMPILE([], [], AC_MSG_RESULT(yes), AC_MSG_RESULT(no) CFLAGS="$save_CFLAGS")]) dnl CPARSE_GCCDIR dnl dnl If the C compiler is gcc, set $GCCDIR to the directory dnl containing gcc's suite of supporting files and also define dnl GCCDIR macro to a string representation of the same. dnl AC_DEFUN([CPARSE_GCCDIR],[ AC_REQUIRE([AC_PROG_CC]) AC_MSG_CHECKING(for gcc support directory) if test "$GCC" = yes; then GCCDIR="`$CC -v 2>&1 | sed -n 's:^Reading specs from \(.*\)/specs$:\1:p'`" if test -z "$GCCDIR"; then AC_MSG_ERROR(cannot find gcc support directory) else AC_MSG_RESULT($GCCDIR) fi AC_DEFINE_UNQUOTED(GCCDIR, "$GCCDIR", directory containing gcc support files) else AC_MSG_RESULT(no) fi ]) dnl RC_TRY_CPPFLAGS(FLAGS) dnl dnl Try running the C preprocessor with FLAGS appended to $CPPFLAGS. dnl If it completes without error, retain the additional flags. dnl AC_DEFUN([RC_TRY_CPPFLAGS],[ AC_REQUIRE([AC_PROG_CPP]) AC_MSG_CHECKING(whether $CPP accepts $1) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $1" AC_TRY_CPP([], AC_MSG_RESULT(yes) , CPPFLAGS="$save_CPPFLAGS" AC_MSG_RESULT(no))]) dnl RC_CHECK_DECL(FUNCTION, HEADER-FILE) dnl dnl Search for a declaration of FUNCTION in HEADER-FILE, and define dnl HAVE_FUNCTION_DECLARED if found. dnl AC_DEFUN([RC_CHECK_DECL],[ AC_CACHE_CHECK(for $1 declaration in <$2>, rc_cv_$1_declared, [ AC_EGREP_HEADER(\<$1\>, $2, rc_cv_$1_declared=yes, rc_cv_$1_declared=no)]) if test "$rc_cv_$1_declared" = yes; then AC_DEFINE(HAVE_[]translit($1, a-z, A-Z)_DECLARED, 1, $1 is declared in <$2>) fi]) dnl RC_FIX_EXEC(FILE) dnl dnl If FILE is on the list of generated config files, turn on its dnl user execute bit. Intended for use in the EXTRA-CMDS argument dnl to AC_OUTPUT or AC_OUTPUT_COMMANDS. dnl AC_DEFUN([RC_FIX_EXEC],[[ case "$CONFIG_FILES" in *$1*) chmod +x $1 ;; esac]]) nescc-1.3.4/src/aclocal.m4000066400000000000000000001036321177770303300152560ustar00rootroot00000000000000# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, [m4_warning([this file was generated for autoconf 2.68. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../config-aux/depstand.m4]) m4_include([../config-aux/iconv.m4]) m4_include([../config-aux/lead-dot.m4]) m4_include([../config-aux/lib-ld.m4]) m4_include([../config-aux/lib-link.m4]) m4_include([../config-aux/lib-prefix.m4]) m4_include([acinclude.m4]) nescc-1.3.4/src/array.c000066400000000000000000000043471177770303300147030ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include "array.h" struct array { region sameregion r; void *sameregion data; size_t elemsize; type_t elemtype; size_t nelems, nalloc; }; struct array *new_array(region r, size_t initialsize, size_t typesize, type_t typeinfo) { struct array *a = ralloc(r, struct array); a->r = r; a->data = typed_rarrayalloc(r, initialsize, typesize, typeinfo); a->elemsize = typesize; a->elemtype = typeinfo; a->nelems = 0; a->nalloc = initialsize; return a; } void *array_extend(struct array *a, int by) { size_t oldelems = a->nelems; if (by < 0) assert(-by <= a->nelems && by != INT_MIN); else if (a->nelems + by > a->nalloc) { size_t newsize = a->nalloc * 2 + by; void *newdata = typed_rarrayalloc(a->r, newsize, a->elemsize, a->elemtype); /* XXX: could work harder to support really large array sizes (this code will fail for a->nalloc >= (max(size_t)-by)/2) */ assert(newsize > a->nalloc); /* die when we get really big */ typed_rarraycopy(newdata, a->data, a->nelems, a->elemsize, a->elemtype); a->data = newdata; a->nalloc = newsize; } a->nelems += by; return (char *)a->data + a->elemsize * oldelems; } void array_reset(struct array *a) { a->nelems = 0; } size_t array_length(struct array *a) { return a->nelems; } void *array_data(struct array *a) { return a->data; } nescc-1.3.4/src/array.h000066400000000000000000000036671177770303300147140ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef ARRAY_H #define ARRAY_H /* A region-based growable array type */ #include struct array; struct array *new_array(region r, size_t initialsize, size_t typesize, type_t typeinfo); void *array_extend(struct array *a, int by); void array_reset(struct array *a); size_t array_length(struct array *a); void *array_data(struct array *a); #define DECLARE_ARRAY(name, type) \ typedef struct name ## _a *name; \ name new_ ## name(region r, size_t initialsize); \ type *name ## _extend(name a, int by); \ void name ## _reset(name a); \ size_t name ## _length(name a); \ type *name ## _data(name a); #define DEFINE_ARRAY(name, type) \ name new_ ## name(region r, size_t initialsize) \ { \ return (name)new_array(r, initialsize, sizeof(type), rctypeof(type)); \ } \ type *name ## _extend(name a, int by) \ { \ return array_extend((struct array *)a, by); \ } \ void name ## _reset(name a) \ { \ return array_reset((struct array *)a); \ } \ size_t name ## _length(name a) \ { \ return array_length((struct array *)a); \ } \ type *name ## _data(name a) \ { \ return array_data((struct array *)a); \ } #endif nescc-1.3.4/src/attributes.c000066400000000000000000000245161177770303300157530ustar00rootroot00000000000000#include "parser.h" #include "attributes.h" #include "semantics.h" #include "nesc-semantics.h" #include "nesc-attributes.h" #include "machine.h" #include "c-parse.h" #include "constants.h" #include "AST_utils.h" /* Provide warnings about ignored attributes and attribute lists */ void ignored_attribute(attribute attr) { warning_with_location(attr->location, "`%s' attribute directive ignored", attr->word1->cstring.data); } void ignored_gcc_attribute(gcc_attribute attr) { ignored_attribute(CAST(attribute, attr)); } void ignored_nesc_attribute(nesc_attribute attr) { ignored_attribute(CAST(attribute, attr)); } void ignored_attributes(attribute alist) { scan_attribute (alist, alist) ignored_attribute(alist); } void ignored_dd_attributes(dd_list alist) { dd_list_pos attr; if (alist) dd_scan (attr, alist) ignored_attribute(DD_GET(attribute, attr)); } cval gcc_attr_get_constant(gcc_attribute attr) { if (!attr->args || attr->args->next || !attr->args->cst) return cval_top; else return attr->args->cst->cval; } const char *gcc_attr_get_word(gcc_attribute attr) { if (attr->args && !attr->args->next && is_identifier(attr->args)) return CAST(identifier, attr->args)->cstring.data; error_with_location(attr->location, "wrong number of arguments specified for `%s' attribute", attr->word1->cstring.data); return NULL; } static size_t max_useful_alignment(void) { size_t max_align = 0; /* Of current machine. Returns max of long double, long long, int8 and ptr alignment (ok, this is a slight hack, but it seems unlikely that other smaller types will have worse restrictions) */ #define IMAX(a) if (max_align < a) max_align = a IMAX(target->int8_align); IMAX(target->tptr.align); IMAX(target->tlong_double.align); IMAX(target->tlong_long.align); #undef IMAX return max_align; } static cval get_alignment(gcc_attribute attr) { cval arg; if (!attr->args) return make_cval_unsigned(max_useful_alignment(), size_t_type); arg = gcc_attr_get_constant(attr); if (cval_isinteger(arg)) if (ilog2(cval_uint_value(arg)) != -1) return cval_cast(arg, size_t_type); else error("requested alignment is not a power of 2"); else error("requested alignment is not a constant"); return cval_top; } /* handle_X_attribute(attr, obj): Attempt to apply attribute attr to obj of kind X (decl, field, tag, type), modifying obj. For decls, fields, tags: If attr is not applicable: issue a warning with ignored_attributes For types: Return TRUE if applicable, FALSE if not (this difference is due to the funky rules of attributes used as type qualifiers) */ static void transparent_union_argument(data_declaration ddecl) { ddecl->type = make_qualified_type (ddecl->type, type_qualifiers(ddecl->type) | transparent_qualifier); } static bool require_function(gcc_attribute attr, data_declaration ddecl) { if (ddecl->kind == decl_function && ddecl->ftype == function_normal) return TRUE; error_with_location(attr->location, "`%s' attribute is for external functions only", attr->word1->cstring.data); return FALSE; } bool handle_gcc_type_attribute(gcc_attribute attr, type *t) { const char *name = attr->word1->cstring.data; if (is_attr_name(name, "combine")) { const char *word = gcc_attr_get_word(attr); if (word) handle_combine_attribute(attr->location, word, t); return TRUE; } else if (is_attr_name(name, "aligned")) { cval arg = get_alignment(attr); if (cval_isinteger(arg)) *t = align_type(*t, arg); return TRUE; } else return target->type_attribute && target->type_attribute(attr, t); } void handle_gcc_decl_attribute(gcc_attribute attr, data_declaration ddecl) { const char *name = attr->word1->cstring.data; if (is_attr_name(name, "transparent_union")) { if (attr->args) error_with_location(attr->location, "wrong number of arguments specified for `transparent_union' attribute"); if (ddecl->kind == decl_variable && ddecl->isparameter && type_union(ddecl->type)) transparent_union_argument(ddecl); else if (ddecl->kind == decl_typedef && type_union(ddecl->type)) transparent_union_argument(ddecl); else ignored_gcc_attribute(attr); } else if (is_attr_name(name, "aligned")) { cval arg = get_alignment(attr); if (cval_isinteger(arg)) { if (ddecl->kind == decl_variable || ddecl->kind == decl_typedef) ddecl->type = align_type(ddecl->type, arg); else ignored_gcc_attribute(attr); } } else if (is_attr_name(name, "mode")) { const char *word = gcc_attr_get_word(attr); if (word) if (!handle_mode_attribute(attr->location, ddecl, word)) ignored_gcc_attribute(attr); } else if (is_attr_name(name, "C")) { if (!ddecl->isexternalscope) error_with_location(attr->location, "`C' attribute is for symbols with external scope only"); else ddecl->Cname = TRUE; } else if (is_attr_name(name, "spontaneous")) { if (require_function(attr, ddecl)) { /* The test avoids overriding the effect of atomic_hwevent */ if (!ddecl->spontaneous) ddecl->spontaneous = c_call_nonatomic; } } else if (is_attr_name(name, "atomic_hwevent")) { if (require_function(attr, ddecl)) { ddecl->async = TRUE; ddecl->spontaneous = c_call_atomic; } } else if (is_attr_name(name, "hwevent")) { if (require_function(attr, ddecl)) { ddecl->async = TRUE; ddecl->spontaneous = c_call_nonatomic; } } else if (is_attr_name(name, "noinline")) { ddecl->noinlinep = TRUE; } else if (is_attr_name(name, "nx_base_le") || is_attr_name(name, "nx_base_be") || is_attr_name(name, "nx_base")) { const char *word = gcc_attr_get_word(attr); if (ddecl->kind != decl_typedef) error_with_location(attr->location, "`%s' attribute can only be applied to typedefs", name); else if (word) handle_nxbase_attribute(attr->location, is_attr_name(name, "nx_base_be"), TRUE, word, ddecl); } else if (!(target->decl_attribute && target->decl_attribute(attr, ddecl)) && !handle_gcc_type_attribute(attr, &ddecl->type)) /*ignored_gcc_attribute(attr)*/; } /* Note: fdecl->bitwidth is not yet set when this is called */ void handle_gcc_field_attribute(gcc_attribute attr, field_declaration fdecl) { const char *name = attr->word1->cstring.data; if (is_attr_name(name, "packed")) fdecl->packed = TRUE; else if (is_attr_name(name, "aligned")) { cval arg = get_alignment(attr); if (cval_isinteger(arg)) fdecl->type = align_type(fdecl->type, arg); } else if (!(target->field_attribute && target->field_attribute(attr, fdecl))) /*ignored_gcc_attribute(attr)*/; } void handle_gcc_tag_attribute(gcc_attribute attr, tag_declaration tdecl) { const char *name = attr->word1->cstring.data; if (is_attr_name(name, "transparent_union")) { if (attr->args) error_with_location(attr->location, "wrong number of arguments specified for `transparent_union' attribute"); if (tdecl->kind == kind_union_ref) { tdecl->transparent_union = TRUE; /* XXX: Missing validity checks (need cst folding I think) */ } else ignored_gcc_attribute(attr); } else if (is_attr_name(name, "packed")) tdecl->packed = TRUE; else if (is_attr_name(name, "aligned")) { cval arg = get_alignment(attr); if (cval_isinteger(arg)) tdecl->user_alignment = arg; } else if (is_attr_name(name, "C")) { if (tdecl->container_function) error_with_location(attr->location, "`C' attribute is for symbols with external scope only"); else tdecl->Cname = TRUE; } else if (!(target->tag_attribute && target->tag_attribute(attr, tdecl))) /*ignored_gcc_attribute(attr)*/; } void handle_nescdecl_attribute(attribute attr, nesc_declaration ndecl) { handle_nesc_nescdecl_attribute(CAST(nesc_attribute, attr), ndecl); } void handle_decl_attribute(attribute attr, data_declaration ddecl) { if (is_gcc_attribute(attr)) handle_gcc_decl_attribute(CAST(gcc_attribute, attr), ddecl); else handle_nesc_decl_attribute(CAST(nesc_attribute, attr), ddecl); } void handle_field_attribute(attribute attr, field_declaration fdecl) { if (is_gcc_attribute(attr)) handle_gcc_field_attribute(CAST(gcc_attribute, attr), fdecl); else handle_nesc_field_attribute(CAST(nesc_attribute, attr), fdecl); } void handle_tag_attribute(attribute attr, tag_declaration tdecl) { if (is_gcc_attribute(attr)) handle_gcc_tag_attribute(CAST(gcc_attribute, attr), tdecl); else handle_nesc_tag_attribute(CAST(nesc_attribute, attr), tdecl); } bool handle_type_attribute(attribute attr, type *t) { if (is_gcc_attribute(attr)) return handle_gcc_type_attribute(CAST(gcc_attribute, attr), t); else { /* nesC attributes don't have a broken syntax, so don't need to flow up to the declaration */ handle_nesc_type_attribute(CAST(nesc_attribute, attr), t); return TRUE; } } /* Functions to handle regular and dd list of attributes */ void handle_nescdecl_attributes(attribute alist, nesc_declaration ndecl) { scan_attribute (alist, alist) handle_nescdecl_attribute(alist, ndecl); } void handle_decl_attributes(attribute alist, data_declaration ddecl) { scan_attribute (alist, alist) handle_decl_attribute(alist, ddecl); } void handle_field_attributes(attribute alist, field_declaration fdecl) { scan_attribute (alist, alist) handle_field_attribute(alist, fdecl); } void handle_tag_attributes(attribute alist, tag_declaration tdecl) { scan_attribute (alist, alist) handle_tag_attribute(alist, tdecl); } void handle_nescdecl_dd_attributes(dd_list alist, nesc_declaration ndecl) { dd_list_pos attr; if (alist) dd_scan (attr, alist) handle_nescdecl_attribute(DD_GET(attribute, attr), ndecl); } void handle_decl_dd_attributes(dd_list alist, data_declaration ddecl) { dd_list_pos attr; if (alist) dd_scan (attr, alist) handle_decl_attribute(DD_GET(attribute, attr), ddecl); } void handle_field_dd_attributes(dd_list alist, field_declaration fdecl) { dd_list_pos attr; if (alist) dd_scan (attr, alist) handle_field_attribute(DD_GET(attribute, attr), fdecl); } void handle_tag_dd_attributes(dd_list alist, tag_declaration tdecl) { dd_list_pos attr; if (alist) dd_scan (attr, alist) handle_tag_attribute(DD_GET(attribute, attr), tdecl); } nescc-1.3.4/src/attributes.h000066400000000000000000000032251177770303300157520ustar00rootroot00000000000000#ifndef ATTRIBUTES_H #define ATTRIBUTES_H /* Provide warnings about ignored attributes and attribute lists */ void ignored_attribute(attribute attr); void ignored_attributes(attribute alist); void ignored_dd_attributes(dd_list alist); void ignored_gcc_attribute(gcc_attribute attr); void ignored_nesc_attribute(nesc_attribute attr); /* handle_X_attribute(attr, obj): Attempt to apply attribute attr to obj of kind X (decl, field, tag, type), modifying obj. For decls, fields, tags: If attr is not applicable: issue a warning with ignored_attributes For types: Return TRUE if applicable, FALSE if not (this difference is due to the funky rules of attributes used as type qualifiers) */ void handle_nescdecl_attribute(attribute attr, nesc_declaration ndecl); void handle_decl_attribute(attribute attr, data_declaration ddecl); void handle_field_attribute(attribute attr, field_declaration fdecl); void handle_tag_attribute(attribute attr, tag_declaration tdecl); bool handle_type_attribute(attribute attr, type *t); /* Functions to handle regular and dd list of attributes */ void handle_nescdecl_attributes(attribute alist, nesc_declaration ndecl); void handle_decl_attributes(attribute alist, data_declaration ddecl); void handle_field_attributes(attribute alist, field_declaration fdecl); void handle_tag_attributes(attribute alist, tag_declaration tdecl); void handle_nescdecl_dd_attributes(dd_list alist, nesc_declaration ndecl); void handle_decl_dd_attributes(dd_list alist, data_declaration ddecl); void handle_field_dd_attributes(dd_list alist, field_declaration fdecl); void handle_tag_dd_attributes(dd_list alist, tag_declaration tdecl); #endif nescc-1.3.4/src/autoconf.h.in000066400000000000000000000060571177770303300160150ustar00rootroot00000000000000/* autoconf.h.in. Generated from configure.in by autoheader. */ /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the `fnmatch' function. */ #undef HAVE_FNMATCH /* Define if you have the iconv() function. */ #undef HAVE_ICONV /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `mmap' function. */ #undef HAVE_MMAP /* Define to 1 if you have the `poll' function. */ #undef HAVE_POLL /* Define to 1 if you have the `realpath' function. */ #undef HAVE_REALPATH /* Define to 1 if you have the `regcomp' function. */ #undef HAVE_REGCOMP /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strtold' function. */ #undef HAVE_STRTOLD /* strtold is declared in */ #undef HAVE_STRTOLD_DECLARED /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* The size of `long long', as computed by sizeof. */ #undef SIZEOF_LONG_LONG /* The size of `void *', as computed by sizeof. */ #undef SIZEOF_VOID_P /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define to `unsigned int' if does not define. */ #undef size_t nescc-1.3.4/src/build-basics.el000066400000000000000000000113571177770303300163030ustar00rootroot00000000000000; This file is part of the nesC compiler. ; ; This file is derived from the RC Compiler. It is thus ; Copyright (C) 2000-2001 The Regents of the University of California. ; Changes for nesC are ; Copyright (C) 2002 Intel Corporation ; ; The attached "nesC" software is provided to you under the terms and ; conditions of the GNU General Public License Version 2 as published by the ; Free Software Foundation. ; ; nesC 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 nesC; see the file COPYING. If not, write to ; the Free Software Foundation, 59 Temple Place - Suite 330, ; Boston, MA 02111-1307, USA. ; Utility functions (defun ins (&rest args) (insert (apply #'format args))) (setq basename (car command-line-args-left)) (setq nodedefs (cadr command-line-args-left)) (setq command-line-args-left (cddr command-line-args-left)) (defmacro deffield (field-name c-type attributes) `(deffield* ',field-name ',c-type ',attributes)) (defmacro deftype (type-name super-type fields documentation) `(deftype* ',type-name ',super-type ',fields ',documentation)) (defmacro defnode (node-name type-name documentation) `(defnode* ',node-name ',type-name ',documentation)) (setq fields nil) (setq types nil) (setq nodes nil) (defun deffield* (field-name c-type attributes) (setq attributes (attributes-ok field-name attributes)) (if (assoc field-name fields) (message (format "Field %s already defined" field-name)) (setq fields (cons (list field-name c-type attributes) fields)))) (defun deftype* (type-name super-type fields documentation) (if (or (assoc type-name types) (assoc type-name nodes)) (message (format "Name %s already used for a type or node" type-name)) (setq types (cons (list type-name super-type fields documentation) types)))) (defun defnode* (node-name type-name documentation) (if (or (assoc node-name types) (assoc node-name nodes)) (message (format "Name %s already used for a type or node" node-name)) (setq nodes (cons (list node-name type-name documentation) nodes)))) (setq legal-attributes '(init tree nodump noprint default dump-special print-special format)) (defun attributes-ok (field-name attrs) (mapcar '(lambda (attr) (let* ((realattr (if (listp attr) attr (list attr))) (aname (car realattr))) (if (not (member aname legal-attributes)) (message (format "Unknown attribute %s in field %s" aname field-name))) realattr)) attrs)) (defun check-defs () (setq types (reverse types)) (setq nodes (reverse nodes)) (check-types) (check-nodes)) (defun check-types () (mapcar #'check-type types)) (defun check-type (type) (mapcar '(lambda (field-name) (if (not (assoc field-name fields)) (message (format "Unknown field %s in %s" field-name (car type))))) (type-fields type)) (if (and (type-super-type type) (not (assoc (type-super-type type) types))) (message (format "Unknown super-type %s in %s" (type-super-type type) (type-name type))))) (defun check-nodes () (mapcar #'check-node nodes)) (defun check-node (node) (if (not (assoc (node-type node) types)) (message (format "Unknown type %s in node %s" (node-type node) (node-name node))))) (defun build-file (name) (setq name (concat basename "_" name)) (let ((buffer (create-file-buffer name)) (debug-on-error (or debug-on-error (interactive-p)))) (if debug-on-error (switch-to-buffer buffer) (set-buffer buffer)) (fill-buffer) (write-file name) (unless debug-on-error (kill-buffer buffer)))) (require 'cl) (defun nodes-of (typename) (reduce #'(lambda (l x) (if (equal (node-type x) typename) (cons (node-name x) l) l)) nodes :initial-value nil)) (defun all-type-fields (type) (if (type-super-type type) (append (all-type-fields (assoc (type-super-type type) types)) (type-fields type)) (type-fields type))) (defun caddr (x) (car (cddr x))) (defun cadddr (x) (car (cddr (cdr x)))) (defalias 'type-name #'car) (defalias 'type-super-type #'cadr) (defalias 'type-fields #'caddr) (defalias 'type-documentation #'cadddr) (defalias 'field-name #'car) (defalias 'field-c-type #'cadr) (defalias 'field-attributes #'caddr) (defalias 'node-name #'car) (defalias 'node-type #'cadr) (defalias 'node-documentation #'caddr) (defun copyright-notice () (insert "/* Automatically generated from " nodedefs ", do not edit. */\n\n") (insert "/* See the copyright notice in " nodedefs " */\n")) ;; go ahead and check defs (load-file nodedefs) (check-defs) nescc-1.3.4/src/build-list.el000066400000000000000000000073201177770303300160050ustar00rootroot00000000000000; This file is part of the nesC compiler. ; ; This file is derived from the RC Compiler. It is thus ; Copyright (C) 2000-2001 The Regents of the University of California. ; Changes for nesC are ; Copyright (C) 2002 Intel Corporation ; ; The attached "nesC" software is provided to you under the terms and ; conditions of the GNU General Public License Version 2 as published by the ; Free Software Foundation. ; ; nesC 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 nesC; see the file COPYING. If not, write to ; the Free Software Foundation, 59 Temple Place - Suite 330, ; Boston, MA 02111-1307, USA. (load-file "build-basics.el") (setq list-base-type (car command-line-args-left)) (setq all-type-names (append (mapcar #'type-name types) (mapcar #'node-name nodes))) (defun fill-buffer () (copyright-notice) (write-base-function-headers) (mapc #'write-macros all-type-names) (mapc #'write-function-headers all-type-names) ) (defun write-base1 (fname result) (ins "%s %s_%s_%s(%s l)" result basename list-base-type fname list-base-type)) (defun write-base2 (fname result) (ins "%s %s_%s_%s(%s l1, %s l2)" result basename list-base-type fname list-base-type list-base-type)) (defun write-base-function-headers () (write-base1 "last" list-base-type) (ins ";\n") (write-base2 "chain" list-base-type) (ins ";\n") (write-base1 "length" "int") (ins ";\n") (write-base1 "reverse" list-base-type) (ins ";\n")) (defun write-macros (name) (ins "#define %s_reverse(x) CAST(%s, %s_%s_reverse(CAST(%s, (x))))\n" name name basename list-base-type list-base-type) (ins "#define %s_length(x) %s_%s_length(CAST(%s, (x)))\n" name basename list-base-type list-base-type) (ins "#define last_%s(x) CAST(%s, %s_%s_last(CAST(%s, (x))))\n" name name basename list-base-type list-base-type) (ins "#define scan_%s(var, list) for (var = (list); var; var = CAST(%s, var->next))\n" name name)) (defun write-function-headers (name) (ins "%s %s_chain(%s l1, %s l2);\n" name name name name)) (build-file (format "list_%s.h" list-base-type)) (defun fill-buffer () (copyright-notice) (write-base-function-source) (mapc #'write-function-source all-type-names)) (defun write-base-function-source () (write-base1 "last" list-base-type) (ins "{\n") (ins " if (!l) return NULL;\n") (ins " while (l->next) l = l->next;\n") (ins " return l;\n") (ins "}\n\n") (write-base2 "chain" list-base-type) (ins "{\n") (ins " if (!l1) return l2;\n") (ins " %s_%s_last(l1)->next = l2;\n" basename list-base-type) (ins " return l1;\n") (ins "}\n\n") (write-base1 "length" "int") (ins "{\n") (ins " int len = 0;\n\n") (ins " while (l) \n") (ins " {\n") (ins " l = l->next;\n") (ins " len++;\n") (ins " }\n") (ins " return len;\n") (ins "}\n\n") (write-base1 "reverse" list-base-type) (ins "{\n") (ins " %s last = NULL, next;\n\n" list-base-type) (ins " for (;;)\n") (ins " {\n") (ins " if (!l)\n") (ins " return last;\n") (ins " next = l->next;\n") (ins " l->next = last;\n") (ins " last = l;\n") (ins " l = next;\n") (ins " }\n") (ins "}\n\n")) (defun write-function-source (name) (ins "%s %s_chain(%s l1, %s l2)\n" name name name name) (ins "{ return CAST(%s, %s_%s_chain(CAST(%s, l1), CAST(%s, l2))); }\n\n" name basename list-base-type list-base-type list-base-type)) (build-file (format "list_%s.c" list-base-type)) nescc-1.3.4/src/build-parent.el000066400000000000000000000033431177770303300163240ustar00rootroot00000000000000; This file is part of the nesC compiler. ; ; This file is derived from the RC Compiler. It is thus ; Copyright (C) 2000-2001 The Regents of the University of California. ; Changes for nesC are ; Copyright (C) 2002 Intel Corporation ; ; The attached "nesC" software is provided to you under the terms and ; conditions of the GNU General Public License Version 2 as published by the ; Free Software Foundation. ; ; nesC 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 nesC; see the file COPYING. If not, write to ; the Free Software Foundation, 59 Temple Place - Suite 330, ; Boston, MA 02111-1307, USA. ;; Build a function to set the parent and parent_ptr nodes in a tree (load-file "build-basics.el") (defun fill-buffer () (copyright-notice) (mapcar #'write-parent-type types)) (defun write-parent-type (type) (let* ((name (type-name type)) (synonyms (nodes-of name))) (mapcar #'write-parent-case (cons name synonyms)) (let ((tree-fields (remove-if-not #'(lambda (field) (assoc 'tree (field-attributes (assoc field fields)))) (all-type-fields type)))) (if tree-fields (progn (insert (format "{\n %s x = CAST(%s, n);\n\n" name name)) (mapcar #'write-parent-field tree-fields) (insert " break;\n}\n")) (insert "break;\n"))))) (defun write-parent-case (name) (insert (format "case kind_%s: " name))) (defun write-parent-field (field) (insert (format " AST_set_parent_list(&x->%s, n);\n" field))) (build-file "parent.c") nescc-1.3.4/src/build-print.el000066400000000000000000000035661177770303300161760ustar00rootroot00000000000000; This file is part of the nesC compiler. ; ; This file is derived from the RC Compiler. It is thus ; Copyright (C) 2000-2001 The Regents of the University of California. ; Changes for nesC are ; Copyright (C) 2002 Intel Corporation ; ; The attached "nesC" software is provided to you under the terms and ; conditions of the GNU General Public License Version 2 as published by the ; Free Software Foundation. ; ; nesC 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 nesC; see the file COPYING. If not, write to ; the Free Software Foundation, 59 Temple Place - Suite 330, ; Boston, MA 02111-1307, USA. ;; Build a function to set the parent and parent_ptr nodes in a tree (load-file "build-basics.el") (defun fill-buffer () (copyright-notice) (mapc #'(lambda (type) (write-print (type-name type) type)) types) (mapc #'(lambda (node) (write-print (node-name node) (assoc (node-type node) types))) nodes)) (defun write-print (name type) (write-print-case name) (let ((tree-fields (remove-if-not #'(lambda (field) (assoc 'tree (field-attributes (assoc field fields)))) (all-type-fields type)))) (if tree-fields (progn (insert (format "{\n %s x = CAST(%s, n);\n\n" name name)) (insert (format " puts(\"%s\");\n" name)) (mapcar #'write-print-field tree-fields) (insert " break;\n}\n")) (insert (format "puts(\"%s\"); break;\n" name))))) (defun write-print-case (name) (insert (format "case kind_%s: " name))) (defun write-print-field (field) (insert (format " pindent(indent); puts(\"%s:\"); AST_print_list(indent + 1, x->%s);\n" field field))) (build-file "print.c") nescc-1.3.4/src/build-types.el000066400000000000000000000203401177770303300161730ustar00rootroot00000000000000 ; This file is part of the nesC compiler. ; ; This file is derived from the RC Compiler. It is thus ; Copyright (C) 2000-2001 The Regents of the University of California. ; Changes for nesC are ; Copyright (C) 2002 Intel Corporation ; ; The attached "nesC" software is provided to you under the terms and ; conditions of the GNU General Public License Version 2 as published by the ; Free Software Foundation. ; ; nesC 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 nesC; see the file COPYING. If not, write to ; the Free Software Foundation, 59 Temple Place - Suite 330, ; Boston, MA 02111-1307, USA. (load-file "build-basics.el") (setq kind_type (concat basename "_kind")) (setq all-type-names (append (mapcar #'type-name types) (mapcar #'node-name nodes))) (setq parent-types (append (mapcar #'(lambda (type) (cons (type-name type) (type-super-type type))) types) (mapcar #'(lambda (node) (cons (node-name node) (node-type node))) nodes))) (defun parentof (name) (cdr (assoc name parent-types))) (setq dfsnumbering nil) ; This is not winning any complexity prizes (defun dfsnumber (name nextid) (let ((myid nextid)) (mapc #'(lambda (child) (if (equal (parentof child) name) (setq nextid (dfsnumber child (1+ nextid))))) all-type-names) (setq dfsnumbering (acons name (cons myid nextid) dfsnumbering)) nextid)) (reduce #'(lambda (nextid type) (if (eq (type-super-type type) '()) (1+ (dfsnumber (type-name type) nextid)) nextid)) types :initial-value (string-to-number (car command-line-args-left))) (setq dfsnumbering (sort dfsnumbering #'(lambda (entry1 entry2) (< (cadr entry1) (cadr entry2))))) (defun fill-buffer () (copyright-notice) (mapc #'write-typedefs types) (mapc #'write-node-typedefs nodes) (ins "typedef enum {\n") ; (mapc #'write-kinds all-type-names) (backward-delete-char 2) (ins "\n} %s;\n" kind_type) (ins "\nextern %s %s_parent_kind[]; /* indexed by kind - kind_node */\n" kind_type basename) (ins "\nextern %s %s_post_kind[]; /* indexed by kind - kind_node */\n" kind_type basename) (ins "\nextern size_t %s_sizeof[]; /* indexed by kind - kind_node */\n" basename) (ins "\nextern type_t %s_typeof[]; /* indexed by kind - kind_node */\n" basename) (mapc #'write-is-test all-type-names) (write-cast)) (defun write-typedefs (type) (ins "typedef struct %s_%s *%s;\n" basename (type-name type) (type-name type))) (defun write-node-typedefs (node) (ins "typedef struct %s_%s *%s;\n" basename (node-type node) (node-name node))) (defun write-kinds (name) (ins " kind_%s = %s,\n" name (cadr (assoc name dfsnumbering))) (ins " postkind_%s = %s,\n" name (cddr (assoc name dfsnumbering)))) ; We should use this one, but I don't feel like changing every is_xxx just now. (defun write-is-test2 (name) (ins "#define IS_%s(x) ((x)->kind >= kind_%s && (x)->kind <= postkind_%s)\n" (upcase (format "%s" name)) name name)) (defun write-is-test (name) (ins "#define is_%s(x) ((x)->kind >= kind_%s && (x)->kind <= postkind_%s)\n" name name name)) (defun write-cast () (ins "typedef struct\n") (ins "{\n") (ins " AST_kind kind;\n") (ins "} *%s_generic;\n\n" basename) (ins "#ifdef __GNUC__\n") (ins "#define %s_CAST(type, x) ({%s_generic tEmPcast = (%s_generic)(x); if (tEmPcast) assert(is_ ## type(tEmPcast)); (type)(tEmPcast); })\n" basename basename basename) (ins "#define %s_CASTPTR(type, x) ({%s_generic *tEmPcast = (%s_generic *)(x); if (tEmPcast && *tEmPcast) assert(is_ ## type(*tEmPcast)); (type *)(tEmPcast); })\n" basename basename basename) (ins "#define %s_CASTSRPTR(type, x) ({%s_generic *tEmPcast = (%s_generic *)(x); if (tEmPcast && *tEmPcast) assert(is_ ## type(*tEmPcast)); (type sameregion *)(tEmPcast); })\n" basename basename basename) (ins "#else\n") (ins "/* Could also generate some code to make this safe */\n") (ins "#define %s_CAST(type, x) ((type)(x))\n" basename) (ins "#define %s_CASTPTR(type, x) ((type *)(x))\n" basename) (ins "#define %s_CASTSRPTR(type, x) ((type sameregion *)(x))\n" basename) (ins "#endif\n")) (build-file "types.h") (defun fill-buffer () (copyright-notice) (mapc #'write-type types) (ins "\n\n") (mapc #'(lambda (type) (write-creator (type-name type) type)) types) (mapc #'(lambda (node) (write-creator (node-name node) (assoc (node-type node) types))) nodes)) (defun write-type (type) (ins "/* %s */\n" (type-documentation type)) (ins "struct %s_%s { /* extends %s */\n" basename (type-name type) (type-super-type type)) (write-fields type) (ins "};\n\n")) (defun write-fields (type) (if (type-super-type type) (write-fields (assoc (type-super-type type) types)) (ins " %s kind;\n" kind_type)) (mapc '(lambda (field-name) (let ((field (assoc field-name fields))) (insert " " (if (assoc 'format (field-attributes field)) (format (field-c-type field) field-name) (format "%s %s%s" (field-c-type field) (if (assoc 'tree (field-attributes field)) "sameregion " "") field-name)) ";\n"))) (type-fields type))) (defun write-creator (name type) (write-creator-header name type) (ins ";\n")) (defun write-creator-header (name type) (ins "%s new_%s(region r" name name) (let ((write-creator-fields #'(lambda (type) (if (type-super-type type) (funcall write-creator-fields (assoc (type-super-type type) types))) (mapcar #'(lambda (field-name) (let ((field (assoc field-name fields))) (if (assoc 'init (field-attributes field)) (ins ", %s %s" (field-c-type field) field-name)))) (type-fields type))))) (funcall write-creator-fields type)) (ins ")")) (build-file "defs.h") (defun fill-buffer () (copyright-notice) (mapc #'(lambda (type) (write-creator-source (type-name type) type)) types) (mapc #'(lambda (node) (write-creator-source (node-name node) (assoc (node-type node) types))) nodes) (ins "\n\n") (write-parent-kinds) (write-post-kinds) (write-sizes) (write-types)) (defun write-creator-source (name type) (write-creator-header name type) (ins "\n{\n") (ins " %s obj = ralloc(r, struct %s_%s);\n\n" name basename (type-name type)) (ins " obj->kind = kind_%s;\n" name) (let ((write-creator-fields #'(lambda (type) (if (type-super-type type) (funcall write-creator-fields (assoc (type-super-type type) types))) (mapcar #'(lambda (field-name) (let ((field (assoc field-name fields))) (cond ((assoc 'init (field-attributes field)) (ins " obj->%s = %s;\n" field-name field-name)) ((assoc 'default (field-attributes field)) (ins " obj->%s = %s;\n" field-name (cadr (assoc 'default (field-attributes field)))))))) (type-fields type))))) (funcall write-creator-fields type)) (ins "\n return obj;\n}\n\n")) (defun write-parent-kinds () (ins "%s %s_parent_kind[] = {\n" kind_type basename) (mapc #'(lambda (dfs_entry) (let ((parent (parentof (car dfs_entry)))) (if parent (ins " kind_%s,\n" parent) (ins " 0,\n")))) dfsnumbering) (ins "};\n\n")) (defun write-post-kinds () (ins "%s %s_post_kind[] = {\n" kind_type basename) (mapc #'(lambda (dfs_entry) (ins " postkind_%s,\n" (car dfs_entry))) dfsnumbering) (ins "};\n\n")) (defun struct-name (name) (let ((node-entry (assoc name nodes))) (if node-entry (node-type node-entry) name))) (defun write-sizes () (ins "size_t %s_sizeof[] = {\n" basename) (mapc #'(lambda (dfs_entry) (ins " sizeof(struct %s_%s),\n" basename (struct-name (car dfs_entry)))) dfsnumbering) (ins "};\n\n")) (defun write-types () (ins "type_t %s_typeof[] = {\n" basename) (mapc #'(lambda (dfs_entry) (ins " rctypeof(struct %s_%s),\n" basename (struct-name (car dfs_entry)))) dfsnumbering) (ins "};\n\n")) (build-file "types.c") nescc-1.3.4/src/build-walk.el000066400000000000000000000033661177770303300157760ustar00rootroot00000000000000; This file is part of the nesC compiler. ; ; This file is derived from the RC Compiler. It is thus ; Copyright (C) 2000-2001 The Regents of the University of California. ; Changes for nesC are ; Copyright (C) 2002 Intel Corporation ; ; The attached "nesC" software is provided to you under the terms and ; conditions of the GNU General Public License Version 2 as published by the ; Free Software Foundation. ; ; nesC 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 nesC; see the file COPYING. If not, write to ; the Free Software Foundation, 59 Temple Place - Suite 330, ; Boston, MA 02111-1307, USA. ;; Build a function to set the parent and parent_ptr nodes in a tree (load-file "build-basics.el") (defun fill-buffer () (copyright-notice) (mapc #'(lambda (type) (write-walk (type-name type) type)) types) (mapc #'(lambda (node) (write-walk (node-name node) (assoc (node-type node) types))) nodes)) (defun write-walk (name type) (let ((tree-fields (remove-if-not #'(lambda (field) (assoc 'tree (field-attributes (assoc field fields)))) (all-type-fields type)))) (if tree-fields (progn (write-walk-case name) (insert (format "{\n %s x = CAST(%s, n);\n\n" name name)) (mapcar #'write-walk-field tree-fields) (insert " break;\n}\n"))))) (defun write-walk-case (name) (insert (format "case kind_%s: " name))) (defun write-walk-field (field) (insert (format " AST_walk_list(s, d, (node *)&x->%s);\n" field field))) (build-file "walk_children.c") nescc-1.3.4/src/c-gperf.h000066400000000000000000000225231177770303300151110ustar00rootroot00000000000000/* C code produced by gperf version 3.0.4 */ /* Command-line: gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k'1,3,8,$' */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) /* The character set is not based on ISO-646. */ error "gperf generated tables don't work with this execution character set. Please report a bug to ." #endif /* This file is part of the nesC compiler. This file is derived from the RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf */ struct resword { char *name; short token; enum rid rid; }; #define TOTAL_KEYWORDS 88 #define MIN_WORD_LENGTH 2 #define MAX_WORD_LENGTH 18 #define MIN_HASH_VALUE 10 #define MAX_HASH_VALUE 151 /* maximum key range = 142, duplicates = 0 */ #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static unsigned int hash (str, len) register const char *str; register unsigned int len; { static unsigned char asso_values[] = { 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 1, 152, 34, 53, 5, 34, 2, 19, 41, 2, 16, 152, 54, 50, 23, 2, 31, 66, 152, 25, 14, 1, 61, 50, 22, 6, 8, 2, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152 }; register int hval = len; switch (hval) { default: hval += asso_values[(unsigned char)str[7]]; /*FALLTHROUGH*/ case 7: case 6: case 5: case 4: case 3: hval += asso_values[(unsigned char)str[2]]; /*FALLTHROUGH*/ case 2: case 1: hval += asso_values[(unsigned char)str[0]]; break; } return hval + asso_values[(unsigned char)str[len - 1]]; } static struct resword wordlist[] = { {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"event", SCSPEC, RID_EVENT | RID_NESC}, {"extern", SCSPEC, RID_EXTERN}, {""}, {"const", TYPE_QUAL, const_qualifier}, {"__const", TYPE_QUAL, const_qualifier}, {"nx_union", NX_UNION, NORID}, {""}, {"__const__", TYPE_QUAL, const_qualifier}, {"nx_struct", NX_STRUCT, NORID}, {"continue", CONTINUE, NORID}, {"__complex__", TYPESPEC, RID_COMPLEX}, {"int", TYPESPEC, RID_INT}, {"else", ELSE, NORID}, {"__complex", TYPESPEC, RID_COMPLEX}, {"extends", EXTENDS, RID_NESC}, {"case", CASE, NORID}, {""}, {"__imag__", IMAGPART, NORID}, {""}, {"__inline", SCSPEC, RID_INLINE}, {"__inline__", SCSPEC, RID_INLINE}, {"__extension__", EXTENSION, NORID}, {"__typeof__", TYPEOF, NORID}, {"interface", INTERFACE, NORID}, {"return", RETURN, NORID}, {"norace", SCSPEC, RID_NORACE}, {"__real__", REALPART, NORID}, {"if", IF, NORID}, {"switch", SWITCH, NORID}, {""}, {"component", COMPONENT, NORID}, {"sizeof", SIZEOF, NORID}, {""}, {"__asm__", ASM_KEYWORD, NORID}, {""}, {"while", WHILE, NORID}, {"struct", STRUCT, NORID}, {"configuration", CONFIGURATION, NORID}, {"__typeof", TYPEOF, NORID}, {"new", NEW, RID_NESC}, {"as", AS, RID_NESC}, {"short", TYPESPEC, RID_SHORT}, {"async", SCSPEC, RID_ASYNC | RID_NESC}, {"__restrict", TYPE_QUAL, restrict_qualifier}, {"components", COMPONENTS, RID_NESC}, {"generic", GENERIC, NORID}, {"float", TYPESPEC, RID_FLOAT}, {"includes", INCLUDES, NORID}, {"abstract", ABSTRACT, RID_NESC}, {"static", SCSPEC, RID_STATIC}, {"__signed__", TYPESPEC, RID_SIGNED}, {"default", DEFAULT, NORID}, {"__label__", LABEL, NORID}, {"__asm", ASM_KEYWORD, NORID}, {"__imag", IMAGPART, NORID}, {"module", MODULE, NORID}, {""}, {"do", DO, NORID}, {"char", TYPESPEC, RID_CHAR}, {"command", SCSPEC, RID_COMMAND | RID_NESC}, {"auto", SCSPEC, RID_AUTO}, {""}, {"for", FOR, NORID}, {"task", SCSPEC, RID_TASK | RID_NESC}, {"inline", SCSPEC, RID_INLINE}, {""}, {"atomic", ATOMIC, NORID}, {"goto", GOTO, NORID}, {"__alignof__", ALIGNOF, NORID}, {"__volatile", TYPE_QUAL, volatile_qualifier}, {"__volatile__", TYPE_QUAL, volatile_qualifier}, {"uses", USES, RID_NESC}, {"__real", REALPART, NORID}, {"asm", ASM_KEYWORD, NORID}, {"union", UNION, NORID}, {"post", POST, RID_NESC}, {""}, {""}, {""}, {""}, {"enum", ENUM, NORID}, {"__signed", TYPESPEC, RID_SIGNED}, {"typeof", TYPEOF, NORID}, {"typedef", SCSPEC, RID_TYPEDEF}, {"__alignof", ALIGNOF, NORID}, {"signed", TYPESPEC, RID_SIGNED}, {"offsetof", OFFSETOF, NORID}, {"long", TYPESPEC, RID_LONG}, {""}, {""}, {"implementation", IMPLEMENTATION, RID_NESC}, {"__attribute", ATTRIBUTE, NORID}, {"__attribute__", ATTRIBUTE, NORID}, {"double", TYPESPEC, RID_DOUBLE}, {"void", TYPESPEC, RID_VOID}, {""}, {""}, {"__builtin_offsetof", OFFSETOF, NORID}, {""}, {"call", CALL, RID_NESC}, {""}, {"signal", SIGNAL, RID_NESC}, {"volatile", TYPE_QUAL, volatile_qualifier}, {""}, {"break", BREAK, NORID}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"register", SCSPEC, RID_REGISTER}, {""}, {""}, {"__builtin_va_arg", VA_ARG, NORID}, {""}, {""}, {""}, {""}, {""}, {"provides", PROVIDES, RID_NESC}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {"unsigned", TYPESPEC, RID_UNSIGNED} }; #ifdef __GNUC__ __inline #if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__ __attribute__ ((__gnu_inline__)) #endif #endif struct resword * is_reserved_word (str, len) register const char *str; register unsigned int len; { if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) { register int key = hash (str, len); if (key <= MAX_HASH_VALUE && key >= 0) { register const char *s = wordlist[key].name; if (*str == *s && !strcmp (str + 1, s + 1)) return &wordlist[key]; } } return 0; } nescc-1.3.4/src/c-lex-int.h000066400000000000000000000020471177770303300153650ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef C_LEX_INT_H #define C_LEX_INT_H /* Private parser-lexer interface */ struct yystype; int yylex(struct yystype *lvalp); #endif nescc-1.3.4/src/c-lex-state.h000066400000000000000000000014171177770303300157130ustar00rootroot00000000000000#ifndef C_LEX_STATE_H #define C_LEX_STATE_H #include "c-parse.h" extern int input_file_stack_tick; struct file_stack { struct file_stack *next; struct location l; }; struct cpp_print { FILE *outf; /* Stream to write to. */ const struct cpp_token *prev; /* Previous token. */ const struct cpp_token *source; /* Source token for spacing. */ int src_line; /* Line number currently being written. */ unsigned char printed; /* Nonzero if something output at line. */ bool first_time; /* pp_file_change hasn't been called yet. */ bool avoid_paste; }; struct lex_state { struct cpp_reader *finput; struct line_maps *line_map; struct file_stack *input; int token_s1, token_s2; struct yystype token_l1, token_l2; struct cpp_print pp; }; #endif nescc-1.3.4/src/c-lex.c000066400000000000000000000571101177770303300145710ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include #include #include "c-lex.h" #include "c-lex-int.h" #include "c-parse.h" #include "c-parse.tab.h" #include "semantics.h" #include "constants.h" #include "nesc-cpp.h" #include "machine.h" #include "nesc-paths.h" #include "gcc-cpp.h" static char_array doc_string; static location doc_location; DECLARE_ARRAY(string_array, cpp_string) DEFINE_ARRAY(string_array, cpp_string) static string_array string_sequence; /* Last token read. Used in syntax error reports. */ static const cpp_token *last_token; location dummy_location, toplevel_location; int input_file_stack_tick; /* Location cache handling */ static location last_allocated_location; location make_location(struct location l) { if (l.lineno == last_allocated_location->lineno && l.filename == last_allocated_location->filename && l.container == last_allocated_location->container && l.in_system_header == last_allocated_location->in_system_header) return last_allocated_location; last_allocated_location = ralloc(parse_region, struct location); *last_allocated_location = l; return last_allocated_location; } location new_location(const char *filename, int lineno) { location l = ralloc(parse_region, struct location); l->filename = filename; l->lineno = lineno; l->in_system_header = FALSE; return l; } void set_lex_location(location loc) { const struct line_map *new_line; new_line = linemap_add(current.lex.line_map, LC_RENAME, 0, loc->filename, loc->lineno); current.lex.input->l = *loc; } location last_location(void) { return make_location(current.lex.input->l); } static void push_input(void) { /* Pushing to a new file. */ struct file_stack *p = ralloc(current.fileregion, struct file_stack); p->next = current.lex.input; p->l.filename = NULL; p->l.lineno = 0; p->l.in_system_header = FALSE; p->l.container = NULL; current.lex.input = p; input_file_stack_tick++; } static void pop_input(void) { current.lex.input = current.lex.input->next; input_file_stack_tick++; } static void cb_file_change(cpp_reader *reader, const struct line_map *new_map) { if (new_map == NULL) return; if (new_map->reason == LC_ENTER) { if (!MAIN_FILE_P(new_map)) { int included_at = LAST_SOURCE_LINE(new_map - 1); current.lex.input->l.lineno = included_at; } push_input(); } else if (new_map->reason == LC_LEAVE) pop_input(); current.lex.input->l.in_system_header = new_map->sysp != 0; /* The filename must last till the end of compilation */ current.lex.input->l.filename = rstrdup(permanent, new_map->to_file); current.lex.input->l.lineno = new_map->to_line; } static void cb_line_change(cpp_reader *reader, const cpp_token *token, int parsing_args) { if (token->type != CPP_EOF && !parsing_args) { source_location loc = token->src_loc; const struct line_map *map = linemap_lookup(current.lex.line_map, loc); current.lex.input->l.lineno = SOURCE_LINE(map, loc); save_pp_line_change(reader, token); } } /* Do not insert generated code into the source, instead, include it. This allows us to build gcc automatically even for targets that need to add or modify the reserved keyword lists. */ #include "c-gperf.h" void init_lex(void) { static struct location dummy, toplevel; dummy.lineno = 0; dummy.filename = ""; dummy.in_system_header = FALSE; dummy_location = last_allocated_location = &dummy; toplevel.filename = ""; toplevel.lineno = 0; toplevel.in_system_header = FALSE; toplevel_location = &toplevel; string_sequence = new_string_array(parse_region, 16); doc_string = new_char_array(parse_region, 2048); } static cpp_reader *current_reader(void) { return current.lex.finput; } static void start_lex_common(source_language l) { cpp_options *cpp_opts; cpp_callbacks *cpp_cbacks; switch (l) { case l_interface: case l_component: current.lex.token_s1 = DISPATCH_NESC; break; case l_c: current.lex.token_s1 = DISPATCH_C; break; case l_parameter: current.lex.token_s1 = DISPATCH_PARM; break; case l_type: current.lex.token_s1 = DISPATCH_TYPE; break; default: assert(0); break; } current.lex.token_s2 = -1; current.lex.line_map = ralloc(current.fileregion, struct line_maps); linemap_init(current.lex.line_map); current.lex.line_map->trace_includes = print_include_names; current.lex.finput = cpp_create_reader(CLK_GNUC89, NULL, current.lex.line_map); current.lex.pp.outf = NULL; cpp_opts = cpp_get_options(current_reader()); cpp_opts->discard_comments = 0; cpp_opts->dollars_in_ident = 0; cpp_opts->warn_long_long = 0; cpp_opts->wchar_precision = CHAR_BIT * target->wchar_t_size; cpp_opts->int_precision = CHAR_BIT * target->tint.size; cpp_opts->precision = CHAR_BIT * target->tlong_long.size; cpp_opts->unsigned_char = !flag_signed_char; cpp_opts->unsigned_wchar = !target->wchar_t_signed; cpp_opts->cplusplus_comments = 1; cpp_opts->bytes_big_endian = target->big_endian; cpp_opts->warnings_are_errors = warnings_are_errors; cpp_opts->inhibit_warnings = inhibit_warnings; cpp_opts->trigraphs = flag_trigraphs; cpp_opts->warn_comments = warn_comments; cpp_opts->warn_trigraphs = warn_trigraphs; cpp_opts->warn_unused_macros = warn_unused_macros; cpp_opts->warn_endif_labels = warn_endif_labels || pedantic; cpp_opts->warn_system_headers = warn_system_headers; cpp_opts->warn_undef = warn_undef; cpp_opts->warn_missing_include_dirs = warn_missing_include_dirs; cpp_opts->warn_multichar = warn_multichar; cpp_opts->warn_traditional = warn_traditional; cpp_opts->pedantic_errors = flag_pedantic_errors; cpp_opts->pedantic = pedantic; cpp_opts->print_include_names = print_include_names; cpp_init_iconv(current_reader()); cpp_init_special_builtins(current_reader()); cpp_cbacks = cpp_get_callbacks(current_reader()); cpp_cbacks->file_change = cb_file_change; cpp_cbacks->line_change = cb_line_change; set_cpp_include_path(); } static void setup_macros(void) { cb_file_change(current_reader(), linemap_add(current.lex.line_map, LC_ENTER, 0, "", 0)); start_macro_saving(); cb_file_change(current_reader(), linemap_add(current.lex.line_map, LC_LEAVE, 0, NULL, 0)); } bool start_lex(source_language l, const char *path) { start_lex_common(l); path = cpp_read_main_file(current_reader(), path); setup_macros(); return path != NULL; } void start_lex_string(source_language l, const char *string) { int slen = strlen(string); char *scopy = rstralloc(current.fileregion, slen + 2); /* lex input must be \n terminated */ memcpy(scopy, string, slen); scopy[slen] = '\n'; scopy[slen + 1] = '\0'; start_lex_common(l); cpp_push_buffer(current_reader(), (const unsigned char *)scopy, slen + 1, TRUE); setup_macros(); } void end_lex(void) { errorcount += cpp_finish(current_reader(), NULL); cpp_destroy(current_reader()); current.lex.finput = NULL; } static cstring make_token_cstring(const cpp_token *token) { unsigned int len = cpp_token_len(token) + 1; cstring tokcs = alloc_cstring(parse_region, len); unsigned char *end; end = cpp_spell_token(current_reader(), token, (unsigned char *)tokcs.data, FALSE); end[0] = '\0'; tokcs.length = (char *)end - tokcs.data; return tokcs; } static void handle_comment(const cpp_token *token) { const cpp_string *comment = &token->val.str; bool new_docstring = FALSE; if (!strncmp((char *)comment->text, "/**", 3)) new_docstring = TRUE; else if (!strncmp((char *)comment->text, "///", 3)) { if (doc_location && last_location()->filename == doc_location->filename && last_location()->lineno + 1 == doc_location->lineno) memcpy(char_array_extend(doc_string, comment->len), comment->text, comment->len); else new_docstring = TRUE; } if (new_docstring) { if (warn_unexpected_docstring && char_array_length(doc_string)) warning_with_location(doc_location, "discarding unexpected docstring"); char_array_reset(doc_string); memcpy(char_array_extend(doc_string, comment->len), comment->text, comment->len); doc_location = last_location(); } } bool get_raw_docstring(const char **docs, location *docl) { if (char_array_length(doc_string)) { *char_array_extend(doc_string, 1) = '\0'; *docs = char_array_data(doc_string); *docl = doc_location; char_array_reset(doc_string); return TRUE; } else return FALSE; } /* Convert a series of STRING and/or WSTRING tokens into a string, performing string constant concatenation. TOK is the first of these. VALP is the location to write the string into. This is unfortunately more work than it should be. If any of the strings in the series has an L prefix, the result is a wide string (6.4.5p4). Whether or not the result is a wide string affects the meaning of octal and hexadecimal escapes (6.4.4.4p6,9). But escape sequences do not continue across the boundary between two strings in a series (6.4.5p7), so we must not lose the boundaries. Therefore cpp_interpret_string takes a vector of cpp_string structures, which we must arrange to provide. */ static void lex_string(const cpp_token *tok, struct yystype *lvalp) { const cpp_token *first = tok; bool wide = FALSE; location first_loc = last_location(); cpp_string istr; cstring cstr; string_cst string_components = NULL, *next_sc = &string_components; /* Collect all consecutive string tokens */ string_array_reset(string_sequence); do { string_cst one_string = new_string_cst(parse_region, last_location(), make_token_cstring(tok)); *next_sc = one_string; next_sc = CASTPTR(string_cst, &one_string->next); *string_array_extend(string_sequence, 1) = tok->val.str; if (tok->type == CPP_WSTRING) wide = true; retry: if (tok != first) save_pp_token(tok); tok = cpp_get_token(current_reader()); if (tok->type == CPP_PADDING) goto retry; if (tok->type == CPP_COMMENT) { handle_comment(tok); goto retry; } } while (tok->type == CPP_STRING || tok->type == CPP_WSTRING); /* We have read one more token than we want. */ _cpp_backup_tokens(current_reader(), 1); if (cpp_interpret_string(current_reader(), string_array_data(string_sequence), string_array_length(string_sequence), &istr, wide)) { cstr = make_cstring(parse_region, (char *)istr.text, istr.len - 1); free((char *)istr.text); } else { /* Use empty string as the value in case of error. Assumes the widest supported wchar_t is 32 bits */ cstr = make_cstring(parse_region, "\0\0\0", wide ? type_size_int(wchar_type) : 1); } lvalp->u.string = fold_lexical_string(first_loc, string_components, cstr, wide); } static void lex_charconst(const cpp_token *token, struct yystype *lvalp) { cppchar_t result; unsigned int chars_seen; int unsignedp; result = cpp_interpret_charconst(current_reader(), token, &chars_seen, &unsignedp); lvalp->u.constant = fold_lexical_char(last_location(), make_token_cstring(token), token->type == CPP_WCHAR, result); } /* Interpret TOKEN, an integer with FLAGS as classified by cpplib. */ static lexical_cst interpret_integer(const cpp_token *token, unsigned int flags) { type t; cpp_num integer; cpp_options *options = cpp_get_options(current_reader()); integer = cpp_interpret_integer(current_reader(), token, flags); integer = cpp_num_sign_extend(integer, options->precision); if (flags & CPP_N_UNSIGNED || /* what earlier nesC versions did, not correct as per C89/C99: In both C89 and C99, octal and hex constants may be signed or unsigned, whichever fits tighter. */ (flags & CPP_N_RADIX) != CPP_N_DECIMAL) if ((flags & CPP_N_WIDTH) == CPP_N_SMALL) t = unsigned_int_type; else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM) t = unsigned_long_type; else t = unsigned_long_long_type; else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL) t = int_type; else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM) t = long_type; else t = long_long_type; /* We're assuming that the our largest int type is the same as cpp's HOST_WIDE_INT, and then ignoring the high field as we only handle values that fit in largest_uint anyway */ assert(sizeof(HOST_WIDE_INT) == sizeof(largest_uint)); return fold_lexical_int(t, last_location(), make_token_cstring(token), (flags & CPP_N_IMAGINARY) != 0, integer.low, integer.overflow); } /* Interpret TOKEN, a floating point number with FLAGS as classified by cpplib. This is a very hacky, partial implementation. */ static lexical_cst interpret_float(const cpp_token *token, unsigned int flags) { type t; /* Give up on _Fract and _Accum. */ if (flags & CPP_N_FRACT || flags & CPP_N_ACCUM) return NULL; /* Give up on decimal and machine dependent values */ if (flags & CPP_N_DFLOAT || flags & CPP_N_WIDTH_MD) return NULL; /* Decode type based on width and properties. */ if ((flags & CPP_N_WIDTH) == CPP_N_LARGE) t = long_double_type; else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL/* || flag_single_precision_constant*/) t = float_type; else t = double_type; if (flags & CPP_N_IMAGINARY) t = make_complex_type(t); return fold_lexical_real(t, last_location(), make_token_cstring(token)); } static bool is_nesc_keyword(struct resword *word) { return word->token != TYPE_QUAL && (word->rid & RID_NESC); } static int interpret_name(const cpp_token *token, struct yystype *lvalp) { ht_identifier *id = HT_NODE(token->val.node); struct resword *ptr; data_declaration decl; int kind = IDENTIFIER; /* Try to recognize a keyword. Uses minimum-perfect hash function */ if ((ptr = is_reserved_word(id->str, id->len)) && !(is_nesc_keyword(ptr) && current.language == l_c)) { if (ptr->token == TYPE_QUAL) lvalp->u.itoken.i = ptr->rid; else lvalp->u.itoken.i = ptr->rid & ~RID_NESC; /* Even if we decided to recognize asm, still perhaps warn. */ if (pedantic && (ptr->token == ASM_KEYWORD || ptr->token == TYPEOF || ptr->rid == RID_INLINE) && id->str[0] != '_') pedwarn ("ANSI does not permit the keyword `%s'", id->str); return ptr->token; } /* If we did not find a keyword, look for a typename */ if (target->token) kind = target->token((char *)id->str, id->len, lvalp); if (kind == IDENTIFIER) { lvalp->idtoken.location = last_location(); lvalp->idtoken.id = make_token_cstring(token); decl = lookup_id(lvalp->idtoken.id.data, FALSE); lvalp->idtoken.decl = decl; if (decl) switch (decl->kind) { case decl_typedef: kind = TYPENAME; break; case decl_magic_string: kind = MAGIC_STRING; break; case decl_component_ref: kind = COMPONENTREF; break; default: break; } } return kind; } static int lex_token(struct yystype *lvalp) { const cpp_token *tok; enum cpp_ttype type; retry: last_token = tok = cpp_get_token(current_reader()); save_pp_token(tok); type = tok->type; lvalp->u.itoken.location = last_location(); lvalp->u.itoken.i = 0; switch (type) { case CPP_EOF: return -1; case CPP_PADDING: goto retry; case CPP_COMMENT: handle_comment(tok); goto retry; case CPP_NAME: return interpret_name(tok, lvalp); case CPP_NUMBER: { unsigned int flags = cpp_classify_number(current_reader(), tok); lexical_cst num = NULL; switch (flags & CPP_N_CATEGORY) { case CPP_N_INTEGER: num = interpret_integer(tok, flags); break; case CPP_N_FLOATING: num = interpret_float (tok, flags); break; } /* cpplib has issued an error or we ran into something we don't support (e.g. fixed point), pretend the constant was 0 */ if (num == NULL) num = fold_lexical_int(int_type, last_location(), make_token_cstring(tok), FALSE, 0, FALSE); lvalp->u.constant = num; return CONSTANT; } case CPP_HASH: case CPP_PASTE: case CPP_SCOPE: case CPP_DEREF_STAR: case CPP_DOT_STAR: { unsigned char name[4]; *cpp_spell_token(current_reader(), tok, name, true) = 0; error("stray %qs in program", name); } goto retry; case CPP_OTHER: { cppchar_t c = tok->val.str.text[0]; if (c == '"' || c == '\'') error("missing terminating %c character", (int) c); else if (ISGRAPH (c)) error("stray %qc in program", (int) c); else error("stray %<\\%o%> in program", (int) c); } goto retry; case CPP_CHAR: case CPP_WCHAR: lex_charconst(tok, lvalp); return CONSTANT; case CPP_STRING: case CPP_WSTRING: lex_string(tok, lvalp); return STRING; case CPP_PRAGMA: goto retry; /* Translate to the parser's symbols - somewhat of a legacy effect, but having the characters does make the parser more readable... */ case CPP_EQ: return '='; case CPP_NOT: return '!'; case CPP_GREATER: return '>'; case CPP_LESS: return '<'; case CPP_PLUS: return '+'; case CPP_MINUS: return '-'; case CPP_MULT: return '*'; case CPP_DIV: return '/'; case CPP_MOD: return '%'; case CPP_AND: return '&'; case CPP_OR: return '|'; case CPP_XOR: return '^'; case CPP_RSHIFT: return RSHIFT; case CPP_LSHIFT: return LSHIFT; case CPP_COMPL: return '~'; case CPP_AND_AND: return ANDAND; case CPP_OR_OR: return OROR; case CPP_QUERY: return '?'; case CPP_COLON: return ':'; case CPP_COMMA: return ','; case CPP_OPEN_PAREN: return '('; case CPP_CLOSE_PAREN: return ')'; case CPP_EQ_EQ: lvalp->u.itoken.i = kind_eq; return EQCOMPARE; case CPP_NOT_EQ: lvalp->u.itoken.i = kind_ne; return EQCOMPARE; case CPP_GREATER_EQ: lvalp->u.itoken.i = kind_geq; return ARITHCOMPARE; case CPP_LESS_EQ: lvalp->u.itoken.i = kind_leq; return ARITHCOMPARE; case CPP_PLUS_EQ: lvalp->u.itoken.i = kind_plus_assign; return ASSIGN; case CPP_MINUS_EQ: lvalp->u.itoken.i = kind_minus_assign; return ASSIGN; case CPP_MULT_EQ: lvalp->u.itoken.i = kind_times_assign; return ASSIGN; case CPP_DIV_EQ: lvalp->u.itoken.i = kind_divide_assign; return ASSIGN; case CPP_MOD_EQ: lvalp->u.itoken.i = kind_modulo_assign; return ASSIGN; case CPP_AND_EQ: lvalp->u.itoken.i = kind_bitand_assign; return ASSIGN; case CPP_OR_EQ: lvalp->u.itoken.i = kind_bitor_assign; return ASSIGN; case CPP_XOR_EQ: lvalp->u.itoken.i = kind_bitxor_assign; return ASSIGN; case CPP_RSHIFT_EQ: lvalp->u.itoken.i = kind_rshift_assign; return ASSIGN; case CPP_LSHIFT_EQ: lvalp->u.itoken.i = kind_lshift_assign; return ASSIGN; case CPP_OPEN_SQUARE: return '['; case CPP_CLOSE_SQUARE: return ']'; case CPP_OPEN_BRACE: return '{'; case CPP_CLOSE_BRACE: return '}'; case CPP_SEMICOLON: return ';'; case CPP_ELLIPSIS: return ELLIPSIS; case CPP_PLUS_PLUS: return PLUSPLUS; case CPP_MINUS_MINUS: return MINUSMINUS; case CPP_DEREF: return POINTSAT; case CPP_FERED: return TASTNIOP; case CPP_DOT: return '.'; case CPP_ATSIGN: return '@'; /* These tokens should not be visible outside cpplib. */ case CPP_HEADER_NAME: case CPP_MACRO_ARG: default: assert(0); } } /* We keep a 2-element queue of pre-read tokens to deal with the lookahead of checking for typedef references in components, stored in token_s1/l1, token_s2/l2. - gettoken returns the next token from the queue, or reads the next token if the queue is empty. - pushtoken pushes a token onto the queue - yylex does the special component.typedef processing. This code could be optimised to use token_[sl][12] directly in yylex, but then it would be even more confusing. It would be nicer to just use _cpp_backup_tokens, but the comments about pushing back more than one token when a macro is involed, and the corresponding abort in the implementation are too worrying... */ static int poptoken(struct yystype *lvalp) { /* Check the queue first */ if (current.lex.token_s1 != -1) { int token = current.lex.token_s1; *lvalp = current.lex.token_l1; current.lex.token_s1 = current.lex.token_s2; current.lex.token_l1 = current.lex.token_l2; current.lex.token_s2 = -1; return token; } else return lex_token(lvalp); } static void pushtoken(int t, struct yystype *lvalp) { /* Save token on our 2-element queue */ if (current.lex.token_s1 == -1) { current.lex.token_s1 = t; current.lex.token_l1 = *lvalp; } else { current.lex.token_s2 = t; current.lex.token_l2 = *lvalp; } } int yylex(struct yystype *lvalp) { int token = poptoken(lvalp); /* Detect component-ref '.' identifier, where the identifier denotes a typedef in the referenced component -- we can't do this in the parser as the resulting grammer is not context-free. So instead we detect it here, and mark the component-ref as special. */ if (token == COMPONENTREF) { struct yystype val1; int token1 = poptoken(&val1); token = IDENTIFIER; /* default to regular identifier */ if (token1 == '.') { struct yystype val2; int token2 = poptoken(&val2); if (token2 == IDENTIFIER || token2 == TYPENAME || token2 == MAGIC_STRING) { data_declaration cref = lvalp->idtoken.decl; data_declaration fdecl = env_lookup(cref->ctype->env->id_env, val2.idtoken.id.data, TRUE); if (fdecl && fdecl->kind == decl_typedef) { /* The special typedef reference case. Fix the tokens */ token = COMPONENTREF; token2 = IDENTIFIER; val2.idtoken.decl = fdecl; } } pushtoken(token1, &val1); pushtoken(token2, &val2); } else pushtoken(token1, &val1); } return token; } void yyerror(char *string) { char buf[200]; enum cpp_ttype ttype; unsigned char *ttext; if (!last_token) { error(string); return; } ttype = last_token->type; if (ttype != CPP_EOF) ttext = cpp_token_as_text(current_reader(), last_token); strcpy (buf, string); if ((ttype = last_token->type) == CPP_EOF) strcat(buf, " at end of input"); else if (ttype == CPP_STRING || ttype == CPP_WSTRING) strcat(buf, " before string constant"); else if (ttype == CPP_CHAR || ttype == CPP_WCHAR) strcat(buf, " before character constant"); else if (ttext[0] < 040 || ttext[0] >= 0177) sprintf(buf + strlen (buf), " before character 0%o", ttext[0]); else strcat (buf, " before `%s'"); error(buf, ttext); } /* Function used when yydebug is set, to print a token in more detail. */ void yyprint (FILE *file, int yychar, YYSTYPE yylval) { switch (yychar) { case IDENTIFIER: fprintf(file, " '%s'", yylval.idtoken.id.data); break; } } nescc-1.3.4/src/c-lex.h000066400000000000000000000044761177770303300146050ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef C_LEX_H #define C_LEX_H typedef enum { l_c, l_interface, l_component, l_implementation, l_parameter, l_type, l_any } source_language; typedef struct location { const char *filename; struct nesc_declaration *container; /* for instantiated code only */ unsigned long lineno; bool in_system_header; } *location; extern location dummy_location, toplevel_location; location new_location(const char *filename, int lineno); location make_location(struct location l); void set_lex_location(location l); location last_location(void); enum rid { RID_UNUSED, RID_INT, RID_CHAR, RID_FLOAT, RID_DOUBLE, RID_VOID, RID_UNSIGNED, RID_SHORT, RID_LONG, RID_SIGNED, RID_COMPLEX, RID_LASTTYPE, RID_INLINE = RID_LASTTYPE, RID_DEFAULT, RID_NORACE, RID_AUTO, RID_STATIC, RID_EXTERN, RID_REGISTER, RID_TYPEDEF, RID_COMMAND, RID_EVENT, RID_TASK, RID_ASYNC, RID_MAX, RID_NESC = 256 }; #define NORID RID_UNUSED void init_lex(void); bool start_lex(source_language l, const char *path); void start_lex_string(source_language l, const char *string); void end_lex(void); int lex_getc(void); void lex_ungetc(int c); void skip_c_comment(void); void skip_cpp_comment(void); /** * Retrieve the latest code documentation string. This is used to * place the documentation into the appropriate data_declaration. **/ bool get_raw_docstring(const char **docs, location *docl); #endif nescc-1.3.4/src/c-parse.gperf000066400000000000000000000054151177770303300157750ustar00rootroot00000000000000%{ /* This file is part of the nesC compiler. This file is derived from the RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf */ %} struct resword { char *name; short token; enum rid rid; }; %% __alignof, ALIGNOF, NORID __alignof__, ALIGNOF, NORID __asm, ASM_KEYWORD, NORID __asm__, ASM_KEYWORD, NORID __attribute, ATTRIBUTE, NORID __attribute__, ATTRIBUTE, NORID __complex, TYPESPEC, RID_COMPLEX __complex__, TYPESPEC, RID_COMPLEX __const, TYPE_QUAL, const_qualifier __const__, TYPE_QUAL, const_qualifier __extension__, EXTENSION, NORID __imag, IMAGPART, NORID __imag__, IMAGPART, NORID __inline, SCSPEC, RID_INLINE __inline__, SCSPEC, RID_INLINE __label__, LABEL, NORID __real, REALPART, NORID __real__, REALPART, NORID __signed, TYPESPEC, RID_SIGNED __signed__, TYPESPEC, RID_SIGNED __typeof, TYPEOF, NORID __typeof__, TYPEOF, NORID __volatile, TYPE_QUAL, volatile_qualifier __volatile__, TYPE_QUAL, volatile_qualifier __builtin_va_arg, VA_ARG, NORID asm, ASM_KEYWORD, NORID auto, SCSPEC, RID_AUTO break, BREAK, NORID case, CASE, NORID char, TYPESPEC, RID_CHAR continue, CONTINUE, NORID default, DEFAULT, NORID do, DO, NORID double, TYPESPEC, RID_DOUBLE else, ELSE, NORID enum, ENUM, NORID extern, SCSPEC, RID_EXTERN float, TYPESPEC, RID_FLOAT for, FOR, NORID goto, GOTO, NORID if, IF, NORID inline, SCSPEC, RID_INLINE int, TYPESPEC, RID_INT long, TYPESPEC, RID_LONG offsetof, OFFSETOF, NORID __builtin_offsetof, OFFSETOF, NORID register, SCSPEC, RID_REGISTER return, RETURN, NORID short, TYPESPEC, RID_SHORT signed, TYPESPEC, RID_SIGNED sizeof, SIZEOF, NORID static, SCSPEC, RID_STATIC struct, STRUCT, NORID switch, SWITCH, NORID typedef, SCSPEC, RID_TYPEDEF typeof, TYPEOF, NORID union, UNION, NORID unsigned, TYPESPEC, RID_UNSIGNED void, TYPESPEC, RID_VOID while, WHILE, NORID nx_union, NX_UNION, NORID nx_struct, NX_STRUCT, NORID define(K, `$1, $2, $3') include(nesc-keywords.h) define(Q, `$1, $2, $3') include(qualifiers.h) nescc-1.3.4/src/c-parse.h000066400000000000000000000052151177770303300151170ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef C_PARSE_H #define C_PARSE_H #include "AST.h" struct yystype { union { void *ptr; asm_operand asm_operand; asm_stmt asm_stmt; attribute attribute; gcc_attribute gcc_attribute; nesc_attribute nesc_attribute; lexical_cst constant; declaration decl; declarator declarator; nested_declarator nested; expression expr; id_label id_label; label label; node node; statement stmt; conditional_stmt cstmt; for_stmt for_stmt; string string; type_element telement; asttype type; word word; designator designator; interface_ref iref; component_ref cref; connection conn; endpoint ep; parameterised_identifier pid; implementation impl; environment env; dd_list fields; char *docstring; tag_declaration tdecl; struct { location location; int i; } itoken; struct { expression expr; int i; } iexpr; struct { statement stmt; int i; } istmt; } u; struct { location location; cstring id; data_declaration decl; } idtoken; bool abstract; }; #define YYSTYPE struct yystype /* Region in which to allocate parse structures. Idea: the AST user can set this to different regions at appropriate junctures depending on what's being done with the AST */ extern region parse_region; /* TRUE if currently parsing an expression that will not be evaluated (argument to alignof, sizeof. Currently not typeof though that could be considered a bug) */ bool unevaluated_expression(void); node parse(void) deletes; /* Effects: parses the file set up via set_input/start_lex Returns: the file's parse tree (may be NULL in some error cases) */ declaration make_error_decl(void); declarator make_identifier_declarator(location l, cstring id); #endif nescc-1.3.4/src/c-parse.tab.c000066400000000000000000010362641177770303300156700ustar00rootroot00000000000000 /* A Bison parser, made by GNU Bison 2.4.1. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This program 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 3 of the License, or (at your option) any later version. This program 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 this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.4.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Copy the first part of user declarations. */ /* Line 189 of yacc.c */ #line 33 "c-parse.y" #include #include #include #include "parser.h" #include "c-parse.h" #include "c-lex.h" #include "c-lex-int.h" #include "semantics.h" #include "expr.h" #include "stmt.h" #include "init.h" #include "nesc-semantics.h" #include "nesc-interface.h" #include "nesc-component.h" #include "nesc-configuration.h" #include "nesc-module.h" #include "nesc-env.h" #include "nesc-c.h" #include "nesc-attributes.h" #include "nesc-task.h" #include "nesc-cpp.h" #include "attributes.h" #include "machine.h" int yyparse(void) deletes; void yyerror(); /* Like YYERROR but do call yyerror. */ #define YYERROR1 { yyerror ("syntax error"); YYERROR; } /* Cause the `yydebug' variable to be defined. */ #define YYDEBUG 1 /* Line 189 of yacc.c */ #line 248 "c-parse.y" /* Region in which to allocate parse structures. Idea: the AST user can set this to different regions at appropriate junctures depending on what's being done with the AST */ region parse_region; /* We'll see this a LOT below */ #define pr parse_region /* Number of statements (loosely speaking) and compound statements seen so far. */ static int stmt_count; static int compstmt_count; #ifdef RC_ADJUST static size_t rc_adjust_yystype(void *x, int by) { struct yystype *p = x; RC_ADJUST_PREAMBLE; RC_ADJUST(p->u.ptr, by); RC_ADJUST(p->idtoken.location.filename, by); RC_ADJUST(p->idtoken.id.data, by); RC_ADJUST(p->idtoken.decl, by); return sizeof *p; } static void rc_update_yystype(struct yystype *old, struct yystype *new) { regionid base = regionidof(old); RC_UPDATE(base, old->u.ptr, new->u.ptr); RC_UPDATE(base, old->idtoken.location.filename, new->idtoken.location.filename); RC_UPDATE(base, old->idtoken.id.data, new->idtoken.id.data); RC_UPDATE(base, old->idtoken.decl, new->idtoken.decl); } #endif /* A stack of declspecs and attributes for use during parsing */ typedef struct spec_stack *spec_stack; struct spec_stack { type_element parentptr declspecs; attribute parentptr attributes; spec_stack sameregion next; }; struct parse_state { /* Stack of saved values of current_declspecs and prefix_attributes. */ /* In an ideal world, we would be able to eliminate most rc ops for declspec_stack and ds_region assignments. Seems tricky though. */ spec_stack declspec_stack; region ds_region; /* List of types and structure classes of the current declaration. */ type_element declspecs; attribute attributes; /* >0 if currently parsing an expression that will not be evaluated (argument to alignof, sizeof. Currently not typeof though that could be considered a bug) */ int unevaluated_expression; } pstate; bool unevaluated_expression(void) { return pstate.unevaluated_expression != 0; } /* Pop top entry of declspec_stack back into current_declspecs, prefix_attributes */ static void pop_declspec_stack(void) deletes { pstate.declspecs = pstate.declspec_stack->declspecs; pstate.attributes = pstate.declspec_stack->attributes; pstate.declspec_stack = pstate.declspec_stack->next; } static void push_declspec_stack(void) { spec_stack news; news = ralloc(pstate.ds_region, struct spec_stack); news->declspecs = pstate.declspecs; news->attributes = pstate.attributes; news->next = pstate.declspec_stack; pstate.declspec_stack = news; } static node parse_tree; node parse(void) deletes { int result, old_errorcount = errorcount; struct parse_state old_pstate = pstate; pstate.declspecs = NULL; pstate.attributes = NULL; pstate.unevaluated_expression = 0; pstate.declspec_stack = NULL; pstate.ds_region = newsubregion(parse_region); parse_tree = NULL; result = yyparse(); if (result) parse_tree = NULL; deleteregion_ptr(&pstate.ds_region); if (result != 0 && errorcount == old_errorcount) fprintf(stderr, "Errors detected in input file (your bison.simple is out of date)"); pstate = old_pstate; return parse_tree; } static void set_nesc_ast(void *tree) { nesc_declaration cdecl = current.container; nesc_decl nd = CAST(nesc_decl, tree); nd->cdecl = cdecl; cdecl->ast = nd; } static void set_nesc_parse_tree(void *tree) { set_nesc_ast(tree); parse_tree = CAST(node, tree); } static void set_nesc_impl(implementation impl) { nesc_declaration cdecl = current.container; CAST(component, cdecl->ast)->implementation = impl; parse_tree = CAST(node, cdecl->ast); } void refuse_asm(asm_stmt s) { if (s) error_with_location(s->location, "unexpected asm statement"); } /* Merge the attributes in front of a declaration (but which aren't part of the declspecs) with the attributes after the declaration. We're pretending they all came after */ attribute prefix_attr(attribute post_attr) { return attribute_chain(pstate.attributes, post_attr); } /* Simple build functions */ declaration make_data_decl(type_element modifiers, declaration decls) { location l = modifiers ? modifiers->location : decls->location; data_decl dd = new_data_decl(parse_region, l, modifiers, decls); pop_declspec_stack(); if (decls == NULL && current.spec_section != spec_normal) error("provides/uses must be followed by a command, event or interface"); return CAST(declaration, dd); } declaration make_error_decl(void) { return new_error_decl(pr, dummy_location); } declaration make_extension_decl(int old_pedantic, location l, declaration d) { pedantic = old_pedantic; return CAST(declaration, new_extension_decl(pr, l, d)); } word make_cword(location l, const char *s) { return new_word(pr, l, str2cstring(pr, s)); } declarator make_qualified_declarator(location l, declarator d, type_element quals) { if (quals) return CAST(declarator, new_qualified_declarator(pr, l, d, quals)); else return d; } declarator make_pointer_declarator(location l, declarator d, type_element quals) { d = make_qualified_declarator(l, d, quals); return CAST(declarator, new_pointer_declarator(pr, l, d)); } declarator make_identifier_declarator(location l, cstring id) { return CAST(declarator, new_identifier_declarator(pr, l, id)); } statement make_error_stmt(void) { return new_error_stmt(pr, dummy_location); } /* Tell yyparse how to print a token's value, if yydebug is set. */ #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) void yyprint(); /* Line 189 of yacc.c */ #line 326 "c-parse.tab.c" /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { IDENTIFIER = 258, TYPENAME = 259, COMPONENTREF = 260, SCSPEC = 261, TYPESPEC = 262, TYPE_QUAL = 263, FN_QUAL = 264, CONSTANT = 265, STRING = 266, MAGIC_STRING = 267, ELLIPSIS = 268, SIZEOF = 269, ENUM = 270, STRUCT = 271, UNION = 272, IF = 273, ELSE = 274, WHILE = 275, DO = 276, FOR = 277, SWITCH = 278, CASE = 279, DEFAULT = 280, BREAK = 281, CONTINUE = 282, RETURN = 283, GOTO = 284, ASM_KEYWORD = 285, TYPEOF = 286, ALIGNOF = 287, ATTRIBUTE = 288, EXTENSION = 289, LABEL = 290, REALPART = 291, IMAGPART = 292, VA_ARG = 293, OFFSETOF = 294, ASSIGN = 295, OROR = 296, ANDAND = 297, EQCOMPARE = 298, ARITHCOMPARE = 299, RSHIFT = 300, LSHIFT = 301, MINUSMINUS = 302, PLUSPLUS = 303, POINTSAT = 304, DISPATCH_C = 305, DISPATCH_NESC = 306, DISPATCH_PARM = 307, DISPATCH_TYPE = 308, ATOMIC = 309, USES = 310, INTERFACE = 311, COMPONENTS = 312, PROVIDES = 313, MODULE = 314, INCLUDES = 315, CONFIGURATION = 316, AS = 317, TASTNIOP = 318, IMPLEMENTATION = 319, CALL = 320, SIGNAL = 321, POST = 322, GENERIC = 323, NEW = 324, NX_STRUCT = 325, NX_UNION = 326, ABSTRACT = 327, COMPONENT = 328, EXTENDS = 329, TARGET_ATTRIBUTE0 = 330, TARGET_ATTRIBUTE1 = 331, TARGET_DEF = 332 }; #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif /* Copy the second part of user declarations. */ /* Line 264 of yacc.c */ #line 444 "c-parse.tab.c" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int yyi) #else static int YYID (yyi) int yyi; #endif { return yyi; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 78 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 4209 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 103 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 262 /* YYNRULES -- Number of rules. */ #define YYNRULES 633 /* YYNRULES -- Number of states. */ #define YYNSTATES 1038 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 332 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 67, 2, 2, 2, 59, 48, 2, 63, 101, 57, 55, 98, 56, 62, 58, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 43, 69, 50, 40, 51, 42, 102, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 64, 2, 100, 47, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 68, 46, 99, 66, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 44, 45, 49, 52, 53, 54, 60, 61, 65, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint16 yyprhs[] = { 0, 0, 3, 6, 9, 12, 14, 17, 20, 23, 26, 27, 30, 32, 35, 36, 40, 42, 46, 47, 48, 59, 60, 64, 66, 70, 73, 75, 78, 80, 81, 85, 88, 91, 94, 97, 100, 101, 102, 114, 115, 116, 117, 130, 131, 132, 141, 143, 144, 145, 149, 150, 152, 154, 158, 163, 168, 173, 176, 178, 181, 182, 184, 186, 187, 190, 191, 195, 196, 200, 202, 206, 209, 211, 213, 217, 222, 224, 228, 231, 232, 239, 241, 245, 246, 252, 256, 260, 262, 264, 268, 270, 276, 277, 279, 281, 285, 287, 289, 291, 294, 295, 297, 299, 301, 306, 311, 316, 320, 322, 324, 329, 330, 336, 337, 340, 341, 345, 347, 349, 355, 358, 362, 364, 369, 374, 378, 381, 384, 386, 388, 394, 399, 404, 408, 409, 410, 417, 419, 421, 423, 425, 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 446, 448, 450, 452, 456, 458, 460, 462, 464, 467, 470, 473, 476, 479, 482, 487, 490, 495, 497, 499, 501, 506, 507, 515, 517, 521, 525, 529, 533, 537, 541, 545, 549, 553, 557, 561, 565, 569, 573, 577, 581, 587, 588, 594, 598, 602, 604, 606, 608, 612, 616, 617, 622, 624, 631, 638, 643, 647, 651, 654, 657, 659, 663, 668, 670, 672, 673, 675, 678, 680, 683, 688, 693, 697, 700, 702, 704, 707, 710, 711, 713, 718, 723, 727, 731, 735, 738, 740, 743, 746, 749, 752, 755, 757, 760, 762, 765, 768, 771, 774, 777, 780, 782, 785, 788, 791, 794, 797, 800, 803, 806, 809, 812, 815, 818, 821, 824, 827, 830, 832, 835, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 874, 877, 880, 883, 886, 889, 892, 895, 898, 901, 904, 907, 910, 913, 916, 919, 922, 925, 928, 931, 934, 937, 940, 943, 946, 949, 952, 955, 958, 961, 964, 966, 968, 970, 972, 974, 976, 978, 980, 982, 984, 986, 988, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1057, 1062, 1067, 1069, 1071, 1073, 1078, 1080, 1085, 1086, 1091, 1092, 1099, 1103, 1104, 1111, 1115, 1116, 1118, 1120, 1121, 1124, 1126, 1129, 1136, 1138, 1140, 1142, 1145, 1148, 1150, 1152, 1156, 1158, 1162, 1163, 1165, 1170, 1177, 1182, 1188, 1193, 1195, 1197, 1199, 1201, 1203, 1205, 1207, 1208, 1213, 1215, 1216, 1219, 1221, 1225, 1229, 1232, 1233, 1238, 1240, 1241, 1246, 1248, 1250, 1252, 1255, 1258, 1264, 1268, 1269, 1270, 1278, 1279, 1280, 1288, 1290, 1292, 1295, 1299, 1304, 1306, 1310, 1313, 1317, 1319, 1322, 1326, 1331, 1333, 1337, 1339, 1343, 1347, 1348, 1357, 1358, 1368, 1374, 1375, 1385, 1386, 1394, 1396, 1398, 1400, 1402, 1403, 1405, 1406, 1408, 1410, 1413, 1414, 1418, 1421, 1425, 1428, 1432, 1435, 1437, 1440, 1442, 1447, 1449, 1454, 1457, 1462, 1466, 1469, 1474, 1478, 1480, 1484, 1486, 1488, 1492, 1493, 1497, 1498, 1500, 1502, 1504, 1506, 1510, 1513, 1517, 1522, 1525, 1527, 1529, 1531, 1533, 1535, 1540, 1544, 1548, 1552, 1555, 1557, 1559, 1562, 1565, 1566, 1568, 1571, 1572, 1573, 1575, 1577, 1580, 1584, 1586, 1589, 1591, 1595, 1602, 1608, 1614, 1617, 1620, 1625, 1626, 1631, 1633, 1636, 1638, 1640, 1641, 1645, 1647, 1649, 1651, 1654, 1655, 1660, 1662, 1666, 1667, 1668, 1676, 1682, 1685, 1686, 1687, 1688, 1701, 1702, 1709, 1712, 1715, 1718, 1722, 1729, 1738, 1749, 1762, 1766, 1771, 1773, 1775, 1779, 1785, 1788, 1791, 1792, 1794, 1795, 1797, 1798, 1800, 1802, 1806, 1811, 1819, 1821, 1825, 1826, 1829, 1832, 1833, 1838, 1841, 1842, 1844, 1846, 1850, 1852, 1856, 1861, 1866, 1870, 1875, 1880, 1884, 1889, 1890, 1891, 1894, 1896, 1899, 1901, 1905, 1907, 1909, 1913, 1914, 1916, 1918, 1920, 1922, 1924, 1926 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { 104, 0, -1, 71, 110, -1, 71, 121, -1, 70, 169, -1, 70, -1, 72, 351, -1, 72, 1, -1, 73, 298, -1, 73, 1, -1, -1, 106, 107, -1, 169, -1, 107, 108, -1, -1, 80, 109, 69, -1, 180, -1, 109, 98, 180, -1, -1, -1, 105, 76, 182, 111, 113, 249, 112, 68, 117, 99, -1, -1, 50, 114, 51, -1, 115, -1, 114, 98, 115, -1, 116, 249, -1, 3, -1, 117, 174, -1, 174, -1, -1, 64, 119, 120, -1, 350, 100, -1, 1, 100, -1, 105, 122, -1, 105, 125, -1, 105, 129, -1, -1, -1, 132, 79, 182, 123, 133, 249, 124, 68, 137, 99, 167, -1, -1, -1, -1, 132, 81, 182, 126, 133, 249, 127, 68, 137, 99, 128, 152, -1, -1, -1, 93, 182, 130, 249, 131, 68, 137, 99, -1, 88, -1, -1, -1, 63, 134, 101, -1, -1, 135, -1, 136, -1, 135, 98, 136, -1, 224, 352, 276, 247, -1, 224, 352, 278, 247, -1, 225, 352, 278, 247, -1, 224, 352, -1, 138, -1, 138, 139, -1, -1, 141, -1, 143, -1, -1, 140, 174, -1, -1, 75, 142, 145, -1, -1, 78, 144, 145, -1, 147, -1, 68, 146, 99, -1, 146, 147, -1, 147, -1, 174, -1, 148, 249, 69, -1, 148, 118, 249, 69, -1, 149, -1, 149, 82, 182, -1, 76, 182, -1, -1, 76, 182, 150, 50, 151, 51, -1, 161, -1, 151, 98, 161, -1, -1, 84, 153, 68, 162, 99, -1, 77, 155, 69, -1, 155, 98, 156, -1, 156, -1, 157, -1, 157, 82, 182, -1, 182, -1, 89, 182, 63, 158, 101, -1, -1, 159, -1, 160, -1, 159, 98, 160, -1, 194, -1, 161, -1, 298, -1, 162, 163, -1, -1, 164, -1, 174, -1, 154, -1, 165, 40, 165, 69, -1, 165, 65, 165, 69, -1, 165, 83, 165, 69, -1, 165, 62, 166, -1, 166, -1, 182, -1, 182, 64, 186, 100, -1, -1, 84, 168, 68, 169, 99, -1, -1, 170, 172, -1, -1, 169, 171, 172, -1, 176, -1, 173, -1, 30, 63, 184, 101, 69, -1, 360, 172, -1, 205, 239, 69, -1, 174, -1, 225, 205, 239, 69, -1, 224, 205, 238, 69, -1, 231, 205, 69, -1, 1, 69, -1, 1, 99, -1, 69, -1, 175, -1, 97, 180, 40, 184, 69, -1, 224, 205, 275, 177, -1, 225, 205, 278, 177, -1, 205, 278, 177, -1, -1, -1, 242, 247, 178, 201, 179, 318, -1, 3, -1, 4, -1, 180, -1, 180, -1, 48, -1, 56, -1, 55, -1, 61, -1, 60, -1, 66, -1, 67, -1, 36, -1, 37, -1, 186, -1, -1, 186, -1, 187, -1, 194, -1, 187, 98, 194, -1, 85, -1, 86, -1, 87, -1, 196, -1, 188, 199, -1, 57, 192, -1, 360, 192, -1, 183, 192, -1, 45, 181, -1, 190, 189, -1, 190, 63, 298, 101, -1, 191, 189, -1, 191, 63, 298, 101, -1, 14, -1, 32, -1, 189, -1, 63, 298, 101, 192, -1, -1, 63, 298, 101, 68, 193, 261, 99, -1, 192, -1, 194, 55, 194, -1, 194, 56, 194, -1, 194, 57, 194, -1, 194, 58, 194, -1, 194, 59, 194, -1, 194, 54, 194, -1, 194, 53, 194, -1, 194, 52, 194, -1, 194, 50, 194, -1, 194, 51, 194, -1, 194, 49, 194, -1, 194, 48, 194, -1, 194, 46, 194, -1, 194, 47, 194, -1, 194, 45, 194, -1, 194, 44, 194, -1, 194, 42, 184, 43, 194, -1, -1, 194, 42, 195, 43, 194, -1, 194, 40, 194, -1, 194, 41, 194, -1, 3, -1, 10, -1, 200, -1, 63, 184, 101, -1, 63, 1, 101, -1, -1, 63, 197, 320, 101, -1, 199, -1, 38, 63, 194, 98, 298, 101, -1, 39, 63, 298, 98, 198, 101, -1, 196, 64, 186, 100, -1, 196, 62, 180, -1, 196, 65, 180, -1, 196, 61, -1, 196, 60, -1, 180, -1, 198, 62, 180, -1, 196, 63, 185, 101, -1, 11, -1, 12, -1, -1, 202, -1, 202, 13, -1, 203, -1, 202, 203, -1, 226, 205, 238, 69, -1, 227, 205, 239, 69, -1, 226, 205, 69, -1, 227, 69, -1, 207, -1, 313, -1, 204, 207, -1, 207, 313, -1, -1, 247, -1, 224, 205, 238, 69, -1, 225, 205, 239, 69, -1, 224, 205, 269, -1, 225, 205, 272, -1, 231, 205, 69, -1, 360, 207, -1, 362, -1, 208, 362, -1, 209, 362, -1, 208, 248, -1, 210, 362, -1, 211, 362, -1, 248, -1, 210, 248, -1, 233, -1, 212, 362, -1, 213, 362, -1, 212, 235, -1, 213, 235, -1, 208, 233, -1, 209, 233, -1, 234, -1, 212, 248, -1, 212, 236, -1, 213, 236, -1, 208, 234, -1, 209, 234, -1, 214, 362, -1, 215, 362, -1, 214, 235, -1, 215, 235, -1, 210, 233, -1, 211, 233, -1, 214, 248, -1, 214, 236, -1, 215, 236, -1, 210, 234, -1, 211, 234, -1, 361, -1, 216, 362, -1, 217, 362, -1, 208, 361, -1, 209, 361, -1, 216, 361, -1, 217, 361, -1, 216, 248, -1, 218, 362, -1, 219, 362, -1, 210, 361, -1, 211, 361, -1, 218, 361, -1, 219, 361, -1, 218, 248, -1, 220, 362, -1, 221, 362, -1, 220, 235, -1, 221, 235, -1, 216, 233, -1, 217, 233, -1, 212, 361, -1, 213, 361, -1, 220, 361, -1, 221, 361, -1, 220, 248, -1, 220, 236, -1, 221, 236, -1, 216, 234, -1, 217, 234, -1, 222, 362, -1, 223, 362, -1, 222, 235, -1, 223, 235, -1, 218, 233, -1, 219, 233, -1, 214, 361, -1, 215, 361, -1, 222, 361, -1, 223, 361, -1, 222, 248, -1, 222, 236, -1, 223, 236, -1, 218, 234, -1, 219, 234, -1, 212, -1, 213, -1, 214, -1, 215, -1, 220, -1, 221, -1, 222, -1, 223, -1, 208, -1, 209, -1, 210, -1, 211, -1, 216, -1, 217, -1, 218, -1, 219, -1, 212, -1, 213, -1, 220, -1, 221, -1, 208, -1, 209, -1, 216, -1, 217, -1, 212, -1, 213, -1, 214, -1, 215, -1, 208, -1, 209, -1, 210, -1, 211, -1, 228, -1, 229, -1, 224, -1, 225, -1, -1, 229, -1, 235, -1, 237, -1, 236, -1, 364, -1, 280, -1, 281, -1, 4, -1, 5, 62, 180, -1, 31, 63, 184, 101, -1, 31, 63, 298, 101, -1, 240, -1, 241, -1, 243, -1, 240, 98, 206, 243, -1, 245, -1, 241, 98, 206, 243, -1, -1, 30, 63, 11, 101, -1, -1, 275, 242, 247, 40, 244, 259, -1, 275, 242, 247, -1, -1, 278, 242, 247, 40, 246, 259, -1, 278, 242, 247, -1, -1, 250, -1, 250, -1, -1, 249, 256, -1, 251, -1, 250, 251, -1, 33, 63, 63, 254, 101, 101, -1, 252, -1, 256, -1, 95, -1, 96, 253, -1, 102, 253, -1, 10, -1, 200, -1, 63, 184, 101, -1, 255, -1, 254, 98, 255, -1, -1, 258, -1, 258, 63, 3, 101, -1, 258, 63, 3, 98, 186, 101, -1, 258, 63, 185, 101, -1, 102, 257, 63, 261, 101, -1, 102, 257, 1, 101, -1, 182, -1, 182, -1, 361, -1, 364, -1, 362, -1, 86, -1, 194, -1, -1, 68, 260, 261, 99, -1, 1, -1, -1, 262, 287, -1, 263, -1, 262, 98, 263, -1, 267, 40, 265, -1, 268, 265, -1, -1, 180, 43, 264, 265, -1, 265, -1, -1, 68, 266, 261, 99, -1, 194, -1, 1, -1, 268, -1, 267, 268, -1, 62, 180, -1, 64, 194, 13, 194, 100, -1, 64, 194, 100, -1, -1, -1, 275, 242, 247, 270, 201, 271, 320, -1, -1, -1, 278, 242, 247, 273, 201, 274, 320, -1, 276, -1, 278, -1, 276, 305, -1, 57, 232, 276, -1, 63, 247, 276, 101, -1, 4, -1, 4, 62, 180, -1, 277, 305, -1, 57, 232, 277, -1, 4, -1, 278, 305, -1, 57, 232, 278, -1, 63, 247, 278, 101, -1, 3, -1, 3, 62, 180, -1, 180, -1, 286, 279, 249, -1, 15, 279, 249, -1, -1, 286, 279, 249, 68, 282, 289, 99, 247, -1, -1, 16, 102, 279, 249, 68, 283, 289, 99, 247, -1, 286, 68, 289, 99, 247, -1, -1, 15, 279, 249, 68, 284, 296, 288, 99, 247, -1, -1, 15, 68, 285, 296, 288, 99, 247, -1, 16, -1, 17, -1, 90, -1, 91, -1, -1, 98, -1, -1, 98, -1, 290, -1, 290, 291, -1, -1, 290, 291, 69, -1, 290, 69, -1, 228, 205, 292, -1, 228, 205, -1, 229, 205, 293, -1, 229, 205, -1, 1, -1, 360, 291, -1, 294, -1, 292, 98, 206, 294, -1, 295, -1, 293, 98, 206, 295, -1, 275, 247, -1, 275, 43, 194, 247, -1, 43, 194, 247, -1, 278, 247, -1, 278, 43, 194, 247, -1, 43, 194, 247, -1, 297, -1, 296, 98, 297, -1, 1, -1, 180, -1, 180, 40, 194, -1, -1, 230, 299, 300, -1, -1, 301, -1, 303, -1, 302, -1, 304, -1, 57, 232, 302, -1, 57, 232, -1, 57, 232, 303, -1, 63, 247, 301, 101, -1, 304, 306, -1, 306, -1, 307, -1, 309, -1, 308, -1, 309, -1, 118, 63, 355, 359, -1, 63, 353, 359, -1, 63, 345, 359, -1, 64, 184, 100, -1, 64, 100, -1, 311, -1, 326, -1, 311, 326, -1, 311, 313, -1, -1, 310, -1, 1, 69, -1, -1, -1, 316, -1, 317, -1, 316, 317, -1, 35, 358, 69, -1, 320, -1, 1, 320, -1, 68, -1, 319, 314, 99, -1, 319, 314, 315, 204, 312, 99, -1, 319, 314, 315, 1, 99, -1, 319, 314, 315, 310, 99, -1, 322, 325, -1, 322, 1, -1, 18, 63, 184, 101, -1, -1, 21, 324, 325, 20, -1, 330, -1, 338, 325, -1, 330, -1, 338, -1, -1, 74, 328, 329, -1, 330, -1, 1, -1, 320, -1, 184, 69, -1, -1, 321, 19, 331, 325, -1, 321, -1, 321, 19, 1, -1, -1, -1, 20, 332, 63, 184, 101, 333, 325, -1, 323, 63, 184, 101, 69, -1, 323, 1, -1, -1, -1, -1, 22, 63, 340, 69, 334, 340, 69, 335, 340, 101, 336, 325, -1, -1, 23, 63, 184, 101, 337, 325, -1, 26, 69, -1, 27, 69, -1, 28, 69, -1, 28, 184, 69, -1, 30, 339, 63, 184, 101, 69, -1, 30, 339, 63, 184, 43, 341, 101, 69, -1, 30, 339, 63, 184, 43, 341, 43, 341, 101, 69, -1, 30, 339, 63, 184, 43, 341, 43, 341, 43, 344, 101, 69, -1, 29, 181, 69, -1, 29, 57, 184, 69, -1, 327, -1, 69, -1, 24, 194, 43, -1, 24, 194, 13, 194, 43, -1, 25, 43, -1, 181, 43, -1, -1, 362, -1, -1, 184, -1, -1, 342, -1, 343, -1, 342, 98, 343, -1, 11, 63, 184, 101, -1, 64, 182, 100, 11, 63, 184, 101, -1, 11, -1, 344, 98, 11, -1, -1, 346, 347, -1, 349, 101, -1, -1, 350, 69, 348, 347, -1, 1, 101, -1, -1, 13, -1, 350, -1, 350, 98, 13, -1, 351, -1, 350, 98, 351, -1, 224, 352, 277, 247, -1, 224, 352, 278, 247, -1, 224, 352, 300, -1, 224, 352, 302, 250, -1, 225, 352, 278, 247, -1, 225, 352, 300, -1, 225, 352, 302, 250, -1, -1, -1, 354, 355, -1, 347, -1, 356, 101, -1, 357, -1, 356, 98, 357, -1, 3, -1, 181, -1, 358, 98, 181, -1, -1, 363, -1, 34, -1, 6, -1, 25, -1, 8, -1, 9, -1, 7, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 465, 465, 466, 467, 470, 471, 472, 473, 474, 478, 478, 479, 487, 488, 492, 496, 498, 505, 509, 503, 524, 525, 543, 544, 549, 554, 558, 559, 562, 562, 566, 571, 575, 576, 577, 582, 587, 581, 601, 607, 611, 600, 622, 626, 621, 637, 638, 643, 651, 670, 671, 675, 676, 685, 687, 689, 691, 696, 701, 703, 707, 708, 709, 709, 713, 713, 718, 718, 723, 724, 728, 730, 734, 735, 740, 750, 751, 755, 761, 760, 769, 770, 774, 774, 782, 786, 787, 791, 792, 796, 798, 804, 805, 809, 810, 814, 816, 820, 824, 825, 829, 830, 831, 835, 837, 839, 844, 848, 853, 855, 859, 859, 869, 869, 870, 870, 875, 876, 877, 882, 887, 894, 898, 900, 902, 905, 906, 907, 911, 915, 920, 921, 922, 926, 937, 925, 944, 945, 949, 953, 956, 958, 960, 962, 964, 966, 968, 970, 972, 976, 985, 986, 990, 995, 997, 1002, 1003, 1004, 1008, 1009, 1041, 1044, 1047, 1054, 1059, 1069, 1072, 1075, 1081, 1085, 1089, 1090, 1093, 1092, 1111, 1112, 1114, 1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, 1142, 1144, 1147, 1146, 1152, 1154, 1159, 1165, 1166, 1167, 1169, 1172, 1171, 1186, 1204, 1206, 1208, 1210, 1212, 1215, 1217, 1222, 1223, 1227, 1231, 1232, 1236, 1237, 1238, 1250, 1251, 1259, 1261, 1263, 1267, 1277, 1278, 1279, 1280, 1288, 1299, 1304, 1306, 1308, 1311, 1314, 1317, 1373, 1374, 1376, 1381, 1386, 1388, 1393, 1394, 1398, 1399, 1401, 1403, 1405, 1407, 1409, 1414, 1415, 1417, 1419, 1421, 1423, 1428, 1430, 1432, 1434, 1436, 1438, 1443, 1445, 1447, 1449, 1451, 1456, 1457, 1459, 1461, 1463, 1465, 1467, 1472, 1477, 1479, 1481, 1483, 1485, 1487, 1492, 1497, 1499, 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1515, 1520, 1522, 1524, 1526, 1528, 1533, 1535, 1537, 1539, 1541, 1543, 1545, 1547, 1549, 1551, 1556, 1558, 1560, 1562, 1564, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1592, 1593, 1594, 1595, 1599, 1600, 1601, 1602, 1606, 1607, 1608, 1609, 1613, 1614, 1615, 1616, 1620, 1621, 1625, 1626, 1632, 1633, 1658, 1659, 1663, 1667, 1668, 1672, 1676, 1680, 1685, 1687, 1693, 1697, 1701, 1702, 1707, 1708, 1714, 1715, 1722, 1721, 1729, 1737, 1736, 1744, 1752, 1753, 1758, 1762, 1763, 1768, 1770, 1775, 1777, 1778, 1782, 1785, 1788, 1794, 1795, 1796, 1800, 1802, 1808, 1809, 1811, 1814, 1818, 1824, 1826, 1831, 1839, 1840, 1842, 1844, 1846, 1853, 1855, 1854, 1858, 1865, 1868, 1872, 1873, 1879, 1883, 1888, 1887, 1893, 1898, 1897, 1902, 1904, 1908, 1909, 1913, 1918, 1922, 1928, 1938, 1927, 1951, 1961, 1950, 1976, 1977, 1983, 1985, 1987, 1989, 1990, 2001, 2003, 2005, 2014, 2016, 2018, 2020, 2022, 2029, 2033, 2036, 2043, 2042, 2049, 2048, 2054, 2059, 2058, 2063, 2062, 2069, 2070, 2071, 2072, 2075, 2077, 2080, 2082, 2087, 2089, 2096, 2097, 2099, 2115, 2117, 2122, 2124, 2129, 2131, 2136, 2137, 2144, 2145, 2150, 2153, 2156, 2162, 2165, 2168, 2174, 2175, 2177, 2183, 2185, 2191, 2190, 2198, 2199, 2203, 2204, 2208, 2209, 2214, 2216, 2221, 2223, 2225, 2230, 2231, 2235, 2236, 2240, 2243, 2249, 2255, 2257, 2266, 2282, 2283, 2285, 2290, 2291, 2294, 2299, 2305, 2306, 2313, 2314, 2318, 2325, 2326, 2330, 2334, 2336, 2339, 2342, 2348, 2351, 2355, 2366, 2365, 2377, 2379, 2384, 2386, 2391, 2391, 2411, 2412, 2417, 2419, 2423, 2422, 2431, 2440, 2443, 2445, 2442, 2454, 2461, 2464, 2465, 2467, 2464, 2474, 2473, 2482, 2487, 2492, 2495, 2498, 2503, 2508, 2512, 2516, 2521, 2528, 2529, 2536, 2539, 2542, 2545, 2554, 2555, 2560, 2561, 2568, 2569, 2573, 2574, 2579, 2581, 2586, 2588, 2595, 2595, 2603, 2605, 2604, 2611, 2618, 2619, 2629, 2631, 2636, 2637, 2644, 2646, 2648, 2650, 2652, 2654, 2656, 2660, 2666, 2666, 2673, 2674, 2679, 2681, 2686, 2691, 2692, 2699, 2700, 2704, 2711, 2713, 2718, 2723, 2728 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "IDENTIFIER", "TYPENAME", "COMPONENTREF", "SCSPEC", "TYPESPEC", "TYPE_QUAL", "FN_QUAL", "CONSTANT", "STRING", "MAGIC_STRING", "ELLIPSIS", "SIZEOF", "ENUM", "STRUCT", "UNION", "IF", "ELSE", "WHILE", "DO", "FOR", "SWITCH", "CASE", "DEFAULT", "BREAK", "CONTINUE", "RETURN", "GOTO", "ASM_KEYWORD", "TYPEOF", "ALIGNOF", "ATTRIBUTE", "EXTENSION", "LABEL", "REALPART", "IMAGPART", "VA_ARG", "OFFSETOF", "'='", "ASSIGN", "'?'", "':'", "OROR", "ANDAND", "'|'", "'^'", "'&'", "EQCOMPARE", "'<'", "'>'", "ARITHCOMPARE", "RSHIFT", "LSHIFT", "'+'", "'-'", "'*'", "'/'", "'%'", "MINUSMINUS", "PLUSPLUS", "'.'", "'('", "'['", "POINTSAT", "'~'", "'!'", "'{'", "';'", "DISPATCH_C", "DISPATCH_NESC", "DISPATCH_PARM", "DISPATCH_TYPE", "ATOMIC", "USES", "INTERFACE", "COMPONENTS", "PROVIDES", "MODULE", "INCLUDES", "CONFIGURATION", "AS", "TASTNIOP", "IMPLEMENTATION", "CALL", "SIGNAL", "POST", "GENERIC", "NEW", "NX_STRUCT", "NX_UNION", "ABSTRACT", "COMPONENT", "EXTENDS", "TARGET_ATTRIBUTE0", "TARGET_ATTRIBUTE1", "TARGET_DEF", "','", "'}'", "']'", "')'", "'@'", "$accept", "dispatch", "ncheader", "$@1", "includes_list", "includes", "include_list", "interface", "$@2", "$@3", "interface_parms", "interface_parm_list", "interface_parm", "type_parm", "datadef_list", "parameters", "$@4", "parameters1", "component", "module", "$@5", "$@6", "configuration", "$@7", "$@8", "$@9", "binary_component", "$@10", "$@11", "generic", "component_parms", "template_parms", "template_parmlist", "template_parm", "requires_or_provides_list", "requires_or_provides_list_", "requires_or_provides", "$@12", "requires", "$@13", "provides", "$@14", "parameterised_interface_list", "parameterised_interfaces", "parameterised_interface", "interface_ref", "interface_type", "$@15", "typelist", "iconfiguration", "@16", "cuses", "component_list", "component_ref", "component_ref2", "generic_args", "generic_arglist", "generic_arg", "generic_type", "configuration_decls", "configuration_decl", "connection", "endpoint", "parameterised_identifier", "imodule", "@17", "extdefs", "@18", "@19", "extdef", "datadef", "just_datadef", "target_def", "fndef", "fndef2", "$@20", "$@21", "identifier", "id_label", "idword", "unop", "expr", "exprlist", "nonnull_exprlist", "nonnull_exprlist_", "callkind", "unary_expr", "sizeof", "alignof", "cast_expr", "$@22", "expr_no_commas", "$@23", "primary", "$@24", "fieldlist", "function_call", "string", "old_style_parm_decls", "datadecls", "datadecl", "decls", "setspecs", "maybe_resetattrs", "decl", "declspecs_nosc_nots_nosa_noea", "declspecs_nosc_nots_nosa_ea", "declspecs_nosc_nots_sa_noea", "declspecs_nosc_nots_sa_ea", "declspecs_nosc_ts_nosa_noea", "declspecs_nosc_ts_nosa_ea", "declspecs_nosc_ts_sa_noea", "declspecs_nosc_ts_sa_ea", "declspecs_sc_nots_nosa_noea", "declspecs_sc_nots_nosa_ea", "declspecs_sc_nots_sa_noea", "declspecs_sc_nots_sa_ea", "declspecs_sc_ts_nosa_noea", "declspecs_sc_ts_nosa_ea", "declspecs_sc_ts_sa_noea", "declspecs_sc_ts_sa_ea", "declspecs_ts", "declspecs_nots", "declspecs_ts_nosa", "declspecs_nots_nosa", "declspecs_nosc_ts", "declspecs_nosc_nots", "declspecs_nosc", "declspecs", "maybe_type_quals_attrs", "type_spec_nonattr", "type_spec_attr", "type_spec_reserved_nonattr", "type_spec_reserved_attr", "type_spec_nonreserved_nonattr", "initdecls", "notype_initdecls", "initdecls_", "notype_initdecls_", "maybeasm", "initdcl", "@25", "notype_initdcl", "@26", "maybe_attribute", "eattributes", "nesc_attributes", "attributes", "attribute", "target_attribute", "restricted_expr", "attribute_list", "attrib", "nattrib", "nastart", "any_word", "init", "$@27", "initlist_maybe_comma", "initlist1", "initelt", "@28", "initval", "$@29", "designator_list", "designator", "nested_function", "$@30", "$@31", "notype_nested_function", "$@32", "$@33", "declarator", "after_type_declarator", "parm_declarator", "notype_declarator", "tag", "structuse", "structdef", "@34", "@35", "@36", "@37", "structkind", "maybecomma", "maybecomma_warn", "component_decl_list", "component_decl_list2", "component_decl", "components", "components_notype", "component_declarator", "component_notype_declarator", "enumlist", "enumerator", "typename", "$@38", "absdcl", "absdcl1", "absdcl1_noea", "absdcl1_ea", "direct_absdcl1", "array_or_fn_declarator", "array_or_absfn_declarator", "fn_declarator", "absfn_declarator", "array_declarator", "stmts", "stmt_or_labels", "xstmts", "errstmt", "pushlevel", "maybe_label_decls", "label_decls", "label_decl", "compstmt_or_error", "compstmt_start", "compstmt", "simple_if", "if_prefix", "do_stmt_start", "@39", "labeled_stmt", "stmt_or_label", "atomic_stmt", "$@40", "stmt_or_error", "stmt", "$@41", "$@42", "@43", "$@44", "$@45", "@46", "@47", "label", "maybe_type_qual", "xexpr", "asm_operands", "nonnull_asm_operands", "asm_operand", "asm_clobbers", "parmlist", "$@48", "parmlist_1", "$@49", "parmlist_2", "parms", "parm", "xreferror", "parmlist_or_identifiers", "$@50", "parmlist_or_identifiers_1", "identifiers", "old_parameter", "identifiers_or_typenames", "fn_quals", "extension", "scspec", "type_qual", "fn_qual", "type_spec", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 61, 295, 63, 58, 296, 297, 124, 94, 38, 298, 60, 62, 299, 300, 301, 43, 45, 42, 47, 37, 302, 303, 46, 40, 91, 304, 126, 33, 123, 59, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 44, 125, 93, 41, 64 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { 0, 103, 104, 104, 104, 104, 104, 104, 104, 104, 106, 105, 105, 107, 107, 108, 109, 109, 111, 112, 110, 113, 113, 114, 114, 115, 116, 117, 117, 119, 118, 120, 120, 121, 121, 121, 123, 124, 122, 126, 127, 128, 125, 130, 131, 129, 132, 132, 133, 133, 134, 134, 135, 135, 136, 136, 136, 136, 137, 138, 138, 139, 139, 140, 139, 142, 141, 144, 143, 145, 145, 146, 146, 147, 147, 147, 148, 148, 149, 150, 149, 151, 151, 153, 152, 154, 155, 155, 156, 156, 157, 157, 158, 158, 159, 159, 160, 160, 161, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 166, 166, 168, 167, 170, 169, 171, 169, 172, 172, 172, 172, 173, 173, 174, 174, 174, 174, 174, 174, 174, 175, 176, 176, 176, 178, 179, 177, 180, 180, 181, 182, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 185, 185, 186, 187, 187, 188, 188, 188, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 190, 191, 192, 192, 193, 192, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 195, 194, 194, 194, 196, 196, 196, 196, 196, 197, 196, 196, 196, 196, 196, 196, 196, 196, 196, 198, 198, 199, 200, 200, 201, 201, 201, 202, 202, 203, 203, 203, 203, 204, 204, 204, 204, 205, 206, 207, 207, 207, 207, 207, 207, 208, 208, 208, 209, 210, 210, 211, 211, 212, 212, 212, 212, 212, 212, 212, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 214, 215, 215, 215, 215, 215, 216, 216, 216, 216, 216, 216, 216, 217, 218, 218, 218, 218, 218, 218, 219, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 221, 221, 221, 221, 221, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 223, 223, 223, 223, 223, 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, 225, 225, 225, 225, 225, 226, 226, 226, 226, 227, 227, 227, 227, 228, 228, 228, 228, 229, 229, 229, 229, 230, 230, 231, 231, 232, 232, 233, 233, 234, 235, 235, 236, 237, 237, 237, 237, 238, 239, 240, 240, 241, 241, 242, 242, 244, 243, 243, 246, 245, 245, 247, 247, 248, 249, 249, 250, 250, 251, 251, 251, 252, 252, 252, 253, 253, 253, 254, 254, 255, 255, 255, 255, 255, 256, 256, 257, 258, 258, 258, 258, 258, 259, 260, 259, 259, 261, 261, 262, 262, 263, 263, 264, 263, 263, 266, 265, 265, 265, 267, 267, 268, 268, 268, 270, 271, 269, 273, 274, 272, 275, 275, 276, 276, 276, 276, 276, 277, 277, 277, 278, 278, 278, 278, 278, 279, 280, 280, 282, 281, 283, 281, 281, 284, 281, 285, 281, 286, 286, 286, 286, 287, 287, 288, 288, 289, 289, 290, 290, 290, 291, 291, 291, 291, 291, 291, 292, 292, 293, 293, 294, 294, 294, 295, 295, 295, 296, 296, 296, 297, 297, 299, 298, 300, 300, 301, 301, 302, 302, 303, 303, 304, 304, 304, 305, 305, 306, 306, 307, 307, 308, 309, 309, 310, 311, 311, 311, 312, 312, 313, 314, 315, 315, 316, 316, 317, 318, 318, 319, 320, 320, 320, 320, 321, 321, 322, 324, 323, 325, 325, 326, 326, 328, 327, 329, 329, 330, 330, 331, 330, 330, 330, 332, 333, 330, 330, 330, 334, 335, 336, 330, 337, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 338, 338, 338, 338, 339, 339, 340, 340, 341, 341, 342, 342, 343, 343, 344, 344, 346, 345, 347, 348, 347, 347, 349, 349, 349, 349, 350, 350, 351, 351, 351, 351, 351, 351, 351, 352, 354, 353, 355, 355, 356, 356, 357, 358, 358, 359, 359, 360, 361, 361, 362, 363, 364 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 2, 2, 2, 1, 2, 2, 2, 2, 0, 2, 1, 2, 0, 3, 1, 3, 0, 0, 10, 0, 3, 1, 3, 2, 1, 2, 1, 0, 3, 2, 2, 2, 2, 2, 0, 0, 11, 0, 0, 0, 12, 0, 0, 8, 1, 0, 0, 3, 0, 1, 1, 3, 4, 4, 4, 2, 1, 2, 0, 1, 1, 0, 2, 0, 3, 0, 3, 1, 3, 2, 1, 1, 3, 4, 1, 3, 2, 0, 6, 1, 3, 0, 5, 3, 3, 1, 1, 3, 1, 5, 0, 1, 1, 3, 1, 1, 1, 2, 0, 1, 1, 1, 4, 4, 4, 3, 1, 1, 4, 0, 5, 0, 2, 0, 3, 1, 1, 5, 2, 3, 1, 4, 4, 3, 2, 2, 1, 1, 5, 4, 4, 3, 0, 0, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 3, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 4, 2, 4, 1, 1, 1, 4, 0, 7, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 0, 5, 3, 3, 1, 1, 1, 3, 3, 0, 4, 1, 6, 6, 4, 3, 3, 2, 2, 1, 3, 4, 1, 1, 0, 1, 2, 1, 2, 4, 4, 3, 2, 1, 1, 2, 2, 0, 1, 4, 4, 3, 3, 3, 2, 1, 2, 2, 2, 2, 2, 1, 2, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, 4, 1, 1, 1, 4, 1, 4, 0, 4, 0, 6, 3, 0, 6, 3, 0, 1, 1, 0, 2, 1, 2, 6, 1, 1, 1, 2, 2, 1, 1, 3, 1, 3, 0, 1, 4, 6, 4, 5, 4, 1, 1, 1, 1, 1, 1, 1, 0, 4, 1, 0, 2, 1, 3, 3, 2, 0, 4, 1, 0, 4, 1, 1, 1, 2, 2, 5, 3, 0, 0, 7, 0, 0, 7, 1, 1, 2, 3, 4, 1, 3, 2, 3, 1, 2, 3, 4, 1, 3, 1, 3, 3, 0, 8, 0, 9, 5, 0, 9, 0, 7, 1, 1, 1, 1, 0, 1, 0, 1, 1, 2, 0, 3, 2, 3, 2, 3, 2, 1, 2, 1, 4, 1, 4, 2, 4, 3, 2, 4, 3, 1, 3, 1, 1, 3, 0, 3, 0, 1, 1, 1, 1, 3, 2, 3, 4, 2, 1, 1, 1, 1, 1, 4, 3, 3, 3, 2, 1, 1, 2, 2, 0, 1, 2, 0, 0, 1, 1, 2, 3, 1, 2, 1, 3, 6, 5, 5, 2, 2, 4, 0, 4, 1, 2, 1, 1, 0, 3, 1, 1, 1, 2, 0, 4, 1, 3, 0, 0, 7, 5, 2, 0, 0, 0, 12, 0, 6, 2, 2, 2, 3, 6, 8, 10, 12, 3, 4, 1, 1, 3, 5, 2, 2, 0, 1, 0, 1, 0, 1, 1, 3, 4, 7, 1, 3, 0, 2, 2, 0, 4, 2, 0, 1, 1, 3, 1, 3, 4, 4, 3, 4, 4, 3, 4, 0, 0, 2, 1, 2, 1, 3, 1, 1, 3, 0, 1, 1, 1, 1, 1, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint16 yydefact[] = { 0, 113, 113, 0, 0, 0, 115, 0, 47, 14, 2, 3, 115, 7, 359, 0, 629, 633, 631, 0, 463, 464, 630, 0, 0, 465, 466, 387, 0, 0, 323, 324, 325, 326, 315, 316, 317, 318, 327, 328, 329, 330, 319, 320, 321, 322, 616, 616, 246, 253, 353, 355, 354, 244, 379, 382, 385, 386, 357, 358, 0, 6, 270, 238, 356, 9, 343, 344, 345, 346, 339, 340, 341, 342, 347, 348, 497, 8, 1, 0, 0, 0, 628, 128, 0, 114, 118, 122, 129, 117, 0, 230, 230, 230, 0, 0, 46, 0, 33, 34, 35, 0, 11, 0, 137, 138, 461, 451, 380, 0, 0, 0, 390, 215, 216, 0, 391, 388, 140, 402, 389, 0, 251, 257, 241, 273, 239, 252, 258, 274, 240, 263, 268, 245, 280, 242, 264, 269, 281, 243, 249, 255, 254, 291, 247, 250, 256, 292, 248, 261, 266, 265, 306, 259, 262, 267, 307, 260, 289, 298, 277, 275, 271, 290, 299, 276, 272, 304, 313, 284, 282, 278, 305, 314, 283, 279, 287, 296, 295, 293, 285, 288, 297, 294, 286, 302, 311, 310, 308, 300, 303, 312, 309, 301, 499, 499, 383, 473, 380, 499, 116, 126, 127, 0, 0, 449, 351, 377, 0, 364, 367, 369, 0, 0, 0, 120, 18, 43, 0, 0, 0, 13, 360, 0, 453, 380, 197, 198, 169, 170, 148, 149, 0, 0, 0, 141, 143, 142, 0, 145, 144, 0, 146, 147, 156, 157, 158, 0, 0, 150, 153, 0, 171, 0, 0, 175, 154, 159, 204, 199, 0, 0, 395, 0, 0, 0, 445, 351, 597, 0, 377, 377, 611, 500, 502, 501, 503, 509, 512, 513, 351, 377, 614, 502, 0, 0, 452, 351, 597, 498, 502, 0, 0, 0, 343, 344, 345, 346, 352, 0, 0, 378, 121, 377, 0, 617, 29, 0, 133, 377, 446, 510, 511, 441, 351, 377, 0, 363, 365, 369, 436, 437, 0, 369, 125, 21, 380, 36, 39, 0, 16, 494, 495, 469, 492, 459, 0, 381, 0, 0, 0, 139, 164, 161, 0, 0, 0, 0, 163, 361, 0, 0, 0, 160, 0, 165, 0, 167, 0, 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 210, 0, 151, 0, 0, 362, 162, 407, 403, 0, 393, 396, 404, 406, 405, 392, 401, 424, 197, 0, 0, 421, 0, 423, 0, 467, 414, 420, 0, 0, 505, 0, 626, 0, 518, 0, 609, 443, 610, 612, 597, 508, 505, 613, 615, 377, 480, 475, 230, 230, 472, 0, 454, 505, 0, 0, 0, 450, 447, 0, 0, 231, 0, 626, 0, 0, 0, 134, 0, 0, 0, 124, 377, 131, 377, 438, 123, 132, 0, 380, 44, 48, 48, 15, 0, 0, 470, 0, 0, 456, 0, 0, 201, 200, 534, 526, 0, 0, 155, 0, 0, 195, 196, 0, 0, 191, 190, 188, 189, 187, 186, 184, 185, 183, 182, 181, 176, 177, 178, 179, 180, 208, 0, 152, 0, 209, 395, 0, 151, 427, 0, 0, 418, 400, 0, 413, 0, 426, 417, 444, 504, 506, 0, 632, 516, 627, 0, 604, 598, 0, 605, 607, 517, 458, 477, 479, 474, 481, 473, 119, 130, 448, 368, 369, 0, 515, 623, 619, 618, 0, 621, 0, 30, 0, 626, 374, 217, 442, 439, 0, 0, 134, 26, 0, 23, 380, 19, 0, 50, 380, 380, 17, 496, 493, 377, 469, 473, 0, 0, 527, 203, 173, 172, 166, 168, 0, 0, 214, 207, 394, 384, 197, 0, 0, 429, 0, 0, 415, 416, 507, 602, 599, 600, 0, 0, 377, 476, 482, 0, 377, 478, 484, 0, 377, 370, 0, 620, 32, 0, 31, 514, 0, 135, 218, 220, 335, 336, 331, 332, 337, 338, 333, 334, 230, 230, 440, 366, 371, 22, 0, 25, 0, 60, 0, 51, 52, 616, 616, 37, 40, 462, 0, 0, 0, 212, 0, 0, 535, 0, 528, 529, 0, 192, 194, 0, 397, 399, 0, 422, 419, 0, 606, 608, 377, 0, 486, 377, 377, 0, 489, 377, 377, 373, 622, 411, 409, 408, 375, 0, 219, 221, 0, 225, 0, 0, 24, 0, 0, 63, 49, 0, 57, 0, 0, 0, 377, 377, 205, 0, 206, 624, 0, 0, 359, 0, 558, 542, 0, 0, 0, 630, 0, 0, 0, 0, 585, 580, 548, 0, 0, 523, 0, 230, 230, 230, 0, 0, 227, 552, 556, 0, 0, 520, 579, 546, 547, 0, 530, 0, 0, 428, 601, 488, 377, 0, 491, 377, 0, 455, 0, 0, 136, 532, 224, 0, 0, 369, 372, 0, 28, 230, 230, 45, 65, 67, 59, 0, 61, 62, 53, 377, 377, 377, 60, 60, 460, 457, 213, 531, 0, 525, 537, 0, 0, 0, 587, 0, 0, 583, 569, 570, 571, 0, 0, 0, 0, 586, 0, 584, 553, 228, 524, 0, 0, 229, 0, 0, 0, 538, 0, 522, 521, 0, 540, 539, 544, 0, 562, 0, 237, 174, 398, 487, 483, 490, 485, 0, 533, 222, 223, 377, 20, 27, 0, 0, 0, 0, 64, 54, 55, 56, 0, 0, 625, 0, 0, 0, 588, 0, 0, 0, 581, 572, 0, 577, 0, 551, 549, 550, 536, 0, 234, 369, 0, 235, 369, 236, 557, 0, 545, 0, 410, 376, 0, 0, 66, 69, 380, 76, 73, 68, 0, 41, 541, 0, 543, 563, 567, 0, 578, 0, 232, 377, 233, 377, 555, 0, 0, 72, 78, 29, 380, 0, 0, 111, 38, 0, 559, 587, 0, 582, 589, 0, 430, 433, 561, 70, 71, 0, 0, 74, 77, 0, 83, 42, 0, 0, 568, 0, 0, 0, 590, 591, 573, 217, 217, 0, 75, 113, 0, 560, 564, 0, 0, 589, 0, 0, 431, 434, 0, 81, 98, 115, 100, 587, 0, 0, 0, 574, 592, 0, 0, 80, 0, 112, 0, 0, 593, 0, 0, 0, 432, 435, 82, 0, 84, 103, 99, 101, 0, 108, 102, 109, 565, 0, 595, 0, 575, 0, 0, 87, 88, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 107, 0, 0, 0, 566, 594, 596, 576, 92, 86, 89, 104, 105, 106, 110, 0, 93, 94, 97, 96, 91, 0, 95 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 5, 8, 9, 102, 221, 329, 10, 325, 639, 457, 561, 562, 563, 766, 307, 443, 550, 11, 98, 459, 701, 99, 460, 702, 914, 100, 326, 565, 101, 567, 641, 642, 643, 695, 696, 773, 774, 775, 843, 776, 844, 883, 905, 884, 885, 886, 926, 957, 932, 947, 984, 997, 998, 999, 1030, 1031, 1032, 1033, 973, 985, 986, 987, 988, 913, 930, 6, 7, 79, 85, 86, 887, 88, 89, 308, 554, 686, 118, 726, 990, 247, 727, 500, 249, 250, 251, 252, 253, 254, 255, 659, 256, 482, 257, 346, 653, 258, 259, 620, 621, 622, 728, 90, 438, 729, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 631, 632, 74, 75, 76, 93, 299, 48, 49, 50, 51, 52, 316, 322, 317, 209, 309, 318, 692, 210, 619, 439, 53, 224, 54, 55, 56, 117, 387, 388, 57, 121, 389, 685, 757, 402, 403, 404, 594, 405, 509, 406, 407, 869, 942, 968, 872, 943, 969, 541, 320, 270, 321, 108, 58, 59, 536, 574, 466, 223, 60, 513, 465, 284, 285, 428, 604, 608, 605, 609, 333, 334, 959, 199, 272, 273, 290, 275, 276, 310, 277, 311, 278, 312, 733, 734, 810, 735, 577, 656, 657, 658, 759, 473, 736, 737, 738, 739, 792, 822, 740, 741, 805, 865, 823, 876, 791, 933, 916, 962, 1006, 917, 824, 803, 856, 938, 939, 940, 994, 410, 411, 545, 668, 527, 528, 529, 194, 441, 442, 546, 547, 548, 709, 522, 261, 62, 63, 523, 64 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -729 static const yytype_int16 yypact[] = { 560, 204, 583, 2204, 2276, 251, 311, 1317, 536, -729, -729, -729, 534, -729, -729, 273, -729, -729, -729, 76, 215, -729, -729, 52, 367, -729, -729, -729, 322, 544, 2947, 630, 2947, 630, 1209, 760, 1209, 760, 2947, 630, 2947, 630, 1209, 760, 1209, 760, -729, -729, -729, -729, -729, -729, -729, -729, 115, -729, -729, -729, -729, -729, 168, -729, -729, -729, -729, -729, 2966, 731, 2966, 731, 1093, 386, 1093, 386, -729, -729, -729, -729, -729, 1317, 323, 407, -729, -729, 605, -729, -729, -729, -729, -729, 343, 352, 389, -729, 1317, 605, -729, 605, -729, -729, -729, 441, 421, 605, -729, -729, -729, -729, -729, 605, 2695, 468, -729, -729, -729, 3807, -729, -729, -729, -729, -729, 69, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, 317, 402, -729, -729, -729, 446, -729, -729, -729, 3807, 499, 514, 83, 115, 480, 491, -729, 160, 334, 343, 529, -729, -729, -729, 605, 605, 605, -729, -729, 565, 123, -729, -729, -729, -729, -729, -729, -729, 538, 586, 605, -729, -729, -729, 3807, -729, -729, 1439, -729, -729, -729, -729, -729, 3807, 552, -729, 569, 469, -729, 3866, 3925, -729, 1498, 848, -729, -729, 573, 3807, 589, 576, 579, 2440, -729, 83, 410, 3041, 741, 741, -729, -729, 115, -729, 9, -729, -729, -729, 83, 741, -729, 115, 607, 482, 129, 83, 615, -729, -729, 608, 3807, 605, 83, 705, 83, 705, -729, 343, 343, 115, -729, 115, 655, -729, 3041, 659, -729, 115, -729, -729, -729, 664, 83, 115, 658, 632, -729, 698, 578, 578, 674, 160, -729, 694, -729, -729, -729, 117, -729, -729, 693, 651, -729, -729, 605, -729, 145, 3807, 2966, -729, -729, -729, 656, 662, 684, 663, -729, -729, 3807, 3434, 848, 939, 1439, -729, 1439, -729, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, 3807, -729, -729, 605, 3807, 3807, 605, -729, -729, -729, -729, 395, -729, 696, -729, -729, -729, -729, -729, -729, 713, 605, 3807, -729, 717, 1498, 669, 675, -729, -729, 350, 3366, 317, 402, 763, 1569, -729, 678, -729, -729, -729, 115, -729, -729, 402, -729, 115, 115, -729, -729, -729, -729, 720, 2256, -729, 446, 446, 721, 723, -729, 578, 278, 334, -729, 771, 763, 1999, 2237, 1999, 2, 605, 334, 334, -729, 115, -729, 115, -729, -729, -729, 783, -729, 691, 733, 733, -729, 605, 3807, 605, 695, 565, -729, 4091, 699, -729, -729, -729, -729, 702, 3687, 1498, 706, 707, 1498, 1498, 772, 775, 2026, 2264, 1149, 1460, 1863, 1380, 878, 878, 878, 797, 797, 599, 599, -729, -729, -729, -729, 722, -729, 724, -729, 589, 726, 3984, -729, 3098, 2860, -729, -729, 2372, -729, 3495, -729, -729, 578, -729, -729, 729, -729, -729, -729, 730, -729, -729, 743, 349, -729, -729, -729, 844, 98, -729, -729, -729, -729, -729, -729, -729, 698, 744, -729, -729, -729, -729, 445, -729, 725, -729, 523, 763, -729, 630, -729, 578, 399, 334, 384, -729, 1, -729, -729, 691, 774, 2947, -729, -729, -729, 1498, -729, 115, 651, -729, 2966, 605, 85, -729, -729, -729, -729, -729, 3807, 3807, -729, -729, -729, -729, 459, 748, 3807, -729, 761, 3495, -729, -729, -729, -729, -729, -729, 2925, 3807, 137, 765, -729, 3807, 738, 766, -729, 767, 115, -729, 868, -729, -729, 2947, -729, -729, 3556, -729, 118, -729, 2947, 630, 1209, 760, 2947, 630, 1209, 760, -729, 790, -729, -729, -729, -729, 783, 691, 804, -729, 773, 777, -729, -729, -729, 691, 691, -729, 780, 781, 782, -729, 244, 605, -729, 1734, 841, -729, 2860, 1201, 1201, 3807, -729, -729, 4052, -729, -729, 1569, -729, -729, 4032, 3807, -729, 115, 4032, 3807, -729, 115, 115, 845, -729, -729, -729, 1498, -729, 34, -729, -729, 240, -729, 343, 3556, -729, 2137, 794, 393, -729, 2947, 334, 343, 813, 821, 115, 115, -729, 605, -729, -729, 358, 346, 755, 834, -729, -729, 836, 840, 3807, 861, 846, 847, 3746, 325, 705, -729, -729, 862, 849, 2528, 1606, 352, 389, -729, 822, 2791, -729, -729, 901, 3157, 87, -729, -729, -729, -729, 2628, -729, 824, 826, -729, -729, -729, 4032, 844, -729, 4032, 98, -729, 2860, 684, -729, -729, -729, 860, 876, 160, -729, 2035, -729, 352, 389, -729, -729, -729, -729, 2137, -729, -729, -729, 741, 741, 741, -729, -729, -729, -729, -729, -729, 605, -729, -729, 3807, 897, 3626, 3807, 3807, 4113, -729, -729, -729, -729, 892, 3807, 899, 903, -729, 3305, -729, -729, -729, -729, 870, 904, -729, 334, 343, 905, -729, 861, -729, -729, 3235, -729, -729, -729, 3626, -729, 3807, -729, -729, -729, -729, -729, -729, -729, 873, -729, -729, -729, 115, -729, -729, 334, 343, 1869, 1869, -729, -729, -729, -729, 881, 884, -729, 883, 3807, 957, -729, 916, 887, 3807, -729, -729, 922, -729, 3807, -729, -729, -729, -729, 925, -729, 698, 927, -729, 160, -729, -729, 3626, -729, 896, -729, 885, 2102, 605, -729, -729, 941, 924, -729, -729, 923, -729, -729, 908, -729, -729, -729, 4150, -729, 149, -729, 115, -729, 115, -729, 943, 1968, -729, 963, -729, -729, 114, 605, -729, -729, 930, -729, 3807, 3626, -729, 49, 946, 384, 2, -729, -729, -729, 967, 255, -729, -729, 950, -729, -729, 3626, 951, -729, 958, 605, 157, 926, -729, -729, 630, 630, 2966, -729, -729, 960, -729, -729, 3807, 929, 49, 964, 49, -729, -729, 124, -729, -729, 938, -729, 3807, 937, 1030, 169, -729, -729, 684, 684, -729, 2966, -729, 1834, 944, -729, 983, 1037, 980, -729, -729, -729, 58, -729, -729, -729, -729, 369, -729, -729, 987, -729, 3807, -729, 487, -729, 605, 366, -729, 970, -729, 605, 605, 605, 605, 3807, 3626, 952, 1043, 988, 993, -729, 58, 605, 246, -729, 416, 426, 977, -729, -729, -729, -729, 2695, -729, -729, -729, -729, -729, -729, 959, 982, -729, -729, 1498, -729, 2695, -729 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, 444, -729, -729, 193, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, 622, -729, -729, 385, -116, -729, -729, -729, -729, -729, -729, -729, 241, -729, -646, -729, -729, -729, -729, -729, -729, -729, -729, 75, -729, -729, -729, 54, -644, -729, -729, -729, -385, 91, -729, -729, 12, -729, -729, 344, -729, 13, -729, -729, 53, -729, -729, 78, -228, -20, -729, 163, 588, -355, -729, -729, 447, -729, -729, -211, -729, 700, -729, 851, -729, -729, 853, 670, -227, -729, 474, -729, -28, -413, -641, -4, -1, 0, 8, 4, 7, 11, 19, -547, -535, -729, -729, -532, -523, -729, -729, 14, 25, -729, -729, -275, -111, -729, -616, 224, 16, 127, 184, 492, -729, -636, -89, -729, -729, -303, -405, -729, -729, -729, 818, 856, -180, 558, 22, -729, 1067, -729, 593, -196, -729, -729, 413, -729, -458, -729, 600, -729, -341, -729, -729, 710, -729, -729, -729, -729, -729, -729, -207, -409, 703, -31, 18, -729, -729, -729, -729, -729, -729, -729, -729, 546, -493, -729, 728, -729, -729, 368, 373, 657, 660, 30, -729, 326, -83, -126, 110, -729, -226, 855, -729, -729, 683, 401, -729, -729, -280, -729, -729, -729, 475, -729, -729, -317, -729, -729, -729, -729, -687, 417, -729, -729, -729, -598, -729, -729, -729, -729, -729, -729, -729, -589, -729, -728, 201, -729, 200, -729, -729, -729, -394, -729, -729, 715, 10, -45, -729, -729, 716, -729, 549, -729, -400, 17, 652, 1104, -729, -232 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -604 static const yytype_int16 yytable[] = { 66, 208, 195, 67, 68, 319, 342, 627, 70, 119, 426, 71, 69, 61, 12, 72, 452, 526, 286, 628, 87, 91, 629, 73, 94, 501, 502, 343, 337, 474, 392, 630, 92, 540, 77, 758, 348, 558, 556, 557, 732, 543, 553, 610, 415, 338, 122, 127, 131, 136, 384, 593, 636, 762, 158, 163, 167, 172, 742, 211, 936, 104, 105, 212, 213, 214, 516, 743, 274, 283, 264, -376, 418, 269, 627, 216, 196, 217, 198, 104, 105, 650, 122, 127, 131, 136, 628, 808, 825, 629, 337, 18, 87, 91, 453, 298, 94, 107, 630, 637, -376, 205, 472, 827, 92, 854, 66, 87, 91, 67, 68, 94, 732, 937, 70, 110, 24, 71, 69, 92, 654, 72, 14, 15, 16, 17, 18, 225, 732, 73, 742, 687, 265, 19, 20, 21, 742, 877, 107, 743, 260, 606, 337, 22, 106, 743, 458, 996, 24, 23, 826, 501, 618, 634, 426, 206, 298, 123, 128, 132, 137, 207, 204, 271, 281, 159, 164, 168, 173, 298, 24, 104, 105, 596, 427, 970, 298, 868, 27, 28, 672, 222, 323, 928, 655, 29, 461, 107, 934, 903, 304, 335, 919, 123, 128, 132, 137, 430, 327, 328, 952, 746, 294, 298, -5, 295, 296, 866, 25, 26, 27, 28, 977, 467, 297, 462, 336, 29, 140, 145, 149, 154, 971, 305, 306, 336, 176, 181, 185, 190, 935, 336, 27, 28, 974, 906, 197, 66, 611, 29, 67, 68, 386, 205, 313, 70, 948, 336, 71, 69, 920, 78, 72, 667, 140, 145, 149, 154, 953, 925, 73, 752, 337, 294, 580, 755, 295, 296, 436, 437, 978, 347, 392, 248, 749, 297, 294, 564, 263, 295, 296, 66, 518, 294, 67, 68, 295, 296, 297, 70, 778, 415, 71, 69, 518, 297, 72, 314, 330, 834, 958, 332, 429, 315, 73, 518, 706, 747, 1002, 761, 294, -4, 341, 295, 296, 1026, 119, 109, 427, 1019, 205, 266, 297, 196, 945, 603, 520, 981, 104, 105, 453, 453, 112, 113, 114, 103, 66, 205, 313, 67, 68, 305, 306, 400, 70, 707, 205, 71, 69, 520, 66, 72, 66, 67, 68, 67, 68, 336, 70, 73, 70, 71, 69, 71, 69, 72, 291, 72, 337, 760, 469, 435, 451, 73, 267, 73, 455, 436, 437, 539, 268, 269, 801, 638, 477, 115, 478, 646, 647, 436, 514, 314, 201, 17, 18, 627, 627, 315, 532, 533, 206, 19, 20, 21, 345, 205, 207, 628, 628, 1001, 629, 629, 397, -377, 398, 788, 436, 437, 600, 630, 630, -349, 202, 200, 635, 66, 708, 786, 67, 68, 111, 1002, 413, 70, 1003, 1011, 71, 69, 215, 196, 72, 835, 337, 24, 196, 789, 429, 601, 73, 812, 337, 337, 1004, -373, 818, 434, 787, 499, -350, 280, 503, 838, 305, 306, 1012, 268, 269, -377, 771, 413, 203, 772, 226, -377, -377, 507, 25, 26, 1002, 227, 113, 114, -373, 424, 386, 1027, 14, 15, 1002, 17, 18, 408, -58, 504, 802, 1028, 505, 19, 20, 21, 633, 220, 607, 287, 420, 27, 28, 232, 233, 288, 269, 431, 29, 23, 345, 24, 82, 345, 519, 345, 218, 282, 219, 481, 555, 289, 141, 146, 150, 155, 519, 262, 351, 384, 177, 182, 186, 191, 447, 292, 569, 519, 332, 613, 332, 603, 614, 104, 105, 302, 623, 425, 453, 624, 112, 113, 114, 662, 625, 851, 663, 626, 141, 146, 150, 155, 331, 900, 104, 105, 902, 66, 25, 26, 67, 68, 293, 27, 28, 70, 644, -471, 71, 69, 29, 1008, 72, 400, 1009, 303, 400, 645, 104, 105, 73, 16, 17, 18, 324, 699, 700, 339, 763, 689, 691, 651, 870, 115, 104, 105, -12, 670, 95, -12, 22, -12, 1014, 623, 1016, 1017, 624, 616, -12, 617, 96, 625, 670, -12, 626, 97, 1, 2, 3, 4, 14, 15, 16, 17, 18, 122, 127, 305, 306, 158, 163, 19, 20, 21, 24, 340, 1018, 979, 980, 349, 652, 22, 374, 375, 376, -10, 764, 23, -10, -10, -10, 849, 850, 350, 779, 780, 730, -10, -377, 744, 383, 385, -10, 393, -377, -377, 394, 731, 125, 129, 134, 138, 143, 147, 152, 156, 161, 165, 170, 174, 179, 183, 188, 192, 116, 116, 355, 357, 813, 814, 815, 910, 423, 767, 768, 433, 27, 28, 644, 18, 337, 955, 956, 29, 440, 769, 25, 26, 444, 645, 607, 871, 446, 449, 304, 927, 450, 337, 341, 463, 341, 14, 15, 400, 17, 18, 841, 842, 730, 454, 456, 744, 19, 20, 21, 464, 123, 128, 472, 731, 159, 164, -137, 470, 730, 506, 510, 744, 23, 471, 475, 301, 16, 17, 18, 731, 511, 24, 521, 512, 24, 19, 20, 21, 530, 840, 768, 676, 542, 873, 785, 22, 560, 845, 768, 534, 537, 769, 538, 336, 572, -138, 566, 576, -138, 769, 341, 305, 306, 578, 305, 306, 341, 581, 582, 140, 145, 764, 341, 176, 181, 583, 341, -138, 584, -138, -138, 25, 26, 585, 586, 615, 301, 588, 301, 301, 597, 598, 417, 27, 28, 400, 27, 28, -138, 301, 29, 422, 640, 29, 599, 612, 301, 205, 313, 664, 25, 26, 372, 373, 374, 375, 376, 768, 768, 690, 666, 301, 907, 674, 678, 341, 679, 301, 769, 769, 341, 544, 694, 301, 697, 698, 654, 279, 279, 703, 704, 781, 279, 705, 800, 635, 124, 602, 133, 782, 142, 929, 151, 770, 160, 768, 169, 790, 178, 793, 187, 314, 341, 794, 796, 806, 769, 315, 377, 378, 379, 380, 381, 382, 390, 797, 798, 951, 807, 768, 820, 816, 124, 828, 133, 553, 142, 829, 151, 836, 769, 370, 371, 372, 373, 374, 375, 376, 623, 623, 66, 624, 624, 67, 68, 837, 625, 625, 70, 626, 626, 71, 69, 852, 341, 72, 855, 857, 960, 279, 853, 860, 1000, 73, 861, 401, 863, 66, 862, 867, 67, 68, 879, 788, 874, 70, 1010, 893, 71, 69, 889, 301, 72, 890, 891, 894, 989, 768, 895, 878, 73, 897, 1000, 1025, 899, 341, 901, 904, 769, -204, -204, -204, -204, -204, -204, 908, 911, 912, 301, 915, 301, 341, 923, -79, 931, 941, 892, 944, 946, 66, 949, 950, 67, 68, 954, 300, 898, 70, 961, 964, 71, 69, 66, 966, 72, 67, 68, 972, 975, 468, 70, 976, 73, 71, 69, 991, 992, 72, 993, 995, 476, 1005, 1013, 1020, 1021, 73, 1023, 1022, 479, 480, 1035, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 1029, 909, 855, 1036, 693, 568, 777, 341, 888, 409, 1024, 414, 416, 1037, 279, 279, 1015, 590, 688, 120, 587, 508, 421, 17, 18, 352, 279, 353, 765, 432, 401, 19, 20, 21, 517, 595, 963, 279, 279, 515, 141, 146, 649, 831, 177, 182, 573, 571, 855, 24, 445, 833, 809, 301, 419, 745, 448, 126, 130, 135, 139, 144, 148, 153, 157, 162, 166, 171, 175, 180, 184, 189, 193, 124, 819, 133, 965, 967, 1007, 390, 535, 551, 0, 552, 301, 681, 570, 0, 301, 0, 0, 0, 301, 126, 130, 135, 139, 144, 148, 153, 157, 0, 0, 0, 0, 0, 25, 26, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 29, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 401, 0, 0, 401, 0, 401, 16, 17, 18, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 301, 0, 0, 301, 301, 22, 0, 301, 301, 0, 0, 0, 531, 24, 360, 0, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 301, 301, 0, 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 125, 129, 143, 147, 161, 165, 179, 183, 660, 661, 0, 0, 0, 0, 0, 0, 665, 0, 0, 401, 0, 0, 0, 0, 25, 26, 0, 671, 0, 27, 28, 675, 0, 0, 301, 0, 29, 301, 0, 0, 0, 0, 0, 80, 684, -230, 14, 15, 16, 17, 18, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 301, 301, 301, 0, 0, 0, 22, 0, 0, 0, 0, 81, 23, 0, 24, 82, 0, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 751, 0, -230, 0, 754, 0, 0, 0, -230, 0, 0, 0, 0, 0, 83, 0, 0, 0, 648, 0, 684, 0, 0, 0, 301, 0, 126, 130, 135, 139, 0, 0, 0, 0, 0, 25, 26, 0, 0, 0, 27, 28, 84, 0, 0, 795, 0, 29, 0, 673, 0, 0, 0, 677, 0, 0, 0, 680, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 344, 0, 226, 14, 15, 0, 17, 18, 0, 227, 113, 114, 0, 228, 19, 20, 21, 401, 301, 0, 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 229, 24, 82, 0, 230, 231, 232, 233, 124, 0, 142, 0, 160, 234, 178, 0, 235, 0, 750, 0, 0, 0, 753, 236, 237, 238, 756, 0, 239, 240, 0, 241, 0, 0, 242, 243, -202, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 0, 783, 784, 0, 244, 245, 246, 0, 0, 25, 26, 0, 0, 0, 27, 28, 0, 0, 358, 359, 360, 29, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 830, 524, 0, 832, 14, 15, 16, 17, 18, 0, 0, 0, 0, 525, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 22, 0, 846, 847, 848, 0, 23, 0, 24, 0, 0, 0, 0, 811, 391, -226, -226, -226, -226, -226, -226, 0, -226, -226, -226, 0, -226, -226, -226, -226, -226, 0, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, 0, -226, -226, -226, -226, 0, 0, 0, 0, 0, -226, 0, 0, -226, 0, 880, 0, 0, 25, 26, -226, -226, -226, 27, 28, -226, -226, 0, -226, -603, 29, -226, -226, -226, -226, 0, 0, 0, 0, -226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -226, -226, -226, 0, 0, -226, -226, 0, 0, 0, -226, -226, 0, 0, -226, 0, 0, -226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 921, 0, 922, 0, 0, 1034, 0, 0, 0, 126, 130, 144, 148, 162, 166, 180, 184, 710, 1034, 396, 711, 15, 16, 17, 18, 0, 227, 113, 114, 0, 228, 19, 20, 21, 712, 0, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 23, 229, 24, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 0, 241, 0, 0, 242, 243, 472, 724, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0, 25, 26, 0, 804, 0, 27, 28, 0, 0, 0, 0, 80, 29, 104, 711, 15, 16, 17, 18, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 23, 0, 24, 0, 0, 80, 0, 0, 14, 15, 16, 17, 18, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 23, 0, 24, 83, 0, 0, 0, 0, 0, 0, 0, 982, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 0, 25, 26, 0, 0, 0, 27, 28, 84, 0, 983, 0, 0, 29, 881, 83, 0, 0, 0, 0, 0, 0, 882, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, 0, 0, 0, 27, 28, 84, 0, 0, 80, 0, 29, 14, 15, 16, 17, 18, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 23, 524, 24, 544, 14, 15, 16, 17, 18, 0, 0, 0, 0, 525, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 23, 0, 24, 0, 0, 0, 80, 83, 0, 14, 15, 16, 17, 18, 882, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 25, 26, 22, 0, 0, 27, 28, 84, 23, 924, 24, 0, 29, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 0, 0, 0, 25, 26, 0, 0, 0, 27, 28, 0, 0, 0, 0, -603, 29, 0, 80, 83, 0, 14, 15, 16, 17, 18, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 25, 26, 22, 0, 0, 27, 28, 84, 23, 839, 24, 0, 29, 80, 0, 0, 14, 15, 16, 17, 18, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 23, 0, 24, 83, 0, 0, 0, 0, 0, 0, 882, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, 0, 0, 0, 27, 28, 84, 0, 0, 0, 0, 29, 13, 83, 0, 14, 15, 16, 17, 18, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 25, 26, 22, 0, 0, 27, 28, 84, 23, 0, 24, 549, 29, 0, 14, 15, 16, 17, 18, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 424, 0, 0, 14, 15, 22, 17, 18, 0, 0, 0, 23, 0, 24, 19, 20, 21, 0, 0, 0, 65, 0, 0, 14, 15, 0, 17, 18, 0, 0, 23, 0, 24, 82, 19, 20, 21, 25, 26, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 29, 23, 0, 24, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 0, 0, 0, 25, 26, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 25, 26, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 25, 26, 0, 0, 0, 27, 28, 395, 0, 396, 105, 0, 29, 0, 0, 0, 227, 113, 114, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 397, 241, 398, 0, 242, 243, 399, 395, 0, 396, 105, 0, 0, 0, 0, 0, 227, 113, 114, 0, 228, 0, 0, 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -468, 229, -468, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 397, 241, 398, 0, 242, 243, 399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0, 0, 396, 711, 15, 16, 17, 18, 0, 227, 113, 114, -412, 228, 19, 20, 21, 712, 0, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 23, 229, 24, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 0, 241, 0, 0, 242, 243, 472, 724, 0, 0, 0, 0, 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0, 25, 26, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 29, 226, 14, 15, 16, 17, 18, 0, 227, 113, 114, 0, 228, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 23, 229, 24, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 0, 241, 0, 0, 242, 243, 0, 0, 226, 14, 15, 0, 17, 18, 0, 227, 113, 114, 0, 228, 19, 20, 21, 244, 245, 246, 0, 0, 25, 26, 0, 0, 0, 27, 28, 0, 23, 229, 24, 82, 29, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 0, 241, 0, 0, 242, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0, 25, 26, 0, 0, 0, 27, 28, 811, 0, 396, 105, 0, 29, 0, 0, 0, 227, 113, 114, 0, 228, 0, 0, 0, 712, 0, 713, 714, 715, 716, 717, 817, 719, 720, 721, 722, 723, 0, 229, 0, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 0, 241, 0, 0, 242, 243, 472, 724, 395, 0, 396, 105, 725, 0, 0, 0, 0, 227, 113, 114, 0, 228, 0, 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -519, 0, 229, 0, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 397, 241, 398, 0, 242, 243, 399, 14, 15, 16, 17, 18, 0, 0, 0, 0, 669, 0, 19, 20, 21, 0, 0, 244, 245, 246, 0, 0, 22, 14, 15, 16, 17, 18, 23, 0, 24, -412, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 14, 15, 22, 17, 18, 0, 0, 0, 23, 0, 24, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, 0, 0, 0, 27, 28, 226, 0, 0, 0, 0, 29, 0, 227, 113, 114, 0, 228, 25, 26, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 229, 0, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 0, 241, 0, 0, 242, 243, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 359, 360, 412, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 821, 0, 396, 105, 0, 0, 0, 0, 0, 227, 113, 114, 0, 228, 0, 0, 0, 712, 0, 713, 714, 715, 716, 717, 817, 719, 720, 721, 722, 723, 0, 229, 0, 82, 0, 230, 231, 232, 233, 0, 592, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 0, 241, 0, 0, 242, 243, 472, 724, 0, 0, 0, 0, 725, 0, 0, 0, 0, 875, 0, -554, -554, 0, 0, 244, 245, 246, -554, -554, -554, 0, -554, 0, 0, 0, -554, 0, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, 0, -554, 0, -554, 0, -554, -554, -554, -554, 0, 0, 0, 0, 0, -554, 0, 0, -554, 0, 0, 0, 0, 0, 0, -554, -554, -554, 0, 0, -554, -554, 0, -554, 0, 0, -554, -554, -554, -554, 0, 864, 0, 226, -554, 0, 0, 0, 0, 0, 227, 113, 114, 0, 228, -554, -554, -554, 712, 0, 713, 714, 715, 716, 0, 0, 719, 720, 721, 722, 723, 0, 229, 0, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 395, 241, 226, 0, 242, 243, 472, 724, 0, 227, 113, 114, 725, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0, 0, 0, 0, 229, 0, 82, 0, 230, 231, 232, 233, -425, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, -425, 241, -425, 0, 242, 243, 399, 344, 0, 226, 0, 0, 0, 0, 0, 0, 227, 113, 114, 0, 228, 0, 0, 244, 245, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 395, 241, 226, 0, 242, 243, -202, 0, 0, 227, 113, 114, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0, 0, 0, 0, 229, 0, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 682, 241, 226, 0, 242, 243, 399, 0, 0, 227, 113, 114, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0, 0, 0, 0, 229, 0, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 0, 241, 0, 0, 242, 243, 683, 0, 0, 0, 0, 396, 105, 0, 0, 0, 0, 0, 227, 113, 114, 0, 228, 244, 245, 246, 712, 0, 713, 714, 715, 716, 717, 817, 719, 720, 721, 722, 723, 0, 229, 0, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 0, 241, 226, 0, 242, 243, 472, 724, 0, 227, 113, 114, 725, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0, 0, 0, 0, 229, 0, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 226, 241, 0, 0, 242, 243, 579, 227, 113, 114, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0, 0, 229, 0, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 0, 241, 226, 0, 242, 243, 0, 799, 0, 227, 113, 114, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0, 0, 0, 0, 229, 0, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 226, 241, 0, 0, 242, 243, 0, 227, 113, 114, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0, 0, 229, 0, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 226, 354, 0, 0, 242, 243, 0, 227, 113, 114, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0, 0, 229, 0, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 589, 356, 0, 0, 242, 243, 0, 227, 113, 114, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 0, 0, 0, 229, 0, 82, 0, 230, 231, 232, 233, 0, 0, 0, 0, 0, 234, 0, 0, 235, 0, 0, 0, 0, 0, 0, 236, 237, 238, 0, 0, 239, 240, 0, 241, 0, 0, 242, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 244, 245, 246, 358, 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 358, 359, 360, 0, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 858, 27, 28, 0, 0, 358, 359, 360, 29, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 0, 748, 358, 359, 360, 859, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 358, 359, 360, 918, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376 }; static const yytype_int16 yycheck[] = { 4, 90, 47, 4, 4, 212, 234, 554, 4, 29, 285, 4, 4, 3, 2, 4, 319, 411, 198, 554, 7, 7, 554, 4, 7, 380, 381, 238, 224, 346, 262, 554, 7, 438, 4, 1, 247, 450, 447, 448, 656, 441, 40, 536, 270, 225, 30, 31, 32, 33, 261, 509, 51, 689, 38, 39, 40, 41, 656, 90, 11, 3, 4, 91, 92, 93, 407, 656, 194, 195, 1, 69, 63, 64, 621, 95, 54, 97, 60, 3, 4, 574, 66, 67, 68, 69, 621, 728, 1, 621, 286, 8, 79, 79, 320, 206, 79, 19, 621, 98, 98, 3, 68, 744, 79, 792, 110, 94, 94, 110, 110, 94, 728, 64, 110, 63, 33, 110, 110, 94, 35, 110, 4, 5, 6, 7, 8, 109, 744, 110, 728, 13, 63, 15, 16, 17, 734, 824, 60, 728, 110, 43, 338, 25, 68, 734, 326, 89, 33, 31, 63, 506, 552, 558, 429, 57, 267, 30, 31, 32, 33, 63, 84, 194, 195, 38, 39, 40, 41, 280, 33, 3, 4, 514, 285, 51, 287, 813, 95, 96, 43, 103, 213, 69, 99, 102, 69, 109, 916, 876, 30, 68, 43, 66, 67, 68, 69, 68, 218, 219, 43, 659, 206, 314, 0, 206, 206, 805, 90, 91, 95, 96, 43, 68, 206, 98, 102, 102, 34, 35, 36, 37, 98, 63, 64, 102, 42, 43, 44, 45, 917, 102, 95, 96, 962, 881, 68, 241, 541, 102, 241, 241, 262, 3, 4, 241, 933, 102, 241, 241, 101, 0, 241, 594, 70, 71, 72, 73, 101, 905, 241, 674, 458, 267, 475, 678, 267, 267, 299, 300, 101, 241, 504, 110, 668, 267, 280, 457, 115, 280, 280, 285, 408, 287, 285, 285, 287, 287, 280, 285, 699, 517, 285, 285, 420, 287, 285, 57, 220, 757, 944, 223, 285, 63, 285, 431, 62, 662, 62, 69, 314, 0, 234, 314, 314, 69, 336, 102, 429, 1006, 3, 4, 314, 301, 69, 532, 409, 971, 3, 4, 556, 557, 10, 11, 12, 62, 340, 3, 4, 340, 340, 63, 64, 265, 340, 101, 3, 340, 340, 432, 354, 340, 356, 354, 354, 356, 356, 102, 354, 340, 356, 354, 354, 356, 356, 354, 203, 356, 564, 686, 340, 293, 319, 354, 57, 356, 323, 408, 409, 101, 63, 64, 57, 563, 354, 63, 356, 567, 568, 420, 40, 57, 69, 7, 8, 942, 943, 63, 426, 427, 57, 15, 16, 17, 241, 3, 63, 942, 943, 40, 942, 943, 62, 3, 64, 69, 447, 448, 69, 942, 943, 69, 99, 79, 40, 429, 654, 69, 429, 429, 63, 62, 269, 429, 65, 69, 429, 429, 94, 417, 429, 758, 638, 33, 422, 99, 429, 98, 429, 729, 646, 647, 83, 69, 734, 292, 98, 379, 69, 57, 382, 764, 63, 64, 98, 63, 64, 57, 75, 306, 63, 78, 3, 63, 64, 397, 90, 91, 62, 10, 11, 12, 98, 1, 504, 69, 4, 5, 62, 7, 8, 267, 99, 98, 722, 69, 101, 15, 16, 17, 101, 80, 533, 57, 280, 95, 96, 38, 39, 63, 64, 287, 102, 31, 351, 33, 34, 354, 408, 356, 79, 195, 81, 360, 446, 199, 34, 35, 36, 37, 420, 63, 63, 744, 42, 43, 44, 45, 314, 40, 462, 431, 464, 98, 466, 752, 101, 3, 4, 69, 554, 69, 778, 554, 10, 11, 12, 98, 554, 787, 101, 554, 70, 71, 72, 73, 1, 870, 3, 4, 873, 575, 90, 91, 575, 575, 62, 95, 96, 575, 566, 99, 575, 575, 102, 98, 575, 509, 101, 98, 512, 566, 3, 4, 575, 6, 7, 8, 69, 644, 645, 63, 691, 631, 632, 575, 813, 63, 3, 4, 76, 601, 76, 79, 25, 81, 1001, 621, 1003, 1004, 621, 98, 88, 100, 88, 621, 616, 93, 621, 93, 70, 71, 72, 73, 4, 5, 6, 7, 8, 623, 624, 63, 64, 627, 628, 15, 16, 17, 33, 63, 1005, 968, 969, 101, 576, 25, 57, 58, 59, 76, 691, 31, 79, 80, 81, 781, 782, 98, 699, 700, 656, 88, 57, 656, 101, 86, 93, 101, 63, 64, 101, 656, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 28, 29, 253, 254, 730, 731, 732, 885, 99, 694, 694, 101, 95, 96, 698, 8, 910, 942, 943, 102, 63, 694, 90, 91, 63, 698, 755, 814, 62, 69, 30, 909, 98, 927, 654, 40, 656, 4, 5, 659, 7, 8, 768, 769, 728, 69, 50, 728, 15, 16, 17, 98, 623, 624, 68, 728, 627, 628, 43, 101, 744, 63, 43, 744, 31, 101, 101, 207, 6, 7, 8, 744, 101, 33, 9, 98, 33, 15, 16, 17, 100, 766, 766, 43, 11, 814, 706, 25, 3, 774, 774, 69, 69, 766, 69, 102, 99, 40, 63, 98, 43, 774, 722, 63, 64, 101, 63, 64, 728, 101, 101, 625, 626, 842, 734, 629, 630, 43, 738, 62, 43, 64, 65, 90, 91, 101, 100, 100, 268, 101, 270, 271, 101, 101, 274, 95, 96, 757, 95, 96, 83, 281, 102, 283, 68, 102, 101, 101, 288, 3, 4, 101, 90, 91, 55, 56, 57, 58, 59, 843, 844, 69, 99, 303, 882, 98, 98, 787, 99, 309, 843, 844, 792, 3, 68, 315, 101, 98, 35, 194, 195, 99, 99, 68, 199, 101, 721, 40, 30, 43, 32, 68, 34, 911, 36, 99, 38, 881, 40, 63, 42, 63, 44, 57, 824, 63, 43, 43, 881, 63, 60, 61, 62, 63, 64, 65, 262, 69, 69, 937, 69, 905, 19, 99, 66, 99, 68, 40, 70, 101, 72, 69, 905, 53, 54, 55, 56, 57, 58, 59, 942, 943, 944, 942, 943, 944, 944, 69, 942, 943, 944, 942, 943, 944, 944, 790, 876, 944, 793, 794, 946, 276, 63, 69, 982, 944, 801, 265, 63, 971, 69, 99, 971, 971, 99, 69, 69, 971, 996, 20, 971, 971, 99, 423, 971, 99, 101, 69, 973, 973, 101, 826, 971, 69, 1012, 1013, 69, 917, 69, 101, 973, 60, 61, 62, 63, 64, 65, 64, 82, 84, 450, 101, 452, 933, 69, 50, 84, 69, 853, 50, 68, 1023, 69, 63, 1023, 1023, 98, 207, 863, 1023, 68, 100, 1023, 1023, 1036, 69, 1023, 1036, 1036, 99, 101, 339, 1036, 11, 1023, 1036, 1036, 101, 63, 1036, 11, 69, 350, 64, 82, 101, 11, 1036, 63, 69, 358, 359, 101, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 100, 885, 916, 98, 637, 460, 698, 1006, 844, 268, 1012, 270, 271, 1036, 408, 409, 1002, 506, 621, 29, 504, 398, 281, 7, 8, 251, 420, 251, 692, 288, 407, 15, 16, 17, 408, 512, 950, 431, 432, 406, 625, 626, 573, 752, 629, 630, 466, 464, 962, 33, 309, 755, 728, 572, 276, 657, 315, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 294, 734, 296, 952, 954, 992, 504, 429, 443, -1, 444, 603, 613, 463, -1, 607, -1, -1, -1, 611, 66, 67, 68, 69, 70, 71, 72, 73, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, 95, 96, -1, -1, -1, -1, -1, 102, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 509, -1, -1, 512, -1, 514, 6, 7, 8, -1, -1, -1, -1, -1, -1, 15, 16, 17, -1, -1, 671, -1, -1, 674, 675, 25, -1, 678, 679, -1, -1, -1, 423, 33, 42, -1, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 703, 704, -1, -1, -1, -1, -1, -1, -1, 452, -1, -1, -1, -1, 623, 624, 625, 626, 627, 628, 629, 630, 583, 584, -1, -1, -1, -1, -1, -1, 591, -1, -1, 594, -1, -1, -1, -1, 90, 91, -1, 602, -1, 95, 96, 606, -1, -1, 751, -1, 102, 754, -1, -1, -1, -1, -1, 1, 619, 3, 4, 5, 6, 7, 8, -1, -1, -1, -1, -1, -1, 15, 16, 17, -1, 778, 779, 780, -1, -1, -1, 25, -1, -1, -1, -1, 30, 31, -1, 33, 34, -1, -1, -1, -1, -1, -1, -1, 659, -1, -1, -1, -1, -1, -1, 262, -1, -1, -1, -1, -1, 672, -1, 57, -1, 676, -1, -1, -1, 63, -1, -1, -1, -1, -1, 69, -1, -1, -1, 572, -1, 692, -1, -1, -1, 838, -1, 294, 295, 296, 297, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, 95, 96, 97, -1, -1, 717, -1, 102, -1, 603, -1, -1, -1, 607, -1, -1, -1, 611, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 1, -1, 3, 4, 5, -1, 7, 8, -1, 10, 11, 12, -1, 14, 15, 16, 17, 757, 900, -1, 902, -1, -1, -1, -1, -1, -1, -1, -1, -1, 31, 32, 33, 34, -1, 36, 37, 38, 39, 623, -1, 625, -1, 627, 45, 629, -1, 48, -1, 671, -1, -1, -1, 675, 55, 56, 57, 679, -1, 60, 61, -1, 63, -1, -1, 66, 67, 68, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, -1, 703, 704, -1, 85, 86, 87, -1, -1, 90, 91, -1, -1, -1, 95, 96, -1, -1, 40, 41, 42, 102, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 858, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 751, 1, -1, 754, 4, 5, 6, 7, 8, -1, -1, -1, -1, 13, -1, 15, 16, 17, -1, -1, -1, -1, -1, -1, -1, 25, -1, 778, 779, 780, -1, 31, -1, 33, -1, -1, -1, -1, 1, 504, 3, 4, 5, 6, 7, 8, -1, 10, 11, 12, -1, 14, 15, 16, 17, 18, -1, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, 838, -1, -1, 90, 91, 55, 56, 57, 95, 96, 60, 61, -1, 63, 101, 102, 66, 67, 68, 69, -1, -1, -1, -1, 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, 86, 87, -1, -1, 90, 91, -1, -1, -1, 95, 96, -1, -1, 99, -1, -1, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, 900, -1, 902, -1, -1, 1023, -1, -1, -1, 623, 624, 625, 626, 627, 628, 629, 630, 1, 1036, 3, 4, 5, 6, 7, 8, -1, 10, 11, 12, -1, 14, 15, 16, 17, 18, -1, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, -1, 63, -1, -1, 66, 67, 68, 69, -1, -1, -1, -1, 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, 86, 87, -1, -1, 90, 91, -1, 723, -1, 95, 96, -1, -1, -1, -1, 1, 102, 3, 4, 5, 6, 7, 8, -1, -1, -1, -1, -1, -1, 15, 16, 17, -1, -1, -1, -1, -1, -1, -1, 25, -1, -1, -1, -1, -1, 31, -1, 33, -1, -1, 1, -1, -1, 4, 5, 6, 7, 8, -1, -1, -1, -1, -1, -1, 15, 16, 17, -1, -1, -1, -1, -1, -1, -1, 25, -1, -1, -1, -1, -1, 31, -1, 33, 69, -1, -1, -1, -1, -1, -1, -1, 77, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, -1, 90, 91, -1, -1, -1, 95, 96, 97, -1, 99, -1, -1, 102, 68, 69, -1, -1, -1, -1, -1, -1, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, 95, 96, 97, -1, -1, 1, -1, 102, 4, 5, 6, 7, 8, -1, -1, -1, -1, -1, -1, 15, 16, 17, -1, -1, -1, -1, -1, -1, -1, 25, -1, -1, -1, -1, -1, 31, 1, 33, 3, 4, 5, 6, 7, 8, -1, -1, -1, -1, 13, -1, 15, 16, 17, -1, -1, -1, -1, -1, -1, -1, 25, -1, -1, -1, -1, -1, 31, -1, 33, -1, -1, -1, 1, 69, -1, 4, 5, 6, 7, 8, 76, -1, -1, -1, -1, -1, 15, 16, 17, -1, -1, -1, -1, -1, 90, 91, 25, -1, -1, 95, 96, 97, 31, 99, 33, -1, 102, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, -1, -1, -1, 90, 91, -1, -1, -1, 95, 96, -1, -1, -1, -1, 101, 102, -1, 1, 69, -1, 4, 5, 6, 7, 8, -1, -1, -1, -1, -1, -1, 15, 16, 17, -1, -1, -1, -1, -1, 90, 91, 25, -1, -1, 95, 96, 97, 31, 99, 33, -1, 102, 1, -1, -1, 4, 5, 6, 7, 8, -1, -1, -1, -1, -1, -1, 15, 16, 17, -1, -1, -1, -1, -1, -1, -1, 25, -1, -1, -1, -1, -1, 31, -1, 33, 69, -1, -1, -1, -1, -1, -1, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, 95, 96, 97, -1, -1, -1, -1, 102, 1, 69, -1, 4, 5, 6, 7, 8, -1, -1, -1, -1, -1, -1, 15, 16, 17, -1, -1, -1, -1, -1, 90, 91, 25, -1, -1, 95, 96, 97, 31, -1, 33, 1, 102, -1, 4, 5, 6, 7, 8, -1, -1, -1, -1, -1, -1, 15, 16, 17, -1, -1, 1, -1, -1, 4, 5, 25, 7, 8, -1, -1, -1, 31, -1, 33, 15, 16, 17, -1, -1, -1, 1, -1, -1, 4, 5, -1, 7, 8, -1, -1, 31, -1, 33, 34, 15, 16, 17, 90, 91, -1, -1, -1, 95, 96, -1, -1, -1, -1, -1, 102, 31, -1, 33, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, -1, -1, -1, 90, 91, -1, -1, -1, 95, 96, -1, -1, -1, -1, -1, 102, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, 95, 96, -1, -1, -1, -1, -1, 102, -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, 95, 96, 1, -1, 3, 4, -1, 102, -1, -1, -1, 10, 11, 12, -1, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 32, -1, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, 62, 63, 64, -1, 66, 67, 68, 1, -1, 3, 4, -1, -1, -1, -1, -1, 10, 11, 12, -1, 14, -1, -1, 85, 86, 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 99, 32, 101, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, 62, 63, 64, -1, 66, 67, 68, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, 86, 87, -1, -1, -1, 3, 4, 5, 6, 7, 8, -1, 10, 11, 12, 101, 14, 15, 16, 17, 18, -1, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, -1, 63, -1, -1, 66, 67, 68, 69, -1, -1, -1, -1, 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, 86, 87, -1, -1, 90, 91, -1, -1, -1, 95, 96, -1, -1, -1, -1, -1, 102, 3, 4, 5, 6, 7, 8, -1, 10, 11, 12, -1, 14, 15, 16, 17, -1, -1, -1, -1, -1, -1, -1, 25, -1, -1, -1, -1, -1, 31, 32, 33, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, -1, 63, -1, -1, 66, 67, -1, -1, 3, 4, 5, -1, 7, 8, -1, 10, 11, 12, -1, 14, 15, 16, 17, 85, 86, 87, -1, -1, 90, 91, -1, -1, -1, 95, 96, -1, 31, 32, 33, 34, 102, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, -1, 63, -1, -1, 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, 86, 87, -1, -1, 90, 91, -1, -1, -1, 95, 96, 1, -1, 3, 4, -1, 102, -1, -1, -1, 10, 11, 12, -1, 14, -1, -1, -1, 18, -1, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, 32, -1, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, -1, 63, -1, -1, 66, 67, 68, 69, 1, -1, 3, 4, 74, -1, -1, -1, -1, 10, 11, 12, -1, 14, -1, 85, 86, 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 99, -1, 32, -1, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, 62, 63, 64, -1, 66, 67, 68, 4, 5, 6, 7, 8, -1, -1, -1, -1, 13, -1, 15, 16, 17, -1, -1, 85, 86, 87, -1, -1, 25, 4, 5, 6, 7, 8, 31, -1, 33, 99, -1, -1, 15, 16, 17, -1, -1, -1, -1, -1, 4, 5, 25, 7, 8, -1, -1, -1, 31, -1, 33, 15, 16, 17, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 31, -1, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, 95, 96, -1, -1, -1, -1, -1, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, 95, 96, 3, -1, -1, -1, -1, 102, -1, 10, 11, 12, -1, 14, 90, 91, -1, -1, -1, 95, 96, -1, -1, -1, -1, -1, 102, -1, -1, -1, -1, 32, -1, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, -1, 63, -1, -1, 66, 67, -1, -1, 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, 86, 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, 41, 42, 100, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 1, -1, 3, 4, -1, -1, -1, -1, -1, 10, 11, 12, -1, 14, -1, -1, -1, 18, -1, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, 32, -1, 34, -1, 36, 37, 38, 39, -1, 100, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, -1, 63, -1, -1, 66, 67, 68, 69, -1, -1, -1, -1, 74, -1, -1, -1, -1, 1, -1, 3, 4, -1, -1, 85, 86, 87, 10, 11, 12, -1, 14, -1, -1, -1, 18, -1, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, 32, -1, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, -1, 63, -1, -1, 66, 67, 68, 69, -1, 1, -1, 3, 74, -1, -1, -1, -1, -1, 10, 11, 12, -1, 14, 85, 86, 87, 18, -1, 20, 21, 22, 23, -1, -1, 26, 27, 28, 29, 30, -1, 32, -1, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, 1, 63, 3, -1, 66, 67, 68, 69, -1, 10, 11, 12, 74, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, 86, 87, -1, -1, -1, -1, -1, 32, -1, 34, -1, 36, 37, 38, 39, 40, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, 62, 63, 64, -1, 66, 67, 68, 1, -1, 3, -1, -1, -1, -1, -1, -1, 10, 11, 12, -1, 14, -1, -1, 85, 86, 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 32, -1, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, 1, 63, 3, -1, 66, 67, 68, -1, -1, 10, 11, 12, -1, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, 86, 87, -1, -1, -1, -1, -1, 32, -1, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, 1, 63, 3, -1, 66, 67, 68, -1, -1, 10, 11, 12, -1, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, 86, 87, -1, -1, -1, -1, -1, 32, -1, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, -1, 63, -1, -1, 66, 67, 68, -1, -1, -1, -1, 3, 4, -1, -1, -1, -1, -1, 10, 11, 12, -1, 14, 85, 86, 87, 18, -1, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, 32, -1, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, -1, 63, 3, -1, 66, 67, 68, 69, -1, 10, 11, 12, 74, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, 86, 87, -1, -1, -1, -1, -1, 32, -1, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, 3, 63, -1, -1, 66, 67, 68, 10, 11, 12, -1, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, 86, 87, -1, -1, -1, 32, -1, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, -1, 63, 3, -1, 66, 67, -1, 69, -1, 10, 11, 12, -1, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, 86, 87, -1, -1, -1, -1, -1, 32, -1, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, 3, 63, -1, -1, 66, 67, -1, 10, 11, 12, -1, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, 86, 87, -1, -1, -1, 32, -1, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, 3, 63, -1, -1, 66, 67, -1, 10, 11, 12, -1, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, 86, 87, -1, -1, -1, 32, -1, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, 3, 63, -1, -1, 66, 67, -1, 10, 11, 12, -1, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 85, 86, 87, -1, -1, -1, 32, -1, 34, -1, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, 55, 56, 57, -1, -1, 60, 61, -1, 63, -1, -1, 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, 85, 86, 87, 40, 41, 42, -1, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 40, 41, 42, -1, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 13, 95, 96, -1, -1, 40, 41, 42, 102, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, -1, 100, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 98, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { 0, 70, 71, 72, 73, 104, 169, 170, 105, 106, 110, 121, 169, 1, 4, 5, 6, 7, 8, 15, 16, 17, 25, 31, 33, 90, 91, 95, 96, 102, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 233, 234, 235, 236, 237, 248, 250, 251, 252, 256, 280, 281, 286, 351, 361, 362, 364, 1, 208, 209, 210, 211, 212, 213, 214, 215, 228, 229, 230, 298, 0, 171, 1, 30, 34, 69, 97, 172, 173, 174, 175, 176, 205, 224, 225, 231, 360, 76, 88, 93, 122, 125, 129, 132, 107, 62, 3, 4, 68, 180, 279, 102, 63, 63, 10, 11, 12, 63, 200, 253, 180, 182, 253, 257, 233, 234, 248, 361, 362, 233, 234, 361, 362, 233, 234, 248, 361, 362, 233, 234, 361, 362, 235, 236, 248, 361, 362, 235, 236, 361, 362, 235, 236, 248, 361, 362, 235, 236, 361, 362, 233, 234, 248, 361, 362, 233, 234, 361, 362, 233, 234, 248, 361, 362, 233, 234, 361, 362, 235, 236, 248, 361, 362, 235, 236, 361, 362, 235, 236, 248, 361, 362, 235, 236, 361, 362, 352, 352, 251, 68, 279, 299, 172, 69, 99, 63, 180, 3, 57, 63, 239, 241, 245, 278, 205, 205, 205, 172, 182, 182, 79, 81, 80, 108, 180, 285, 249, 279, 3, 10, 14, 32, 36, 37, 38, 39, 45, 48, 55, 56, 57, 60, 61, 63, 66, 67, 85, 86, 87, 183, 184, 186, 187, 188, 189, 190, 191, 192, 194, 196, 199, 200, 298, 360, 63, 184, 1, 63, 4, 57, 63, 64, 277, 278, 300, 301, 302, 303, 304, 306, 308, 309, 57, 278, 300, 302, 289, 290, 249, 57, 63, 300, 302, 184, 40, 62, 208, 209, 210, 211, 229, 232, 247, 250, 69, 98, 30, 63, 64, 118, 177, 242, 305, 307, 309, 4, 57, 63, 238, 240, 243, 275, 276, 278, 239, 278, 69, 111, 130, 182, 182, 109, 180, 1, 180, 296, 297, 68, 102, 256, 249, 63, 63, 180, 181, 192, 1, 184, 197, 298, 192, 101, 98, 63, 196, 199, 63, 189, 63, 189, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 101, 192, 86, 182, 254, 255, 258, 361, 362, 364, 101, 101, 1, 3, 62, 64, 68, 180, 194, 261, 262, 263, 265, 267, 268, 232, 247, 345, 346, 100, 184, 247, 305, 247, 250, 63, 306, 232, 247, 250, 99, 1, 69, 228, 229, 291, 360, 68, 232, 247, 101, 184, 180, 278, 278, 206, 247, 63, 353, 354, 119, 63, 247, 62, 232, 247, 69, 98, 177, 242, 305, 69, 177, 50, 113, 249, 123, 126, 69, 98, 40, 98, 288, 284, 68, 194, 298, 101, 101, 68, 319, 320, 101, 194, 298, 298, 194, 194, 184, 195, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 180, 185, 186, 186, 180, 98, 101, 63, 180, 194, 266, 43, 101, 98, 287, 40, 268, 265, 277, 302, 303, 301, 9, 359, 363, 1, 13, 347, 349, 350, 351, 100, 247, 205, 205, 69, 291, 282, 69, 69, 101, 243, 275, 11, 359, 3, 347, 355, 356, 357, 1, 120, 350, 355, 40, 178, 180, 276, 276, 206, 247, 3, 114, 115, 116, 249, 131, 63, 133, 133, 180, 194, 297, 99, 296, 283, 98, 98, 314, 101, 68, 192, 101, 101, 43, 43, 101, 100, 255, 101, 3, 185, 13, 100, 261, 264, 263, 265, 101, 101, 101, 69, 98, 43, 275, 292, 294, 43, 278, 293, 295, 289, 242, 101, 98, 101, 100, 98, 100, 359, 246, 201, 202, 203, 208, 209, 212, 213, 216, 217, 220, 221, 226, 227, 101, 243, 40, 51, 98, 249, 112, 68, 134, 135, 136, 224, 225, 249, 249, 247, 288, 289, 298, 180, 198, 35, 99, 315, 316, 317, 193, 194, 194, 98, 101, 101, 194, 99, 265, 348, 13, 351, 194, 43, 247, 98, 194, 43, 247, 98, 99, 247, 357, 1, 68, 194, 259, 179, 13, 203, 205, 69, 205, 244, 115, 68, 137, 138, 101, 98, 352, 352, 124, 127, 99, 99, 101, 62, 101, 181, 358, 1, 4, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 69, 74, 181, 184, 204, 207, 224, 225, 231, 310, 311, 313, 320, 321, 322, 323, 326, 327, 330, 338, 360, 317, 261, 186, 100, 347, 247, 194, 206, 247, 194, 206, 247, 260, 1, 318, 320, 69, 238, 239, 278, 259, 117, 174, 224, 225, 99, 75, 78, 139, 140, 141, 143, 136, 276, 278, 278, 68, 68, 247, 247, 180, 69, 98, 69, 99, 63, 332, 324, 63, 63, 194, 43, 69, 69, 69, 184, 57, 181, 339, 362, 328, 43, 69, 207, 310, 312, 1, 313, 205, 205, 205, 99, 25, 313, 326, 19, 1, 325, 330, 338, 1, 63, 207, 99, 101, 247, 294, 247, 295, 261, 320, 69, 69, 242, 99, 174, 205, 205, 142, 144, 174, 247, 247, 247, 137, 137, 181, 184, 63, 325, 184, 340, 184, 13, 43, 69, 184, 69, 63, 1, 329, 330, 99, 238, 269, 275, 239, 272, 278, 69, 1, 331, 325, 184, 99, 247, 68, 76, 145, 147, 148, 149, 174, 145, 99, 99, 101, 184, 20, 69, 101, 194, 69, 184, 69, 242, 69, 242, 325, 101, 146, 147, 182, 64, 118, 249, 82, 84, 167, 128, 101, 334, 337, 43, 43, 101, 247, 247, 69, 99, 147, 150, 249, 69, 182, 168, 84, 152, 333, 340, 325, 11, 64, 341, 342, 343, 69, 270, 273, 50, 69, 68, 153, 325, 69, 63, 182, 43, 101, 98, 201, 201, 151, 161, 298, 169, 68, 335, 184, 100, 341, 69, 343, 271, 274, 51, 98, 99, 162, 340, 101, 11, 43, 101, 320, 320, 161, 77, 99, 154, 163, 164, 165, 166, 174, 182, 101, 63, 11, 344, 69, 89, 155, 156, 157, 182, 40, 62, 65, 83, 64, 336, 184, 98, 101, 182, 69, 98, 82, 165, 166, 165, 165, 186, 325, 101, 11, 69, 63, 156, 182, 69, 69, 69, 100, 158, 159, 160, 161, 194, 101, 98, 160 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) #else static void yy_stack_print (yybottom, yytop) yytype_int16 *yybottom; yytype_int16 *yytop; #endif { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule) #else static void yy_reduce_print (yyvsp, yyrule) YYSTYPE *yyvsp; int yyrule; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) ); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) #else static void yydestruct (yymsg, yytype, yyvaluep) const char *yymsg; int yytype; YYSTYPE *yyvaluep; #endif { YYUSE (yyvaluep); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (void); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*-------------------------. | yyparse or yypush_parse. | `-------------------------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void) #else int yyparse () #endif #endif { /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: `yyss': related to states. `yyvs': related to semantic values. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; YYSIZE_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yytoken = 0; yyss = yyssa; yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token. */ yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 2: /* Line 1455 of yacc.c */ #line 465 "c-parse.y" { ;} break; case 3: /* Line 1455 of yacc.c */ #line 466 "c-parse.y" { ;} break; case 4: /* Line 1455 of yacc.c */ #line 467 "c-parse.y" { declaration cdecls = declaration_reverse((yyvsp[(2) - (2)].u.decl)); parse_tree = CAST(node, cdecls); ;} break; case 5: /* Line 1455 of yacc.c */ #line 470 "c-parse.y" { parse_tree = NULL; ;} break; case 6: /* Line 1455 of yacc.c */ #line 471 "c-parse.y" { parse_tree = CAST(node, (yyvsp[(2) - (2)].u.decl)); ;} break; case 7: /* Line 1455 of yacc.c */ #line 472 "c-parse.y" { parse_tree = CAST(node, make_error_decl()); ;} break; case 8: /* Line 1455 of yacc.c */ #line 473 "c-parse.y" { parse_tree = CAST(node, (yyvsp[(2) - (2)].u.type)); ;} break; case 9: /* Line 1455 of yacc.c */ #line 474 "c-parse.y" { parse_tree = NULL; ;} break; case 10: /* Line 1455 of yacc.c */ #line 478 "c-parse.y" { end_macro_saving(); ;} break; case 12: /* Line 1455 of yacc.c */ #line 480 "c-parse.y" { end_macro_saving(); add_cdecls(declaration_reverse((yyvsp[(1) - (1)].u.decl))); ;} break; case 15: /* Line 1455 of yacc.c */ #line 492 "c-parse.y" { ;} break; case 16: /* Line 1455 of yacc.c */ #line 497 "c-parse.y" { require_c((yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id.data); ;} break; case 17: /* Line 1455 of yacc.c */ #line 499 "c-parse.y" { require_c((yyvsp[(3) - (3)].idtoken).location, (yyvsp[(3) - (3)].idtoken).id.data); ;} break; case 18: /* Line 1455 of yacc.c */ #line 505 "c-parse.y" { start_nesc_entity(l_interface, (yyvsp[(3) - (3)].u.word)); ;} break; case 19: /* Line 1455 of yacc.c */ #line 509 "c-parse.y" { handle_nescdecl_attributes((yyvsp[(6) - (6)].u.attribute), current.container); ;} break; case 20: /* Line 1455 of yacc.c */ #line 513 "c-parse.y" { interface intf = new_interface(pr, (yyvsp[(2) - (10)].u.itoken).location, (yyvsp[(3) - (10)].u.word), (yyvsp[(6) - (10)].u.attribute), declaration_reverse((yyvsp[(9) - (10)].u.decl))); set_nesc_parse_tree(intf); if (intf->cdecl->abstract) poplevel(); ;} break; case 21: /* Line 1455 of yacc.c */ #line 524 "c-parse.y" { (yyval.u.decl) = NULL; ;} break; case 22: /* Line 1455 of yacc.c */ #line 526 "c-parse.y" { nesc_declaration intf = current.container; intf->parameters = (yyvsp[(2) - (3)].u.decl); intf->parameter_env = current.env; (yyval.u.decl) = (yyvsp[(2) - (3)].u.decl); /* Template intfs need a new level for the actual intf */ pushlevel(FALSE); /* The interface env counts as global */ current.env->global_level = TRUE; intf->env = current.env; intf->abstract = TRUE; ;} break; case 24: /* Line 1455 of yacc.c */ #line 545 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(1) - (3)].u.decl), (yyvsp[(3) - (3)].u.decl)); ;} break; case 25: /* Line 1455 of yacc.c */ #line 550 "c-parse.y" { (yyval.u.decl) = declare_type_parameter((yyvsp[(1) - (2)].idtoken).location, (yyvsp[(1) - (2)].idtoken).id, (yyvsp[(2) - (2)].u.attribute), NULL); ;} break; case 26: /* Line 1455 of yacc.c */ #line 554 "c-parse.y" { (yyval.idtoken) = (yyvsp[(1) - (1)].idtoken); ;} break; case 27: /* Line 1455 of yacc.c */ #line 558 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(2) - (2)].u.decl), (yyvsp[(1) - (2)].u.decl)); ;} break; case 29: /* Line 1455 of yacc.c */ #line 562 "c-parse.y" { pushlevel(TRUE); ;} break; case 30: /* Line 1455 of yacc.c */ #line 563 "c-parse.y" { /* poplevel done in users of parameters */ (yyval.u.decl) = (yyvsp[(3) - (3)].u.decl); ;} break; case 31: /* Line 1455 of yacc.c */ #line 567 "c-parse.y" { (yyval.u.decl) = declaration_reverse((yyvsp[(1) - (2)].u.decl)); check_interface_parameter_types((yyval.u.decl)); ;} break; case 32: /* Line 1455 of yacc.c */ #line 571 "c-parse.y" { (yyval.u.decl) = make_error_decl(); ;} break; case 36: /* Line 1455 of yacc.c */ #line 582 "c-parse.y" { start_nesc_entity(l_component, (yyvsp[(3) - (3)].u.word)); current.container->abstract = (yyvsp[(1) - (3)].abstract); ;} break; case 37: /* Line 1455 of yacc.c */ #line 587 "c-parse.y" { handle_nescdecl_attributes((yyvsp[(6) - (6)].u.attribute), current.container); ;} break; case 38: /* Line 1455 of yacc.c */ #line 592 "c-parse.y" { declaration intfs = declaration_chain(declaration_reverse((yyvsp[(9) - (11)].u.decl)), all_tasks); set_nesc_parse_tree(new_component(pr, (yyvsp[(2) - (11)].u.itoken).location, (yyvsp[(3) - (11)].u.word), (yyvsp[(6) - (11)].u.attribute), (yyvsp[(1) - (11)].abstract), (yyvsp[(5) - (11)].u.decl), intfs, (yyvsp[(11) - (11)].u.impl))); ;} break; case 39: /* Line 1455 of yacc.c */ #line 601 "c-parse.y" { start_nesc_entity(l_component, (yyvsp[(3) - (3)].u.word)); current.container->abstract = (yyvsp[(1) - (3)].abstract); current.container->configuration = TRUE; ;} break; case 40: /* Line 1455 of yacc.c */ #line 607 "c-parse.y" { handle_nescdecl_attributes((yyvsp[(6) - (6)].u.attribute), current.container); ;} break; case 41: /* Line 1455 of yacc.c */ #line 611 "c-parse.y" { set_nesc_ast(new_component(pr, (yyvsp[(2) - (10)].u.itoken).location, (yyvsp[(3) - (10)].u.word), (yyvsp[(6) - (10)].u.attribute), (yyvsp[(1) - (10)].abstract), (yyvsp[(5) - (10)].u.decl), declaration_reverse((yyvsp[(9) - (10)].u.decl)), NULL)); ;} break; case 42: /* Line 1455 of yacc.c */ #line 615 "c-parse.y" { set_nesc_impl((yyvsp[(12) - (12)].u.impl)); ;} break; case 43: /* Line 1455 of yacc.c */ #line 622 "c-parse.y" { start_nesc_entity(l_component, (yyvsp[(2) - (2)].u.word)); ;} break; case 44: /* Line 1455 of yacc.c */ #line 626 "c-parse.y" { handle_nescdecl_attributes((yyvsp[(4) - (4)].u.attribute), current.container); ;} break; case 45: /* Line 1455 of yacc.c */ #line 630 "c-parse.y" { binary_component dummy = new_binary_component(pr, (yyvsp[(1) - (8)].u.itoken).location, start_implementation()); component c = new_component(pr, (yyvsp[(1) - (8)].u.itoken).location, (yyvsp[(2) - (8)].u.word), (yyvsp[(4) - (8)].u.attribute), FALSE, NULL, declaration_reverse((yyvsp[(7) - (8)].u.decl)), CAST(implementation, dummy)); set_nesc_parse_tree(c); ;} break; case 46: /* Line 1455 of yacc.c */ #line 637 "c-parse.y" { (yyval.abstract) = TRUE; ;} break; case 47: /* Line 1455 of yacc.c */ #line 638 "c-parse.y" { (yyval.abstract) = FALSE; ;} break; case 48: /* Line 1455 of yacc.c */ #line 643 "c-parse.y" { if (current.container->abstract) error("generic components require a parameter list"); /* We don't create the extra environment level for this generic component as nothing actually requires its existence */ (yyval.u.decl) = NULL; ;} break; case 49: /* Line 1455 of yacc.c */ #line 652 "c-parse.y" { nesc_declaration comp = current.container; if (!comp->abstract) error("only generic components can have a parameter list"); comp->parameters = (yyvsp[(2) - (3)].u.decl); comp->parameter_env = current.env; (yyval.u.decl) = (yyvsp[(2) - (3)].u.decl); /* generic components need a new level for the specification */ pushlevel(FALSE); current.env->global_level = TRUE; comp->env = current.env; ;} break; case 50: /* Line 1455 of yacc.c */ #line 670 "c-parse.y" { (yyval.u.decl) = NULL; ;} break; case 53: /* Line 1455 of yacc.c */ #line 677 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(1) - (3)].u.decl), (yyvsp[(3) - (3)].u.decl)); ;} break; case 54: /* Line 1455 of yacc.c */ #line 686 "c-parse.y" { (yyval.u.decl) = declare_template_parameter((yyvsp[(3) - (4)].u.declarator), (yyvsp[(1) - (4)].u.telement), (yyvsp[(4) - (4)].u.attribute)); ;} break; case 55: /* Line 1455 of yacc.c */ #line 688 "c-parse.y" { (yyval.u.decl) = declare_template_parameter((yyvsp[(3) - (4)].u.declarator), (yyvsp[(1) - (4)].u.telement), (yyvsp[(4) - (4)].u.attribute)); ;} break; case 56: /* Line 1455 of yacc.c */ #line 690 "c-parse.y" { (yyval.u.decl) = declare_template_parameter((yyvsp[(3) - (4)].u.declarator), (yyvsp[(1) - (4)].u.telement), (yyvsp[(4) - (4)].u.attribute)); ;} break; case 57: /* Line 1455 of yacc.c */ #line 692 "c-parse.y" { (yyval.u.decl) = declare_template_parameter(NULL, (yyvsp[(1) - (2)].u.telement), NULL); ;} break; case 58: /* Line 1455 of yacc.c */ #line 697 "c-parse.y" { current.spec_section = spec_normal; ;} break; case 59: /* Line 1455 of yacc.c */ #line 702 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(2) - (2)].u.decl), (yyvsp[(1) - (2)].u.decl)); ;} break; case 60: /* Line 1455 of yacc.c */ #line 703 "c-parse.y" { (yyval.u.decl) = NULL; ;} break; case 63: /* Line 1455 of yacc.c */ #line 709 "c-parse.y" { current.spec_section = spec_normal; ;} break; case 64: /* Line 1455 of yacc.c */ #line 709 "c-parse.y" { (yyval.u.decl) = (yyvsp[(2) - (2)].u.decl); ;} break; case 65: /* Line 1455 of yacc.c */ #line 713 "c-parse.y" { current.spec_section = spec_uses; ;} break; case 66: /* Line 1455 of yacc.c */ #line 715 "c-parse.y" { (yyval.u.decl) = CAST(declaration, new_rp_interface(pr, (yyvsp[(1) - (3)].u.itoken).location, TRUE, declaration_reverse((yyvsp[(3) - (3)].u.decl)))); ;} break; case 67: /* Line 1455 of yacc.c */ #line 718 "c-parse.y" { current.spec_section = spec_provides; ;} break; case 68: /* Line 1455 of yacc.c */ #line 720 "c-parse.y" { (yyval.u.decl) = CAST(declaration, new_rp_interface(pr, (yyvsp[(1) - (3)].u.itoken).location, FALSE, declaration_reverse((yyvsp[(3) - (3)].u.decl)))); ;} break; case 70: /* Line 1455 of yacc.c */ #line 724 "c-parse.y" { (yyval.u.decl) = (yyvsp[(2) - (3)].u.decl); ;} break; case 71: /* Line 1455 of yacc.c */ #line 729 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(2) - (2)].u.decl), (yyvsp[(1) - (2)].u.decl)); ;} break; case 74: /* Line 1455 of yacc.c */ #line 736 "c-parse.y" { declare_interface_ref((yyvsp[(1) - (3)].u.iref), NULL, current.env, (yyvsp[(2) - (3)].u.attribute)); (yyval.u.decl) = CAST(declaration, (yyvsp[(1) - (3)].u.iref)); ;} break; case 75: /* Line 1455 of yacc.c */ #line 741 "c-parse.y" { (yyvsp[(1) - (4)].u.iref)->gparms = (yyvsp[(2) - (4)].u.decl); poplevel(); declare_interface_ref((yyvsp[(1) - (4)].u.iref), (yyvsp[(2) - (4)].u.decl), current.env, (yyvsp[(3) - (4)].u.attribute)); (yyval.u.decl) = CAST(declaration, (yyvsp[(1) - (4)].u.iref)); ;} break; case 77: /* Line 1455 of yacc.c */ #line 751 "c-parse.y" { (yyval.u.iref) = (yyvsp[(1) - (3)].u.iref); (yyval.u.iref)->word2 = (yyvsp[(3) - (3)].u.word); ;} break; case 78: /* Line 1455 of yacc.c */ #line 756 "c-parse.y" { preload(l_interface, (yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.word)->cstring.data); (yyval.u.iref) = new_interface_ref(pr, (yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.word), NULL, NULL, NULL, NULL, NULL); ;} break; case 79: /* Line 1455 of yacc.c */ #line 761 "c-parse.y" { preload(l_interface, (yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.word)->cstring.data); ;} break; case 80: /* Line 1455 of yacc.c */ #line 765 "c-parse.y" { (yyval.u.iref) = new_interface_ref(pr, (yyvsp[(1) - (6)].u.itoken).location, (yyvsp[(2) - (6)].u.word), (yyvsp[(5) - (6)].u.expr), NULL, NULL, NULL, NULL); ;} break; case 82: /* Line 1455 of yacc.c */ #line 770 "c-parse.y" { (yyval.u.expr) = expression_chain((yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 83: /* Line 1455 of yacc.c */ #line 774 "c-parse.y" { (yyval.u.env) = start_implementation(); ;} break; case 84: /* Line 1455 of yacc.c */ #line 778 "c-parse.y" { (yyval.u.impl) = CAST(implementation, new_configuration(pr, (yyvsp[(1) - (5)].u.itoken).location, (yyvsp[(2) - (5)].u.env), declaration_reverse((yyvsp[(4) - (5)].u.decl)))); ;} break; case 85: /* Line 1455 of yacc.c */ #line 782 "c-parse.y" { (yyval.u.cref) = (yyvsp[(2) - (3)].u.cref); ;} break; case 86: /* Line 1455 of yacc.c */ #line 786 "c-parse.y" { (yyval.u.cref) = component_ref_chain((yyvsp[(3) - (3)].u.cref), (yyvsp[(1) - (3)].u.cref)); ;} break; case 88: /* Line 1455 of yacc.c */ #line 791 "c-parse.y" { (yyval.u.cref) = require_component((yyvsp[(1) - (1)].u.cref), NULL); ;} break; case 89: /* Line 1455 of yacc.c */ #line 792 "c-parse.y" { (yyval.u.cref) = require_component((yyvsp[(1) - (3)].u.cref), (yyvsp[(3) - (3)].u.word)); ;} break; case 90: /* Line 1455 of yacc.c */ #line 796 "c-parse.y" { (yyval.u.cref) = new_component_ref(pr, (yyvsp[(1) - (1)].u.word)->location, (yyvsp[(1) - (1)].u.word), NULL, FALSE, NULL); ;} break; case 91: /* Line 1455 of yacc.c */ #line 799 "c-parse.y" { (yyval.u.cref) = new_component_ref(pr, (yyvsp[(1) - (5)].u.itoken).location, (yyvsp[(2) - (5)].u.word), NULL, TRUE, (yyvsp[(4) - (5)].u.expr)); ;} break; case 92: /* Line 1455 of yacc.c */ #line 804 "c-parse.y" { (yyval.u.expr) = NULL; ;} break; case 95: /* Line 1455 of yacc.c */ #line 810 "c-parse.y" { (yyval.u.expr) = expression_chain((yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 96: /* Line 1455 of yacc.c */ #line 815 "c-parse.y" { (yyval.u.expr) = (yyvsp[(1) - (1)].u.expr); (yyval.u.expr)->type = default_conversion_for_assignment((yyval.u.expr)); ;} break; case 98: /* Line 1455 of yacc.c */ #line 820 "c-parse.y" { (yyval.u.expr) = make_type_argument((yyvsp[(1) - (1)].u.type)); ;} break; case 99: /* Line 1455 of yacc.c */ #line 824 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(2) - (2)].u.decl), (yyvsp[(1) - (2)].u.decl)); ;} break; case 100: /* Line 1455 of yacc.c */ #line 825 "c-parse.y" { (yyval.u.decl) = NULL; ;} break; case 101: /* Line 1455 of yacc.c */ #line 829 "c-parse.y" { (yyval.u.decl) = CAST(declaration, (yyvsp[(1) - (1)].u.conn)); ;} break; case 103: /* Line 1455 of yacc.c */ #line 831 "c-parse.y" { (yyval.u.decl) = CAST(declaration, (yyvsp[(1) - (1)].u.cref)); ;} break; case 104: /* Line 1455 of yacc.c */ #line 836 "c-parse.y" { (yyval.u.conn) = CAST(connection, new_eq_connection(pr, (yyvsp[(2) - (4)].u.itoken).location, (yyvsp[(1) - (4)].u.ep), (yyvsp[(3) - (4)].u.ep))); ;} break; case 105: /* Line 1455 of yacc.c */ #line 838 "c-parse.y" { (yyval.u.conn) = CAST(connection, new_rp_connection(pr, (yyvsp[(2) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.ep), (yyvsp[(1) - (4)].u.ep))); ;} break; case 106: /* Line 1455 of yacc.c */ #line 840 "c-parse.y" { (yyval.u.conn) = CAST(connection, new_rp_connection(pr, (yyvsp[(2) - (4)].u.itoken).location, (yyvsp[(1) - (4)].u.ep), (yyvsp[(3) - (4)].u.ep))); ;} break; case 107: /* Line 1455 of yacc.c */ #line 845 "c-parse.y" { (yyval.u.ep) = (yyvsp[(1) - (3)].u.ep); (yyval.u.ep)->ids = parameterised_identifier_chain((yyval.u.ep)->ids, (yyvsp[(3) - (3)].u.pid)); ;} break; case 108: /* Line 1455 of yacc.c */ #line 849 "c-parse.y" { (yyval.u.ep) = new_endpoint(parse_region, (yyvsp[(1) - (1)].u.pid)->location, (yyvsp[(1) - (1)].u.pid)); ;} break; case 109: /* Line 1455 of yacc.c */ #line 854 "c-parse.y" { (yyval.u.pid) = new_parameterised_identifier(pr, (yyvsp[(1) - (1)].u.word)->location, (yyvsp[(1) - (1)].u.word), NULL); ;} break; case 110: /* Line 1455 of yacc.c */ #line 856 "c-parse.y" { (yyval.u.pid) = new_parameterised_identifier(pr, (yyvsp[(1) - (4)].u.word)->location, (yyvsp[(1) - (4)].u.word), (yyvsp[(3) - (4)].u.expr)); ;} break; case 111: /* Line 1455 of yacc.c */ #line 859 "c-parse.y" { (yyval.u.env) = start_implementation(); all_tasks = NULL; ;} break; case 112: /* Line 1455 of yacc.c */ #line 860 "c-parse.y" { (yyval.u.impl) = CAST(implementation, new_module(pr, (yyvsp[(1) - (5)].u.itoken).location, (yyvsp[(2) - (5)].u.env), declaration_reverse((yyvsp[(4) - (5)].u.decl)))); ;} break; case 113: /* Line 1455 of yacc.c */ #line 869 "c-parse.y" { (yyval.u.telement) = NULL; ;} break; case 114: /* Line 1455 of yacc.c */ #line 869 "c-parse.y" { (yyval.u.decl) = (yyvsp[(2) - (2)].u.decl); ;} break; case 115: /* Line 1455 of yacc.c */ #line 870 "c-parse.y" { (yyval.u.telement) = NULL; ;} break; case 116: /* Line 1455 of yacc.c */ #line 871 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(3) - (3)].u.decl), (yyvsp[(1) - (3)].u.decl)); ;} break; case 119: /* Line 1455 of yacc.c */ #line 878 "c-parse.y" { (yyval.u.decl) = CAST(declaration, new_asm_decl (pr, (yyvsp[(1) - (5)].u.itoken).location, new_asm_stmt(pr, (yyvsp[(1) - (5)].u.itoken).location, (yyvsp[(3) - (5)].u.expr), NULL, NULL, NULL, NULL))); ;} break; case 120: /* Line 1455 of yacc.c */ #line 883 "c-parse.y" { (yyval.u.decl) = make_extension_decl((yyvsp[(1) - (2)].u.itoken).i, (yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.decl)); ;} break; case 121: /* Line 1455 of yacc.c */ #line 888 "c-parse.y" { if (pedantic) error("ANSI C forbids data definition with no type or storage class"); else if (!flag_traditional) warning("data definition has no type or storage class"); (yyval.u.decl) = make_data_decl(NULL, (yyvsp[(2) - (3)].u.decl)); ;} break; case 123: /* Line 1455 of yacc.c */ #line 899 "c-parse.y" { (yyval.u.decl) = make_data_decl((yyvsp[(1) - (4)].u.telement), (yyvsp[(3) - (4)].u.decl)); ;} break; case 124: /* Line 1455 of yacc.c */ #line 901 "c-parse.y" { (yyval.u.decl) = make_data_decl((yyvsp[(1) - (4)].u.telement), (yyvsp[(3) - (4)].u.decl)); ;} break; case 125: /* Line 1455 of yacc.c */ #line 903 "c-parse.y" { shadow_tag((yyvsp[(1) - (3)].u.telement)); (yyval.u.decl) = make_data_decl((yyvsp[(1) - (3)].u.telement), NULL); ;} break; case 126: /* Line 1455 of yacc.c */ #line 905 "c-parse.y" { (yyval.u.decl) = make_error_decl(); ;} break; case 127: /* Line 1455 of yacc.c */ #line 906 "c-parse.y" { (yyval.u.decl) = make_error_decl(); ;} break; case 128: /* Line 1455 of yacc.c */ #line 908 "c-parse.y" { if (pedantic) pedwarn("ANSI C does not allow extra `;' outside of a function"); (yyval.u.decl) = NULL; ;} break; case 130: /* Line 1455 of yacc.c */ #line 916 "c-parse.y" { (yyval.u.decl) = target->keilc_definition((yyvsp[(1) - (5)].idtoken).location, (yyvsp[(1) - (5)].idtoken).id, (yyvsp[(2) - (5)].idtoken).id, (yyvsp[(4) - (5)].u.expr)); ;} break; case 131: /* Line 1455 of yacc.c */ #line 920 "c-parse.y" { (yyval.u.decl) = (yyvsp[(4) - (4)].u.decl); ;} break; case 132: /* Line 1455 of yacc.c */ #line 921 "c-parse.y" { (yyval.u.decl) = (yyvsp[(4) - (4)].u.decl); ;} break; case 133: /* Line 1455 of yacc.c */ #line 922 "c-parse.y" { (yyval.u.decl) = (yyvsp[(3) - (3)].u.decl); ;} break; case 134: /* Line 1455 of yacc.c */ #line 926 "c-parse.y" { /* maybeasm is only here to avoid a s/r conflict */ refuse_asm((yyvsp[(1) - (2)].u.asm_stmt)); /* $0 refers to the declarator that precedes fndef2 in fndef (we can't just save it in an action, as that causes s/r and r/r conflicts) */ if (!start_function(pstate.declspecs, (yyvsp[(0) - (2)].u.declarator), (yyvsp[(2) - (2)].u.attribute), 0)) YYERROR1; ;} break; case 135: /* Line 1455 of yacc.c */ #line 937 "c-parse.y" { store_parm_decls(declaration_reverse((yyvsp[(4) - (4)].u.decl))); ;} break; case 136: /* Line 1455 of yacc.c */ #line 939 "c-parse.y" { (yyval.u.decl) = finish_function((yyvsp[(6) - (6)].u.stmt)); pop_declspec_stack(); ;} break; case 139: /* Line 1455 of yacc.c */ #line 949 "c-parse.y" { (yyval.u.id_label) = new_id_label(pr, (yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id); ;} break; case 140: /* Line 1455 of yacc.c */ #line 953 "c-parse.y" { (yyval.u.word) = new_word(pr, (yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id); ;} break; case 141: /* Line 1455 of yacc.c */ #line 957 "c-parse.y" { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_address_of; ;} break; case 142: /* Line 1455 of yacc.c */ #line 959 "c-parse.y" { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_unary_minus; ;} break; case 143: /* Line 1455 of yacc.c */ #line 961 "c-parse.y" { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_unary_plus; ;} break; case 144: /* Line 1455 of yacc.c */ #line 963 "c-parse.y" { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_preincrement; ;} break; case 145: /* Line 1455 of yacc.c */ #line 965 "c-parse.y" { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_predecrement; ;} break; case 146: /* Line 1455 of yacc.c */ #line 967 "c-parse.y" { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_bitnot; ;} break; case 147: /* Line 1455 of yacc.c */ #line 969 "c-parse.y" { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_not; ;} break; case 148: /* Line 1455 of yacc.c */ #line 971 "c-parse.y" { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_realpart; ;} break; case 149: /* Line 1455 of yacc.c */ #line 973 "c-parse.y" { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_imagpart; ;} break; case 150: /* Line 1455 of yacc.c */ #line 977 "c-parse.y" { if ((yyvsp[(1) - (1)].u.expr)->next) (yyval.u.expr) = make_comma((yyvsp[(1) - (1)].u.expr)->location, (yyvsp[(1) - (1)].u.expr)); else (yyval.u.expr) = (yyvsp[(1) - (1)].u.expr); ;} break; case 151: /* Line 1455 of yacc.c */ #line 985 "c-parse.y" { (yyval.u.expr) = NULL; ;} break; case 153: /* Line 1455 of yacc.c */ #line 991 "c-parse.y" { (yyval.u.expr) = expression_reverse((yyvsp[(1) - (1)].u.expr)); ;} break; case 154: /* Line 1455 of yacc.c */ #line 996 "c-parse.y" { (yyval.u.expr) = (yyvsp[(1) - (1)].u.expr); ;} break; case 155: /* Line 1455 of yacc.c */ #line 998 "c-parse.y" { (yyval.u.expr) = expression_chain((yyvsp[(3) - (3)].u.expr), (yyvsp[(1) - (3)].u.expr)); ;} break; case 156: /* Line 1455 of yacc.c */ #line 1002 "c-parse.y" { (yyval.u.itoken).i = command_call; ;} break; case 157: /* Line 1455 of yacc.c */ #line 1003 "c-parse.y" { (yyval.u.itoken).i = event_signal; ;} break; case 158: /* Line 1455 of yacc.c */ #line 1004 "c-parse.y" { (yyval.u.itoken).i = post_task; ;} break; case 160: /* Line 1455 of yacc.c */ #line 1010 "c-parse.y" { function_call fc = CAST(function_call, (yyvsp[(2) - (2)].u.expr)); type calltype = fc->arg1->type; bool noerror = fc->type != error_type; (yyval.u.expr) = (yyvsp[(2) - (2)].u.expr); fc->call_kind = (yyvsp[(1) - (2)].u.itoken).i; switch ((yyvsp[(1) - (2)].u.itoken).i) { case command_call: if (noerror && !type_command(calltype)) error("only commands can be called"); break; case event_signal: if (noerror && !type_event(calltype)) error("only events can be signaled"); break; case post_task: fc->type = unsigned_char_type; if (noerror) { if (!type_task(calltype)) error("only tasks can be posted"); else if (flag_use_scheduler) /* If requested, replace post/task by references to an interface */ handle_post(fc); } break; } ;} break; case 161: /* Line 1455 of yacc.c */ #line 1042 "c-parse.y" { (yyval.u.expr) = make_dereference((yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.expr)); ;} break; case 162: /* Line 1455 of yacc.c */ #line 1045 "c-parse.y" { (yyval.u.expr) = make_extension_expr((yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.expr)); pedantic = (yyvsp[(1) - (2)].u.itoken).i; ;} break; case 163: /* Line 1455 of yacc.c */ #line 1048 "c-parse.y" { (yyval.u.expr) = make_unary((yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(1) - (2)].u.itoken).i, (yyvsp[(2) - (2)].u.expr)); #if 0 overflow_warning((yyval.u.expr)); #endif ;} break; case 164: /* Line 1455 of yacc.c */ #line 1055 "c-parse.y" { (yyval.u.expr) = CAST(expression, make_label_address((yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.id_label))); use_label((yyvsp[(2) - (2)].u.id_label)); ;} break; case 165: /* Line 1455 of yacc.c */ #line 1060 "c-parse.y" { #if 0 if (TREE_CODE ((yyvsp[(2) - (2)].u.expr)) == COMPONENT_REF && DECL_C_BIT_FIELD (TREE_OPERAND ((yyvsp[(2) - (2)].u.expr), 1))) error("`sizeof' applied to a bit-field"); (yyval.u.expr) = c_sizeof (TREE_TYPE ((yyvsp[(2) - (2)].u.expr))); #endif (yyval.u.expr) = make_sizeof_expr((yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.expr)); pstate.unevaluated_expression--; ;} break; case 166: /* Line 1455 of yacc.c */ #line 1070 "c-parse.y" { (yyval.u.expr) = make_sizeof_type((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.type)); pstate.unevaluated_expression--; ;} break; case 167: /* Line 1455 of yacc.c */ #line 1073 "c-parse.y" { (yyval.u.expr) = make_alignof_expr((yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.expr)); pstate.unevaluated_expression--; ;} break; case 168: /* Line 1455 of yacc.c */ #line 1076 "c-parse.y" { (yyval.u.expr) = make_alignof_type((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.type)); pstate.unevaluated_expression--; ;} break; case 169: /* Line 1455 of yacc.c */ #line 1081 "c-parse.y" { pstate.unevaluated_expression++; (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); ;} break; case 170: /* Line 1455 of yacc.c */ #line 1085 "c-parse.y" { pstate.unevaluated_expression++; (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); ;} break; case 172: /* Line 1455 of yacc.c */ #line 1091 "c-parse.y" { (yyval.u.expr) = make_cast((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(2) - (4)].u.type), (yyvsp[(4) - (4)].u.expr)); ;} break; case 173: /* Line 1455 of yacc.c */ #line 1093 "c-parse.y" { start_init(NULL, NULL); really_start_incremental_init((yyvsp[(2) - (4)].u.type)->type); ;} break; case 174: /* Line 1455 of yacc.c */ #line 1098 "c-parse.y" { expression constructor = make_init_list((yyvsp[(4) - (7)].u.itoken).location, (yyvsp[(6) - (7)].u.expr)); finish_init(); if (pedantic) pedwarn("ANSI C forbids constructor expressions"); (yyval.u.expr) = make_cast_list((yyvsp[(1) - (7)].u.itoken).location, (yyvsp[(2) - (7)].u.type), constructor); ;} break; case 176: /* Line 1455 of yacc.c */ #line 1113 "c-parse.y" { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_plus, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 177: /* Line 1455 of yacc.c */ #line 1115 "c-parse.y" { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_minus, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 178: /* Line 1455 of yacc.c */ #line 1117 "c-parse.y" { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_times, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 179: /* Line 1455 of yacc.c */ #line 1119 "c-parse.y" { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_divide, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 180: /* Line 1455 of yacc.c */ #line 1121 "c-parse.y" { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_modulo, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 181: /* Line 1455 of yacc.c */ #line 1123 "c-parse.y" { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_lshift, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 182: /* Line 1455 of yacc.c */ #line 1125 "c-parse.y" { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_rshift, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 183: /* Line 1455 of yacc.c */ #line 1127 "c-parse.y" { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, (yyvsp[(2) - (3)].u.itoken).i, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 184: /* Line 1455 of yacc.c */ #line 1129 "c-parse.y" { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_lt, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 185: /* Line 1455 of yacc.c */ #line 1131 "c-parse.y" { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_gt, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 186: /* Line 1455 of yacc.c */ #line 1133 "c-parse.y" { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, (yyvsp[(2) - (3)].u.itoken).i, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 187: /* Line 1455 of yacc.c */ #line 1135 "c-parse.y" { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_bitand, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 188: /* Line 1455 of yacc.c */ #line 1137 "c-parse.y" { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_bitor, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 189: /* Line 1455 of yacc.c */ #line 1139 "c-parse.y" { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_bitxor, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 190: /* Line 1455 of yacc.c */ #line 1141 "c-parse.y" { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_andand, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 191: /* Line 1455 of yacc.c */ #line 1143 "c-parse.y" { (yyval.u.expr) = make_binary((yyvsp[(2) - (3)].u.itoken).location, kind_oror, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 192: /* Line 1455 of yacc.c */ #line 1145 "c-parse.y" { (yyval.u.expr) = make_conditional((yyvsp[(2) - (5)].u.itoken).location, (yyvsp[(1) - (5)].u.expr), (yyvsp[(3) - (5)].u.expr), (yyvsp[(5) - (5)].u.expr)); ;} break; case 193: /* Line 1455 of yacc.c */ #line 1147 "c-parse.y" { if (pedantic) pedwarn("ANSI C forbids omitting the middle term of a ?: expression"); ;} break; case 194: /* Line 1455 of yacc.c */ #line 1151 "c-parse.y" { (yyval.u.expr) = make_conditional((yyvsp[(2) - (5)].u.itoken).location, (yyvsp[(1) - (5)].u.expr), NULL, (yyvsp[(5) - (5)].u.expr)); ;} break; case 195: /* Line 1455 of yacc.c */ #line 1153 "c-parse.y" { (yyval.u.expr) = make_assign((yyvsp[(2) - (3)].u.itoken).location, kind_assign, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 196: /* Line 1455 of yacc.c */ #line 1155 "c-parse.y" { (yyval.u.expr) = make_assign((yyvsp[(2) - (3)].u.itoken).location, (yyvsp[(2) - (3)].u.itoken).i, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].u.expr)); ;} break; case 197: /* Line 1455 of yacc.c */ #line 1160 "c-parse.y" { if (yychar == YYEMPTY) yychar = YYLEX; (yyval.u.expr) = make_identifier((yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id, yychar == '('); ;} break; case 198: /* Line 1455 of yacc.c */ #line 1165 "c-parse.y" { (yyval.u.expr) = CAST(expression, (yyvsp[(1) - (1)].u.constant)); ;} break; case 199: /* Line 1455 of yacc.c */ #line 1166 "c-parse.y" { (yyval.u.expr) = (yyvsp[(1) - (1)].u.expr); ;} break; case 200: /* Line 1455 of yacc.c */ #line 1168 "c-parse.y" { (yyval.u.expr) = (yyvsp[(2) - (3)].u.expr); (yyval.u.expr)->parens = TRUE; ;} break; case 201: /* Line 1455 of yacc.c */ #line 1170 "c-parse.y" { (yyval.u.expr) = make_error_expr(); ;} break; case 202: /* Line 1455 of yacc.c */ #line 1172 "c-parse.y" { if (current.function_decl == 0) { error("braced-group within expression allowed only inside a function"); YYERROR; } push_label_level(); ;} break; case 203: /* Line 1455 of yacc.c */ #line 1180 "c-parse.y" { pop_label_level(); if (pedantic) pedwarn("ANSI C forbids braced-groups within expressions"); (yyval.u.expr) = make_compound_expr((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.stmt)); ;} break; case 204: /* Line 1455 of yacc.c */ #line 1187 "c-parse.y" { /* Magic functions may rewrite this to something else */ if (is_function_call((yyvsp[(1) - (1)].u.expr))) { function_call fc = CAST(function_call, (yyvsp[(1) - (1)].u.expr)); type calltype = fc->arg1->type; if (type_command(calltype)) error("commands must be called with call"); else if (type_event(calltype)) error("events must be signaled with signal"); else if (type_task(calltype)) error("tasks must be posted with post"); } (yyval.u.expr) = (yyvsp[(1) - (1)].u.expr); ;} break; case 205: /* Line 1455 of yacc.c */ #line 1205 "c-parse.y" { (yyval.u.expr) = make_va_arg((yyvsp[(1) - (6)].u.itoken).location, (yyvsp[(3) - (6)].u.expr), (yyvsp[(5) - (6)].u.type)); ;} break; case 206: /* Line 1455 of yacc.c */ #line 1207 "c-parse.y" { (yyval.u.expr) = make_offsetof((yyvsp[(1) - (6)].u.itoken).location, (yyvsp[(3) - (6)].u.type), (yyvsp[(5) - (6)].u.fields)); ;} break; case 207: /* Line 1455 of yacc.c */ #line 1209 "c-parse.y" { (yyval.u.expr) = make_array_ref((yyvsp[(2) - (4)].u.itoken).location, (yyvsp[(1) - (4)].u.expr), (yyvsp[(3) - (4)].u.expr)); ;} break; case 208: /* Line 1455 of yacc.c */ #line 1211 "c-parse.y" { (yyval.u.expr) = make_field_ref((yyvsp[(2) - (3)].u.itoken).location, (yyvsp[(1) - (3)].u.expr), (yyvsp[(3) - (3)].idtoken).id); ;} break; case 209: /* Line 1455 of yacc.c */ #line 1213 "c-parse.y" { (yyval.u.expr) = make_field_ref((yyvsp[(2) - (3)].u.itoken).location, make_dereference((yyvsp[(2) - (3)].u.itoken).location, (yyvsp[(1) - (3)].u.expr)), (yyvsp[(3) - (3)].idtoken).id); ;} break; case 210: /* Line 1455 of yacc.c */ #line 1216 "c-parse.y" { (yyval.u.expr) = make_postincrement((yyvsp[(2) - (2)].u.itoken).location, (yyvsp[(1) - (2)].u.expr)); ;} break; case 211: /* Line 1455 of yacc.c */ #line 1218 "c-parse.y" { (yyval.u.expr) = make_postdecrement((yyvsp[(2) - (2)].u.itoken).location, (yyvsp[(1) - (2)].u.expr)); ;} break; case 212: /* Line 1455 of yacc.c */ #line 1222 "c-parse.y" { (yyval.u.fields) = dd_new_list(pr); dd_add_last(pr, (yyval.u.fields), (yyvsp[(1) - (1)].idtoken).id.data); ;} break; case 213: /* Line 1455 of yacc.c */ #line 1223 "c-parse.y" { (yyval.u.fields) = (yyvsp[(1) - (3)].u.fields); dd_add_last(pr, (yyval.u.fields), (yyvsp[(3) - (3)].idtoken).id.data); ;} break; case 214: /* Line 1455 of yacc.c */ #line 1228 "c-parse.y" { (yyval.u.expr) = make_function_call((yyvsp[(2) - (4)].u.itoken).location, (yyvsp[(1) - (4)].u.expr), (yyvsp[(3) - (4)].u.expr)); ;} break; case 215: /* Line 1455 of yacc.c */ #line 1231 "c-parse.y" { (yyval.u.expr) = CAST(expression, (yyvsp[(1) - (1)].u.string)); ;} break; case 216: /* Line 1455 of yacc.c */ #line 1232 "c-parse.y" { (yyval.u.expr) = make_identifier((yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id, FALSE); ;} break; case 217: /* Line 1455 of yacc.c */ #line 1236 "c-parse.y" { (yyval.u.decl) = NULL; ;} break; case 219: /* Line 1455 of yacc.c */ #line 1240 "c-parse.y" { if (pedantic) pedwarn("ANSI C does not permit use of `varargs.h'"); (yyval.u.decl) = declaration_chain(CAST(declaration, new_ellipsis_decl(pr, (yyvsp[(2) - (2)].u.itoken).location)), (yyvsp[(1) - (2)].u.decl)); ;} break; case 221: /* Line 1455 of yacc.c */ #line 1251 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(2) - (2)].u.decl), (yyvsp[(1) - (2)].u.decl)); ;} break; case 222: /* Line 1455 of yacc.c */ #line 1260 "c-parse.y" { (yyval.u.decl) = make_data_decl((yyvsp[(1) - (4)].u.telement), (yyvsp[(3) - (4)].u.decl)); ;} break; case 223: /* Line 1455 of yacc.c */ #line 1262 "c-parse.y" { (yyval.u.decl) = make_data_decl((yyvsp[(1) - (4)].u.telement), (yyvsp[(3) - (4)].u.decl)); ;} break; case 224: /* Line 1455 of yacc.c */ #line 1264 "c-parse.y" { shadow_tag_warned((yyvsp[(1) - (3)].u.telement), 1); (yyval.u.decl) = make_data_decl((yyvsp[(1) - (3)].u.telement), NULL); pedwarn("empty declaration"); ;} break; case 225: /* Line 1455 of yacc.c */ #line 1268 "c-parse.y" { pedwarn("empty declaration"); (yyval.u.decl) = NULL; ;} break; case 227: /* Line 1455 of yacc.c */ #line 1278 "c-parse.y" { (yyval.u.decl) = make_error_decl(); ;} break; case 228: /* Line 1455 of yacc.c */ #line 1279 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(2) - (2)].u.decl), (yyvsp[(1) - (2)].u.decl)); ;} break; case 229: /* Line 1455 of yacc.c */ #line 1280 "c-parse.y" { (yyval.u.decl) = make_error_decl(); ;} break; case 230: /* Line 1455 of yacc.c */ #line 1288 "c-parse.y" { push_declspec_stack(); pending_xref_error(); pstate.declspecs = (yyvsp[(0) - (0)].u.telement); pstate.attributes = NULL; ;} break; case 231: /* Line 1455 of yacc.c */ #line 1300 "c-parse.y" { pstate.attributes = (yyvsp[(1) - (1)].u.attribute); ;} break; case 232: /* Line 1455 of yacc.c */ #line 1305 "c-parse.y" { (yyval.u.decl) = make_data_decl((yyvsp[(1) - (4)].u.telement), (yyvsp[(3) - (4)].u.decl)); ;} break; case 233: /* Line 1455 of yacc.c */ #line 1307 "c-parse.y" { (yyval.u.decl) = make_data_decl((yyvsp[(1) - (4)].u.telement), (yyvsp[(3) - (4)].u.decl)); ;} break; case 234: /* Line 1455 of yacc.c */ #line 1309 "c-parse.y" { (yyval.u.decl) = (yyvsp[(3) - (3)].u.decl); pop_declspec_stack(); ;} break; case 235: /* Line 1455 of yacc.c */ #line 1312 "c-parse.y" { (yyval.u.decl) = (yyvsp[(3) - (3)].u.decl); pop_declspec_stack(); ;} break; case 236: /* Line 1455 of yacc.c */ #line 1315 "c-parse.y" { shadow_tag((yyvsp[(1) - (3)].u.telement)); (yyval.u.decl) = make_data_decl((yyvsp[(1) - (3)].u.telement), NULL); ;} break; case 237: /* Line 1455 of yacc.c */ #line 1318 "c-parse.y" { (yyval.u.decl) = make_extension_decl((yyvsp[(1) - (2)].u.itoken).i, (yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.decl)); ;} break; case 239: /* Line 1455 of yacc.c */ #line 1375 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 240: /* Line 1455 of yacc.c */ #line 1377 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 241: /* Line 1455 of yacc.c */ #line 1382 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 242: /* Line 1455 of yacc.c */ #line 1387 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 243: /* Line 1455 of yacc.c */ #line 1389 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 247: /* Line 1455 of yacc.c */ #line 1400 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 248: /* Line 1455 of yacc.c */ #line 1402 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 249: /* Line 1455 of yacc.c */ #line 1404 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 250: /* Line 1455 of yacc.c */ #line 1406 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 251: /* Line 1455 of yacc.c */ #line 1408 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 252: /* Line 1455 of yacc.c */ #line 1410 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 254: /* Line 1455 of yacc.c */ #line 1416 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 255: /* Line 1455 of yacc.c */ #line 1418 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 256: /* Line 1455 of yacc.c */ #line 1420 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 257: /* Line 1455 of yacc.c */ #line 1422 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 258: /* Line 1455 of yacc.c */ #line 1424 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 259: /* Line 1455 of yacc.c */ #line 1429 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 260: /* Line 1455 of yacc.c */ #line 1431 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 261: /* Line 1455 of yacc.c */ #line 1433 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 262: /* Line 1455 of yacc.c */ #line 1435 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 263: /* Line 1455 of yacc.c */ #line 1437 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 264: /* Line 1455 of yacc.c */ #line 1439 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 265: /* Line 1455 of yacc.c */ #line 1444 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 266: /* Line 1455 of yacc.c */ #line 1446 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 267: /* Line 1455 of yacc.c */ #line 1448 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 268: /* Line 1455 of yacc.c */ #line 1450 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 269: /* Line 1455 of yacc.c */ #line 1452 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 271: /* Line 1455 of yacc.c */ #line 1458 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 272: /* Line 1455 of yacc.c */ #line 1460 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 273: /* Line 1455 of yacc.c */ #line 1462 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 274: /* Line 1455 of yacc.c */ #line 1464 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 275: /* Line 1455 of yacc.c */ #line 1466 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 276: /* Line 1455 of yacc.c */ #line 1468 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 277: /* Line 1455 of yacc.c */ #line 1473 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 278: /* Line 1455 of yacc.c */ #line 1478 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 279: /* Line 1455 of yacc.c */ #line 1480 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 280: /* Line 1455 of yacc.c */ #line 1482 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 281: /* Line 1455 of yacc.c */ #line 1484 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 282: /* Line 1455 of yacc.c */ #line 1486 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 283: /* Line 1455 of yacc.c */ #line 1488 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 284: /* Line 1455 of yacc.c */ #line 1493 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 285: /* Line 1455 of yacc.c */ #line 1498 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 286: /* Line 1455 of yacc.c */ #line 1500 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 287: /* Line 1455 of yacc.c */ #line 1502 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 288: /* Line 1455 of yacc.c */ #line 1504 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 289: /* Line 1455 of yacc.c */ #line 1506 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 290: /* Line 1455 of yacc.c */ #line 1508 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 291: /* Line 1455 of yacc.c */ #line 1510 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 292: /* Line 1455 of yacc.c */ #line 1512 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 293: /* Line 1455 of yacc.c */ #line 1514 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 294: /* Line 1455 of yacc.c */ #line 1516 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 295: /* Line 1455 of yacc.c */ #line 1521 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 296: /* Line 1455 of yacc.c */ #line 1523 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 297: /* Line 1455 of yacc.c */ #line 1525 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 298: /* Line 1455 of yacc.c */ #line 1527 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 299: /* Line 1455 of yacc.c */ #line 1529 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 300: /* Line 1455 of yacc.c */ #line 1534 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 301: /* Line 1455 of yacc.c */ #line 1536 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 302: /* Line 1455 of yacc.c */ #line 1538 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 303: /* Line 1455 of yacc.c */ #line 1540 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 304: /* Line 1455 of yacc.c */ #line 1542 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 305: /* Line 1455 of yacc.c */ #line 1544 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 306: /* Line 1455 of yacc.c */ #line 1546 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 307: /* Line 1455 of yacc.c */ #line 1548 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 308: /* Line 1455 of yacc.c */ #line 1550 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 309: /* Line 1455 of yacc.c */ #line 1552 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 310: /* Line 1455 of yacc.c */ #line 1557 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 311: /* Line 1455 of yacc.c */ #line 1559 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 312: /* Line 1455 of yacc.c */ #line 1561 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 313: /* Line 1455 of yacc.c */ #line 1563 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 314: /* Line 1455 of yacc.c */ #line 1565 "c-parse.y" { (yyval.u.telement) = type_element_chain((yyvsp[(1) - (2)].u.telement), (yyvsp[(2) - (2)].u.telement)); ;} break; case 351: /* Line 1455 of yacc.c */ #line 1632 "c-parse.y" { (yyval.u.telement) = NULL; ;} break; case 359: /* Line 1455 of yacc.c */ #line 1677 "c-parse.y" { /* For a typedef name, record the meaning, not the name. In case of `foo foo, bar;'. */ (yyval.u.telement) = CAST(type_element, new_typename(pr, (yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).decl)); ;} break; case 360: /* Line 1455 of yacc.c */ #line 1681 "c-parse.y" { /* reference to a typedef from a component. */ (yyval.u.telement) = CAST(type_element, new_component_typeref(pr, (yyvsp[(1) - (3)].idtoken).location, (yyvsp[(3) - (3)].idtoken).decl, (yyvsp[(1) - (3)].idtoken).id)); ;} break; case 361: /* Line 1455 of yacc.c */ #line 1686 "c-parse.y" { (yyval.u.telement) = CAST(type_element, new_typeof_expr(pr, (yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.expr))); ;} break; case 362: /* Line 1455 of yacc.c */ #line 1688 "c-parse.y" { (yyval.u.telement) = CAST(type_element, new_typeof_type(pr, (yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.type))); ;} break; case 363: /* Line 1455 of yacc.c */ #line 1693 "c-parse.y" { (yyval.u.decl) = declaration_reverse((yyvsp[(1) - (1)].u.decl)); ;} break; case 364: /* Line 1455 of yacc.c */ #line 1697 "c-parse.y" { (yyval.u.decl) = declaration_reverse((yyvsp[(1) - (1)].u.decl)); ;} break; case 366: /* Line 1455 of yacc.c */ #line 1703 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(4) - (4)].u.decl), (yyvsp[(1) - (4)].u.decl)); ;} break; case 367: /* Line 1455 of yacc.c */ #line 1707 "c-parse.y" { (yyval.u.decl) = (yyvsp[(1) - (1)].u.decl); ;} break; case 368: /* Line 1455 of yacc.c */ #line 1709 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(4) - (4)].u.decl), (yyvsp[(1) - (4)].u.decl)); ;} break; case 369: /* Line 1455 of yacc.c */ #line 1714 "c-parse.y" { (yyval.u.asm_stmt) = NULL; ;} break; case 370: /* Line 1455 of yacc.c */ #line 1716 "c-parse.y" { (yyval.u.asm_stmt) = new_asm_stmt(pr, (yyvsp[(1) - (4)].u.itoken).location, CAST(expression, (yyvsp[(3) - (4)].u.string)), NULL, NULL, NULL, NULL); ;} break; case 371: /* Line 1455 of yacc.c */ #line 1722 "c-parse.y" { (yyval.u.decl) = start_decl((yyvsp[(1) - (4)].u.declarator), (yyvsp[(2) - (4)].u.asm_stmt), pstate.declspecs, 1, prefix_attr((yyvsp[(3) - (4)].u.attribute))); start_init((yyval.u.decl), NULL); ;} break; case 372: /* Line 1455 of yacc.c */ #line 1727 "c-parse.y" { finish_init(); (yyval.u.decl) = finish_decl((yyvsp[(5) - (6)].u.decl), (yyvsp[(6) - (6)].u.expr)); ;} break; case 373: /* Line 1455 of yacc.c */ #line 1730 "c-parse.y" { declaration d = start_decl((yyvsp[(1) - (3)].u.declarator), (yyvsp[(2) - (3)].u.asm_stmt), pstate.declspecs, 0, prefix_attr((yyvsp[(3) - (3)].u.attribute))); (yyval.u.decl) = finish_decl(d, NULL); ;} break; case 374: /* Line 1455 of yacc.c */ #line 1737 "c-parse.y" { (yyval.u.decl) = start_decl((yyvsp[(1) - (4)].u.declarator), (yyvsp[(2) - (4)].u.asm_stmt), pstate.declspecs, 1, prefix_attr((yyvsp[(3) - (4)].u.attribute))); start_init((yyval.u.decl), NULL); ;} break; case 375: /* Line 1455 of yacc.c */ #line 1742 "c-parse.y" { finish_init(); (yyval.u.decl) = finish_decl((yyvsp[(5) - (6)].u.decl), (yyvsp[(6) - (6)].u.expr)); ;} break; case 376: /* Line 1455 of yacc.c */ #line 1745 "c-parse.y" { declaration d = start_decl((yyvsp[(1) - (3)].u.declarator), (yyvsp[(2) - (3)].u.asm_stmt), pstate.declspecs, 0, prefix_attr((yyvsp[(3) - (3)].u.attribute))); (yyval.u.decl) = finish_decl(d, NULL); ;} break; case 377: /* Line 1455 of yacc.c */ #line 1752 "c-parse.y" { (yyval.u.attribute) = NULL; ;} break; case 378: /* Line 1455 of yacc.c */ #line 1754 "c-parse.y" { (yyval.u.attribute) = attribute_reverse((yyvsp[(1) - (1)].u.attribute)); ;} break; case 379: /* Line 1455 of yacc.c */ #line 1758 "c-parse.y" { (yyval.u.telement) = CAST(type_element, (yyvsp[(1) - (1)].u.attribute)); ;} break; case 380: /* Line 1455 of yacc.c */ #line 1762 "c-parse.y" { (yyval.u.attribute) = NULL; ;} break; case 381: /* Line 1455 of yacc.c */ #line 1764 "c-parse.y" { (yyval.u.attribute) = attribute_chain((yyvsp[(2) - (2)].u.attribute), (yyvsp[(1) - (2)].u.attribute)); ;} break; case 382: /* Line 1455 of yacc.c */ #line 1769 "c-parse.y" { (yyval.u.attribute) = (yyvsp[(1) - (1)].u.attribute); ;} break; case 383: /* Line 1455 of yacc.c */ #line 1771 "c-parse.y" { (yyval.u.attribute) = attribute_chain((yyvsp[(2) - (2)].u.attribute), (yyvsp[(1) - (2)].u.attribute)); ;} break; case 384: /* Line 1455 of yacc.c */ #line 1776 "c-parse.y" { (yyval.u.attribute) = (yyvsp[(4) - (6)].u.attribute); ;} break; case 385: /* Line 1455 of yacc.c */ #line 1777 "c-parse.y" { (yyval.u.attribute) = CAST(attribute, (yyvsp[(1) - (1)].u.gcc_attribute)); ;} break; case 387: /* Line 1455 of yacc.c */ #line 1783 "c-parse.y" { word w = new_word(pr, (yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id); (yyval.u.gcc_attribute) = new_target_attribute(pr, (yyvsp[(1) - (1)].idtoken).location, w, NULL); ;} break; case 388: /* Line 1455 of yacc.c */ #line 1786 "c-parse.y" { word w = new_word(pr, (yyvsp[(1) - (2)].idtoken).location, (yyvsp[(1) - (2)].idtoken).id); (yyval.u.gcc_attribute) = new_target_attribute(pr, (yyvsp[(1) - (2)].idtoken).location, w, (yyvsp[(2) - (2)].u.expr)); ;} break; case 389: /* Line 1455 of yacc.c */ #line 1789 "c-parse.y" { word w = new_word(pr, (yyvsp[(2) - (2)].u.expr)->location, str2cstring(pr, "iar_at")); (yyval.u.gcc_attribute) = new_target_attribute(pr, (yyvsp[(2) - (2)].u.expr)->location, w, (yyvsp[(2) - (2)].u.expr)); ;} break; case 390: /* Line 1455 of yacc.c */ #line 1794 "c-parse.y" { (yyval.u.expr) = CAST(expression, (yyvsp[(1) - (1)].u.constant)); ;} break; case 391: /* Line 1455 of yacc.c */ #line 1795 "c-parse.y" { (yyval.u.expr) = (yyvsp[(1) - (1)].u.expr); ;} break; case 392: /* Line 1455 of yacc.c */ #line 1796 "c-parse.y" { (yyval.u.expr) = (yyvsp[(2) - (3)].u.expr); ;} break; case 393: /* Line 1455 of yacc.c */ #line 1801 "c-parse.y" { (yyval.u.attribute) = CAST(attribute, (yyvsp[(1) - (1)].u.gcc_attribute)); ;} break; case 394: /* Line 1455 of yacc.c */ #line 1803 "c-parse.y" { (yyval.u.attribute) = attribute_chain((yyvsp[(1) - (3)].u.attribute), CAST(attribute, (yyvsp[(3) - (3)].u.gcc_attribute))); ;} break; case 395: /* Line 1455 of yacc.c */ #line 1808 "c-parse.y" { (yyval.u.gcc_attribute) = NULL; ;} break; case 396: /* Line 1455 of yacc.c */ #line 1810 "c-parse.y" { (yyval.u.gcc_attribute) = new_gcc_attribute(pr, (yyvsp[(1) - (1)].u.word)->location, (yyvsp[(1) - (1)].u.word), NULL); ;} break; case 397: /* Line 1455 of yacc.c */ #line 1812 "c-parse.y" { (yyval.u.gcc_attribute) = new_gcc_attribute (pr, (yyvsp[(1) - (4)].u.word)->location, (yyvsp[(1) - (4)].u.word), make_attr_args((yyvsp[(3) - (4)].idtoken).location, (yyvsp[(3) - (4)].idtoken).id, NULL)); ;} break; case 398: /* Line 1455 of yacc.c */ #line 1815 "c-parse.y" { (yyval.u.gcc_attribute) = new_gcc_attribute (pr, (yyvsp[(2) - (6)].u.itoken).location, (yyvsp[(1) - (6)].u.word), make_attr_args((yyvsp[(3) - (6)].idtoken).location, (yyvsp[(3) - (6)].idtoken).id, (yyvsp[(5) - (6)].u.expr))); ;} break; case 399: /* Line 1455 of yacc.c */ #line 1819 "c-parse.y" { (yyval.u.gcc_attribute) = new_gcc_attribute(pr, (yyvsp[(2) - (4)].u.itoken).location, (yyvsp[(1) - (4)].u.word), (yyvsp[(3) - (4)].u.expr)); ;} break; case 400: /* Line 1455 of yacc.c */ #line 1825 "c-parse.y" { (yyval.u.attribute) = finish_attribute_use((yyvsp[(2) - (5)].u.nesc_attribute), (yyvsp[(4) - (5)].u.expr)); ;} break; case 401: /* Line 1455 of yacc.c */ #line 1827 "c-parse.y" { (yyval.u.attribute) = finish_attribute_use((yyvsp[(2) - (4)].u.nesc_attribute), make_error_expr()); ;} break; case 402: /* Line 1455 of yacc.c */ #line 1832 "c-parse.y" { (yyval.u.nesc_attribute) = start_attribute_use((yyvsp[(1) - (1)].u.word)); ;} break; case 404: /* Line 1455 of yacc.c */ #line 1841 "c-parse.y" { (yyval.u.word) = make_cword((yyvsp[(1) - (1)].u.telement)->location, rid_name(CAST(rid, (yyvsp[(1) - (1)].u.telement)))); ;} break; case 405: /* Line 1455 of yacc.c */ #line 1843 "c-parse.y" { (yyval.u.word) = make_cword((yyvsp[(1) - (1)].u.telement)->location, rid_name(CAST(rid, (yyvsp[(1) - (1)].u.telement)))); ;} break; case 406: /* Line 1455 of yacc.c */ #line 1845 "c-parse.y" { (yyval.u.word) = make_cword((yyvsp[(1) - (1)].u.telement)->location, qualifier_name(CAST(qualifier, (yyvsp[(1) - (1)].u.telement))->id)); ;} break; case 407: /* Line 1455 of yacc.c */ #line 1847 "c-parse.y" { (yyval.u.word) = make_cword((yyvsp[(1) - (1)].u.itoken).location, "signal"); ;} break; case 408: /* Line 1455 of yacc.c */ #line 1853 "c-parse.y" { (yyval.u.expr) = (yyvsp[(1) - (1)].u.expr); simple_init((yyval.u.expr)); ;} break; case 409: /* Line 1455 of yacc.c */ #line 1855 "c-parse.y" { really_start_incremental_init(NULL); ;} break; case 410: /* Line 1455 of yacc.c */ #line 1857 "c-parse.y" { (yyval.u.expr) = make_init_list((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.expr)); ;} break; case 411: /* Line 1455 of yacc.c */ #line 1859 "c-parse.y" { (yyval.u.expr) = make_error_expr(); ;} break; case 412: /* Line 1455 of yacc.c */ #line 1865 "c-parse.y" { if (pedantic) pedwarn("ANSI C forbids empty initializer braces"); (yyval.u.expr) = NULL; ;} break; case 413: /* Line 1455 of yacc.c */ #line 1868 "c-parse.y" { (yyval.u.expr) = expression_reverse((yyvsp[(1) - (2)].u.expr)); ;} break; case 415: /* Line 1455 of yacc.c */ #line 1873 "c-parse.y" { (yyval.u.expr) = expression_chain((yyvsp[(3) - (3)].u.expr), (yyvsp[(1) - (3)].u.expr)); ;} break; case 416: /* Line 1455 of yacc.c */ #line 1880 "c-parse.y" { if (pedantic) pedwarn("ANSI C forbids specifying subobject to initialize"); (yyval.u.expr) = make_init_specific((yyvsp[(1) - (3)].u.designator), (yyvsp[(3) - (3)].u.expr)); ;} break; case 417: /* Line 1455 of yacc.c */ #line 1884 "c-parse.y" { if (pedantic) pedwarn("obsolete use of designated initializer without `='"); (yyval.u.expr) = make_init_specific((yyvsp[(1) - (2)].u.designator), (yyvsp[(2) - (2)].u.expr)); ;} break; case 418: /* Line 1455 of yacc.c */ #line 1888 "c-parse.y" { (yyval.u.designator) = set_init_label((yyvsp[(1) - (2)].idtoken).location, (yyvsp[(1) - (2)].idtoken).id); if (pedantic) pedwarn("obsolete use of designated initializer with `:'"); ;} break; case 419: /* Line 1455 of yacc.c */ #line 1892 "c-parse.y" { (yyval.u.expr) = make_init_specific((yyvsp[(3) - (4)].u.designator), (yyvsp[(4) - (4)].u.expr)); ;} break; case 421: /* Line 1455 of yacc.c */ #line 1898 "c-parse.y" { push_init_level (0); ;} break; case 422: /* Line 1455 of yacc.c */ #line 1900 "c-parse.y" { (yyval.u.expr) = make_init_list((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.expr)); process_init_element(NULL); ;} break; case 423: /* Line 1455 of yacc.c */ #line 1903 "c-parse.y" { process_init_element((yyvsp[(1) - (1)].u.expr)); (yyval.u.expr) = (yyvsp[(1) - (1)].u.expr); ;} break; case 424: /* Line 1455 of yacc.c */ #line 1904 "c-parse.y" { (yyval.u.expr) = make_error_expr(); ;} break; case 426: /* Line 1455 of yacc.c */ #line 1909 "c-parse.y" { (yyval.u.designator) = designator_chain((yyvsp[(1) - (2)].u.designator), (yyvsp[(2) - (2)].u.designator)); ;} break; case 427: /* Line 1455 of yacc.c */ #line 1914 "c-parse.y" { (yyval.u.designator) = set_init_label((yyvsp[(2) - (2)].idtoken).location, (yyvsp[(2) - (2)].idtoken).id); ;} break; case 428: /* Line 1455 of yacc.c */ #line 1919 "c-parse.y" { (yyval.u.designator) = set_init_index((yyvsp[(1) - (5)].u.itoken).location, (yyvsp[(2) - (5)].u.expr), (yyvsp[(4) - (5)].u.expr)); if (pedantic) pedwarn ("ISO C forbids specifying range of elements to initialize"); ;} break; case 429: /* Line 1455 of yacc.c */ #line 1923 "c-parse.y" { (yyval.u.designator) = set_init_index((yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(2) - (3)].u.expr), NULL); ;} break; case 430: /* Line 1455 of yacc.c */ #line 1928 "c-parse.y" { /* maybeasm is only here to avoid a s/r conflict */ refuse_asm((yyvsp[(2) - (3)].u.asm_stmt)); if (!start_function(pstate.declspecs, (yyvsp[(1) - (3)].u.declarator), (yyvsp[(3) - (3)].u.attribute), 1)) { YYERROR1; } ;} break; case 431: /* Line 1455 of yacc.c */ #line 1938 "c-parse.y" { store_parm_decls(declaration_reverse((yyvsp[(3) - (5)].u.attribute))); ;} break; case 432: /* Line 1455 of yacc.c */ #line 1946 "c-parse.y" { (yyval.u.decl) = finish_function((yyvsp[(7) - (7)].u.stmt)); ;} break; case 433: /* Line 1455 of yacc.c */ #line 1951 "c-parse.y" { /* maybeasm is only here to avoid a s/r conflict */ refuse_asm((yyvsp[(2) - (3)].u.asm_stmt)); if (!start_function(pstate.declspecs, (yyvsp[(1) - (3)].u.declarator), (yyvsp[(3) - (3)].u.attribute), 1)) { YYERROR1; } ;} break; case 434: /* Line 1455 of yacc.c */ #line 1961 "c-parse.y" { store_parm_decls(declaration_reverse((yyvsp[(3) - (5)].u.attribute))); ;} break; case 435: /* Line 1455 of yacc.c */ #line 1969 "c-parse.y" { (yyval.u.decl) = finish_function((yyvsp[(7) - (7)].u.stmt)); ;} break; case 438: /* Line 1455 of yacc.c */ #line 1984 "c-parse.y" { (yyval.u.declarator) = finish_array_or_fn_declarator((yyvsp[(1) - (2)].u.declarator), (yyvsp[(2) - (2)].u.nested)); ;} break; case 439: /* Line 1455 of yacc.c */ #line 1986 "c-parse.y" { (yyval.u.declarator) = make_pointer_declarator((yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(3) - (3)].u.declarator), (yyvsp[(2) - (3)].u.telement)); ;} break; case 440: /* Line 1455 of yacc.c */ #line 1988 "c-parse.y" { (yyval.u.declarator) = make_qualified_declarator((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.declarator), CAST(type_element, (yyvsp[(2) - (4)].u.attribute))); ;} break; case 441: /* Line 1455 of yacc.c */ #line 1989 "c-parse.y" { (yyval.u.declarator) = make_identifier_declarator((yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id); ;} break; case 442: /* Line 1455 of yacc.c */ #line 1991 "c-parse.y" { (yyval.u.declarator) = make_interface_ref_declarator((yyvsp[(1) - (3)].idtoken).location, (yyvsp[(1) - (3)].idtoken).id, (yyvsp[(3) - (3)].idtoken).id); ;} break; case 443: /* Line 1455 of yacc.c */ #line 2002 "c-parse.y" { (yyval.u.declarator) = finish_array_or_fn_declarator((yyvsp[(1) - (2)].u.declarator), (yyvsp[(2) - (2)].u.nested)); ;} break; case 444: /* Line 1455 of yacc.c */ #line 2004 "c-parse.y" { (yyval.u.declarator) = make_pointer_declarator((yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(3) - (3)].u.declarator), (yyvsp[(2) - (3)].u.telement)); ;} break; case 445: /* Line 1455 of yacc.c */ #line 2006 "c-parse.y" { (yyval.u.declarator) = make_identifier_declarator((yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id); ;} break; case 446: /* Line 1455 of yacc.c */ #line 2015 "c-parse.y" { (yyval.u.declarator) = finish_array_or_fn_declarator((yyvsp[(1) - (2)].u.declarator), (yyvsp[(2) - (2)].u.nested)); ;} break; case 447: /* Line 1455 of yacc.c */ #line 2017 "c-parse.y" { (yyval.u.declarator) = make_pointer_declarator((yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(3) - (3)].u.declarator), (yyvsp[(2) - (3)].u.telement)); ;} break; case 448: /* Line 1455 of yacc.c */ #line 2019 "c-parse.y" { (yyval.u.declarator) = make_qualified_declarator((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.declarator), CAST(type_element, (yyvsp[(2) - (4)].u.attribute))); ;} break; case 449: /* Line 1455 of yacc.c */ #line 2021 "c-parse.y" { (yyval.u.declarator) = make_identifier_declarator((yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id); ;} break; case 450: /* Line 1455 of yacc.c */ #line 2023 "c-parse.y" { (yyval.u.declarator) = make_interface_ref_declarator((yyvsp[(1) - (3)].idtoken).location, (yyvsp[(1) - (3)].idtoken).id, (yyvsp[(3) - (3)].idtoken).id); ;} break; case 451: /* Line 1455 of yacc.c */ #line 2029 "c-parse.y" { (yyval.u.word) = new_word(pr, (yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id); ;} break; case 452: /* Line 1455 of yacc.c */ #line 2034 "c-parse.y" { (yyval.u.telement) = xref_tag((yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(1) - (3)].u.itoken).i, (yyvsp[(2) - (3)].u.word)); if ((yyvsp[(3) - (3)].u.attribute)) warning("attributes ignored"); ;} break; case 453: /* Line 1455 of yacc.c */ #line 2037 "c-parse.y" { (yyval.u.telement) = xref_tag((yyvsp[(1) - (3)].u.itoken).location, kind_enum_ref, (yyvsp[(2) - (3)].u.word)); if ((yyvsp[(3) - (3)].u.attribute)) warning("attributes ignored"); ;} break; case 454: /* Line 1455 of yacc.c */ #line 2043 "c-parse.y" { (yyval.u.telement) = start_struct((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(1) - (4)].u.itoken).i, (yyvsp[(2) - (4)].u.word)); /* Start scope of tag before parsing components. */ ;} break; case 455: /* Line 1455 of yacc.c */ #line 2047 "c-parse.y" { (yyval.u.telement) = finish_struct((yyvsp[(5) - (8)].u.telement), (yyvsp[(6) - (8)].u.decl), attribute_chain((yyvsp[(3) - (8)].u.attribute), (yyvsp[(8) - (8)].u.attribute))); ;} break; case 456: /* Line 1455 of yacc.c */ #line 2049 "c-parse.y" { (yyval.u.telement) = start_struct((yyvsp[(1) - (5)].u.itoken).location, kind_attribute_ref, (yyvsp[(3) - (5)].u.word)); /* Start scope of tag before parsing components. */ ;} break; case 457: /* Line 1455 of yacc.c */ #line 2053 "c-parse.y" { (yyval.u.telement) = finish_struct((yyvsp[(6) - (9)].u.telement), (yyvsp[(7) - (9)].u.decl), attribute_chain((yyvsp[(4) - (9)].u.attribute), (yyvsp[(9) - (9)].u.attribute))); ;} break; case 458: /* Line 1455 of yacc.c */ #line 2055 "c-parse.y" { (yyval.u.telement) = finish_struct(start_struct((yyvsp[(1) - (5)].u.itoken).location, (yyvsp[(1) - (5)].u.itoken).i, NULL), (yyvsp[(3) - (5)].u.decl), (yyvsp[(5) - (5)].u.attribute)); ;} break; case 459: /* Line 1455 of yacc.c */ #line 2059 "c-parse.y" { (yyval.u.telement) = start_enum((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(2) - (4)].u.word)); ;} break; case 460: /* Line 1455 of yacc.c */ #line 2061 "c-parse.y" { (yyval.u.telement) = finish_enum((yyvsp[(5) - (9)].u.telement), declaration_reverse((yyvsp[(6) - (9)].u.decl)), attribute_chain((yyvsp[(3) - (9)].u.attribute), (yyvsp[(9) - (9)].u.attribute))); ;} break; case 461: /* Line 1455 of yacc.c */ #line 2063 "c-parse.y" { (yyval.u.telement) = start_enum((yyvsp[(1) - (2)].u.itoken).location, NULL); ;} break; case 462: /* Line 1455 of yacc.c */ #line 2065 "c-parse.y" { (yyval.u.telement) = finish_enum((yyvsp[(3) - (7)].u.telement), declaration_reverse((yyvsp[(4) - (7)].u.decl)), (yyvsp[(7) - (7)].u.attribute)); ;} break; case 463: /* Line 1455 of yacc.c */ #line 2069 "c-parse.y" { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_struct_ref; ;} break; case 464: /* Line 1455 of yacc.c */ #line 2070 "c-parse.y" { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_union_ref; ;} break; case 465: /* Line 1455 of yacc.c */ #line 2071 "c-parse.y" { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_nx_struct_ref; ;} break; case 466: /* Line 1455 of yacc.c */ #line 2072 "c-parse.y" { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); (yyval.u.itoken).i = kind_nx_union_ref; ;} break; case 470: /* Line 1455 of yacc.c */ #line 2083 "c-parse.y" { if (pedantic) pedwarn("comma at end of enumerator list"); ;} break; case 471: /* Line 1455 of yacc.c */ #line 2088 "c-parse.y" { (yyval.u.decl) = declaration_reverse((yyvsp[(1) - (1)].u.decl)); ;} break; case 472: /* Line 1455 of yacc.c */ #line 2090 "c-parse.y" { (yyval.u.decl) = declaration_reverse(declaration_chain((yyvsp[(2) - (2)].u.decl), (yyvsp[(1) - (2)].u.decl))); pedwarn("no semicolon at end of struct or union"); ;} break; case 473: /* Line 1455 of yacc.c */ #line 2096 "c-parse.y" { (yyval.u.decl) = NULL; ;} break; case 474: /* Line 1455 of yacc.c */ #line 2098 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(2) - (3)].u.decl), (yyvsp[(1) - (3)].u.decl)); ;} break; case 475: /* Line 1455 of yacc.c */ #line 2100 "c-parse.y" { if (pedantic) pedwarn("extra semicolon in struct or union specified"); (yyval.u.decl) = (yyvsp[(1) - (2)].u.decl); ;} break; case 476: /* Line 1455 of yacc.c */ #line 2116 "c-parse.y" { (yyval.u.decl) = make_data_decl((yyvsp[(1) - (3)].u.telement), declaration_reverse((yyvsp[(3) - (3)].u.decl))); ;} break; case 477: /* Line 1455 of yacc.c */ #line 2118 "c-parse.y" { if (pedantic) pedwarn("ISO C doesn't support unnamed structs/unions"); (yyval.u.decl) = make_data_decl((yyvsp[(1) - (2)].u.telement), NULL); ;} break; case 478: /* Line 1455 of yacc.c */ #line 2123 "c-parse.y" { (yyval.u.decl) = make_data_decl((yyvsp[(1) - (3)].u.telement), declaration_reverse((yyvsp[(3) - (3)].u.decl))); ;} break; case 479: /* Line 1455 of yacc.c */ #line 2125 "c-parse.y" { if (pedantic) pedwarn("ANSI C forbids member declarations with no members"); shadow_tag((yyvsp[(1) - (2)].u.telement)); (yyval.u.decl) = make_data_decl((yyvsp[(1) - (2)].u.telement), NULL); ;} break; case 480: /* Line 1455 of yacc.c */ #line 2130 "c-parse.y" { (yyval.u.decl) = make_error_decl(); ;} break; case 481: /* Line 1455 of yacc.c */ #line 2132 "c-parse.y" { (yyval.u.decl) = make_extension_decl((yyvsp[(1) - (2)].u.itoken).i, (yyvsp[(1) - (2)].u.itoken).location, (yyvsp[(2) - (2)].u.decl)); ;} break; case 483: /* Line 1455 of yacc.c */ #line 2138 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(4) - (4)].u.decl), (yyvsp[(1) - (4)].u.decl)); ;} break; case 485: /* Line 1455 of yacc.c */ #line 2146 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(4) - (4)].u.decl), (yyvsp[(1) - (4)].u.decl)); ;} break; case 486: /* Line 1455 of yacc.c */ #line 2151 "c-parse.y" { (yyval.u.decl) = make_field((yyvsp[(1) - (2)].u.declarator), NULL, pstate.declspecs, prefix_attr((yyvsp[(2) - (2)].u.attribute))); ;} break; case 487: /* Line 1455 of yacc.c */ #line 2154 "c-parse.y" { (yyval.u.decl) = make_field((yyvsp[(1) - (4)].u.declarator), (yyvsp[(3) - (4)].u.expr), pstate.declspecs, prefix_attr((yyvsp[(4) - (4)].u.attribute))); ;} break; case 488: /* Line 1455 of yacc.c */ #line 2157 "c-parse.y" { (yyval.u.decl) = make_field(NULL, (yyvsp[(2) - (3)].u.expr), pstate.declspecs, prefix_attr((yyvsp[(3) - (3)].u.attribute))); ;} break; case 489: /* Line 1455 of yacc.c */ #line 2163 "c-parse.y" { (yyval.u.decl) = make_field((yyvsp[(1) - (2)].u.declarator), NULL, pstate.declspecs, prefix_attr((yyvsp[(2) - (2)].u.attribute))); ;} break; case 490: /* Line 1455 of yacc.c */ #line 2166 "c-parse.y" { (yyval.u.decl) = make_field((yyvsp[(1) - (4)].u.declarator), (yyvsp[(3) - (4)].u.expr), pstate.declspecs, prefix_attr((yyvsp[(4) - (4)].u.attribute))); ;} break; case 491: /* Line 1455 of yacc.c */ #line 2169 "c-parse.y" { (yyval.u.decl) = make_field(NULL, (yyvsp[(2) - (3)].u.expr), pstate.declspecs, prefix_attr((yyvsp[(3) - (3)].u.attribute))); ;} break; case 493: /* Line 1455 of yacc.c */ #line 2176 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(3) - (3)].u.decl), (yyvsp[(1) - (3)].u.decl)); ;} break; case 494: /* Line 1455 of yacc.c */ #line 2178 "c-parse.y" { (yyval.u.decl) = NULL; ;} break; case 495: /* Line 1455 of yacc.c */ #line 2184 "c-parse.y" { (yyval.u.decl) = make_enumerator((yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id, NULL); ;} break; case 496: /* Line 1455 of yacc.c */ #line 2186 "c-parse.y" { (yyval.u.decl) = make_enumerator((yyvsp[(1) - (3)].idtoken).location, (yyvsp[(1) - (3)].idtoken).id, (yyvsp[(3) - (3)].u.expr)); ;} break; case 497: /* Line 1455 of yacc.c */ #line 2191 "c-parse.y" { pending_xref_error(); ;} break; case 498: /* Line 1455 of yacc.c */ #line 2193 "c-parse.y" { (yyval.u.type) = make_type((yyvsp[(1) - (3)].u.telement), (yyvsp[(3) - (3)].u.declarator)); ;} break; case 499: /* Line 1455 of yacc.c */ #line 2198 "c-parse.y" { (yyval.u.declarator) = NULL; ;} break; case 504: /* Line 1455 of yacc.c */ #line 2210 "c-parse.y" { (yyval.u.declarator) = make_pointer_declarator((yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(3) - (3)].u.declarator), (yyvsp[(2) - (3)].u.telement)); ;} break; case 505: /* Line 1455 of yacc.c */ #line 2215 "c-parse.y" { (yyval.u.declarator) = make_pointer_declarator((yyvsp[(1) - (2)].u.itoken).location, NULL, (yyvsp[(2) - (2)].u.telement)); ;} break; case 506: /* Line 1455 of yacc.c */ #line 2217 "c-parse.y" { (yyval.u.declarator) = make_pointer_declarator((yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(3) - (3)].u.declarator), (yyvsp[(2) - (3)].u.telement)); ;} break; case 507: /* Line 1455 of yacc.c */ #line 2222 "c-parse.y" { (yyval.u.declarator) = make_qualified_declarator((yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.declarator), CAST(type_element, (yyvsp[(2) - (4)].u.attribute))); ;} break; case 508: /* Line 1455 of yacc.c */ #line 2224 "c-parse.y" { (yyval.u.declarator) = finish_array_or_fn_declarator((yyvsp[(1) - (2)].u.declarator), (yyvsp[(2) - (2)].u.nested)); ;} break; case 509: /* Line 1455 of yacc.c */ #line 2226 "c-parse.y" { (yyval.u.declarator) = finish_array_or_fn_declarator(NULL, (yyvsp[(1) - (1)].u.nested)); ;} break; case 514: /* Line 1455 of yacc.c */ #line 2241 "c-parse.y" { (yyval.u.nested) = CAST(nested_declarator, new_function_declarator(pr, (yyvsp[(2) - (4)].u.itoken).location, NULL, (yyvsp[(3) - (4)].u.decl), (yyvsp[(1) - (4)].u.decl), (yyvsp[(4) - (4)].u.telement), NULL)); ;} break; case 515: /* Line 1455 of yacc.c */ #line 2244 "c-parse.y" { (yyval.u.nested) = CAST(nested_declarator, new_function_declarator(pr, (yyvsp[(1) - (3)].u.itoken).location, NULL, (yyvsp[(2) - (3)].u.decl), NULL, (yyvsp[(3) - (3)].u.telement), NULL)); ;} break; case 516: /* Line 1455 of yacc.c */ #line 2250 "c-parse.y" { (yyval.u.nested) = CAST(nested_declarator, new_function_declarator(pr, (yyvsp[(1) - (3)].u.itoken).location, NULL, (yyvsp[(2) - (3)].u.decl), NULL, (yyvsp[(3) - (3)].u.telement), NULL)); ;} break; case 517: /* Line 1455 of yacc.c */ #line 2256 "c-parse.y" { (yyval.u.nested) = CAST(nested_declarator, new_array_declarator(pr, (yyvsp[(1) - (3)].u.itoken).location, NULL, (yyvsp[(2) - (3)].u.expr))); ;} break; case 518: /* Line 1455 of yacc.c */ #line 2258 "c-parse.y" { (yyval.u.nested) = CAST(nested_declarator, new_array_declarator(pr, (yyvsp[(1) - (2)].u.itoken).location, NULL, NULL)); ;} break; case 519: /* Line 1455 of yacc.c */ #line 2267 "c-parse.y" { if (pedantic && (yyvsp[(1) - (1)].u.istmt).i) pedwarn("ANSI C forbids label at end of compound statement"); /* Add an empty statement to last label if stand-alone */ if ((yyvsp[(1) - (1)].u.istmt).i) { statement last_label = last_statement((yyvsp[(1) - (1)].u.istmt).stmt); chain_with_labels(last_label, CAST(statement, new_empty_stmt(pr, last_label->location))); } (yyval.u.stmt) = (yyvsp[(1) - (1)].u.istmt).stmt; ;} break; case 521: /* Line 1455 of yacc.c */ #line 2284 "c-parse.y" { (yyval.u.istmt).i = (yyvsp[(2) - (2)].u.istmt).i; (yyval.u.istmt).stmt = chain_with_labels((yyvsp[(1) - (2)].u.istmt).stmt, (yyvsp[(2) - (2)].u.istmt).stmt); ;} break; case 522: /* Line 1455 of yacc.c */ #line 2286 "c-parse.y" { (yyval.u.istmt).i = 0; (yyval.u.istmt).stmt = make_error_stmt(); ;} break; case 523: /* Line 1455 of yacc.c */ #line 2290 "c-parse.y" { (yyval.u.stmt) = NULL; ;} break; case 526: /* Line 1455 of yacc.c */ #line 2299 "c-parse.y" { pushlevel(FALSE); ;} break; case 527: /* Line 1455 of yacc.c */ #line 2305 "c-parse.y" { (yyval.u.id_label) = NULL; ;} break; case 528: /* Line 1455 of yacc.c */ #line 2307 "c-parse.y" { if (pedantic) pedwarn("ANSI C forbids label declarations"); (yyval.u.id_label) = id_label_reverse((yyvsp[(1) - (1)].u.id_label)); ;} break; case 530: /* Line 1455 of yacc.c */ #line 2314 "c-parse.y" { (yyval.u.id_label) = id_label_chain((yyvsp[(2) - (2)].u.id_label), (yyvsp[(1) - (2)].u.id_label)); ;} break; case 531: /* Line 1455 of yacc.c */ #line 2319 "c-parse.y" { (yyval.u.id_label) = (yyvsp[(2) - (3)].u.id_label); ;} break; case 533: /* Line 1455 of yacc.c */ #line 2326 "c-parse.y" { (yyval.u.stmt) = (yyvsp[(2) - (2)].u.stmt); ;} break; case 534: /* Line 1455 of yacc.c */ #line 2330 "c-parse.y" { (yyval.u.itoken) = (yyvsp[(1) - (1)].u.itoken); compstmt_count++; ;} break; case 535: /* Line 1455 of yacc.c */ #line 2335 "c-parse.y" { (yyval.u.stmt) = CAST(statement, new_compound_stmt(pr, (yyvsp[(1) - (3)].u.itoken).location, NULL, NULL, NULL, poplevel())); ;} break; case 536: /* Line 1455 of yacc.c */ #line 2337 "c-parse.y" { (yyval.u.stmt) = CAST(statement, new_compound_stmt(pr, (yyvsp[(1) - (6)].u.itoken).location, (yyvsp[(3) - (6)].u.id_label), declaration_reverse((yyvsp[(4) - (6)].u.decl)), (yyvsp[(5) - (6)].u.stmt), poplevel())); ;} break; case 537: /* Line 1455 of yacc.c */ #line 2340 "c-parse.y" { poplevel(); (yyval.u.stmt) = make_error_stmt(); ;} break; case 538: /* Line 1455 of yacc.c */ #line 2343 "c-parse.y" { (yyval.u.stmt) = CAST(statement, new_compound_stmt(pr, (yyvsp[(1) - (5)].u.itoken).location, (yyvsp[(3) - (5)].u.id_label), NULL, (yyvsp[(4) - (5)].u.stmt), poplevel())); ;} break; case 539: /* Line 1455 of yacc.c */ #line 2349 "c-parse.y" { (yyval.u.istmt).stmt = CAST(statement, new_if_stmt(pr, (yyvsp[(1) - (2)].u.iexpr).expr->location, (yyvsp[(1) - (2)].u.iexpr).expr, (yyvsp[(2) - (2)].u.stmt), NULL)); (yyval.u.istmt).i = (yyvsp[(1) - (2)].u.iexpr).i; ;} break; case 540: /* Line 1455 of yacc.c */ #line 2351 "c-parse.y" { (yyval.u.istmt).i = (yyvsp[(1) - (2)].u.iexpr).i; (yyval.u.istmt).stmt = make_error_stmt(); ;} break; case 541: /* Line 1455 of yacc.c */ #line 2356 "c-parse.y" { (yyval.u.iexpr).i = stmt_count; (yyval.u.iexpr).expr = (yyvsp[(3) - (4)].u.expr); check_condition("if", (yyvsp[(3) - (4)].u.expr)); ;} break; case 542: /* Line 1455 of yacc.c */ #line 2366 "c-parse.y" { stmt_count++; compstmt_count++; (yyval.u.cstmt) = CAST(conditional_stmt, new_dowhile_stmt(pr, (yyvsp[(1) - (1)].u.itoken).location, NULL, NULL)); push_loop(CAST(statement, (yyval.u.cstmt))); ;} break; case 543: /* Line 1455 of yacc.c */ #line 2372 "c-parse.y" { (yyval.u.cstmt) = (yyvsp[(2) - (4)].u.cstmt); (yyval.u.cstmt)->stmt = (yyvsp[(3) - (4)].u.stmt); ;} break; case 544: /* Line 1455 of yacc.c */ #line 2378 "c-parse.y" { (yyval.u.stmt) = (yyvsp[(1) - (1)].u.stmt); ;} break; case 545: /* Line 1455 of yacc.c */ #line 2380 "c-parse.y" { (yyval.u.stmt) = CAST(statement, new_labeled_stmt(pr, (yyvsp[(1) - (2)].u.label)->location, (yyvsp[(1) - (2)].u.label), (yyvsp[(2) - (2)].u.stmt))); ;} break; case 546: /* Line 1455 of yacc.c */ #line 2385 "c-parse.y" { (yyval.u.istmt).i = 0; (yyval.u.istmt).stmt = (yyvsp[(1) - (1)].u.stmt); ;} break; case 547: /* Line 1455 of yacc.c */ #line 2387 "c-parse.y" { (yyval.u.istmt).i = 1; (yyval.u.istmt).stmt = CAST(statement, new_labeled_stmt(pr, (yyvsp[(1) - (1)].u.label)->location, (yyvsp[(1) - (1)].u.label), NULL)); ;} break; case 548: /* Line 1455 of yacc.c */ #line 2391 "c-parse.y" { atomic_stmt last_atomic = current.in_atomic; current.in_atomic = new_atomic_stmt(pr, (yyvsp[(1) - (1)].u.itoken).location, NULL); current.in_atomic->containing_atomic = last_atomic; ;} break; case 549: /* Line 1455 of yacc.c */ #line 2398 "c-parse.y" { atomic_stmt this_atomic = current.in_atomic; this_atomic->stmt = (yyvsp[(3) - (3)].u.stmt); current.in_atomic = this_atomic->containing_atomic; if (current.in_atomic) /* Ignore nested atomics */ (yyval.u.stmt) = (yyvsp[(3) - (3)].u.stmt); else (yyval.u.stmt) = CAST(statement, this_atomic); ;} break; case 551: /* Line 1455 of yacc.c */ #line 2412 "c-parse.y" { (yyval.u.stmt) = make_error_stmt(); ;} break; case 552: /* Line 1455 of yacc.c */ #line 2418 "c-parse.y" { stmt_count++; (yyval.u.stmt) = (yyvsp[(1) - (1)].u.stmt); ;} break; case 553: /* Line 1455 of yacc.c */ #line 2420 "c-parse.y" { stmt_count++; (yyval.u.stmt) = CAST(statement, new_expression_stmt(pr, (yyvsp[(1) - (2)].u.expr)->location, (yyvsp[(1) - (2)].u.expr))); ;} break; case 554: /* Line 1455 of yacc.c */ #line 2423 "c-parse.y" { (yyvsp[(1) - (2)].u.istmt).i = stmt_count; ;} break; case 555: /* Line 1455 of yacc.c */ #line 2425 "c-parse.y" { if (extra_warnings && stmt_count == (yyvsp[(1) - (4)].u.istmt).i) warning("empty body in an else-statement"); (yyval.u.stmt) = (yyvsp[(1) - (4)].u.istmt).stmt; if (is_if_stmt((yyval.u.stmt))) /* could be an error_stmt */ CAST(if_stmt, (yyval.u.stmt))->stmt2 = (yyvsp[(4) - (4)].u.stmt); ;} break; case 556: /* Line 1455 of yacc.c */ #line 2432 "c-parse.y" { /* This warning is here instead of in simple_if, because we do not want a warning if an empty if is followed by an else statement. Increment stmt_count so we don't give a second error if this is a nested `if'. */ if (extra_warnings && stmt_count++ == (yyvsp[(1) - (1)].u.istmt).i) warning_with_location ((yyvsp[(1) - (1)].u.istmt).stmt->location, "empty body in an if-statement"); (yyval.u.stmt) = (yyvsp[(1) - (1)].u.istmt).stmt; ;} break; case 557: /* Line 1455 of yacc.c */ #line 2441 "c-parse.y" { (yyval.u.stmt) = make_error_stmt(); ;} break; case 558: /* Line 1455 of yacc.c */ #line 2443 "c-parse.y" { stmt_count++; ;} break; case 559: /* Line 1455 of yacc.c */ #line 2445 "c-parse.y" { check_condition("while", (yyvsp[(4) - (5)].u.expr)); (yyval.u.cstmt) = CAST(conditional_stmt, new_while_stmt(pr, (yyvsp[(1) - (5)].u.itoken).location, (yyvsp[(4) - (5)].u.expr), NULL)); /* The condition is not "in the loop" for break or continue */ push_loop(CAST(statement, (yyval.u.cstmt))); ;} break; case 560: /* Line 1455 of yacc.c */ #line 2451 "c-parse.y" { (yyval.u.stmt) = CAST(statement, (yyvsp[(6) - (7)].u.cstmt)); (yyvsp[(6) - (7)].u.cstmt)->stmt = (yyvsp[(7) - (7)].u.stmt); pop_loop(); ;} break; case 561: /* Line 1455 of yacc.c */ #line 2455 "c-parse.y" { (yyval.u.stmt) = CAST(statement, (yyvsp[(1) - (5)].u.cstmt)); (yyvsp[(1) - (5)].u.cstmt)->condition = (yyvsp[(3) - (5)].u.expr); check_condition("do-while", (yyvsp[(3) - (5)].u.expr)); /* Note that pop_loop should be before the expr to be consistent with while, but GCC is inconsistent. See loop1.c */ pop_loop(); ;} break; case 562: /* Line 1455 of yacc.c */ #line 2462 "c-parse.y" { (yyval.u.stmt) = make_error_stmt(); pop_loop(); ;} break; case 563: /* Line 1455 of yacc.c */ #line 2464 "c-parse.y" { stmt_count++; ;} break; case 564: /* Line 1455 of yacc.c */ #line 2465 "c-parse.y" { if ((yyvsp[(6) - (7)].u.expr)) check_condition("for", (yyvsp[(6) - (7)].u.expr)); ;} break; case 565: /* Line 1455 of yacc.c */ #line 2467 "c-parse.y" { (yyval.u.for_stmt) = new_for_stmt(pr, (yyvsp[(1) - (10)].u.itoken).location, (yyvsp[(3) - (10)].u.expr), (yyvsp[(6) - (10)].u.expr), (yyvsp[(9) - (10)].u.expr), NULL); push_loop(CAST(statement, (yyval.u.for_stmt))); ;} break; case 566: /* Line 1455 of yacc.c */ #line 2470 "c-parse.y" { (yyval.u.stmt) = CAST(statement, (yyvsp[(11) - (12)].u.for_stmt)); (yyvsp[(11) - (12)].u.for_stmt)->stmt = (yyvsp[(12) - (12)].u.stmt); pop_loop(); ;} break; case 567: /* Line 1455 of yacc.c */ #line 2474 "c-parse.y" { stmt_count++; check_switch((yyvsp[(3) - (4)].u.expr)); (yyval.u.cstmt) = CAST(conditional_stmt, new_switch_stmt(pr, (yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.expr), NULL)); push_loop(CAST(statement, (yyval.u.cstmt))); ;} break; case 568: /* Line 1455 of yacc.c */ #line 2479 "c-parse.y" { (yyval.u.stmt) = CAST(statement, (yyvsp[(5) - (6)].u.cstmt)); (yyvsp[(5) - (6)].u.cstmt)->stmt = (yyvsp[(6) - (6)].u.stmt); pop_loop(); ;} break; case 569: /* Line 1455 of yacc.c */ #line 2483 "c-parse.y" { stmt_count++; (yyval.u.stmt) = CAST(statement, new_break_stmt(pr, (yyvsp[(1) - (2)].u.itoken).location)); check_break((yyval.u.stmt)); ;} break; case 570: /* Line 1455 of yacc.c */ #line 2488 "c-parse.y" { stmt_count++; (yyval.u.stmt) = CAST(statement, new_continue_stmt(pr, (yyvsp[(1) - (2)].u.itoken).location)); check_continue((yyval.u.stmt)); ;} break; case 571: /* Line 1455 of yacc.c */ #line 2493 "c-parse.y" { stmt_count++; (yyval.u.stmt) = make_void_return((yyvsp[(1) - (2)].u.itoken).location); ;} break; case 572: /* Line 1455 of yacc.c */ #line 2496 "c-parse.y" { stmt_count++; (yyval.u.stmt) = make_return((yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(2) - (3)].u.expr)); ;} break; case 573: /* Line 1455 of yacc.c */ #line 2499 "c-parse.y" { stmt_count++; (yyval.u.stmt) = CAST(statement, new_asm_stmt(pr, (yyvsp[(1) - (6)].u.itoken).location, (yyvsp[(4) - (6)].u.expr), NULL, NULL, NULL, (yyvsp[(2) - (6)].u.telement))); ;} break; case 574: /* Line 1455 of yacc.c */ #line 2504 "c-parse.y" { stmt_count++; (yyval.u.stmt) = CAST(statement, new_asm_stmt(pr, (yyvsp[(1) - (8)].u.itoken).location, (yyvsp[(4) - (8)].u.expr), (yyvsp[(6) - (8)].u.asm_operand), NULL, NULL, (yyvsp[(2) - (8)].u.telement))); ;} break; case 575: /* Line 1455 of yacc.c */ #line 2509 "c-parse.y" { stmt_count++; (yyval.u.stmt) = CAST(statement, new_asm_stmt(pr, (yyvsp[(1) - (10)].u.itoken).location, (yyvsp[(4) - (10)].u.expr), (yyvsp[(6) - (10)].u.asm_operand), (yyvsp[(8) - (10)].u.asm_operand), NULL, (yyvsp[(2) - (10)].u.telement))); ;} break; case 576: /* Line 1455 of yacc.c */ #line 2514 "c-parse.y" { stmt_count++; (yyval.u.stmt) = CAST(statement, new_asm_stmt(pr, (yyvsp[(1) - (12)].u.itoken).location, (yyvsp[(4) - (12)].u.expr), (yyvsp[(6) - (12)].u.asm_operand), (yyvsp[(8) - (12)].u.asm_operand), (yyvsp[(10) - (12)].u.string), (yyvsp[(2) - (12)].u.telement))); ;} break; case 577: /* Line 1455 of yacc.c */ #line 2517 "c-parse.y" { stmt_count++; (yyval.u.stmt) = CAST(statement, new_goto_stmt(pr, (yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(2) - (3)].u.id_label))); use_label((yyvsp[(2) - (3)].u.id_label)); ;} break; case 578: /* Line 1455 of yacc.c */ #line 2522 "c-parse.y" { if (pedantic) pedwarn("ANSI C forbids `goto *expr;'"); fail_in_atomic("goto *"); stmt_count++; (yyval.u.stmt) = CAST(statement, new_computed_goto_stmt(pr, (yyvsp[(1) - (4)].u.itoken).location, (yyvsp[(3) - (4)].u.expr))); check_computed_goto((yyvsp[(3) - (4)].u.expr)); ;} break; case 580: /* Line 1455 of yacc.c */ #line 2529 "c-parse.y" { (yyval.u.stmt) = CAST(statement, new_empty_stmt(pr, (yyvsp[(1) - (1)].u.itoken).location)); ;} break; case 581: /* Line 1455 of yacc.c */ #line 2537 "c-parse.y" { (yyval.u.label) = CAST(label, new_case_label(pr, (yyvsp[(1) - (3)].u.itoken).location, (yyvsp[(2) - (3)].u.expr), NULL)); check_case((yyval.u.label)); ;} break; case 582: /* Line 1455 of yacc.c */ #line 2540 "c-parse.y" { (yyval.u.label) = CAST(label, new_case_label(pr, (yyvsp[(1) - (5)].u.itoken).location, (yyvsp[(2) - (5)].u.expr), (yyvsp[(4) - (5)].u.expr))); check_case((yyval.u.label)); ;} break; case 583: /* Line 1455 of yacc.c */ #line 2543 "c-parse.y" { (yyval.u.label) = CAST(label, new_default_label(pr, (yyvsp[(1) - (2)].u.itoken).location)); check_default((yyval.u.label)); ;} break; case 584: /* Line 1455 of yacc.c */ #line 2546 "c-parse.y" { (yyval.u.label) = CAST(label, (yyvsp[(1) - (2)].u.id_label)); define_label((yyvsp[(1) - (2)].u.id_label)); ;} break; case 585: /* Line 1455 of yacc.c */ #line 2554 "c-parse.y" { (yyval.u.telement) = NULL; ;} break; case 587: /* Line 1455 of yacc.c */ #line 2560 "c-parse.y" { (yyval.u.expr) = NULL; ;} break; case 589: /* Line 1455 of yacc.c */ #line 2568 "c-parse.y" { (yyval.u.asm_operand) = NULL; ;} break; case 592: /* Line 1455 of yacc.c */ #line 2575 "c-parse.y" { (yyval.u.asm_operand) = asm_operand_chain((yyvsp[(1) - (3)].u.asm_operand), (yyvsp[(3) - (3)].u.asm_operand)); ;} break; case 593: /* Line 1455 of yacc.c */ #line 2580 "c-parse.y" { (yyval.u.asm_operand) = new_asm_operand(pr, (yyvsp[(1) - (4)].u.string)->location, NULL, (yyvsp[(1) - (4)].u.string), (yyvsp[(3) - (4)].u.expr)); ;} break; case 594: /* Line 1455 of yacc.c */ #line 2582 "c-parse.y" { (yyval.u.asm_operand) = new_asm_operand(pr, (yyvsp[(1) - (7)].u.itoken).location, (yyvsp[(2) - (7)].u.word), (yyvsp[(4) - (7)].u.string), (yyvsp[(6) - (7)].u.expr)); ;} break; case 595: /* Line 1455 of yacc.c */ #line 2587 "c-parse.y" { (yyval.u.string) = (yyvsp[(1) - (1)].u.string); ;} break; case 596: /* Line 1455 of yacc.c */ #line 2589 "c-parse.y" { (yyval.u.string) = string_chain((yyvsp[(1) - (3)].u.string), (yyvsp[(3) - (3)].u.string)); ;} break; case 597: /* Line 1455 of yacc.c */ #line 2595 "c-parse.y" { pushlevel(TRUE); ;} break; case 598: /* Line 1455 of yacc.c */ #line 2597 "c-parse.y" { (yyval.u.decl) = (yyvsp[(2) - (2)].u.decl); /* poplevel() is done when building the declarator */ ;} break; case 599: /* Line 1455 of yacc.c */ #line 2603 "c-parse.y" { (yyval.u.decl) = (yyvsp[(1) - (2)].u.decl); ;} break; case 600: /* Line 1455 of yacc.c */ #line 2605 "c-parse.y" { if (pedantic) pedwarn("ANSI C forbids forward parameter declarations"); allow_parameter_redeclaration((yyvsp[(1) - (2)].u.decl), TRUE); ;} break; case 601: /* Line 1455 of yacc.c */ #line 2610 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(1) - (4)].u.decl), (yyvsp[(4) - (4)].u.decl)); ;} break; case 602: /* Line 1455 of yacc.c */ #line 2612 "c-parse.y" { (yyval.u.decl) = make_error_decl(); ;} break; case 603: /* Line 1455 of yacc.c */ #line 2618 "c-parse.y" { (yyval.u.decl) = NULL; ;} break; case 604: /* Line 1455 of yacc.c */ #line 2620 "c-parse.y" { (yyval.u.decl) = make_error_decl(); /* Gcc used to allow this as an extension. However, it does not work for all targets, and thus has been disabled. Also, since func (...) and func () are indistinguishable, it caused problems with the code in expand_builtin which tries to verify that BUILT_IN_NEXT_ARG is being used correctly. */ error("ANSI C requires a named argument before `...'"); ;} break; case 605: /* Line 1455 of yacc.c */ #line 2630 "c-parse.y" { (yyval.u.decl) = (yyvsp[(1) - (1)].u.decl); ;} break; case 606: /* Line 1455 of yacc.c */ #line 2632 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(1) - (3)].u.decl), CAST(declaration, new_ellipsis_decl(pr, (yyvsp[(3) - (3)].u.itoken).location))); ;} break; case 608: /* Line 1455 of yacc.c */ #line 2638 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(1) - (3)].u.decl), (yyvsp[(3) - (3)].u.decl)); ;} break; case 609: /* Line 1455 of yacc.c */ #line 2645 "c-parse.y" { (yyval.u.decl) = declare_parameter((yyvsp[(3) - (4)].u.declarator), (yyvsp[(1) - (4)].u.telement), (yyvsp[(4) - (4)].u.attribute)); ;} break; case 610: /* Line 1455 of yacc.c */ #line 2647 "c-parse.y" { (yyval.u.decl) = declare_parameter((yyvsp[(3) - (4)].u.declarator), (yyvsp[(1) - (4)].u.telement), (yyvsp[(4) - (4)].u.attribute)); ;} break; case 611: /* Line 1455 of yacc.c */ #line 2649 "c-parse.y" { (yyval.u.decl) = declare_parameter((yyvsp[(3) - (3)].u.declarator), (yyvsp[(1) - (3)].u.telement), NULL); ;} break; case 612: /* Line 1455 of yacc.c */ #line 2651 "c-parse.y" { (yyval.u.decl) = declare_parameter((yyvsp[(3) - (4)].u.declarator), (yyvsp[(1) - (4)].u.telement), (yyvsp[(4) - (4)].u.attribute)); ;} break; case 613: /* Line 1455 of yacc.c */ #line 2653 "c-parse.y" { (yyval.u.decl) = declare_parameter((yyvsp[(3) - (4)].u.declarator), (yyvsp[(1) - (4)].u.telement), (yyvsp[(4) - (4)].u.attribute)); ;} break; case 614: /* Line 1455 of yacc.c */ #line 2655 "c-parse.y" { (yyval.u.decl) = declare_parameter((yyvsp[(3) - (3)].u.declarator), (yyvsp[(1) - (3)].u.telement), NULL); ;} break; case 615: /* Line 1455 of yacc.c */ #line 2657 "c-parse.y" { (yyval.u.decl) = declare_parameter((yyvsp[(3) - (4)].u.declarator), (yyvsp[(1) - (4)].u.telement), (yyvsp[(4) - (4)].u.attribute)); ;} break; case 616: /* Line 1455 of yacc.c */ #line 2660 "c-parse.y" { pending_xref_error(); ;} break; case 617: /* Line 1455 of yacc.c */ #line 2666 "c-parse.y" { pushlevel(TRUE); ;} break; case 618: /* Line 1455 of yacc.c */ #line 2668 "c-parse.y" { (yyval.u.decl) = (yyvsp[(2) - (2)].u.decl); /* poplevel is done when building the declarator */ ;} break; case 620: /* Line 1455 of yacc.c */ #line 2674 "c-parse.y" { (yyval.u.decl) = (yyvsp[(1) - (2)].u.decl); ;} break; case 621: /* Line 1455 of yacc.c */ #line 2680 "c-parse.y" { (yyval.u.decl) = (yyvsp[(1) - (1)].u.decl); ;} break; case 622: /* Line 1455 of yacc.c */ #line 2682 "c-parse.y" { (yyval.u.decl) = declaration_chain((yyvsp[(1) - (3)].u.decl), (yyvsp[(3) - (3)].u.decl)); ;} break; case 623: /* Line 1455 of yacc.c */ #line 2686 "c-parse.y" { (yyval.u.decl) = declare_old_parameter((yyvsp[(1) - (1)].idtoken).location, (yyvsp[(1) - (1)].idtoken).id); ;} break; case 624: /* Line 1455 of yacc.c */ #line 2691 "c-parse.y" { (yyval.u.id_label) = (yyvsp[(1) - (1)].u.id_label); declare_label((yyvsp[(1) - (1)].u.id_label)); ;} break; case 625: /* Line 1455 of yacc.c */ #line 2693 "c-parse.y" { (yyval.u.id_label) = id_label_chain((yyvsp[(3) - (3)].u.id_label), (yyvsp[(1) - (3)].u.id_label)); declare_label((yyvsp[(3) - (3)].u.id_label)); ;} break; case 626: /* Line 1455 of yacc.c */ #line 2699 "c-parse.y" { (yyval.u.telement) = NULL; ;} break; case 627: /* Line 1455 of yacc.c */ #line 2700 "c-parse.y" { (yyval.u.telement) = (yyvsp[(1) - (1)].u.telement); ;} break; case 628: /* Line 1455 of yacc.c */ #line 2705 "c-parse.y" { (yyval.u.itoken).location = (yyvsp[(1) - (1)].u.itoken).location; (yyval.u.itoken).i = pedantic; pedantic = 0; ;} break; case 629: /* Line 1455 of yacc.c */ #line 2712 "c-parse.y" { (yyval.u.telement) = CAST(type_element, new_rid(pr, (yyvsp[(1) - (1)].u.itoken).location, (yyvsp[(1) - (1)].u.itoken).i)); ;} break; case 630: /* Line 1455 of yacc.c */ #line 2714 "c-parse.y" { (yyval.u.telement) = CAST(type_element, new_rid(pr, (yyvsp[(1) - (1)].u.itoken).location, RID_DEFAULT)); ;} break; case 631: /* Line 1455 of yacc.c */ #line 2719 "c-parse.y" { (yyval.u.telement) = CAST(type_element, new_qualifier(pr, (yyvsp[(1) - (1)].u.itoken).location, (yyvsp[(1) - (1)].u.itoken).i)); ;} break; case 632: /* Line 1455 of yacc.c */ #line 2724 "c-parse.y" { (yyval.u.telement) = CAST(type_element, new_qualifier(pr, (yyvsp[(1) - (1)].u.itoken).location, (yyvsp[(1) - (1)].u.itoken).i)); ;} break; case 633: /* Line 1455 of yacc.c */ #line 2729 "c-parse.y" { (yyval.u.telement) = CAST(type_element, new_rid(pr, (yyvsp[(1) - (1)].u.itoken).location, (yyvsp[(1) - (1)].u.itoken).i)); ;} break; /* Line 1455 of yacc.c */ #line 7376 "c-parse.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (yymsg); } else { yyerror (YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined(yyoverflow) || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } /* Line 1675 of yacc.c */ #line 2733 "c-parse.y" nescc-1.3.4/src/c-parse.tab.h000066400000000000000000000066301177770303300156660ustar00rootroot00000000000000 /* A Bison parser, made by GNU Bison 2.4.1. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This program 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 3 of the License, or (at your option) any later version. This program 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 this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { IDENTIFIER = 258, TYPENAME = 259, COMPONENTREF = 260, SCSPEC = 261, TYPESPEC = 262, TYPE_QUAL = 263, FN_QUAL = 264, CONSTANT = 265, STRING = 266, MAGIC_STRING = 267, ELLIPSIS = 268, SIZEOF = 269, ENUM = 270, STRUCT = 271, UNION = 272, IF = 273, ELSE = 274, WHILE = 275, DO = 276, FOR = 277, SWITCH = 278, CASE = 279, DEFAULT = 280, BREAK = 281, CONTINUE = 282, RETURN = 283, GOTO = 284, ASM_KEYWORD = 285, TYPEOF = 286, ALIGNOF = 287, ATTRIBUTE = 288, EXTENSION = 289, LABEL = 290, REALPART = 291, IMAGPART = 292, VA_ARG = 293, OFFSETOF = 294, ASSIGN = 295, OROR = 296, ANDAND = 297, EQCOMPARE = 298, ARITHCOMPARE = 299, RSHIFT = 300, LSHIFT = 301, MINUSMINUS = 302, PLUSPLUS = 303, POINTSAT = 304, DISPATCH_C = 305, DISPATCH_NESC = 306, DISPATCH_PARM = 307, DISPATCH_TYPE = 308, ATOMIC = 309, USES = 310, INTERFACE = 311, COMPONENTS = 312, PROVIDES = 313, MODULE = 314, INCLUDES = 315, CONFIGURATION = 316, AS = 317, TASTNIOP = 318, IMPLEMENTATION = 319, CALL = 320, SIGNAL = 321, POST = 322, GENERIC = 323, NEW = 324, NX_STRUCT = 325, NX_UNION = 326, ABSTRACT = 327, COMPONENT = 328, EXTENDS = 329, TARGET_ATTRIBUTE0 = 330, TARGET_ATTRIBUTE1 = 331, TARGET_DEF = 332 }; #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif nescc-1.3.4/src/c-parse.y000066400000000000000000002310131177770303300151350ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* This is a version of c-parse.y with two conflicts and supporting the gcc3 attribute syntax. It is a partial merge of the gcc 3 grammar */ /* This file defines the grammar of C */ /* To whomever it may concern: I have heard that such a thing was once written by AT&T, but I have never seen it. */ %pure_parser %expect 12 %{ #include #include #include #include "parser.h" #include "c-parse.h" #include "c-lex.h" #include "c-lex-int.h" #include "semantics.h" #include "expr.h" #include "stmt.h" #include "init.h" #include "nesc-semantics.h" #include "nesc-interface.h" #include "nesc-component.h" #include "nesc-configuration.h" #include "nesc-module.h" #include "nesc-env.h" #include "nesc-c.h" #include "nesc-attributes.h" #include "nesc-task.h" #include "nesc-cpp.h" #include "attributes.h" #include "machine.h" int yyparse(void) deletes; void yyerror(); /* Like YYERROR but do call yyerror. */ #define YYERROR1 { yyerror ("syntax error"); YYERROR; } /* Cause the `yydebug' variable to be defined. */ #define YYDEBUG 1 %} %start dispatch /* All identifiers that are not reserved words and are not declared typedefs in the current block */ %token IDENTIFIER /* All identifiers that are declared typedefs in the current block. In some contexts, they are treated just like IDENTIFIER, but they can also serve as typespecs in declarations. */ %token TYPENAME /* An identifier that is declared as a component reference in the current block, and which is going to be used to refer to a typedef from the component via the component-ref '.' identifier syntax (detected in the lexer) */ %token COMPONENTREF /* Reserved words that specify storage class. yylval contains an IDENTIFIER_NODE which indicates which one. */ %token SCSPEC /* Reserved words that specify type. yylval contains an IDENTIFIER_NODE which indicates which one. */ %token TYPESPEC /* Reserved words that qualify types/functions: "const" or "volatile", "deletes". yylval contains an IDENTIFIER_NODE which indicates which one. */ %token TYPE_QUAL FN_QUAL /* Character or numeric constants. yylval is the node for the constant. */ %token CONSTANT /* String constants in raw form. */ %token STRING MAGIC_STRING /* "...", used for functions with variable arglists. */ %token ELLIPSIS /* the reserved words */ /* SCO include files test "ASM", so use something else. */ %token SIZEOF ENUM STRUCT UNION IF ELSE WHILE DO FOR SWITCH CASE DEFAULT %token BREAK CONTINUE RETURN GOTO ASM_KEYWORD TYPEOF ALIGNOF %token ATTRIBUTE EXTENSION LABEL %token REALPART IMAGPART VA_ARG OFFSETOF /* Add precedence rules to solve dangling else s/r conflict */ %nonassoc IF %nonassoc ELSE /* Define the operator tokens and their precedences. The value is an integer because, if used, it is the tree code to use in the expression made from the operator. */ %right ASSIGN '=' %right '?' ':' %left OROR %left ANDAND %left '|' %left '^' %left '&' %left EQCOMPARE %left ARITHCOMPARE '<' '>' %left LSHIFT RSHIFT %left '+' '-' %left '*' '/' '%' %right PLUSPLUS MINUSMINUS %left POINTSAT '.' '(' '[' %type asm_operand asm_operands nonnull_asm_operands %type maybeasm %type maybe_attribute attributes attribute attribute_list %type nesc_attributes nattrib %type attrib target_attribute %type nastart %type CONSTANT %type datadecl datadecls datadef decl decls extdef extdefs fndef %type initdecls initdecls_ notype_initdecls notype_initdecls_ fndef2 %type nested_function notype_nested_function old_style_parm_decls %type initdcl component_decl_list component_decl_list2 component_decl %type components component_declarator enumerator enumlist %type components_notype component_notype_declarator %type parmlist parmlist_1 parmlist_2 parms parm %type parmlist_or_identifiers identifiers notype_initdcl %type parmlist_or_identifiers_1 old_parameter just_datadef %type declarator after_type_declarator notype_declarator %type absdcl absdcl1 absdcl1_noea absdcl1_ea direct_absdcl1 %type parm_declarator %type array_declarator fn_declarator array_or_fn_declarator %type absfn_declarator array_or_absfn_declarator %type cast_expr expr expr_no_commas exprlist init initlist_maybe_comma %type initlist1 initelt nonnull_exprlist primary string %type nonnull_exprlist_ initval restricted_expr %type designator_list designator %type unary_expr xexpr function_call %type generic_type typelist %type id_label maybe_label_decls label_decls label_decl %type identifiers_or_typenames %type identifier type_parm %type IDENTIFIER TYPENAME MAGIC_STRING COMPONENTREF %type if_prefix %type stmt_or_labels simple_if stmt_or_label %type unop extension '~' '!' compstmt_start '{' ';' %type sizeof alignof %type label %type stmts xstmts compstmt_or_error compstmt %type labeled_stmt stmt stmt_or_error atomic_stmt %type do_stmt_start %type asm_clobbers STRING %type declspecs_nosc_nots_nosa_noea %type declspecs_nosc_nots_nosa_ea %type declspecs_nosc_nots_sa_noea %type declspecs_nosc_nots_sa_ea %type declspecs_nosc_ts_nosa_noea %type declspecs_nosc_ts_nosa_ea %type declspecs_nosc_ts_sa_noea %type declspecs_nosc_ts_sa_ea %type declspecs_sc_nots_nosa_noea %type declspecs_sc_nots_nosa_ea %type declspecs_sc_nots_sa_noea %type declspecs_sc_nots_sa_ea %type declspecs_sc_ts_nosa_noea %type declspecs_sc_ts_nosa_ea %type declspecs_sc_ts_sa_noea %type declspecs_sc_ts_sa_ea %type declspecs_ts %type declspecs_nots %type declspecs_ts_nosa %type declspecs_nots_nosa %type declspecs_nosc_ts %type declspecs_nosc_nots %type declspecs_nosc %type declspecs %type scspec type_qual type_spec eattributes %type type_spec_attr type_spec_nonattr %type type_spec_nonreserved_nonattr type_spec_reserved_attr %type type_spec_reserved_nonattr %type structdef structuse %type maybe_type_qual maybe_type_quals_attrs fn_qual fn_quals %type typename %type idword any_word tag %type fieldlist %type structkind /* the dispatching (fake) tokens */ %token DISPATCH_C DISPATCH_NESC DISPATCH_PARM DISPATCH_TYPE /* nesC reserved words */ %token ATOMIC USES INTERFACE COMPONENTS PROVIDES MODULE %token INCLUDES CONFIGURATION AS TASTNIOP IMPLEMENTATION CALL %token SIGNAL POST GENERIC NEW NX_STRUCT NX_UNION /* words reserved for nesC's future. Some may never be used... */ %token ABSTRACT COMPONENT EXTENDS %token TARGET_ATTRIBUTE0 TARGET_ATTRIBUTE1 TARGET_DEF %type callkind %type datadef_list %type parameters parameters1 %type requires provides requires_or_provides requires_or_provides_list %type requires_or_provides_list_ %type parameterised_interface_list parameterised_interface %type parameterised_interfaces %type interface_parms interface_parm_list interface_parm %type component_parms %type template_parms template_parmlist template_parm %type target_def %type interface_ref interface_type %type component_ref component_ref2 component_list cuses %type connection %type configuration_decl configuration_decls %type endpoint %type parameterised_identifier %type iconfiguration imodule %type generic %type generic_arglist generic_arg generic_args %{ /* Region in which to allocate parse structures. Idea: the AST user can set this to different regions at appropriate junctures depending on what's being done with the AST */ region parse_region; /* We'll see this a LOT below */ #define pr parse_region /* Number of statements (loosely speaking) and compound statements seen so far. */ static int stmt_count; static int compstmt_count; #ifdef RC_ADJUST static size_t rc_adjust_yystype(void *x, int by) { struct yystype *p = x; RC_ADJUST_PREAMBLE; RC_ADJUST(p->u.ptr, by); RC_ADJUST(p->idtoken.location.filename, by); RC_ADJUST(p->idtoken.id.data, by); RC_ADJUST(p->idtoken.decl, by); return sizeof *p; } static void rc_update_yystype(struct yystype *old, struct yystype *new) { regionid base = regionidof(old); RC_UPDATE(base, old->u.ptr, new->u.ptr); RC_UPDATE(base, old->idtoken.location.filename, new->idtoken.location.filename); RC_UPDATE(base, old->idtoken.id.data, new->idtoken.id.data); RC_UPDATE(base, old->idtoken.decl, new->idtoken.decl); } #endif /* A stack of declspecs and attributes for use during parsing */ typedef struct spec_stack *spec_stack; struct spec_stack { type_element parentptr declspecs; attribute parentptr attributes; spec_stack sameregion next; }; struct parse_state { /* Stack of saved values of current_declspecs and prefix_attributes. */ /* In an ideal world, we would be able to eliminate most rc ops for declspec_stack and ds_region assignments. Seems tricky though. */ spec_stack declspec_stack; region ds_region; /* List of types and structure classes of the current declaration. */ type_element declspecs; attribute attributes; /* >0 if currently parsing an expression that will not be evaluated (argument to alignof, sizeof. Currently not typeof though that could be considered a bug) */ int unevaluated_expression; } pstate; bool unevaluated_expression(void) { return pstate.unevaluated_expression != 0; } /* Pop top entry of declspec_stack back into current_declspecs, prefix_attributes */ static void pop_declspec_stack(void) deletes { pstate.declspecs = pstate.declspec_stack->declspecs; pstate.attributes = pstate.declspec_stack->attributes; pstate.declspec_stack = pstate.declspec_stack->next; } static void push_declspec_stack(void) { spec_stack news; news = ralloc(pstate.ds_region, struct spec_stack); news->declspecs = pstate.declspecs; news->attributes = pstate.attributes; news->next = pstate.declspec_stack; pstate.declspec_stack = news; } static node parse_tree; node parse(void) deletes { int result, old_errorcount = errorcount; struct parse_state old_pstate = pstate; pstate.declspecs = NULL; pstate.attributes = NULL; pstate.unevaluated_expression = 0; pstate.declspec_stack = NULL; pstate.ds_region = newsubregion(parse_region); parse_tree = NULL; result = yyparse(); if (result) parse_tree = NULL; deleteregion_ptr(&pstate.ds_region); if (result != 0 && errorcount == old_errorcount) fprintf(stderr, "Errors detected in input file (your bison.simple is out of date)"); pstate = old_pstate; return parse_tree; } static void set_nesc_ast(void *tree) { nesc_declaration cdecl = current.container; nesc_decl nd = CAST(nesc_decl, tree); nd->cdecl = cdecl; cdecl->ast = nd; } static void set_nesc_parse_tree(void *tree) { set_nesc_ast(tree); parse_tree = CAST(node, tree); } static void set_nesc_impl(implementation impl) { nesc_declaration cdecl = current.container; CAST(component, cdecl->ast)->implementation = impl; parse_tree = CAST(node, cdecl->ast); } void refuse_asm(asm_stmt s) { if (s) error_with_location(s->location, "unexpected asm statement"); } /* Merge the attributes in front of a declaration (but which aren't part of the declspecs) with the attributes after the declaration. We're pretending they all came after */ attribute prefix_attr(attribute post_attr) { return attribute_chain(pstate.attributes, post_attr); } /* Simple build functions */ declaration make_data_decl(type_element modifiers, declaration decls) { location l = modifiers ? modifiers->location : decls->location; data_decl dd = new_data_decl(parse_region, l, modifiers, decls); pop_declspec_stack(); if (decls == NULL && current.spec_section != spec_normal) error("provides/uses must be followed by a command, event or interface"); return CAST(declaration, dd); } declaration make_error_decl(void) { return new_error_decl(pr, dummy_location); } declaration make_extension_decl(int old_pedantic, location l, declaration d) { pedantic = old_pedantic; return CAST(declaration, new_extension_decl(pr, l, d)); } word make_cword(location l, const char *s) { return new_word(pr, l, str2cstring(pr, s)); } declarator make_qualified_declarator(location l, declarator d, type_element quals) { if (quals) return CAST(declarator, new_qualified_declarator(pr, l, d, quals)); else return d; } declarator make_pointer_declarator(location l, declarator d, type_element quals) { d = make_qualified_declarator(l, d, quals); return CAST(declarator, new_pointer_declarator(pr, l, d)); } declarator make_identifier_declarator(location l, cstring id) { return CAST(declarator, new_identifier_declarator(pr, l, id)); } statement make_error_stmt(void) { return new_error_stmt(pr, dummy_location); } /* Tell yyparse how to print a token's value, if yydebug is set. */ #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) void yyprint(); %} %% dispatch: DISPATCH_NESC interface { } | DISPATCH_NESC component { } | DISPATCH_C extdefs { declaration cdecls = declaration_reverse($2); parse_tree = CAST(node, cdecls); } | DISPATCH_C { parse_tree = NULL; } | DISPATCH_PARM parm { parse_tree = CAST(node, $2); } | DISPATCH_PARM error { parse_tree = CAST(node, make_error_decl()); } | DISPATCH_TYPE typename { parse_tree = CAST(node, $2); } | DISPATCH_TYPE error { parse_tree = NULL; } ; ncheader: { end_macro_saving(); } includes_list | extdefs { end_macro_saving(); add_cdecls(declaration_reverse($1)); } ; includes_list: includes_list includes | /* empty */ ; includes: INCLUDES include_list ';' { } ; include_list: identifier { require_c($1.location, $1.id.data); } | include_list ',' identifier { require_c($3.location, $3.id.data); } ; interface: ncheader INTERFACE idword { start_nesc_entity(l_interface, $3); } interface_parms nesc_attributes { handle_nescdecl_attributes($6, current.container); } '{' datadef_list '}' { interface intf = new_interface(pr, $2.location, $3, $6, declaration_reverse($9)); set_nesc_parse_tree(intf); if (intf->cdecl->abstract) poplevel(); } ; interface_parms: /* empty */ { $$ = NULL; } | '<' interface_parm_list '>' { nesc_declaration intf = current.container; intf->parameters = $2; intf->parameter_env = current.env; $$ = $2; /* Template intfs need a new level for the actual intf */ pushlevel(FALSE); /* The interface env counts as global */ current.env->global_level = TRUE; intf->env = current.env; intf->abstract = TRUE; } ; interface_parm_list: interface_parm | interface_parm_list ',' interface_parm { $$ = declaration_chain($1, $3); } ; interface_parm: type_parm nesc_attributes { $$ = declare_type_parameter($1.location, $1.id, $2, NULL); } ; type_parm: IDENTIFIER { $$ = $1; } ; datadef_list: datadef_list just_datadef { $$ = declaration_chain($2, $1); } | just_datadef ; parameters: '[' { pushlevel(TRUE); } parameters1 { /* poplevel done in users of parameters */ $$ = $3; } ; parameters1: parms ']' { $$ = declaration_reverse($1); check_interface_parameter_types($$); } | error ']' { $$ = make_error_decl(); } ; component: ncheader module | ncheader configuration | ncheader binary_component ; module: generic MODULE idword { start_nesc_entity(l_component, $3); current.container->abstract = $1; } component_parms nesc_attributes { handle_nescdecl_attributes($6, current.container); } '{' requires_or_provides_list '}' imodule { declaration intfs = declaration_chain(declaration_reverse($9), all_tasks); set_nesc_parse_tree(new_component(pr, $2.location, $3, $6, $1, $5, intfs, $11)); } ; configuration: generic CONFIGURATION idword { start_nesc_entity(l_component, $3); current.container->abstract = $1; current.container->configuration = TRUE; } component_parms nesc_attributes { handle_nescdecl_attributes($6, current.container); } '{' requires_or_provides_list '}' { set_nesc_ast(new_component(pr, $2.location, $3, $6, $1, $5, declaration_reverse($9), NULL)); } iconfiguration { set_nesc_impl($12); } ; binary_component: COMPONENT idword { start_nesc_entity(l_component, $2); } nesc_attributes { handle_nescdecl_attributes($4, current.container); } '{' requires_or_provides_list '}' { binary_component dummy = new_binary_component(pr, $1.location, start_implementation()); component c = new_component(pr, $1.location, $2, $4, FALSE, NULL, declaration_reverse($7), CAST(implementation, dummy)); set_nesc_parse_tree(c); } ; generic: GENERIC { $$ = TRUE; } | /* empty */ { $$ = FALSE; } ; component_parms: /* empty */ { if (current.container->abstract) error("generic components require a parameter list"); /* We don't create the extra environment level for this generic component as nothing actually requires its existence */ $$ = NULL; } | '(' template_parms ')' { nesc_declaration comp = current.container; if (!comp->abstract) error("only generic components can have a parameter list"); comp->parameters = $2; comp->parameter_env = current.env; $$ = $2; /* generic components need a new level for the specification */ pushlevel(FALSE); current.env->global_level = TRUE; comp->env = current.env; } ; template_parms: /* empty */ { $$ = NULL; } | template_parmlist ; template_parmlist: template_parm | template_parmlist ',' template_parm { $$ = declaration_chain($1, $3); } ; /* A declaration of a template parameter, i.e., a regular parameter-like declaration (name required). The 'typedef t' syntax for declaring a type argument is detected inside declare_template_parameter */ template_parm: declspecs_ts xreferror after_type_declarator maybe_attribute { $$ = declare_template_parameter($3, $1, $4); } | declspecs_ts xreferror notype_declarator maybe_attribute { $$ = declare_template_parameter($3, $1, $4); } | declspecs_nots xreferror notype_declarator maybe_attribute { $$ = declare_template_parameter($3, $1, $4); } | declspecs_ts xreferror { $$ = declare_template_parameter(NULL, $1, NULL); } ; requires_or_provides_list: requires_or_provides_list_ { current.spec_section = spec_normal; } ; requires_or_provides_list_: requires_or_provides_list_ requires_or_provides { $$ = declaration_chain($2, $1); } | /* empty */ { $$ = NULL; } ; requires_or_provides: requires | provides | { current.spec_section = spec_normal; } just_datadef { $$ = $2; } ; requires: USES { current.spec_section = spec_uses; } parameterised_interface_list { $$ = CAST(declaration, new_rp_interface(pr, $1.location, TRUE, declaration_reverse($3))); } ; provides: PROVIDES { current.spec_section = spec_provides; } parameterised_interface_list { $$ = CAST(declaration, new_rp_interface(pr, $1.location, FALSE, declaration_reverse($3))); } ; parameterised_interface_list: parameterised_interface | '{' parameterised_interfaces '}' { $$ = $2; } ; parameterised_interfaces: parameterised_interfaces parameterised_interface { $$ = declaration_chain($2, $1); } | parameterised_interface ; parameterised_interface: just_datadef | interface_ref nesc_attributes ';' { declare_interface_ref($1, NULL, current.env, $2); $$ = CAST(declaration, $1); } | interface_ref parameters nesc_attributes ';' { $1->gparms = $2; poplevel(); declare_interface_ref($1, $2, current.env, $3); $$ = CAST(declaration, $1); } ; interface_ref: interface_type | interface_type AS idword { $$ = $1; $$->word2 = $3; } ; interface_type: INTERFACE idword { preload(l_interface, $1.location, $2->cstring.data); $$ = new_interface_ref(pr, $1.location, $2, NULL, NULL, NULL, NULL, NULL); } | INTERFACE idword { preload(l_interface, $1.location, $2->cstring.data); } '<' typelist '>' { $$ = new_interface_ref(pr, $1.location, $2, $5, NULL, NULL, NULL, NULL); } ; typelist: generic_type | typelist ',' generic_type { $$ = expression_chain($1, $3); } ; iconfiguration: IMPLEMENTATION { $$ = start_implementation(); } '{' configuration_decls '}' { $$ = CAST(implementation, new_configuration(pr, $1.location, $2, declaration_reverse($4))); } ; cuses: COMPONENTS component_list ';' { $$ = $2; } ; component_list: component_list ',' component_ref { $$ = component_ref_chain($3, $1); } | component_ref ; component_ref: component_ref2 { $$ = require_component($1, NULL); } | component_ref2 AS idword { $$ = require_component($1, $3); } ; component_ref2: idword { $$ = new_component_ref(pr, $1->location, $1, NULL, FALSE, NULL); } | NEW idword '(' generic_args ')' { $$ = new_component_ref(pr, $1.location, $2, NULL, TRUE, $4); } ; generic_args: /* empty */ { $$ = NULL; } | generic_arglist ; generic_arglist: generic_arg | generic_arglist ',' generic_arg { $$ = expression_chain($1, $3); } ; generic_arg: expr_no_commas { $$ = $1; $$->type = default_conversion_for_assignment($$); } | generic_type ; generic_type: typename { $$ = make_type_argument($1); } ; configuration_decls: configuration_decls configuration_decl { $$ = declaration_chain($2, $1); } | /* empty */ { $$ = NULL; } ; configuration_decl: connection { $$ = CAST(declaration, $1); } | just_datadef | cuses { $$ = CAST(declaration, $1); } ; connection: endpoint '=' endpoint ';' { $$ = CAST(connection, new_eq_connection(pr, $2.location, $1, $3)); } | endpoint POINTSAT endpoint ';' { $$ = CAST(connection, new_rp_connection(pr, $2.location, $3, $1)); } | endpoint TASTNIOP endpoint ';' { $$ = CAST(connection, new_rp_connection(pr, $2.location, $1, $3)); } ; endpoint: endpoint '.' parameterised_identifier { $$ = $1; $$->ids = parameterised_identifier_chain($$->ids, $3); } | parameterised_identifier { $$ = new_endpoint(parse_region, $1->location, $1); } ; parameterised_identifier: idword { $$ = new_parameterised_identifier(pr, $1->location, $1, NULL); } | idword '[' nonnull_exprlist ']' { $$ = new_parameterised_identifier(pr, $1->location, $1, $3); } ; imodule: IMPLEMENTATION { $$ = start_implementation(); all_tasks = NULL; } '{' extdefs '}' { $$ = CAST(implementation, new_module(pr, $1.location, $2, declaration_reverse($4))); } ; /* the reason for the strange actions in this rule is so that notype_initdecls when reached via datadef can find a valid list of type and sc specs in $0. */ extdefs: { $$ = NULL; } extdef { $$ = $2; } | extdefs { $$ = NULL; } extdef { $$ = declaration_chain($3, $1); } ; extdef: fndef | datadef | ASM_KEYWORD '(' expr ')' ';' { $$ = CAST(declaration, new_asm_decl (pr, $1.location, new_asm_stmt(pr, $1.location, $3, NULL, NULL, NULL, NULL))); } | extension extdef { $$ = make_extension_decl($1.i, $1.location, $2); } ; datadef: setspecs notype_initdecls ';' { if (pedantic) error("ANSI C forbids data definition with no type or storage class"); else if (!flag_traditional) warning("data definition has no type or storage class"); $$ = make_data_decl(NULL, $2); } | just_datadef ; just_datadef: declspecs_nots setspecs notype_initdecls ';' { $$ = make_data_decl($1, $3); } | declspecs_ts setspecs initdecls ';' { $$ = make_data_decl($1, $3); } | declspecs setspecs ';' { shadow_tag($1); $$ = make_data_decl($1, NULL); } | error ';' { $$ = make_error_decl(); } | error '}' { $$ = make_error_decl(); } | ';' { if (pedantic) pedwarn("ANSI C does not allow extra `;' outside of a function"); $$ = NULL; } | target_def ; target_def: TARGET_DEF identifier '=' expr ';' { $$ = target->keilc_definition($1.location, $1.id, $2.id, $4); } ; fndef: declspecs_ts setspecs declarator fndef2 { $$ = $4; } | declspecs_nots setspecs notype_declarator fndef2 { $$ = $4; } | setspecs notype_declarator fndef2 { $$ = $3; } ; fndef2: maybeasm maybe_attribute { /* maybeasm is only here to avoid a s/r conflict */ refuse_asm($1); /* $0 refers to the declarator that precedes fndef2 in fndef (we can't just save it in an action, as that causes s/r and r/r conflicts) */ if (!start_function(pstate.declspecs, $0, $2, 0)) YYERROR1; } old_style_parm_decls { store_parm_decls(declaration_reverse($4)); } compstmt_or_error { $$ = finish_function($6); pop_declspec_stack(); } ; identifier: IDENTIFIER | TYPENAME ; id_label: identifier { $$ = new_id_label(pr, $1.location, $1.id); } ; idword: identifier { $$ = new_word(pr, $1.location, $1.id); } ; unop: '&' { $$ = $1; $$.i = kind_address_of; } | '-' { $$ = $1; $$.i = kind_unary_minus; } | '+' { $$ = $1; $$.i = kind_unary_plus; } | PLUSPLUS { $$ = $1; $$.i = kind_preincrement; } | MINUSMINUS { $$ = $1; $$.i = kind_predecrement; } | '~' { $$ = $1; $$.i = kind_bitnot; } | '!' { $$ = $1; $$.i = kind_not; } | REALPART { $$ = $1; $$.i = kind_realpart; } | IMAGPART { $$ = $1; $$.i = kind_imagpart; } ; expr: nonnull_exprlist { if ($1->next) $$ = make_comma($1->location, $1); else $$ = $1; } ; exprlist: /* empty */ { $$ = NULL; } | nonnull_exprlist ; nonnull_exprlist: nonnull_exprlist_ { $$ = expression_reverse($1); } ; nonnull_exprlist_: expr_no_commas { $$ = $1; } | nonnull_exprlist_ ',' expr_no_commas { $$ = expression_chain($3, $1); } ; callkind: CALL { $$.i = command_call; } | SIGNAL { $$.i = event_signal; } | POST { $$.i = post_task; } ; unary_expr: primary | callkind function_call { function_call fc = CAST(function_call, $2); type calltype = fc->arg1->type; bool noerror = fc->type != error_type; $$ = $2; fc->call_kind = $1.i; switch ($1.i) { case command_call: if (noerror && !type_command(calltype)) error("only commands can be called"); break; case event_signal: if (noerror && !type_event(calltype)) error("only events can be signaled"); break; case post_task: fc->type = unsigned_char_type; if (noerror) { if (!type_task(calltype)) error("only tasks can be posted"); else if (flag_use_scheduler) /* If requested, replace post/task by references to an interface */ handle_post(fc); } break; } } | '*' cast_expr { $$ = make_dereference($1.location, $2); } /* __extension__ turns off -pedantic for following primary. */ | extension cast_expr { $$ = make_extension_expr($1.location, $2); pedantic = $1.i; } | unop cast_expr { $$ = make_unary($1.location, $1.i, $2); #if 0 overflow_warning($$); #endif } /* Refer to the address of a label as a pointer. */ | ANDAND id_label { $$ = CAST(expression, make_label_address($1.location, $2)); use_label($2); } | sizeof unary_expr { #if 0 if (TREE_CODE ($2) == COMPONENT_REF && DECL_C_BIT_FIELD (TREE_OPERAND ($2, 1))) error("`sizeof' applied to a bit-field"); $$ = c_sizeof (TREE_TYPE ($2)); #endif $$ = make_sizeof_expr($1.location, $2); pstate.unevaluated_expression--; } | sizeof '(' typename ')' { $$ = make_sizeof_type($1.location, $3); pstate.unevaluated_expression--; } | alignof unary_expr { $$ = make_alignof_expr($1.location, $2); pstate.unevaluated_expression--; } | alignof '(' typename ')' { $$ = make_alignof_type($1.location, $3); pstate.unevaluated_expression--; } ; sizeof: SIZEOF { pstate.unevaluated_expression++; $$ = $1; } ; alignof: ALIGNOF { pstate.unevaluated_expression++; $$ = $1; } ; cast_expr: unary_expr | '(' typename ')' cast_expr { $$ = make_cast($1.location, $2, $4); } | '(' typename ')' '{' { start_init(NULL, NULL); really_start_incremental_init($2->type); } initlist_maybe_comma '}' { expression constructor = make_init_list($4.location, $6); finish_init(); if (pedantic) pedwarn("ANSI C forbids constructor expressions"); $$ = make_cast_list($1.location, $2, constructor); } ; expr_no_commas: cast_expr | expr_no_commas '+' expr_no_commas { $$ = make_binary($2.location, kind_plus, $1, $3); } | expr_no_commas '-' expr_no_commas { $$ = make_binary($2.location, kind_minus, $1, $3); } | expr_no_commas '*' expr_no_commas { $$ = make_binary($2.location, kind_times, $1, $3); } | expr_no_commas '/' expr_no_commas { $$ = make_binary($2.location, kind_divide, $1, $3); } | expr_no_commas '%' expr_no_commas { $$ = make_binary($2.location, kind_modulo, $1, $3); } | expr_no_commas LSHIFT expr_no_commas { $$ = make_binary($2.location, kind_lshift, $1, $3); } | expr_no_commas RSHIFT expr_no_commas { $$ = make_binary($2.location, kind_rshift, $1, $3); } | expr_no_commas ARITHCOMPARE expr_no_commas { $$ = make_binary($2.location, $2.i, $1, $3); } | expr_no_commas '<' expr_no_commas { $$ = make_binary($2.location, kind_lt, $1, $3); } | expr_no_commas '>' expr_no_commas { $$ = make_binary($2.location, kind_gt, $1, $3); } | expr_no_commas EQCOMPARE expr_no_commas { $$ = make_binary($2.location, $2.i, $1, $3); } | expr_no_commas '&' expr_no_commas { $$ = make_binary($2.location, kind_bitand, $1, $3); } | expr_no_commas '|' expr_no_commas { $$ = make_binary($2.location, kind_bitor, $1, $3); } | expr_no_commas '^' expr_no_commas { $$ = make_binary($2.location, kind_bitxor, $1, $3); } | expr_no_commas ANDAND expr_no_commas { $$ = make_binary($2.location, kind_andand, $1, $3); } | expr_no_commas OROR expr_no_commas { $$ = make_binary($2.location, kind_oror, $1, $3); } | expr_no_commas '?' expr ':' expr_no_commas { $$ = make_conditional($2.location, $1, $3, $5); } | expr_no_commas '?' { if (pedantic) pedwarn("ANSI C forbids omitting the middle term of a ?: expression"); } ':' expr_no_commas { $$ = make_conditional($2.location, $1, NULL, $5); } | expr_no_commas '=' expr_no_commas { $$ = make_assign($2.location, kind_assign, $1, $3); } | expr_no_commas ASSIGN expr_no_commas { $$ = make_assign($2.location, $2.i, $1, $3); } ; primary: IDENTIFIER { if (yychar == YYEMPTY) yychar = YYLEX; $$ = make_identifier($1.location, $1.id, yychar == '('); } | CONSTANT { $$ = CAST(expression, $1); } | string { $$ = $1; } | '(' expr ')' { $$ = $2; $$->parens = TRUE; } | '(' error ')' { $$ = make_error_expr(); } | '(' { if (current.function_decl == 0) { error("braced-group within expression allowed only inside a function"); YYERROR; } push_label_level(); } compstmt ')' { pop_label_level(); if (pedantic) pedwarn("ANSI C forbids braced-groups within expressions"); $$ = make_compound_expr($1.location, $3); } | function_call { /* Magic functions may rewrite this to something else */ if (is_function_call($1)) { function_call fc = CAST(function_call, $1); type calltype = fc->arg1->type; if (type_command(calltype)) error("commands must be called with call"); else if (type_event(calltype)) error("events must be signaled with signal"); else if (type_task(calltype)) error("tasks must be posted with post"); } $$ = $1; } | VA_ARG '(' expr_no_commas ',' typename ')' { $$ = make_va_arg($1.location, $3, $5); } | OFFSETOF '(' typename ',' fieldlist ')' { $$ = make_offsetof($1.location, $3, $5); } | primary '[' nonnull_exprlist ']' { $$ = make_array_ref($2.location, $1, $3); } | primary '.' identifier { $$ = make_field_ref($2.location, $1, $3.id); } | primary POINTSAT identifier { $$ = make_field_ref($2.location, make_dereference($2.location, $1), $3.id); } | primary PLUSPLUS { $$ = make_postincrement($2.location, $1); } | primary MINUSMINUS { $$ = make_postdecrement($2.location, $1); } ; fieldlist: identifier { $$ = dd_new_list(pr); dd_add_last(pr, $$, $1.id.data); } | fieldlist '.' identifier { $$ = $1; dd_add_last(pr, $$, $3.id.data); } ; function_call: primary '(' exprlist ')' { $$ = make_function_call($2.location, $1, $3); } ; string: STRING { $$ = CAST(expression, $1); } | MAGIC_STRING { $$ = make_identifier($1.location, $1.id, FALSE); } ; old_style_parm_decls: /* empty */ { $$ = NULL; } | datadecls | datadecls ELLIPSIS /* ... is used here to indicate a varargs function. */ { if (pedantic) pedwarn("ANSI C does not permit use of `varargs.h'"); $$ = declaration_chain(CAST(declaration, new_ellipsis_decl(pr, $2.location)), $1); } ; /* The following are analogous to decls and decl except that they do not allow nested functions. They are used for old-style parm decls. */ datadecls: datadecl | datadecls datadecl { $$ = declaration_chain($2, $1); } ; /* We don't allow prefix attributes here because they cause reduce/reduce conflicts: we can't know whether we're parsing a function decl with attribute suffix, or function defn with attribute prefix on first old style parm. */ datadecl: declspecs_ts_nosa setspecs initdecls ';' { $$ = make_data_decl($1, $3); } | declspecs_nots_nosa setspecs notype_initdecls ';' { $$ = make_data_decl($1, $3); } | declspecs_ts_nosa setspecs ';' { shadow_tag_warned($1, 1); $$ = make_data_decl($1, NULL); pedwarn("empty declaration"); } | declspecs_nots_nosa ';' { pedwarn("empty declaration"); $$ = NULL; } ; /* This combination which saves a lineno before a decl is the normal thing to use, rather than decl itself. This is to avoid shift/reduce conflicts in contexts where statement labels are allowed. */ decls: decl | errstmt { $$ = make_error_decl(); } | decls decl { $$ = declaration_chain($2, $1); } | decl errstmt { $$ = make_error_decl(); } ; /* records the type and storage class specs to use for processing the declarators that follow. Maintains a stack of outer-level values of pstate.declspecs, for the sake of parm declarations nested in function declarators. */ setspecs: /* empty */ { push_declspec_stack(); pending_xref_error(); pstate.declspecs = $0; pstate.attributes = NULL; } ; /* Possibly attributes after a comma, which should be saved in pstate.attributes */ maybe_resetattrs: maybe_attribute { pstate.attributes = $1; } ; decl: declspecs_ts setspecs initdecls ';' { $$ = make_data_decl($1, $3); } | declspecs_nots setspecs notype_initdecls ';' { $$ = make_data_decl($1, $3); } | declspecs_ts setspecs nested_function { $$ = $3; pop_declspec_stack(); } | declspecs_nots setspecs notype_nested_function { $$ = $3; pop_declspec_stack(); } | declspecs setspecs ';' { shadow_tag($1); $$ = make_data_decl($1, NULL); } | extension decl { $$ = make_extension_decl($1.i, $1.location, $2); } ; /* declspecs borrowed from gcc 3. I think it's really ugly, but I guess they (and therefore I) am stuck with this brokenness. The only redeeming feature is that it's cleaner than gcc 2 */ /* A list of declaration specifiers. These are: - Storage class specifiers (SCSPEC), which for GCC currently include function specifiers ("inline"). - Type specifiers (type_spec_*). - Type qualifiers (TYPE_QUAL). - Attribute specifier lists (attributes). These are stored as a TREE_LIST; the head of the list is the last item in the specifier list. Each entry in the list has either a TREE_PURPOSE that is an attribute specifier list, or a TREE_VALUE that is a single other specifier or qualifier; and a TREE_CHAIN that is the rest of the list. TREE_STATIC is set on the list if something other than a storage class specifier or attribute has been seen; this is used to warn for the obsolescent usage of storage class specifiers other than at the start of the list. (Doing this properly would require function specifiers to be handled separately from storage class specifiers.) The various cases below are classified according to: (a) Whether a storage class specifier is included or not; some places in the grammar disallow storage class specifiers (_sc or _nosc). (b) Whether a type specifier has been seen; after a type specifier, a typedef name is an identifier to redeclare (_ts or _nots). (c) Whether the list starts with an attribute; in certain places, the grammar requires specifiers that don't start with an attribute (_sa or _nosa). (d) Whether the list ends with an attribute (or a specifier such that any following attribute would have been parsed as part of that specifier); this avoids shift-reduce conflicts in the parsing of attributes (_ea or _noea). TODO: (i) Distinguish between function specifiers and storage class specifiers, at least for the purpose of warnings about obsolescent usage. (ii) Halve the number of productions here by eliminating the _sc/_nosc distinction and instead checking where required that storage class specifiers aren't present. */ declspecs_nosc_nots_nosa_noea: type_qual | declspecs_nosc_nots_nosa_noea type_qual { $$ = type_element_chain($1, $2); } | declspecs_nosc_nots_nosa_ea type_qual { $$ = type_element_chain($1, $2); } ; declspecs_nosc_nots_nosa_ea: declspecs_nosc_nots_nosa_noea eattributes { $$ = type_element_chain($1, $2); } ; declspecs_nosc_nots_sa_noea: declspecs_nosc_nots_sa_noea type_qual { $$ = type_element_chain($1, $2); } | declspecs_nosc_nots_sa_ea type_qual { $$ = type_element_chain($1, $2); } ; declspecs_nosc_nots_sa_ea: eattributes | declspecs_nosc_nots_sa_noea eattributes ; declspecs_nosc_ts_nosa_noea: type_spec_nonattr | declspecs_nosc_ts_nosa_noea type_qual { $$ = type_element_chain($1, $2); } | declspecs_nosc_ts_nosa_ea type_qual { $$ = type_element_chain($1, $2); } | declspecs_nosc_ts_nosa_noea type_spec_reserved_nonattr { $$ = type_element_chain($1, $2); } | declspecs_nosc_ts_nosa_ea type_spec_reserved_nonattr { $$ = type_element_chain($1, $2); } | declspecs_nosc_nots_nosa_noea type_spec_nonattr { $$ = type_element_chain($1, $2); } | declspecs_nosc_nots_nosa_ea type_spec_nonattr { $$ = type_element_chain($1, $2); } ; declspecs_nosc_ts_nosa_ea: type_spec_attr | declspecs_nosc_ts_nosa_noea eattributes { $$ = type_element_chain($1, $2); } | declspecs_nosc_ts_nosa_noea type_spec_reserved_attr { $$ = type_element_chain($1, $2); } | declspecs_nosc_ts_nosa_ea type_spec_reserved_attr { $$ = type_element_chain($1, $2); } | declspecs_nosc_nots_nosa_noea type_spec_attr { $$ = type_element_chain($1, $2); } | declspecs_nosc_nots_nosa_ea type_spec_attr { $$ = type_element_chain($1, $2); } ; declspecs_nosc_ts_sa_noea: declspecs_nosc_ts_sa_noea type_qual { $$ = type_element_chain($1, $2); } | declspecs_nosc_ts_sa_ea type_qual { $$ = type_element_chain($1, $2); } | declspecs_nosc_ts_sa_noea type_spec_reserved_nonattr { $$ = type_element_chain($1, $2); } | declspecs_nosc_ts_sa_ea type_spec_reserved_nonattr { $$ = type_element_chain($1, $2); } | declspecs_nosc_nots_sa_noea type_spec_nonattr { $$ = type_element_chain($1, $2); } | declspecs_nosc_nots_sa_ea type_spec_nonattr { $$ = type_element_chain($1, $2); } ; declspecs_nosc_ts_sa_ea: declspecs_nosc_ts_sa_noea eattributes { $$ = type_element_chain($1, $2); } | declspecs_nosc_ts_sa_noea type_spec_reserved_attr { $$ = type_element_chain($1, $2); } | declspecs_nosc_ts_sa_ea type_spec_reserved_attr { $$ = type_element_chain($1, $2); } | declspecs_nosc_nots_sa_noea type_spec_attr { $$ = type_element_chain($1, $2); } | declspecs_nosc_nots_sa_ea type_spec_attr { $$ = type_element_chain($1, $2); } ; declspecs_sc_nots_nosa_noea: scspec | declspecs_sc_nots_nosa_noea type_qual { $$ = type_element_chain($1, $2); } | declspecs_sc_nots_nosa_ea type_qual { $$ = type_element_chain($1, $2); } | declspecs_nosc_nots_nosa_noea scspec { $$ = type_element_chain($1, $2); } | declspecs_nosc_nots_nosa_ea scspec { $$ = type_element_chain($1, $2); } | declspecs_sc_nots_nosa_noea scspec { $$ = type_element_chain($1, $2); } | declspecs_sc_nots_nosa_ea scspec { $$ = type_element_chain($1, $2); } ; declspecs_sc_nots_nosa_ea: declspecs_sc_nots_nosa_noea eattributes { $$ = type_element_chain($1, $2); } ; declspecs_sc_nots_sa_noea: declspecs_sc_nots_sa_noea type_qual { $$ = type_element_chain($1, $2); } | declspecs_sc_nots_sa_ea type_qual { $$ = type_element_chain($1, $2); } | declspecs_nosc_nots_sa_noea scspec { $$ = type_element_chain($1, $2); } | declspecs_nosc_nots_sa_ea scspec { $$ = type_element_chain($1, $2); } | declspecs_sc_nots_sa_noea scspec { $$ = type_element_chain($1, $2); } | declspecs_sc_nots_sa_ea scspec { $$ = type_element_chain($1, $2); } ; declspecs_sc_nots_sa_ea: declspecs_sc_nots_sa_noea eattributes { $$ = type_element_chain($1, $2); } ; declspecs_sc_ts_nosa_noea: declspecs_sc_ts_nosa_noea type_qual { $$ = type_element_chain($1, $2); } | declspecs_sc_ts_nosa_ea type_qual { $$ = type_element_chain($1, $2); } | declspecs_sc_ts_nosa_noea type_spec_reserved_nonattr { $$ = type_element_chain($1, $2); } | declspecs_sc_ts_nosa_ea type_spec_reserved_nonattr { $$ = type_element_chain($1, $2); } | declspecs_sc_nots_nosa_noea type_spec_nonattr { $$ = type_element_chain($1, $2); } | declspecs_sc_nots_nosa_ea type_spec_nonattr { $$ = type_element_chain($1, $2); } | declspecs_nosc_ts_nosa_noea scspec { $$ = type_element_chain($1, $2); } | declspecs_nosc_ts_nosa_ea scspec { $$ = type_element_chain($1, $2); } | declspecs_sc_ts_nosa_noea scspec { $$ = type_element_chain($1, $2); } | declspecs_sc_ts_nosa_ea scspec { $$ = type_element_chain($1, $2); } ; declspecs_sc_ts_nosa_ea: declspecs_sc_ts_nosa_noea eattributes { $$ = type_element_chain($1, $2); } | declspecs_sc_ts_nosa_noea type_spec_reserved_attr { $$ = type_element_chain($1, $2); } | declspecs_sc_ts_nosa_ea type_spec_reserved_attr { $$ = type_element_chain($1, $2); } | declspecs_sc_nots_nosa_noea type_spec_attr { $$ = type_element_chain($1, $2); } | declspecs_sc_nots_nosa_ea type_spec_attr { $$ = type_element_chain($1, $2); } ; declspecs_sc_ts_sa_noea: declspecs_sc_ts_sa_noea type_qual { $$ = type_element_chain($1, $2); } | declspecs_sc_ts_sa_ea type_qual { $$ = type_element_chain($1, $2); } | declspecs_sc_ts_sa_noea type_spec_reserved_nonattr { $$ = type_element_chain($1, $2); } | declspecs_sc_ts_sa_ea type_spec_reserved_nonattr { $$ = type_element_chain($1, $2); } | declspecs_sc_nots_sa_noea type_spec_nonattr { $$ = type_element_chain($1, $2); } | declspecs_sc_nots_sa_ea type_spec_nonattr { $$ = type_element_chain($1, $2); } | declspecs_nosc_ts_sa_noea scspec { $$ = type_element_chain($1, $2); } | declspecs_nosc_ts_sa_ea scspec { $$ = type_element_chain($1, $2); } | declspecs_sc_ts_sa_noea scspec { $$ = type_element_chain($1, $2); } | declspecs_sc_ts_sa_ea scspec { $$ = type_element_chain($1, $2); } ; declspecs_sc_ts_sa_ea: declspecs_sc_ts_sa_noea eattributes { $$ = type_element_chain($1, $2); } | declspecs_sc_ts_sa_noea type_spec_reserved_attr { $$ = type_element_chain($1, $2); } | declspecs_sc_ts_sa_ea type_spec_reserved_attr { $$ = type_element_chain($1, $2); } | declspecs_sc_nots_sa_noea type_spec_attr { $$ = type_element_chain($1, $2); } | declspecs_sc_nots_sa_ea type_spec_attr { $$ = type_element_chain($1, $2); } ; /* Particular useful classes of declspecs. */ declspecs_ts: declspecs_nosc_ts_nosa_noea | declspecs_nosc_ts_nosa_ea | declspecs_nosc_ts_sa_noea | declspecs_nosc_ts_sa_ea | declspecs_sc_ts_nosa_noea | declspecs_sc_ts_nosa_ea | declspecs_sc_ts_sa_noea | declspecs_sc_ts_sa_ea ; declspecs_nots: declspecs_nosc_nots_nosa_noea | declspecs_nosc_nots_nosa_ea | declspecs_nosc_nots_sa_noea | declspecs_nosc_nots_sa_ea | declspecs_sc_nots_nosa_noea | declspecs_sc_nots_nosa_ea | declspecs_sc_nots_sa_noea | declspecs_sc_nots_sa_ea ; declspecs_ts_nosa: declspecs_nosc_ts_nosa_noea | declspecs_nosc_ts_nosa_ea | declspecs_sc_ts_nosa_noea | declspecs_sc_ts_nosa_ea ; declspecs_nots_nosa: declspecs_nosc_nots_nosa_noea | declspecs_nosc_nots_nosa_ea | declspecs_sc_nots_nosa_noea | declspecs_sc_nots_nosa_ea ; declspecs_nosc_ts: declspecs_nosc_ts_nosa_noea | declspecs_nosc_ts_nosa_ea | declspecs_nosc_ts_sa_noea | declspecs_nosc_ts_sa_ea ; declspecs_nosc_nots: declspecs_nosc_nots_nosa_noea | declspecs_nosc_nots_nosa_ea | declspecs_nosc_nots_sa_noea | declspecs_nosc_nots_sa_ea ; declspecs_nosc: declspecs_nosc_ts | declspecs_nosc_nots ; declspecs: declspecs_ts | declspecs_nots ; /* A (possibly empty) sequence of type qualifiers and attributes. */ maybe_type_quals_attrs: /* empty */ { $$ = NULL; } | declspecs_nosc_nots ; /* A type specifier (but not a type qualifier). Once we have seen one of these in a declaration, if a typedef name appears then it is being redeclared. The _reserved versions start with a reserved word and may appear anywhere in the declaration specifiers; the _nonreserved versions may only appear before any other type specifiers, and after that are (if names) being redeclared. FIXME: should the _nonreserved version be restricted to names being redeclared only? The other entries there relate only the GNU extensions and Objective C, and are historically parsed thus, and don't make sense after other type specifiers, but it might be cleaner to count them as _reserved. _attr means: specifiers that either end with attributes, or are such that any following attributes would be parsed as part of the specifier. _nonattr: specifiers. */ type_spec_nonattr: type_spec_reserved_nonattr | type_spec_nonreserved_nonattr ; type_spec_attr: type_spec_reserved_attr ; type_spec_reserved_nonattr: type_spec | structuse ; type_spec_reserved_attr: structdef ; type_spec_nonreserved_nonattr: TYPENAME { /* For a typedef name, record the meaning, not the name. In case of `foo foo, bar;'. */ $$ = CAST(type_element, new_typename(pr, $1.location, $1.decl)); } | COMPONENTREF '.' identifier { /* reference to a typedef from a component. */ $$ = CAST(type_element, new_component_typeref(pr, $1.location, $3.decl, $1.id)); } | TYPEOF '(' expr ')' { $$ = CAST(type_element, new_typeof_expr(pr, $1.location, $3)); } | TYPEOF '(' typename ')' { $$ = CAST(type_element, new_typeof_type(pr, $1.location, $3)); } ; /* type_spec_nonreserved_attr does not exist. */ initdecls: initdecls_ { $$ = declaration_reverse($1); } ; notype_initdecls: notype_initdecls_ { $$ = declaration_reverse($1); } ; initdecls_: initdcl | initdecls_ ',' maybe_resetattrs initdcl { $$ = declaration_chain($4, $1); } ; notype_initdecls_: notype_initdcl { $$ = $1; } | notype_initdecls_ ',' maybe_resetattrs initdcl { $$ = declaration_chain($4, $1); } ; maybeasm: /* empty */ { $$ = NULL; } | ASM_KEYWORD '(' STRING ')' { $$ = new_asm_stmt(pr, $1.location, CAST(expression, $3), NULL, NULL, NULL, NULL); } ; initdcl: declarator maybeasm maybe_attribute '=' { $$ = start_decl($1, $2, pstate.declspecs, 1, prefix_attr($3)); start_init($$, NULL); } init /* Note how the declaration of the variable is in effect while its init is parsed! */ { finish_init(); $$ = finish_decl($5, $6); } | declarator maybeasm maybe_attribute { declaration d = start_decl($1, $2, pstate.declspecs, 0, prefix_attr($3)); $$ = finish_decl(d, NULL); } ; notype_initdcl: notype_declarator maybeasm maybe_attribute '=' { $$ = start_decl($1, $2, pstate.declspecs, 1, prefix_attr($3)); start_init($$, NULL); } init /* Note how the declaration of the variable is in effect while its init is parsed! */ { finish_init(); $$ = finish_decl($5, $6); } | notype_declarator maybeasm maybe_attribute { declaration d = start_decl($1, $2, pstate.declspecs, 0, prefix_attr($3)); $$ = finish_decl(d, NULL); } ; maybe_attribute: /* empty */ { $$ = NULL; } | attributes { $$ = attribute_reverse($1); } ; eattributes: attributes { $$ = CAST(type_element, $1); } ; nesc_attributes: /* empty */ { $$ = NULL; } | nesc_attributes nattrib { $$ = attribute_chain($2, $1); } ; attributes: attribute { $$ = $1; } | attributes attribute { $$ = attribute_chain($2, $1); } ; attribute: ATTRIBUTE '(' '(' attribute_list ')' ')' { $$ = $4; } | target_attribute { $$ = CAST(attribute, $1); } | nattrib ; target_attribute: TARGET_ATTRIBUTE0 { word w = new_word(pr, $1.location, $1.id); $$ = new_target_attribute(pr, $1.location, w, NULL); } | TARGET_ATTRIBUTE1 restricted_expr { word w = new_word(pr, $1.location, $1.id); $$ = new_target_attribute(pr, $1.location, w, $2); } | '@' restricted_expr { word w = new_word(pr, $2->location, str2cstring(pr, "iar_at")); $$ = new_target_attribute(pr, $2->location, w, $2); } ; restricted_expr: CONSTANT { $$ = CAST(expression, $1); } | string { $$ = $1; } | '(' expr ')' { $$ = $2; } ; attribute_list: attrib { $$ = CAST(attribute, $1); } | attribute_list ',' attrib { $$ = attribute_chain($1, CAST(attribute, $3)); } ; attrib: /* empty */ { $$ = NULL; } | any_word { $$ = new_gcc_attribute(pr, $1->location, $1, NULL); } | any_word '(' IDENTIFIER ')' { $$ = new_gcc_attribute (pr, $1->location, $1, make_attr_args($3.location, $3.id, NULL)); } | any_word '(' IDENTIFIER ',' nonnull_exprlist ')' { $$ = new_gcc_attribute (pr, $2.location, $1, make_attr_args($3.location, $3.id, $5)); } | any_word '(' exprlist ')' { $$ = new_gcc_attribute(pr, $2.location, $1, $3); } ; nattrib: '@' nastart '(' initlist_maybe_comma ')' { $$ = finish_attribute_use($2, $4); } | '@' nastart error ')' { $$ = finish_attribute_use($2, make_error_expr()); } ; nastart: idword { $$ = start_attribute_use($1); } ; /* This still leaves out most reserved keywords, shouldn't we include them? */ any_word: idword | scspec { $$ = make_cword($1->location, rid_name(CAST(rid, $1))); } | type_spec { $$ = make_cword($1->location, rid_name(CAST(rid, $1))); } | type_qual { $$ = make_cword($1->location, qualifier_name(CAST(qualifier, $1)->id)); } | SIGNAL { $$ = make_cword($1.location, "signal"); } ; /* Initializers. `init' is the entry point. */ init: expr_no_commas { $$ = $1; simple_init($$); } | '{' { really_start_incremental_init(NULL); } initlist_maybe_comma '}' { $$ = make_init_list($1.location, $3); } | error { $$ = make_error_expr(); } ; /* `initlist_maybe_comma' is the guts of an initializer in braces. */ initlist_maybe_comma: /* empty */ { if (pedantic) pedwarn("ANSI C forbids empty initializer braces"); $$ = NULL; } | initlist1 maybecomma { $$ = expression_reverse($1); } ; initlist1: initelt | initlist1 ',' initelt { $$ = expression_chain($3, $1); } ; /* `initelt' is a single element of an initializer. It may use braces. */ initelt: designator_list '=' initval { if (pedantic) pedwarn("ANSI C forbids specifying subobject to initialize"); $$ = make_init_specific($1, $3); } | designator initval { if (pedantic) pedwarn("obsolete use of designated initializer without `='"); $$ = make_init_specific($1, $2); } | identifier ':' { $$ = set_init_label($1.location, $1.id); if (pedantic) pedwarn("obsolete use of designated initializer with `:'"); } initval { $$ = make_init_specific($3, $4); } | initval ; initval: '{' { push_init_level (0); } initlist_maybe_comma '}' { $$ = make_init_list($1.location, $3); process_init_element(NULL); } | expr_no_commas { process_init_element($1); $$ = $1; } | error { $$ = make_error_expr(); } ; designator_list: designator | designator_list designator { $$ = designator_chain($1, $2); } ; designator: '.' identifier { $$ = set_init_label($2.location, $2.id); } /* These are for labeled elements. The syntax for an array element initializer conflicts with the syntax for an Objective-C message, so don't include these productions in the Objective-C grammar. */ | '[' expr_no_commas ELLIPSIS expr_no_commas ']' { $$ = set_init_index($1.location, $2, $4); if (pedantic) pedwarn ("ISO C forbids specifying range of elements to initialize"); } | '[' expr_no_commas ']' { $$ = set_init_index($1.location, $2, NULL); } ; nested_function: declarator maybeasm maybe_attribute { /* maybeasm is only here to avoid a s/r conflict */ refuse_asm($2); if (!start_function(pstate.declspecs, $1, $3, 1)) { YYERROR1; } } old_style_parm_decls { store_parm_decls(declaration_reverse($3)); } /* This used to use compstmt_or_error. That caused a bug with input `f(g) int g {}', where the use of YYERROR1 above caused an error which then was handled by compstmt_or_error. There followed a repeated execution of that same rule, which called YYERROR1 again, and so on. */ compstmt { $$ = finish_function($7); } ; notype_nested_function: notype_declarator maybeasm maybe_attribute { /* maybeasm is only here to avoid a s/r conflict */ refuse_asm($2); if (!start_function(pstate.declspecs, $1, $3, 1)) { YYERROR1; } } old_style_parm_decls { store_parm_decls(declaration_reverse($3)); } /* This used to use compstmt_or_error. That caused a bug with input `f(g) int g {}', where the use of YYERROR1 above caused an error which then was handled by compstmt_or_error. There followed a repeated execution of that same rule, which called YYERROR1 again, and so on. */ compstmt { $$ = finish_function($7); } ; /* Any kind of declarator (thus, all declarators allowed after an explicit type_spec). */ declarator: after_type_declarator | notype_declarator ; /* A declarator that is allowed only after an explicit type_spec. */ after_type_declarator: after_type_declarator array_or_fn_declarator { $$ = finish_array_or_fn_declarator($1, $2); } | '*' maybe_type_quals_attrs after_type_declarator { $$ = make_pointer_declarator($1.location, $3, $2); } | '(' maybe_attribute after_type_declarator ')' { $$ = make_qualified_declarator($1.location, $3, CAST(type_element, $2)); } | TYPENAME { $$ = make_identifier_declarator($1.location, $1.id); } | TYPENAME '.' identifier { $$ = make_interface_ref_declarator($1.location, $1.id, $3.id); } ; /* Kinds of declarator that can appear in a parameter list in addition to notype_declarator. This is like after_type_declarator but does not allow a typedef name in parentheses as an identifier (because it would conflict with a function with that typedef as arg). */ parm_declarator: parm_declarator array_or_fn_declarator { $$ = finish_array_or_fn_declarator($1, $2); } | '*' maybe_type_quals_attrs parm_declarator { $$ = make_pointer_declarator($1.location, $3, $2); } | TYPENAME { $$ = make_identifier_declarator($1.location, $1.id); } ; /* A declarator allowed whether or not there has been an explicit type_spec. These cannot redeclare a typedef-name. */ notype_declarator: notype_declarator array_or_fn_declarator { $$ = finish_array_or_fn_declarator($1, $2); } | '*' maybe_type_quals_attrs notype_declarator { $$ = make_pointer_declarator($1.location, $3, $2); } | '(' maybe_attribute notype_declarator ')' { $$ = make_qualified_declarator($1.location, $3, CAST(type_element, $2)); } | IDENTIFIER { $$ = make_identifier_declarator($1.location, $1.id); } | IDENTIFIER '.' identifier { $$ = make_interface_ref_declarator($1.location, $1.id, $3.id); } ; tag: identifier { $$ = new_word(pr, $1.location, $1.id); } ; structuse: structkind tag nesc_attributes { $$ = xref_tag($1.location, $1.i, $2); if ($3) warning("attributes ignored"); } | ENUM tag nesc_attributes { $$ = xref_tag($1.location, kind_enum_ref, $2); if ($3) warning("attributes ignored"); } ; structdef: structkind tag nesc_attributes '{' { $$ = start_struct($1.location, $1.i, $2); /* Start scope of tag before parsing components. */ } component_decl_list '}' maybe_attribute { $$ = finish_struct($5, $6, attribute_chain($3, $8)); } | STRUCT '@' tag nesc_attributes '{' { $$ = start_struct($1.location, kind_attribute_ref, $3); /* Start scope of tag before parsing components. */ } component_decl_list '}' maybe_attribute { $$ = finish_struct($6, $7, attribute_chain($4, $9)); } | structkind '{' component_decl_list '}' maybe_attribute { $$ = finish_struct(start_struct($1.location, $1.i, NULL), $3, $5); } | ENUM tag nesc_attributes '{' { $$ = start_enum($1.location, $2); } enumlist maybecomma_warn '}' maybe_attribute { $$ = finish_enum($5, declaration_reverse($6), attribute_chain($3, $9)); } | ENUM '{' { $$ = start_enum($1.location, NULL); } enumlist maybecomma_warn '}' maybe_attribute { $$ = finish_enum($3, declaration_reverse($4), $7); } ; structkind: STRUCT { $$ = $1; $$.i = kind_struct_ref; } | UNION { $$ = $1; $$.i = kind_union_ref; } | NX_STRUCT { $$ = $1; $$.i = kind_nx_struct_ref; } | NX_UNION { $$ = $1; $$.i = kind_nx_union_ref; } ; maybecomma: /* empty */ | ',' ; maybecomma_warn: /* empty */ | ',' { if (pedantic) pedwarn("comma at end of enumerator list"); } ; component_decl_list: component_decl_list2 { $$ = declaration_reverse($1); } | component_decl_list2 component_decl { $$ = declaration_reverse(declaration_chain($2, $1)); pedwarn("no semicolon at end of struct or union"); } ; component_decl_list2: /* empty */ { $$ = NULL; } | component_decl_list2 component_decl ';' { $$ = declaration_chain($2, $1); } | component_decl_list2 ';' { if (pedantic) pedwarn("extra semicolon in struct or union specified"); $$ = $1; } ; /* There is a shift-reduce conflict here, because `components' may start with a `typename'. It happens that shifting (the default resolution) does the right thing, because it treats the `typename' as part of a `typed_type_specs'. It is possible that this same technique would allow the distinction between `notype_initdecls' and `initdecls' to be eliminated. But I am being cautious and not trying it. */ component_decl: declspecs_nosc_ts setspecs components { $$ = make_data_decl($1, declaration_reverse($3)); } | declspecs_nosc_ts setspecs { if (pedantic) pedwarn("ISO C doesn't support unnamed structs/unions"); $$ = make_data_decl($1, NULL); } | declspecs_nosc_nots setspecs components_notype { $$ = make_data_decl($1, declaration_reverse($3)); } | declspecs_nosc_nots setspecs { if (pedantic) pedwarn("ANSI C forbids member declarations with no members"); shadow_tag($1); $$ = make_data_decl($1, NULL); } | error { $$ = make_error_decl(); } | extension component_decl { $$ = make_extension_decl($1.i, $1.location, $2); } ; components: component_declarator | components ',' maybe_resetattrs component_declarator { $$ = declaration_chain($4, $1); } ; /* It should be possible to use components after the ',', but gcc 3 isn't doing this */ components_notype: component_notype_declarator | components_notype ',' maybe_resetattrs component_notype_declarator { $$ = declaration_chain($4, $1); } ; component_declarator: declarator maybe_attribute { $$ = make_field($1, NULL, pstate.declspecs, prefix_attr($2)); } | declarator ':' expr_no_commas maybe_attribute { $$ = make_field($1, $3, pstate.declspecs, prefix_attr($4)); } | ':' expr_no_commas maybe_attribute { $$ = make_field(NULL, $2, pstate.declspecs, prefix_attr($3)); } ; component_notype_declarator: notype_declarator maybe_attribute { $$ = make_field($1, NULL, pstate.declspecs, prefix_attr($2)); } | notype_declarator ':' expr_no_commas maybe_attribute { $$ = make_field($1, $3, pstate.declspecs, prefix_attr($4)); } | ':' expr_no_commas maybe_attribute { $$ = make_field(NULL, $2, pstate.declspecs, prefix_attr($3)); } ; enumlist: enumerator | enumlist ',' enumerator { $$ = declaration_chain($3, $1); } | error { $$ = NULL; } ; enumerator: identifier { $$ = make_enumerator($1.location, $1.id, NULL); } | identifier '=' expr_no_commas { $$ = make_enumerator($1.location, $1.id, $3); } ; typename: declspecs_nosc { pending_xref_error(); } absdcl { $$ = make_type($1, $3); } ; absdcl: /* an abstract declarator */ /* empty */ { $$ = NULL; } | absdcl1 ; absdcl1: /* a nonempty absolute declarator */ absdcl1_ea | absdcl1_noea ; absdcl1_noea: direct_absdcl1 | '*' maybe_type_quals_attrs absdcl1_noea { $$ = make_pointer_declarator($1.location, $3, $2); } ; absdcl1_ea: '*' maybe_type_quals_attrs { $$ = make_pointer_declarator($1.location, NULL, $2); } | '*' maybe_type_quals_attrs absdcl1_ea { $$ = make_pointer_declarator($1.location, $3, $2); } ; direct_absdcl1: '(' maybe_attribute absdcl1 ')' { $$ = make_qualified_declarator($1.location, $3, CAST(type_element, $2)); } | direct_absdcl1 array_or_absfn_declarator { $$ = finish_array_or_fn_declarator($1, $2); } | array_or_absfn_declarator { $$ = finish_array_or_fn_declarator(NULL, $1); } ; array_or_fn_declarator: fn_declarator | array_declarator ; array_or_absfn_declarator: absfn_declarator | array_declarator ; fn_declarator: parameters '(' parmlist_or_identifiers_1 fn_quals { $$ = CAST(nested_declarator, new_function_declarator(pr, $2.location, NULL, $3, $1, $4, NULL)); } | '(' parmlist_or_identifiers fn_quals { $$ = CAST(nested_declarator, new_function_declarator(pr, $1.location, NULL, $2, NULL, $3, NULL)); } ; absfn_declarator: '(' parmlist fn_quals { $$ = CAST(nested_declarator, new_function_declarator(pr, $1.location, NULL, $2, NULL, $3, NULL)); } ; array_declarator: '[' expr ']' { $$ = CAST(nested_declarator, new_array_declarator(pr, $1.location, NULL, $2)); } | '[' ']' { $$ = CAST(nested_declarator, new_array_declarator(pr, $1.location, NULL, NULL)); } ; /* at least one statement, the first of which parses without error. */ /* stmts is used only after decls, so an invalid first statement is actually regarded as an invalid decl and part of the decls. */ stmts: stmt_or_labels { if (pedantic && $1.i) pedwarn("ANSI C forbids label at end of compound statement"); /* Add an empty statement to last label if stand-alone */ if ($1.i) { statement last_label = last_statement($1.stmt); chain_with_labels(last_label, CAST(statement, new_empty_stmt(pr, last_label->location))); } $$ = $1.stmt; } ; stmt_or_labels: stmt_or_label | stmt_or_labels stmt_or_label { $$.i = $2.i; $$.stmt = chain_with_labels($1.stmt, $2.stmt); } | stmt_or_labels errstmt { $$.i = 0; $$.stmt = make_error_stmt(); } ; xstmts: /* empty */ { $$ = NULL; } | stmts ; errstmt: error ';' ; pushlevel: /* empty */ { pushlevel(FALSE); } ; /* Read zero or more forward-declarations for labels that nested functions can jump to. */ maybe_label_decls: /* empty */ { $$ = NULL; } | label_decls { if (pedantic) pedwarn("ANSI C forbids label declarations"); $$ = id_label_reverse($1); } ; label_decls: label_decl | label_decls label_decl { $$ = id_label_chain($2, $1); } ; label_decl: LABEL identifiers_or_typenames ';' { $$ = $2; } ; /* This is the body of a function definition. It causes syntax errors to ignore to the next openbrace. */ compstmt_or_error: compstmt | error compstmt { $$ = $2; } ; compstmt_start: '{' { $$ = $1; compstmt_count++; } ; compstmt: compstmt_start pushlevel '}' { $$ = CAST(statement, new_compound_stmt(pr, $1.location, NULL, NULL, NULL, poplevel())); } | compstmt_start pushlevel maybe_label_decls decls xstmts '}' { $$ = CAST(statement, new_compound_stmt(pr, $1.location, $3, declaration_reverse($4), $5, poplevel())); } | compstmt_start pushlevel maybe_label_decls error '}' { poplevel(); $$ = make_error_stmt(); } | compstmt_start pushlevel maybe_label_decls stmts '}' { $$ = CAST(statement, new_compound_stmt(pr, $1.location, $3, NULL, $4, poplevel())); } ; /* Value is number of statements counted as of the closeparen. */ simple_if: if_prefix labeled_stmt { $$.stmt = CAST(statement, new_if_stmt(pr, $1.expr->location, $1.expr, $2, NULL)); $$.i = $1.i; } | if_prefix error { $$.i = $1.i; $$.stmt = make_error_stmt(); } ; if_prefix: IF '(' expr ')' { $$.i = stmt_count; $$.expr = $3; check_condition("if", $3); } ; /* This is a subroutine of stmt. It is used twice, once for valid DO statements and once for catching errors in parsing the end test. */ do_stmt_start: DO { stmt_count++; compstmt_count++; $$ = CAST(conditional_stmt, new_dowhile_stmt(pr, $1.location, NULL, NULL)); push_loop(CAST(statement, $$)); } labeled_stmt WHILE { $$ = $2; $$->stmt = $3; } ; labeled_stmt: stmt { $$ = $1; } | label labeled_stmt { $$ = CAST(statement, new_labeled_stmt(pr, $1->location, $1, $2)); } ; stmt_or_label: stmt { $$.i = 0; $$.stmt = $1; } | label { $$.i = 1; $$.stmt = CAST(statement, new_labeled_stmt(pr, $1->location, $1, NULL)); } ; atomic_stmt: ATOMIC { atomic_stmt last_atomic = current.in_atomic; current.in_atomic = new_atomic_stmt(pr, $1.location, NULL); current.in_atomic->containing_atomic = last_atomic; } stmt_or_error { atomic_stmt this_atomic = current.in_atomic; this_atomic->stmt = $3; current.in_atomic = this_atomic->containing_atomic; if (current.in_atomic) /* Ignore nested atomics */ $$ = $3; else $$ = CAST(statement, this_atomic); } ; stmt_or_error: stmt | error { $$ = make_error_stmt(); } ; /* Parse a single real statement, not including any labels. */ stmt: compstmt { stmt_count++; $$ = $1; } | expr ';' { stmt_count++; $$ = CAST(statement, new_expression_stmt(pr, $1->location, $1)); } | simple_if ELSE { $1.i = stmt_count; } labeled_stmt { if (extra_warnings && stmt_count == $1.i) warning("empty body in an else-statement"); $$ = $1.stmt; if (is_if_stmt($$)) /* could be an error_stmt */ CAST(if_stmt, $$)->stmt2 = $4; } | simple_if %prec IF { /* This warning is here instead of in simple_if, because we do not want a warning if an empty if is followed by an else statement. Increment stmt_count so we don't give a second error if this is a nested `if'. */ if (extra_warnings && stmt_count++ == $1.i) warning_with_location ($1.stmt->location, "empty body in an if-statement"); $$ = $1.stmt; } | simple_if ELSE error { $$ = make_error_stmt(); } | WHILE { stmt_count++; } '(' expr ')' { check_condition("while", $4); $$ = CAST(conditional_stmt, new_while_stmt(pr, $1.location, $4, NULL)); /* The condition is not "in the loop" for break or continue */ push_loop(CAST(statement, $$)); } labeled_stmt { $$ = CAST(statement, $6); $6->stmt = $7; pop_loop(); } | do_stmt_start '(' expr ')' ';' { $$ = CAST(statement, $1); $1->condition = $3; check_condition("do-while", $3); /* Note that pop_loop should be before the expr to be consistent with while, but GCC is inconsistent. See loop1.c */ pop_loop(); } | do_stmt_start error { $$ = make_error_stmt(); pop_loop(); } | FOR '(' xexpr ';' { stmt_count++; } xexpr ';' { if ($6) check_condition("for", $6); } xexpr ')' { $$ = new_for_stmt(pr, $1.location, $3, $6, $9, NULL); push_loop(CAST(statement, $$)); } labeled_stmt { $$ = CAST(statement, $11); $11->stmt = $12; pop_loop(); } | SWITCH '(' expr ')' { stmt_count++; check_switch($3); $$ = CAST(conditional_stmt, new_switch_stmt(pr, $1.location, $3, NULL)); push_loop(CAST(statement, $$)); } labeled_stmt { $$ = CAST(statement, $5); $5->stmt = $6; pop_loop(); } | BREAK ';' { stmt_count++; $$ = CAST(statement, new_break_stmt(pr, $1.location)); check_break($$); } | CONTINUE ';' { stmt_count++; $$ = CAST(statement, new_continue_stmt(pr, $1.location)); check_continue($$); } | RETURN ';' { stmt_count++; $$ = make_void_return($1.location); } | RETURN expr ';' { stmt_count++; $$ = make_return($1.location, $2); } | ASM_KEYWORD maybe_type_qual '(' expr ')' ';' { stmt_count++; $$ = CAST(statement, new_asm_stmt(pr, $1.location, $4, NULL, NULL, NULL, $2)); } /* This is the case with just output operands. */ | ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ')' ';' { stmt_count++; $$ = CAST(statement, new_asm_stmt(pr, $1.location, $4, $6, NULL, NULL, $2)); } /* This is the case with input operands as well. */ | ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ':' asm_operands ')' ';' { stmt_count++; $$ = CAST(statement, new_asm_stmt(pr, $1.location, $4, $6, $8, NULL, $2)); } /* This is the case with clobbered registers as well. */ | ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ':' asm_operands ':' asm_clobbers ')' ';' { stmt_count++; $$ = CAST(statement, new_asm_stmt(pr, $1.location, $4, $6, $8, $10, $2)); } | GOTO id_label ';' { stmt_count++; $$ = CAST(statement, new_goto_stmt(pr, $1.location, $2)); use_label($2); } | GOTO '*' expr ';' { if (pedantic) pedwarn("ANSI C forbids `goto *expr;'"); fail_in_atomic("goto *"); stmt_count++; $$ = CAST(statement, new_computed_goto_stmt(pr, $1.location, $3)); check_computed_goto($3); } | atomic_stmt | ';' { $$ = CAST(statement, new_empty_stmt(pr, $1.location)); } ; /* Any kind of label, including jump labels and case labels. ANSI C accepts labels only before statements, but we allow them also at the end of a compound statement. */ label: CASE expr_no_commas ':' { $$ = CAST(label, new_case_label(pr, $1.location, $2, NULL)); check_case($$); } | CASE expr_no_commas ELLIPSIS expr_no_commas ':' { $$ = CAST(label, new_case_label(pr, $1.location, $2, $4)); check_case($$); } | DEFAULT ':' { $$ = CAST(label, new_default_label(pr, $1.location)); check_default($$); } | id_label ':' { $$ = CAST(label, $1); define_label($1); } ; /* Either a type-qualifier or nothing. First thing in an `asm' statement. */ maybe_type_qual: /* empty */ { $$ = NULL; } | type_qual ; xexpr: /* empty */ { $$ = NULL; } | expr ; /* These are the operands other than the first string and colon in asm ("addextend %2,%1": "=dm" (x), "0" (y), "g" (*x)) */ asm_operands: /* empty */ { $$ = NULL; } | nonnull_asm_operands ; nonnull_asm_operands: asm_operand | nonnull_asm_operands ',' asm_operand { $$ = asm_operand_chain($1, $3); } ; asm_operand: STRING '(' expr ')' { $$ = new_asm_operand(pr, $1->location, NULL, $1, $3); } | '[' idword ']' STRING '(' expr ')' { $$ = new_asm_operand(pr, $1.location, $2, $4, $6); } ; asm_clobbers: STRING { $$ = $1; } | asm_clobbers ',' STRING { $$ = string_chain($1, $3); } ; /* This is what appears inside the parens in a function declarator. Its value is a list of ..._TYPE nodes. */ parmlist: { pushlevel(TRUE); } parmlist_1 { $$ = $2; /* poplevel() is done when building the declarator */ } ; parmlist_1: parmlist_2 ')' { $$ = $1; } | parms ';' { if (pedantic) pedwarn("ANSI C forbids forward parameter declarations"); allow_parameter_redeclaration($1, TRUE); } parmlist_1 { $$ = declaration_chain($1, $4); } | error ')' { $$ = make_error_decl(); } ; /* This is what appears inside the parens in a function declarator. Is value is represented in the format that grokdeclarator expects. */ parmlist_2: /* empty */ { $$ = NULL; } | ELLIPSIS { $$ = make_error_decl(); /* Gcc used to allow this as an extension. However, it does not work for all targets, and thus has been disabled. Also, since func (...) and func () are indistinguishable, it caused problems with the code in expand_builtin which tries to verify that BUILT_IN_NEXT_ARG is being used correctly. */ error("ANSI C requires a named argument before `...'"); } | parms { $$ = $1; } | parms ',' ELLIPSIS { $$ = declaration_chain($1, CAST(declaration, new_ellipsis_decl(pr, $3.location))); } ; parms: parm | parms ',' parm { $$ = declaration_chain($1, $3); } ; /* A single parameter declaration or parameter type name, as found in a parmlist. */ parm: declspecs_ts xreferror parm_declarator maybe_attribute { $$ = declare_parameter($3, $1, $4); } | declspecs_ts xreferror notype_declarator maybe_attribute { $$ = declare_parameter($3, $1, $4); } | declspecs_ts xreferror absdcl { $$ = declare_parameter($3, $1, NULL); } | declspecs_ts xreferror absdcl1_noea attributes { $$ = declare_parameter($3, $1, $4); } | declspecs_nots xreferror notype_declarator maybe_attribute { $$ = declare_parameter($3, $1, $4); } | declspecs_nots xreferror absdcl { $$ = declare_parameter($3, $1, NULL); } | declspecs_nots xreferror absdcl1_noea attributes { $$ = declare_parameter($3, $1, $4); } ; xreferror: { pending_xref_error(); } ; /* This is used in a function definition where either a parmlist or an identifier list is ok. Its value is a list of ..._TYPE nodes or a list of identifiers. */ parmlist_or_identifiers: { pushlevel(TRUE); } parmlist_or_identifiers_1 { $$ = $2; /* poplevel is done when building the declarator */ } ; parmlist_or_identifiers_1: parmlist_1 | identifiers ')' { $$ = $1; } ; /* A nonempty list of identifiers. */ identifiers: old_parameter { $$ = $1; } | identifiers ',' old_parameter { $$ = declaration_chain($1, $3); } ; old_parameter: IDENTIFIER { $$ = declare_old_parameter($1.location, $1.id); } ; /* A nonempty list of identifiers, including typenames. */ identifiers_or_typenames: id_label { $$ = $1; declare_label($1); } | identifiers_or_typenames ',' id_label { $$ = id_label_chain($3, $1); declare_label($3); } ; /* A possibly empty list of function qualifiers (only one exists so far) */ fn_quals: /* empty */ { $$ = NULL; } | fn_qual { $$ = $1; } ; extension: EXTENSION { $$.location = $1.location; $$.i = pedantic; pedantic = 0; } ; scspec: SCSPEC { $$ = CAST(type_element, new_rid(pr, $1.location, $1.i)); } | DEFAULT { $$ = CAST(type_element, new_rid(pr, $1.location, RID_DEFAULT)); } ; type_qual: TYPE_QUAL { $$ = CAST(type_element, new_qualifier(pr, $1.location, $1.i)); } ; fn_qual: FN_QUAL { $$ = CAST(type_element, new_qualifier(pr, $1.location, $1.i)); } ; type_spec: TYPESPEC { $$ = CAST(type_element, new_rid(pr, $1.location, $1.i)); } ; %% nescc-1.3.4/src/cg_help.c000066400000000000000000000164471177770303300151720ustar00rootroot00000000000000 // The following was generated from cg_help.fig, by exporting as a // gif, and then running hexdump: // hexdump -e '5/4 " 0x%08x," "\n"' cg_help.gif int cg_help_gif[] = { 0x38464947, 0x017c6137, 0x00a100de, 0x00000000, 0xdfffffff, 0x0000dfdf, 0x00002cff, 0x017c0000, 0x020000de, 0xa98f8cfe, 0xa30fe08b, 0x8bdab463, 0xfbbcdeb3, 0x58e2860f, 0xa6442649, 0x2e08f9d4, 0x4cf2a93b, 0xcf8df6d7, 0x7b0ae030, 0x86f491de, 0x022fa2c4, 0xcc972a4c, 0x8c685266, 0x44ce24f6, 0x228d8a44, 0xf7aedcab, 0xc766bc0b, 0x42135453, 0xe0cd174e, 0x570dfbb6, 0x63f4d5a0, 0xebaadc2c, 0xffb880ed, 0xb0e7880f, 0x9380f7b7, 0x18689847, 0xa8e8d8c8, 0x78589881, 0x39291327, 0xb9a8f7d9, 0x597968f9, 0xf9e236c7, 0x7a69c989, 0x0a4a36da, 0xbaa2094a, 0x3a899aca, 0xfb082b4b, 0x73cae8b9, 0xfb5adabb, 0xc8321c0b, 0x31cb9a4b, 0x1b2c5c4c, 0x818cdccc, 0x9c697c9c, 0xbd2d1d01, 0xb0324cec, 0x560d9dcd, 0x5be8ad6d, 0xecae1bb2, 0xfe8db32d, 0x384e6e05, 0x8eee52bd, 0xa1febd8b, 0x3ed55f6e, 0xcf2cf93f, 0x085f2d7f, 0xec97027c, 0x5c67a803, 0xc5087f83, 0x81882bd5, 0x0d3c4420, 0x68abc5cf, 0xfe06a271, 0x1c6d1a89, 0x6146a8c4, 0x43208f80, 0x80b8ec3e, 0x0c4aca23, 0x487c264b, 0x911a65d2, 0xaca80d2b, 0xcca62249, 0xee74be2c, 0xe6b342c4, 0x5ac29c4d, 0xe72934fe, 0x0ca234a8, 0xe0f53286, 0x4a11a953, 0x39aea551, 0xd3e9d389, 0x0ead550d, 0x2bd46aa1, 0x0742ac4f, 0x5615156c, 0x5d3b94ac, 0x17980d09, 0xb3d6a3b4, 0x1bf6d4cf, 0x5bd61699, 0x72277177, 0x58f746eb, 0x0b7f3dde, 0xa316b5ef, 0x7c6e1ead, 0x6c7e06c9, 0x6d993141, 0xcb871843, 0xe5949834, 0xa3218ecb, 0x1a30bbec, 0xa3a32265, 0xb7b77661, 0x81cf6234, 0x3c905ca9, 0xd90bb546, 0x4b9b4ebc, 0xeb35787d, 0x585630b3, 0xd6fb4da3, 0x73b8df9c, 0x1bbceb27, 0x99698ee2, 0x2e0f1add, 0xdcaad5fc, 0x4e8161d0, 0x96f96f6e, 0x1b0d84e6, 0x735d2e3f, 0xb4caeae5, 0x3e8f3f9b, 0xecf5fabd, 0xef7fbbdb, 0xbf8f789e, 0xf32786e6, 0xf6171e4e, 0x1bfee7a7, 0x5dff1fc8, 0xf3852374, 0xed4b7e5d, 0x0b0fd447, 0x8158b770, 0x07d75a01, 0xb8047583, 0x21c83119, 0xaf098eb8, 0x7006a849, 0x0062f60f, 0x51461d87, 0xe2188421, 0xa2390f04, 0x88597839, 0x18516622, 0x74662580, 0xc1b07ee2, 0x92819cf8, 0x58a2f660, 0xd4c8d5d7, 0xf7e0528d, 0xda3c2f61, 0x189012f5, 0x5b15e8f6, 0xa3f52a4c, 0x093e0992, 0xce486865, 0x4194a174, 0x2b53f952, 0xa594ee5c, 0x495e5b96, 0x965f9786, 0x3598a514, 0x3d660909, 0xa694ca6c, 0x89bd2b9a, 0x56674c26, 0x9f9ca714, 0x4890d9dd, 0xa619f674, 0x3992539e, 0xf27c9f95, 0x1da0a793, 0x63a3e785, 0xa81a227f, 0x5a1e28a2, 0x568f721f, 0x9789e92a, 0xa6e96672, 0xe99a45e0, 0xc8a684a4, 0x2670a300, 0x949cea1a, 0xa9a81746, 0xea9aa120, 0x0796ab9a, 0xc4f4a795, 0xd7ada52a, 0xae807a80, 0x2b8af0ef, 0x04bebe7f, 0x62c3af6c, 0xb06cfe59, 0x074ace5b, 0x3b32b5a9, 0x2aca2846, 0xb09e1f69, 0xa16c782e, 0x5bcb4ec9, 0x1b6d57b6, 0x707cb78f, 0x88b5692b, 0x1882ab39, 0x2e4b5e9f, 0x0ab2e664, 0x9aae572e, 0xbbbb6ec4, 0xbc6bbbbd, 0x2dfbcecf, 0xab96f6ba, 0x32feb12e, 0x1ab68301, 0x5e308bfe, 0x5aec1826, 0x0c25e920, 0x45fdb631, 0x16c5714c, 0xc6718c5f, 0x71cc6f1a, 0x0c7f1ec7, 0x8f22c872, 0x26c9724c, 0xca728c9f, 0x72ccaf2a, 0x0cbf2ecb, 0xcf32cc73, 0x36cd734c, 0xcddebb07, 0x70ece5c9, 0xab4963c0, 0x32f8acb3, 0x435a2fac, 0xd045bb47, 0xc981411a, 0x4cf837c0, 0xd74ad38f, 0xf5aff472, 0xd36fc352, 0x35036753, 0xfb4082bc, 0x335bd495, 0x1ed7b552, 0xd1761b89, 0x76819f63, 0x08bb5719, 0x736bcff6, 0x5785b592, 0xdce9fdd7, 0x85adb49d, 0x2df2a5d8, 0x0080deb7, 0x78a2540e, 0xe0b6a637, 0xec4dc539, 0xadf976b3, 0x97840e78, 0xe1e519fe, 0x528e4100, 0x0e5a9961, 0x5f9c9669, 0x733a36fe, 0xe779f901, 0x42fa1358, 0x5e8cd9e2, 0x478de4e3, 0xc989b8c6, 0xec64beb1, 0x3a8ec246, 0x433ba111, 0xcbb68dbb, 0x61ee712e, 0xa0966ecf, 0xd278efae, 0xd6efc8f1, 0x0bbfcefb, 0xb5f3c728, 0xf34c0ea9, 0x901f29ac, 0x0f43d215, 0x619ef599, 0xc295bcbf, 0xf79ac54f, 0x3dcf6eee, 0xedf7e35e, 0xa1adf999, 0xd9f83e9f, 0x5d3ee63f, 0x3ea81ff2, 0x4699de81, 0x14f829bd, 0x1143a6af, 0xd11648a9, 0x74668555, 0x45fcadbb, 0x0d52b64f, 0xa2e7f87d, 0x82085115, 0x8adb3b91, 0x1040808a, 0x4682e80d, 0x2a8ee020, 0x35308fe8, 0x541e4290, 0x88248844, 0x286e1027, 0x20e1be69, 0x88547469, 0x84a7de13, 0xec215216, 0xffaa5058, 0x02869060, 0x76422173, 0xc989b327, 0xe2248670, 0x05562c61, 0x10b1e9c3, 0x983b406e, 0xb0a896b1, 0x89d14226, 0xfe16944f, 0x8f089915, 0x8b315586, 0x17228c5a, 0xf54608a7, 0xfc85f0e8, 0x8046211b, 0x6cf53318, 0x341d8890, 0x574ab362, 0xc3163744, 0x8e58e486, 0x9f38c615, 0x8d62b224, 0x8b60c8bc, 0x13b7f8e8, 0x648d90b4, 0xa0ace084, 0x0090c723, 0x334e9032, 0x39130be3, 0x30ce2193, 0xa45c1447, 0x43e304f6, 0x8e71f801, 0x03e093f9, 0xa2c9692b, 0x7c30d24c, 0xd8fae089, 0xdc114a17, 0xfcab7b2f, 0x71452a60, 0x3276544a, 0x257ba996, 0x3c39685a, 0x0cb2e163, 0xfc2554b6, 0x58c92780, 0xad8e91a2, 0x76f4484c, 0x161b4c39, 0xfbd18df3, 0x47faf225, 0x4f86674c, 0x664cb47b, 0x9589ab34, 0x97a58e65, 0x4d25392c, 0x6843f8e0, 0x6b9b5286, 0x99349471, 0x0a6ecdc9, 0xd4e42faf, 0xd953389d, 0x63fa5cce, 0x657cef54, 0x49808f3c, 0x9b935924, 0x36938ced, 0x7fce99f7, 0x0098ab02, 0xa12ce74d, 0xd2702c94, 0x504aa0ca, 0x16fed468, 0x31cc4d27, 0x93ca28b4, 0x54eab868, 0x133689cf, 0x9b2835a3, 0xd1aa3312, 0xa2cf3e66, 0xd016cb58, 0x9336ca42, 0xba305492, 0xf54a293a, 0x167750e1, 0x850a2174, 0xe1d94be2, 0x94cd6451, 0xe2e98a91, 0xb4c0e34d, 0x0bb4ba37, 0x2083e1cb, 0xf809ba7f, 0x483b4dec, 0x9b108605, 0x4aa8d50a, 0xad54aa75, 0x8aaf55aa, 0x756aacd5, 0xaaed5cab, 0xd60abf57, 0xac758ab0, 0x596b2d64, 0x37d66a87, 0xec1bf4ac, 0xd54a6b49, 0xe98587f8, 0x0d6ead74, 0xba8d4e57, 0xc90abb53, 0xd7dd75a7, 0x84fa6d5e, 0xaf2ea698, 0x50abbd55, 0xb335da41, 0xd0a4b5f5, 0xdaba6c02, 0x1aaf5746, 0x9d1da1f6, 0x3ab3645c, 0x4da90859, 0xac58b1b0, 0x59797ef6, 0xb3cd5ace, 0x2fa32d99, 0xbeb6e9cf, 0xba21d68a, 0xdcda6d40, 0xc9f9daba, 0x5d32b5cb, 0x084365d4, 0xf6c44d52, 0xd2bdb356, 0xa3c11b6d, 0x31e8ba86, 0x0dd1a5bb, 0x5b99fee9, 0xb095e42e, 0x3b1d454b, 0xecb81b69, 0x8eb99724, 0x712f27b8, 0x3ae4ceb7, 0xa2d73ae1, 0xbba0d92e, 0xcfad154d, 0x61c392bb, 0x2668b114, 0xaf862436, 0x3666f2b2, 0xe9258bc1, 0xc3be642e, 0x8c5e2fad, 0xbefcdf85, 0x83c9984f, 0xabe4e52f, 0x97dafbdf, 0x0788562d, 0x348bfd71, 0xbb53216c, 0x58065d0d, 0x485ebbf4, 0x08707830, 0x71352ffe, 0x3843de49, 0x0e10c378, 0x8bf6d62e, 0x182f0bcc, 0x70ee0f1d, 0x6196a57e, 0xbe385438, 0x3e25dcba, 0x01e251bd, 0x4ebd62cb, 0x56fd9bfa, 0x6260e16c, 0xe61bc493, 0xbc7f8cd1, 0x78071ac5, 0xb17e2e4c, 0x47a806a7, 0x69233674, 0x93443028, 0x2742c173, 0x471516fd, 0x0d053246, 0x58f022c8, 0xbc3bcb15, 0x6cb321f2, 0xb97f2db7, 0xf1d1a6cb, 0x9fac922d, 0xc455a25e, 0x81f340c4, 0x5766e598, 0x83a8f2da, 0xcca22424, 0xd4e797ac, 0xba0a9f87, 0x49211e23, 0xe3382ffe, 0x166a3387, 0xc949a0a2, 0xb2174129, 0xb469f08c, 0xe90d1fa3, 0xd25a4b48, 0xa54d23fa, 0x389b257c, 0xe89ed8b3, 0xf474f3c1, 0xff4ae89c, 0xee7dcf90, 0xc741a895, 0xfa0336c7, 0xaf66a41d, 0xeab335a7, 0x831a287e, 0x9af399ba, 0xb8676c5b, 0x1e13fabc, 0x833c2502, 0x1f51e630, 0xf244cf34, 0xb8475475, 0xb298dac9, 0x99a629c8, 0xe38c7375, 0xd9f55e48, 0x7bb61de1, 0x72ed4ab1, 0x13c30f8a, 0xabb45a9e, 0x6afe6cbd, 0x63e4db35, 0xfb31b5f3, 0x7b6e596d, 0x1a0ecd7c, 0x4c7b53b9, 0xb8b56f71, 0x7675c6c6, 0xebee9b25, 0x5fdee45e, 0xfcbfb6cd, 0xd1c16ddd, 0xa6fb981b, 0xce0758a7, 0xb6fa79db, 0xb8437add, 0x96a9f238, 0xe1d48729, 0x78360249, 0x8a528e25, 0x1a03e523, 0x3b5a6e8f, 0xca84b85e, 0x053fe30f, 0x6052b6b9, 0x967ac1f2, 0x9b7aa7a6, 0xd52e49c9, 0xe291a397, 0x642c2f30, 0x35589e6b, 0xa0dc32cd, 0x41b9d739, 0x95eb7b38, 0x8e52967f, 0x8b1c30d5, 0x963af42e, 0xed81e90e, 0x0e92d139, 0x315ec351, 0xfa81ed15, 0x374adad9, 0x609d5b3a, 0x0141b75a, 0x003b0000 }; nescc-1.3.4/src/cg_help.fig000066400000000000000000000023011177770303300154750ustar00rootroot00000000000000#FIG 3.2 Landscape Center Metric A4 100.00 Single -2 1200 2 0 32 #bebebe 1 2 0 2 0 32 50 0 30 6.000 1 0.0000 1237 3375 563 450 1800 3825 675 2925 1 2 0 2 0 32 50 0 30 6.000 1 0.0000 1237 2250 563 450 1800 2700 675 1800 1 2 0 2 0 32 50 0 30 6.000 1 0.0000 1237 1125 563 450 1800 1575 675 675 1 2 0 2 0 32 50 0 30 6.000 1 0.0000 5512 1125 563 450 6075 1575 4950 675 1 2 0 2 0 32 50 0 30 6.000 1 0.0000 5512 2250 563 450 6075 2700 4950 1800 1 2 0 2 0 32 50 0 30 6.000 1 0.0000 5512 3375 563 450 6075 3825 4950 2925 2 1 1 2 0 7 50 0 -1 6.000 0 0 -1 1 0 2 1 1 2.00 120.00 240.00 1800 2250 4950 2250 2 1 0 2 0 7 50 0 -1 0.000 0 0 -1 1 0 2 1 1 2.00 120.00 240.00 1800 1125 4950 1125 2 1 0 2 0 7 50 0 -1 6.000 0 0 7 1 0 2 1 1 2.00 120.00 240.00 1800 3375 4950 3375 4 1 0 50 0 0 20 0.0000 4 195 675 3240 3285 func:f\001 4 1 1 50 0 0 20 0.0000 4 195 180 1233 3469 E\001 4 1 1 50 0 0 20 0.0000 4 195 195 1233 2344 C\001 4 1 1 50 0 0 20 0.0000 4 195 210 1236 1212 A\001 4 1 1 50 0 0 20 0.0000 4 195 90 3240 1035 I\001 4 1 1 50 0 0 20 0.0000 4 195 105 3240 2160 J\001 4 1 1 50 0 0 20 0.0000 4 195 210 5504 2340 D\001 4 1 1 50 0 0 20 0.0000 4 195 195 5509 1219 B\001 4 1 1 50 0 0 20 0.0000 4 195 165 5504 3465 F\001 nescc-1.3.4/src/configure000077500000000000000000006167651177770303300153450ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for nesc 1.3.4. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='nesc' PACKAGE_TARNAME='nesc' PACKAGE_VERSION='1.3.4' PACKAGE_STRING='nesc 1.3.4' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_unique_file="c-parse.y" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LTLIBICONV LIBICONV NEED_REGEX_FALSE NEED_REGEX_TRUE NEED_FNMATCH_FALSE NEED_FNMATCH_TRUE LIBOBJS ALLOCA EGREP GREP CPP USING_RCC_FALSE USING_RCC_TRUE RANLIB am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC LDFLAGS CC CFLAGS CPPFLAGS host_os host_vendor host_cpu host build_os build_vendor build_cpu build am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_dependency_tracking with_gnu_ld enable_rpath with_libiconv_prefix ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures nesc 1.3.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/nesc] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of nesc 1.3.4:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-rpath do not hardcode runtime library paths Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld default=no --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF nesc configure 1.3.4 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by nesc $as_me 1.3.4, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in ../config-aux "$srcdir"/../config-aux; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in ../config-aux \"$srcdir\"/../config-aux" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ac_config_headers="$ac_config_headers autoconf.h" am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='nesc' VERSION='1.3.4' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' : ${CFLAGS=-g} # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CC-cc} accepts -Wall" >&5 $as_echo_n "checking whether ${CC-cc} accepts -Wall... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wall" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } CFLAGS="$save_CFLAGS" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${CC-cc} accepts -Wno-long-double" >&5 $as_echo_n "checking whether ${CC-cc} accepts -Wno-long-double... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wno-long-double" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } CFLAGS="$save_CFLAGS" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using rcc" >&5 $as_echo_n "checking whether we are using rcc... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { void * traditional pointer; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : RCC=yes else RCC=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test "$RCC" = yes; then USING_RCC_TRUE= USING_RCC_FALSE='#' else USING_RCC_TRUE='#' USING_RCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RCC" >&5 $as_echo "$RCC" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 $as_echo_n "checking size of long long... " >&6; } if ${ac_cv_sizeof_long_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 $as_echo "$ac_cv_sizeof_long_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 $as_echo_n "checking size of void *... " >&6; } if ${ac_cv_sizeof_void_p+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then : else if test "$ac_cv_type_void_p" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (void *) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_void_p=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 $as_echo "$ac_cv_sizeof_void_p" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_VOID_P $ac_cv_sizeof_void_p _ACEOF ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 $as_echo_n "checking for working alloca.h... " >&6; } if ${ac_cv_working_alloca_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_working_alloca_h=yes else ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 $as_echo "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then $as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 $as_echo_n "checking for alloca... " >&6; } if ${ac_cv_func_alloca_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # ifdef HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ void *alloca (size_t); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_alloca_works=yes else ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 $as_echo "$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then $as_echo "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext $as_echo "#define C_ALLOCA 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } if ${ac_cv_os_cray+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then : ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 $as_echo "$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 $as_echo_n "checking stack direction for C alloca... " >&6; } if ${ac_cv_c_stack_direction+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_c_stack_direction=0 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_stack_direction=1 else ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 $as_echo "$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi ac_fn_c_check_func "$LINENO" "strtold" "ac_cv_func_strtold" if test "x$ac_cv_func_strtold" = xyes; then : $as_echo "#define HAVE_STRTOLD 1" >>confdefs.h else case " $LIBOBJS " in *" strtold.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtold.$ac_objext" ;; esac fi for ac_func in poll realpath mmap do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in regcomp do : ac_fn_c_check_func "$LINENO" "regcomp" "ac_cv_func_regcomp" if test "x$ac_cv_func_regcomp" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_REGCOMP 1 _ACEOF REGCOMP=yes fi done for ac_func in fnmatch do : ac_fn_c_check_func "$LINENO" "fnmatch" "ac_cv_func_fnmatch" if test "x$ac_cv_func_fnmatch" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FNMATCH 1 _ACEOF FNMATCH=yes fi done if test "$FNMATCH" != yes; then NEED_FNMATCH_TRUE= NEED_FNMATCH_FALSE='#' else NEED_FNMATCH_TRUE='#' NEED_FNMATCH_FALSE= fi if test "$REGCOMP" != yes; then NEED_REGEX_TRUE= NEED_REGEX_FALSE='#' else NEED_REGEX_TRUE='#' NEED_REGEX_FALSE= fi if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 $as_echo_n "checking for ld used by GCC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$acl_cv_path_LD" if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${acl_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then acl_cv_prog_gnu_ld=yes else acl_cv_prog_gnu_ld=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if ${acl_cv_rpath+:} false; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" hardcode_direct="$acl_cv_hardcode_direct" hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi fi LIBICONV= LTLIBICONV= INCICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if ${am_cv_func_iconv+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 $as_echo_n "checking for iconv declaration... " >&6; } if ${am_cv_proto_iconv+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_cv_proto_iconv_arg1="" else am_cv_proto_iconv_arg1="const" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" fi am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_t:- }$am_cv_proto_iconv" >&5 $as_echo "${ac_t:- }$am_cv_proto_iconv" >&6; } cat >>confdefs.h <<_ACEOF #define ICONV_CONST $am_cv_proto_iconv_arg1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strtold declaration in " >&5 $as_echo_n "checking for strtold declaration in ... " >&6; } if ${rc_cv_strtold_declared+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "\" >/dev/null 2>&1; then : rc_cv_strtold_declared=yes else rc_cv_strtold_declared=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $rc_cv_strtold_declared" >&5 $as_echo "$rc_cv_strtold_declared" >&6; } if test "$rc_cv_strtold_declared" = yes; then $as_echo "#define HAVE_STRTOLD_DECLARED 1" >>confdefs.h fi ac_config_files="$ac_config_files Makefile libcompat/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USING_RCC_TRUE}" && test -z "${USING_RCC_FALSE}"; then as_fn_error $? "conditional \"USING_RCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NEED_FNMATCH_TRUE}" && test -z "${NEED_FNMATCH_FALSE}"; then as_fn_error $? "conditional \"NEED_FNMATCH\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NEED_REGEX_TRUE}" && test -z "${NEED_REGEX_FALSE}"; then as_fn_error $? "conditional \"NEED_REGEX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by nesc $as_me 1.3.4, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ nesc config.status 1.3.4 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "autoconf.h") CONFIG_HEADERS="$CONFIG_HEADERS autoconf.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "libcompat/Makefile") CONFIG_FILES="$CONFIG_FILES libcompat/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi nescc-1.3.4/src/configure.in000066400000000000000000000034531177770303300157270ustar00rootroot00000000000000# This file is part of the nesC compiler. # # This file is derived from the RC Compiler. It is thus # Copyright (C) 2000-2001 The Regents of the University of California. # Changes for nesC are # Copyright (C) 2002 Intel Corporation # # The attached "nesC" software is provided to you under the terms and # conditions of the GNU General Public License Version 2 as published by the # Free Software Foundation. # # nesC 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 nesC; see the file COPYING. If not, write to # the Free Software Foundation, 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. dnl -*- m4 -*- # force autoconf 2.5 on Debian systems AC_PREREQ(2.50) AC_INIT(nesc, 1.3.4) AC_CONFIG_AUX_DIR(../config-aux) AC_CONFIG_SRCDIR(c-parse.y) AM_CONFIG_HEADER(autoconf.h) AM_INIT_AUTOMAKE : ${CFLAGS=-g} AC_CANONICAL_HOST AC_SUBST(CPPFLAGS) AC_SUBST(CFLAGS) AC_PROG_CC AC_PROG_RANLIB AC_PROG_MAKE_SET CPARSE_TRY_CFLAGS(-Wall) CPARSE_TRY_CFLAGS(-Wno-long-double) AC_MSG_CHECKING(whether we are using rcc) AC_TRY_COMPILE([], [void * traditional pointer;], RCC=yes, RCC=no) AM_CONDITIONAL(USING_RCC, test "$RCC" = yes) AC_MSG_RESULT($RCC) AC_CHECK_SIZEOF(long long) AC_CHECK_SIZEOF(void *) AC_FUNC_ALLOCA AC_REPLACE_FUNCS(strtold) AC_CHECK_FUNCS(poll realpath mmap) AC_CHECK_FUNCS(regcomp, [ REGCOMP=yes ]) AC_CHECK_FUNCS(fnmatch, [ FNMATCH=yes ]) AM_CONDITIONAL(NEED_FNMATCH, test "$FNMATCH" != yes) AM_CONDITIONAL(NEED_REGEX, test "$REGCOMP" != yes) AM_ICONV RC_CHECK_DECL(strtold, stdlib.h) AC_OUTPUT( Makefile libcompat/Makefile ) nescc-1.3.4/src/constants.c000066400000000000000000000363361177770303300156040ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* ASSUME: (float)(long double)f == f (double)(long double)d == d */ /* XXX: overflow detection (signed ints only, gcc doesn't do reals) initialised arrays are missing their size */ /* Note: legal ops on complex are: +, -, *, /, ==, !=, &&, ||, __real__, __imag__, ~ (conjugate) */ #define _ISOC99_SOURCE #include "parser.h" #include "constants.h" #include "c-parse.h" #include "semantics.h" #include "cval.h" #include "nesc-magic.h" #include #include "AST_utils.h" static known_cst new_known_cst(region r, type t, cval c) { known_cst kc = ralloc(parse_region, struct known_cst); kc->type = t; kc->cval = c; return kc; } known_cst make_unknown_cst(cval c, type t) { cval cst; if (cval_isaddress(c)) cst = cval_unknown_address; else cst = cval_unknown_number; return new_known_cst(parse_region, t, cst); } known_cst make_cst(cval c, type t) { if (cval_istop(c)) return NULL; return new_known_cst(parse_region, t, cval_cast(c, t)); } known_cst make_address_cst(data_declaration ddecl, label_declaration ldecl, largest_int offset, type t) { return make_cst(make_cval_address(ddecl, ldecl, offset), t); } known_cst make_unsigned_cst(largest_uint x, type t) { return make_cst(make_cval_unsigned(x, t), t); } known_cst make_signed_cst(largest_int x, type t) { return make_cst(make_cval_signed(x, t), t); } known_cst cast_constant(known_cst c, type to) { if (type_equal(c->type, to)) return c; return make_cst(cval_cast(c->cval, to), to); } known_cst fold_label_address(expression e) { return make_address_cst(NULL, CAST(label_address, e)->id_label->ldecl, 0, e->type); } known_cst fold_sizeof(expression e, type stype) { if (type_size_cc(stype)) return make_cst(type_size(stype), e->type); else return NULL; } known_cst fold_alignof(expression e, type atype) { if (type_has_size(atype)) return make_cst(type_alignment(atype), e->type); else /* compile-time error, alignof incomplete type */ return make_unsigned_cst(1, e->type); } known_cst fold_cast(expression e) { cast cc = CAST(cast, e); if (cc->arg1->cst && !type_void(e->type)) return cast_constant(cc->arg1->cst, e->type); else return NULL; } /* +, -, ! and ~ only */ known_cst fold_unary(expression e) { unary u = CAST(unary, e); known_cst arg = u->arg1->cst; type t = u->type; if (arg) { switch (u->kind) { case kind_unary_plus: /* Note that this allows +(int)&x to be a constant... This is consistent with gcc */ return cast_constant(arg, t); /* essentially a no-op */ case kind_unary_minus: return make_cst(cval_negate(cval_cast(arg->cval, t)), t); case kind_not: return make_cst(cval_not(cval_cast(arg->cval, t)), t); case kind_bitnot: return make_cst(cval_bitnot(cval_cast(arg->cval, t)), t); case kind_conjugate: return make_cst(cval_conjugate(cval_cast(arg->cval, t)), t); case kind_realpart: if (!type_complex(u->arg1->type)) return cast_constant(arg, t); else return make_cst(cval_realpart(cval_cast(arg->cval, t)), t); case kind_imagpart: if (!type_complex(u->arg1->type)) return make_cst(cval_cast(cval_zero, t), t); else return make_cst(cval_imagpart(cval_cast(arg->cval, t)), t); default: assert(0); break; } } return NULL; } /* XXX: overflow */ static known_cst fold_sub(type restype, known_cst c1, known_cst c2) { type t1 = c1->type, t2 = c2->type, basetype, ct; cval s = make_cval_unsigned(1, size_t_type), res; basetype = type_pointer(t1) ? t1 : type_pointer(t2) ? t2 : NULL; if (basetype) { basetype = type_points_to(basetype); if (!type_size_cc(basetype)) return NULL; s = cval_cast(type_size(basetype), size_t_type); ct = intptr_type; } else ct = restype; s = cval_cast(s, ct); if (type_pointer(t1) && type_pointer(t2)) res = cval_divide(cval_cast(cval_sub(cval_cast(c1->cval, ct), cval_cast(c2->cval, ct)), ct), s); else res = cval_sub(cval_cast(c1->cval, ct), cval_divide(cval_cast(c2->cval, ct), s)); return make_cst(res, restype); } /* XXX: overflow */ known_cst fold_add(type restype, known_cst c1, known_cst c2) { type t1 = c1->type, t2 = c2->type, ct; cval s = make_cval_unsigned(1, size_t_type); if (type_pointer(t2)) { known_cst ctmp; type ttmp; ctmp = c1; c1 = c2; c2 = ctmp; ttmp = t1; t1 = t2; t2 = ttmp; } if (type_pointer(t1)) { type basetype = type_points_to(t1); if (!type_size_cc(basetype)) return NULL; s = cval_cast(type_size(basetype), size_t_type); ct = intptr_type; } else ct = restype; return make_cst(cval_add(cval_cast(c1->cval, ct), cval_times(cval_cast(c2->cval, ct), cval_cast(s, ct))), restype); } known_cst fold_binary(type t, expression e) { binary b = CAST(binary, e); known_cst c1 = b->arg1->cst, c2 = b->arg2->cst; type t1 = type_default_conversion(b->arg1->type), t2 = type_default_conversion(b->arg2->type); if (b->kind == kind_andand || b->kind == kind_oror) { if (c1) { if (constant_knownbool(c1)) { bool c1val = constant_boolvalue(c1); if (b->kind == kind_andand ? !c1val : c1val) return make_signed_cst(c1val, t); } if (constant_unknown_number(c1)) return make_unknown_cst(cval_unknown_number, t); } if (c1 && c2) { if (constant_knownbool(c2)) { bool c2val = constant_boolvalue(c2); if (b->kind == kind_andand ? !c2val : c2val) return make_signed_cst(c2val, t); } if (constant_unknown_number(c2)) return make_unknown_cst(cval_unknown_number, t); } } else if (c1 && c2) { cval cv1 = c1->cval, cv2 = c2->cval; switch (b->kind) { case kind_plus: case kind_array_ref: return fold_add(t, c1, c2); case kind_minus: return fold_sub(t, c1, c2); case kind_times: case kind_divide: case kind_modulo: case kind_lshift: case kind_rshift: case kind_bitand: case kind_bitor: case kind_bitxor: { cval res; cv1 = cval_cast(cv1, t); cv2 = cval_cast(cv2, t); switch (b->kind) { case kind_times: res = cval_times(cv1, cv2); break; case kind_divide: res = cval_divide(cv1, cv2); break; case kind_modulo: res = cval_modulo(cv1, cv2); break; case kind_lshift: res = cval_lshift(cv1, cv2); break; case kind_rshift: res = cval_rshift(cv1, cv2); break; case kind_bitand: res = cval_bitand(cv1, cv2); break; case kind_bitor: res = cval_bitor(cv1, cv2); break; case kind_bitxor: res = cval_bitxor(cv1, cv2); break; default: abort(); return NULL; } return make_cst(res, t); } case kind_eq: case kind_ne: case kind_leq: case kind_geq: case kind_lt: case kind_gt: { cval res; type ct; /* Pointers win. */ if (type_pointer(t1) || type_pointer(t2)) ct = intptr_type; else ct = common_type(t1, t2); cv1 = cval_cast(cv1, ct); cv2 = cval_cast(cv2, ct); switch (b->kind) { case kind_eq: res = cval_eq(cv1, cv2); break; case kind_ne: res = cval_ne(cv1, cv2); break; case kind_leq: res = cval_leq(cv1, cv2); break; case kind_geq: res = cval_geq(cv1, cv2); break; case kind_lt: res = cval_lt(cv1, cv2); break; case kind_gt: res = cval_gt(cv1, cv2); break; default: abort(); return NULL; } return make_cst(res, t); } default: assert(0); return NULL; } } return NULL; } known_cst fold_conditional(expression e) { conditional c = CAST(conditional, e); known_cst cond = c->condition->cst; if (cond) { expression arg1 = c->arg1 ? c->arg1 : c->condition; known_cst kc1 = arg1->cst, kc2 = c->arg2->cst; if (constant_knownbool(cond)) { expression value = constant_boolvalue(cond) ? arg1 : c->arg2; e->static_address = value->static_address; if (value->cst) return cast_constant(value->cst, e->type); else return NULL; } else if (constant_unknown_number(cond) && kc1 && kc2) /* Faced with an unknown condition and two constant arguments, we return an unknown constant. Unknown number if both arg1 and arg2 are unknown numbers, an unknown address otherwise */ return make_unknown_cst(cval_isaddress(kc1->cval) ? kc1->cval : kc2->cval, e->type); } return NULL; } known_cst fold_function_call(expression e, int pass) { function_call fce = CAST(function_call, e); if (call_to(builtin_constant_p, fce) && fce->args) return make_signed_cst(fce->args->cst != NULL, int_type); return fold_magic(fce, pass); } known_cst fold_identifier(expression e, data_declaration decl, int pass) { if (decl->kind == decl_constant) // We don't know template arg values at parse time return pass == 0 && decl->substitute ? make_unknown_cst(type_real(e->type) ? cval_unknown_number : cval_unknown_address, e->type) : decl->value; else return NULL; } known_cst foldaddress_identifier(expression e, data_declaration decl) { if ((decl->kind == decl_function && decl->ftype != function_nested) || (decl->kind == decl_variable && !decl->islocal) || decl->kind == decl_magic_string) return make_address_cst(decl, NULL, 0, make_pointer_type(e->type)); else return NULL; } known_cst foldaddress_string(string s) { return make_address_cst(s->ddecl, NULL, 0, s->type); } known_cst foldaddress_field_ref(expression e) { field_ref fref = CAST(field_ref, e); field_declaration fdecl = fref->fdecl; known_cst object = fref->arg1->static_address; cval field_offset; type pftype; if (!object || cval_istop(fdecl->offset) || !cval_istop(fdecl->bitwidth)) return NULL; if (constant_unknown(object)) return make_unknown_cst(object->cval, object->type); pftype = make_pointer_type(fdecl->type); field_offset = cval_divide(fdecl->offset, cval_bitsperbyte); /* Conceivably, size_t could be smaller than pointers. So we cast the offset to the pointer-to-field type (we are assuming that is the same size as the pointer to base-struct type) */ return make_cst(cval_add(object->cval, cval_cast(field_offset, pftype)), pftype); } #ifndef HAVE_STRTOLD #define strtold strtod #endif lexical_cst fold_lexical_real(type realtype, location loc, cstring tok) { lexical_cst c = new_lexical_cst(parse_region, loc, tok); cval realvalue = make_cval_float(strtold(tok.data, NULL)); if (type_complex(realtype)) realvalue = make_cval_complex(cval_cast(cval_zero, make_base_type(realtype)), realvalue); c->cst = make_cst(realvalue, realtype); c->type = realtype; return c; } lexical_cst fold_lexical_char(location loc, cstring tok, bool wide_flag, int charvalue) { lexical_cst c = new_lexical_cst(parse_region, loc, tok); type ctype = wide_flag ? wchar_type : int_type; c->type = ctype; c->cst = make_cst(type_unsigned(ctype) ? make_cval_unsigned(charvalue, ctype) : make_cval_signed(charvalue, ctype), ctype); return c; } string fold_lexical_string(location loc, string_cst components, cstring value, bool wide_flag) { data_declaration sdecl = declare_string(NULL, value, wide_flag); string s = new_string(parse_region, loc, components, sdecl); s->type = sdecl->type; s->static_address = foldaddress_string(s); s->lvalue = TRUE; return s; } lexical_cst fold_lexical_int(type itype, location loc, cstring tok, bool iscomplex, largest_uint intvalue, bool overflow) { lexical_cst c = new_lexical_cst(parse_region, loc, tok); cval cv; if (overflow) { warning_with_location(loc, "integer constant out of range"); itype = unsigned_long_long_type; } else { /* Do some range checks */ if (!uint_inrange(intvalue, itype)) { if (uint_inrange(intvalue, unsigned_int_type)) { warning_with_location(loc, "decimal constant is so large that it is unsigned"); itype = unsigned_int_type; } /* These other cases cause no warnings */ else if (uint_inrange(intvalue, long_type)) itype = long_type; else if (uint_inrange(intvalue, unsigned_long_type)) itype = unsigned_long_type; else if (uint_inrange(intvalue, long_long_type)) itype = long_long_type; else if (uint_inrange(intvalue, unsigned_long_long_type)) itype = unsigned_long_long_type; } } cv = type_unsigned(itype) ? make_cval_unsigned(intvalue, itype) : make_cval_signed(intvalue, itype); if (iscomplex) { cv = make_cval_complex(cval_cast(cval_zero, itype), cv); itype = make_complex_type(itype); } c->type = itype; c->cst = make_cst(cv, itype); return c; } bool definite_null(expression e) { return (type_integer(e->type) || (type_pointer(e->type) && type_void(type_points_to(e->type)))) && definite_zero(e); } bool definite_zero(expression e) { return e->cst && is_zero_constant(e->cst); } bool is_zero_constant(known_cst c) { return cval_knownbool(c->cval) && !constant_boolvalue(c); } /* Print a warning if a constant expression had overflow in folding. Invoke this function on every expression that the language requires to be a constant expression. */ void constant_overflow_warning(known_cst c) { } bool check_constant_once(expression e, cst_kind k) /* Effects: We want to check whether e is a constant, and possibly for valid constant values, exactly once (to avoid repeated errors and warnings) over our multiple constant folding passes. Additionally, we can't check unknown constants until their value is known. We can rely on the following: - a non-constant will not become constant - we assume, for checking purposes, that a constant's kind (numerical vs address) will not change (this in some sense untrue, as in: ? :
but we treat that as
for checking purposes) - a known constant will maintain its value - an unknown constant will become either non-constant or a known constant Additionally, if the constant kind does not match k, we can check it immediately (presumably to report some error). check_constant_once supports this by returning TRUE exactly once, when its possible to check e's value Returns: TRUE the first time !e->cst || e->cst && !constant_unkown(e) || e->cst && e->cst does not match k */ { if (e->cst_checked) return FALSE; if (e->cst && constant_unknown(e->cst)) /* Unknown constant. We can't check yet it if matches k */ if (k == cst_any || (k == cst_numerical && constant_unknown_number(e->cst)) || (k == cst_address && constant_address(e->cst))) return FALSE; e->cst_checked = TRUE; return TRUE; } nescc-1.3.4/src/constants.h000066400000000000000000000137271177770303300156100ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Constants come in three kinds: - "unknown": value is completely unknown (constant_unknown) - "address": value is the address of some global symbol and an offset (constant_address) - "value": known value (integer, floating point) */ #ifndef CONSTANTS_H #define CONSTANTS_H struct known_cst { type type; cval cval; }; known_cst make_unknown_cst(cval c, type t); known_cst make_cst(cval c, type t); known_cst make_address_cst(data_declaration ddecl, label_declaration ldecl, largest_int offset, type t); known_cst make_signed_cst(largest_int x, type t); known_cst make_unsigned_cst(largest_uint x, type t); known_cst cast_constant(known_cst c, type to); lexical_cst fold_lexical_int(type itype, location loc, cstring tok, bool iscomplex, largest_uint intvalue, bool overflow); lexical_cst fold_lexical_real(type realtype, location loc, cstring tok); /* XXX: What's the right type for charvalue ? (must hold wchar_t or int) */ lexical_cst fold_lexical_char(location loc, cstring tok, bool wide_flag, int charvalue); string fold_lexical_string(location loc, string_cst components, cstring value, bool wide_flag); known_cst fold_label_address(expression e); known_cst fold_sizeof(expression e, type stype); known_cst fold_alignof(expression e, type atype); known_cst fold_cast(expression e); known_cst fold_unary(expression e); known_cst fold_binary(type restype, expression e); known_cst fold_conditional(expression e); known_cst fold_function_call(expression e, int pass); known_cst fold_identifier(expression e, data_declaration decl, int pass); known_cst fold_add(type restype, known_cst c1, known_cst c2); known_cst foldaddress_identifier(expression e, data_declaration decl); known_cst foldaddress_string(string s); known_cst foldaddress_field_ref(expression e); bool definite_null(expression e); bool definite_zero(expression e); bool is_zero_constant(known_cst c); /* Print a warning if a constant expression had overflow in folding. Invoke this function on every expression that the language requires to be a constant expression. Note the ANSI C standard says it is erroneous for a constant expression to overflow. */ void constant_overflow_warning(known_cst c); /*bool constant_address(known_cst c);*/ #define constant_address(c) cval_isaddress((c)->cval) /* Returns: TRUE if c is an address constant */ /*bool constant_unknown(known_cst c);*/ #define constant_unknown(c) cval_isunknown((c)->cval) /* Returns: TRUE if c is a constant whose value is not yet known */ /*bool constant_unknown_number(known_cst c);*/ #define constant_unknown_number(c) cval_isunknown_number((c)->cval) /* Returns: TRUE if c is a numeric constant whose value is not yet known */ /*bool constant_integral(known_cst c);*/ #define constant_integral(c) cval_isinteger((c)->cval) /* Returns: TRUE if c is an integer constant (signed or unsigned) */ /*bool constant_float(known_cst c);*/ #define constant_float(c) (cval_isfloating((c)->cval)) /* Returns: TRUE if c is a floating-point constant */ /*largest_uint constant_uint_value(known_cst c);*/ #define constant_uint_value(c) cval_uint_value((c)->cval) /* Returns: Value of c as an unsigned integer. Requires: see cval_uint_value */ /*largest_int constant_sint_value(known_cst c);*/ #define constant_sint_value(c) cval_sint_value((c)->cval) /* Returns: Value of c as an unsigned integer. Requires: see cval_sint_value */ /*long double constant_float_value(known_cst c);*/ #define constant_float_value(c) cval_float_value((c)->cval) /* Returns: Value of c as an unsigned integer. Requires: see cval_float_value */ /*bool constant_knownbool(known_cst c);*/ /* Returns: TRUE if the truth-value of c can be determined (use constant_boolvalue to get that value) */ #define constant_knownbool(c) cval_knownbool((c)->cval) /*bool cval_boolvalue(cval c);*/ /* Returns: TRUE if c is a non-zero constant Requires: cval_knownbool(c) */ #define constant_boolvalue(c) cval_boolvalue((c)->cval) typedef enum { cst_any, cst_numerical, cst_address } cst_kind; bool check_constant_once(expression e, cst_kind k); /* Effects: We want to check whether e is a constant, and possibly for valid constant values, exactly once (to avoid repeated errors and warnings) over our multiple constant folding passes. Additionally, we can't check unknown constants until their value is known. We can rely on the following: - a non-constant will not become constant - we assume, for checking purposes, that a constant's kind (numerical vs address) will not change (this in some sense untrue, as in: ? :
but we treat that as
for checking purposes) - a known constant will maintain its value - an unknown constant will become either non-constant or a known constant Additionally, if the constant kind does not match k, we can check it immediately (presumably to report some error). check_constant_once supports this by returning TRUE exactly once, when its possible to check e's value Returns: TRUE the first time !e->cst || e->cst && !constant_unkown(e) || e->cst && e->cst does not match k */ #endif nescc-1.3.4/src/cstring.h000066400000000000000000000027421177770303300152400ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef CSTRING_H #define CSTRING_H #include #include "regions.h" /* A C string is like a regular C string, but with a length. A null byte is added AFTER the string for convenience */ typedef struct { char *data; int length; } cstring; /* Make a new cstring with a copy of s, length l */ cstring make_cstring(region r, const char *s, int l); /* Make a new unintialised cstring of length l */ cstring alloc_cstring(region r, int l); /* Make a new cstring with a copy of regular C string s */ cstring str2cstring(region r, const char *s); /* Make a new C string with a copy of cstring s */ char *cstring2str(region r, cstring s); #endif nescc-1.3.4/src/cval.c000066400000000000000000000736261177770303300145200ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* SAME: There's a lot of assumptions about floating point here, and behaviour of operations when performed on wider types. I believe them to be valid for IEEE with round-to-nearest. XXX: check. XXX: overflow. */ /* Note: this code is not particularly aiming for efficiency (in particular, complex constants will be inefficient) */ #include "parser.h" #include "cval.h" #include "machine.h" cval cval_top; /* The non-constant value */ cval cval_unknown_number; /* The unknown number value */ cval cval_unknown_address; /* The unknown address value */ cval cval_zero; /* A zero value. Use cval_cast to make the desired kind of constant */ cval cval_one; /* A one value. Use cval_cast to make the desired kind of constant */ cval cval_bitsperbyte; /* BITSPERBYTE, unsigned */ /* We use cval_invalid_address to mark those places where a constant is computed which is "not computable at load time" (these used to be cval_unknown_number, but we're reusing that for constants built from abstract component args. Knowing that something is a constant "not computable at load time" seems to have no use, except in producing a slightly nicer error message) */ #define cval_invalid_address cval_top void cval_init(void) { /* Code will be unhappy if this is not true. */ assert(sizeof(largest_int) == sizeof(largest_uint)); /* assert(This is a 2's complement machine); */ cval_top.kind = cval_variable; cval_unknown_number.kind = cval_unk_number; cval_unknown_address.kind = cval_unk_address; cval_zero.kind = cval_sint; cval_zero.si = 0; cval_zero.isize = target->tint.size; cval_one.kind = cval_sint; cval_one.si = 1; cval_one.isize = target->tint.size; cval_bitsperbyte.kind = cval_uint; cval_bitsperbyte.ui = BITSPERBYTE; cval_bitsperbyte.isize = target->size_t_size; } cval make_cval_unsigned(largest_uint i, type t) { cval c; assert(type_integral(t) && type_unsigned(t)); c.kind = cval_uint; c.ui = i; c.isize = type_size_int(t); return c; } cval make_cval_signed(largest_int i, type t) { cval c; assert(type_integral(t) && !type_unsigned(t)); c.kind = cval_sint; c.si = i; c.isize = type_size_int(t); return c; } cval make_type_cval(size_t s) /* Effects: Make a cval representing a type size. This is special-cased because we need to make these for type sizes before any types are available Returns: A cval representing s, with size set to the target's size_t size */ { cval c; c.kind = cval_uint; c.ui = s; c.isize = target->size_t_size; return c; } cval make_cval_float(long double d) { cval c; c.kind = cval_float; c.d = d; return c; } cval make_cval_complex(cval r, cval i) { assert(r.kind == i.kind); switch (r.kind) { case cval_float: r.d_i = i.d; r.kind = cval_float_complex; return r; case cval_uint: assert(r.isize == i.isize); r.kind = cval_uint_complex; r.ui_i = i.ui; return r; case cval_sint: assert(r.isize == i.isize); r.kind = cval_sint_complex; r.si_i = i.si; return r; default: abort(); return r; } } cval make_cval_address(data_declaration ddecl, label_declaration ldecl, largest_int offset) { cval c = make_cval_signed(offset, ptrdiff_t_type); assert(!(ldecl && ddecl)); c.kind = cval_address; c.ddecl = ddecl; c.ldecl = ldecl; return c; } cval make_cval_address_unknown_offset(cval c) /* Requires: cval_isaddress(c) Returns: a constant identical to c except that the offset is now unknowjn */ { assert(cval_isaddress(c)); if (c.kind == cval_address) c.kind = cval_address_unk_offset; return c; } bool cval_isunknown(cval c) /* Return: TRUE if c is an unknown constant */ { return c.kind == cval_unk_number || c.kind == cval_unk_address; } bool cval_isaddress(cval c) { return c.kind == cval_unk_address || c.kind == cval_address || c.kind == cval_address_unk_offset; } bool cval_isinteger(cval c) { return c.kind == cval_sint || c.kind == cval_uint; } bool cval_isunsigned(cval c) { return c.kind == cval_uint; } bool cval_isfloating(cval c) { return c.kind == cval_float; } bool cval_iscomplex(cval c) { return c.kind == cval_sint_complex || c.kind == cval_uint_complex || c.kind == cval_float_complex; } bool cval_knownbool(cval c) /* Returns: TRUE if the truth-value of c can be determined (use cval_boolvalue to get that value) */ { switch (c.kind) { default: case cval_variable: assert(0); case cval_unk_number: case cval_unk_address: case cval_address_unk_offset: return FALSE; case cval_address: return c.si == 0; case cval_uint: case cval_sint: case cval_float: case cval_uint_complex: case cval_sint_complex: case cval_float_complex: return TRUE; } } bool cval_boolvalue(cval c) /* Returns: TRUE if c is a non-zero constant Requires: cval_knownbool(c) */ { switch (c.kind) { default: assert(0); case cval_address: assert(c.si == 0); return TRUE; case cval_uint: return c.ui != 0; case cval_sint: return c.si != 0; case cval_float: return c.d != 0; case cval_uint_complex: return c.ui && c.ui_i; case cval_sint_complex: return c.si && c.si_i; case cval_float_complex: return c.d && c.d_i; } } bool cval_knownvalue(cval c) /* Returns: TRUE if the value of c can be determined (this is false for address constants, while cval_knownbool is true for address constants with offset 0) */ { switch (c.kind) { default: case cval_variable: assert(0); case cval_unk_number: case cval_unk_address: case cval_address_unk_offset: case cval_address: return FALSE; case cval_uint: case cval_sint: case cval_float: case cval_uint_complex: case cval_sint_complex: case cval_float_complex: return TRUE; } } largest_uint cval_uint_value(cval c) /* Returns: The value of c as an unsigned int Requires: cval_knownvalue(c) && !cval_iscomplex(c) */ { switch (c.kind) { default: assert(0); return 0; case cval_uint: return c.ui; case cval_sint: return c.si; case cval_float: return c.d; } } largest_int cval_sint_value(cval c) /* Returns: The value of c as a signed int Requires: cval_knownvalue(c) && !cval_iscomplex(c) */ { switch (c.kind) { default: assert(0); return 0; case cval_uint: return c.ui; case cval_sint: return c.si; case cval_float: return c.d; } } long double cval_float_value(cval c) /* Returns: The value of c as a long double Requires: cval_knownvalue(c) && !cval_iscomplex(c) */ { switch (c.kind) { default: assert(0); return 0; case cval_uint: return c.ui; case cval_sint: return c.si; case cval_float: return c.d; } } bool cval_isone(cval c) /* Returns: TRUE if c is 1 (FALSE for unknown constants) Requires: c not be cval_top */ { switch (c.kind) { default: case cval_variable: assert(0); case cval_unk_number: case cval_unk_address: case cval_address_unk_offset: case cval_address: return FALSE; case cval_uint: return c.ui == 1; case cval_sint: return c.si == 1; case cval_float: return c.d == 1; case cval_uint_complex: return c.ui == 1 && c.ui_i == 0; case cval_sint_complex: return c.si == 1 && c.si_i == 0; case cval_float_complex: return c.d == 1 && c.d_i == 0; } } static largest_uint truncate_unsigned(largest_uint x, size_t tsize) { /* The shift is undefined for the size of largest_uint (and the masking is then a no-op) */ assert(tsize <= sizeof(largest_uint)); if (tsize == sizeof(largest_uint)) return x; else return x & (((largest_uint)1 << BITSPERBYTE * tsize) - 1); } /* SAME: 2's complement */ static largest_int truncate_signed(largest_int x, size_t tsize) { largest_uint umask, uval; assert(tsize <= sizeof(largest_int)); if (tsize == sizeof(largest_int)) return x; /* masking */ umask = (((largest_uint)1 << BITSPERBYTE * tsize) - 1); uval = x & umask; /* sign extension */ if (uval & ((largest_uint)1 << (BITSPERBYTE * tsize - 1))) return (largest_int)(((largest_uint)-1 & ~umask) | uval); else return uval; } /* All of these functions will return cval_top if the result is not a constant expression */ cval cval_cast(cval c, type to) /* Returns: c cast to type to Requires: type_scalar(to) */ { if (cval_istop(c)) return cval_top; if (cval_isunknown_number(c)) return cval_unknown_number; if (type_complex(to)) { type base = make_base_type(to); switch (c.kind) { case cval_unk_address: case cval_address_unk_offset: case cval_address: return cval_top; case cval_sint: case cval_uint: case cval_float: return make_cval_complex(cval_cast(c, base), cval_cast(cval_zero, base)); return c; case cval_sint_complex: case cval_uint_complex: case cval_float_complex: return make_cval_complex(cval_cast(cval_realpart(c), base), cval_cast(cval_imagpart(c), base)); default:assert(0); return c; } } if (cval_iscomplex(c)) return cval_cast(cval_realpart(c), to); if (type_floating(to)) { switch (c.kind) { case cval_unk_address: case cval_address_unk_offset: case cval_address: return cval_top; /* And not cval_invalid_address for some reason */ case cval_sint: case cval_uint: c.kind = cval_float; /* Note that the cast is necessary otherwise it would cast to the common type of largest_int/largest_uint (largest_uint), so c.si would be cast to unsigned. */ c.d = c.kind == cval_sint ? (long double)c.si : (long double)c.ui; return c; case cval_float: if (type_float(to)) c.d = (float)c.d; else if (type_double(to)) c.d = (double)c.d; return c; default:assert(0); return c; } } else { cval tosize_cval = type_size(to); size_t tosize; // Cast to int of unknown size produces unknown value if (cval_isunknown_number(tosize_cval)) switch (c.kind) { case cval_unk_address: case cval_address_unk_offset: case cval_address: return cval_unknown_address; default: return cval_unknown_number; } tosize = cval_uint_value(tosize_cval); switch (c.kind) { case cval_float: /* If it's floating, make it an integer */ /* Note: can't cast floating point number to a pointer */ assert(!type_pointer(to)); if (type_unsigned(to)) { c.kind = cval_uint; c.ui = c.d; c.isize = tosize; } else { c.kind = cval_sint; c.si = c.d; c.isize = tosize; } return c; case cval_unk_address: case cval_address_unk_offset: case cval_address: /* Lose value if cast address of symbol to too-narrow a type */ if (!type_array(to) && tosize < type_size_int(intptr_type)) return cval_invalid_address; /* Otherwise nothing happens (the offset is already restricted to the range of intptr_type). */ return c; case cval_uint: case cval_sint: c.isize = tosize; if (type_unsigned(to) || type_pointer(to)) { if (c.kind == cval_sint) c.ui = c.si; c.ui = truncate_unsigned(c.ui, tosize); c.kind = cval_uint; } else { if (c.kind == cval_uint) c.si = c.ui; c.si = truncate_signed(c.si, tosize); c.kind = cval_sint; } return c; default: assert(0); return c; } } } cval cval_not(cval c) { if (cval_istop(c)) return cval_top; else if (cval_isunknown(c)) return cval_unknown_number; else if (!cval_knownbool(c)) return cval_invalid_address; else return make_cval_signed(!cval_boolvalue(c), int_type); } cval cval_negate(cval c) { switch (c.kind) { case cval_variable: return cval_top; case cval_unk_number: return cval_unknown_number; case cval_address: case cval_unk_address: case cval_address_unk_offset: return cval_invalid_address; case cval_sint: c.si = -c.si; return c; /* XXX: overflow */ case cval_uint: c.ui = truncate_unsigned(-c.ui, c.isize); return c; case cval_float: c.d = -c.d; return c; case cval_sint_complex: c.si = -c.si; c.si_i = -c.si_i; return c; /* XXX: overflow */ case cval_uint_complex: c.ui = truncate_unsigned(-c.ui, c.isize); c.ui_i = truncate_unsigned(-c.ui_i, c.isize); return c; case cval_float_complex: c.d = -c.d; c.d_i = -c.d_i; return c; default: abort(); return cval_top; } } cval cval_bitnot(cval c) { switch (c.kind) { case cval_variable: return cval_top; case cval_unk_number: return cval_unknown_number; case cval_address: case cval_unk_address: case cval_address_unk_offset: return cval_invalid_address; case cval_sint: c.si = truncate_signed(~c.si, c.isize); return c; case cval_uint: c.ui = truncate_unsigned(~c.ui, c.isize); return c; default: abort(); return cval_top; } } cval cval_conjugate(cval c) { switch (c.kind) { case cval_variable: return cval_top; case cval_unk_number: return cval_unknown_number; case cval_sint_complex: c.si_i = -c.si_i; return c; /* XXX: overflow */ case cval_uint_complex: c.ui_i = truncate_unsigned(-c.ui_i, c.isize); return c; case cval_float_complex: c.d_i = -c.d_i; return c; default: abort(); return cval_top; } } cval cval_realpart(cval c) { switch (c.kind) { case cval_variable: return cval_top; case cval_unk_number: return cval_unknown_number; case cval_sint_complex: c.kind = cval_sint; return c; case cval_uint_complex: c.kind = cval_uint; return c; case cval_float_complex: c.kind = cval_float; return c; case cval_sint: case cval_uint: case cval_float: return c; default: abort(); return cval_top; } } cval cval_imagpart(cval c) { switch (c.kind) { case cval_variable: return cval_top; case cval_unk_number: return cval_unknown_number; case cval_sint_complex: c.kind = cval_sint; c.si = c.si_i; return c; case cval_uint_complex: c.kind = cval_uint; c.ui = c.ui_i; return c; case cval_float_complex: c.kind = cval_float; c.d = c.d_i; return c; case cval_sint: c.si = 0; return c; case cval_uint: c.ui = 0; return c; case cval_float: c.d = 0; return c; default: abort(); return cval_top; } } /* The binary operators require that both arguments have been cast to a common type. */ cval cval_add(cval c1, cval c2) { if (cval_istop(c1) || cval_istop(c2)) return cval_top; if (cval_isaddress(c2)) { cval tmp = c1; c1 = c2; c2 = tmp; } if (cval_isaddress(c1)) switch (c2.kind) { case cval_unk_number: return make_cval_address_unknown_offset(c1); case cval_address: case cval_unk_address: case cval_address_unk_offset: return cval_invalid_address; case cval_sint: c1.si = truncate_signed(c1.si + c2.si, c1.isize); return c1; case cval_uint: c1.si = truncate_signed(c1.si + c2.ui, c1.isize); return c1; default: assert(0); return c1; } if (cval_isunknown_number(c1) || cval_isunknown_number(c2)) return cval_unknown_number; switch (c1.kind) { case cval_float: assert(c2.kind == cval_float); c1.d += c2.d; return c1; case cval_sint: assert(c2.kind == cval_sint && c1.isize == c2.isize); c1.si = truncate_signed(c1.si + c2.si, c1.isize); return c1; case cval_uint: assert(c2.kind == cval_uint && c1.isize == c2.isize); c1.ui = truncate_unsigned(c1.ui + c2.ui, c1.isize); return c1; case cval_float_complex: assert(c2.kind == cval_float_complex); c1.d += c2.d; c1.d_i += c2.d_i; return c1; case cval_sint_complex: assert(c2.kind == cval_sint_complex && c1.isize == c2.isize); c1.si = truncate_signed(c1.si + c2.si, c1.isize); c1.si_i = truncate_signed(c1.si_i + c2.si_i, c1.isize); return c1; case cval_uint_complex: assert(c2.kind == cval_uint_complex && c1.isize == c2.isize); c1.ui = truncate_unsigned(c1.ui + c2.ui, c1.isize); c1.ui_i = truncate_unsigned(c1.ui_i + c2.ui_i, c1.isize); return c1; default: assert(0); return c1; } } cval cval_sub(cval c1, cval c2) { if (cval_istop(c1) || cval_istop(c2)) return cval_top; // -
is cst iff x is an address from the same symbol // (in particular, x cannot be unknown) if (cval_isaddress(c2)) { if (cval_isaddress(c1) && !cval_isunknown_address(c1) && !cval_isunknown_address(c2) && c1.ddecl == c2.ddecl && c1.ldecl == c2.ldecl) { if (c1.kind == cval_address_unk_offset || c2.kind == cval_address_unk_offset) return cval_unknown_number; c1.kind = cval_sint; c1.si = truncate_signed(c1.si - c2.si, c1.isize); return c1; } return cval_invalid_address; } //
- if (cval_isaddress(c1)) switch (c2.kind) { case cval_unk_number: return make_cval_address_unknown_offset(c1); case cval_sint: c1.si = truncate_signed(c1.si - c2.si, c1.isize); return c1; case cval_uint: c1.si = truncate_signed(c1.si - c2.ui, c1.isize); return c1; default: assert(0); return c1; } if (cval_isunknown_number(c1) || cval_isunknown_number(c2)) return cval_unknown_number; switch (c1.kind) { case cval_float: assert(c2.kind == cval_float); c1.d -= c2.d; return c1; case cval_sint: assert(c2.kind == cval_sint && c1.isize == c2.isize); c1.si = truncate_signed(c1.si - c2.si, c1.isize); return c1; case cval_uint: assert(c2.kind == cval_uint && c1.isize == c2.isize); c1.ui = truncate_unsigned(c1.ui - c2.ui, c1.isize); return c1; case cval_float_complex: assert(c2.kind == cval_float_complex); c1.d -= c2.d; c1.d_i -= c2.d_i; return c1; case cval_sint_complex: assert(c2.kind == cval_sint_complex && c1.isize == c2.isize); c1.si = truncate_signed(c1.si - c2.si, c1.isize); c1.si_i = truncate_signed(c1.si_i - c2.si_i, c1.isize); return c1; case cval_uint_complex: assert(c2.kind == cval_uint_complex && c1.isize == c2.isize); c1.ui = truncate_unsigned(c1.ui - c2.ui, c1.isize); c1.ui_i = truncate_unsigned(c1.ui_i - c2.ui_i, c1.isize); return c1; default: assert(0); return c1; } } cval cval_times(cval c1, cval c2) { if (cval_istop(c1) || cval_istop(c2)) return cval_top; //
* 1 and 1 *
are csts, everything else involving // addresses isn't if (cval_isaddress(c1) || cval_isaddress(c2)) { if (cval_isone(c1)) return c2; if (cval_isone(c2)) return c1; return cval_invalid_address; } if (cval_isunknown_number(c1) || cval_isunknown_number(c2)) return cval_unknown_number; if (cval_iscomplex(c1)) { cval c1r = cval_realpart(c1), c1i = cval_imagpart(c1), c2r = cval_realpart(c2), c2i = cval_imagpart(c2); assert(cval_iscomplex(c2)); /* Note: this is what gcc does. The C99 standard appears to require something rather more complicated (aka "do the right thing") */ return make_cval_complex(cval_sub(cval_times(c1r, c2r), cval_times(c1i, c2i)), cval_add(cval_times(c1r, c2i), cval_times(c1i, c2r))); } switch (c1.kind) { case cval_float: assert(c2.kind == cval_float); c1.d *= c2.d; return c1; case cval_sint: assert(c2.kind == cval_sint && c1.isize == c2.isize); c1.si = truncate_signed(c1.si * c2.si, c1.isize); return c1; case cval_uint: assert(c2.kind == cval_uint && c1.isize == c2.isize); c1.ui = truncate_unsigned(c1.ui * c2.ui, c1.isize); return c1; default: assert(0); return c1; } } cval cval_divide(cval c1, cval c2) { if (cval_istop(c1) || cval_istop(c2)) return cval_top; //
/ 1 is a cst, everything else involving addresses isn't if (cval_isaddress(c1) || cval_isaddress(c2)) return cval_isone(c2) ? c1 : cval_invalid_address; if (cval_isunknown_number(c1) || cval_isunknown_number(c2)) return cval_unknown_number; if (cval_iscomplex(c1)) { cval c1r = cval_realpart(c1), c1i = cval_imagpart(c1), c2r = cval_realpart(c2), c2i = cval_imagpart(c2); cval mag = cval_add(cval_times(c1r, c2r), cval_times(c1i, c2i)); assert(cval_iscomplex(c2)); /* Note: this is what gcc does. The C99 standard appears to require something rather more complicated (aka "do the right thing") */ return make_cval_complex(cval_divide(cval_add(cval_times(c1r, c2r), cval_times(c1i, c2i)), mag), cval_divide(cval_sub(cval_times(c1i, c2r), cval_times(c1r, c2i)), mag)); } switch (c1.kind) { case cval_float: assert(c2.kind == cval_float); c1.d /= c2.d; return c1; case cval_sint: assert(c2.kind == cval_sint && c1.isize == c2.isize); if (c2.si == 0) return cval_top; /* Note that signed division can overflow (MININT / -1). */ c1.si = truncate_signed(c1.si / c2.si, c1.isize); return c1; case cval_uint: assert(c2.kind == cval_uint && c1.isize == c2.isize); if (c2.ui == 0) return cval_top; c1.ui /= c2.ui; return c1; default: assert(0); return c1; } } cval cval_modulo(cval c1, cval c2) { if (cval_istop(c1) || cval_istop(c2)) return cval_top; if (cval_isone(c2)) return make_cval_signed(0, int_type); if (cval_isaddress(c1) || cval_isaddress(c2)) return cval_invalid_address; if (cval_isunknown_number(c1) || cval_isunknown_number(c2)) return cval_unknown_number; switch (c1.kind) { case cval_float: assert(c2.kind == cval_float); c1.d /= c2.d; return c1; case cval_sint: assert(c2.kind == cval_sint && c1.isize == c2.isize); if (c2.si == 0) return cval_top; c1.si = truncate_signed(c1.si % c2.si, c1.isize); return c1; case cval_uint: assert(c2.kind == cval_uint && c1.isize == c2.isize); if (c2.ui == 0) return cval_top; c1.ui %= c2.ui; return c1; default: assert(0); return c1; } } #define CVAL_BITOP(OP) \ { \ if (cval_istop(c1) || cval_istop(c2)) \ return cval_top; \ \ if (cval_isaddress(c1) || cval_isaddress(c2)) \ return cval_invalid_address; \ if (cval_isunknown_number(c1) || cval_isunknown_number(c2)) \ return cval_unknown_number; \ \ assert(c1.kind == c2.kind && c1.isize == c2.isize); \ switch (c1.kind) \ { \ case cval_sint: \ c1.si = truncate_signed(c1.si OP c2.si, c1.isize); \ return c1; \ \ case cval_uint: \ c1.ui = truncate_signed(c1.ui OP c2.ui, c1.isize); \ return c1; \ \ default: \ assert(0); \ return c1; \ } \ } cval cval_lshift(cval c1, cval c2) CVAL_BITOP(<<) cval cval_rshift(cval c1, cval c2) CVAL_BITOP(>>) cval cval_bitand(cval c1, cval c2) CVAL_BITOP(&) cval cval_bitor(cval c1, cval c2) CVAL_BITOP(|) cval cval_bitxor(cval c1, cval c2) CVAL_BITOP(^) #define CVAL_RELOP(OP) \ { \ bool res; \ \ if (cval_istop(c1) || cval_istop(c2)) \ return cval_top; \ \ if (cval_isaddress(c1) || cval_isaddress(c2)) \ return cval_invalid_address; \ /* Surprisingly (?) &x == &x is not a constant expression */ \ if (cval_isunknown_number(c1) || cval_isunknown_number(c2)) \ return cval_unknown_number; \ \ switch (c1.kind) \ { \ case cval_float: \ assert(c2.kind == cval_float); \ res = c1.d OP c2.d; \ break; \ \ case cval_sint: \ assert(c2.kind == cval_sint && c1.isize == c2.isize); \ res = c1.si OP c2.si; \ break; \ \ case cval_uint: \ assert(c2.kind == cval_uint && c1.isize == c2.isize); \ res = c1.ui OP c2.ui; \ break; \ \ default: \ assert(0); \ res = FALSE; \ break; \ } \ return make_cval_signed(res, int_type); \ } static cval cval_simpleeq(cval c1, cval c2) CVAL_RELOP(==) cval cval_leq(cval c1, cval c2) CVAL_RELOP(<=) cval cval_eq(cval c1, cval c2) { if (cval_iscomplex(c1) && cval_iscomplex(c2)) { cval req = cval_simpleeq(cval_realpart(c1), cval_realpart(c2)); cval ieq = cval_simpleeq(cval_imagpart(c1), cval_imagpart(c2)); return make_cval_signed(cval_isone(req) && cval_isone(ieq), int_type); } else return cval_simpleeq(c1, c2); } /* True if x fits in the range of type t */ bool uint_inrange(largest_uint x, type t) { size_t tsize = type_size_int(t); largest_uint max; assert(tsize <= sizeof(largest_uint)); if (tsize == sizeof(largest_uint) && type_unsigned(t)) return TRUE; max = (largest_uint)1 << (BITSPERBYTE * tsize - !type_unsigned(t)); return x < max; } bool sint_inrange(largest_int x, type t) { size_t tsize = type_size_int(t); largest_int max; assert(tsize <= sizeof(largest_uint)); if (x < 0 && type_unsigned(t)) return FALSE; if (tsize == sizeof(largest_uint)) return TRUE; max = (largest_int)1 << (BITSPERBYTE * tsize - !type_unsigned(t)); /* The x<0&&unsigned and largest_int cases have been handled above. */ return x >= -max && x < max; } bool cval_inrange(cval c, type t) /* Requires: constant_integral(c) Returns: TRUE if c is in range of type t. */ { switch (c.kind) { case cval_sint: return sint_inrange(c.si, t); case cval_uint: return uint_inrange(c.ui, t); default: abort(); return FALSE; } } largest_int cval_intcompare(cval c1, cval c2) /* Requires: cval_isinteger(c1) && cval_isinteger(c2) Returns: x, x<0 if c1 < c2, x = 0 if c1 = c2 and x > 0 if c1 > c2 */ { /* beware of overflow of difference w/ respect to largest_int */ switch (c1.kind) { case cval_sint: switch (c2.kind) { case cval_sint: return c1.si - c2.si; case cval_uint: /* can't use c1.si < c2.ui because of implicit conversion */ if (c1.si < 0 || c1.si < c2.ui) return -1; return c1.si - c2.ui; /* common type is largest_uint */ default: abort(); return 0; } case cval_uint: switch (c2.kind) { case cval_sint: if (c2.si < 0 || c1.ui < c2.si) return 1; /* result might overflow so compare with 0 */ return (c1.ui - c2.si) > 0; /* common type is largest_uint */ case cval_uint: /* We do the cases because the result might overflow largest_int */ if (c1.ui < c2.ui) return -1; if (c1.ui > c2.ui) return 1; return 0; default: abort(); return 0; } default: abort(); return 0; } } void cval_print(FILE *f, cval c) /* Effects: prints a parsable representable of c to f */ { switch (c.kind) { case cval_float: case cval_float_complex: break; case cval_uint: fprintf(f, "%llu", c.ui); break; case cval_uint_complex: fprintf(f, "%llu %llu", c.ui, c.ui_i); break; case cval_sint: fprintf(f, "%lld", c.si); break; case cval_sint_complex: fprintf(f, "%lld %lld", c.si, c.si_i); break; default: assert(0); break; } } void cval_debug(cval c) /* For use while debugging. gdb doesn't print cvals right */ { switch (c.kind) { case cval_variable: printf(""); break; case cval_unk_number: printf(""); break; case cval_unk_address: printf("
"); break; case cval_address: case cval_address_unk_offset: if (c.ldecl) printf("
name, c.ldecl); else printf("
name, c.ddecl); if (c.kind == cval_address_unk_offset) printf(" + "); else if (c.si > 0) printf(" + %lld", c.si); else printf(" - %lld", -c.si); printf(">"); default: printf("[size: %u]", (unsigned)c.isize); cval_print(stdout, c); } printf("\n"); } cval cval_align_to(cval n, cval alignment) { cval count = cval_divide(cval_sub(cval_add(n, alignment), make_type_cval(1)), alignment); return cval_times(count, alignment); } cval cval_gcd(cval x, cval y) { cval z; if (cval_istop(x) || cval_istop(y)) return cval_top; if (cval_isunknown_number(x) || cval_isunknown_number(y)) return cval_unknown_number; for (;;) { if (!cval_boolvalue(y)) /* ie 0 */ return x; z = cval_modulo(x, y); x = y; y = z; } } cval cval_lcm(cval x, cval y) { /* ignoring risk of overflow (used for alignments which are typically <= 16) */ return cval_divide(cval_times(x, y), cval_gcd(x, y)); } cval cval_max(cval c1, cval c2) { if (cval_istop(c1) || cval_istop(c2)) return cval_top; if (cval_isunknown_number(c1) || cval_isunknown_number(c2)) return cval_unknown_number; // Not used for anything else yet. Fix later if need to. assert(cval_isinteger(c1) && cval_isinteger(c2)); return cval_intcompare(c1, c2) > 0 ? c1 : c2; } cval cval_min(cval c1, cval c2) { if (cval_istop(c1) || cval_istop(c2)) return cval_top; if (cval_isunknown_number(c1) || cval_isunknown_number(c2)) return cval_unknown_number; // Not used for anything else yet. Fix later if need to. assert(cval_isinteger(c1) && cval_isinteger(c2)); return cval_intcompare(c1, c2) < 0 ? c1 : c2; } data_declaration cval_ddecl(cval c) /* Returns: c's declaration Requires: cval_isaddress(c) && !cval_isunknown_address(c) && c doesn't denote a label */ { assert(cval_isaddress(c) && !cval_isunknown_address(c)); return c.ddecl; } label_declaration cval_ldecl(cval c) /* Returns: c's declaration, or NULL if c denotes a variable Requires: cval_isaddress(c) && !cval_isunknown_address(c) */ { assert(cval_isaddress(c) && !cval_isunknown_address(c)); return c.ldecl; } nescc-1.3.4/src/cval.h000066400000000000000000000170401177770303300145110ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef CVAL_H #define CVAL_H /* Note: legal ops on complex are: add, sub, times, divide, realpart, imagpart, conjugate */ typedef struct { enum { cval_variable, /* not a constant */ cval_unk_number, /* some unknown number */ cval_unk_address, /* an unknown symbol with unknown offset */ cval_address_unk_offset, /* known symbol with unknown offset */ cval_address, /* symbol with offset */ cval_float, cval_float_complex, /* a (complex) floating point number */ cval_uint, cval_uint_complex, /* a (complex) unsigned number */ cval_sint, cval_sint_complex /* a (complex) signed number */ } kind; #ifdef USE_UNNAMED_UNION union { struct { long double d, d_i; /* for cval_float */ }; struct { size_t isize; union { largest_int si; largest_uint ui; }; union { largest_int si_i; largest_uint ui_i; struct { /* for cval_address, cval_address_unk_offset */ struct data_declaration *ddecl; struct label_declaration *ldecl; }; }; }; }; #else long double d, d_i; /* for cval_float */ struct data_declaration *ddecl; /* for cval_address */ struct label_declaration *ldecl; /* for cval_address */ largest_int si, si_i; largest_uint ui, ui_i; size_t isize; #endif } cval; extern cval cval_top; /* The non-constant value */ extern cval cval_unknown_number; /* The unknown number value */ extern cval cval_unknown_address; /* The unknown address value */ extern cval cval_zero; /* A zero value. Use cval_cast to make the desired kind of constant */ extern cval cval_one; /* A one value. Use cval_cast to make the desired kind of constant */ extern cval cval_bitsperbyte; /* BITSPERBYTE, unsigned */ void cval_init(void); cval make_cval_signed(largest_int i, type t); cval make_cval_unsigned(largest_uint i, type t); cval make_type_cval(size_t s); /* Effects: Make a cval representing a type size. This is special-cased because we need to make these for type sizes before any types are available Returns: A cval representing s, with size set to the target's size_t size */ cval make_cval_float(long double d); cval make_cval_complex(cval r, cval i); cval make_cval_address(data_declaration ddecl, label_declaration ldecl, largest_int offset); cval make_cval_address_unknown_offset(cval c); /* Requires: cval_isaddress(c) Returns: a constant identical to c except that the offset is now unknown */ bool cval_isunknown(cval c); /* Return: TRUE if c is an unknown constant (one of unknown_number, unknown_address, address_unknown_offset) */ /*bool cval_isunknown_number(cval c);*/ #define cval_isunknown_number(c) ((c).kind == cval_unk_number) /* Return: TRUE if c is an unknown constant */ /*bool cval_isunknown_address(cval c);*/ #define cval_isunknown_address(c) ((c).kind == cval_unk_address) /* Return: TRUE if c is an unknown constant */ /*bool cval_istop(cval c);*/ #define cval_istop(c) ((c).kind == cval_variable) /* Return: TRUE if c is not a constant */ bool cval_isaddress(cval c); /* Return: TRUE if c is an address constant (known or unknown) */ bool cval_isinteger(cval c); /* Return: TRUE if c is an integer constant */ bool cval_isunsigned(cval c); /* Return: TRUE if c is an unsigned integer constant */ bool cval_isfloating(cval c); /* Return: TRUE if c is a floating-point constant */ bool cval_iscomplex(cval c); /* Return: TRUE if c is a complex constant */ bool cval_knownbool(cval c); /* Returns: TRUE if the truth-value of c can be determined (use cval_boolvalue to get that value). Note that address values with offset 0 are known to be true... */ bool cval_boolvalue(cval c); /* Returns: TRUE if c is a non-zero constant Requires: cval_knownbool(c) */ bool cval_knownvalue(cval c); /* Returns: TRUE if the value of c can be determined (this is false for address constants, while cval_knownbool is true for address constants with offset 0) */ largest_uint cval_uint_value(cval c); /* Returns: The value of c as an unsigned int Requires: cval_knownvalue(c) && !cval_iscomplex(c) */ largest_int cval_sint_value(cval c); /* Returns: The value of c as a signed int Requires: cval_knownvalue(c) && !cval_iscomplex(c) */ long double cval_float_value(cval c); /* Returns: The value of c as a long double Requires: cval_knownvalue(c) && !cval_iscomplex(c) */ bool cval_isone(cval c); /* Returns: TRUE if c is 1 (FALSE for unknown constants) Requires: c not be cval_top */ data_declaration cval_ddecl(cval c); /* Returns: c's declaration, or NULL if c denotes a label Requires: cval_isaddress(c) && !cval_isunknown_address(c) */ label_declaration cval_ldecl(cval c); /* Returns: c's declaration, or NULL if c denotes a variable Requires: cval_isaddress(c) && !cval_isunknown_address(c) */ /* All of these functions will return cval_top if the result is not a constant expression */ cval cval_cast(cval c, type to); /* Cast c to type to */ cval cval_not(cval c); /* !c */ cval cval_negate(cval c); /* -c */ cval cval_bitnot(cval c); /* ~c */ cval cval_conjugate(cval c); /* ~c */ cval cval_realpart(cval c); /* __real__ c */ cval cval_imagpart(cval c); /* __imag__ c */ /* The binary operators require that both arguments have been cast to a common type. */ cval cval_add(cval c1, cval c2); cval cval_sub(cval c1, cval c2); cval cval_times(cval c1, cval c2); cval cval_divide(cval c1, cval c2); cval cval_modulo(cval c1, cval c2); cval cval_lshift(cval c1, cval c2); cval cval_rshift(cval c1, cval c2); cval cval_bitand(cval c1, cval c2); cval cval_bitor(cval c1, cval c2); cval cval_bitxor(cval c1, cval c2); cval cval_eq(cval c1, cval c2); /*cval cval_ne(cval c1, cval c2);*/ cval cval_leq(cval c1, cval c2); /*cval cval_lt(cval c1, cval c2);*/ /*cval cval_geq(cval c1, cval c2);*/ /*cval cval_gt(cval c1, cval c2);*/ #define cval_gt(c1, c2) (cval_not(cval_leq((c1), (c2)))) #define cval_lt(c1, c2) (cval_gt((c2), (c1))) #define cval_geq(c1, c2) (cval_leq((c2), (c1))) #define cval_ne(c1, c2) (cval_not(cval_eq((c1), (c2)))) /* True if x fits in the range of type t */ bool uint_inrange(largest_uint x, type t); bool sint_inrange(largest_int x, type t); bool cval_inrange(cval c, type t); /* Requires: constant_integral(c) Returns: TRUE if c is in range of type t. */ largest_int cval_intcompare(cval c1, cval c2); /* Requires: cval_isinteger(c1) && cval_isinteger(c2) Returns: x, x<0 if c1 < c2, x = 0 if c1 = c2 and x > 0 if c1 > c2 */ void cval_print(FILE *f, cval c); /* Requires: cval_knownvalue(c) Effects: prints a parsable representable of c to f */ /* Utility functions (used for struct layout) */ cval cval_lcm(cval x, cval y); cval cval_gcd(cval x, cval y); cval cval_align_to(cval n, cval alignment); cval cval_max(cval c1, cval c2); cval cval_min(cval c1, cval c2); #endif nescc-1.3.4/src/dd_list.c000066400000000000000000000114211177770303300151760ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "dd_list.h" /* This is a hack: the list header holds the two pseudo-elements for the beginning & end of a list: the `beginning' pseudo element has: next = first element previous = NULL data = xxx the `end' pseudo element has: next = NULL previous = last element data = xxx if l is a dd_list, the `beginning' element is (dd_list_pos *)l and the `end' is (dd_list_pos *)&l->null l is initialised to make all this work ... Source: AmigaOS Exec kernel */ struct dd_list { struct dd_list_pos *first; struct dd_list_pos *null; struct dd_list_pos *last; }; static dd_list_pos new_hdr(region r, void *data, dd_list_pos previous, dd_list_pos next) /* Returns: A new list element containing `data', with previous & next initialised */ { dd_list_pos new = ralloc(r, struct dd_list_pos); new->data = data; new->previous = previous; new->next = next; return new; } dd_list dd_new_list(region r) /* Returns: A new empty list */ { dd_list new = ralloc(r, struct dd_list); /* Initialise `beginning' and `end' elements (see comment at top) */ new->first = (dd_list_pos)&new->null; new->null = NULL; new->last = (dd_list_pos)new; return new; } void dd_add_first(region r, dd_list l, void *data) /* Effects: Adds a new element containing `data' to the beginning of l. Modifies: l */ { dd_insert_after(r, (dd_list_pos)l, data); } void dd_add_last(region r, dd_list l, void *data) { dd_insert_before(r, (dd_list_pos)&l->null, data); } void dd_insert_before(region r, dd_list_pos where, void *data) /* Effects: Adds a new element containg `data' after element `where'. Modifies: the list containing `where' */ { dd_list_pos new = new_hdr(r, data, where->previous, where); where->previous->next = new; where->previous = new; } void dd_insert_after(region r, dd_list_pos where, void *data) /* Effects: Adds a new element containg `data' before element `where'. Modifies: the list containing `where' */ { dd_list_pos new = new_hdr(r, data, where, where->next); where->next->previous = new; where->next = new; } void dd_remove(dd_list_pos what) /* Effects: Removes element `what' from its list. No operations on what are valid after the call to dd_remove. Modifies: the list containing `what'. */ { what->previous->next = what->next; what->next->previous = what->previous; what->next = what->previous = NULL; what->data = NULL; } dd_list_pos dd_first(dd_list l) /* Returns: The first element of list l */ { return l->first; } dd_list_pos dd_last(dd_list l) /* Returns: The last element of list l */ { return l->last; } unsigned long dd_length(dd_list l) /* Returns: length of list l */ { dd_list_pos scan; unsigned long len = 0; dd_scan (scan, l) len++; return len; } void dd_append(dd_list l1, dd_list l2) /* Effects: Appends list l2 to the end of list l1. List l2 is destroyed Modifies: l1, l2 */ { l1->last->next = l2->first; l2->first->previous = l1->last; l2->last->next = (dd_list_pos)&l1->null; l1->last = l2->last; l2->first = l2->last = NULL; } dd_list dd_copy(region r, dd_list l) /* Returns: A new list with the same elements as l */ { dd_list new = dd_new_list(r); dd_list_pos scan; dd_scan (scan, l) dd_add_last(r, new, scan->data); return new; } void dd_free_list(dd_list l, void (*delete)(dd_list_pos p)) /* Effects: Destroys list l and all its elements. If delete is not NULL, calls it before deleting each element. */ { dd_list_pos scan, next; scan = dd_first(l); while (!dd_is_end(scan)) { next = dd_next(scan); if (delete) delete(next); scan->next = scan->previous = NULL; scan->data = NULL; scan = next; } l->first = l->last = NULL; } dd_list_pos dd_find(dd_list l, void *find) /* Returns: The element of l whose data is 'find', or NULL if it isn't found */ { dd_list_pos scan; dd_scan (scan, l) if (DD_GET(void *, scan) == find) return scan; return NULL; } nescc-1.3.4/src/dd_list.h000066400000000000000000000107121177770303300152050ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef DD_LIST_H #define DD_LIST_H /* * Doubly-linked list storing arbitrary pointers. * The lists may homogeneous or heterogeneous at the discretion of * the user (the list stores no type indications) * * dd_list is the type of all lists * dd_list_pos is the type that represents a particular element of a list */ typedef struct dd_list *dd_list; /* A list */ typedef struct dd_list_pos /* A position in a list */ { /* PRIVATE! Do not use the fields directly */ struct dd_list_pos *next; struct dd_list_pos *previous; void *data; } *dd_list_pos; dd_list dd_new_list(region r); /* Returns: A new empty list */ void dd_add_first(region r, dd_list l, void *data); /* Effects: Adds a new element containing `data' to the beginning of l. Modifies: l */ void dd_add_last(region r, dd_list l, void *data); /* Effects: Adds a new element containing `data' to the end of l. Modifies: l */ void dd_insert_before(region r, dd_list_pos where, void *data); /* Effects: Adds a new element containg `data' after element `where'. Modifies: the list containing `where' */ void dd_insert_after(region r, dd_list_pos where, void *data); /* Effects: Adds a new element containg `data' before element `where'. Modifies: the list containing `where' */ void dd_remove(dd_list_pos what); /* Effects: Removes element `what' from its list. No operations on what are valid after the call to dd_remove. Modifies: the list containing `what'. */ dd_list_pos dd_first(dd_list l); /* Returns: The first element of list l */ dd_list_pos dd_last(dd_list l); /* Returns: The last element of list l */ #define dd_is_beginning(l) (!(l)->previous) /* Returns: TRUE if l is the pseudo-element at the beginning of a list. Note: dd_is_beginning(dd_previous(dd_first(l))) == TRUE */ #define dd_is_end(l) (!(l)->next) /* Returns: TRUE if l is the pseudo-element at the end of a list. Note: dd_is_end(dd_next(dd_last(l))) == TRUE */ #define dd_next(l) ((l)->next) /* Returns: The element after l, or the pseudo-element indicating the end of the list if none remain (see dd_is_end) */ #define dd_previous(l) ((l)->previous) /* Returns: The element before l, or the pseudo-element indicating the beginning of the list if none remain (see dd_is_beginning) */ #define dd_is_empty(l) (dd_is_end(dd_first((l)))) /* Returns: TRUE if l is the empty list */ #define DD_GET(type, l) ((type)((l)->data)) /* Returns: The contents of element l, cast to type `type' This operation is obviously invalid on the pseudo-elements at the beginning and end of lists */ #define DD_SET(l, to) ((l)->data = (to)) /* Effects: Sets the contents of element l to `to' This operation is obviously invalid on the pseudo-elements at the beginning and end of lists Modifies: l */ #define dd_scan(var, list) for (var = dd_first((list)); !dd_is_end(var); var = dd_next(var)) /* Effects: Iterates variable `scan' over the contents of the list. Requires: list not ne modified during iteration. Example: length = 0; dd_scan (element, l) length++; */ unsigned long dd_length(dd_list l); /* Returns: length of list l */ void dd_append(dd_list l1, dd_list l2); /* Effects: Appends list l2 to the end of list l1. List l2 is destroyed Modifies: l1, l2 */ dd_list dd_copy(region r, dd_list l); /* Returns: A new list with the same elements as l */ void dd_free_list(dd_list l, void (*delete)(dd_list_pos p)); /* Effects: Destroys list l and all its elements. If delete is not NULL, calls it before deleting each element. Modifies: l */ dd_list_pos dd_find(dd_list l, void *find); /* Returns: The element of l whose data is 'find', or NULL if it isn't found */ #endif nescc-1.3.4/src/decls.h000066400000000000000000000237201177770303300146600ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef DECLS_H #define DECLS_H #include "AST.h" #include "env.h" #include "c-lex.h" typedef struct environment *environment; typedef struct data_declaration *data_declaration; typedef struct label_declaration *label_declaration; #include "nesc-decls.h" #include "nesc-uses.h" #include "cval.h" /* Types representing declarations */ typedef struct field_declaration { struct tag_declaration *containing_tag; struct field_declaration *next; /* Next field in struct/union */ const char *name; /* May be NULL for bitfields (if NULL, bitwidth == 0) */ type type; /* All '@'-style attributes attached to this declaration */ dd_list/*nesc_attribute*/ attributes; field_decl ast; /* May be null if copied from anonymous struct/union */ cval bitwidth; /* for bitfields, cval_top otherwise */ cval offset; /* in bits, not bytes. Can be cval_top if offset is not a compile-time constant */ bool packed; /* if packed attribute specified */ /* In abstract configurations or modules: The latest instantiation of this declaration */ struct field_declaration *instantiation; } *field_declaration; /* A struct, union or enum */ typedef struct tag_declaration { int kind; /* One of kind_{struct/union/enum/attribute}_ref */ const char *name; /* NULL for anonynous struct/union/enum */ type reptype; /* The type used to represent an enum, NULL for struct and unions */ /* All '@'-style attributes attached to this declaration */ dd_list/*nesc_attribute*/ attributes; /* fields and fieldlist are only defined for structs/unions */ env fields; field_declaration fieldlist; tag_ref definition; struct tag_declaration *shadowed; /* Any struct with the same tag defined in enclosing scope */ bool defined, being_defined; bool fields_const, fields_volatile; bool transparent_union; /* transparent_union attribute is present */ bool collapsed; /* TRUE if this struct/union was collapsed into its parent. */ cval size; /* Can be cval_top if not compile-time constant (due to variable-size arrays in struct) */ cval alignment, user_alignment; bool packed; /* if packed attribute specified */ bool dumped; /* TRUE if already added to dump list */ bool Cname; /* TRUE if has @C() attribute */ nesc_declaration container; /* as in data_declarations */ /* Function this declaration occurs in (NULL if outside a function) */ struct data_declaration *container_function; /* In abstract configurations or modules: The latest instantiation of this declaration */ struct tag_declaration *instantiation; struct tag_declaration *instanceof; /* Inside instantiated components: what this tag is an instance of */ /* Name of a macro to use in nesC's output for instances of this attribute - if this is NULL, attributes are not printed */ const char *macro_name; bool deputy_scope; /* TRUE for deputy attributes (@deputy_scope()) */ } *tag_declaration; typedef enum { decl_variable, decl_constant, decl_function, decl_typedef, decl_error, decl_magic_string, decl_magic_function, decl_interface_ref, decl_component_ref } data_kind; typedef enum { c_call_atomic = 1, /* bit set if atomic calls to this fn */ c_call_nonatomic = 2 /* bit set if non-atomic calls to this fn */ } call_contexts; struct data_declaration { data_kind kind; const char *name; type type; /* For declaration numbering purposes. At this point, it has: a per-function numbering for local variables a per-module numbering for commands/events */ long id; context use_summary; /* All '@'-style attributes attached to this declaration */ dd_list/*nesc_attribute*/ attributes; /* Regular C: For extern's shadowing globals in inner scopes */ /* nesC commands/events: point to original interface declaration */ struct data_declaration *shadowed; /* In abstract configurations or modules: The latest instantiation of this declaration */ struct data_declaration *instantiation; struct data_declaration *instanceof; /* Inside instantiated components: what this decl is an instance of */ /* interface/module/configuration this declaration belongs to. NULL for declarations from C files */ nesc_declaration container; /* Function this declaration occurs in (NULL if outside a function) */ struct data_declaration *container_function; declaration definition; /* Pointer to actual definition, if any */ declaration ast; /* Last declaration */ expression initialiser; /* NULL if none. For type arguments, this gets set to the argument type (type_argument node) */ bool printed; /* symbol info already printed */ bool dumped; /* TRUE if already added to dump list */ bool islimbo; /* TRUE if comes from an extern declaration in an inner scope (also true for implicit function declarations) */ bool isexternalscope; /* == TREE_PUBLIC */ bool isfilescoperef; /* == DECL_EXTERNAL */ bool needsmemory; /* == TREE_STATIC */ /* isused is TRUE if declaration used. For parameters, there is a special use during parameter list declaration to support forward parameters: - a duplicate parameter declaration is allowed if isused is FALSE once a duplicate is seen, isused is set to TRUE - parameters are created with isused == TRUE - after the forward parameters are seen, they have their isused field set to FALSE */ bool isused; bool in_system_header; bool Cname; /* name is in C name space (don't rename!) Set by the `C' attribute. */ bool safe; /* True if deputy safety checks should be enabled */ call_contexts spontaneous; /* Call contexts for environmental calls (main, interrupt handlers, e.g.). Set by the `spontaneous', `interrupt' and `signal' attributes */ dd_list/*use*/ nuses; /* List of uses of this identifier */ /* For functions */ enum { function_implicit, function_normal, function_static, function_nested, function_event, function_command } ftype; bool isinline; bool noinlinep; bool isexterninline; bool defined; /* nesC: true if defined, false if used */ bool suppress_definition; /* Prevent code generation */ bool uncallable; /* Error if called */ bool async; /* True if async declared (cmd/event) or inferred (C function) */ bool actual_async; /* Inferred value for async */ /* The call_contexts summarise the runtime contexts in which this fn might be called. So if all calls to f are in atomic statements, and f calls g outside an atomic statement, then g->call_contexts == c_call_atomic */ call_contexts call_contexts; call_contexts extra_contexts; /* Some extra, hidden call contexts (used to support __nesc_enable_interrupt) */ bool makeinline; /* Mark this function inline when generating code */ gnode ig_node; /* inline-graph node for this function */ struct data_declaration *interface; /* nesC: interface this cmd/event belongs to */ typelist oldstyle_args; /* Type of arguments from old-style declaration */ dd_list/*iduse*/ fn_uses; /* list of uses of identifiers in this fn */ struct connections *connections; /* See nesc-generate.c: what this command or event is connected to. */ /* folding function for magic functions. pass is 0 when constant folding during parsing, and goes from 1 to n for each final constant folding pass (after all components loaded) */ known_cst (*magic_fold)(function_call fcall, int pass); /* For variables */ enum { variable_register, variable_static, variable_normal } vtype; bool islocal; /* True for non-static local vars */ bool isparameter; /* implies islocal */ bool async_access; /* Some kind of access in an async context */ bool async_write; /* A write in async context */ bool norace; /* For constants */ known_cst value; bool substitute; /* Substitute value when unparsing */ /* For magic_strings */ cstring schars; /* For interface_ref */ nesc_declaration itype; environment functions; bool required; typelist gparms; /* For component_ref */ nesc_declaration ctype; /* For documentation comments */ struct docstring doc; /* For typedefs of network base types */ data_declaration encoder, decoder; /* encoder and decoder functions */ data_declaration bf_encoder, bf_decoder; /* bitfield encoder and decoder functions */ bool isbe; /* TRUE for big-endian types */ type basetype; /* underlying non-network type (e.g., uint8_t) */ /* For type variables (some decl_typedefs). Regular typedefs (not type variables) have typevar_none here. */ enum { typevar_none, typevar_normal, typevar_integer, typevar_number } typevar_kind; }; struct label_declaration { const char *name; bool explicitly_declared; bool used; id_label firstuse; /* Never NULL */ id_label definition; /* NULL until actually defined */ function_decl containing_function; atomic_stmt containing_atomic; }; struct environment { struct environment *sameregion parent; function_decl fdecl; bool parm_level : 1; bool global_level : 1; /* Both system and component */ bool deputy_scope : 1; env sameregion id_env; env sameregion tag_env; }; extern data_declaration bad_decl; #endif nescc-1.3.4/src/dhash.c000066400000000000000000000113371177770303300146510ustar00rootroot00000000000000/* * Copyright (c) 1999-2001 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the * distribution. * - Neither the name of the University of California nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * */ /* A (growable) hash table */ #include #include "dhash.h" #if HAVE_STDINT_H #include typedef uint32_t uint32; typedef uint64_t uint64; #else /* let's be gcc-specific as a fallback */ #include typedef unsigned int __attribute__ ((mode(__SI__))) uint32; typedef unsigned int __attribute__ ((mode(__DI__))) uint64; #endif struct dhash_table { region sameregion r; void **sameregion elements; unsigned long size, used, log2size; int (*compare)(void *key, void *y); unsigned long (*hash)(void *x); }; dhash_table new_dhash_table(region r, unsigned long initial_size, int (*compare)(void *key, void *y), unsigned long (*hash)(void *x)) { dhash_table h = ralloc(r, struct dhash_table); h->r = r; h->elements = rarrayalloc(r, initial_size, void *); h->size = initial_size; h->log2size = 0; while (initial_size > 1) { h->log2size++; initial_size >>= 1; } h->used = 0; h->compare = compare; h->hash = hash; return h; } unsigned long dhash_used(dhash_table h) { return h->used; } #define MAGIC 0.6180339987 #define LLMAGIC ((uint64)(MAGIC * ((uint64)1 << 8 * sizeof(uint32)))) static unsigned long dhash(dhash_table h, void *x) { uint32 hval = h->hash(x); uint32 hash = hval * LLMAGIC; return hash >> (8 * sizeof(uint32) - h->log2size); } void *dhlookup(dhash_table h, void *x) { unsigned long i = dhash(h, x); for (;;) { void *bucket = h->elements[i]; if (!bucket) return NULL; if (h->compare(x, bucket)) return bucket; if (++i >= h->size) i = 0; } } void dhadd(dhash_table h, void *x) { unsigned long i; h->used++; if (h->used > 3 * h->size / 4) { void **oldelements = h->elements; unsigned long j, oldsize = h->size; /* Grow hashtable */ h->size *= 2; h->log2size++; h->elements = rarrayalloc(h->r, h->size, void *); /* Rehash old entries */ for (j = 0; j < oldsize; j++) if (oldelements[j]) { unsigned long newi = dhash(h, oldelements[j]); while (h->elements[newi]) { newi++; if (newi >= h->size) newi = 0; } h->elements[newi] = oldelements[j]; if (j == i) i = newi; } } i = dhash(h, x); for (;;) { if (!h->elements[i]) { h->elements[i] = x; return; } if (++i >= h->size) i = 0; } } void *dhaddif(dhash_table h, void *entry) { void *existing = dhlookup(h, entry); if (existing) return existing; dhadd(h, entry); return NULL; } dhash_scan dhscan(dhash_table h) { dhash_scan iterator; iterator.h = h; iterator.index = 0; return iterator; } void *dhnext(dhash_scan *iterator) { dhash_table h = iterator->h; for (;;) { void *x; if (iterator->index >= h->size) return NULL; x = h->elements[iterator->index++]; if (x) return x; } } static int ptr_compare(void *key, void *y) { return key == y; } static unsigned long ptr_hash(void *x) { return (unsigned long)x >> 3; } dhash_table new_dhash_ptr_table(region r, unsigned long initial_size) { return new_dhash_table(r, initial_size, ptr_compare, ptr_hash); } nescc-1.3.4/src/dhash.h000066400000000000000000000062311177770303300146530ustar00rootroot00000000000000/* * Copyright (c) 1999-2001 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the * distribution. * - Neither the name of the University of California nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * */ #ifndef DHASH_H #define DHASH_H #include "regions.h" typedef struct dhash_table *dhash_table; dhash_table new_dhash_table(region r, unsigned long initial_size, int (*compare)(void *entry1, void *entry2), unsigned long (*hash)(void *entry)); /* Returns: new hash table created in region r, with specified initial size, comparison and hashing functions */ void *dhlookup(dhash_table h, void *entry); /* Returns: An entry x in hash table h such that compare(x, entry) is true, or NULL if no entry found. */ void dhadd(dhash_table h, void *entry); /* Effects: Unconditionally adds entry to hash table h (may create duplicates) Modifies: h */ void *dhaddif(dhash_table h, void *entry); /* Effects: Adds entry to hash table h if it's not already there (as determined by dhlookup) Returns: dhlookup's result if entry not added, NULL otherwise Modifies: h */ unsigned long dhash_used(dhash_table h); /* Returns: number of elements in hash table h */ typedef struct { dhash_table h; int index; } dhash_scan; dhash_scan dhscan(dhash_table h); /* Returns: new iterator for hash table h */ void *dhnext(dhash_scan *iterator); /* Requires: no changes to hash table have been made since dhscan returned *iterator Effects: Returns next element of hash table iterated by *iterator, or NULL if no elements remain Modifies: iterator */ /* Some predefined hash tables */ dhash_table new_dhash_ptr_table(region r, unsigned long initial_size); /* Returns: A new hash table which hashes pointers, with specified initial size */ #endif nescc-1.3.4/src/edit.c000066400000000000000000000114311177770303300145020ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "edit.h" #include "semantics.h" #include "stmt.h" #include "constants.h" #include "AST_utils.h" #include "unparse.h" /* Declare a new temporary that can be assigned a value of type t. Place the declaration at the start of block. XXX: See discussion in types.c:tag2ast about the (lack of) correctness of this approach. Return it's declaration */ data_decl build_declaration(region r, struct environment *e, type t, const char *name, expression init, data_declaration *oddecl) { struct data_declaration tempdecl; identifier_declarator id; variable_decl vd; data_decl dd; declarator tdeclarator; type_element tmodifiers; /* Compute real type, name */ if (type_array(t)) t = make_pointer_type(type_array_of(t)); else if (type_function(t)) t = make_pointer_type(t); /* Qualifiers must not be present on the temp (the qualifiers of t apply to the original location we are building a temp) */ t = make_qualified_type(t, no_qualifiers); /* Build AST for the declaration */ id = new_identifier_declarator(r, dummy_location, str2cstring(r, name)); type2ast(r, dummy_location, t, CAST(declarator, id), &tdeclarator, &tmodifiers); vd = new_variable_decl(r, dummy_location, tdeclarator, NULL, init, NULL, NULL); vd->declared_type = t; dd = new_data_decl(r, dummy_location, tmodifiers, CAST(declaration, vd)); if (e) /* Declare the variable */ { init_data_declaration(&tempdecl, CAST(declaration, vd), id->cstring.data, t); tempdecl.kind = decl_variable; tempdecl.vtype = variable_normal; tempdecl.islocal = TRUE; *oddecl = vd->ddecl = declare(e, &tempdecl, FALSE); } return dd; } #define TEMP_PREFIX "__nesc_temp" char *next_temporary(void) { static long nextid = 42; static char idname[sizeof(TEMP_PREFIX) + 20]; sprintf(idname, TEMP_PREFIX "%ld", nextid++); return idname; } /* Declare a new temporary that can be assigned a value of type t. Place the declaration at the start of block. Return it's declaration */ data_declaration add_temporary(region r, compound_stmt block, type t) { const char *name = next_temporary(); data_decl dd = build_declaration(r, NULL, t, name, NULL, NULL); struct data_declaration tempdecl; data_declaration ddecl; /* Add to the function's declarations */ dd->next = CAST(node, block->decls); block->decls = CAST(declaration, dd); #if 0 /* Set parent pointers */ AST_set_parents(CAST(node, dd)); dd->parent = CAST(node, block); dd->parent_ptr = CASTSRPTR(node, &block->decls); if (dd->next) dd->next->parent_ptr = &dd->next; #endif /* Declare the variable */ init_data_declaration(&tempdecl, dd->decls, rstrdup(r, name), t); tempdecl.kind = decl_variable; tempdecl.vtype = variable_normal; tempdecl.islocal = TRUE; ddecl = declare(block->env, &tempdecl, FALSE); CAST(variable_decl, dd->decls)->ddecl = ddecl; return ddecl; } word build_word(region r, const char *cword) { return new_word(r, dummy_location, str2cstring(r, cword)); } expression build_string(region r, location loc, const char *str) { string_cst elems = new_string_cst(r, loc, str2cstring(r, "oops")); data_declaration sdecl = declare_string(NULL, str2cstring(r, str), FALSE); string s = new_string(r, loc, elems, sdecl); s->type = sdecl->type; s->static_address = foldaddress_string(s); s->lvalue = TRUE; return CAST(expression, s); } expression build_function_call(region r, location loc, expression fn, expression arglist) { expression result = CAST(expression, new_function_call(r, loc, fn, arglist, NULL, normal_call)); type fntype = type_default_conversion(fn->type), rettype; if (type_pointer(fntype)) /* All function types come this way because default_conversion makes them into pointers to functions... */ fntype = type_points_to(fntype); rettype = type_function_return_type(fntype); result->type = rettype; result->cst = fold_function_call(result, 0); return result; } nescc-1.3.4/src/edit.h000066400000000000000000000032421177770303300145100ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EDIT_H #define EDIT_H /* Declare a new variable that can be assigned a value of type t. Place the declaration at the start of block. XXX: See discussion in types.c:tag2ast about the (lack of) correctness of this approach. Return it's declaration */ data_decl build_declaration(region r, struct environment *e, type t, const char *name, expression init, data_declaration *oddecl); /* Declare a new temporary that can be assigned a value of type t. Place the declaration at the start of block. Return it's declaration */ data_declaration add_temporary(region r, compound_stmt block, type t); word build_word(region r, const char *cword); expression build_string(region r, location loc, const char *s); expression build_function_call(region r, location loc, expression fn, expression arglist); #endif nescc-1.3.4/src/env.c000066400000000000000000000056721177770303300143570ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "env.h" #include "dhash.h" #include "utils.h" #define DEFAULT_ENV_SIZE 16 struct entry { const char *name; void *value; }; struct env { env parent; region sameregion r; dhash_table table; }; static int env_compare(void *entry1, void *entry2) { struct entry *e1 = entry1, *e2 = entry2; return e1->name && e2->name && strcmp(e1->name, e2->name) == 0; } static unsigned long env_hash(void *entry) { struct entry *e = entry; if (e->name) return hash_str(e->name); else /* unnamed (distinct from all other entries), hash on address */ return hash_ptr(e); } /* Create a new, empty environment with ancestor 'parent'. The environment, and any future contents, are allocated in r */ env new_env(region r, env parent) { env e = ralloc(r, struct env); e->r = r; e->parent = parent; e->table = new_dhash_table(r, DEFAULT_ENV_SIZE, env_compare, env_hash); return e; } /* Return parent environment of e */ env env_parent(env e) { return e->parent; } /* Return region of e */ region env_region(env e) { return e->r; } /* Find entry s in in environment e. If not found, check ancestors except if this_level_only is true. Returns entry's value if s is found, NULL otherwise */ void *env_lookup(env e, const char *s, bool this_level_only) { struct entry lookup, *found; lookup.name = s; for (;;) { found = dhlookup(e->table, &lookup); if (found) return found->value; if (this_level_only || !e->parent) return NULL; e = e->parent; } } /* Add an entry for s, with value 'value' to environment e. Behaviour is undefined if e already contains an entry for s. Does not copy s. */ void env_add(env e, const char *s, void *value) { struct entry *newe = ralloc(e->r, struct entry); newe->name = s; newe->value = value; dhadd(e->table, newe); } void env_scan(env e, env_scanner *scanner) { *scanner = dhscan(e->table); } bool env_next(env_scanner *scanner, const char **name, void **value) { struct entry *next = dhnext(scanner); if (!next) return FALSE; *name = next->name; *value = next->value; return TRUE; } nescc-1.3.4/src/env.h000066400000000000000000000037761177770303300143670ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef ENV_H #define ENV_H #include "dhash.h" #include "regions.h" typedef struct env *env; /* Create a new, empty environment with ancestor 'parent'. The environment, and any future contents, are allocated in r */ env new_env(region r, env parent); /* An environment can be deleted by deleting its region */ /* Return parent environment of e */ env env_parent(env e); /* Return region of e */ region env_region(env e); /* Find entry s in in environment e. If not found, check ancestors except if this_level_only is true. Returns entry's value if s is found, NULL otherwise */ void *env_lookup(env e, const char *s, bool this_level_only); /* Add an entry for s, with value 'value' to environment e. If e already contains an entry for s, then the old entry is hidden (but will still be found by env_scan). s can be NULL (this allows registering of untagged structs/etc in environments). Such entries cannot be found by env_lookup. Does not copy s. */ void env_add(env e, const char *s, void *value); /* Scanning */ typedef dhash_scan env_scanner; void env_scan(env e, env_scanner *scanner); bool env_next(env_scanner *scanner, const char **name, void **value); #endif nescc-1.3.4/src/errors.c000066400000000000000000000222401177770303300150710ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "parser.h" #include "errors.h" #include "semantics.h" #include "nesc-semantics.h" #include "flags.h" /* Name of program invoked (from argv[0]). */ const char *progname; int errorcount; int warningcount; static location error_location; /* Set and clear the error/warning location to use when there is no input file stack */ void set_error_location(location l) { error_location = l; } void clear_error_location(void) { error_location = NULL; } location current_location(void) { if (current.lex.input) return ¤t.lex.input->l; else if (error_location) return error_location; else return dummy_location; } /* Count an error or warning. Return 1 if the message should be printed. */ int count_error(int warningp) { if (warningp && inhibit_warnings) return 0; if (warningp && !warnings_are_errors) warningcount++; else { static int warning_message = 0; if (warningp && !warning_message) { fprintf (stderr, "%s: warnings being treated as errors\n", progname); warning_message = 1; } errorcount++; } return 1; } /* Function of last error message; more generally, function such that if next error message is in it then we don't have to mention the function name. */ static function_decl last_error_function = NULL; /* Used to detect when current.lex.input has changed since last described. */ static int last_error_tick; /* The default function to print out name of current function that caused an error. */ /* Called by report_error_function to print out function name. */ void print_error_function(const char *file) { if (last_error_function != current.function_decl) { if (file) fprintf (stderr, "%s: ", file); if (current.function_decl == NULL) fprintf (stderr, "At top level:\n"); else { const char *name, *iname; declarator_name(current.function_decl->declarator, &name, &iname); fprintf (stderr, "In function `%s%s%s':\n", iname ? iname : "", iname ? "." : "", name); } last_error_function = current.function_decl; } } /* Print the current component if it's changed */ void print_current_nesc_instance(void) { static nesc_declaration last_container; if (last_container != current.container) { if (current.container) fprintf(stderr, "In %s `%s':\n", language_name(current.container->kind), current.container->instance_name); else fprintf(stderr, "In C file:\n"); last_container = current.container; } } /* Prints out, if necessary, the name of the current function that caused an error. Called from all error and warning functions. */ void report_error_function(const char *file) { struct file_stack *p; if (current.lex.input && current.lex.input->next != 0 && input_file_stack_tick != last_error_tick && file == current.lex.input->l.filename) { fprintf (stderr, "In file included"); for (p = current.lex.input->next; p; p = p->next) { fprintf (stderr, " from %s:%lu", p->l.filename, p->l.lineno); if (p->next) fprintf (stderr, ",\n "); } fprintf (stderr, ":\n"); last_error_tick = input_file_stack_tick; } print_current_nesc_instance(); print_error_function(file); } static void pfile_and_line(FILE *f, location l) { if (l->container) fprintf(f, "%s(%s):%lu: ", l->filename, l->container->instance_name, l->lineno); else if (l->lineno) fprintf(f, "%s:%lu: ", l->filename, l->lineno); else fprintf(f, "%s: ", l->filename); } /* Report error msg at l */ void verror_with_location(location l, const char *format, va_list args) { count_error(FALSE); report_error_function(l->filename); pfile_and_line(stderr, l); vfprintf(stderr, format, args); putc('\n', stderr); } /* Report error msg at decl */ void verror_with_decl(declaration d, const char *format, va_list args) { verror_with_location(d->location, format, args); } /* Report error msg at current filename, lineno */ void verror(const char *format, va_list args) { if (current.lex.input) verror_with_location(¤t.lex.input->l, format, args); else if (error_location) verror_with_location(error_location, format, args); else { count_error(FALSE); fprintf(stderr, "%s: ", progname); vfprintf(stderr, format, args); putc('\n', stderr); } } /* Report error msg at current filename, lineno */ void error(const char *format, ...) { va_list args; va_start(args, format); verror(format, args); va_end(args); } /* Report error msg at decl */ void error_with_decl(declaration d, const char *format, ...) { va_list args; va_start(args, format); verror_with_decl(d, format, args); va_end(args); } /* Report error msg at l */ void error_with_location(location l, const char *format, ...) { va_list args; va_start(args, format); verror_with_location(l, format, args); va_end(args); } /* Report a fatal error at the current line number. */ void vfatal(const char *format, va_list args) { verror(format, args); exit(FATAL_EXIT_CODE); } void fatal(const char *format, ...) { va_list args; va_start(args, format); vfatal(format, args); va_end(args); } /* Report warning msg at l */ void vwarning_with_location(location l, const char *format, va_list args) { if (count_error(TRUE)) { report_error_function(l->filename); pfile_and_line(stderr, l); fprintf(stderr, "warning: "); vfprintf(stderr, format, args); putc('\n', stderr); } } /* Report warning msg at decl */ void vwarning_with_decl(declaration d, const char *format, va_list args) { vwarning_with_location(d->location, format, args); } /* Report warning msg at current filename, lineno */ void vwarning(const char *format, va_list args) { if (current.lex.input) vwarning_with_location(¤t.lex.input->l, format, args); else if (error_location) vwarning_with_location(error_location, format, args); else if (count_error(TRUE)) { fprintf(stderr, "%s: warning: ", progname); vfprintf(stderr, format, args); putc('\n', stderr); } } /* Report warning msg at current filename, lineno */ void warning(const char *format, ...) { va_list args; va_start(args, format); vwarning(format, args); va_end(args); } /* Report warning msg at decl */ void warning_with_decl(declaration d, const char *format, ...) { va_list args; va_start(args, format); vwarning_with_decl(d, format, args); va_end(args); } /* Report warning msg at l */ void warning_with_location(location l, const char *format, ...) { va_list args; va_start(args, format); vwarning_with_location(l, format, args); va_end(args); } /* Report warning msg at current filename, lineno */ void warning_or_error(bool iswarning, const char *format, ...) { va_list args; va_start(args, format); if (iswarning) vwarning(format, args); else verror(format, args); va_end(args); } /* Report warning msg at decl */ void warning_or_error_with_decl(bool iswarning, declaration d, const char *format, ...) { va_list args; va_start(args, format); if (iswarning) vwarning_with_decl(d, format, args); else verror_with_decl(d, format, args); va_end(args); } /* Report warning msg at l */ void warning_or_error_with_location(bool iswarning, location l, const char *format, ...) { va_list args; va_start(args, format); if (iswarning) vwarning_with_location(l, format, args); else verror_with_location(l, format, args); va_end(args); } /* Report pedantic warning or error msg at current filename, lineno */ void pedwarn(const char *format, ...) { va_list args; va_start(args, format); if (flag_pedantic_errors) verror(format, args); else vwarning(format, args); va_end(args); } /* Report pedantic warning or error msg at d */ void pedwarn_with_decl(declaration d, const char *format, ...) { va_list args; va_start(args, format); if (flag_pedantic_errors) verror_with_decl(d, format, args); else vwarning_with_decl(d, format, args); va_end(args); } /* Report pedantic warning or error msg at l */ void pedwarn_with_location(location l, const char *format, ...) { va_list args; va_start(args, format); if (flag_pedantic_errors) verror_with_location(l, format, args); else vwarning_with_location(l, format, args); va_end(args); } nescc-1.3.4/src/errors.h000066400000000000000000000064041177770303300151020ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef ERRORS_H #define ERRORS_H /* Name of program invoked, sans directories. */ extern const char *progname; extern int errorcount; extern int warningcount; /* Set and clear the error/warning location to use when there is no input file stack */ void set_error_location(location l); void clear_error_location(void); location current_location(void); /* Report error msg at l */ void verror_with_location(location l, const char *format, va_list args); /* Report error msg at decl */ void verror_with_decl(declaration d, const char *format, va_list args); /* Report error msg at current filename, lineno */ void verror(const char *format, va_list args); /* Report error msg at current filename, lineno */ void error(const char *format, ...); /* Report error msg at decl */ void error_with_decl(declaration d, const char *format, ...); /* Report error msg at l */ void error_with_location(location l, const char *format, ...); /* Report a fatal error at the current line number. */ void vfatal(const char *format, va_list args); void fatal(const char *format, ...); /* Report warning msg at l */ void vwarning_with_location(location l, const char *format, va_list args); /* Report warning msg at decl */ void vwarning_with_decl(declaration d, const char *format, va_list args); /* Report warning msg at current filename, lineno */ void vwarning(const char *format, va_list args); /* Report warning msg at current filename, lineno */ void warning(const char *format, ...); /* Report warning msg at decl */ void warning_with_decl(declaration d, const char *format, ...); /* Report warning msg at l */ void warning_with_location(location l, const char *format, ...); /* Report warning msg at current filename, lineno */ void warning_or_error(bool iswarning, const char *format, ...); /* Report warning msg at decl */ void warning_or_error_with_decl(bool iswarning, declaration d, const char *format, ...); /* Report warning msg at l */ void warning_or_error_with_location(bool iswarning, location l, const char *format, ...); /* Report pedantic warning or error msg at current filename, lineno */ void pedwarn(const char *format, ...); /* Report pedantic warning or error msg at d */ void pedwarn_with_decl(declaration d, const char *format, ...); /* Report pedantic warning or error msg at l */ void pedwarn_with_location(location l, const char *format, ...); #endif nescc-1.3.4/src/expr.c000066400000000000000000001406311177770303300145400ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "expr.h" #include "types.h" #include "c-parse.h" #include "constants.h" #include "unparse.h" #include "semantics.h" #include "stmt.h" #include "AST_utils.h" #include "nesc-module.h" #include "nesc-configuration.h" #include "nesc-component.h" #include "nesc-semantics.h" /* Return TRUE if TTL and TTR are pointers to types that are equivalent, ignoring their qualifiers. */ static bool compatible_pointer_targets(type ttl, type ttr, bool pedantic) { int val; val = type_compatible_unqualified(ttl, ttr); if (val == 2 && pedantic) pedwarn("types are not quite compatible"); return val != 0; } static bool compatible_pointer_types(type tl, type tr) { return compatible_pointer_targets(type_points_to(tl), type_points_to(tr), pedantic); } /* Function arguments are positive, interface parameters are negative. Return appropriate string for messages for *parmnum, and set *parmnum to its absolute value */ static const char *argtype(int *parmnum) { if (*parmnum >= 0) return "argument"; *parmnum = -*parmnum; return "parameter"; } static void warn_for_assignment(const char *msg, const char *opname, data_declaration fdecl, int argnum) { static char argstring[] = "passing %s %d of `%s'"; static char argnofun[] = "passing %s %d"; if (opname == 0) { char *tmpname; const char *argname = argtype(&argnum); if (fdecl) { const char *function = decl_printname(fdecl); /* Function name is known; supply it. */ tmpname = (char *)alloca(strlen(function) + sizeof(argstring) + 25 /*%d*/ + 1); sprintf(tmpname, argstring, argname, argnum, function); } else { /* Function name unknown (call through ptr); just give arg number. */ tmpname = (char *)alloca(sizeof(argnofun) + 25 /*%d*/ + 1); sprintf(tmpname, argnofun, argname, argnum); } opname = tmpname; } pedwarn(msg, opname); } static void incomplete_type_error(expression e, type t) { /* Avoid duplicate error message. */ if (t == error_type) return; if (e && is_identifier(e)) error("`%s' has an incomplete type", CAST(identifier, e)->cstring.data); else { while (type_array(t) && type_array_size(t)) t = type_array_of(t); if (type_tagged(t)) { tag_declaration tag = type_tag(t); error("invalid use of undefined type `%s %s'", tagkind_name(tag->kind), tag->name); } else if (type_void(t)) error("invalid use of void expression"); else if (type_array(t)) error("invalid use of array with unspecified bounds"); else assert(0); /* XXX: Missing special message for typedef's */ } } static type require_complete_type(expression e, type etype) { if (!type_incomplete(etype)) return e->type; incomplete_type_error(e, etype); return error_type; } type default_conversion(expression e) { type from = e->type; if (type_enum(from)) from = type_tag(from)->reptype; if (type_smallerthanint(from)) { /* Traditionally, unsignedness is preserved in default promotions. */ if (flag_traditional && type_unsigned(from)) return unsigned_int_type; else return int_type; } if (flag_traditional && !flag_allow_single_precision && type_float(from)) return double_type; if (type_void(from)) { error("void value not ignored as it ought to be"); return error_type; } /* Note that the (future) type variables cannot represent function or array types, so we need not worry about what default_conversion does to them for the function and array type cases. */ if (type_function(from)) { assert(!e->cst); e->cst = e->static_address; e->converted_to_pointer = TRUE; return make_pointer_type(from); } if (type_array(from)) { if (!e->lvalue) { error("invalid use of non-lvalue array"); return error_type; } assert(!e->cst); e->cst = e->static_address; e->converted_to_pointer = TRUE; /* It's being used as a pointer, so is not an lvalue */ e->lvalue = FALSE; return make_pointer_type(type_array_of(from)); } if (type_variable(from)) { data_declaration vdecl = type_variable_decl(from); switch (vdecl->typevar_kind) { case typevar_integer: return unknown_int_type; case typevar_number: return unknown_number_type; default: break; } } return from; } /* called default_function_array_conversion in gcc 3.x */ type default_conversion_for_assignment(expression e) { if (type_array(e->type) || type_function(e->type)) return default_conversion(e); else return e->type; } static void readonly_warning(expression e, char *context) { char buf[80]; strcpy(buf, context); if (is_field_ref(e)) { field_ref field = CAST(field_ref, e); if (type_readonly(field->arg1->type)) readonly_warning(field->arg1, context); else { strcat(buf, " of read-only member `%s'"); pedwarn(buf, field->cstring.data); } } else if (is_identifier(e)) { strcat(buf, " of read-only variable `%s'"); pedwarn(buf, CAST(identifier, e)->cstring.data); } else pedwarn ("%s of read-only location", buf); } static bool check_writable_lvalue(expression e, char *context) { if (!e->lvalue || type_array(e->type)) { error("invalid lvalue in %s", context); return FALSE; } if (type_readonly(e->type)) readonly_warning(e, context); return TRUE; } bool check_conversion(type to, type from) { if (type_equal_unqualified(to, from)) return TRUE; if (to == error_type || from == error_type) return FALSE; if (type_void(from)) { error("void value not ignored as it ought to be"); return FALSE; } if (type_void(to)) return TRUE; if (type_integer(to)) { if (!type_scalar(from)) { error("aggregate value used where an integer was expected"); return FALSE; } } else if (type_pointer(to)) { if (!(type_integer(from) || type_pointer(from))) { error("cannot convert to a pointer type"); return FALSE; } } else if (type_floating(to)) { if (type_pointer(from)) { error("pointer value used where a floating point value was expected"); return FALSE; } else if (!type_arithmetic(from)) { error("aggregate value used where a float was expected"); return FALSE; } } else if (type_complex(to)) { if (type_pointer(from)) { error("pointer value used where a complex was expected"); return FALSE; } else if (!type_arithmetic(from)) { error("aggregate value used where a complex was expected"); return FALSE; } } else { error("conversion to non-scalar type requested"); return FALSE; } return TRUE; } static bool assignable_pointer_targets(type tt1, type tt2, bool pedantic) { return type_void(tt1) || type_void(tt2) || compatible_pointer_targets(tt1, tt2, pedantic); } static void ptrconversion_warnings(type ttl, type ttr, expression rhs, const char *context, data_declaration fdecl, int parmnum, bool pedantic) { if (pedantic && ((type_void(ttl) && type_function(ttr)) || (type_function(ttl) && type_void(ttr) && !(rhs && definite_null(rhs))))) warn_for_assignment("ANSI forbids %s between function pointer and `void *'", context, fdecl, parmnum); /* Const and volatile mean something different for function types, so the usual warnings are not appropriate. */ else if (type_function(ttl) && type_function(ttr)) { /* Because const and volatile on functions are restrictions that say the function will not do certain things, it is okay to use a const or volatile function where an ordinary one is wanted, but not vice-versa. */ if (type_const(ttl) && !type_const(ttr)) warn_for_assignment("%s makes `const *' function pointer from non-const", context, fdecl, parmnum); if (type_volatile(ttl) && !type_volatile(ttr)) warn_for_assignment("%s makes `volatile *' function pointer from non-volatile", context, fdecl, parmnum); } else if (!type_function(ttl) && !type_function(ttr)) { if (!type_const(ttl) && type_const(ttr)) warn_for_assignment("%s discards `const' from pointer target type", context, fdecl, parmnum); if (!type_volatile(ttl) && type_volatile(ttr)) warn_for_assignment("%s discards `volatile' from pointer target type", context, fdecl, parmnum); /* If this is not a case of ignoring a mismatch in signedness, no warning. */ if (!assignable_pointer_targets(ttl, ttr, FALSE) && pedantic) warn_for_assignment("pointer targets in %s differ in signedness", context, fdecl, parmnum); } } /* Return TRUE if no error and lhstype and rhstype are not error_type */ bool check_assignment(type lhstype, type rhstype, expression rhs, const char *context, data_declaration fundecl, int parmnum) { bool zerorhs = rhs && definite_zero(rhs); if (lhstype == error_type || rhstype == error_type) return FALSE; if (type_void(rhstype)) { error("void value not ignored as it ought to be"); return FALSE; } if (type_equal_unqualified(lhstype, rhstype)) return TRUE; if (type_arithmetic(lhstype) && type_arithmetic(rhstype)) { if (rhs) constant_overflow_warning(rhs->cst); return check_conversion(lhstype, rhstype); } if (parmnum && (type_qualifiers(lhstype) & transparent_qualifier)) { /* See if we can match any field of lhstype */ tag_declaration tag = type_tag(lhstype); field_declaration fields, marginal_field = NULL; /* I blame gcc for this horrible mess (and it's minor inconsistencies with the regular rules) */ /* pedantic warnings are skipped in here because we're already issuing a warning for the use of this construct */ for (fields = tag->fieldlist; fields; fields = fields->next) { type ft = fields->type; if (type_compatible(ft, rhstype)) break; if (!type_pointer(ft)) continue; if (type_pointer(rhstype)) { type ttl = type_points_to(ft), ttr = type_points_to(rhstype); bool goodmatch = assignable_pointer_targets(ttl, ttr, FALSE); /* Any non-function converts to a [const][volatile] void * and vice versa; otherwise, targets must be the same. Meanwhile, the lhs target must have all the qualifiers of the rhs. */ if (goodmatch) { /* If this type won't generate any warnings, use it. */ if ((type_function(ttr) && type_function(ttl)) ? ((!type_const(ttl) | type_const(ttr)) & (!type_volatile(ttl) | type_volatile(ttr))) : ((type_const(ttl) | !type_const(ttr)) & (type_volatile(ttl) | !type_volatile(ttr)))) break; /* Keep looking for a better type, but remember this one. */ if (!marginal_field) marginal_field = fields; } } /* Can convert integer zero to any pointer type. */ /* Note that this allows passing *any* null pointer (gcc bug?) */ if (zerorhs) break; } if (fields || marginal_field) { if (!fields) { /* We have only a marginally acceptable member type; it needs a warning. */ type ttl = type_points_to(marginal_field->type), ttr = type_points_to(rhstype); ptrconversion_warnings(ttl, ttr, rhs, context, fundecl, parmnum, FALSE); } if (pedantic && !(fundecl && fundecl->in_system_header)) pedwarn("ANSI C prohibits argument conversion to union type"); return TRUE; } } if (type_pointer(lhstype) && type_pointer(rhstype)) { type ttl = type_points_to(lhstype), ttr = type_points_to(rhstype); bool goodmatch = assignable_pointer_targets(ttl, ttr, pedantic); /* Any non-function converts to a [const][volatile] void * and vice versa; otherwise, targets must be the same. Meanwhile, the lhs target must have all the qualifiers of the rhs. */ if (goodmatch || (type_equal_unqualified(make_unsigned_type(ttl), make_unsigned_type(ttr)))) ptrconversion_warnings(ttl, ttr, rhs, context, fundecl, parmnum, pedantic); else warn_for_assignment("%s from incompatible pointer type", context, fundecl, parmnum); return check_conversion(lhstype, rhstype); } /* enum = ptr and ptr = enum counts as an error, so use type_integral */ else if (type_pointer(lhstype) && type_integral(rhstype)) { if (!zerorhs) warn_for_assignment("%s makes pointer from integer without a cast", context, fundecl, parmnum); return check_conversion(lhstype, rhstype); } else if (type_integral(lhstype) && type_pointer(rhstype)) { warn_for_assignment("%s makes integer from pointer without a cast", context, fundecl, parmnum); return check_conversion(lhstype, rhstype); } if (!context) { const char *argname = argtype(&parmnum); if (fundecl) error("incompatible type for %s %d of `%s'", argname, parmnum, decl_printname(fundecl)); else error("incompatible type for %s %d of indirect function call", argname, parmnum); } else error("incompatible types in %s", context); return FALSE; } expression make_error_expr(void) { expression result = CAST(expression, new_error_expr(parse_region, dummy_location)); result->type = error_type; return result; } expression make_comma(location loc, expression elist) { expression result = CAST(expression, new_comma(parse_region, loc, elist)); expression e; bool all_cst = TRUE; scan_expression (e, elist) if (e->next) /* Not last */ { if (!e->cst) all_cst = FALSE; #if 0 if (!e->side_effects) { /* The left-hand operand of a comma expression is like an expression statement: with -W or -Wunused, we should warn if it doesn't have any side-effects, unless it was explicitly cast to (void). */ if ((extra_warnings || warn_unused) && !(TREE_CODE (TREE_VALUE (list)) == CONVERT_EXPR && TREE_TYPE (TREE_VALUE (list)) == void_type_node)) warning ("left-hand operand of comma expression has no effect"); } else if (warn_unused) warn_if_unused_value(e); #endif } else { if (type_array(e->type)) result->type = default_conversion(e); else result->type = e->type; if (!pedantic) { /* (e1, ..., en) is a constant expression if all ei are constant expressions. Weird? (see cst10.c) */ if (all_cst) result->cst = e->cst; result->lvalue = e->lvalue; result->isregister = e->isregister; result->bitfield = e->bitfield; } } return result; } static void check_dereference(expression result, type dereferenced, const char *errorstring) { if (type_pointer(dereferenced)) { type t = type_points_to(dereferenced); result->type = t; #if 0 if (TYPE_SIZE (t) == 0 && TREE_CODE (t) != ARRAY_TYPE) { error ("dereferencing pointer to incomplete type"); return error_mark_node; } #endif if (type_void(t) && !unevaluated_expression()) warning("dereferencing `void *' pointer"); result->side_effects |= type_volatile(t) /*|| flag_volatile*/; } else { result->type = error_type; if (dereferenced != error_type) error("invalid type argument of `%s'", errorstring); } result->lvalue = TRUE; } expression make_dereference(location loc, expression e) { expression result = CAST(expression, new_dereference(parse_region, loc, e)); result->side_effects = e->side_effects; check_dereference(result, default_conversion(e), "unary *"); result->static_address = e->cst; return result; } expression make_extension_expr(location loc, expression e) { expression result = CAST(expression, new_extension_expr(parse_region, loc, e)); result->type = e->type; result->lvalue = e->lvalue; result->side_effects = e->side_effects; result->cst = e->cst; result->bitfield = e->bitfield; result->isregister = e->isregister; result->static_address = e->static_address; return result; } expression make_address_of(location loc, expression e) { expression result = CAST(expression, new_address_of(parse_region, loc, e)); result->type = error_type; if (e->type == error_type) ; else if (e->bitfield) error("attempt to take address of a bit-field structure member"); else { if (e->isregister) pedwarn("address of a register variable requested"); if (!(type_function(e->type) || e->lvalue)) error("invalid lvalue in unary `&'"); result->type = make_pointer_type(e->type); result->cst = e->static_address; } return result; } expression make_unary(location loc, int unop, expression e) { switch (unop) { case kind_address_of: return make_address_of(loc, e); case kind_preincrement: return make_preincrement(loc, e); case kind_predecrement: return make_predecrement(loc, e); default: { expression result = CAST(expression, newkind_unary(parse_region, unop, loc, e)); type etype = default_conversion(e); const char *errstring = NULL; if (etype == error_type) result->type = error_type; else { switch (unop) { case kind_unary_plus: if (!type_arithmetic(etype)) errstring = "wrong type argument to unary plus"; break; case kind_unary_minus: if (!type_arithmetic(etype)) errstring = "wrong type argument to unary minus"; break; case kind_bitnot: if (type_complex(etype)) result->kind = kind_conjugate; else if (!type_integer(etype)) errstring = "wrong type argument to bit-complement"; break; case kind_not: if (!type_scalar(etype)) errstring = "wrong type argument to unary exclamation mark"; else etype = int_type; break; case kind_realpart: case kind_imagpart: if (!type_arithmetic(etype)) if (unop == kind_realpart) errstring = "wrong type argument to __real__"; else errstring = "wrong type argument to __imag__"; else etype = type_complex(etype) ? make_base_type(etype) : etype; break; default: assert(0); } if (errstring) { error(errstring); result->type = error_type; } else { result->type = etype; result->cst = fold_unary(result); } } return result; } } } expression make_label_address(location loc, id_label label) { expression result = CAST(expression, new_label_address(parse_region, loc, label)); use_label(label); result->type = ptr_void_type; result->cst = fold_label_address(result); if (pedantic) pedwarn("ANSI C forbids `&&'"); return result; } static void check_sizealign(const char *kind, type stype) { if (type_command(stype) || type_event(stype) || type_interface(stype) || type_component(stype)) error("%s applied to a command, event, interface or component", kind); else if (type_incomplete(stype)) error("%s applied to an incomplete type", kind); } void check_sizeof(expression result, type stype) { if (type_function(stype)) { if (pedantic || warn_pointer_arith) pedwarn("sizeof applied to a function type"); } else if (type_void(stype)) { if (pedantic || warn_pointer_arith) pedwarn("sizeof applied to a void type"); } else check_sizealign("sizeof", stype); result->type = size_t_type; result->cst = fold_sizeof(result, stype); } expression make_sizeof_expr(location loc, expression e) { expression result = CAST(expression, new_sizeof_expr(parse_region, loc, e)); check_sizeof(result, e->type); return result; } expression make_sizeof_type(location loc, asttype t) { expression result = CAST(expression, new_sizeof_type(parse_region, loc, t)); check_sizeof(result, t->type); return result; } void check_alignof(expression result, type stype) { check_sizealign("__alignof__", stype); result->type = size_t_type; result->cst = fold_sizeof(result, stype); } expression make_alignof_expr(location loc, expression e) { expression result = CAST(expression, new_alignof_expr(parse_region, loc, e)); check_alignof(result, e->type); return result; } expression make_alignof_type(location loc, asttype t) { expression result = CAST(expression, new_alignof_type(parse_region, loc, t)); check_alignof(result, t->type); return result; } expression make_cast(location loc, asttype t, expression e) { expression result = CAST(expression, new_cast(parse_region, loc, e, t)); type castto = t->type; if (castto == error_type || type_void(castto)) ; /* Do nothing */ else if (type_array(castto)) { error("cast specifies array type"); castto = error_type; } else if (type_function(castto)) { error("cast specifies function type"); castto = error_type; } else if (type_equal_unqualified(castto, e->type)) { if (pedantic && type_aggregate(castto)) pedwarn("ANSI C forbids casting nonscalar to the same type"); } else { type etype = e->type; /* Convert functions and arrays to pointers, but don't convert any other types. */ if (type_function(etype) || type_array(etype)) etype = default_conversion(e); if (type_union(castto)) { tag_declaration utag = type_tag(castto); field_declaration ufield; /* Look for etype as a field of the union */ for (ufield = utag->fieldlist; ufield; ufield = ufield->next) if (ufield->name && type_equal_unqualified(ufield->type, etype)) { if (pedantic) pedwarn("ANSI C forbids casts to union type"); break; } if (!ufield) error("cast to union type from type not present in union"); } else { /* Optionally warn about potentially worrisome casts. */ if (warn_cast_qual && type_pointer(etype) && type_pointer(castto)) { type ep = type_points_to(etype), cp = type_points_to(castto); if (type_volatile(ep) && !type_volatile(cp)) pedwarn("cast discards `volatile' from pointer target type"); if (type_const(ep) && !type_const(cp)) pedwarn("cast discards `const' from pointer target type"); } /* This warning is weird */ if (warn_bad_function_cast && is_function_call(e) && !type_equal_unqualified(castto, etype)) warning ("cast does not match function type"); #if 0 /* Warn about possible alignment problems. */ if (STRICT_ALIGNMENT && warn_cast_align && TREE_CODE (type) == POINTER_TYPE && TREE_CODE (otype) == POINTER_TYPE && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE /* Don't warn about opaque types, where the actual alignment restriction is unknown. */ && !((TREE_CODE (TREE_TYPE (otype)) == UNION_TYPE || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE) && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode) && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype))) warning ("cast increases required alignment of target type"); if (TREE_CODE (type) == INTEGER_TYPE && TREE_CODE (otype) == POINTER_TYPE && TYPE_PRECISION (type) != TYPE_PRECISION (otype) && !TREE_CONSTANT (value)) warning ("cast from pointer to integer of different size"); if (TREE_CODE (type) == POINTER_TYPE && TREE_CODE (otype) == INTEGER_TYPE && TYPE_PRECISION (type) != TYPE_PRECISION (otype) #if 0 /* Don't warn about converting 0 to pointer, provided the 0 was explicit--not cast or made by folding. */ && !(TREE_CODE (value) == INTEGER_CST && integer_zerop (value)) #endif /* Don't warn about converting any constant. */ && !TREE_CONSTANT (value)) warning ("cast to pointer from integer of different size"); #endif if (!check_conversion(castto, etype)) castto = error_type; } } result->lvalue = !pedantic && e->lvalue; result->isregister = e->isregister; result->bitfield = e->bitfield; result->static_address = e->static_address; result->type = castto; if (castto != error_type) result->cst = fold_cast(result); return result; } type pointer_int_sum(type ptype, type itype) { type pointed = type_points_to(ptype); if (type_void(pointed)) { if (pedantic || warn_pointer_arith) pedwarn("pointer of type `void *' used in arithmetic"); } else if (type_function(pointed)) { if (pedantic || warn_pointer_arith) pedwarn("pointer to a function used in arithmetic"); } else if (type_incomplete(pointed)) error("arithmetic on pointer to an incomplete type"); return ptype; } bool valid_compare(type t1, type t2, expression e1) { if (type_void(type_points_to(t1))) { if (pedantic && type_function(type_points_to(t2)) && !definite_null(e1)) pedwarn("ANSI C forbids comparison of `void *' with function pointer"); return TRUE; } return FALSE; } type check_binary(int binop, expression e1, expression e2) { type t1 = default_conversion(e1), t2 = default_conversion(e2); type rtype = NULL; bool common = FALSE; /* XXX: Misc warnings (see build_binary_op) */ if (t1 == error_type || t2 == error_type) rtype = error_type; else switch(binop) { case kind_plus: if (type_pointer(t1) && type_integer(t2)) rtype = pointer_int_sum(t1, t2); else if (type_pointer(t2) && type_integer(t1)) rtype = pointer_int_sum(t2, t1); else common = TRUE; break; case kind_minus: if (type_pointer(t1) && type_integer(t2)) rtype = pointer_int_sum(t1, t2); else if (type_pointer(t1) && type_pointer(t2) && compatible_pointer_types(t1, t2)) rtype = ptrdiff_t_type; else common = TRUE; break; case kind_plus_assign: case kind_minus_assign: if (type_pointer(t1) && type_integer(t2)) rtype = pointer_int_sum(t1, t2); else common = TRUE; break; case kind_times: case kind_divide: case kind_times_assign: case kind_divide_assign: common = TRUE; break; case kind_modulo: case kind_bitand: case kind_bitor: case kind_bitxor: case kind_lshift: case kind_rshift: case kind_modulo_assign: case kind_bitand_assign: case kind_bitor_assign: case kind_bitxor_assign: case kind_lshift_assign: case kind_rshift_assign: if (type_integer(t1) && type_integer(t2)) rtype = common_type(t1, t2); break; case kind_leq: case kind_geq: case kind_lt: case kind_gt: rtype = int_type; /* Default to assuming success */ if (type_real(t1) && type_real(t2)) ; else if (type_pointer(t1) && type_pointer(t2)) { if (compatible_pointer_types(t1, t2)) { /* XXX: how can this happen ? */ if (type_incomplete(t1) != type_incomplete(t2)) pedwarn("comparison of complete and incomplete pointers"); else if (pedantic && type_function(type_points_to(t1))) pedwarn("ANSI C forbids ordered comparisons of pointers to functions"); } else pedwarn("comparison of distinct pointer types lacks a cast"); } /* XXX: Use of definite_zero may lead to extra warnings when !extra_warnings */ else if ((type_pointer(t1) && definite_zero(e2)) || (type_pointer(t2) && definite_zero(e1))) { if (pedantic || extra_warnings) pedwarn("ordered comparison of pointer with integer zero"); } else if ((type_pointer(t1) && type_integer(t2)) || (type_pointer(t2) && type_integer(t1))) { if (!flag_traditional) pedwarn("comparison between pointer and integer"); } else rtype = NULL; /* Force error */ break; case kind_eq: case kind_ne: rtype = int_type; /* Default to assuming success */ if (type_arithmetic(t1) && type_arithmetic(t2)) ; else if (type_pointer(t1) && type_pointer(t2)) { if (!compatible_pointer_types(t1, t2) && !valid_compare(t1, t2, e1) && !valid_compare(t2, t1, e2)) pedwarn("comparison of distinct pointer types lacks a cast"); } else if ((type_pointer(t1) && definite_null(e2)) || (type_pointer(t2) && definite_null(e1))) ; else if ((type_pointer(t1) && type_integer(t2)) || (type_pointer(t2) && type_integer(t1))) { if (!flag_traditional) pedwarn("comparison between pointer and integer"); } else rtype = NULL; /* Force error */ break; case kind_andand: case kind_oror: if (type_scalar(t1) && type_scalar(t2)) rtype = int_type; break; default: assert(0); break; } if (common && type_arithmetic(t1) && type_arithmetic(t2)) rtype = common_type(t1, t2); if (!rtype) { error("invalid operands to binary %s", binary_op_name(binop)); rtype = error_type; } return rtype; } static bool unsafe_comparison(expression e) { return !e->parens && is_comparison(e); } expression make_binary(location loc, int binop, expression e1, expression e2) { expression result = CAST(expression, newkind_binary(parse_region, binop, loc, e1, e2)); result->type = check_binary(binop, e1, e2); if (result->type != error_type) { result->cst = fold_binary(result->type, result); } /* Check for cases such as x+y<parens ? 0 : e1->kind, code2 = e2->parens ? 0 : e2->kind; if (binop == kind_lshift || binop == kind_rshift) { if (code1 == kind_plus || code1 == kind_minus || code2 == kind_plus || code2 == kind_minus) warning("suggest parentheses around + or - inside shift"); } if (binop == kind_oror) { if (code1 == kind_andand || code2 == kind_andand) warning("suggest parentheses around && within ||"); } if (binop == kind_bitor) { if (code1 == kind_bitand || code1 == kind_bitxor || code1 == kind_plus || code1 == kind_minus || code2 == kind_bitand || code2 == kind_bitxor || code2 == kind_plus || code2 == kind_minus) warning("suggest parentheses around arithmetic in operand of |"); /* Check cases like x|y==z */ if (unsafe_comparison(e1) || unsafe_comparison(e2)) warning("suggest parentheses around comparison in operand of |"); } if (binop == kind_bitxor) { if (code1 == kind_bitand || code1 == kind_plus || code1 == kind_minus || code2 == kind_bitand || code2 == kind_plus || code2 == kind_minus) warning ("suggest parentheses around arithmetic in operand of ^"); /* Check cases like x^y==z */ if (unsafe_comparison(e1) || unsafe_comparison(e2)) warning("suggest parentheses around comparison in operand of ^"); } if (binop == kind_bitand) { if (code1 == kind_plus || code1 == kind_minus || code2 == kind_plus || code2 == kind_minus) warning ("suggest parentheses around + or - in operand of &"); /* Check cases like x&y==z */ if (unsafe_comparison(e1) || unsafe_comparison(e2)) warning("suggest parentheses around comparison in operand of &"); } /* Similarly, check for cases like 1<=i<=10 that are probably errors. */ /* This was under extra_warnings in 3.4.x, but under warn_parentheses in 4.? */ if (unsafe_comparison(result) && (unsafe_comparison(e1) || unsafe_comparison(e2))) warning("comparisons like X<=Y<=Z do not have their mathematical meaning"); } #if 0 unsigned_conversion_warning (result, arg1); unsigned_conversion_warning (result, arg2); overflow_warning (result); #endif return result; } static bool voidstar_conditional(type t1, type t2) { if (type_void(t1)) { if (pedantic && type_function(t2)) pedwarn("ANSI C forbids conditional expr between `void *' and function pointer"); return TRUE; } return FALSE; } static bool pointerint_conditional(type t1, type t2, expression e2) { if (type_pointer(t1) && type_integer(t2)) { if (!definite_zero(e2)) pedwarn("pointer/integer type mismatch in conditional expression"); return TRUE; } return FALSE; } expression make_conditional(location loc, expression cond, expression true, expression false) { expression result = CAST(expression, new_conditional(parse_region, loc, cond, true, false)); type ctype, ttype, ftype, rtype = NULL; bool truelvalue = true ? true->lvalue : FALSE; ctype = default_conversion(cond); if (!true) { true = cond; truelvalue = FALSE; /* Not an lvalue in gcc ! */ } if (type_void(true->type)) ttype = true->type; else ttype = default_conversion(true); if (type_void(false->type)) ftype = false->type; else ftype = default_conversion(false); if (ctype == error_type || ttype == error_type || ftype == error_type) rtype = error_type; else if (type_equal(ttype, ftype)) rtype = ttype; else if (type_equal_unqualified(ttype, ftype)) rtype = make_qualified_type(ttype, no_qualifiers); else if (type_real(ttype) && type_real(ftype)) /* This should probably be type_arithmetic. See complex3.c/C9X */ rtype = common_type(ttype, ftype); else if (type_void(ttype) || type_void(ftype)) { if (pedantic && (!type_void(ttype) || !type_void(ftype))) pedwarn("ANSI C forbids conditional expr with only one void side"); rtype = void_type; } else if (type_pointer(ttype) && type_pointer(ftype)) { type tpointsto = type_points_to(ttype), fpointsto = type_points_to(ftype); if (compatible_pointer_types(ttype, ftype)) rtype = common_type(tpointsto, fpointsto); else if (definite_null(true) && type_void(tpointsto)) rtype = fpointsto; else if (definite_null(false) && type_void(fpointsto)) rtype = tpointsto; else if (voidstar_conditional(tpointsto, fpointsto)) rtype = tpointsto; /* void * result */ else if (voidstar_conditional(fpointsto, tpointsto)) rtype = fpointsto; /* void * result */ else { pedwarn("pointer type mismatch in conditional expression"); /* Slight difference from GCC: I qualify the result type with the appropriate qualifiers */ rtype = void_type; } /* Qualifiers depend on both types */ rtype = make_pointer_type(qualify_type2(rtype, tpointsto, fpointsto)); } else if (pointerint_conditional(ttype, ftype, false)) rtype = ttype; else if (pointerint_conditional(ftype, ttype, true)) rtype = ftype; else if (flag_cond_mismatch) rtype = void_type; else { error("type mismatch in conditional expression"); rtype = error_type; } /* Qualifiers depend on both types */ if (rtype != error_type) rtype = qualify_type2(rtype, ttype, ftype); result->type = rtype; result->lvalue = !pedantic && truelvalue && false->lvalue; result->isregister = true->isregister || false->isregister; result->bitfield = true->bitfield || false->bitfield; result->cst = fold_conditional(result); return result; } expression make_assign(location loc, int binop, expression e1, expression e2) { expression result = CAST(expression, newkind_binary(parse_region, binop, loc, e1, e2)); type t1 = require_complete_type(e1, e1->type), t2; result->type = error_type; if (t1 != error_type && e2->type != error_type) { expression rhs; if (binop == kind_assign) { t2 = default_conversion_for_assignment(e2); rhs = e2; } else { t2 = check_binary(binop, e1, e2); rhs = NULL; } if (check_writable_lvalue(e1, "assignment") && check_assignment(e1->type, t2, rhs, "assignment", NULL, 0)) result->type = make_qualified_type(e1->type, no_qualifiers); } return result; } expression make_identifier(location loc, cstring id, bool maybe_implicit) { /* XXX: Should pass decl as argument (lexer looked it up already) */ data_declaration decl = lookup_id(id.data, FALSE); identifier result = new_identifier(parse_region, loc, id, NULL); if (decl && decl->islimbo) /* Limbo declarations don't really exist */ decl = NULL; if (!decl && maybe_implicit) /* An implicit function declaration */ decl = implicitly_declare(result); if (!decl) { /* Suppress undeclare identifier errors in deputy scopes - they will be reprocessed later under deputy scoping rules (see nesc-deputy.c) */ if (!current.env->deputy_scope) { if (!current.function_decl) error("`%s' undeclared here (not in a function)", id.data); else if (!env_lookup(current.function_decl->undeclared_variables, id.data, FALSE)) { static bool undeclared_variable_notice; error("`%s' undeclared (first use in this function)", id.data); env_add(current.function_decl->undeclared_variables, id.data, (void *)1); if (!undeclared_variable_notice) { error("(Each undeclared identifier is reported only once"); error("for each function it appears in.)"); undeclared_variable_notice = TRUE; } } } decl = bad_decl; } /* XXX: check for register variables of containing function */ result->type = decl->type; result->lvalue = decl->kind == decl_variable || decl->kind == decl_magic_string; result->cst = fold_identifier(CAST(expression, result), decl, 0); result->isregister = decl->kind == decl_variable && decl->vtype == variable_register; result->static_address = foldaddress_identifier(CAST(expression, result), decl); result->ddecl = decl; return CAST(expression, result); } expression make_compound_expr(location loc, statement block) { if (is_error_stmt(block)) return make_error_expr(); else { expression result = CAST(expression, new_compound_expr(parse_region, loc, block)); compound_stmt bs = CAST(compound_stmt, block); statement last_stmt = last_statement(bs->stmts); if (last_stmt && is_expression_stmt(last_stmt)) result->type = CAST(expression_stmt, last_stmt)->arg1->type; else result->type = void_type; return result; } } bool check_arguments(type fntype, expression arglist, data_declaration fundecl, bool generic_call) { typelist_scanner parmtypes; int parmstep = generic_call ? -1 : 1, parmnum = parmstep; type parmtype; const char *argname; int old_errorcount = errorcount; if (!type_function_oldstyle(fntype)) { typelist_scan(type_function_arguments(fntype), &parmtypes); while ((parmtype = typelist_next(&parmtypes)) && arglist) { type argtype = arglist->type; if (type_incomplete(parmtype)) error("type of formal parameter %d is incomplete", parmnum); else { if (warn_conversion) { if (type_integer(parmtype) && type_floating(argtype)) warn_for_assignment("%s as integer rather than floating due to prototype", NULL, fundecl, parmnum); else if (type_floating(parmtype) && type_integer(argtype)) warn_for_assignment ("%s as floating rather than integer due to prototype", NULL, fundecl, parmnum); else if (type_complex(parmtype) && type_floating(argtype)) warn_for_assignment ("%s as complex rather than floating due to prototype", NULL, fundecl, parmnum); else if (type_floating(parmtype) && type_complex(argtype)) warn_for_assignment ("%s as floating rather than complex due to prototype", NULL, fundecl, parmnum); /* Warn if any argument is passed as `float', since without a prototype it would be `double'. */ else if (type_float(parmtype) && type_floating(argtype)) warn_for_assignment ("%s as `float' rather than `double' due to prototype", NULL, fundecl, parmnum); #if 0 else { /* Type that would have been passed w/o proto */ type type1 = default_conversion(arglist); /* No warning if function asks for enum and the actual arg is that enum type. */ if (type_enum(parmtype) && type_equal_unqualified(parmtype, argtype)) ; /* XXX: else messy stuff that cannot easily be done w/o constant folding and type size info */ } #endif } check_assignment(parmtype, default_conversion_for_assignment(arglist), arglist, NULL, fundecl, parmnum); } parmnum += parmstep; arglist = CAST(expression, arglist->next); } argname = argtype(&parmstep); if (parmtype) { if (fundecl) error("too few %ss to function `%s'", argname, decl_printname(fundecl)); else error("too few %ss to function", argname); } else if (arglist && !type_function_varargs(fntype)) { if (fundecl) error("too many %ss to function `%s'", argname, decl_printname(fundecl)); else error("too many %ss to function", argname); } } /* Checks for arguments with no corresponding argument type */ while (arglist) { require_complete_type(arglist, default_conversion(arglist)); arglist = CAST(expression, arglist->next); } return errorcount == old_errorcount; } expression make_function_call(location loc, expression fn, expression arglist) { expression result = CAST(expression, new_function_call(parse_region, loc, fn, arglist, NULL, normal_call)); type fntype = default_conversion(fn), rettype; bool argumentsok; result->type = error_type; if (fntype == error_type) return result; /* Hack for __nesc_enable_interrupt (see nesc-uses.h) */ if (is_identifier(fn) && CAST(identifier, fn)->ddecl == enable_interrupt) { current.function_decl->ddecl->extra_contexts |= c_call_nonatomic; if (current.in_atomic) warning("call to __nesc_enable_interrupt within an atomic statement"); } if (type_pointer(fntype)) /* All function types come this way because default_conversion makes them into pointers to functions... */ fntype = type_points_to(fntype); if (!type_functional(fntype)) { if (type_generic(fntype)) error("parameters missing in call to parameterised command or event"); else error("called object is not a function, command, event or task"); return result; } argumentsok = check_arguments(fntype, arglist, get_function_ddecl(fn), FALSE); rettype = type_function_return_type(fntype); result->type = rettype; if (!type_void(rettype)) result->type = require_complete_type(result, rettype); if (argumentsok) result->cst = fold_function_call(result, 0); return result; } expression make_va_arg(location loc, expression arg, asttype type) { expression va_arg_id = build_identifier(parse_region, loc, builtin_va_arg_decl); expression result = CAST(expression, new_function_call(parse_region, loc, va_arg_id, arg, type, normal_call)); if (!type_equal_unqualified(arg->type, builtin_va_list_type)) error("first argument to `va_arg' not of type `va_list'"); if (!type_self_promoting(type->type)) { static bool gave_help; error("char, short and float are automatically promoted when passed through `...'"); if (!gave_help) { gave_help = TRUE; error("(so you should pass `int', `unsigned' or `double' to `va_arg')"); } } result->type = type->type; return result; } expression make_offsetof(location loc, asttype t, dd_list fields) { expression zero; zero = CAST(expression, fold_lexical_int(size_t_type, loc, str2cstring(parse_region, "0"), FALSE, 0, FALSE)); if (!(t->type == error_type || type_struct(t->type) || type_union(t->type))) { error("offsetof is only valid for structs or unions"); return zero; /* a reasonable value ;-) */ } else { declarator ptr_to_t_d; expression cast, fieldref, addrof; declarator size_t_d; type_element size_t_m; asttype size_t_ast; dd_list_pos field; /* Build ((size_t)&((t *)0)->fields) */ ptr_to_t_d = CAST(declarator, new_pointer_declarator(parse_region, loc, t->declarator)); t = make_type(t->qualifiers, ptr_to_t_d); cast = make_cast(loc, t, zero); fieldref = make_dereference(loc, cast); dd_scan (field, fields) { cstring f; f.data = DD_GET(char *, field); f.length = strlen(f.data); fieldref = make_field_ref(loc, fieldref, f); } addrof = make_unary(loc, kind_address_of, fieldref); type2ast(parse_region, loc, size_t_type, NULL, &size_t_d, &size_t_m); size_t_ast = make_type(size_t_m, size_t_d); return make_cast(loc, size_t_ast, addrof); } } expression make_array_ref(location loc, expression array, expression index) { expression result = CAST(expression, new_array_ref(parse_region, loc, array, index)); type atype, itype; if (type_generic(array->type)) return make_generic_call(loc, array, index); itype = default_conversion(index); if (index->next) index = make_comma(index->location, index); if (warn_char_subscripts && type_plain_char(index->type)) warning("subscript has type `char'"); if (type_array(array->type) && !array->lvalue) { /* Some special GCC extensions */ /* XXX: Ignoring the weird register stuff, going for a simple version which seems essentially identical for our purposes */ if (pedantic) pedwarn("ANSI C forbids subscripting non-lvalue array"); atype = make_pointer_type(type_array_of(array->type)); /* this should not be possible (non-lvalue arrays come from array fields of non-lvalue struct expressions) */ assert(!array->static_address); } else atype = default_conversion(array); /* Put the integer in ITYPE to simplify error checking. */ if (type_integer(atype)) { type temp = atype; atype = itype; itype = temp; } if (!type_pointer(atype) || type_function(type_points_to(atype))) { error("subscripted value is neither array nor pointer"); result->type = error_type; result->lvalue = TRUE; } else { check_dereference(result, atype, "array indexing"); result->static_address = fold_binary(atype, result); } if (!type_integer(itype) && itype != error_type) error("array subscript is not an integer"); return result; } expression make_field_ref(location loc, expression object, cstring field) { type otype = object->type; field_ref result; if (type_interface(otype)) return make_interface_deref(loc, object, field); if (type_component(otype)) return make_component_deref(loc, object, field); result = new_field_ref(parse_region, loc, object, field); result->type = error_type; if (type_aggregate(otype)) { tag_declaration tag = type_tag(otype); if (!tag->defined) incomplete_type_error(NULL, otype); else { field_declaration fdecl = env_lookup(tag->fields, field.data, FALSE); if (!fdecl) error("%s has no member named `%s'", tagkind_name(tag->kind), field.data); else { result->fdecl = fdecl; result->type = qualify_type2(fdecl->type, fdecl->type, object->type); result->bitfield = !cval_istop(fdecl->bitwidth); result->static_address = foldaddress_field_ref(CAST(expression, result)); } } } else if (otype != error_type) error("request for member `%s' in something not a structure or union", field.data); result->lvalue = object->lvalue; return CAST(expression, result); } static expression finish_increment(unary result, char *name) { expression e = result->arg1; type etype = e->type; result->type = error_type; if (!type_scalar(etype)) error("wrong type argument to %s", name); else { if (type_incomplete(etype)) error("%s of pointer to unknown structure or union", name); else if (type_pointer(etype) && (pedantic || warn_pointer_arith) && (type_void(type_points_to(etype)) || type_function(type_points_to(etype)))) pedwarn("wrong type argument to %s", name); if (check_writable_lvalue(e, name)) result->type = etype; } return CAST(expression, result); } expression make_postincrement(location loc, expression e) { return finish_increment(CAST(unary, new_postincrement(parse_region, loc, e)), "increment"); } expression make_preincrement(location loc, expression e) { return finish_increment(CAST(unary, new_preincrement(parse_region, loc, e)), "increment"); } expression make_postdecrement(location loc, expression e) { return finish_increment(CAST(unary, new_postdecrement(parse_region, loc, e)), "decrement"); } expression make_predecrement(location loc, expression e) { return finish_increment(CAST(unary, new_predecrement(parse_region, loc, e)), "decrement"); } nescc-1.3.4/src/expr.h000066400000000000000000000062611177770303300145450ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef EXPR_H #define EXPR_H expression make_error_expr(void); expression make_comma(location loc, expression elist); expression make_dereference(location loc, expression e); expression make_extension_expr(location loc, expression e); expression make_unary(location loc, int unop, expression e); expression make_label_address(location loc, id_label label); expression make_sizeof_expr(location loc, expression e); expression make_sizeof_type(location loc, asttype t); expression make_alignof_expr(location loc, expression e); expression make_alignof_type(location loc, asttype t); expression make_cast(location loc, asttype t, expression e); expression make_binary(location loc, int binop, expression e1, expression e2); expression make_conditional(location loc, expression cond, expression true, expression false); expression make_assign(location loc, int assignop, expression left, expression right); expression make_identifier(location loc, cstring id, bool maybe_implicit); expression make_compound_expr(location loc, statement block); expression make_function_call(location loc, expression fn, expression arglist); expression make_va_arg(location loc, expression arg, asttype type); expression make_offsetof(location loc, asttype t, dd_list fields); expression make_array_ref(location loc, expression array, expression index); expression make_field_ref(location loc, expression object, cstring field); expression make_field_indirectref(location loc, expression object, cstring field); expression make_postincrement(location loc, expression e); expression make_preincrement(location loc, expression e); expression make_postdecrement(location loc, expression e); expression make_predecrement(location loc, expression e); /* Return TRUE if no error and lhstype and rhstype are not error_type */ bool check_assignment(type lhstype, type rhstype, expression rhs, const char *context, data_declaration fundecl, int parmnum); bool check_conversion(type to, type from); bool check_arguments(type fntype, expression arglist, data_declaration fundecl, bool generic_call); type default_conversion(expression e); type default_function_array_conversion(expression e); /* called default_function_array_conversion in gcc 3.x */ type default_conversion_for_assignment(expression e); #endif nescc-1.3.4/src/flags.c000066400000000000000000000232431177770303300146550ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" /* -f flags. */ /* Nonzero means just do syntax checking; don't output anything. */ int flag_syntax_only; /* Nonzero means change certain warnings into errors. Usually these are warnings about failure to conform to some standard. */ int flag_pedantic_errors; /* Tag all structures with __attribute__(packed) */ int flag_pack_struct; /* Options controlling warnings */ /* Don't print warning messages. -w. */ int inhibit_warnings; /* Print various extra warnings. -W. */ int extra_warnings; /* Treat warnings as errors. -Werror. */ int warnings_are_errors; /* Nonzero to warn about unused local variables. */ int warn_unused; /* Nonzero to warn about variables used before they are initialized. */ int warn_uninitialized; /* Nonzero means warn about all declarations which shadow others. */ int warn_shadow; int error_shadow; /* Make shadow an error */ /* Warn if a switch on an enum fails to have a case for every enum value. */ int warn_switch; /* Nonzero means warn about function definitions that default the return type or that use a null return and have a return-type other than void. */ int warn_return_type; /* Nonzero means warn about pointer casts that increase the required alignment of the target type (and might therefore lead to a crash due to a misaligned access). */ int warn_cast_align; /* Nonzero means warn about any identifiers that match in the first N characters. The value N is in `id_clash_len'. */ int warn_id_clash; unsigned id_clash_len; /* Nonzero means warn about any objects definitions whose size is larger than N bytes. Also want about function definitions whose returned values are larger than N bytes. The value N is in `larger_than_size'. */ int warn_larger_than; unsigned larger_than_size; /* Nonzero means warn if inline function is too large. */ int warn_inline; /* Warn if a function returns an aggregate, since there are often incompatible calling conventions for doing this. */ int warn_aggregate_return; /* Nonzero means `$' can be in an identifier. */ int dollars_in_ident; /* Nonzero means allow type mismatches in conditional expressions; just make their values `void'. */ int flag_cond_mismatch; /* Nonzero means don't recognize the keyword `asm'. */ int flag_no_asm; /* Nonzero means environment is hosted (i.e., not freestanding) */ int flag_hosted; /* Nonzero means warn about implicit declarations. */ int warn_implicit; /* Nonzero means give string constants the type `const char *' to get extra warnings from them. These warnings will be too numerous to be useful, except in thoroughly ANSIfied programs. */ int warn_write_strings; /* Nonzero means warn about sizeof (function) or addition/subtraction of function pointers. */ int warn_pointer_arith; /* Nonzero means warn for all old-style non-prototype function decls. */ int warn_strict_prototypes; /* Nonzero means warn about multiple (redundant) decls for the same single variable or function. */ int warn_redundant_decls; /* Nonzero means warn about extern declarations of objects not at file-scope level and about *all* declarations of functions (whether extern or static) not at file-scope level. Note that we exclude implicit function declarations. To get warnings about those, use -Wimplicit. */ int warn_nested_externs; /* Nonzero means warn about pointer casts that can drop a type qualifier from the pointer target type. */ int warn_cast_qual; /* Nonzero means warn when casting a function call to a type that does not match the return type (e.g. (float)sqrt() or (anything*)malloc() when there is no previous declaration of sqrt or malloc. */ int warn_bad_function_cast; /* Warn about traditional constructs whose meanings changed in ANSI C. */ int warn_traditional; /* Warn about *printf or *scanf format/argument anomalies. */ int warn_format; /* Warn about a subscript that has type char. */ int warn_char_subscripts; /* Warn if a type conversion is done that might have confusing results. */ int warn_conversion; /* Warn if main is suspicious. */ int warn_main; /* Nonzero means warn about use of multicharacter literals. */ int warn_multichar = 1; /* Nonzero means do some things the same way PCC does. */ int flag_traditional; /* Nonzero means to allow single precision math even if we're generally being traditional. */ int flag_allow_single_precision; /* Nonzero means warn about suggesting putting in ()'s. */ int warn_parentheses; /* Warn if initializer is not completely bracketed. */ int warn_missing_braces; /* Warn about comparison of signed and unsigned values. */ int warn_sign_compare; /* Nonzero means message about use of implicit function declarations; 1 means warning; 2 means error. */ int mesg_implicit_function_declaration; /* Report pedantic warnings if true */ bool pedantic; /* Nonzero means warn about use of implicit int. */ int warn_implicit_int; /* Nonzero means warn for any global function def without separate previous prototype decl. */ int warn_missing_prototypes; /* Nonzero means warn for any global function def without separate previous decl. */ int warn_missing_declarations; /* Nonzero means `char' should be signed. */ int flag_signed_char; /* Nonzero means give an enum type only as many bytes as it needs. */ int flag_short_enums; /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */ int flag_signed_bitfields = 1; /* Nonzero means don't run real cc1 afterwards */ int flag_parse_only; /* The value of the -nesc-path option */ char *cmdline_nesc_path; /* Nonzero means suppress the dbg and dbg_clear functions (replace them by macros in output). This is necessary because gcc won't inline varargs functions */ int flag_no_debug; /* Nonzero to suppress automatic addition of inline keywords (but the "wiring" functions are still marked inline) */ int flag_no_inline; /* Nonzero means to output macro defs in the generated C file */ int flag_save_macros; /* Nonzero means modify identifier and declaration output during code generation to accomodate nido */ bool use_nido; /* specifies the maximum number of nodes that can be simulated at one time */ char* nido_num_nodes = "1000"; /* the expression that gives the current mote number */ char *nido_mote_number = "tos_state.current_node"; /* Nonzero for -v */ int flag_verbose; /* Warn if there are unexpected documentation strings in the code */ int warn_unexpected_docstring; /* Warn when function pointers are used */ int warn_fnptr; /* Warn when data races are detected */ int warn_data_race; /* Warn when async keyword is violated */ int warn_async; /* Warn when no combiner function and multiple fns called */ int warn_no_combiner; /* If true, warn_fnptr, warn_data_race, warn_async and warn_no_combiner are treated as errors */ int nesc_error; /* diff processing enabled if diff_output is not NULL (diff_input is NULL for orignal program, non-NULL to reduce diff size) */\ char *diff_input, *diff_output; /* If true, rewrite post/task to use interfaces+wiring rather than calls to a TOS_post function. */ int flag_use_scheduler; /* If true, we're using a mingw based gcc from a cygwin environment. We should fix filenames before invoking gcc. */ int flag_mingw_gcc; /* If true, check for atomic statements whose body is guaranteed to be atomic (e.g., one single-byte read) */ int nesc_optimise_atomic; /* Warn about possibly nested block comments, and C++ comments spanning more than one physical line */ int warn_comments; /* Warn if trigraphs are encountered that might affect the meaning of the program */ int warn_trigraphs; /* Warn about macros defined in the main file that are not used */ int warn_unused_macros; /* Warn about stray tokens after #elif and #endif */ int warn_endif_labels; /* Do not suppress warnings from system headers */ int warn_system_headers; /* Warn if an undefined macro is used in an #if directive */ int warn_undef; /* Warn about user-specified include directories that do not exist */ int warn_missing_include_dirs; /* Warn about use of multi-character character constants */ int warn_multichar; /* Support ISO C trigraphs */ int flag_trigraphs; /* Do not search standard system include directories */ int flag_nostdinc; /* Do not predefine system-specific and GCC-specific macros */ int flag_undef; /* True if compiling for deputy */ int flag_deputy; /* True if a module lacking a @safe() or @unsafe() attribute defaults to safe; has no effect if flag_deputy is not true; this default can be overridden by -fnesc-default-safe or -fnesc-default-unsafe */ int flag_default_safe; /* True if transforming plain C code */ int flag_c; /* True if target-specific extensions should be output as gcc attributes rather than in their original syntax. */ int flag_gccize; /* Print included file names (-H) */ int print_include_names; nescc-1.3.4/src/flags.h000066400000000000000000000242441177770303300146640ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef FLAGS_H #define FLAGS_H /* -f flags. */ /* Nonzero means just do syntax checking; don't output anything. */ extern int flag_syntax_only; /* Nonzero means change certain warnings into errors. Usually these are warnings about failure to conform to some standard. */ extern int flag_pedantic_errors; /* Tag all structures with __attribute__(packed) */ extern int flag_pack_struct; /* Options controlling warnings */ /* Don't print warning messages. -w. */ extern int inhibit_warnings; /* Print various extra warnings. -W. */ extern int extra_warnings; /* Treat warnings as errors. -Werror. */ extern int warnings_are_errors; /* Nonzero to warn about unused local variables. */ extern int warn_unused; /* Nonzero to warn about variables used before they are initialized. */ extern int warn_uninitialized; /* Nonzero means warn about all declarations which shadow others. */ extern int warn_shadow; extern int error_shadow; /* Make shadow an error */ /* Warn if a switch on an enum fails to have a case for every enum value. */ extern int warn_switch; /* Nonzero means warn about function definitions that default the return type or that use a null return and have a return-type other than void. */ extern int warn_return_type; /* Nonzero means warn about pointer casts that increase the required alignment of the target type (and might therefore lead to a crash due to a misaligned access). */ extern int warn_cast_align; /* Nonzero means warn about any identifiers that match in the first N characters. The value N is in `id_clash_len'. */ extern int warn_id_clash; extern unsigned id_clash_len; /* Nonzero means warn about any objects definitions whose size is larger than N bytes. Also want about function definitions whose returned values are larger than N bytes. The value N is in `larger_than_size'. */ extern int warn_larger_than; extern unsigned larger_than_size; /* Nonzero means warn if inline function is too large. */ extern int warn_inline; /* Warn if a function returns an aggregate, since there are often incompatible calling conventions for doing this. */ extern int warn_aggregate_return; /* Nonzero means `$' can be in an identifier. */ extern int dollars_in_ident; /* Nonzero means allow type mismatches in conditional expressions; just make their values `void'. */ extern int flag_cond_mismatch; /* Nonzero means don't recognize the keyword `asm'. */ extern int flag_no_asm; /* Nonzero means environment is hosted (i.e., not freestanding) */ extern int flag_hosted; /* Nonzero means warn about implicit declarations. */ extern int warn_implicit; /* Nonzero means give string constants the type `const char *' to get extra warnings from them. These warnings will be too numerous to be useful, except in thoroughly ANSIfied programs. */ extern int warn_write_strings; /* Nonzero means warn about sizeof (function) or addition/subtraction of function pointers. */ extern int warn_pointer_arith; /* Nonzero means warn for all old-style non-prototype function decls. */ extern int warn_strict_prototypes; /* Nonzero means warn about multiple (redundant) decls for the same single variable or function. */ extern int warn_redundant_decls; /* Nonzero means warn about extern declarations of objects not at file-scope level and about *all* declarations of functions (whether extern or static) not at file-scope level. Note that we exclude implicit function declarations. To get warnings about those, use -Wimplicit. */ extern int warn_nested_externs; /* Nonzero means warn about pointer casts that can drop a type qualifier from the pointer target type. */ extern int warn_cast_qual; /* Nonzero means warn when casting a function call to a type that does not match the return type (e.g. (float)sqrt() or (anything*)malloc() when there is no previous declaration of sqrt or malloc. */ extern int warn_bad_function_cast; /* Warn about traditional constructs whose meanings changed in ANSI C. */ extern int warn_traditional; /* Warn about *printf or *scanf format/argument anomalies. */ extern int warn_format; /* Warn about a subscript that has type char. */ extern int warn_char_subscripts; /* Warn if a type conversion is done that might have confusing results. */ extern int warn_conversion; /* Warn if main is suspicious. */ extern int warn_main; /* Nonzero means warn about use of multicharacter literals. */ extern int warn_multichar; /* Nonzero means do some things the same way PCC does. */ extern int flag_traditional; /* Nonzero means to allow single precision math even if we're generally being traditional. */ extern int flag_allow_single_precision; /* Nonzero means warn about suggesting putting in ()'s. */ extern int warn_parentheses; /* Warn if initializer is not completely bracketed. */ extern int warn_missing_braces; /* Warn about comparison of signed and unsigned values. */ extern int warn_sign_compare; /* Nonzero means message about use of implicit function declarations; 1 means warning; 2 means error. */ extern int mesg_implicit_function_declaration; extern bool pedantic; /* Report pedantic warnings if true */ /* Nonzero means warn about use of implicit int. */ extern int warn_implicit_int; /* Nonzero means warn for any global function def without separate previous prototype decl. */ extern int warn_missing_prototypes; /* Nonzero means warn for any global function def without separate previous decl. */ extern int warn_missing_declarations; /* Nonzero means `char' should be signed. */ extern int flag_signed_char; /* Nonzero means give an enum type only as many bytes as it needs. */ extern int flag_short_enums; /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */ extern int flag_signed_bitfields; /* Nonzero means don't run real cc1 afterwards */ extern int flag_parse_only; /* Nonzero means suppress the dbg and dbg_clear functions (replace them by macros in output). This is necessary because gcc won't inline varargs functions */ extern int flag_no_debug; /* Nonzero to suppress automatic addition of inline keywords (but the "wiring" functions are still marked inline) */ extern int flag_no_inline; /* Nonzero means to output macro defs in the generated C file (a la -dD) */ extern int flag_save_macros; /* Nonzero means modify identifier and declaration output during code generation to accomodate nido */ extern bool use_nido; /* specifies the maximum number of nodes that can be simulated at one time */ extern char *nido_num_nodes; /* the expression that gives the current mote number */ extern char *nido_mote_number; /* Nonzero for -v */ extern int flag_verbose; /* Warn if there are unexpected documentation strings in the code */ extern int warn_unexpected_docstring; /* Warn when function pointers are used */ extern int warn_fnptr; /* Warn when data races are detected */ extern int warn_data_race; /* Warn when async keyword is violated */ extern int warn_async; /* Warn when no combiner function and multiple fns called */ extern int warn_no_combiner; /* If true, warn_fnptr, warn_data_race, warn_async and warn_no_combiner are treated as errors */ extern int nesc_error; /* diff processing enabled if diff_output is not NULL (diff_input is NULL for orignal program, non-NULL to reduce diff size) */\ extern char *diff_input, *diff_output; /* If true, rewrite post/task to use interfaces+wiring rather than calls to a TOS_post function. */ extern int flag_use_scheduler; /* If true, we're using a mingw based gcc from a cygwin environment. We should use windows filenames when invoking gcc. */ extern int flag_mingw_gcc; /* If true, check for atomic statements whose body is guaranteed to be atomic (e.g., one single-byte read) */ extern int nesc_optimise_atomic; /* Warn about possibly nested block comments, and C++ comments spanning more than one physical line */ extern int warn_comments; /* Warn if trigraphs are encountered that might affect the meaning of the program */ extern int warn_trigraphs; /* Warn about macros defined in the main file that are not used */ extern int warn_unused_macros; /* Warn about stray tokens after #elif and #endif */ extern int warn_endif_labels; /* Do not suppress warnings from system headers */ extern int warn_system_headers; /* Warn if an undefined macro is used in an #if directive */ extern int warn_undef; /* Warn about user-specified include directories that do not exist */ extern int warn_missing_include_dirs; /* Warn about use of multi-character character constants */ extern int warn_multichar; /* Support ISO C trigraphs */ extern int flag_trigraphs; /* Do not search standard system include directories */ extern int flag_nostdinc; /* Do not predefine system-specific and GCC-specific macros */ extern int flag_undef; /* True if compiling for deputy */ extern int flag_deputy; /* True if a module lacking a @safe() or @unsafe() attribute defaults to safe; has no effect if flag_deputy is not true; this default can be overridden by -fnesc-default-safe or -fnesc-default-unsafe */ extern int flag_default_safe; /* True if transforming plain C code */ extern int flag_c; /* True if target-specific extensions should be output as gcc attributes rather than in their original syntax. */ extern int flag_gccize; /* Print included file names (-H) */ extern int print_include_names; #endif nescc-1.3.4/src/gcc-cpp.h000066400000000000000000000002171177770303300150760ustar00rootroot00000000000000/* load libcpp */ #include "system.h" #include "config.h" #include "cpplib.h" #include "line-map.h" #undef bool #define TRUE 1 #define FALSE 0 nescc-1.3.4/src/graph.c000066400000000000000000000234731177770303300146670ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "parser.h" #include "graph.h" #include "dd_list.h" #include "sd_list.h" #undef new /* A generic directed graph type, with support for typical graph algos. */ /* A graph is a mutable data structure composed of nodes linked by edges. Edges can be added and removed between existing nodes, nodes can be added at will but only removed if they have no ingoing and no outgoing edges. Each edge & node has associated user data (stored as a (void *)) and a mark. Marks can be cleared individually or over the whole graph (this last op remains O(1)). The order of edges within a node is not preserved. */ struct ggraph { region sameregion r; sd_list sameregion nodes; long mark_count; /* Value used to mark nodes/edges */ }; struct gnode { struct sd_list_pos node; ggraph sameregion graph; gedge sameregion in; /* Ingoing edges */ gedge sameregion out; /* Outgoing edges */ void *data; long mark; /* Mark count for this node */ }; struct gedge { gnode sameregion in_node, out_node; /* Extremities */ gedge sameregion next_in, next_out; /* Edge in in/outgoing lists */ void *data; long mark; }; /* Update functions */ /* ---------------- */ ggraph new_graph(region r) /* Returns: A new empty graph. */ { ggraph new = ralloc(r, struct ggraph); new->r = r; new->nodes = sd_new_list(r); new->mark_count = 1; return new; } void delete_graph(ggraph g, void (*delete_node)(gnode n), void (*delete_edge)(gedge e)) /* Effects: Deletes graph g. Calls functions delete_node & delete_edge on nodes and edges before deleting them. All edges of a node are deleted before it is. If a delete_node/edge function is NULL it is not called. Modifies: g */ { /* Delete all edges */ sd_list_pos node, next; sd_scan (node, g->nodes) { gnode n = SD_GET(gnode, node); gedge e, next; for (e = n->in; e; e = next) { next = e->next_in; if (delete_edge) delete_edge(e); } } for (node = sd_first(g->nodes); !sd_is_end(node); node = next) { gnode n = SD_GET(gnode, node); next = sd_next(node); if (delete_node) delete_node(n); } sd_del_list(g->nodes); } ggraph copy_graph(region r, ggraph g) /* Effects: Returns a graph that is a copy of g (i.e. with the same number of nodes, and the same connections between them, the same marks, the same data, etc). Modifications to g won't modify the copy, and vice-versa. */ { ggraph copy = new_graph(r); gnode onode, nnode; gedge oedge, nedge; copy->mark_count = g->mark_count; /* Make nodes in copy */ graph_scan_nodes (onode, g) onode->data = graph_add_node(copy, onode->data); /* Then make edges */ graph_scan_nodes (onode, g) { nnode = onode->data; graph_scan_in (oedge, onode) { nedge = graph_add_edge(graph_edge_from(oedge)->data, nnode, oedge->data); nedge->mark = oedge->mark; } } /* Finally restore original graph */ graph_scan_nodes (onode, g) { nnode = onode->data; nnode->mark = onode->mark; onode->data = nnode->data; } return copy; } gnode graph_add_node(ggraph g, void *data) /* Effects: Adds a new node to graph g, with user data `data'. The new node has no edges and is not marked. Returns: The new node. Modifies: g */ { gnode new = ralloc(g->r, struct gnode); new->graph = g; /*new->in = new->out = NULL;*/ new->data = data; new->mark = g->mark_count - 1; /* Unmarked */ sd_add_last(g->nodes, &new->node); return new; } bool graph_remove_node(gnode n) /* Effects: Removes node n from its graph if it has no in/outgoing edges. Returns: TRUE if n could be removed. Modifies: n */ { if (n->in || n->out) return FALSE; sd_remove(&n->node); return TRUE; } gedge graph_add_edge(gnode from, gnode to, void *data) /* Effects: Adds an edge between nodes `from' & `to', with user data `data'. The new edge is not marked. Returns: The new edge. Modifies: from, to */ { gedge new = ralloc(from->graph->r, struct gedge); new->out_node = from; new->in_node = to; new->data = data; new->mark = from->graph->mark_count - 1; /* Add to nodes */ new->next_out = from->out; from->out = new; new->next_in = to->in; to->in = new; return new; } void graph_remove_edge(gedge e) /* Effects: Removes edge e from its graph. Modifies: e */ { gedge sameregion *scan; /* Remove edge from nodes */ for (scan = &e->in_node->in; *scan != e; scan = &(*scan)->next_in) ; *scan = e->next_in; for (scan = &e->out_node->out; *scan != e; scan = &(*scan)->next_out) ; *scan = e->next_out; } /* Accessor operations */ /* ------------------- */ dd_list graph_nodes(region r, ggraph g) /* Returns: A list of all the nodes of g, each element of the list has type gnode. */ { dd_list nodes = dd_new_list(r); sd_list_pos node; sd_scan (node, g->nodes) dd_add_last(r, nodes, SD_GET(gnode, node)); return nodes; } gnode graph_first_node(ggraph g) /* Returns: The first node of g, or NULL if none The order of nodes is arbitrary */ { sd_list_pos first = sd_first(g->nodes); return sd_is_end(first) ? NULL : SD_GET(gnode, first); } gnode graph_next_node(gnode n) /* Returns: The node after n, or NULL if no more The order of nodes is arbitrary */ { sd_list_pos next = sd_next(&n->node); return sd_is_end(next) ? NULL : SD_GET(gnode, next); } ggraph graph_node_graph(gnode n) /* Returns: The graph n is a node of */ { return n->graph; } void *_graph_node_data(gnode n) /* Returns: the data of node n */ { return n->data; } void _graph_node_set(gnode n, void *data) /* Effects: Sets the data of node n to `data'. Modifies: n */ { n->data = data; } dd_list graph_edges_in(region r, gnode n) /* Returns: The list of ingoing edges for n. Each element of the list has type gedge. It is up to the caller to free the list with dd_free_list(l, NULL) */ { dd_list edges = dd_new_list(r); gedge in; for (in = n->in; in; in = in->next_in) dd_add_last(r, edges, in); return edges; } dd_list graph_edges_out(region r, gnode n) /* Returns: The list of outgoing edges for n. Each element of the list has type gedge. It is up to the caller to free the list with dd_free_list(l, NULL) */ { dd_list edges = dd_new_list(r); gedge out; for (out = n->out; out; out = out->next_out) dd_add_last(r, edges, out); return edges; } gedge graph_first_edge_in(gnode n) /* Returns: The first ingoing edge of n, or NULL if none The order of edges is arbitrary */ { return n->in; } gedge graph_next_edge_in(gedge e) /* Returns: The ingoing edge after e, or NULL if no more The order of edges is arbitrary */ { return e->next_in; } gedge graph_first_edge_out(gnode n) /* Returns: The first outgoing edge of n, ore NULL if none The order of edges is arbitrary */ { return n->out; } gedge graph_next_edge_out(gedge e) /* Returns: The outgoing edge after e, or NULL if no more The order of edges is arbitrary */ { return e->next_out; } gnode graph_edge_from(gedge e) /* Returns: The node this edge comes from. */ { return e->out_node; } gnode graph_edge_to(gedge e) /* Returns: The node this edge goes to. */ { return e->in_node; } void *_graph_edge_data(gedge n) /* Returns: the data of edge n */ { return n->data; } void _graph_edge_set(gedge n, void *data) /* Effects: Sets the data of edge n to `data'. Modifies: n */ { n->data = data; } /* Marks */ /* ----- */ void graph_clear_all_marks(ggraph g) /* Effects: Clears all marks on edges and nodes of g. Modifies: g */ { g->mark_count++; /* A wrap around of this 32 bit counter is rather unlikely. */ assert(g->mark_count != 0); } void graph_mark_node(gnode n) /* Effects: Marks node n. Modifies: n */ { n->mark = n->graph->mark_count; } void graph_unmark_node(gnode n) /* Effects: Removed mark from node n. Modifies: n */ { n->mark = n->graph->mark_count - 1; } bool graph_node_markedp(gnode n) /* Returns: TRUE if n is marked */ { return n->mark == n->graph->mark_count; } void graph_mark_edge(gedge n) /* Effects: Marks edge n. Modifies: n */ { n->mark = n->in_node->graph->mark_count; } void graph_unmark_edge(gedge n) /* Effects: Removed mark from edge n. Modifies: n */ { n->mark = n->in_node->graph->mark_count - 1; } bool graph_edge_markedp(gedge n) /* Returns: TRUE if n is marked */ { return n->mark == n->in_node->graph->mark_count; } void dbg_graph(ggraph g, void (*pnode)(gnode g)) deletes { region temp = newregion(); dd_list allnodes = graph_nodes(temp, g); dd_list_pos anode; int i = 0; dd_scan (anode, allnodes) { gnode node = DD_GET(gnode, anode); gedge out; fprintf(stderr, "%d(0x%p):", i++, node); graph_scan_out (out, node) { gnode to = graph_edge_to(out); int j = 0; dd_list_pos anode2; dd_scan (anode2, allnodes) { if (DD_GET(gnode, anode2) == to) { fprintf(stderr, " %d", j); break; } j++; } } if (pnode) pnode(node); fprintf(stderr, "\n"); } deleteregion(temp); } nescc-1.3.4/src/graph.h000066400000000000000000000152661177770303300146750ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef GRAPH_H #define GRAPH_H /* A generic directed graph type, with support for typical graph algos. */ /* A graph is a mutable data structure composed of nodes linked by edges. Edges can be added and removed between existing nodes, nodes can be added at will but only removed if they have no ingoing and no outgoing edges. Each edge & node has associated user data (stored as a (void *)) and a mark. Marks can be cleared individually or over the whole graph (this last op remains O(1)). The order of edges within a node is not preserved. */ typedef struct ggraph *ggraph; typedef struct gnode *gnode; typedef struct gedge *gedge; /* Update functions */ /* ---------------- */ ggraph new_graph(region r); /* Returns: A new empty graph. All allocations are performed in region r. */ void delete_graph(ggraph g, void (*delete_node)(gnode n), void (*delete_edge)(gedge e)); /* Effects: Deletes graph g. Calls functions delete_node & delete_edge on nodes and edges before deleting them. All edges of a node are deleted before it is. If a delete_node/edge function is NULL it is not called. Modifies: g */ ggraph copy_graph(region r, ggraph g); /* Effects: Returns a graph that is a copy of g (i.e. with the same number of nodes, and the same connections between them). Modifications to g won't modify the copy, and vice-versa. */ gnode graph_add_node(ggraph g, void *data); /* Effects: Adds a new node to graph g, with user data `data'. The new node has no edges and is not marked. Returns: The new node. Modifies: g */ bool graph_remove_node(gnode n); /* Effects: Removes node n from its graph if it has no in/outgoing edges. Returns: TRUE if n could be removed. Modifies: n */ gedge graph_add_edge(gnode from, gnode to, void *data); /* Effects: Adds an edge between nodes `from' & `to', with user data `data'. The new edge is not marked. Returns: The new edge. Modifies: from, to */ void graph_remove_edge(gedge e); /* Effects: Removes edge e from its graph. Modifies: e */ /* Accessor operations */ /* ------------------- */ dd_list graph_nodes(region r, ggraph g); /* Returns: A list of all the nodes of g, each element of the list has type gnode. The list is allocated in region r. */ gnode graph_first_node(ggraph g); /* Returns: The first node of g, or NULL if none The order of nodes is arbitrary */ gnode graph_next_node(gnode n); /* Returns: The node after n, or NULL if no more The order of nodes is arbitrary */ #define graph_scan_nodes(node, g) \ for (node = graph_first_node((g)); node; node = graph_next_node(node)) /* Effects: Iterates variable node over the nodes of graph g Requires: No nodes are added or removed from the graph during the iteration. Example: count = 0; graph_scan_nodes (node, g) count++; */ ggraph graph_node_graph(gnode n); /* Returns: The graph n is a node of */ void *_graph_node_data(gnode n); #define NODE_GET(type, n) ((type)_graph_node_data((n))) /* Returns: the data of node n, cast to `type' */ void _graph_node_set(gnode n, void *data); #define NODE_SET(n, data) (_graph_node_set((n), (void *)(data))) /* Effects: Sets the data of node n to `data'. Modifies: n */ dd_list graph_edges_in(region r, gnode n); /* Returns: The list of ingoing edges for n. Each element of the list has type gedge. It is up to the caller to free the list with dd_free_list(l, NULL) */ dd_list graph_edges_out(region r, gnode n); /* Returns: The list of outgoing edges for n. Each element of the list has type gedge. It is up to the caller to free the list with dd_free_list(l, NULL) */ gedge graph_first_edge_in(gnode n); /* Returns: The first ingoing edge of n, or NULL if none The order of edges is arbitrary */ gedge graph_next_edge_in(gedge e); /* Returns: The ingoing edge after e, or NULL if no more The order of edges is arbitrary */ gedge graph_first_edge_out(gnode n); /* Returns: The first outgoing edge of n, ore NULL if none The order of edges is arbitrary */ gedge graph_next_edge_out(gedge e); /* Returns: The outgoing edge after e, or NULL if no more The order of edges is arbitrary */ #define graph_scan_in(edge, n) \ for (edge = graph_first_edge_in((n)); edge; edge = graph_next_edge_in(edge)) /* Effects: Iterates variable edge over the ingoing edges of node n Requires: The node and its ingoing edges not be modified during the iteration. Example: in = 0; graph_scan_in (e, n) in++; */ #define graph_scan_out(edge, n) \ for (edge = graph_first_edge_out((n)); edge; edge = graph_next_edge_out(edge)) /* Effects: Iterates variable edge over the outgoing edges of node n Requires: The node and its outgoing edges not be modified during the iteration. Example: out = 0; graph_scan_out (e, n) out++; */ gnode graph_edge_from(gedge e); /* Returns: The node this edge comes from. */ gnode graph_edge_to(gedge e); /* Returns: The node this edge goes to. */ void *_graph_edge_data(gedge n); #define EDGE_GET(type, n) ((type)_graph_edge_data((n))) /* Returns: the data of edge n, cast to `type' */ void _graph_edge_set(gedge n, void *data); #define EDGE_SET(n, data) (_graph_edge_set((n), (void *)(data))) /* Effects: Sets the data of edge n to `data'. Modifies: n */ /* Marks */ /* ----- */ void graph_clear_all_marks(ggraph g); /* Effects: Clears all marks on edges and nodes of g. Modifies: g */ void graph_mark_node(gnode n); /* Effects: Marks node n. Modifies: n */ void graph_unmark_node(gnode n); /* Effects: Removed mark from node n. Modifies: n */ bool graph_node_markedp(gnode n); /* Returns: TRUE if n is marked */ void graph_mark_edge(gedge n); /* Effects: Marks edge n. Modifies: n */ void graph_unmark_edge(gedge n); /* Effects: Removed mark from edge n. Modifies: n */ bool graph_edge_markedp(gedge n); /* Returns: TRUE if n is marked */ #endif nescc-1.3.4/src/init.c000066400000000000000000001153571177770303300145340ustar00rootroot00000000000000/* XXX: figure out when an init_list is constant (so that we can allow a cast_list inside an init_list that requires constants) */ /* Initialiser handling. This file is part of the nesC compiler. This file is derived from the GNU C Compiler. It is thus Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Changes for nesC are Copyright (C) 2002, 2003 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "c-parse.h" #include "init.h" #include "expr.h" #include "constants.h" #include "AST_utils.h" #include "semantics.h" static type set_array_length(type t, largest_int length) { return make_array_type(type_array_of(t), build_uint_constant(parse_region, dummy_location, size_t_type, length)); } static largest_int string_constant_length(expression e) { return CAST(string, e)->ddecl->schars.length + 1; } /* Make a version of tdecl (an array type) with its length set to the length of the e (a string constant) */ static type set_string_length(type tdecl, expression e) { return set_array_length(tdecl, string_constant_length(e)); } field_declaration type_fields(type t) /* Requires: type_aggregate(t) Returns: first field_declaration of t */ { return type_tag(t)->fieldlist; } field_declaration skip_unnamed_bitfields(field_declaration flist) /* Returns: return first field which is not an unnamed bit field */ { while (flist && !cval_istop(flist->bitwidth) && !flist->name) flist = flist->next; return flist; } /* Methods for storing and printing names for error messages. */ /* Implement a spelling stack that allows components of a name to be pushed and popped. Each element on the stack is this structure. */ struct spelling { int kind; union { largest_int i; const char *s; } u; }; #define SPELLING_STRING 1 #define SPELLING_MEMBER 2 #define SPELLING_BOUNDS 3 static struct spelling *spelling; /* Next stack element (unused). */ static struct spelling *spelling_base; /* Spelling stack base. */ static int spelling_size; /* Size of the spelling stack. */ /* Macros to save and restore the spelling stack around push_... functions. Alternative to SAVE_SPELLING_STACK. */ #define SPELLING_DEPTH() (spelling - spelling_base) #define RESTORE_SPELLING_DEPTH(DEPTH) (spelling = spelling_base + (DEPTH)) /* Save and restore the spelling stack around arbitrary C code. */ #define SAVE_SPELLING_DEPTH(code) \ { \ int __depth = SPELLING_DEPTH (); \ code; \ RESTORE_SPELLING_DEPTH (__depth); \ } /* Push an element on the spelling stack with type KIND and assign VALUE to MEMBER. */ #define PUSH_SPELLING(KIND, VALUE, MEMBER) \ { \ int depth = SPELLING_DEPTH (); \ \ if (depth >= spelling_size) \ { \ spelling_size += 10; \ if (spelling_base == 0) \ spelling_base \ = (struct spelling *) xmalloc (spelling_size * sizeof (struct spelling)); \ else \ spelling_base \ = (struct spelling *) xrealloc (spelling_base, \ spelling_size * sizeof (struct spelling)); \ RESTORE_SPELLING_DEPTH (depth); \ } \ \ spelling->kind = (KIND); \ spelling->MEMBER = (VALUE); \ spelling++; \ } /* Push STRING on the stack. Printed literally. */ static void push_string(const char *string) { PUSH_SPELLING (SPELLING_STRING, string, u.s); } /* Push a member name on the stack. Printed as '.' STRING. */ static void push_member_name(field_declaration fdecl) { const char *const string = nice_field_name(fdecl->name); PUSH_SPELLING (SPELLING_MEMBER, string, u.s); } /* Push an array bounds on the stack. Printed as [BOUNDS]. */ static void push_array_bounds (largest_int bounds) { PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i); } /* Compute the maximum size in bytes of the printed spelling. */ static int spelling_length(void) { int size = 0; struct spelling *p; for (p = spelling_base; p < spelling; p++) { if (p->kind == SPELLING_BOUNDS) size += 25; else size += strlen (p->u.s) + 1; } return size; } /* Print the spelling to BUFFER and return it. */ static char * print_spelling (buffer) char *buffer; { char *d = buffer; struct spelling *p; for (p = spelling_base; p < spelling; p++) if (p->kind == SPELLING_BOUNDS) { sprintf (d, "[%ld]", (long)p->u.i); d += strlen (d); } else { const char *s; if (p->kind == SPELLING_MEMBER) *d++ = '.'; for (s = p->u.s; (*d = *s++); d++) ; } *d++ = '\0'; return buffer; } static void save_expression_spelling(expression e) { if (spelling_base) e->spelling = print_spelling(rstralloc(regionof(e), spelling_length() + 1)); } /* Issue an error message for a bad initializer component. MSGID identifies the message. The component name is taken from the spelling stack. */ void error_init (const char *msgid) { char *ofwhat; error ("%s", msgid); ofwhat = print_spelling ((char *) alloca (spelling_length () + 1)); if (*ofwhat) error ("(near initialization for `%s')", ofwhat); } void error_init_expr(expression e, const char *msgid) { const char *ofwhat; error_with_location(e->location, "%s", msgid); if (e->spelling) ofwhat = e->spelling; else ofwhat = print_spelling ((char *) alloca (spelling_length () + 1)); if (*ofwhat) error_with_location(e->location, "(near initialization for `%s')", ofwhat); } /* Issue a pedantic warning for a bad initializer component. MSGID identifies the message. The component name is taken from the spelling stack. */ void pedwarn_init (const char *msgid) { char *ofwhat; pedwarn ("%s", msgid); ofwhat = print_spelling ((char *) alloca (spelling_length () + 1)); if (*ofwhat) pedwarn ("(near initialization for `%s')", ofwhat); } /* Issue a warning for a bad initializer component. MSGID identifies the message. The component name is taken from the spelling stack. */ static void warning_init (const char *msgid) { char *ofwhat; warning ("%s", msgid); ofwhat = print_spelling ((char *) alloca (spelling_length () + 1)); if (*ofwhat) warning ("(near initialization for `%s')", ofwhat); } /* Digest the parser output INIT as an initializer for type TYPE. Return FALSE if the initialisation is erroneous */ static bool digest_init(type t, expression init) { type itype = init->type; if (t == error_type || itype == error_type) return FALSE; /* Initialization of an array of chars from a string constant optionally enclosed in braces. */ if (type_array(t)) { type typ1 = type_array_of(t); if ((type_char(typ1) || type_equal_unqualified(typ1, wchar_type)) && is_string(init)) { type init_chartype = type_array_of(itype); cval tcsize; if (type_compatible_unqualified(t, itype)) return TRUE; if (!type_char(init_chartype) && type_char(typ1)) { error_init ("char-array initialized from wide string"); return FALSE; } if (type_char(init_chartype) && !type_char(typ1)) { error_init ("int-array initialized from non-wide string"); return FALSE; } tcsize = type_array_size_cval(t); if (!cval_istop(tcsize)) { largest_uint tsize = cval_uint_value(tcsize); data_declaration sdecl = CAST(string, init)->ddecl; /* Don't count the null char (char x[1] = "a" is ok) */ if (tsize && tsize < sdecl->schars.length / type_size_int(type_array_of(sdecl->type))) pedwarn_init ("initializer-string for array of chars is too long"); } return TRUE; } } /* Any type can be initialized from an expression of the same type, optionally with braces. Initialisations of pointers from arrays and functions allow the usual default conversions */ if (type_compatible_unqualified(itype, t) || type_compatible(t, type_default_conversion_for_assignment(itype))) { if (type_pointer(t)) itype = default_conversion_for_assignment(init); #if 0 if (require_constant /*&& !flag_isoc99*/ && is_cast_list(init)) { /* As an extension, allow initializing objects with static storage duration with compound literals (which are then treated just as the brace enclosed list they contain). */ init = CAST(cast_list, init)->init_expr; itype = init->type; } #endif if (type_array(t) && !(is_string(init) || is_init_list(init))) { error_init ("array initialized from non-constant array expression"); return FALSE; } /* Note: gcc allows "static int a = (1,2)" if -pedantic is specified even though it doesn't allow case (1,2) when -pedantic is specified. For the sake of consistency, I'm not allowing either when -pedantic is specified. */ return TRUE; } /* Handle scalar types, including conversions. */ if (type_scalar(t)) return check_assignment(t, default_conversion_for_assignment(init), init, "initialization", NULL, 0); /* Come here only for records and arrays. */ /* Traditionally, you can write struct foo x = 0; and it initializes the first element of x to 0. */ if (flag_traditional) { bool changed = FALSE; while (type_array(t) || type_aggregate(t)) { changed = TRUE; if (type_array(t)) t = type_array_of(t); else { tag_declaration tdecl = type_tag(t); if (tdecl->fieldlist) t = tdecl->fieldlist->type; else { error_init ("invalid initializer"); return FALSE; } } } if (changed) return digest_init(t, init); } error_init("invalid initializer"); return FALSE; } /* Handle initializers that use braces. */ typedef enum { c_none, c_aggregate, c_array, c_scalar } c_kind; /* The kind of object we're constructing at this level of the initialiser */ static c_kind constructor_kind; /* Type of object we are accumulating a constructor for. This type is always a type_struct, type_union or type_array */ static type constructor_type; /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields left to fill. */ static field_declaration constructor_fields; /* For an ARRAY_TYPE, this is the specified index at which to store the next element we get. */ static largest_int constructor_index; /* Largest array index seen+1 (used to determine size of int x[] = { ... } */ static largest_int constructor_array_size; /* For an ARRAY_TYPE, this is the maximum index. */ static largest_int constructor_max_index; /* The count of elements specified at this depth */ static size_t constructor_count; /* The SPELLING_DEPTH of this constructor. */ static int constructor_depth; /* The value currently being initialised */ ivalue constructor_value; static int require_constant_value; /* DECL node for which an initializer is being read. 0 means we are reading a constructor expression such as (struct foo) {...}. */ static data_declaration constructor_decl; /* Nonzero if there were any member designators in this initializer. */ static int constructor_designated; /* Nesting depth of designator list. */ static int designator_depth; /* Nonzero if there were diagnosed errors in this designator list. */ static int designator_erroneous; /* Nonzero if we've already printed a "missing braces around initializer" message within this initializer. */ static int missing_braces_mentioned; /* This stack has a level for each implicit or explicit level of structuring in the initializer, including the outermost one. It saves the values of most of the variables above. */ struct constructor_range_stack; struct constructor_stack { struct constructor_stack *next; c_kind kind; type type; field_declaration fields; largest_int index; largest_int array_size; largest_int max_index; ivalue value; size_t count; int offset; int depth; struct constructor_range_stack *range_stack; char constant; char simple; char implicit; char erroneous; char outer; char incremental; char designated; }; struct constructor_stack *constructor_stack; /* This stack represents designators from some range designator up to the last designator in the list. */ struct constructor_range_stack { struct constructor_range_stack *next, *prev; struct constructor_stack *stack; largest_int range_start; largest_int index; largest_int range_end; bool has_end; field_declaration fields; }; struct constructor_range_stack *constructor_range_stack; /* This stack records separate initializers that are nested. Nested initializers can't happen in ANSI C, but GNU C allows them in cases like { ... (struct foo) { ... } ... }. */ struct initializer_stack { struct initializer_stack *next; data_declaration decl; struct constructor_stack *constructor_stack; struct constructor_range_stack *constructor_range_stack; struct spelling *spelling; struct spelling *spelling_base; int spelling_size; char require_constant_value; }; struct initializer_stack *initializer_stack; static type pop_init_level(void); static void pop_implicit_level(void) { assert(constructor_stack->implicit); pop_init_level(); process_init_element(NULL); } static void pop_all_implicit_levels(void) { while (constructor_stack->implicit) pop_implicit_level(); } static void pop_exhausted_levels(void) { /* If we've exhausted any levels that didn't have braces, pop them now. */ while (constructor_stack->implicit && ((constructor_kind == c_aggregate && constructor_fields == 0) || (constructor_kind == c_array && constructor_max_index < constructor_index))) pop_implicit_level(); } /* Prepare to parse and output the initializer for variable DECL. */ void start_init(declaration decl, nesc_attribute attr) /* decl is really a variable_decl */ { const char *locus; struct initializer_stack *p = (struct initializer_stack *) xmalloc (sizeof (struct initializer_stack)); p->decl = constructor_decl; p->require_constant_value = require_constant_value; p->constructor_stack = constructor_stack; p->constructor_range_stack = constructor_range_stack; p->spelling = spelling; p->spelling_base = spelling_base; p->spelling_size = spelling_size; p->next = initializer_stack; initializer_stack = p; constructor_designated = 0; if (decl != 0) { data_declaration ddecl = CAST(variable_decl, decl)->ddecl; constructor_decl = ddecl; require_constant_value = ddecl->needsmemory; locus = ddecl->name; } else if (attr) { cstring aname = attr->word1->cstring; constructor_decl = NULL; require_constant_value = !(attr->tdecl && attr->tdecl->deputy_scope); locus = rstralloc(current.fileregion, aname.length + 2); sprintf((char *)locus, "@%s", aname.data); } else { constructor_decl = NULL; require_constant_value = 0; locus = "(anonymous)"; } constructor_stack = 0; constructor_range_stack = 0; missing_braces_mentioned = 0; spelling_base = 0; spelling_size = 0; RESTORE_SPELLING_DEPTH (0); if (locus) push_string(locus); } void finish_init(void) { struct initializer_stack *p = initializer_stack; /* Free the whole constructor stack of this initializer. */ while (constructor_stack) { struct constructor_stack *q = constructor_stack; constructor_stack = q->next; free (q); } if (constructor_range_stack) abort (); /* Pop back to the data of the outer initializer (if any). */ constructor_decl = p->decl; require_constant_value = p->require_constant_value; constructor_stack = p->constructor_stack; constructor_range_stack = p->constructor_range_stack; spelling = p->spelling; spelling_base = p->spelling_base; spelling_size = p->spelling_size; initializer_stack = p->next; free (p); } /* ivalue constructors */ ivalue new_ivalue(region r, int kind, type t) { ivalue newp = ralloc(r, struct ivalue); newp->kind = kind; newp->type = t; if (newp->kind == iv_base) newp->u.base.value = cval_top; return newp; } static void add_ivalue_array(ivalue to, largest_int index, ivalue element) { largest_int end = index; struct ivalue_array *newp; assert(to->kind == iv_array); /* Detect when pushing a range initialiser */ if (constructor_range_stack && constructor_range_stack->has_end) end = constructor_range_stack->range_end; newp = ralloc(parse_region, struct ivalue_array); newp->next = to->u.array; to->u.array = newp; newp->from = index; newp->to = end; newp->value = element; } static void add_ivalue_field(ivalue to, field_declaration field, ivalue element) { struct ivalue_field *newp; assert(to->kind == iv_structured); newp = ralloc(parse_region, struct ivalue_field); newp->next = to->u.structured; to->u.structured = newp; newp->field = field; newp->value = element; } static struct constructor_stack *push_constructor_stack(int implicit) { struct constructor_stack *p = (struct constructor_stack *) xmalloc (sizeof (struct constructor_stack)); p->kind = constructor_kind; p->type = constructor_type; p->fields = constructor_fields; p->index = constructor_index; p->array_size = constructor_array_size; p->max_index = constructor_max_index; p->value = constructor_value; p->count = constructor_count; p->depth = constructor_depth; p->implicit = implicit; p->range_stack = 0; p->outer = 0; p->designated = constructor_designated; p->next = constructor_stack; constructor_stack = p; constructor_depth = SPELLING_DEPTH (); constructor_designated = 0; constructor_count = 0; if (!implicit) { p->range_stack = constructor_range_stack; constructor_range_stack = 0; designator_depth = 0; designator_erroneous = 0; } return p; } static bool new_constructor_type(void); /* Call here when we see the initializer is surrounded by braces. This is instead of a call to push_init_level; it is matched by a call to pop_init_level. TYPE is the type to initialize, for a constructor expression. For an initializer for a decl, TYPE is zero. */ void really_start_incremental_init(type t) { if (t == 0) t = constructor_decl->type; assert(constructor_stack == 0); push_constructor_stack(0); constructor_type = t; new_constructor_type(); } /* Push down into a subobject, for initialization. If this is for an explicit set of braces, IMPLICIT is 0. If it is because the next element belongs at a lower level, IMPLICIT is 1 (or 2 if the push is because of designator list). */ void push_init_level(int implicit) { struct constructor_stack *p; pop_exhausted_levels(); p = push_constructor_stack(implicit); /* Don't die if an entire brace-pair level is superfluous in the containing level. */ if (constructor_type == 0) ; else if (constructor_kind == c_aggregate) { /* Don't die if there are extra init elts at the end. */ if (constructor_fields == 0) constructor_type = 0; else { constructor_type = constructor_fields->type; push_member_name(constructor_fields); constructor_depth++; } } else if (constructor_kind == c_array) { constructor_type = type_array_of(constructor_type); push_array_bounds(constructor_index); constructor_depth++; } if (constructor_type == 0) { error_init("extra brace group at end of initializer"); } else if (implicit == 1 && warn_missing_braces && !missing_braces_mentioned) { missing_braces_mentioned = 1; warning_init ("missing braces around initializer"); } if (!new_constructor_type()) warning_init ("braces around scalar initializer"); switch (p->kind) { case c_aggregate: add_ivalue_field(p->value, p->fields, constructor_value); break; case c_array: add_ivalue_array(p->value, p->index, constructor_value); break; case c_scalar: break; default: assert(0); break; } } /* Set state for new constructor type (constructor_kind and associated state) Return FALSE if the constructor_type is a scalar type */ static bool new_constructor_type(void) { if (!constructor_type) { constructor_kind = c_none; constructor_value = NULL; } else if (type_aggregate(constructor_type)) { constructor_kind = c_aggregate; constructor_fields = skip_unnamed_bitfields(type_fields(constructor_type)); constructor_value = new_ivalue(parse_region, iv_structured, constructor_type); } else if (type_array(constructor_type)) { cval max = type_array_size_cval(constructor_type); constructor_kind = c_array; if (cval_istop(max)) constructor_max_index = -1; else constructor_max_index = cval_sint_value(max) - 1; constructor_index = constructor_array_size = 0; constructor_value = new_ivalue(parse_region, iv_array, constructor_type); } else { /* Handle the case of int x = {5}; */ constructor_kind = c_scalar; constructor_index = 0; constructor_value = new_ivalue(parse_region, iv_base, constructor_type); return FALSE; } return TRUE; } /* At the end of an implicit or explicit brace level, finish up that level of constructor. Return the type that this level was for */ static type pop_init_level(void) { struct constructor_stack *p; type ctype; ctype = constructor_type ? constructor_type : error_type; p = constructor_stack; /* Error for initializing a flexible array member, or a zero-length array member in an inappropriate context. */ if (constructor_type && constructor_fields && constructor_depth && type_array(constructor_type) && !type_array_size(constructor_type)) { /* Silently discard empty initializations. The parser will already have pedwarned for empty brackets. */ if (constructor_count > 0) { if (constructor_depth > 2) error_init("initialization of flexible array member in a nested context"); else if (pedantic) pedwarn_init("initialization of a flexible array member"); /* We have already issued an error message for the existence of a flexible array member not at the end of the structure. Discard the initializer so that we do not abort later. */ if (constructor_fields->next) constructor_type = NULL; } } #if 0 /* Warn when some struct elements are implicitly initialized to zero. */ if (extra_warnings && constructor_type && TREE_CODE (constructor_type) == RECORD_TYPE && constructor_unfilled_fields) { /* Do not warn for flexible array members or zero-length arrays. */ while (constructor_unfilled_fields && (! DECL_SIZE (constructor_unfilled_fields) || integer_zerop (DECL_SIZE (constructor_unfilled_fields)))) constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields); /* Do not warn if this level of the initializer uses member designators; it is likely to be deliberate. */ if (constructor_unfilled_fields && !constructor_designated) { push_member_name (constructor_unfilled_fields); warning_init ("missing initializer"); RESTORE_SPELLING_DEPTH (constructor_depth); } } #endif if (constructor_kind == c_scalar && constructor_count == 0) error_init("empty scalar initializer"); constructor_kind = p->kind; constructor_type = p->type; constructor_fields = p->fields; constructor_index = p->index; constructor_array_size = p->array_size; constructor_max_index = p->max_index; constructor_value = p->value; constructor_count = p->count; constructor_designated = p->designated; constructor_depth = p->depth; if (!p->implicit) constructor_range_stack = p->range_stack; RESTORE_SPELLING_DEPTH (constructor_depth); constructor_stack = p->next; free (p); return ctype; } /* Common handling for both array range and field name designators. ARRAY argument is non-zero for array ranges. Returns zero for success. */ static bool set_designator(bool array) { type subtype; /* Don't die if an entire brace-pair level is superfluous in the containing level. */ if (constructor_kind == c_none) return TRUE; /* If there were errors in this designator list already, bail out silently. */ if (designator_erroneous) return TRUE; if (!designator_depth) { if (constructor_range_stack) abort (); /* Designator list starts at the level of closest explicit braces. */ pop_all_implicit_levels(); constructor_designated = 1; return FALSE; } if (constructor_kind == c_aggregate) { subtype = constructor_fields->type; } else if (constructor_kind == c_array) { subtype = type_array_of(constructor_type); } else abort(); if (array && !type_array(subtype)) { error_init ("array index in non-array initializer"); return TRUE; } else if (!array && !type_aggregate(subtype)) { error_init ("field name not in record or union initializer"); return TRUE; } constructor_designated = 1; push_init_level(2); return FALSE; } /* If there are range designators in designator list, push a new designator to constructor_range_stack. RANGE_END is end of such stack range or NULL if there is no range designator at this level. */ static void push_range_stack(expression range_end) { struct constructor_range_stack *p; p = (struct constructor_range_stack *) xmalloc(sizeof (struct constructor_range_stack)); p->prev = constructor_range_stack; p->next = 0; p->fields = constructor_fields; p->range_start = constructor_index; p->index = constructor_index; p->stack = constructor_stack; if (range_end) { p->range_end = constant_sint_value(range_end->cst); p->has_end = TRUE; } else p->has_end = FALSE; if (constructor_range_stack) constructor_range_stack->next = p; constructor_range_stack = p; } /* Within an array initializer, specify the next index to be initialized. FIRST is that index. If LAST is nonzero, then initialize a range of indices, running from FIRST through LAST. */ designator set_init_index(location loc, expression first, expression last) { designator d = CAST(designator, new_designate_index(parse_region, loc, first, last)); if (set_designator(TRUE)) return d; designator_erroneous = 1; if (!(first->cst && constant_integral(first->cst))) error_init("nonconstant array index in initializer"); else if (last != 0 && !(last->cst && constant_integral(last->cst))) error_init("nonconstant array index in initializer"); else if (constructor_kind != c_array) error_init("array index in non-array initializer"); else if (constructor_max_index >= 0 && constructor_max_index < constant_sint_value(first->cst)) error_init("array index in initializer exceeds array bounds"); else { largest_int fval = constant_sint_value(first->cst); constructor_index = fval; if (last) { largest_int lval = constant_sint_value(last->cst); if (fval == lval) last = 0; else if (lval < fval) { error_init("empty index range in initializer"); last = 0; } else { if (constructor_max_index >= 0 && constructor_max_index < lval) { error_init("array index range in initializer exceeds array bounds"); last = 0; } } } designator_depth++; designator_erroneous = 0; if (constructor_range_stack || last) push_range_stack(last); } return d; } /* Within a struct initializer, specify the next field to be initialized. */ designator set_init_label(location loc, cstring fieldname) { designator d = CAST(designator, new_designate_field(parse_region, loc, fieldname)); field_declaration tail; tag_declaration tdecl; if (set_designator(FALSE)) return d; designator_erroneous = 1; if (constructor_kind != c_aggregate) { error_init("field name not in record or union initializer"); return d; } tdecl = type_tag(constructor_type); tail = env_lookup(tdecl->fields, fieldname.data, TRUE); if (tail == 0) error("unknown field `%s' specified in initializer", fieldname.data); else { constructor_fields = tail; designator_depth++; designator_erroneous = 0; if (constructor_range_stack) push_range_stack(NULL); } return d; } void check_init_element(expression init) { known_cst c; if (!check_constant_once(init, cst_any)) return; /* XXX: process_init_element set the ivalue to iv_base for strings used to initialise arrays. So we need to special case here too. We don't need to do anything, as this only happened for string constants, which are clearly constant ;-) See string_flag test in that function. */ if (is_init_list(init)) return; /* Arrays are "constant" if they have a static address (see default_conversion on arrays) - this essentially handles the case of string constants */ c = type_array(init->type) ? init->static_address : init->cst; if (!c) { error_init_expr(init, "initializer element is not constant"); return; } #if 0 /* This is no longer detected as constant_unknown has been recycled for use with abstract component arguments. It could be resurrected if we made cval more complicated, but it doesn't seem worth the effort. */ else if (constant_uncomputable(c)) { error_init_expr(init, "initializer element is not computable at load time"); return; } #endif else { constant_overflow_warning(c); if (init->ivalue) { assert(init->ivalue->kind == iv_base); init->ivalue->u.base.value = cval_cast(c->cval, init->ivalue->type); } } } /* "Output" the next constructor element. At top level, really output it to assembler code now. Otherwise, collect it in a list from which we will make a CONSTRUCTOR. TYPE is the data type that the containing data type wants here. FIELD is the field (a FIELD_DECL) or the index that this element fills. PENDING if non-nil means output pending elements that belong right after this element. (PENDING is normally 1; it is 0 while outputting pending elements, to avoid recursion.) */ static void output_init_element(expression init, type t) { assert(init->ivalue->kind == iv_base); init->ivalue->u.base.expr = init; init->ivalue->u.base.require_constant_value = require_constant_value; if (digest_init(t, init) && require_constant_value) { check_init_element(init); /* If we haven't checked it yet then we'll need the spelling later (see nesc-constants.c) */ if (!init->cst_checked) save_expression_spelling(init); } } /* Add one non-braced element to the current constructor level. This adjusts the current position within the constructor's type. This may also start or terminate implicit levels to handle a partly-braced initializer. Once this has found the correct level for the new element, it calls output_init_element. If VALUE is NULL, just advance to the next element without any error messages */ void process_init_element(expression value) { bool string_flag = value && is_string(value); designator_depth = 0; designator_erroneous = 0; /* Handle superfluous braces around string cst as in char x[] = {"foo"}; */ if (string_flag && constructor_kind == c_array && type_integer(type_array_of(constructor_type)) && constructor_count == 0) { constructor_kind = c_scalar; constructor_index = 0; if (!type_array_size(constructor_type)) constructor_type = constructor_value->type = set_string_length(constructor_type, value); /* XXX: maybe this should stay as a iv_array, and the string should be broken down into characters? */ constructor_value->kind = iv_base; constructor_value->u.base.expr = NULL; constructor_value->u.base.value = cval_top; } /* Ignore elements of a brace group if it is entirely superfluous and has already been diagnosed. */ if (constructor_kind == c_none) return; /* If we've exhausted any levels that didn't have braces, pop them now. */ pop_exhausted_levels(); tryagain: if (value) { type elttype = error_type; switch (constructor_kind) { case c_aggregate: if (constructor_fields == 0) { pedwarn_init("excess elements in struct or union initializer"); break; } elttype = constructor_fields->type; /* Error for non-static initialization of a flexible array member. */ if (type_array(elttype) && !require_constant_value && (type_array_size(elttype) && definite_zero(type_array_size(elttype))) && !constructor_fields->next) { error_init("non-static initialization of a flexible array member"); break; } push_member_name (constructor_fields); break; case c_array: if (constructor_max_index >= 0 && constructor_max_index < constructor_index) { pedwarn_init("excess elements in array initializer"); break; } elttype = type_array_of(constructor_type); push_array_bounds(constructor_index); if (type_array(elttype) && !type_array_size(elttype)) { elttype = error_type; error_init("array type has incomplete element type"); } break; case c_scalar: if (constructor_count == 0) elttype = constructor_type; else if (constructor_count == 1) /* Only warn once */ pedwarn_init("excess elements in scalar initializer"); break; default: assert(0); break; } /* Accept a string constant to initialize a subarray. */ if (type_array(elttype) && type_integer(type_array_of(elttype)) && string_flag) ; /* Otherwise, if we have come to a subaggregate, and we don't have an element of its type, push into it. */ else if ((constructor_kind == c_array || constructor_kind == c_aggregate) && value->type != error_type && !type_equal_unqualified(value->type, elttype) && (type_aggregate(elttype) || type_array(elttype))) { push_init_level(1); goto tryagain; } /* This is here rather than in the previous switch because of the tryagain ("walk-into-array-or-aggregate") case */ if (elttype != error_type) { ivalue valueholder = NULL; switch (constructor_kind) { case c_aggregate: valueholder = new_ivalue(parse_region, iv_base, elttype); add_ivalue_field(constructor_value, constructor_fields, valueholder); break; case c_array: valueholder = new_ivalue(parse_region, iv_base, elttype); add_ivalue_array(constructor_value, constructor_index, valueholder); break; case c_scalar: valueholder = constructor_value; break; default: assert(0); break; } value->ivalue = valueholder; } else value->ivalue = new_ivalue(parse_region, iv_base, error_type); output_init_element (value, elttype); } constructor_count++; switch (constructor_kind) { case c_aggregate: if (value) RESTORE_SPELLING_DEPTH (constructor_depth); if (!type_union(constructor_type)) { if (constructor_fields) constructor_fields = skip_unnamed_bitfields(constructor_fields->next); } else { /* Warn that traditional C rejects initialization of unions. We skip the warning if the value is zero. This is done under the assumption that the zero initializer in user code appears conditioned on e.g. __STDC__ to avoid "missing initializer" warnings and relies on default initialization to zero in the traditional C case. We also skip the warning if the initializer is designated, again on the assumption that this must be conditional on __STDC__ anyway (and we've already complained about the member-designator already). */ if (value && warn_traditional && !value->location->in_system_header && !constructor_designated && !definite_zero(value)) warning("traditional C rejects initialization of unions"); constructor_fields = 0; } break; case c_array: if (value) RESTORE_SPELLING_DEPTH (constructor_depth); constructor_index++; if (constructor_index > constructor_array_size) constructor_array_size = constructor_index; break; case c_scalar: /* the weird {"foo"} case above */ break; default: assert(0); break; } /* Pop back to the level before the designator */ if (constructor_range_stack) { struct constructor_range_stack *p, *range_stack; range_stack = constructor_range_stack; constructor_range_stack = 0; /* First pop back to the level at which the designator ended */ while (constructor_stack != range_stack->stack) pop_implicit_level(); /* Then pop back up all the designators (note that the topmost one does not have an implicit level) */ for (p = range_stack; p->prev; p = p->prev) pop_implicit_level(); } // XXX: mem dealloc for range stack constructor_range_stack = 0; } expression make_init_specific(designator dlist, expression initval) { return CAST(expression, new_init_specific(parse_region, dlist->location, dlist, initval)); } expression make_init_list(location loc, expression elist) { expression ilist; type itype; largest_int array_size; /* Explicit close brace: pop any inner levels that didn't have explicit braces. */ pop_all_implicit_levels(); /* Save array size (if any) */ array_size = constructor_array_size; assert(!constructor_range_stack); ilist = CAST(expression, new_init_list(parse_region, loc, elist)); ilist->ivalue = constructor_value; itype = pop_init_level(); /* Complete array types based on the initialiser */ if (type_array(itype) && !type_array_size(itype)) itype = set_array_length(itype, array_size); ilist->type = itype; return ilist; } expression make_cast_list(location loc, asttype t, expression init) { cast_list result; result = new_cast_list(parse_region, loc, t, init); result->type = t->type; /* gcc 2.x only considers this an lvalue if it's defined from constant expressions. But 3.x always considers it an lvalue... */ result->lvalue = TRUE; return CAST(expression, result); } /* Code to handle simple initialisers like 'int x = '. The variable being initialised is constructor_decl */ void simple_init(expression expr) { type tdecl = constructor_decl->type; if (is_string(expr) && type_array(tdecl) && !type_array_size(tdecl)) tdecl = set_string_length(tdecl, expr); expr->ivalue = new_ivalue(parse_region, iv_base, tdecl); output_init_element(expr, tdecl); } nescc-1.3.4/src/init.h000066400000000000000000000046031177770303300145300ustar00rootroot00000000000000/* Initialiser handling. This file is part of the nesC compiler. This file is derived from the GNU C Compiler. It is thus Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Changes for nesC are Copyright (C) 2002, 2003 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef INIT_H #define INIT_H /* Types representing a parsed initialiser. Unspecified fields and array elements were unspecified in the initialiser. */ struct ivalue { enum { iv_base, iv_array, iv_structured } kind; type type; ivalue instantiation; union { struct { /* for iv_base */ expression expr; /* not an init_list */ bool require_constant_value; cval value; /* value if constant, cval_top otherwise */ } base; struct ivalue_array *array; /* for iv_array */ struct ivalue_field *structured; /* for iv_structured */ } u; }; typedef struct ivalue_array { struct ivalue_array *next; largest_int from, to; ivalue value; } *ivalue_array; typedef struct ivalue_field { struct ivalue_field *next; field_declaration field; ivalue value; } *ivalue_field; ivalue new_ivalue(region r, int kind, type t); void start_init(declaration decl, nesc_attribute attr); void finish_init(void); void simple_init(expression expr); void really_start_incremental_init(type t); void push_init_level(int implicit); designator set_init_index(location loc, expression first, expression last); designator set_init_label(location loc, cstring fieldname); void process_init_element(expression value); expression make_init_specific(designator dlist, expression initval); expression make_init_list(location loc, expression elist); expression make_cast_list(location loc, asttype t, expression init); void check_init_element(expression init); #endif nescc-1.3.4/src/lex.nd.c000066400000000000000000001345011177770303300147510ustar00rootroot00000000000000 #line 3 "lex.nd.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define yy_create_buffer nd_create_buffer #define yy_delete_buffer nd_delete_buffer #define yy_flex_debug nd_flex_debug #define yy_init_buffer nd_init_buffer #define yy_flush_buffer nd_flush_buffer #define yy_load_buffer_state nd_load_buffer_state #define yy_switch_to_buffer nd_switch_to_buffer #define yyin ndin #define yyleng ndleng #define yylex ndlex #define yylineno ndlineno #define yyout ndout #define yyrestart ndrestart #define yytext ndtext #define yywrap ndwrap #define yyalloc ndalloc #define yyrealloc ndrealloc #define yyfree ndfree #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE ndrestart(ndin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t ndleng; extern FILE *ndin, *ndout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up ndtext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up ndtext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via ndrestart()), so that the user can continue scanning by * just pointing ndin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when ndtext is formed. */ static char yy_hold_char; static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ yy_size_t ndleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow ndwrap()'s to do buffer switches * instead of setting up a fresh ndin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void ndrestart (FILE *input_file ); void nd_switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE nd_create_buffer (FILE *file,int size ); void nd_delete_buffer (YY_BUFFER_STATE b ); void nd_flush_buffer (YY_BUFFER_STATE b ); void ndpush_buffer_state (YY_BUFFER_STATE new_buffer ); void ndpop_buffer_state (void ); static void ndensure_buffer_stack (void ); static void nd_load_buffer_state (void ); static void nd_init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER nd_flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE nd_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE nd_scan_string (yyconst char *yy_str ); YY_BUFFER_STATE nd_scan_bytes (yyconst char *bytes,yy_size_t len ); void *ndalloc (yy_size_t ); void *ndrealloc (void *,yy_size_t ); void ndfree (void * ); #define yy_new_buffer nd_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ ndensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ nd_create_buffer(ndin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ ndensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ nd_create_buffer(ndin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ typedef unsigned char YY_CHAR; FILE *ndin = (FILE *) 0, *ndout = (FILE *) 0; typedef int yy_state_type; extern int ndlineno; int ndlineno = 1; extern char *ndtext; #define yytext_ptr ndtext static yy_state_type yy_get_previous_state (void ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); static int yy_get_next_buffer (void ); static void yy_fatal_error (yyconst char msg[] ); /* Done after the current pattern has been matched and before the * corresponding action - sets up ndtext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ ndleng = (size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 6 #define YY_END_OF_BUFFER 7 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[25] = { 0, 0, 0, 7, 5, 1, 2, 5, 5, 3, 3, 5, 5, 0, 4, 5, 3, 3, 5, 4, 0, 5, 0, 3, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 5, 1, 1, 1, 4, 1, 4, 4, 1, 1, 4, 6, 1, 1, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 11, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[12] = { 0, 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int16_t yy_base[30] = { 0, 0, 0, 17, 0, 72, 72, 10, 15, 17, 9, 0, 26, 33, 0, 43, 0, 3, 41, 72, 0, 0, 46, 0, 72, 57, 60, 63, 66, 69 } ; static yyconst flex_int16_t yy_def[30] = { 0, 24, 1, 24, 25, 24, 24, 26, 25, 8, 8, 25, 26, 27, 25, 28, 9, 9, 25, 24, 29, 12, 27, 18, 0, 24, 24, 24, 24, 24 } ; static yyconst flex_int16_t yy_nxt[84] = { 0, 4, 5, 4, 6, 7, 8, 9, 10, 4, 4, 4, 13, 11, 13, 14, 17, 24, 24, 24, 24, 15, 16, 17, 17, 24, 24, 18, 13, 24, 13, 14, 24, 24, 24, 24, 24, 15, 19, 24, 24, 24, 24, 24, 20, 22, 11, 22, 23, 23, 23, 19, 24, 24, 24, 24, 24, 20, 11, 24, 11, 12, 12, 12, 13, 13, 13, 21, 21, 21, 22, 22, 3, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24 } ; static yyconst flex_int16_t yy_chk[84] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 17, 7, 7, 10, 3, 0, 0, 0, 7, 8, 8, 9, 0, 0, 9, 12, 0, 12, 12, 0, 0, 0, 0, 0, 12, 13, 0, 0, 0, 0, 0, 13, 15, 15, 15, 18, 18, 18, 22, 0, 0, 0, 0, 0, 22, 25, 0, 25, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; extern int nd_flex_debug; int nd_flex_debug = 0; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *ndtext; #line 1 "nesc-dspec.l" /* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Lexer for -fnesc-dump arguments (tokens are numbers, names (can be arbitrary strings in "") and boolean operators */ #line 24 "nesc-dspec.l" #include #include #include #include "parser.h" #include "nesc-dump.h" #include "nesc-dspec.h" #include "nesc-dspec-int.h" /* We never wrap into another file */ #define YY_SKIP_YYWRAP #define ndwrap() (1) #define YY_USE_PROTOS #undef YY_INPUT #define YY_INPUT(buf, result, max_size) \ { (result) = string_read((buf), (max_size)); } static int string_read(char *buf, int max_size); void nderror(char *err); #line 530 "lex.nd.c" #define INITIAL 0 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif static int yy_init_globals (void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int ndlex_destroy (void ); int ndget_debug (void ); void ndset_debug (int debug_flag ); YY_EXTRA_TYPE ndget_extra (void ); void ndset_extra (YY_EXTRA_TYPE user_defined ); FILE *ndget_in (void ); void ndset_in (FILE * in_str ); FILE *ndget_out (void ); void ndset_out (FILE * out_str ); yy_size_t ndget_leng (void ); char *ndget_text (void ); int ndget_lineno (void ); void ndset_lineno (int line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int ndwrap (void ); #else extern int ndwrap (void ); #endif #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void ); #else static int input (void ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO fwrite( ndtext, ndleng, 1, ndout ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ yy_size_t n; \ for ( n = 0; n < max_size && \ (c = getc( ndin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( ndin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, ndin))==0 && ferror(ndin)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(ndin); \ } \ }\ \ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int ndlex (void); #define YY_DECL int ndlex (void) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after ndtext and ndleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 49 "nesc-dspec.l" #line 713 "lex.nd.c" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! ndin ) ndin = stdin; if ( ! ndout ) ndout = stdout; if ( ! YY_CURRENT_BUFFER ) { ndensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = nd_create_buffer(ndin,YY_BUF_SIZE ); } nd_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of ndtext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 25 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 72 ); yy_find_action: yy_act = yy_accept[yy_current_state]; if ( yy_act == 0 ) { /* have to back up */ yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_act = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 51 "nesc-dspec.l" { } YY_BREAK case 2: YY_RULE_SETUP #line 52 "nesc-dspec.l" { return ndtext[0]; } YY_BREAK case 3: YY_RULE_SETUP #line 53 "nesc-dspec.l" { errno = 0; ndlval.integer = strtoll(ndtext, NULL, 0); if (errno) nderror("integer constant out of bounds."); return ND_INTEGER; } YY_BREAK case 4: /* rule 4 can match eol */ YY_RULE_SETUP #line 60 "nesc-dspec.l" { char *str = rstralloc(dump_region, strlen(ndtext)); const char *text = ndtext + 1; ndlval.token = str; while (*text) { /* Shell-like \-processing: \ is preserved except in front of " and \ */ if (*text == '\\' && (text[1] == '"' || text[1] == '\\')) text++; *str++ = *text++; } str[-1] = '\0'; return ND_TOKEN; } YY_BREAK case 5: /* rule 5 can match eol */ YY_RULE_SETUP #line 76 "nesc-dspec.l" { ndlval.token = rstrdup(dump_region, ndtext); return ND_TOKEN; } YY_BREAK case 6: YY_RULE_SETUP #line 81 "nesc-dspec.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK #line 852 "lex.nd.c" case YY_STATE_EOF(INITIAL): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed ndin at a new source and called * ndlex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = ndin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_c_buf_p); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( ndwrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * ndtext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of ndlex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer (void) { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ ndrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; ndrestart(ndin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) ndrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state (void) { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 25 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 25 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 24); return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) #else static int input (void) #endif { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ ndrestart(ndin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( ndwrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve ndtext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void ndrestart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ ndensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = nd_create_buffer(ndin,YY_BUF_SIZE ); } nd_init_buffer(YY_CURRENT_BUFFER,input_file ); nd_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void nd_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * ndpop_buffer_state(); * ndpush_buffer_state(new_buffer); */ ndensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; nd_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (ndwrap()) processing, but the only time this flag * is looked at is after ndwrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } static void nd_load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; ndin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE nd_create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) ndalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in nd_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) ndalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in nd_create_buffer()" ); b->yy_is_our_buffer = 1; nd_init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with nd_create_buffer() * */ void nd_delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) ndfree((void *) b->yy_ch_buf ); ndfree((void *) b ); } #ifndef __cplusplus extern int isatty (int ); #endif /* __cplusplus */ /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a ndrestart() or at EOF. */ static void nd_init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; nd_flush_buffer(b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then nd_init_buffer was _probably_ * called from ndrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void nd_flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) nd_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void ndpush_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; ndensure_buffer_stack(); /* This block is copied from nd_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from nd_switch_to_buffer. */ nd_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void ndpop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; nd_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { nd_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void ndensure_buffer_stack (void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)ndalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in ndensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)ndrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in ndensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE nd_scan_buffer (char * base, yy_size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) ndalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in nd_scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; nd_switch_to_buffer(b ); return b; } /** Setup the input buffer state to scan a string. The next call to ndlex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * nd_scan_bytes() instead. */ YY_BUFFER_STATE nd_scan_string (yyconst char * yystr ) { return nd_scan_bytes(yystr,strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to ndlex() will * scan from a @e copy of @a bytes. * @param bytes the byte buffer to scan * @param len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE nd_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n, i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) ndalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in nd_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = nd_scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in nd_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up ndtext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ ndtext[ndleng] = (yy_hold_char); \ (yy_c_buf_p) = ndtext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ ndleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int ndget_lineno (void) { return ndlineno; } /** Get the input stream. * */ FILE *ndget_in (void) { return ndin; } /** Get the output stream. * */ FILE *ndget_out (void) { return ndout; } /** Get the length of the current token. * */ yy_size_t ndget_leng (void) { return ndleng; } /** Get the current token. * */ char *ndget_text (void) { return ndtext; } /** Set the current line number. * @param line_number * */ void ndset_lineno (int line_number ) { ndlineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see nd_switch_to_buffer */ void ndset_in (FILE * in_str ) { ndin = in_str ; } void ndset_out (FILE * out_str ) { ndout = out_str ; } int ndget_debug (void) { return nd_flex_debug; } void ndset_debug (int bdebug ) { nd_flex_debug = bdebug ; } static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from ndlex_destroy(), so don't allocate here. */ (yy_buffer_stack) = 0; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = (char *) 0; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT ndin = stdin; ndout = stdout; #else ndin = (FILE *) 0; ndout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * ndlex_init() */ return 0; } /* ndlex_destroy is for both reentrant and non-reentrant scanners. */ int ndlex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ nd_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; ndpop_buffer_state(); } /* Destroy the stack itself. */ ndfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * ndlex() is called, initialization will occur. */ yy_init_globals( ); return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *ndalloc (yy_size_t size ) { return (void *) malloc( size ); } void *ndrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void ndfree (void * ptr ) { free( (char *) ptr ); /* see ndrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 81 "nesc-dspec.l" static YY_BUFFER_STATE mbuf; static const char *line; static int length, offset; void nd_read(const char *str) { if (mbuf) nd_delete_buffer(mbuf); mbuf = nd_create_buffer(stdin, YY_BUF_SIZE); nd_switch_to_buffer(mbuf); line = str; offset = 0; length = strlen(line); } static int string_read(char *abuf, int max_size) { int cnt; cnt = max_size; if (cnt > length - offset) cnt = length - offset; memcpy(abuf, line + offset, cnt); offset += cnt; return cnt; } void nderror(char *err) { error("dump option `%s': %s", line, err); } nescc-1.3.4/src/libcompat/000077500000000000000000000000001177770303300153635ustar00rootroot00000000000000nescc-1.3.4/src/libcompat/Makefile.am000066400000000000000000000023601177770303300174200ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in -*- makefile -*- # This file is part of the RC compiler. # Copyright (C) 2000-2001 The Regents of the University of California. # # RC 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. # # RC 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 RC; see the file COPYING. If not, write to # the Free Software Foundation, 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. INCLUDES := -DNMEMDEBUG -DNDEBUG -O9 noinst_LIBRARIES = libregions.a noinst_HEADERS = \ alloc.c \ pages.c \ stats.c if NEED_FNMATCH INCLUDES += -Ifnmatch FNMATCH = fnmatch.c fnmatch/fnmatch.h endif if NEED_REGEX INCLUDES += -Iregex REGEX = regex.c regex/regex.h endif libregions_a_SOURCES = \ regions.c \ regions.h \ $(FNMATCH) \ $(REGEX) nescc-1.3.4/src/libcompat/Makefile.in000066400000000000000000000345621177770303300174420ustar00rootroot00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This file is part of the RC compiler. # Copyright (C) 2000-2001 The Regents of the University of California. # # RC 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. # # RC 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 RC; see the file COPYING. If not, write to # the Free Software Foundation, 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @NEED_FNMATCH_TRUE@am__append_1 = -Ifnmatch @NEED_REGEX_TRUE@am__append_2 = -Iregex subdir = libcompat DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config-aux/depstand.m4 \ $(top_srcdir)/../config-aux/iconv.m4 \ $(top_srcdir)/../config-aux/lead-dot.m4 \ $(top_srcdir)/../config-aux/lib-ld.m4 \ $(top_srcdir)/../config-aux/lib-link.m4 \ $(top_srcdir)/../config-aux/lib-prefix.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/../config-aux/mkinstalldirs CONFIG_HEADER = $(top_builddir)/autoconf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libregions_a_AR = $(AR) $(ARFLAGS) libregions_a_LIBADD = am__libregions_a_SOURCES_DIST = regions.c regions.h fnmatch.c \ fnmatch/fnmatch.h regex.c regex/regex.h @NEED_FNMATCH_TRUE@am__objects_1 = fnmatch.$(OBJEXT) @NEED_REGEX_TRUE@am__objects_2 = regex.$(OBJEXT) am_libregions_a_OBJECTS = regions.$(OBJEXT) $(am__objects_1) \ $(am__objects_2) libregions_a_OBJECTS = $(am_libregions_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/../config-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libregions_a_SOURCES) DIST_SOURCES = $(am__libregions_a_SOURCES_DIST) HEADERS = $(noinst_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ INCLUDES := -DNMEMDEBUG -DNDEBUG -O9 $(am__append_1) $(am__append_2) noinst_LIBRARIES = libregions.a noinst_HEADERS = \ alloc.c \ pages.c \ stats.c @NEED_FNMATCH_TRUE@FNMATCH = fnmatch.c fnmatch/fnmatch.h @NEED_REGEX_TRUE@REGEX = regex.c regex/regex.h libregions_a_SOURCES = \ regions.c \ regions.h \ $(FNMATCH) \ $(REGEX) all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libcompat/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu libcompat/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libregions.a: $(libregions_a_OBJECTS) $(libregions_a_DEPENDENCIES) -rm -f libregions.a $(libregions_a_AR) libregions.a $(libregions_a_OBJECTS) $(libregions_a_LIBADD) $(RANLIB) libregions.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnmatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regions.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nescc-1.3.4/src/libcompat/alloc.c000066400000000000000000000112651177770303300166260ustar00rootroot00000000000000/* * Copyright (c) 1999-2001 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the * distribution. * - Neither the name of the University of California nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * */ /* TBD: recover unusued portions of pages for use as individual pages */ #include #include "regions.h" static void alloc_block(region r, struct allocator *a, struct ablock *blk, void **p1, int s1, int a1, void **p2, int s2, int a2, size_t blksize, int needsclear) { struct page *newp; char *mem1, *mem2; mem1 = PALIGN(blk->allocfrom, a1); mem2 = PALIGN(mem1 + s1, a2); /* Can't use last byte of page (pointers to the byte after an object are valid) */ if (mem2 + s2 >= blk->end) { if (blksize == RPAGESIZE) { newp = alloc_single_page(a->pages); a->pages = newp; blk->allocfrom = (char *)newp + offsetof(struct page, previous); set_region(newp, 1, r); } else { newp = alloc_pages(blksize >> RPAGELOG, a->bigpages); a->bigpages = newp; blk->allocfrom = (char *)newp + offsetof(struct page, previous); set_region(newp, blksize >> RPAGELOG, r); } blk->end = (char *)newp + blksize; if (needsclear) preclear(blk->allocfrom, blksize - (blk->allocfrom - (char *)newp)); mem1 = PALIGN(blk->allocfrom, a1); mem2 = PALIGN(mem1 + s1, a2); } ASSERT_INUSE(blk->end - blksize, r); blk->allocfrom = mem2 + s2; *p1 = mem1; *p2 = mem2; } static inline void qalloc(region r, struct allocator *a, void **p1, int s1, int a1, void **p2, int s2, int a2, int needsclear) { struct page *p; char *mem; int npages; int n = ALIGN(s1, a2) + s2; /* Yes, this is correct (see alloc_block) */ /* We optimise the check for the first block */ { char *mem1, *mem2; mem1 = PALIGN(a->page.allocfrom, a1); mem2 = PALIGN(mem1 + s1, a2); /* Can't use last byte of page (pointers to the byte after an object are valid) */ if (mem2 + s2 < a->page.end) { ASSERT_INUSE(blk->end - blksize, r); a->page.allocfrom = mem2 + s2; *p1 = mem1; *p2 = mem2; return; } } if (n <= RPAGESIZE / K) { alloc_block(r, a, &a->page, p1, s1, a1, p2, s2, a2, RPAGESIZE, needsclear); return; } #if K >= 2 if (n <= RPAGESIZE) { alloc_block(r, a, &a->superpage, p1, s1, a1, p2, s2, a2, K * RPAGESIZE, needsclear); return; } #endif #if K >= 4 if (n <= RPAGESIZE * K) { alloc_block(r, a, &a->hyperpage, p1, s1, a1, p2, s2, a2, K * K * RPAGESIZE, needsclear); return; } #endif /* We would have - 1 after RPAGESIZE, but we need to add 1 to make the last byte of the object live in the same region */ npages = (n + ALIGN(offsetof(struct page, previous), a1) + RPAGESIZE) >> RPAGELOG; p = alloc_pages(npages, a->bigpages); a->bigpages = p; set_region(p, npages, r); mem = (char *)p + offsetof(struct page, previous); *p1 = PALIGN(mem, a1); *p2 = PALIGN((char *)*p1 + s1, a2); if (needsclear) preclear(*p2, s2); } void free_all_pages(region r, struct allocator *a) /* Assumes freepages_lock held */ { struct page *p, *next; for (p = a->pages; p; p = next) { next = p->next; free_single_page(r, p); } for (p = a->bigpages; p; p = next) { next = p->next; free_pages(r, p); } } nescc-1.3.4/src/libcompat/fnmatch.c000066400000000000000000000244561177770303300171620ustar00rootroot00000000000000/* Copyright (C) 1991-1993, 1996-1999, 2000 Free Software Foundation, Inc. This file is part of the GNU C Library. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #if HAVE_CONFIG_H # include #endif /* Enable GNU extensions in fnmatch.h. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include #include #include #include #if HAVE_STRING_H || defined _LIBC # include #else # include #endif #if defined STDC_HEADERS || defined _LIBC # include #endif /* For platform which support the ISO C amendement 1 functionality we support user defined character classes. */ #if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) /* Solaris 2.5 has a bug: must be included before . */ # include # include #endif /* We need some of the locale data (the collation sequence information) but there is no interface to get this information in general. Therefore we support a correct implementation only in glibc. */ #ifdef _LIBC # include "../locale/localeinfo.h" # include "../locale/elem-hash.h" # include "../locale/coll-lookup.h" # define CONCAT(a,b) __CONCAT(a,b) # define mbsinit __mbsinit # define mbsrtowcs __mbsrtowcs #endif /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #if defined _LIBC || !defined __GNU_LIBRARY__ # if defined STDC_HEADERS || !defined isascii # define ISASCII(c) 1 # else # define ISASCII(c) isascii(c) # endif # ifdef isblank # define ISBLANK(c) (ISASCII (c) && isblank (c)) # else # define ISBLANK(c) ((c) == ' ' || (c) == '\t') # endif # ifdef isgraph # define ISGRAPH(c) (ISASCII (c) && isgraph (c)) # else # define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c)) # endif # define ISPRINT(c) (ISASCII (c) && isprint (c)) # define ISDIGIT(c) (ISASCII (c) && isdigit (c)) # define ISALNUM(c) (ISASCII (c) && isalnum (c)) # define ISALPHA(c) (ISASCII (c) && isalpha (c)) # define ISCNTRL(c) (ISASCII (c) && iscntrl (c)) # define ISLOWER(c) (ISASCII (c) && islower (c)) # define ISPUNCT(c) (ISASCII (c) && ispunct (c)) # define ISSPACE(c) (ISASCII (c) && isspace (c)) # define ISUPPER(c) (ISASCII (c) && isupper (c)) # define ISXDIGIT(c) (ISASCII (c) && isxdigit (c)) # define STREQ(s1, s2) ((strcmp (s1, s2) == 0)) # if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) /* The GNU C library provides support for user-defined character classes and the functions from ISO C amendement 1. */ # ifdef CHARCLASS_NAME_MAX # define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX # else /* This shouldn't happen but some implementation might still have this problem. Use a reasonable default value. */ # define CHAR_CLASS_MAX_LENGTH 256 # endif # ifdef _LIBC # define IS_CHAR_CLASS(string) __wctype (string) # else # define IS_CHAR_CLASS(string) wctype (string) # endif # ifdef _LIBC # define ISWCTYPE(WC, WT) __iswctype (WC, WT) # else # define ISWCTYPE(WC, WT) iswctype (WC, WT) # endif # if (HAVE_MBSTATE_T && HAVE_MBSRTOWCS) || _LIBC /* In this case we are implementing the multibyte character handling. */ # define HANDLE_MULTIBYTE 1 # endif # else # define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */ # define IS_CHAR_CLASS(string) \ (STREQ (string, "alpha") || STREQ (string, "upper") \ || STREQ (string, "lower") || STREQ (string, "digit") \ || STREQ (string, "alnum") || STREQ (string, "xdigit") \ || STREQ (string, "space") || STREQ (string, "print") \ || STREQ (string, "punct") || STREQ (string, "graph") \ || STREQ (string, "cntrl") || STREQ (string, "blank")) # endif /* Avoid depending on library functions or files whose names are inconsistent. */ # if !defined _LIBC && !defined getenv extern char *getenv (); # endif # ifndef errno extern int errno; # endif /* This function doesn't exist on most systems. */ # if !defined HAVE___STRCHRNUL && !defined _LIBC static char * __strchrnul (s, c) const char *s; int c; { char *result = strchr (s, c); if (result == NULL) result = strchr (s, '\0'); return result; } # endif # if HANDLE_MULTIBYTE && !defined HAVE___STRCHRNUL && !defined _LIBC static wchar_t * __wcschrnul (s, c) const wchar_t *s; wint_t c; { wchar_t *result = wcschr (s, c); if (result == NULL) result = wcschr (s, '\0'); return result; } # endif # ifndef internal_function /* Inside GNU libc we mark some function in a special way. In other environments simply ignore the marking. */ # define internal_function # endif /* Note that this evaluates C many times. */ # ifdef _LIBC # define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c)) # else # define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? tolower (c) : (c)) # endif # define CHAR char # define UCHAR unsigned char # define FCT internal_fnmatch # define L(CS) CS # ifdef _LIBC # define BTOWC(C) __btowc (C) # else # define BTOWC(C) btowc (C) # endif # define STRCHR(S, C) strchr (S, C) # define STRCHRNUL(S, C) __strchrnul (S, C) # define STRCOLL(S1, S2) strcoll (S1, S2) # include "fnmatch_loop.c" # if HANDLE_MULTIBYTE /* Note that this evaluates C many times. */ # ifdef _LIBC # define FOLD(c) ((flags & FNM_CASEFOLD) ? towlower (c) : (c)) # else # define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? towlower (c) : (c)) # endif # define CHAR wchar_t # define UCHAR wint_t # define FCT internal_fnwmatch # define L(CS) L##CS # define BTOWC(C) (C) # define STRCHR(S, C) wcschr (S, C) # define STRCHRNUL(S, C) __wcschrnul (S, C) # define STRCOLL(S1, S2) wcscoll (S1, S2) # define WIDE_CHAR_VERSION 1 # undef IS_CHAR_CLASS /* We have to convert the wide character string in a multibyte string. But we know that the character class names consist of alphanumeric characters from the portable character set, and since the wide character encoding for a member of the portable character set is the same code point as its single-byte encoding, we can use a simplified method to convert the string to a multibyte character string. */ static wctype_t is_char_class (const wchar_t *wcs) { char s[CHAR_CLASS_MAX_LENGTH + 1]; char *cp = s; do { /* Test for a printable character from the portable character set. */ # ifdef _LIBC if (*wcs < 0x20 || *wcs > 0x7e || *wcs == 0x24 || *wcs == 0x40 || *wcs == 0x60) return (wctype_t) 0; # else switch (*wcs) { case L' ': case L'!': case L'"': case L'#': case L'%': case L'&': case L'\'': case L'(': case L')': case L'*': case L'+': case L',': case L'-': case L'.': case L'/': case L'0': case L'1': case L'2': case L'3': case L'4': case L'5': case L'6': case L'7': case L'8': case L'9': case L':': case L';': case L'<': case L'=': case L'>': case L'?': case L'A': case L'B': case L'C': case L'D': case L'E': case L'F': case L'G': case L'H': case L'I': case L'J': case L'K': case L'L': case L'M': case L'N': case L'O': case L'P': case L'Q': case L'R': case L'S': case L'T': case L'U': case L'V': case L'W': case L'X': case L'Y': case L'Z': case L'[': case L'\\': case L']': case L'^': case L'_': case L'a': case L'b': case L'c': case L'd': case L'e': case L'f': case L'g': case L'h': case L'i': case L'j': case L'k': case L'l': case L'm': case L'n': case L'o': case L'p': case L'q': case L'r': case L's': case L't': case L'u': case L'v': case L'w': case L'x': case L'y': case L'z': case L'{': case L'|': case L'}': case L'~': break; default: return (wctype_t) 0; } # endif /* Avoid overrunning the buffer. */ if (cp == s + CHAR_CLASS_MAX_LENGTH) return (wctype_t) 0; *cp++ = (char) *wcs++; } while (*wcs != L'\0'); *cp = '\0'; # ifdef _LIBC return __wctype (s); # else return wctype (s); # endif } # define IS_CHAR_CLASS(string) is_char_class (string) # include "fnmatch_loop.c" # endif int fnmatch (pattern, string, flags) const char *pattern; const char *string; int flags; { # if HANDLE_MULTIBYTE mbstate_t ps; size_t n; wchar_t *wpattern; wchar_t *wstring; if (MB_CUR_MAX == 1) /* This is an optimization for 8-bit character set. */ return internal_fnmatch (pattern, string, flags & FNM_PERIOD, flags); /* Convert the strings into wide characters. */ memset (&ps, '\0', sizeof (ps)); n = mbsrtowcs (NULL, &pattern, 0, &ps); if (n == (size_t) -1) /* Something wrong. XXX Do we have to set `errno' to something which mbsrtows hasn't already done? */ return -1; wpattern = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t)); assert (mbsinit (&ps)); (void) mbsrtowcs (wpattern, &pattern, n + 1, &ps); assert (mbsinit (&ps)); n = mbsrtowcs (NULL, &string, 0, &ps); if (n == (size_t) -1) /* Something wrong. XXX Do we have to set `errno' to something which mbsrtows hasn't already done? */ return -1; wstring = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t)); assert (mbsinit (&ps)); (void) mbsrtowcs (wstring, &string, n + 1, &ps); return internal_fnwmatch (wpattern, wstring, flags & FNM_PERIOD, flags); # else return internal_fnmatch (pattern, string, flags & FNM_PERIOD, flags); # endif /* mbstate_t and mbsrtowcs or _LIBC. */ } #endif /* _LIBC or not __GNU_LIBRARY__. */ nescc-1.3.4/src/libcompat/fnmatch/000077500000000000000000000000001177770303300170035ustar00rootroot00000000000000nescc-1.3.4/src/libcompat/fnmatch/fnmatch.h000066400000000000000000000056171177770303300206050ustar00rootroot00000000000000/* Copyright (C) 1991, 92, 93, 96, 97, 98, 99 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _FNMATCH_H #define _FNMATCH_H 1 #ifdef __cplusplus extern "C" { #endif #if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32 # if !defined __GLIBC__ || !defined __P # undef __P # define __P(protos) protos # endif #else /* Not C++ or ANSI C. */ # undef __P # define __P(protos) () /* We can get away without defining `const' here only because in this file it is used only inside the prototype for `fnmatch', which is elided in non-ANSI C where `const' is problematical. */ #endif /* C++ or ANSI C. */ #ifndef const # if (defined __STDC__ && __STDC__) || defined __cplusplus # define __const const # else # define __const # endif #endif /* We #undef these before defining them because some losing systems (HP-UX A.08.07 for example) define these in . */ #undef FNM_PATHNAME #undef FNM_NOESCAPE #undef FNM_PERIOD /* Bits set in the FLAGS argument to `fnmatch'. */ #define FNM_PATHNAME (1 << 0) /* No wildcard can ever match `/'. */ #define FNM_NOESCAPE (1 << 1) /* Backslashes don't quote special chars. */ #define FNM_PERIOD (1 << 2) /* Leading `.' is matched only explicitly. */ #if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _GNU_SOURCE # define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */ # define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */ # define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */ #endif /* Value returned by `fnmatch' if STRING does not match PATTERN. */ #define FNM_NOMATCH 1 /* This value is returned if the implementation does not support `fnmatch'. Since this is not the case here it will never be returned but the conformance test suites still require the symbol to be defined. */ #ifdef _XOPEN_SOURCE # define FNM_NOSYS (-1) #endif /* Match NAME against the filename pattern PATTERN, returning zero if it matches, FNM_NOMATCH if not. */ extern int fnmatch __P ((__const char *__pattern, __const char *__name, int __flags)); #ifdef __cplusplus } #endif #endif /* fnmatch.h */ nescc-1.3.4/src/libcompat/pages.c000066400000000000000000000356541177770303300166430ustar00rootroot00000000000000/* * Copyright (c) 1999-2001 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the * distribution. * - Neither the name of the University of California nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * */ #include typedef __rcintptr pageid; static size_t total_page_count; /* total pages allocated */ #define PAGE_GROUP_SIZE (1 + (total_page_count >> 7)) #if 0 #define FREEPAGE ((region)-1) /* Id of a free page */ #else #define FREEPAGE (&zeroregion) #endif #ifdef NMEMDEBUG #define ASSERT_FREE(p) #define ASSERT_INUSE(p, r) #else #define ASSERT_FREE(p) assert(regionof(p) == FREEPAGE) #ifdef DUPLICATES #define ASSERT_INUSE(p, r) assert(regionof(p) == r->base) #else #define ASSERT_INUSE(p, r) assert(regionof(p) == r) #endif #endif /* Page allocator for region-based memory management */ /* TBD: special free list for size == K ?? */ #define PAGECOUNTBITS (CHAR_BIT * sizeof(pageid) - 1) struct page { /* Next page in region or in free list */ struct page *next; /* Doubly linked list of pages sorted by address */ struct page *next_address, *prev_address; /* number of pages in this allocation unit. Negative for free pages. */ pageid pagecount : PAGECOUNTBITS; unsigned int free : 1; /* Only in free pages not in the single_pages list */ struct page *previous; }; /* The pages are kept in a single list sorted by address via the next_address and prev_address fields. The first page's prev_address and the last page's next_address fields points to pages_byaddress. page_byaddress.next_address is the first page page_byaddress.prev_address is the last page This list is used for coalescing operations. */ static struct page pages_byaddress; struct page *alloc_single_page(struct page *next); void free_single_page(region r, struct page *p); struct page *alloc_pages(int n, struct page *next); void free_pages(region r, struct page *p); /* a list of free individual pages */ struct page *single_pages; /* free pages (not including those in single_pages) */ struct page *unused_pages; static void init_pages(void) { pages_byaddress.next_address = &pages_byaddress; pages_byaddress.prev_address = &pages_byaddress; } static void insertbefore_address(struct page *p, struct page *before) { p->prev_address = before->prev_address; p->next_address = before; before->prev_address = p; p->prev_address->next_address = p; } static void insertafter_address(struct page *p, struct page *after) { insertbefore_address(p, after->next_address); } static void unlink_address(struct page *p) { p->prev_address->next_address = p->next_address; p->next_address->prev_address = p->prev_address; } static void addbyaddress(struct page *p) { struct page *address_scan; static struct page *last_add; /* Weird performance hack: we try and guess what direction the underlying malloc gets memory by comparing the address of p with the previous address passed to addbyaddress. If it's greater, we try and add from the end of the list, walking backwards. Otherwise we try and add from the start of the list, walking forwards. */ if (p > last_add) { for (address_scan = pages_byaddress.prev_address; ; address_scan = address_scan->prev_address) if (p > address_scan || address_scan == &pages_byaddress) { last_add = p; insertafter_address(p, address_scan); return; } } else { for (address_scan = pages_byaddress.next_address; ; address_scan = address_scan->next_address) if (p < address_scan || address_scan == &pages_byaddress) { last_add = p; insertbefore_address(p, address_scan); return; } } } /* Doubly linked page list management */ void addfront(struct page **list, struct page *p) /* Effects: Adds p to the front of doubly-linked list list */ { p->previous = NULL; p->next = *list; if (*list) (*list)->previous = p; *list = p; } void unlink_page(struct page **list, struct page *p) /* Effects: Remove p from its doubly linked list */ { if (p->previous) p->previous->next = p->next; else *list = p->next; if (p->next) p->next->previous = p->previous; } #ifdef USE_MMAP #include #include #include #if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) #define MAP_ANONYMOUS MAP_ANON #endif #ifndef __APPLE__ #undef MAP_ANONYMOUS #endif #ifndef MAP_ANONYMOUS static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */ #define MMAP(addr, size, prot, flags) \ ((dev_zero_fd < 0 ? dev_zero_fd = open("/dev/zero", O_RDWR) : 0), \ mmap((addr), (size), (prot), (flags), dev_zero_fd, 0)) #else #define MMAP(addr, size, prot, flags) \ (mmap((addr), (size), (prot), (flags)|MAP_ANONYMOUS, -1, 0)) #endif struct page *region_get_mem(size_t s) { struct page *newp; #if 0 s = ALIGN(s, 65536); #endif newp = (struct page *)MMAP(0, s, PROT_READ|PROT_WRITE, MAP_PRIVATE); if (!newp) return NULL; if (PALIGN(newp, RPAGESIZE) != newp) abort(); addbyaddress(newp); /* Add the new memory to unused_pages */ #ifndef NMEMDEBUG set_region_range(newp, (char *)newp + s, FREEPAGE); #endif total_page_count += s >> RPAGELOG; newp->pagecount = s >> RPAGELOG; newp->free = 1; addfront(&unused_pages, newp); return newp; } #else /* region_get_mem will never allocate less than MINIMUM_MEM_REQUEST bytes. It wastes RPAGESIZE bytes, so there is an overhead of RPAGESIZE / MINIMUM_MEM_REQUEST */ #define MINIMUM_MEM_REQUEST (PAGE_GROUP_SIZE * K * RPAGESIZE) struct page *region_get_mem(size_t s) { size_t request_bytes; void *mem; struct page *newp; /* Don't get less than K * RPAGESIZE extra memory (K * RPAGESIZE is the minimum useful size for something on unused_pages) */ if (s + K * RPAGESIZE < MINIMUM_MEM_REQUEST) request_bytes = MINIMUM_MEM_REQUEST; else request_bytes = s; mem = malloc(request_bytes + RPAGESIZE); if (!mem) return NULL; newp = PALIGN(mem, RPAGESIZE); if (mem == newp) /* Maybe we were lucky! */ request_bytes += RPAGESIZE; addbyaddress(newp); /* Add the new memory to unused_pages */ #ifndef NMEMDEBUG set_region_range(newp, (char *)newp + request_bytes, FREEPAGE); #endif total_page_count += request_bytes >> RPAGELOG; newp->pagecount = request_bytes >> RPAGELOG; newp->free = 1; addfront(&unused_pages, newp); return newp; } #endif /* Page to region map management */ /* ----------------------------- */ #ifndef LARGE_ADDRESSES /* 32-bit platforms */ region __rcregionmap[MAXPAGE]; static void set_page_region(pageid pagenb, region r) { __rcregionmap[pagenb] = r; } #define page_region(pagenb) (__rcregionmap[(pagenb)]) #else /* 64-bit platforms */ /* This is a page table implemented as a table of indirect tables. */ region *__regiontable[1 << MEMSLICE2]; void set_page_region(pageid pagenb, region r) { __rcintptr offset2 = (pagenb >> MEMSLICE3) & ((1 << MEMSLICE2) - 1); __rcintptr offset3 = pagenb & ((1 << MEMSLICE3) - 1); region *rmap; rmap = __regiontable[offset2]; if (!rmap) { int i; rmap = (region *)malloc(sizeof(region) * (1 << MEMSLICE3)); if (!rmap) { if (nomem_h) nomem_h(); abort(); } __regiontable[offset2] = rmap; for (i = 0; i < (1 << MEMSLICE3); i++) { rmap[i] = NULL; } } rmap[offset3] = r; } region page_region(pageid pnb) { __rcintptr offset2 = (pnb >> MEMSLICE3) & ((1 << MEMSLICE2) - 1); __rcintptr offset3 = pnb & ((1 << MEMSLICE3) - 1); /* Check if indirect table is present */ if (__regiontable[offset2]) return __regiontable[offset2][offset3]; else /* If the indirect table is not there, the value is assumed to be ... */ return NULL; } #endif void set_region(struct page *p, int npages, region r) { pageid pnb = PAGENB(p); while (npages-- > 0) set_page_region(pnb++, r); } /* Mark the memory range from 'from' (inclusive) to 'to' (exclusive) as belonging to region with id 'rid' */ void set_region_range(void *from, void *to, region r) { pageid first = PAGENB(from), last = PAGENB((pageid)to - 1); while (first <= last) set_page_region(first++, r); } /* Multi-page allocation management */ /* -------------------------------- */ struct page *alloc_split(struct page *split, int n, struct page *next) /* Assumes freepages_lock held */ { #ifndef NMEMDEBUG /* These pages had better be free */ pageid i, pnb = PAGENB(split); assert(split->pagecount >= n); for (i = pnb; i < pnb + split->pagecount; i++) assert(page_region(i) == FREEPAGE); #endif if (split->pagecount > n) { struct page *splitoff; /* Keep first part of block */ split->pagecount -= n; /* Return latter part of block */ splitoff = split; split = (struct page *)((char *)split + (split->pagecount << RPAGELOG)); /* Update the by adress list */ insertbefore_address(split, splitoff->next_address); } else { /* remove split from list */ unlink_page(&unused_pages, split); } split->next = next; split->pagecount = n; split->free = 0; return split; } struct page *alloc_new(int n, struct page *next) /* Assumes freepages_lock held */ { struct page *newp = region_get_mem(n << RPAGELOG); if (!newp) { if (nomem_h) nomem_h(); abort(); } assert(!((long)newp & (RPAGESIZE - 1))); /* region_get_mem may get us more memory than we asked for */ return alloc_split(newp, n, next); } struct page *alloc_pages(int n, struct page *next) { struct page *best; int bestn; struct page *scan; assert(n >= K); scan = unused_pages; /* Find first fit */ for (;;) { if (!scan) return alloc_new(n, next); if (scan->pagecount >= n) break; scan = scan->next; } /* Now find best fit */ best = scan; bestn = scan->pagecount; for (;;) { scan = scan->next; if (!scan) return alloc_split(best, n, next); if (scan->pagecount >=n && scan->pagecount < bestn) { best = scan; bestn = scan->pagecount; } } } static void coalesce(struct page *p) { struct page *prev = p->prev_address, *next; p->free = 1; /* Coalesce with predecessor ? */ if (prev->free && (char *)prev + (prev->pagecount << RPAGELOG) == (char *)p) { prev->pagecount += p->pagecount; unlink_address(p); p = prev; } else /* No, add to free pages list */ addfront(&unused_pages, p); next = p->next_address; /* Coalesce with successor ? */ if (next->free && (char *)p + (p->pagecount << RPAGELOG) == (char *)next) { unlink_page(&unused_pages, next); p->pagecount += next->pagecount; unlink_address(next); } } void free_pages(region r, struct page *p) /* Assumes freepages_lock held */ { #ifndef NMEMDEBUG pageid i, pnb = PAGENB(p); for (i = pnb; i < pnb + p->pagecount; i++) { assert(page_region(i) == r); set_page_region(i, FREEPAGE); } #endif coalesce(p); } /* Single page management */ /* ---------------------- */ static int single_page_count; static void add_single_pages(struct page *base) /* Effects: Adds pages at base to the single_pages list */ { pageid n = base->pagecount; struct page *prev = base->prev_address, *basenext = base->next_address, *next; single_page_count += n; for (;;) { ASSERT_FREE(base); base->free = 0; /* Not free so that coalesce won't steal these back */ base->prev_address = prev; prev = base; base->next = single_pages; single_pages = base; if (--n == 0) break; next = (struct page *)((char *)base + RPAGESIZE); base->next_address = next; base = next; } base->next_address = basenext; basenext->prev_address = base; } void scavenge_single_pages(int n) { /* Add n pages to the single_pages list */ struct page *scan, *best; __rcintptr bestn; /* Take any group in unused_pages that is <= n or < K. Remember smallest entry > n too. This is sortof equivalent to a best fit where we allow partial allocations to make up a whole */ best = NULL; bestn = (__rcintptr)1 << (sizeof(__rcintptr) * CHAR_BIT - 2); scan = unused_pages; while (scan) { /* The pages < K can't be used for anything but single pages so we might as well grab them even if they are a little too big */ if (scan->pagecount <= n || scan->pagecount < K) { struct page *adding = scan; scan = scan->next; n -= adding->pagecount; unlink_page(&unused_pages, adding); add_single_pages(adding); if (n <= 0) return; } else { if (scan->pagecount < bestn) { bestn = scan->pagecount; best = scan; } scan = scan->next; } } /* Still not enough. Split the best block if there is one, allocate new pages otherwise */ if (!best) add_single_pages(alloc_new(n, NULL)); else if (best->pagecount - n < K) { unlink_page(&unused_pages, best); add_single_pages(best); } else add_single_pages(alloc_split(best, n, NULL)); } struct page *alloc_single_page(struct page *next) { struct page *p; if (!single_pages) { scavenge_single_pages(PAGE_GROUP_SIZE); } ASSERT_FREE(single_pages); p = single_pages; single_pages = p->next; p->next = next; single_page_count--; return p; } void free_single_page(region r, struct page *p) /* Assumes freepages_lock held */ { #ifndef NMEMDEBUG ASSERT_INUSE(p, r); set_page_region(PAGENB(p), FREEPAGE); #endif /* Don't keep too many single pages (a small fraction of total allocated pages) */ if (single_page_count > PAGE_GROUP_SIZE * 2) { p->pagecount = 1; coalesce(p); } else { p->next = single_pages; single_pages = p; single_page_count++; } } nescc-1.3.4/src/libcompat/regex.c000066400000000000000000006045401177770303300166520ustar00rootroot00000000000000/* Extended regular expression matching and search library, version 0.12. (Implements POSIX draft P1003.2/D11.2, except for some of the internationalization features.) Copyright (C) 1993-1999, 2000 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* AIX requires this to be the first thing in the file. */ #if defined _AIX && !defined REGEX_MALLOC #pragma alloca #endif #undef _GNU_SOURCE #define _GNU_SOURCE #ifdef HAVE_CONFIG_H # include #endif #ifndef PARAMS # if defined __GNUC__ || (defined __STDC__ && __STDC__) # define PARAMS(args) args # else # define PARAMS(args) () # endif /* GCC. */ #endif /* Not PARAMS. */ #if defined STDC_HEADERS && !defined emacs # include #else /* We need this for `regex.h', and perhaps for the Emacs include files. */ # include #endif #define WIDE_CHAR_SUPPORT (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC) /* For platform which support the ISO C amendement 1 functionality we support user defined character classes. */ #if defined _LIBC || WIDE_CHAR_SUPPORT /* Solaris 2.5 has a bug: must be included before . */ # include # include #endif #ifdef _LIBC /* We have to keep the namespace clean. */ # define regfree(preg) __regfree (preg) # define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef) # define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags) # define regerror(errcode, preg, errbuf, errbuf_size) \ __regerror(errcode, preg, errbuf, errbuf_size) # define re_set_registers(bu, re, nu, st, en) \ __re_set_registers (bu, re, nu, st, en) # define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \ __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop) # define re_match(bufp, string, size, pos, regs) \ __re_match (bufp, string, size, pos, regs) # define re_search(bufp, string, size, startpos, range, regs) \ __re_search (bufp, string, size, startpos, range, regs) # define re_compile_pattern(pattern, length, bufp) \ __re_compile_pattern (pattern, length, bufp) # define re_set_syntax(syntax) __re_set_syntax (syntax) # define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \ __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop) # define re_compile_fastmap(bufp) __re_compile_fastmap (bufp) # define btowc __btowc /* We are also using some library internals. */ # include # include # include #endif /* This is for other GNU distributions with internationalized messages. */ #if HAVE_LIBINTL_H || defined _LIBC # include # ifdef _LIBC # undef gettext # define gettext(msgid) __dcgettext ("libc", msgid, LC_MESSAGES) # endif #else # define gettext(msgid) (msgid) #endif #ifndef gettext_noop /* This define is so xgettext can find the internationalizable strings. */ # define gettext_noop(String) String #endif /* The `emacs' switch turns on certain matching commands that make sense only in Emacs. */ #ifdef emacs # include "lisp.h" # include "buffer.h" # include "syntax.h" #else /* not emacs */ /* If we are not linking with Emacs proper, we can't use the relocating allocator even if config.h says that we can. */ # undef REL_ALLOC # if defined STDC_HEADERS || defined _LIBC # include # else char *malloc (); char *realloc (); # endif /* When used in Emacs's lib-src, we need to get bzero and bcopy somehow. If nothing else has been done, use the method below. */ # ifdef INHIBIT_STRING_HEADER # if !(defined HAVE_BZERO && defined HAVE_BCOPY) # if !defined bzero && !defined bcopy # undef INHIBIT_STRING_HEADER # endif # endif # endif /* This is the normal way of making sure we have a bcopy and a bzero. This is used in most programs--a few other programs avoid this by defining INHIBIT_STRING_HEADER. */ # ifndef INHIBIT_STRING_HEADER # if defined HAVE_STRING_H || defined STDC_HEADERS || defined _LIBC # include # ifndef bzero # ifndef _LIBC # define bzero(s, n) (memset (s, '\0', n), (s)) # else # define bzero(s, n) __bzero (s, n) # endif # endif # else # include # ifndef memcmp # define memcmp(s1, s2, n) bcmp (s1, s2, n) # endif # ifndef memcpy # define memcpy(d, s, n) (bcopy (s, d, n), (d)) # endif # endif # endif /* Define the syntax stuff for \<, \>, etc. */ /* This must be nonzero for the wordchar and notwordchar pattern commands in re_match_2. */ # ifndef Sword # define Sword 1 # endif # ifdef SWITCH_ENUM_BUG # define SWITCH_ENUM_CAST(x) ((int)(x)) # else # define SWITCH_ENUM_CAST(x) (x) # endif #endif /* not emacs */ #if defined _LIBC || HAVE_LIMITS_H # include #endif #ifndef MB_LEN_MAX # define MB_LEN_MAX 1 #endif /* Get the interface, including the syntax bits. */ #include /* isalpha etc. are used for the character classes. */ #include /* Jim Meyering writes: "... Some ctype macros are valid only for character codes that isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when using /bin/cc or gcc but without giving an ansi option). So, all ctype uses should be through macros like ISPRINT... If STDC_HEADERS is defined, then autoconf has verified that the ctype macros don't need to be guarded with references to isascii. ... Defining isascii to 1 should let any compiler worth its salt eliminate the && through constant folding." Solaris defines some of these symbols so we must undefine them first. */ #undef ISASCII #if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII) # define ISASCII(c) 1 #else # define ISASCII(c) isascii(c) #endif #ifdef isblank # define ISBLANK(c) (ISASCII (c) && isblank (c)) #else # define ISBLANK(c) ((c) == ' ' || (c) == '\t') #endif #ifdef isgraph # define ISGRAPH(c) (ISASCII (c) && isgraph (c)) #else # define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c)) #endif #undef ISPRINT #define ISPRINT(c) (ISASCII (c) && isprint (c)) #define ISDIGIT(c) (ISASCII (c) && isdigit (c)) #define ISALNUM(c) (ISASCII (c) && isalnum (c)) #define ISALPHA(c) (ISASCII (c) && isalpha (c)) #define ISCNTRL(c) (ISASCII (c) && iscntrl (c)) #define ISLOWER(c) (ISASCII (c) && islower (c)) #define ISPUNCT(c) (ISASCII (c) && ispunct (c)) #define ISSPACE(c) (ISASCII (c) && isspace (c)) #define ISUPPER(c) (ISASCII (c) && isupper (c)) #define ISXDIGIT(c) (ISASCII (c) && isxdigit (c)) #ifdef _tolower # define TOLOWER(c) _tolower(c) #else # define TOLOWER(c) tolower(c) #endif #ifndef NULL # define NULL (void *)0 #endif /* We remove any previous definition of `SIGN_EXTEND_CHAR', since ours (we hope) works properly with all combinations of machines, compilers, `char' and `unsigned char' argument types. (Per Bothner suggested the basic approach.) */ #undef SIGN_EXTEND_CHAR #if __STDC__ # define SIGN_EXTEND_CHAR(c) ((signed char) (c)) #else /* not __STDC__ */ /* As in Harbison and Steele. */ # define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128) #endif #ifndef emacs /* How many characters in the character set. */ # define CHAR_SET_SIZE 256 # ifdef SYNTAX_TABLE extern char *re_syntax_table; # else /* not SYNTAX_TABLE */ static char re_syntax_table[CHAR_SET_SIZE]; static void init_syntax_once () { register int c; static int done = 0; if (done) return; bzero (re_syntax_table, sizeof re_syntax_table); for (c = 0; c < CHAR_SET_SIZE; ++c) if (ISALNUM (c)) re_syntax_table[c] = Sword; re_syntax_table['_'] = Sword; done = 1; } # endif /* not SYNTAX_TABLE */ # define SYNTAX(c) re_syntax_table[(unsigned char) (c)] #endif /* emacs */ /* Should we use malloc or alloca? If REGEX_MALLOC is not defined, we use `alloca' instead of `malloc'. This is because using malloc in re_search* or re_match* could cause memory leaks when C-g is used in Emacs; also, malloc is slower and causes storage fragmentation. On the other hand, malloc is more portable, and easier to debug. Because we sometimes use alloca, some routines have to be macros, not functions -- `alloca'-allocated space disappears at the end of the function it is called in. */ #ifdef REGEX_MALLOC # define REGEX_ALLOCATE malloc # define REGEX_REALLOCATE(source, osize, nsize) realloc (source, nsize) # define REGEX_FREE free #else /* not REGEX_MALLOC */ /* Emacs already defines alloca, sometimes. */ # ifndef alloca /* Make alloca work the best possible way. */ # ifdef __GNUC__ # define alloca __builtin_alloca # else /* not __GNUC__ */ # if HAVE_ALLOCA_H # include # endif /* HAVE_ALLOCA_H */ # endif /* not __GNUC__ */ # endif /* not alloca */ # define REGEX_ALLOCATE alloca /* Assumes a `char *destination' variable. */ # define REGEX_REALLOCATE(source, osize, nsize) \ (destination = (char *) alloca (nsize), \ memcpy (destination, source, osize)) /* No need to do anything to free, after alloca. */ # define REGEX_FREE(arg) ((void)0) /* Do nothing! But inhibit gcc warning. */ #endif /* not REGEX_MALLOC */ /* Define how to allocate the failure stack. */ #if defined REL_ALLOC && defined REGEX_MALLOC # define REGEX_ALLOCATE_STACK(size) \ r_alloc (&failure_stack_ptr, (size)) # define REGEX_REALLOCATE_STACK(source, osize, nsize) \ r_re_alloc (&failure_stack_ptr, (nsize)) # define REGEX_FREE_STACK(ptr) \ r_alloc_free (&failure_stack_ptr) #else /* not using relocating allocator */ # ifdef REGEX_MALLOC # define REGEX_ALLOCATE_STACK malloc # define REGEX_REALLOCATE_STACK(source, osize, nsize) realloc (source, nsize) # define REGEX_FREE_STACK free # else /* not REGEX_MALLOC */ # define REGEX_ALLOCATE_STACK alloca # define REGEX_REALLOCATE_STACK(source, osize, nsize) \ REGEX_REALLOCATE (source, osize, nsize) /* No need to explicitly free anything. */ # define REGEX_FREE_STACK(arg) # endif /* not REGEX_MALLOC */ #endif /* not using relocating allocator */ /* True if `size1' is non-NULL and PTR is pointing anywhere inside `string1' or just past its end. This works if PTR is NULL, which is a good thing. */ #define FIRST_STRING_P(ptr) \ (size1 && string1 <= (ptr) && (ptr) <= string1 + size1) /* (Re)Allocate N items of type T using malloc, or fail. */ #define TALLOC(n, t) ((t *) malloc ((n) * sizeof (t))) #define RETALLOC(addr, n, t) ((addr) = (t *) realloc (addr, (n) * sizeof (t))) #define RETALLOC_IF(addr, n, t) \ if (addr) RETALLOC((addr), (n), t); else (addr) = TALLOC ((n), t) #define REGEX_TALLOC(n, t) ((t *) REGEX_ALLOCATE ((n) * sizeof (t))) #define BYTEWIDTH 8 /* In bits. */ #define STREQ(s1, s2) ((strcmp (s1, s2) == 0)) #undef MAX #undef MIN #define MAX(a, b) ((a) > (b) ? (a) : (b)) #define MIN(a, b) ((a) < (b) ? (a) : (b)) typedef char boolean; #define false 0 #define true 1 static int re_match_2_internal PARAMS ((struct re_pattern_buffer *bufp, const char *string1, int size1, const char *string2, int size2, int pos, struct re_registers *regs, int stop)); /* These are the command codes that appear in compiled regular expressions. Some opcodes are followed by argument bytes. A command code can specify any interpretation whatsoever for its arguments. Zero bytes may appear in the compiled regular expression. */ typedef enum { no_op = 0, /* Succeed right away--no more backtracking. */ succeed, /* Followed by one byte giving n, then by n literal bytes. */ exactn, /* Matches any (more or less) character. */ anychar, /* Matches any one char belonging to specified set. First following byte is number of bitmap bytes. Then come bytes for a bitmap saying which chars are in. Bits in each byte are ordered low-bit-first. A character is in the set if its bit is 1. A character too large to have a bit in the map is automatically not in the set. */ charset, /* Same parameters as charset, but match any character that is not one of those specified. */ charset_not, /* Start remembering the text that is matched, for storing in a register. Followed by one byte with the register number, in the range 0 to one less than the pattern buffer's re_nsub field. Then followed by one byte with the number of groups inner to this one. (This last has to be part of the start_memory only because we need it in the on_failure_jump of re_match_2.) */ start_memory, /* Stop remembering the text that is matched and store it in a memory register. Followed by one byte with the register number, in the range 0 to one less than `re_nsub' in the pattern buffer, and one byte with the number of inner groups, just like `start_memory'. (We need the number of inner groups here because we don't have any easy way of finding the corresponding start_memory when we're at a stop_memory.) */ stop_memory, /* Match a duplicate of something remembered. Followed by one byte containing the register number. */ duplicate, /* Fail unless at beginning of line. */ begline, /* Fail unless at end of line. */ endline, /* Succeeds if at beginning of buffer (if emacs) or at beginning of string to be matched (if not). */ begbuf, /* Analogously, for end of buffer/string. */ endbuf, /* Followed by two byte relative address to which to jump. */ jump, /* Same as jump, but marks the end of an alternative. */ jump_past_alt, /* Followed by two-byte relative address of place to resume at in case of failure. */ on_failure_jump, /* Like on_failure_jump, but pushes a placeholder instead of the current string position when executed. */ on_failure_keep_string_jump, /* Throw away latest failure point and then jump to following two-byte relative address. */ pop_failure_jump, /* Change to pop_failure_jump if know won't have to backtrack to match; otherwise change to jump. This is used to jump back to the beginning of a repeat. If what follows this jump clearly won't match what the repeat does, such that we can be sure that there is no use backtracking out of repetitions already matched, then we change it to a pop_failure_jump. Followed by two-byte address. */ maybe_pop_jump, /* Jump to following two-byte address, and push a dummy failure point. This failure point will be thrown away if an attempt is made to use it for a failure. A `+' construct makes this before the first repeat. Also used as an intermediary kind of jump when compiling an alternative. */ dummy_failure_jump, /* Push a dummy failure point and continue. Used at the end of alternatives. */ push_dummy_failure, /* Followed by two-byte relative address and two-byte number n. After matching N times, jump to the address upon failure. */ succeed_n, /* Followed by two-byte relative address, and two-byte number n. Jump to the address N times, then fail. */ jump_n, /* Set the following two-byte relative address to the subsequent two-byte number. The address *includes* the two bytes of number. */ set_number_at, wordchar, /* Matches any word-constituent character. */ notwordchar, /* Matches any char that is not a word-constituent. */ wordbeg, /* Succeeds if at word beginning. */ wordend, /* Succeeds if at word end. */ wordbound, /* Succeeds if at a word boundary. */ notwordbound /* Succeeds if not at a word boundary. */ #ifdef emacs ,before_dot, /* Succeeds if before point. */ at_dot, /* Succeeds if at point. */ after_dot, /* Succeeds if after point. */ /* Matches any character whose syntax is specified. Followed by a byte which contains a syntax code, e.g., Sword. */ syntaxspec, /* Matches any character whose syntax is not that specified. */ notsyntaxspec #endif /* emacs */ } re_opcode_t; /* Common operations on the compiled pattern. */ /* Store NUMBER in two contiguous bytes starting at DESTINATION. */ #define STORE_NUMBER(destination, number) \ do { \ (destination)[0] = (number) & 0377; \ (destination)[1] = (number) >> 8; \ } while (0) /* Same as STORE_NUMBER, except increment DESTINATION to the byte after where the number is stored. Therefore, DESTINATION must be an lvalue. */ #define STORE_NUMBER_AND_INCR(destination, number) \ do { \ STORE_NUMBER (destination, number); \ (destination) += 2; \ } while (0) /* Put into DESTINATION a number stored in two contiguous bytes starting at SOURCE. */ #define EXTRACT_NUMBER(destination, source) \ do { \ (destination) = *(source) & 0377; \ (destination) += SIGN_EXTEND_CHAR (*((source) + 1)) << 8; \ } while (0) #ifdef DEBUG static void extract_number _RE_ARGS ((int *dest, unsigned char *source)); static void extract_number (dest, source) int *dest; unsigned char *source; { int temp = SIGN_EXTEND_CHAR (*(source + 1)); *dest = *source & 0377; *dest += temp << 8; } # ifndef EXTRACT_MACROS /* To debug the macros. */ # undef EXTRACT_NUMBER # define EXTRACT_NUMBER(dest, src) extract_number (&dest, src) # endif /* not EXTRACT_MACROS */ #endif /* DEBUG */ /* Same as EXTRACT_NUMBER, except increment SOURCE to after the number. SOURCE must be an lvalue. */ #define EXTRACT_NUMBER_AND_INCR(destination, source) \ do { \ EXTRACT_NUMBER (destination, source); \ (source) += 2; \ } while (0) #ifdef DEBUG static void extract_number_and_incr _RE_ARGS ((int *destination, unsigned char **source)); static void extract_number_and_incr (destination, source) int *destination; unsigned char **source; { extract_number (destination, *source); *source += 2; } # ifndef EXTRACT_MACROS # undef EXTRACT_NUMBER_AND_INCR # define EXTRACT_NUMBER_AND_INCR(dest, src) \ extract_number_and_incr (&dest, &src) # endif /* not EXTRACT_MACROS */ #endif /* DEBUG */ /* If DEBUG is defined, Regex prints many voluminous messages about what it is doing (if the variable `debug' is nonzero). If linked with the main program in `iregex.c', you can enter patterns and strings interactively. And if linked with the main program in `main.c' and the other test files, you can run the already-written tests. */ #ifdef DEBUG /* We use standard I/O for debugging. */ # include /* It is useful to test things that ``must'' be true when debugging. */ # include static int debug; # define DEBUG_STATEMENT(e) e # define DEBUG_PRINT1(x) if (debug) printf (x) # define DEBUG_PRINT2(x1, x2) if (debug) printf (x1, x2) # define DEBUG_PRINT3(x1, x2, x3) if (debug) printf (x1, x2, x3) # define DEBUG_PRINT4(x1, x2, x3, x4) if (debug) printf (x1, x2, x3, x4) # define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) \ if (debug) print_partial_compiled_pattern (s, e) # define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2) \ if (debug) print_double_string (w, s1, sz1, s2, sz2) /* Print the fastmap in human-readable form. */ void print_fastmap (fastmap) char *fastmap; { unsigned was_a_range = 0; unsigned i = 0; while (i < (1 << BYTEWIDTH)) { if (fastmap[i++]) { was_a_range = 0; putchar (i - 1); while (i < (1 << BYTEWIDTH) && fastmap[i]) { was_a_range = 1; i++; } if (was_a_range) { printf ("-"); putchar (i - 1); } } } putchar ('\n'); } /* Print a compiled pattern string in human-readable form, starting at the START pointer into it and ending just before the pointer END. */ void print_partial_compiled_pattern (start, end) unsigned char *start; unsigned char *end; { int mcnt, mcnt2; unsigned char *p1; unsigned char *p = start; unsigned char *pend = end; if (start == NULL) { printf ("(null)\n"); return; } /* Loop over pattern commands. */ while (p < pend) { #ifdef _LIBC printf ("%t:\t", p - start); #else printf ("%ld:\t", (long int) (p - start)); #endif switch ((re_opcode_t) *p++) { case no_op: printf ("/no_op"); break; case exactn: mcnt = *p++; printf ("/exactn/%d", mcnt); do { putchar ('/'); putchar (*p++); } while (--mcnt); break; case start_memory: mcnt = *p++; printf ("/start_memory/%d/%d", mcnt, *p++); break; case stop_memory: mcnt = *p++; printf ("/stop_memory/%d/%d", mcnt, *p++); break; case duplicate: printf ("/duplicate/%d", *p++); break; case anychar: printf ("/anychar"); break; case charset: case charset_not: { register int c, last = -100; register int in_range = 0; printf ("/charset [%s", (re_opcode_t) *(p - 1) == charset_not ? "^" : ""); assert (p + *p < pend); for (c = 0; c < 256; c++) if (c / 8 < *p && (p[1 + (c/8)] & (1 << (c % 8)))) { /* Are we starting a range? */ if (last + 1 == c && ! in_range) { putchar ('-'); in_range = 1; } /* Have we broken a range? */ else if (last + 1 != c && in_range) { putchar (last); in_range = 0; } if (! in_range) putchar (c); last = c; } if (in_range) putchar (last); putchar (']'); p += 1 + *p; } break; case begline: printf ("/begline"); break; case endline: printf ("/endline"); break; case on_failure_jump: extract_number_and_incr (&mcnt, &p); #ifdef _LIBC printf ("/on_failure_jump to %t", p + mcnt - start); #else printf ("/on_failure_jump to %ld", (long int) (p + mcnt - start)); #endif break; case on_failure_keep_string_jump: extract_number_and_incr (&mcnt, &p); #ifdef _LIBC printf ("/on_failure_keep_string_jump to %t", p + mcnt - start); #else printf ("/on_failure_keep_string_jump to %ld", (long int) (p + mcnt - start)); #endif break; case dummy_failure_jump: extract_number_and_incr (&mcnt, &p); #ifdef _LIBC printf ("/dummy_failure_jump to %t", p + mcnt - start); #else printf ("/dummy_failure_jump to %ld", (long int) (p + mcnt - start)); #endif break; case push_dummy_failure: printf ("/push_dummy_failure"); break; case maybe_pop_jump: extract_number_and_incr (&mcnt, &p); #ifdef _LIBC printf ("/maybe_pop_jump to %t", p + mcnt - start); #else printf ("/maybe_pop_jump to %ld", (long int) (p + mcnt - start)); #endif break; case pop_failure_jump: extract_number_and_incr (&mcnt, &p); #ifdef _LIBC printf ("/pop_failure_jump to %t", p + mcnt - start); #else printf ("/pop_failure_jump to %ld", (long int) (p + mcnt - start)); #endif break; case jump_past_alt: extract_number_and_incr (&mcnt, &p); #ifdef _LIBC printf ("/jump_past_alt to %t", p + mcnt - start); #else printf ("/jump_past_alt to %ld", (long int) (p + mcnt - start)); #endif break; case jump: extract_number_and_incr (&mcnt, &p); #ifdef _LIBC printf ("/jump to %t", p + mcnt - start); #else printf ("/jump to %ld", (long int) (p + mcnt - start)); #endif break; case succeed_n: extract_number_and_incr (&mcnt, &p); p1 = p + mcnt; extract_number_and_incr (&mcnt2, &p); #ifdef _LIBC printf ("/succeed_n to %t, %d times", p1 - start, mcnt2); #else printf ("/succeed_n to %ld, %d times", (long int) (p1 - start), mcnt2); #endif break; case jump_n: extract_number_and_incr (&mcnt, &p); p1 = p + mcnt; extract_number_and_incr (&mcnt2, &p); printf ("/jump_n to %d, %d times", p1 - start, mcnt2); break; case set_number_at: extract_number_and_incr (&mcnt, &p); p1 = p + mcnt; extract_number_and_incr (&mcnt2, &p); #ifdef _LIBC printf ("/set_number_at location %t to %d", p1 - start, mcnt2); #else printf ("/set_number_at location %ld to %d", (long int) (p1 - start), mcnt2); #endif break; case wordbound: printf ("/wordbound"); break; case notwordbound: printf ("/notwordbound"); break; case wordbeg: printf ("/wordbeg"); break; case wordend: printf ("/wordend"); # ifdef emacs case before_dot: printf ("/before_dot"); break; case at_dot: printf ("/at_dot"); break; case after_dot: printf ("/after_dot"); break; case syntaxspec: printf ("/syntaxspec"); mcnt = *p++; printf ("/%d", mcnt); break; case notsyntaxspec: printf ("/notsyntaxspec"); mcnt = *p++; printf ("/%d", mcnt); break; # endif /* emacs */ case wordchar: printf ("/wordchar"); break; case notwordchar: printf ("/notwordchar"); break; case begbuf: printf ("/begbuf"); break; case endbuf: printf ("/endbuf"); break; default: printf ("?%d", *(p-1)); } putchar ('\n'); } #ifdef _LIBC printf ("%t:\tend of pattern.\n", p - start); #else printf ("%ld:\tend of pattern.\n", (long int) (p - start)); #endif } void print_compiled_pattern (bufp) struct re_pattern_buffer *bufp; { unsigned char *buffer = bufp->buffer; print_partial_compiled_pattern (buffer, buffer + bufp->used); printf ("%ld bytes used/%ld bytes allocated.\n", bufp->used, bufp->allocated); if (bufp->fastmap_accurate && bufp->fastmap) { printf ("fastmap: "); print_fastmap (bufp->fastmap); } #ifdef _LIBC printf ("re_nsub: %Zd\t", bufp->re_nsub); #else printf ("re_nsub: %ld\t", (long int) bufp->re_nsub); #endif printf ("regs_alloc: %d\t", bufp->regs_allocated); printf ("can_be_null: %d\t", bufp->can_be_null); printf ("newline_anchor: %d\n", bufp->newline_anchor); printf ("no_sub: %d\t", bufp->no_sub); printf ("not_bol: %d\t", bufp->not_bol); printf ("not_eol: %d\t", bufp->not_eol); printf ("syntax: %lx\n", bufp->syntax); /* Perhaps we should print the translate table? */ } void print_double_string (where, string1, size1, string2, size2) const char *where; const char *string1; const char *string2; int size1; int size2; { int this_char; if (where == NULL) printf ("(null)"); else { if (FIRST_STRING_P (where)) { for (this_char = where - string1; this_char < size1; this_char++) putchar (string1[this_char]); where = string2; } for (this_char = where - string2; this_char < size2; this_char++) putchar (string2[this_char]); } } void printchar (c) int c; { putc (c, stderr); } #else /* not DEBUG */ # undef assert # define assert(e) # define DEBUG_STATEMENT(e) # define DEBUG_PRINT1(x) # define DEBUG_PRINT2(x1, x2) # define DEBUG_PRINT3(x1, x2, x3) # define DEBUG_PRINT4(x1, x2, x3, x4) # define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) # define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2) #endif /* not DEBUG */ /* Set by `re_set_syntax' to the current regexp syntax to recognize. Can also be assigned to arbitrarily: each pattern buffer stores its own syntax, so it can be changed between regex compilations. */ /* This has no initializer because initialized variables in Emacs become read-only after dumping. */ reg_syntax_t re_syntax_options; /* Specify the precise syntax of regexps for compilation. This provides for compatibility for various utilities which historically have different, incompatible syntaxes. The argument SYNTAX is a bit mask comprised of the various bits defined in regex.h. We return the old syntax. */ reg_syntax_t re_set_syntax (syntax) reg_syntax_t syntax; { reg_syntax_t ret = re_syntax_options; re_syntax_options = syntax; #ifdef DEBUG if (syntax & RE_DEBUG) debug = 1; else if (debug) /* was on but now is not */ debug = 0; #endif /* DEBUG */ return ret; } #ifdef _LIBC weak_alias (__re_set_syntax, re_set_syntax) #endif /* This table gives an error message for each of the error codes listed in regex.h. Obviously the order here has to be same as there. POSIX doesn't require that we do anything for REG_NOERROR, but why not be nice? */ static const char re_error_msgid[] = { #define REG_NOERROR_IDX 0 gettext_noop ("Success") /* REG_NOERROR */ "\0" #define REG_NOMATCH_IDX (REG_NOERROR_IDX + sizeof "Success") gettext_noop ("No match") /* REG_NOMATCH */ "\0" #define REG_BADPAT_IDX (REG_NOMATCH_IDX + sizeof "No match") gettext_noop ("Invalid regular expression") /* REG_BADPAT */ "\0" #define REG_ECOLLATE_IDX (REG_BADPAT_IDX + sizeof "Invalid regular expression") gettext_noop ("Invalid collation character") /* REG_ECOLLATE */ "\0" #define REG_ECTYPE_IDX (REG_ECOLLATE_IDX + sizeof "Invalid collation character") gettext_noop ("Invalid character class name") /* REG_ECTYPE */ "\0" #define REG_EESCAPE_IDX (REG_ECTYPE_IDX + sizeof "Invalid character class name") gettext_noop ("Trailing backslash") /* REG_EESCAPE */ "\0" #define REG_ESUBREG_IDX (REG_EESCAPE_IDX + sizeof "Trailing backslash") gettext_noop ("Invalid back reference") /* REG_ESUBREG */ "\0" #define REG_EBRACK_IDX (REG_ESUBREG_IDX + sizeof "Invalid back reference") gettext_noop ("Unmatched [ or [^") /* REG_EBRACK */ "\0" #define REG_EPAREN_IDX (REG_EBRACK_IDX + sizeof "Unmatched [ or [^") gettext_noop ("Unmatched ( or \\(") /* REG_EPAREN */ "\0" #define REG_EBRACE_IDX (REG_EPAREN_IDX + sizeof "Unmatched ( or \\(") gettext_noop ("Unmatched \\{") /* REG_EBRACE */ "\0" #define REG_BADBR_IDX (REG_EBRACE_IDX + sizeof "Unmatched \\{") gettext_noop ("Invalid content of \\{\\}") /* REG_BADBR */ "\0" #define REG_ERANGE_IDX (REG_BADBR_IDX + sizeof "Invalid content of \\{\\}") gettext_noop ("Invalid range end") /* REG_ERANGE */ "\0" #define REG_ESPACE_IDX (REG_ERANGE_IDX + sizeof "Invalid range end") gettext_noop ("Memory exhausted") /* REG_ESPACE */ "\0" #define REG_BADRPT_IDX (REG_ESPACE_IDX + sizeof "Memory exhausted") gettext_noop ("Invalid preceding regular expression") /* REG_BADRPT */ "\0" #define REG_EEND_IDX (REG_BADRPT_IDX + sizeof "Invalid preceding regular expression") gettext_noop ("Premature end of regular expression") /* REG_EEND */ "\0" #define REG_ESIZE_IDX (REG_EEND_IDX + sizeof "Premature end of regular expression") gettext_noop ("Regular expression too big") /* REG_ESIZE */ "\0" #define REG_ERPAREN_IDX (REG_ESIZE_IDX + sizeof "Regular expression too big") gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */ }; static const size_t re_error_msgid_idx[] = { REG_NOERROR_IDX, REG_NOMATCH_IDX, REG_BADPAT_IDX, REG_ECOLLATE_IDX, REG_ECTYPE_IDX, REG_EESCAPE_IDX, REG_ESUBREG_IDX, REG_EBRACK_IDX, REG_EPAREN_IDX, REG_EBRACE_IDX, REG_BADBR_IDX, REG_ERANGE_IDX, REG_ESPACE_IDX, REG_BADRPT_IDX, REG_EEND_IDX, REG_ESIZE_IDX, REG_ERPAREN_IDX }; /* Avoiding alloca during matching, to placate r_alloc. */ /* Define MATCH_MAY_ALLOCATE unless we need to make sure that the searching and matching functions should not call alloca. On some systems, alloca is implemented in terms of malloc, and if we're using the relocating allocator routines, then malloc could cause a relocation, which might (if the strings being searched are in the ralloc heap) shift the data out from underneath the regexp routines. Here's another reason to avoid allocation: Emacs processes input from X in a signal handler; processing X input may call malloc; if input arrives while a matching routine is calling malloc, then we're scrod. But Emacs can't just block input while calling matching routines; then we don't notice interrupts when they come in. So, Emacs blocks input around all regexp calls except the matching calls, which it leaves unprotected, in the faith that they will not malloc. */ /* Normally, this is fine. */ #define MATCH_MAY_ALLOCATE /* When using GNU C, we are not REALLY using the C alloca, no matter what config.h may say. So don't take precautions for it. */ #ifdef __GNUC__ # undef C_ALLOCA #endif /* The match routines may not allocate if (1) they would do it with malloc and (2) it's not safe for them to use malloc. Note that if REL_ALLOC is defined, matching would not use malloc for the failure stack, but we would still use it for the register vectors; so REL_ALLOC should not affect this. */ #if (defined C_ALLOCA || defined REGEX_MALLOC) && defined emacs # undef MATCH_MAY_ALLOCATE #endif /* Failure stack declarations and macros; both re_compile_fastmap and re_match_2 use a failure stack. These have to be macros because of REGEX_ALLOCATE_STACK. */ /* Number of failure points for which to initially allocate space when matching. If this number is exceeded, we allocate more space, so it is not a hard limit. */ #ifndef INIT_FAILURE_ALLOC # define INIT_FAILURE_ALLOC 5 #endif /* Roughly the maximum number of failure points on the stack. Would be exactly that if always used MAX_FAILURE_ITEMS items each time we failed. This is a variable only so users of regex can assign to it; we never change it ourselves. */ #ifdef INT_IS_16BIT # if defined MATCH_MAY_ALLOCATE /* 4400 was enough to cause a crash on Alpha OSF/1, whose default stack limit is 2mb. */ long int re_max_failures = 4000; # else long int re_max_failures = 2000; # endif union fail_stack_elt { unsigned char *pointer; long int integer; }; typedef union fail_stack_elt fail_stack_elt_t; typedef struct { fail_stack_elt_t *stack; unsigned long int size; unsigned long int avail; /* Offset of next open position. */ } fail_stack_type; #else /* not INT_IS_16BIT */ # if defined MATCH_MAY_ALLOCATE /* 4400 was enough to cause a crash on Alpha OSF/1, whose default stack limit is 2mb. */ int re_max_failures = 4000; # else int re_max_failures = 2000; # endif union fail_stack_elt { unsigned char *pointer; int integer; }; typedef union fail_stack_elt fail_stack_elt_t; typedef struct { fail_stack_elt_t *stack; unsigned size; unsigned avail; /* Offset of next open position. */ } fail_stack_type; #endif /* INT_IS_16BIT */ #define FAIL_STACK_EMPTY() (fail_stack.avail == 0) #define FAIL_STACK_PTR_EMPTY() (fail_stack_ptr->avail == 0) #define FAIL_STACK_FULL() (fail_stack.avail == fail_stack.size) /* Define macros to initialize and free the failure stack. Do `return -2' if the alloc fails. */ #ifdef MATCH_MAY_ALLOCATE # define INIT_FAIL_STACK() \ do { \ fail_stack.stack = (fail_stack_elt_t *) \ REGEX_ALLOCATE_STACK (INIT_FAILURE_ALLOC * sizeof (fail_stack_elt_t)); \ \ if (fail_stack.stack == NULL) \ return -2; \ \ fail_stack.size = INIT_FAILURE_ALLOC; \ fail_stack.avail = 0; \ } while (0) # define RESET_FAIL_STACK() REGEX_FREE_STACK (fail_stack.stack) #else # define INIT_FAIL_STACK() \ do { \ fail_stack.avail = 0; \ } while (0) # define RESET_FAIL_STACK() #endif /* Double the size of FAIL_STACK, up to approximately `re_max_failures' items. Return 1 if succeeds, and 0 if either ran out of memory allocating space for it or it was already too large. REGEX_REALLOCATE_STACK requires `destination' be declared. */ #define DOUBLE_FAIL_STACK(fail_stack) \ ((fail_stack).size > (unsigned) (re_max_failures * MAX_FAILURE_ITEMS) \ ? 0 \ : ((fail_stack).stack = (fail_stack_elt_t *) \ REGEX_REALLOCATE_STACK ((fail_stack).stack, \ (fail_stack).size * sizeof (fail_stack_elt_t), \ ((fail_stack).size << 1) * sizeof (fail_stack_elt_t)), \ \ (fail_stack).stack == NULL \ ? 0 \ : ((fail_stack).size <<= 1, \ 1))) /* Push pointer POINTER on FAIL_STACK. Return 1 if was able to do so and 0 if ran out of memory allocating space to do so. */ #define PUSH_PATTERN_OP(POINTER, FAIL_STACK) \ ((FAIL_STACK_FULL () \ && !DOUBLE_FAIL_STACK (FAIL_STACK)) \ ? 0 \ : ((FAIL_STACK).stack[(FAIL_STACK).avail++].pointer = POINTER, \ 1)) /* Push a pointer value onto the failure stack. Assumes the variable `fail_stack'. Probably should only be called from within `PUSH_FAILURE_POINT'. */ #define PUSH_FAILURE_POINTER(item) \ fail_stack.stack[fail_stack.avail++].pointer = (unsigned char *) (item) /* This pushes an integer-valued item onto the failure stack. Assumes the variable `fail_stack'. Probably should only be called from within `PUSH_FAILURE_POINT'. */ #define PUSH_FAILURE_INT(item) \ fail_stack.stack[fail_stack.avail++].integer = (item) /* Push a fail_stack_elt_t value onto the failure stack. Assumes the variable `fail_stack'. Probably should only be called from within `PUSH_FAILURE_POINT'. */ #define PUSH_FAILURE_ELT(item) \ fail_stack.stack[fail_stack.avail++] = (item) /* These three POP... operations complement the three PUSH... operations. All assume that `fail_stack' is nonempty. */ #define POP_FAILURE_POINTER() fail_stack.stack[--fail_stack.avail].pointer #define POP_FAILURE_INT() fail_stack.stack[--fail_stack.avail].integer #define POP_FAILURE_ELT() fail_stack.stack[--fail_stack.avail] /* Used to omit pushing failure point id's when we're not debugging. */ #ifdef DEBUG # define DEBUG_PUSH PUSH_FAILURE_INT # define DEBUG_POP(item_addr) *(item_addr) = POP_FAILURE_INT () #else # define DEBUG_PUSH(item) # define DEBUG_POP(item_addr) #endif /* Push the information about the state we will need if we ever fail back to it. Requires variables fail_stack, regstart, regend, reg_info, and num_regs_pushed be declared. DOUBLE_FAIL_STACK requires `destination' be declared. Does `return FAILURE_CODE' if runs out of memory. */ #define PUSH_FAILURE_POINT(pattern_place, string_place, failure_code) \ do { \ char *destination; \ /* Must be int, so when we don't save any registers, the arithmetic \ of 0 + -1 isn't done as unsigned. */ \ /* Can't be int, since there is not a shred of a guarantee that int \ is wide enough to hold a value of something to which pointer can \ be assigned */ \ active_reg_t this_reg; \ \ DEBUG_STATEMENT (failure_id++); \ DEBUG_STATEMENT (nfailure_points_pushed++); \ DEBUG_PRINT2 ("\nPUSH_FAILURE_POINT #%u:\n", failure_id); \ DEBUG_PRINT2 (" Before push, next avail: %d\n", (fail_stack).avail);\ DEBUG_PRINT2 (" size: %d\n", (fail_stack).size);\ \ DEBUG_PRINT2 (" slots needed: %ld\n", NUM_FAILURE_ITEMS); \ DEBUG_PRINT2 (" available: %d\n", REMAINING_AVAIL_SLOTS); \ \ /* Ensure we have enough space allocated for what we will push. */ \ while (REMAINING_AVAIL_SLOTS < NUM_FAILURE_ITEMS) \ { \ if (!DOUBLE_FAIL_STACK (fail_stack)) \ return failure_code; \ \ DEBUG_PRINT2 ("\n Doubled stack; size now: %d\n", \ (fail_stack).size); \ DEBUG_PRINT2 (" slots available: %d\n", REMAINING_AVAIL_SLOTS);\ } \ \ /* Push the info, starting with the registers. */ \ DEBUG_PRINT1 ("\n"); \ \ if (1) \ for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; \ this_reg++) \ { \ DEBUG_PRINT2 (" Pushing reg: %lu\n", this_reg); \ DEBUG_STATEMENT (num_regs_pushed++); \ \ DEBUG_PRINT2 (" start: %p\n", regstart[this_reg]); \ PUSH_FAILURE_POINTER (regstart[this_reg]); \ \ DEBUG_PRINT2 (" end: %p\n", regend[this_reg]); \ PUSH_FAILURE_POINTER (regend[this_reg]); \ \ DEBUG_PRINT2 (" info: %p\n ", \ reg_info[this_reg].word.pointer); \ DEBUG_PRINT2 (" match_null=%d", \ REG_MATCH_NULL_STRING_P (reg_info[this_reg])); \ DEBUG_PRINT2 (" active=%d", IS_ACTIVE (reg_info[this_reg])); \ DEBUG_PRINT2 (" matched_something=%d", \ MATCHED_SOMETHING (reg_info[this_reg])); \ DEBUG_PRINT2 (" ever_matched=%d", \ EVER_MATCHED_SOMETHING (reg_info[this_reg])); \ DEBUG_PRINT1 ("\n"); \ PUSH_FAILURE_ELT (reg_info[this_reg].word); \ } \ \ DEBUG_PRINT2 (" Pushing low active reg: %ld\n", lowest_active_reg);\ PUSH_FAILURE_INT (lowest_active_reg); \ \ DEBUG_PRINT2 (" Pushing high active reg: %ld\n", highest_active_reg);\ PUSH_FAILURE_INT (highest_active_reg); \ \ DEBUG_PRINT2 (" Pushing pattern %p:\n", pattern_place); \ DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern_place, pend); \ PUSH_FAILURE_POINTER (pattern_place); \ \ DEBUG_PRINT2 (" Pushing string %p: `", string_place); \ DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2, \ size2); \ DEBUG_PRINT1 ("'\n"); \ PUSH_FAILURE_POINTER (string_place); \ \ DEBUG_PRINT2 (" Pushing failure id: %u\n", failure_id); \ DEBUG_PUSH (failure_id); \ } while (0) /* This is the number of items that are pushed and popped on the stack for each register. */ #define NUM_REG_ITEMS 3 /* Individual items aside from the registers. */ #ifdef DEBUG # define NUM_NONREG_ITEMS 5 /* Includes failure point id. */ #else # define NUM_NONREG_ITEMS 4 #endif /* We push at most this many items on the stack. */ /* We used to use (num_regs - 1), which is the number of registers this regexp will save; but that was changed to 5 to avoid stack overflow for a regexp with lots of parens. */ #define MAX_FAILURE_ITEMS (5 * NUM_REG_ITEMS + NUM_NONREG_ITEMS) /* We actually push this many items. */ #define NUM_FAILURE_ITEMS \ (((0 \ ? 0 : highest_active_reg - lowest_active_reg + 1) \ * NUM_REG_ITEMS) \ + NUM_NONREG_ITEMS) /* How many items can still be added to the stack without overflowing it. */ #define REMAINING_AVAIL_SLOTS ((fail_stack).size - (fail_stack).avail) /* Pops what PUSH_FAIL_STACK pushes. We restore into the parameters, all of which should be lvalues: STR -- the saved data position. PAT -- the saved pattern position. LOW_REG, HIGH_REG -- the highest and lowest active registers. REGSTART, REGEND -- arrays of string positions. REG_INFO -- array of information about each subexpression. Also assumes the variables `fail_stack' and (if debugging), `bufp', `pend', `string1', `size1', `string2', and `size2'. */ #define POP_FAILURE_POINT(str, pat, low_reg, high_reg, regstart, regend, reg_info)\ { \ DEBUG_STATEMENT (unsigned failure_id;) \ active_reg_t this_reg; \ const unsigned char *string_temp; \ \ assert (!FAIL_STACK_EMPTY ()); \ \ /* Remove failure points and point to how many regs pushed. */ \ DEBUG_PRINT1 ("POP_FAILURE_POINT:\n"); \ DEBUG_PRINT2 (" Before pop, next avail: %d\n", fail_stack.avail); \ DEBUG_PRINT2 (" size: %d\n", fail_stack.size); \ \ assert (fail_stack.avail >= NUM_NONREG_ITEMS); \ \ DEBUG_POP (&failure_id); \ DEBUG_PRINT2 (" Popping failure id: %u\n", failure_id); \ \ /* If the saved string location is NULL, it came from an \ on_failure_keep_string_jump opcode, and we want to throw away the \ saved NULL, thus retaining our current position in the string. */ \ string_temp = POP_FAILURE_POINTER (); \ if (string_temp != NULL) \ str = (const char *) string_temp; \ \ DEBUG_PRINT2 (" Popping string %p: `", str); \ DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2); \ DEBUG_PRINT1 ("'\n"); \ \ pat = (unsigned char *) POP_FAILURE_POINTER (); \ DEBUG_PRINT2 (" Popping pattern %p:\n", pat); \ DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend); \ \ /* Restore register info. */ \ high_reg = (active_reg_t) POP_FAILURE_INT (); \ DEBUG_PRINT2 (" Popping high active reg: %ld\n", high_reg); \ \ low_reg = (active_reg_t) POP_FAILURE_INT (); \ DEBUG_PRINT2 (" Popping low active reg: %ld\n", low_reg); \ \ if (1) \ for (this_reg = high_reg; this_reg >= low_reg; this_reg--) \ { \ DEBUG_PRINT2 (" Popping reg: %ld\n", this_reg); \ \ reg_info[this_reg].word = POP_FAILURE_ELT (); \ DEBUG_PRINT2 (" info: %p\n", \ reg_info[this_reg].word.pointer); \ \ regend[this_reg] = (const char *) POP_FAILURE_POINTER (); \ DEBUG_PRINT2 (" end: %p\n", regend[this_reg]); \ \ regstart[this_reg] = (const char *) POP_FAILURE_POINTER (); \ DEBUG_PRINT2 (" start: %p\n", regstart[this_reg]); \ } \ else \ { \ for (this_reg = highest_active_reg; this_reg > high_reg; this_reg--) \ { \ reg_info[this_reg].word.integer = 0; \ regend[this_reg] = 0; \ regstart[this_reg] = 0; \ } \ highest_active_reg = high_reg; \ } \ \ set_regs_matched_done = 0; \ DEBUG_STATEMENT (nfailure_points_popped++); \ } /* POP_FAILURE_POINT */ /* Structure for per-register (a.k.a. per-group) information. Other register information, such as the starting and ending positions (which are addresses), and the list of inner groups (which is a bits list) are maintained in separate variables. We are making a (strictly speaking) nonportable assumption here: that the compiler will pack our bit fields into something that fits into the type of `word', i.e., is something that fits into one item on the failure stack. */ /* Declarations and macros for re_match_2. */ typedef union { fail_stack_elt_t word; struct { /* This field is one if this group can match the empty string, zero if not. If not yet determined, `MATCH_NULL_UNSET_VALUE'. */ #define MATCH_NULL_UNSET_VALUE 3 unsigned match_null_string_p : 2; unsigned is_active : 1; unsigned matched_something : 1; unsigned ever_matched_something : 1; } bits; } register_info_type; #define REG_MATCH_NULL_STRING_P(R) ((R).bits.match_null_string_p) #define IS_ACTIVE(R) ((R).bits.is_active) #define MATCHED_SOMETHING(R) ((R).bits.matched_something) #define EVER_MATCHED_SOMETHING(R) ((R).bits.ever_matched_something) /* Call this when have matched a real character; it sets `matched' flags for the subexpressions which we are currently inside. Also records that those subexprs have matched. */ #define SET_REGS_MATCHED() \ do \ { \ if (!set_regs_matched_done) \ { \ active_reg_t r; \ set_regs_matched_done = 1; \ for (r = lowest_active_reg; r <= highest_active_reg; r++) \ { \ MATCHED_SOMETHING (reg_info[r]) \ = EVER_MATCHED_SOMETHING (reg_info[r]) \ = 1; \ } \ } \ } \ while (0) /* Registers are set to a sentinel when they haven't yet matched. */ static char reg_unset_dummy; #define REG_UNSET_VALUE (®_unset_dummy) #define REG_UNSET(e) ((e) == REG_UNSET_VALUE) /* Subroutine declarations and macros for regex_compile. */ static reg_errcode_t regex_compile _RE_ARGS ((const char *pattern, size_t size, reg_syntax_t syntax, struct re_pattern_buffer *bufp)); static void store_op1 _RE_ARGS ((re_opcode_t op, unsigned char *loc, int arg)); static void store_op2 _RE_ARGS ((re_opcode_t op, unsigned char *loc, int arg1, int arg2)); static void insert_op1 _RE_ARGS ((re_opcode_t op, unsigned char *loc, int arg, unsigned char *end)); static void insert_op2 _RE_ARGS ((re_opcode_t op, unsigned char *loc, int arg1, int arg2, unsigned char *end)); static boolean at_begline_loc_p _RE_ARGS ((const char *pattern, const char *p, reg_syntax_t syntax)); static boolean at_endline_loc_p _RE_ARGS ((const char *p, const char *pend, reg_syntax_t syntax)); static reg_errcode_t compile_range _RE_ARGS ((unsigned int range_start, const char **p_ptr, const char *pend, char *translate, reg_syntax_t syntax, unsigned char *b)); /* Fetch the next character in the uncompiled pattern---translating it if necessary. Also cast from a signed character in the constant string passed to us by the user to an unsigned char that we can use as an array index (in, e.g., `translate'). */ #ifndef PATFETCH # define PATFETCH(c) \ do {if (p == pend) return REG_EEND; \ c = (unsigned char) *p++; \ if (translate) c = (unsigned char) translate[c]; \ } while (0) #endif /* Fetch the next character in the uncompiled pattern, with no translation. */ #define PATFETCH_RAW(c) \ do {if (p == pend) return REG_EEND; \ c = (unsigned char) *p++; \ } while (0) /* Go backwards one character in the pattern. */ #define PATUNFETCH p-- /* If `translate' is non-null, return translate[D], else just D. We cast the subscript to translate because some data is declared as `char *', to avoid warnings when a string constant is passed. But when we use a character as a subscript we must make it unsigned. */ #ifndef TRANSLATE # define TRANSLATE(d) \ (translate ? (char) translate[(unsigned char) (d)] : (d)) #endif /* Macros for outputting the compiled pattern into `buffer'. */ /* If the buffer isn't allocated when it comes in, use this. */ #define INIT_BUF_SIZE 32 /* Make sure we have at least N more bytes of space in buffer. */ #define GET_BUFFER_SPACE(n) \ while ((unsigned long) (b - bufp->buffer + (n)) > bufp->allocated) \ EXTEND_BUFFER () /* Make sure we have one more byte of buffer space and then add C to it. */ #define BUF_PUSH(c) \ do { \ GET_BUFFER_SPACE (1); \ *b++ = (unsigned char) (c); \ } while (0) /* Ensure we have two more bytes of buffer space and then append C1 and C2. */ #define BUF_PUSH_2(c1, c2) \ do { \ GET_BUFFER_SPACE (2); \ *b++ = (unsigned char) (c1); \ *b++ = (unsigned char) (c2); \ } while (0) /* As with BUF_PUSH_2, except for three bytes. */ #define BUF_PUSH_3(c1, c2, c3) \ do { \ GET_BUFFER_SPACE (3); \ *b++ = (unsigned char) (c1); \ *b++ = (unsigned char) (c2); \ *b++ = (unsigned char) (c3); \ } while (0) /* Store a jump with opcode OP at LOC to location TO. We store a relative address offset by the three bytes the jump itself occupies. */ #define STORE_JUMP(op, loc, to) \ store_op1 (op, loc, (int) ((to) - (loc) - 3)) /* Likewise, for a two-argument jump. */ #define STORE_JUMP2(op, loc, to, arg) \ store_op2 (op, loc, (int) ((to) - (loc) - 3), arg) /* Like `STORE_JUMP', but for inserting. Assume `b' is the buffer end. */ #define INSERT_JUMP(op, loc, to) \ insert_op1 (op, loc, (int) ((to) - (loc) - 3), b) /* Like `STORE_JUMP2', but for inserting. Assume `b' is the buffer end. */ #define INSERT_JUMP2(op, loc, to, arg) \ insert_op2 (op, loc, (int) ((to) - (loc) - 3), arg, b) /* This is not an arbitrary limit: the arguments which represent offsets into the pattern are two bytes long. So if 2^16 bytes turns out to be too small, many things would have to change. */ /* Any other compiler which, like MSC, has allocation limit below 2^16 bytes will have to use approach similar to what was done below for MSC and drop MAX_BUF_SIZE a bit. Otherwise you may end up reallocating to 0 bytes. Such thing is not going to work too well. You have been warned!! */ #if defined _MSC_VER && !defined WIN32 /* Microsoft C 16-bit versions limit malloc to approx 65512 bytes. The REALLOC define eliminates a flurry of conversion warnings, but is not required. */ # define MAX_BUF_SIZE 65500L # define REALLOC(p,s) realloc ((p), (size_t) (s)) #else # define MAX_BUF_SIZE (1L << 16) # define REALLOC(p,s) realloc ((p), (s)) #endif /* Extend the buffer by twice its current size via realloc and reset the pointers that pointed into the old block to point to the correct places in the new one. If extending the buffer results in it being larger than MAX_BUF_SIZE, then flag memory exhausted. */ #if __BOUNDED_POINTERS__ # define SET_HIGH_BOUND(P) (__ptrhigh (P) = __ptrlow (P) + bufp->allocated) # define MOVE_BUFFER_POINTER(P) \ (__ptrlow (P) += incr, SET_HIGH_BOUND (P), __ptrvalue (P) += incr) # define ELSE_EXTEND_BUFFER_HIGH_BOUND \ else \ { \ SET_HIGH_BOUND (b); \ SET_HIGH_BOUND (begalt); \ if (fixup_alt_jump) \ SET_HIGH_BOUND (fixup_alt_jump); \ if (laststart) \ SET_HIGH_BOUND (laststart); \ if (pending_exact) \ SET_HIGH_BOUND (pending_exact); \ } #else # define MOVE_BUFFER_POINTER(P) (P) += incr # define ELSE_EXTEND_BUFFER_HIGH_BOUND #endif #define EXTEND_BUFFER() \ do { \ unsigned char *old_buffer = bufp->buffer; \ if (bufp->allocated == MAX_BUF_SIZE) \ return REG_ESIZE; \ bufp->allocated <<= 1; \ if (bufp->allocated > MAX_BUF_SIZE) \ bufp->allocated = MAX_BUF_SIZE; \ bufp->buffer = (unsigned char *) REALLOC (bufp->buffer, bufp->allocated);\ if (bufp->buffer == NULL) \ return REG_ESPACE; \ /* If the buffer moved, move all the pointers into it. */ \ if (old_buffer != bufp->buffer) \ { \ int incr = bufp->buffer - old_buffer; \ MOVE_BUFFER_POINTER (b); \ MOVE_BUFFER_POINTER (begalt); \ if (fixup_alt_jump) \ MOVE_BUFFER_POINTER (fixup_alt_jump); \ if (laststart) \ MOVE_BUFFER_POINTER (laststart); \ if (pending_exact) \ MOVE_BUFFER_POINTER (pending_exact); \ } \ ELSE_EXTEND_BUFFER_HIGH_BOUND \ } while (0) /* Since we have one byte reserved for the register number argument to {start,stop}_memory, the maximum number of groups we can report things about is what fits in that byte. */ #define MAX_REGNUM 255 /* But patterns can have more than `MAX_REGNUM' registers. We just ignore the excess. */ typedef unsigned regnum_t; /* Macros for the compile stack. */ /* Since offsets can go either forwards or backwards, this type needs to be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1. */ /* int may be not enough when sizeof(int) == 2. */ typedef long pattern_offset_t; typedef struct { pattern_offset_t begalt_offset; pattern_offset_t fixup_alt_jump; pattern_offset_t inner_group_offset; pattern_offset_t laststart_offset; regnum_t regnum; } compile_stack_elt_t; typedef struct { compile_stack_elt_t *stack; unsigned size; unsigned avail; /* Offset of next open position. */ } compile_stack_type; #define INIT_COMPILE_STACK_SIZE 32 #define COMPILE_STACK_EMPTY (compile_stack.avail == 0) #define COMPILE_STACK_FULL (compile_stack.avail == compile_stack.size) /* The next available element. */ #define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail]) /* Set the bit for character C in a list. */ #define SET_LIST_BIT(c) \ (b[((unsigned char) (c)) / BYTEWIDTH] \ |= 1 << (((unsigned char) c) % BYTEWIDTH)) /* Get the next unsigned number in the uncompiled pattern. */ #define GET_UNSIGNED_NUMBER(num) \ { if (p != pend) \ { \ PATFETCH (c); \ while ('0' <= c && c <= '9') \ { \ if (num < 0) \ num = 0; \ num = num * 10 + c - '0'; \ if (p == pend) \ break; \ PATFETCH (c); \ } \ } \ } #if defined _LIBC || WIDE_CHAR_SUPPORT /* The GNU C library provides support for user-defined character classes and the functions from ISO C amendement 1. */ # ifdef CHARCLASS_NAME_MAX # define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX # else /* This shouldn't happen but some implementation might still have this problem. Use a reasonable default value. */ # define CHAR_CLASS_MAX_LENGTH 256 # endif # ifdef _LIBC # define IS_CHAR_CLASS(string) __wctype (string) # else # define IS_CHAR_CLASS(string) wctype (string) # endif #else # define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */ # define IS_CHAR_CLASS(string) \ (STREQ (string, "alpha") || STREQ (string, "upper") \ || STREQ (string, "lower") || STREQ (string, "digit") \ || STREQ (string, "alnum") || STREQ (string, "xdigit") \ || STREQ (string, "space") || STREQ (string, "print") \ || STREQ (string, "punct") || STREQ (string, "graph") \ || STREQ (string, "cntrl") || STREQ (string, "blank")) #endif #ifndef MATCH_MAY_ALLOCATE /* If we cannot allocate large objects within re_match_2_internal, we make the fail stack and register vectors global. The fail stack, we grow to the maximum size when a regexp is compiled. The register vectors, we adjust in size each time we compile a regexp, according to the number of registers it needs. */ static fail_stack_type fail_stack; /* Size with which the following vectors are currently allocated. That is so we can make them bigger as needed, but never make them smaller. */ static int regs_allocated_size; static const char ** regstart, ** regend; static const char ** old_regstart, ** old_regend; static const char **best_regstart, **best_regend; static register_info_type *reg_info; static const char **reg_dummy; static register_info_type *reg_info_dummy; /* Make the register vectors big enough for NUM_REGS registers, but don't make them smaller. */ static regex_grow_registers (num_regs) int num_regs; { if (num_regs > regs_allocated_size) { RETALLOC_IF (regstart, num_regs, const char *); RETALLOC_IF (regend, num_regs, const char *); RETALLOC_IF (old_regstart, num_regs, const char *); RETALLOC_IF (old_regend, num_regs, const char *); RETALLOC_IF (best_regstart, num_regs, const char *); RETALLOC_IF (best_regend, num_regs, const char *); RETALLOC_IF (reg_info, num_regs, register_info_type); RETALLOC_IF (reg_dummy, num_regs, const char *); RETALLOC_IF (reg_info_dummy, num_regs, register_info_type); regs_allocated_size = num_regs; } } #endif /* not MATCH_MAY_ALLOCATE */ static boolean group_in_compile_stack _RE_ARGS ((compile_stack_type compile_stack, regnum_t regnum)); /* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX. Returns one of error codes defined in `regex.h', or zero for success. Assumes the `allocated' (and perhaps `buffer') and `translate' fields are set in BUFP on entry. If it succeeds, results are put in BUFP (if it returns an error, the contents of BUFP are undefined): `buffer' is the compiled pattern; `syntax' is set to SYNTAX; `used' is set to the length of the compiled pattern; `fastmap_accurate' is zero; `re_nsub' is the number of subexpressions in PATTERN; `not_bol' and `not_eol' are zero; The `fastmap' and `newline_anchor' fields are neither examined nor set. */ /* Return, freeing storage we allocated. */ #define FREE_STACK_RETURN(value) \ return (free (compile_stack.stack), value) static reg_errcode_t regex_compile (pattern, size, syntax, bufp) const char *pattern; size_t size; reg_syntax_t syntax; struct re_pattern_buffer *bufp; { /* We fetch characters from PATTERN here. Even though PATTERN is `char *' (i.e., signed), we declare these variables as unsigned, so they can be reliably used as array indices. */ register unsigned char c, c1; /* A random temporary spot in PATTERN. */ const char *p1; /* Points to the end of the buffer, where we should append. */ register unsigned char *b; /* Keeps track of unclosed groups. */ compile_stack_type compile_stack; /* Points to the current (ending) position in the pattern. */ const char *p = pattern; const char *pend = pattern + size; /* How to translate the characters in the pattern. */ RE_TRANSLATE_TYPE translate = bufp->translate; /* Address of the count-byte of the most recently inserted `exactn' command. This makes it possible to tell if a new exact-match character can be added to that command or if the character requires a new `exactn' command. */ unsigned char *pending_exact = 0; /* Address of start of the most recently finished expression. This tells, e.g., postfix * where to find the start of its operand. Reset at the beginning of groups and alternatives. */ unsigned char *laststart = 0; /* Address of beginning of regexp, or inside of last group. */ unsigned char *begalt; /* Place in the uncompiled pattern (i.e., the {) to which to go back if the interval is invalid. */ const char *beg_interval; /* Address of the place where a forward jump should go to the end of the containing expression. Each alternative of an `or' -- except the last -- ends with a forward jump of this sort. */ unsigned char *fixup_alt_jump = 0; /* Counts open-groups as they are encountered. Remembered for the matching close-group on the compile stack, so the same register number is put in the stop_memory as the start_memory. */ regnum_t regnum = 0; #ifdef DEBUG DEBUG_PRINT1 ("\nCompiling pattern: "); if (debug) { unsigned debug_count; for (debug_count = 0; debug_count < size; debug_count++) putchar (pattern[debug_count]); putchar ('\n'); } #endif /* DEBUG */ /* Initialize the compile stack. */ compile_stack.stack = TALLOC (INIT_COMPILE_STACK_SIZE, compile_stack_elt_t); if (compile_stack.stack == NULL) return REG_ESPACE; compile_stack.size = INIT_COMPILE_STACK_SIZE; compile_stack.avail = 0; /* Initialize the pattern buffer. */ bufp->syntax = syntax; bufp->fastmap_accurate = 0; bufp->not_bol = bufp->not_eol = 0; /* Set `used' to zero, so that if we return an error, the pattern printer (for debugging) will think there's no pattern. We reset it at the end. */ bufp->used = 0; /* Always count groups, whether or not bufp->no_sub is set. */ bufp->re_nsub = 0; #if !defined emacs && !defined SYNTAX_TABLE /* Initialize the syntax table. */ init_syntax_once (); #endif if (bufp->allocated == 0) { if (bufp->buffer) { /* If zero allocated, but buffer is non-null, try to realloc enough space. This loses if buffer's address is bogus, but that is the user's responsibility. */ RETALLOC (bufp->buffer, INIT_BUF_SIZE, unsigned char); } else { /* Caller did not allocate a buffer. Do it for them. */ bufp->buffer = TALLOC (INIT_BUF_SIZE, unsigned char); } if (!bufp->buffer) FREE_STACK_RETURN (REG_ESPACE); bufp->allocated = INIT_BUF_SIZE; } begalt = b = bufp->buffer; /* Loop through the uncompiled pattern until we're at the end. */ while (p != pend) { PATFETCH (c); switch (c) { case '^': { if ( /* If at start of pattern, it's an operator. */ p == pattern + 1 /* If context independent, it's an operator. */ || syntax & RE_CONTEXT_INDEP_ANCHORS /* Otherwise, depends on what's come before. */ || at_begline_loc_p (pattern, p, syntax)) BUF_PUSH (begline); else goto normal_char; } break; case '$': { if ( /* If at end of pattern, it's an operator. */ p == pend /* If context independent, it's an operator. */ || syntax & RE_CONTEXT_INDEP_ANCHORS /* Otherwise, depends on what's next. */ || at_endline_loc_p (p, pend, syntax)) BUF_PUSH (endline); else goto normal_char; } break; case '+': case '?': if ((syntax & RE_BK_PLUS_QM) || (syntax & RE_LIMITED_OPS)) goto normal_char; handle_plus: case '*': /* If there is no previous pattern... */ if (!laststart) { if (syntax & RE_CONTEXT_INVALID_OPS) FREE_STACK_RETURN (REG_BADRPT); else if (!(syntax & RE_CONTEXT_INDEP_OPS)) goto normal_char; } { /* Are we optimizing this jump? */ boolean keep_string_p = false; /* 1 means zero (many) matches is allowed. */ char zero_times_ok = 0, many_times_ok = 0; /* If there is a sequence of repetition chars, collapse it down to just one (the right one). We can't combine interval operators with these because of, e.g., `a{2}*', which should only match an even number of `a's. */ for (;;) { zero_times_ok |= c != '+'; many_times_ok |= c != '?'; if (p == pend) break; PATFETCH (c); if (c == '*' || (!(syntax & RE_BK_PLUS_QM) && (c == '+' || c == '?'))) ; else if (syntax & RE_BK_PLUS_QM && c == '\\') { if (p == pend) FREE_STACK_RETURN (REG_EESCAPE); PATFETCH (c1); if (!(c1 == '+' || c1 == '?')) { PATUNFETCH; PATUNFETCH; break; } c = c1; } else { PATUNFETCH; break; } /* If we get here, we found another repeat character. */ } /* Star, etc. applied to an empty pattern is equivalent to an empty pattern. */ if (!laststart) break; /* Now we know whether or not zero matches is allowed and also whether or not two or more matches is allowed. */ if (many_times_ok) { /* More than one repetition is allowed, so put in at the end a backward relative jump from `b' to before the next jump we're going to put in below (which jumps from laststart to after this jump). But if we are at the `*' in the exact sequence `.*\n', insert an unconditional jump backwards to the ., instead of the beginning of the loop. This way we only push a failure point once, instead of every time through the loop. */ assert (p - 1 > pattern); /* Allocate the space for the jump. */ GET_BUFFER_SPACE (3); /* We know we are not at the first character of the pattern, because laststart was nonzero. And we've already incremented `p', by the way, to be the character after the `*'. Do we have to do something analogous here for null bytes, because of RE_DOT_NOT_NULL? */ if (TRANSLATE (*(p - 2)) == TRANSLATE ('.') && zero_times_ok && p < pend && TRANSLATE (*p) == TRANSLATE ('\n') && !(syntax & RE_DOT_NEWLINE)) { /* We have .*\n. */ STORE_JUMP (jump, b, laststart); keep_string_p = true; } else /* Anything else. */ STORE_JUMP (maybe_pop_jump, b, laststart - 3); /* We've added more stuff to the buffer. */ b += 3; } /* On failure, jump from laststart to b + 3, which will be the end of the buffer after this jump is inserted. */ GET_BUFFER_SPACE (3); INSERT_JUMP (keep_string_p ? on_failure_keep_string_jump : on_failure_jump, laststart, b + 3); pending_exact = 0; b += 3; if (!zero_times_ok) { /* At least one repetition is required, so insert a `dummy_failure_jump' before the initial `on_failure_jump' instruction of the loop. This effects a skip over that instruction the first time we hit that loop. */ GET_BUFFER_SPACE (3); INSERT_JUMP (dummy_failure_jump, laststart, laststart + 6); b += 3; } } break; case '.': laststart = b; BUF_PUSH (anychar); break; case '[': { boolean had_char_class = false; unsigned int range_start = 0xffffffff; if (p == pend) FREE_STACK_RETURN (REG_EBRACK); /* Ensure that we have enough space to push a charset: the opcode, the length count, and the bitset; 34 bytes in all. */ GET_BUFFER_SPACE (34); laststart = b; /* We test `*p == '^' twice, instead of using an if statement, so we only need one BUF_PUSH. */ BUF_PUSH (*p == '^' ? charset_not : charset); if (*p == '^') p++; /* Remember the first position in the bracket expression. */ p1 = p; /* Push the number of bytes in the bitmap. */ BUF_PUSH ((1 << BYTEWIDTH) / BYTEWIDTH); /* Clear the whole map. */ bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH); /* charset_not matches newline according to a syntax bit. */ if ((re_opcode_t) b[-2] == charset_not && (syntax & RE_HAT_LISTS_NOT_NEWLINE)) SET_LIST_BIT ('\n'); /* Read in characters and ranges, setting map bits. */ for (;;) { if (p == pend) FREE_STACK_RETURN (REG_EBRACK); PATFETCH (c); /* \ might escape characters inside [...] and [^...]. */ if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\') { if (p == pend) FREE_STACK_RETURN (REG_EESCAPE); PATFETCH (c1); SET_LIST_BIT (c1); range_start = c1; continue; } /* Could be the end of the bracket expression. If it's not (i.e., when the bracket expression is `[]' so far), the ']' character bit gets set way below. */ if (c == ']' && p != p1 + 1) break; /* Look ahead to see if it's a range when the last thing was a character class. */ if (had_char_class && c == '-' && *p != ']') FREE_STACK_RETURN (REG_ERANGE); /* Look ahead to see if it's a range when the last thing was a character: if this is a hyphen not at the beginning or the end of a list, then it's the range operator. */ if (c == '-' && !(p - 2 >= pattern && p[-2] == '[') && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^') && *p != ']') { reg_errcode_t ret = compile_range (range_start, &p, pend, translate, syntax, b); if (ret != REG_NOERROR) FREE_STACK_RETURN (ret); range_start = 0xffffffff; } else if (p[0] == '-' && p[1] != ']') { /* This handles ranges made up of characters only. */ reg_errcode_t ret; /* Move past the `-'. */ PATFETCH (c1); ret = compile_range (c, &p, pend, translate, syntax, b); if (ret != REG_NOERROR) FREE_STACK_RETURN (ret); range_start = 0xffffffff; } /* See if we're at the beginning of a possible character class. */ else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':') { /* Leave room for the null. */ char str[CHAR_CLASS_MAX_LENGTH + 1]; PATFETCH (c); c1 = 0; /* If pattern is `[[:'. */ if (p == pend) FREE_STACK_RETURN (REG_EBRACK); for (;;) { PATFETCH (c); if ((c == ':' && *p == ']') || p == pend) break; if (c1 < CHAR_CLASS_MAX_LENGTH) str[c1++] = c; else /* This is in any case an invalid class name. */ str[0] = '\0'; } str[c1] = '\0'; /* If isn't a word bracketed by `[:' and `:]': undo the ending character, the letters, and leave the leading `:' and `[' (but set bits for them). */ if (c == ':' && *p == ']') { #if defined _LIBC || WIDE_CHAR_SUPPORT boolean is_lower = STREQ (str, "lower"); boolean is_upper = STREQ (str, "upper"); wctype_t wt; int ch; wt = IS_CHAR_CLASS (str); if (wt == 0) FREE_STACK_RETURN (REG_ECTYPE); /* Throw away the ] at the end of the character class. */ PATFETCH (c); if (p == pend) FREE_STACK_RETURN (REG_EBRACK); for (ch = 0; ch < 1 << BYTEWIDTH; ++ch) { # ifdef _LIBC if (__iswctype (__btowc (ch), wt)) SET_LIST_BIT (ch); # else if (iswctype (btowc (ch), wt)) SET_LIST_BIT (ch); # endif if (translate && (is_upper || is_lower) && (ISUPPER (ch) || ISLOWER (ch))) SET_LIST_BIT (ch); } had_char_class = true; #else int ch; boolean is_alnum = STREQ (str, "alnum"); boolean is_alpha = STREQ (str, "alpha"); boolean is_blank = STREQ (str, "blank"); boolean is_cntrl = STREQ (str, "cntrl"); boolean is_digit = STREQ (str, "digit"); boolean is_graph = STREQ (str, "graph"); boolean is_lower = STREQ (str, "lower"); boolean is_print = STREQ (str, "print"); boolean is_punct = STREQ (str, "punct"); boolean is_space = STREQ (str, "space"); boolean is_upper = STREQ (str, "upper"); boolean is_xdigit = STREQ (str, "xdigit"); if (!IS_CHAR_CLASS (str)) FREE_STACK_RETURN (REG_ECTYPE); /* Throw away the ] at the end of the character class. */ PATFETCH (c); if (p == pend) FREE_STACK_RETURN (REG_EBRACK); for (ch = 0; ch < 1 << BYTEWIDTH; ch++) { /* This was split into 3 if's to avoid an arbitrary limit in some compiler. */ if ( (is_alnum && ISALNUM (ch)) || (is_alpha && ISALPHA (ch)) || (is_blank && ISBLANK (ch)) || (is_cntrl && ISCNTRL (ch))) SET_LIST_BIT (ch); if ( (is_digit && ISDIGIT (ch)) || (is_graph && ISGRAPH (ch)) || (is_lower && ISLOWER (ch)) || (is_print && ISPRINT (ch))) SET_LIST_BIT (ch); if ( (is_punct && ISPUNCT (ch)) || (is_space && ISSPACE (ch)) || (is_upper && ISUPPER (ch)) || (is_xdigit && ISXDIGIT (ch))) SET_LIST_BIT (ch); if ( translate && (is_upper || is_lower) && (ISUPPER (ch) || ISLOWER (ch))) SET_LIST_BIT (ch); } had_char_class = true; #endif /* libc || wctype.h */ } else { c1++; while (c1--) PATUNFETCH; SET_LIST_BIT ('['); SET_LIST_BIT (':'); range_start = ':'; had_char_class = false; } } else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == '=') { unsigned char str[MB_LEN_MAX + 1]; #ifdef _LIBC uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); #endif PATFETCH (c); c1 = 0; /* If pattern is `[[='. */ if (p == pend) FREE_STACK_RETURN (REG_EBRACK); for (;;) { PATFETCH (c); if ((c == '=' && *p == ']') || p == pend) break; if (c1 < MB_LEN_MAX) str[c1++] = c; else /* This is in any case an invalid class name. */ str[0] = '\0'; } str[c1] = '\0'; if (c == '=' && *p == ']' && str[0] != '\0') { /* If we have no collation data we use the default collation in which each character is in a class by itself. It also means that ASCII is the character set and therefore we cannot have character with more than one byte in the multibyte representation. */ #ifdef _LIBC if (nrules == 0) #endif { if (c1 != 1) FREE_STACK_RETURN (REG_ECOLLATE); /* Throw away the ] at the end of the equivalence class. */ PATFETCH (c); /* Set the bit for the character. */ SET_LIST_BIT (str[0]); } #ifdef _LIBC else { /* Try to match the byte sequence in `str' against those known to the collate implementation. First find out whether the bytes in `str' are actually from exactly one character. */ const int32_t *table; const unsigned char *weights; const unsigned char *extra; const int32_t *indirect; int32_t idx; const unsigned char *cp = str; int ch; /* This #include defines a local function! */ # include table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); idx = findidx (&cp); if (idx == 0 || cp < str + c1) /* This is no valid character. */ FREE_STACK_RETURN (REG_ECOLLATE); /* Throw away the ] at the end of the equivalence class. */ PATFETCH (c); /* Now we have to go throught the whole table and find all characters which have the same first level weight. XXX Note that this is not entirely correct. we would have to match multibyte sequences but this is not possible with the current implementation. */ for (ch = 1; ch < 256; ++ch) /* XXX This test would have to be changed if we would allow matching multibyte sequences. */ if (table[ch] > 0) { int32_t idx2 = table[ch]; size_t len = weights[idx2]; /* Test whether the lenghts match. */ if (weights[idx] == len) { /* They do. New compare the bytes of the weight. */ size_t cnt = 0; while (cnt < len && (weights[idx + 1 + cnt] == weights[idx2 + 1 + cnt])) ++len; if (cnt == len) /* They match. Mark the character as acceptable. */ SET_LIST_BIT (ch); } } } #endif had_char_class = true; } else { c1++; while (c1--) PATUNFETCH; SET_LIST_BIT ('['); SET_LIST_BIT ('='); range_start = '='; had_char_class = false; } } else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == '.') { unsigned char str[128]; /* Should be large enough. */ #ifdef _LIBC uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); #endif PATFETCH (c); c1 = 0; /* If pattern is `[[='. */ if (p == pend) FREE_STACK_RETURN (REG_EBRACK); for (;;) { PATFETCH (c); if ((c == '.' && *p == ']') || p == pend) break; if (c1 < sizeof (str)) str[c1++] = c; else /* This is in any case an invalid class name. */ str[0] = '\0'; } str[c1] = '\0'; if (c == '.' && *p == ']' && str[0] != '\0') { /* If we have no collation data we use the default collation in which each character is the name for its own class which contains only the one character. It also means that ASCII is the character set and therefore we cannot have character with more than one byte in the multibyte representation. */ #ifdef _LIBC if (nrules == 0) #endif { if (c1 != 1) FREE_STACK_RETURN (REG_ECOLLATE); /* Throw away the ] at the end of the equivalence class. */ PATFETCH (c); /* Set the bit for the character. */ SET_LIST_BIT (str[0]); range_start = ((const unsigned char *) str)[0]; } #ifdef _LIBC else { /* Try to match the byte sequence in `str' against those known to the collate implementation. First find out whether the bytes in `str' are actually from exactly one character. */ int32_t table_size; const int32_t *symb_table; const unsigned char *extra; int32_t idx; int32_t elem; int32_t second; int32_t hash; table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB); symb_table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_TABLEMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); /* Locate the character in the hashing table. */ hash = elem_hash (str, c1); idx = 0; elem = hash % table_size; second = hash % (table_size - 2); while (symb_table[2 * elem] != 0) { /* First compare the hashing value. */ if (symb_table[2 * elem] == hash && c1 == extra[symb_table[2 * elem + 1]] && memcmp (str, &extra[symb_table[2 * elem + 1] + 1], c1) == 0) { /* Yep, this is the entry. */ idx = symb_table[2 * elem + 1]; idx += 1 + extra[idx]; break; } /* Next entry. */ elem += second; } if (symb_table[2 * elem] == 0) /* This is no valid character. */ FREE_STACK_RETURN (REG_ECOLLATE); /* Throw away the ] at the end of the equivalence class. */ PATFETCH (c); /* Now add the multibyte character(s) we found to the accept list. XXX Note that this is not entirely correct. we would have to match multibyte sequences but this is not possible with the current implementation. Also, we have to match collating symbols, which expand to more than one file, as a whole and not allow the individual bytes. */ c1 = extra[idx++]; if (c1 == 1) range_start = extra[idx]; while (c1-- > 0) { SET_LIST_BIT (extra[idx]); ++idx; } } #endif had_char_class = false; } else { c1++; while (c1--) PATUNFETCH; SET_LIST_BIT ('['); SET_LIST_BIT ('.'); range_start = '.'; had_char_class = false; } } else { had_char_class = false; SET_LIST_BIT (c); range_start = c; } } /* Discard any (non)matching list bytes that are all 0 at the end of the map. Decrease the map-length byte too. */ while ((int) b[-1] > 0 && b[b[-1] - 1] == 0) b[-1]--; b += b[-1]; } break; case '(': if (syntax & RE_NO_BK_PARENS) goto handle_open; else goto normal_char; case ')': if (syntax & RE_NO_BK_PARENS) goto handle_close; else goto normal_char; case '\n': if (syntax & RE_NEWLINE_ALT) goto handle_alt; else goto normal_char; case '|': if (syntax & RE_NO_BK_VBAR) goto handle_alt; else goto normal_char; case '{': if (syntax & RE_INTERVALS && syntax & RE_NO_BK_BRACES) goto handle_interval; else goto normal_char; case '\\': if (p == pend) FREE_STACK_RETURN (REG_EESCAPE); /* Do not translate the character after the \, so that we can distinguish, e.g., \B from \b, even if we normally would translate, e.g., B to b. */ PATFETCH_RAW (c); switch (c) { case '(': if (syntax & RE_NO_BK_PARENS) goto normal_backslash; handle_open: bufp->re_nsub++; regnum++; if (COMPILE_STACK_FULL) { RETALLOC (compile_stack.stack, compile_stack.size << 1, compile_stack_elt_t); if (compile_stack.stack == NULL) return REG_ESPACE; compile_stack.size <<= 1; } /* These are the values to restore when we hit end of this group. They are all relative offsets, so that if the whole pattern moves because of realloc, they will still be valid. */ COMPILE_STACK_TOP.begalt_offset = begalt - bufp->buffer; COMPILE_STACK_TOP.fixup_alt_jump = fixup_alt_jump ? fixup_alt_jump - bufp->buffer + 1 : 0; COMPILE_STACK_TOP.laststart_offset = b - bufp->buffer; COMPILE_STACK_TOP.regnum = regnum; /* We will eventually replace the 0 with the number of groups inner to this one. But do not push a start_memory for groups beyond the last one we can represent in the compiled pattern. */ if (regnum <= MAX_REGNUM) { COMPILE_STACK_TOP.inner_group_offset = b - bufp->buffer + 2; BUF_PUSH_3 (start_memory, regnum, 0); } compile_stack.avail++; fixup_alt_jump = 0; laststart = 0; begalt = b; /* If we've reached MAX_REGNUM groups, then this open won't actually generate any code, so we'll have to clear pending_exact explicitly. */ pending_exact = 0; break; case ')': if (syntax & RE_NO_BK_PARENS) goto normal_backslash; if (COMPILE_STACK_EMPTY) { if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD) goto normal_backslash; else FREE_STACK_RETURN (REG_ERPAREN); } handle_close: if (fixup_alt_jump) { /* Push a dummy failure point at the end of the alternative for a possible future `pop_failure_jump' to pop. See comments at `push_dummy_failure' in `re_match_2'. */ BUF_PUSH (push_dummy_failure); /* We allocated space for this jump when we assigned to `fixup_alt_jump', in the `handle_alt' case below. */ STORE_JUMP (jump_past_alt, fixup_alt_jump, b - 1); } /* See similar code for backslashed left paren above. */ if (COMPILE_STACK_EMPTY) { if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD) goto normal_char; else FREE_STACK_RETURN (REG_ERPAREN); } /* Since we just checked for an empty stack above, this ``can't happen''. */ assert (compile_stack.avail != 0); { /* We don't just want to restore into `regnum', because later groups should continue to be numbered higher, as in `(ab)c(de)' -- the second group is #2. */ regnum_t this_group_regnum; compile_stack.avail--; begalt = bufp->buffer + COMPILE_STACK_TOP.begalt_offset; fixup_alt_jump = COMPILE_STACK_TOP.fixup_alt_jump ? bufp->buffer + COMPILE_STACK_TOP.fixup_alt_jump - 1 : 0; laststart = bufp->buffer + COMPILE_STACK_TOP.laststart_offset; this_group_regnum = COMPILE_STACK_TOP.regnum; /* If we've reached MAX_REGNUM groups, then this open won't actually generate any code, so we'll have to clear pending_exact explicitly. */ pending_exact = 0; /* We're at the end of the group, so now we know how many groups were inside this one. */ if (this_group_regnum <= MAX_REGNUM) { unsigned char *inner_group_loc = bufp->buffer + COMPILE_STACK_TOP.inner_group_offset; *inner_group_loc = regnum - this_group_regnum; BUF_PUSH_3 (stop_memory, this_group_regnum, regnum - this_group_regnum); } } break; case '|': /* `\|'. */ if (syntax & RE_LIMITED_OPS || syntax & RE_NO_BK_VBAR) goto normal_backslash; handle_alt: if (syntax & RE_LIMITED_OPS) goto normal_char; /* Insert before the previous alternative a jump which jumps to this alternative if the former fails. */ GET_BUFFER_SPACE (3); INSERT_JUMP (on_failure_jump, begalt, b + 6); pending_exact = 0; b += 3; /* The alternative before this one has a jump after it which gets executed if it gets matched. Adjust that jump so it will jump to this alternative's analogous jump (put in below, which in turn will jump to the next (if any) alternative's such jump, etc.). The last such jump jumps to the correct final destination. A picture: _____ _____ | | | | | v | v a | b | c If we are at `b', then fixup_alt_jump right now points to a three-byte space after `a'. We'll put in the jump, set fixup_alt_jump to right after `b', and leave behind three bytes which we'll fill in when we get to after `c'. */ if (fixup_alt_jump) STORE_JUMP (jump_past_alt, fixup_alt_jump, b); /* Mark and leave space for a jump after this alternative, to be filled in later either by next alternative or when know we're at the end of a series of alternatives. */ fixup_alt_jump = b; GET_BUFFER_SPACE (3); b += 3; laststart = 0; begalt = b; break; case '{': /* If \{ is a literal. */ if (!(syntax & RE_INTERVALS) /* If we're at `\{' and it's not the open-interval operator. */ || (syntax & RE_NO_BK_BRACES)) goto normal_backslash; handle_interval: { /* If got here, then the syntax allows intervals. */ /* At least (most) this many matches must be made. */ int lower_bound = -1, upper_bound = -1; beg_interval = p - 1; if (p == pend) { if (!(syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) goto unfetch_interval; else FREE_STACK_RETURN (REG_EBRACE); } GET_UNSIGNED_NUMBER (lower_bound); if (c == ',') { GET_UNSIGNED_NUMBER (upper_bound); if ((!(syntax & RE_NO_BK_BRACES) && c != '\\') || ((syntax & RE_NO_BK_BRACES) && c != '}')) FREE_STACK_RETURN (REG_BADBR); if (upper_bound < 0) upper_bound = RE_DUP_MAX; } else /* Interval such as `{1}' => match exactly once. */ upper_bound = lower_bound; if (lower_bound < 0 || upper_bound > RE_DUP_MAX || lower_bound > upper_bound) { if (!(syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) goto unfetch_interval; else FREE_STACK_RETURN (REG_BADBR); } if (!(syntax & RE_NO_BK_BRACES)) { if (c != '\\') FREE_STACK_RETURN (REG_EBRACE); PATFETCH (c); } if (c != '}') { if (!(syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) goto unfetch_interval; else FREE_STACK_RETURN (REG_BADBR); } /* We just parsed a valid interval. */ /* If it's invalid to have no preceding re. */ if (!laststart) { if (syntax & RE_CONTEXT_INVALID_OPS) FREE_STACK_RETURN (REG_BADRPT); else if (syntax & RE_CONTEXT_INDEP_OPS) laststart = b; else goto unfetch_interval; } /* If the upper bound is zero, don't want to succeed at all; jump from `laststart' to `b + 3', which will be the end of the buffer after we insert the jump. */ if (upper_bound == 0) { GET_BUFFER_SPACE (3); INSERT_JUMP (jump, laststart, b + 3); b += 3; } /* Otherwise, we have a nontrivial interval. When we're all done, the pattern will look like: set_number_at set_number_at succeed_n jump_n (The upper bound and `jump_n' are omitted if `upper_bound' is 1, though.) */ else { /* If the upper bound is > 1, we need to insert more at the end of the loop. */ unsigned nbytes = 10 + (upper_bound > 1) * 10; GET_BUFFER_SPACE (nbytes); /* Initialize lower bound of the `succeed_n', even though it will be set during matching by its attendant `set_number_at' (inserted next), because `re_compile_fastmap' needs to know. Jump to the `jump_n' we might insert below. */ INSERT_JUMP2 (succeed_n, laststart, b + 5 + (upper_bound > 1) * 5, lower_bound); b += 5; /* Code to initialize the lower bound. Insert before the `succeed_n'. The `5' is the last two bytes of this `set_number_at', plus 3 bytes of the following `succeed_n'. */ insert_op2 (set_number_at, laststart, 5, lower_bound, b); b += 5; if (upper_bound > 1) { /* More than one repetition is allowed, so append a backward jump to the `succeed_n' that starts this interval. When we've reached this during matching, we'll have matched the interval once, so jump back only `upper_bound - 1' times. */ STORE_JUMP2 (jump_n, b, laststart + 5, upper_bound - 1); b += 5; /* The location we want to set is the second parameter of the `jump_n'; that is `b-2' as an absolute address. `laststart' will be the `set_number_at' we're about to insert; `laststart+3' the number to set, the source for the relative address. But we are inserting into the middle of the pattern -- so everything is getting moved up by 5. Conclusion: (b - 2) - (laststart + 3) + 5, i.e., b - laststart. We insert this at the beginning of the loop so that if we fail during matching, we'll reinitialize the bounds. */ insert_op2 (set_number_at, laststart, b - laststart, upper_bound - 1, b); b += 5; } } pending_exact = 0; beg_interval = NULL; } break; unfetch_interval: /* If an invalid interval, match the characters as literals. */ assert (beg_interval); p = beg_interval; beg_interval = NULL; /* normal_char and normal_backslash need `c'. */ PATFETCH (c); if (!(syntax & RE_NO_BK_BRACES)) { if (p > pattern && p[-1] == '\\') goto normal_backslash; } goto normal_char; #ifdef emacs /* There is no way to specify the before_dot and after_dot operators. rms says this is ok. --karl */ case '=': BUF_PUSH (at_dot); break; case 's': laststart = b; PATFETCH (c); BUF_PUSH_2 (syntaxspec, syntax_spec_code[c]); break; case 'S': laststart = b; PATFETCH (c); BUF_PUSH_2 (notsyntaxspec, syntax_spec_code[c]); break; #endif /* emacs */ case 'w': if (syntax & RE_NO_GNU_OPS) goto normal_char; laststart = b; BUF_PUSH (wordchar); break; case 'W': if (syntax & RE_NO_GNU_OPS) goto normal_char; laststart = b; BUF_PUSH (notwordchar); break; case '<': if (syntax & RE_NO_GNU_OPS) goto normal_char; BUF_PUSH (wordbeg); break; case '>': if (syntax & RE_NO_GNU_OPS) goto normal_char; BUF_PUSH (wordend); break; case 'b': if (syntax & RE_NO_GNU_OPS) goto normal_char; BUF_PUSH (wordbound); break; case 'B': if (syntax & RE_NO_GNU_OPS) goto normal_char; BUF_PUSH (notwordbound); break; case '`': if (syntax & RE_NO_GNU_OPS) goto normal_char; BUF_PUSH (begbuf); break; case '\'': if (syntax & RE_NO_GNU_OPS) goto normal_char; BUF_PUSH (endbuf); break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (syntax & RE_NO_BK_REFS) goto normal_char; c1 = c - '0'; if (c1 > regnum) FREE_STACK_RETURN (REG_ESUBREG); /* Can't back reference to a subexpression if inside of it. */ if (group_in_compile_stack (compile_stack, (regnum_t) c1)) goto normal_char; laststart = b; BUF_PUSH_2 (duplicate, c1); break; case '+': case '?': if (syntax & RE_BK_PLUS_QM) goto handle_plus; else goto normal_backslash; default: normal_backslash: /* You might think it would be useful for \ to mean not to translate; but if we don't translate it it will never match anything. */ c = TRANSLATE (c); goto normal_char; } break; default: /* Expects the character in `c'. */ normal_char: /* If no exactn currently being built. */ if (!pending_exact /* If last exactn not at current position. */ || pending_exact + *pending_exact + 1 != b /* We have only one byte following the exactn for the count. */ || *pending_exact == (1 << BYTEWIDTH) - 1 /* If followed by a repetition operator. */ || *p == '*' || *p == '^' || ((syntax & RE_BK_PLUS_QM) ? *p == '\\' && (p[1] == '+' || p[1] == '?') : (*p == '+' || *p == '?')) || ((syntax & RE_INTERVALS) && ((syntax & RE_NO_BK_BRACES) ? *p == '{' : (p[0] == '\\' && p[1] == '{')))) { /* Start building a new exactn. */ laststart = b; BUF_PUSH_2 (exactn, 0); pending_exact = b - 1; } BUF_PUSH (c); (*pending_exact)++; break; } /* switch (c) */ } /* while p != pend */ /* Through the pattern now. */ if (fixup_alt_jump) STORE_JUMP (jump_past_alt, fixup_alt_jump, b); if (!COMPILE_STACK_EMPTY) FREE_STACK_RETURN (REG_EPAREN); /* If we don't want backtracking, force success the first time we reach the end of the compiled pattern. */ if (syntax & RE_NO_POSIX_BACKTRACKING) BUF_PUSH (succeed); free (compile_stack.stack); /* We have succeeded; set the length of the buffer. */ bufp->used = b - bufp->buffer; #ifdef DEBUG if (debug) { DEBUG_PRINT1 ("\nCompiled pattern: \n"); print_compiled_pattern (bufp); } #endif /* DEBUG */ #ifndef MATCH_MAY_ALLOCATE /* Initialize the failure stack to the largest possible stack. This isn't necessary unless we're trying to avoid calling alloca in the search and match routines. */ { int num_regs = bufp->re_nsub + 1; /* Since DOUBLE_FAIL_STACK refuses to double only if the current size is strictly greater than re_max_failures, the largest possible stack is 2 * re_max_failures failure points. */ if (fail_stack.size < (2 * re_max_failures * MAX_FAILURE_ITEMS)) { fail_stack.size = (2 * re_max_failures * MAX_FAILURE_ITEMS); # ifdef emacs if (! fail_stack.stack) fail_stack.stack = (fail_stack_elt_t *) xmalloc (fail_stack.size * sizeof (fail_stack_elt_t)); else fail_stack.stack = (fail_stack_elt_t *) xrealloc (fail_stack.stack, (fail_stack.size * sizeof (fail_stack_elt_t))); # else /* not emacs */ if (! fail_stack.stack) fail_stack.stack = (fail_stack_elt_t *) malloc (fail_stack.size * sizeof (fail_stack_elt_t)); else fail_stack.stack = (fail_stack_elt_t *) realloc (fail_stack.stack, (fail_stack.size * sizeof (fail_stack_elt_t))); # endif /* not emacs */ } regex_grow_registers (num_regs); } #endif /* not MATCH_MAY_ALLOCATE */ return REG_NOERROR; } /* regex_compile */ /* Subroutines for `regex_compile'. */ /* Store OP at LOC followed by two-byte integer parameter ARG. */ static void store_op1 (op, loc, arg) re_opcode_t op; unsigned char *loc; int arg; { *loc = (unsigned char) op; STORE_NUMBER (loc + 1, arg); } /* Like `store_op1', but for two two-byte parameters ARG1 and ARG2. */ static void store_op2 (op, loc, arg1, arg2) re_opcode_t op; unsigned char *loc; int arg1, arg2; { *loc = (unsigned char) op; STORE_NUMBER (loc + 1, arg1); STORE_NUMBER (loc + 3, arg2); } /* Copy the bytes from LOC to END to open up three bytes of space at LOC for OP followed by two-byte integer parameter ARG. */ static void insert_op1 (op, loc, arg, end) re_opcode_t op; unsigned char *loc; int arg; unsigned char *end; { register unsigned char *pfrom = end; register unsigned char *pto = end + 3; while (pfrom != loc) *--pto = *--pfrom; store_op1 (op, loc, arg); } /* Like `insert_op1', but for two two-byte parameters ARG1 and ARG2. */ static void insert_op2 (op, loc, arg1, arg2, end) re_opcode_t op; unsigned char *loc; int arg1, arg2; unsigned char *end; { register unsigned char *pfrom = end; register unsigned char *pto = end + 5; while (pfrom != loc) *--pto = *--pfrom; store_op2 (op, loc, arg1, arg2); } /* P points to just after a ^ in PATTERN. Return true if that ^ comes after an alternative or a begin-subexpression. We assume there is at least one character before the ^. */ static boolean at_begline_loc_p (pattern, p, syntax) const char *pattern, *p; reg_syntax_t syntax; { const char *prev = p - 2; boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\'; return /* After a subexpression? */ (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash)) /* After an alternative? */ || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash)); } /* The dual of at_begline_loc_p. This one is for $. We assume there is at least one character after the $, i.e., `P < PEND'. */ static boolean at_endline_loc_p (p, pend, syntax) const char *p, *pend; reg_syntax_t syntax; { const char *next = p; boolean next_backslash = *next == '\\'; const char *next_next = p + 1 < pend ? p + 1 : 0; return /* Before a subexpression? */ (syntax & RE_NO_BK_PARENS ? *next == ')' : next_backslash && next_next && *next_next == ')') /* Before an alternative? */ || (syntax & RE_NO_BK_VBAR ? *next == '|' : next_backslash && next_next && *next_next == '|'); } /* Returns true if REGNUM is in one of COMPILE_STACK's elements and false if it's not. */ static boolean group_in_compile_stack (compile_stack, regnum) compile_stack_type compile_stack; regnum_t regnum; { int this_element; for (this_element = compile_stack.avail - 1; this_element >= 0; this_element--) if (compile_stack.stack[this_element].regnum == regnum) return true; return false; } /* Read the ending character of a range (in a bracket expression) from the uncompiled pattern *P_PTR (which ends at PEND). We assume the starting character is in `P[-2]'. (`P[-1]' is the character `-'.) Then we set the translation of all bits between the starting and ending characters (inclusive) in the compiled pattern B. Return an error code. We use these short variable names so we can use the same macros as `regex_compile' itself. */ static reg_errcode_t compile_range (range_start_char, p_ptr, pend, translate, syntax, b) unsigned int range_start_char; const char **p_ptr, *pend; RE_TRANSLATE_TYPE translate; reg_syntax_t syntax; unsigned char *b; { unsigned this_char; const char *p = *p_ptr; reg_errcode_t ret; #if _LIBC const unsigned char *collseq; unsigned int start_colseq; unsigned int end_colseq; #else unsigned end_char; #endif if (p == pend) return REG_ERANGE; /* Have to increment the pointer into the pattern string, so the caller isn't still at the ending character. */ (*p_ptr)++; /* Report an error if the range is empty and the syntax prohibits this. */ ret = syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR; #if _LIBC collseq = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); start_colseq = collseq[(unsigned char) TRANSLATE (range_start_char)]; end_colseq = collseq[(unsigned char) TRANSLATE (p[0])]; for (this_char = 0; this_char <= (unsigned char) -1; ++this_char) { unsigned int this_colseq = collseq[(unsigned char) TRANSLATE (this_char)]; if (start_colseq <= this_colseq && this_colseq <= end_colseq) { SET_LIST_BIT (TRANSLATE (this_char)); ret = REG_NOERROR; } } #else /* Here we see why `this_char' has to be larger than an `unsigned char' -- we would otherwise go into an infinite loop, since all characters <= 0xff. */ range_start_char = TRANSLATE (range_start_char); end_char = TRANSLATE (p[0]); for (this_char = range_start_char; this_char <= end_char; ++this_char) { SET_LIST_BIT (TRANSLATE (this_char)); ret = REG_NOERROR; } #endif return ret; } /* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in BUFP. A fastmap records which of the (1 << BYTEWIDTH) possible characters can start a string that matches the pattern. This fastmap is used by re_search to skip quickly over impossible starting points. The caller must supply the address of a (1 << BYTEWIDTH)-byte data area as BUFP->fastmap. We set the `fastmap', `fastmap_accurate', and `can_be_null' fields in the pattern buffer. Returns 0 if we succeed, -2 if an internal error. */ int re_compile_fastmap (bufp) struct re_pattern_buffer *bufp; { int j, k; #ifdef MATCH_MAY_ALLOCATE fail_stack_type fail_stack; #endif #ifndef REGEX_MALLOC char *destination; #endif register char *fastmap = bufp->fastmap; unsigned char *pattern = bufp->buffer; unsigned char *p = pattern; register unsigned char *pend = pattern + bufp->used; #ifdef REL_ALLOC /* This holds the pointer to the failure stack, when it is allocated relocatably. */ fail_stack_elt_t *failure_stack_ptr; #endif /* Assume that each path through the pattern can be null until proven otherwise. We set this false at the bottom of switch statement, to which we get only if a particular path doesn't match the empty string. */ boolean path_can_be_null = true; /* We aren't doing a `succeed_n' to begin with. */ boolean succeed_n_p = false; assert (fastmap != NULL && p != NULL); INIT_FAIL_STACK (); bzero (fastmap, 1 << BYTEWIDTH); /* Assume nothing's valid. */ bufp->fastmap_accurate = 1; /* It will be when we're done. */ bufp->can_be_null = 0; while (1) { if (p == pend || *p == succeed) { /* We have reached the (effective) end of pattern. */ if (!FAIL_STACK_EMPTY ()) { bufp->can_be_null |= path_can_be_null; /* Reset for next path. */ path_can_be_null = true; p = fail_stack.stack[--fail_stack.avail].pointer; continue; } else break; } /* We should never be about to go beyond the end of the pattern. */ assert (p < pend); switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++)) { /* I guess the idea here is to simply not bother with a fastmap if a backreference is used, since it's too hard to figure out the fastmap for the corresponding group. Setting `can_be_null' stops `re_search_2' from using the fastmap, so that is all we do. */ case duplicate: bufp->can_be_null = 1; goto done; /* Following are the cases which match a character. These end with `break'. */ case exactn: fastmap[p[1]] = 1; break; case charset: for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--) if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))) fastmap[j] = 1; break; case charset_not: /* Chars beyond end of map must be allowed. */ for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++) fastmap[j] = 1; for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--) if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))) fastmap[j] = 1; break; case wordchar: for (j = 0; j < (1 << BYTEWIDTH); j++) if (SYNTAX (j) == Sword) fastmap[j] = 1; break; case notwordchar: for (j = 0; j < (1 << BYTEWIDTH); j++) if (SYNTAX (j) != Sword) fastmap[j] = 1; break; case anychar: { int fastmap_newline = fastmap['\n']; /* `.' matches anything ... */ for (j = 0; j < (1 << BYTEWIDTH); j++) fastmap[j] = 1; /* ... except perhaps newline. */ if (!(bufp->syntax & RE_DOT_NEWLINE)) fastmap['\n'] = fastmap_newline; /* Return if we have already set `can_be_null'; if we have, then the fastmap is irrelevant. Something's wrong here. */ else if (bufp->can_be_null) goto done; /* Otherwise, have to check alternative paths. */ break; } #ifdef emacs case syntaxspec: k = *p++; for (j = 0; j < (1 << BYTEWIDTH); j++) if (SYNTAX (j) == (enum syntaxcode) k) fastmap[j] = 1; break; case notsyntaxspec: k = *p++; for (j = 0; j < (1 << BYTEWIDTH); j++) if (SYNTAX (j) != (enum syntaxcode) k) fastmap[j] = 1; break; /* All cases after this match the empty string. These end with `continue'. */ case before_dot: case at_dot: case after_dot: continue; #endif /* emacs */ case no_op: case begline: case endline: case begbuf: case endbuf: case wordbound: case notwordbound: case wordbeg: case wordend: case push_dummy_failure: continue; case jump_n: case pop_failure_jump: case maybe_pop_jump: case jump: case jump_past_alt: case dummy_failure_jump: EXTRACT_NUMBER_AND_INCR (j, p); p += j; if (j > 0) continue; /* Jump backward implies we just went through the body of a loop and matched nothing. Opcode jumped to should be `on_failure_jump' or `succeed_n'. Just treat it like an ordinary jump. For a * loop, it has pushed its failure point already; if so, discard that as redundant. */ if ((re_opcode_t) *p != on_failure_jump && (re_opcode_t) *p != succeed_n) continue; p++; EXTRACT_NUMBER_AND_INCR (j, p); p += j; /* If what's on the stack is where we are now, pop it. */ if (!FAIL_STACK_EMPTY () && fail_stack.stack[fail_stack.avail - 1].pointer == p) fail_stack.avail--; continue; case on_failure_jump: case on_failure_keep_string_jump: handle_on_failure_jump: EXTRACT_NUMBER_AND_INCR (j, p); /* For some patterns, e.g., `(a?)?', `p+j' here points to the end of the pattern. We don't want to push such a point, since when we restore it above, entering the switch will increment `p' past the end of the pattern. We don't need to push such a point since we obviously won't find any more fastmap entries beyond `pend'. Such a pattern can match the null string, though. */ if (p + j < pend) { if (!PUSH_PATTERN_OP (p + j, fail_stack)) { RESET_FAIL_STACK (); return -2; } } else bufp->can_be_null = 1; if (succeed_n_p) { EXTRACT_NUMBER_AND_INCR (k, p); /* Skip the n. */ succeed_n_p = false; } continue; case succeed_n: /* Get to the number of times to succeed. */ p += 2; /* Increment p past the n for when k != 0. */ EXTRACT_NUMBER_AND_INCR (k, p); if (k == 0) { p -= 4; succeed_n_p = true; /* Spaghetti code alert. */ goto handle_on_failure_jump; } continue; case set_number_at: p += 4; continue; case start_memory: case stop_memory: p += 2; continue; default: abort (); /* We have listed all the cases. */ } /* switch *p++ */ /* Getting here means we have found the possible starting characters for one path of the pattern -- and that the empty string does not match. We need not follow this path further. Instead, look at the next alternative (remembered on the stack), or quit if no more. The test at the top of the loop does these things. */ path_can_be_null = false; p = pend; } /* while p */ /* Set `can_be_null' for the last path (also the first path, if the pattern is empty). */ bufp->can_be_null |= path_can_be_null; done: RESET_FAIL_STACK (); return 0; } /* re_compile_fastmap */ #ifdef _LIBC weak_alias (__re_compile_fastmap, re_compile_fastmap) #endif /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated using the malloc library routine, and must each be at least NUM_REGS * sizeof (regoff_t) bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using PATTERN_BUFFER will allocate its own register data, without freeing the old data. */ void re_set_registers (bufp, regs, num_regs, starts, ends) struct re_pattern_buffer *bufp; struct re_registers *regs; unsigned num_regs; regoff_t *starts, *ends; { if (num_regs) { bufp->regs_allocated = REGS_REALLOCATE; regs->num_regs = num_regs; regs->start = starts; regs->end = ends; } else { bufp->regs_allocated = REGS_UNALLOCATED; regs->num_regs = 0; regs->start = regs->end = (regoff_t *) 0; } } #ifdef _LIBC weak_alias (__re_set_registers, re_set_registers) #endif /* Searching routines. */ /* Like re_search_2, below, but only one string is specified, and doesn't let you say where to stop matching. */ int re_search (bufp, string, size, startpos, range, regs) struct re_pattern_buffer *bufp; const char *string; int size, startpos, range; struct re_registers *regs; { return re_search_2 (bufp, NULL, 0, string, size, startpos, range, regs, size); } #ifdef _LIBC weak_alias (__re_search, re_search) #endif /* Using the compiled pattern in BUFP->buffer, first tries to match the virtual concatenation of STRING1 and STRING2, starting first at index STARTPOS, then at STARTPOS + 1, and so on. STRING1 and STRING2 have length SIZE1 and SIZE2, respectively. RANGE is how far to scan while trying to match. RANGE = 0 means try only at STARTPOS; in general, the last start tried is STARTPOS + RANGE. In REGS, return the indices of the virtual concatenation of STRING1 and STRING2 that matched the entire BUFP->buffer and its contained subexpressions. Do not consider matching one past the index STOP in the virtual concatenation of STRING1 and STRING2. We return either the position in the strings at which the match was found, -1 if no match, or -2 if error (such as failure stack overflow). */ int re_search_2 (bufp, string1, size1, string2, size2, startpos, range, regs, stop) struct re_pattern_buffer *bufp; const char *string1, *string2; int size1, size2; int startpos; int range; struct re_registers *regs; int stop; { int val; register char *fastmap = bufp->fastmap; register RE_TRANSLATE_TYPE translate = bufp->translate; int total_size = size1 + size2; int endpos = startpos + range; /* Check for out-of-range STARTPOS. */ if (startpos < 0 || startpos > total_size) return -1; /* Fix up RANGE if it might eventually take us outside the virtual concatenation of STRING1 and STRING2. Make sure we won't move STARTPOS below 0 or above TOTAL_SIZE. */ if (endpos < 0) range = 0 - startpos; else if (endpos > total_size) range = total_size - startpos; /* If the search isn't to be a backwards one, don't waste time in a search for a pattern that must be anchored. */ if (bufp->used > 0 && range > 0 && ((re_opcode_t) bufp->buffer[0] == begbuf /* `begline' is like `begbuf' if it cannot match at newlines. */ || ((re_opcode_t) bufp->buffer[0] == begline && !bufp->newline_anchor))) { if (startpos > 0) return -1; else range = 1; } #ifdef emacs /* In a forward search for something that starts with \=. don't keep searching past point. */ if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == at_dot && range > 0) { range = PT - startpos; if (range <= 0) return -1; } #endif /* emacs */ /* Update the fastmap now if not correct already. */ if (fastmap && !bufp->fastmap_accurate) if (re_compile_fastmap (bufp) == -2) return -2; /* Loop through the string, looking for a place to start matching. */ for (;;) { /* If a fastmap is supplied, skip quickly over characters that cannot be the start of a match. If the pattern can match the null string, however, we don't need to skip characters; we want the first null string. */ if (fastmap && startpos < total_size && !bufp->can_be_null) { if (range > 0) /* Searching forwards. */ { register const char *d; register int lim = 0; int irange = range; if (startpos < size1 && startpos + range >= size1) lim = range - (size1 - startpos); d = (startpos >= size1 ? string2 - size1 : string1) + startpos; /* Written out as an if-else to avoid testing `translate' inside the loop. */ if (translate) while (range > lim && !fastmap[(unsigned char) translate[(unsigned char) *d++]]) range--; else while (range > lim && !fastmap[(unsigned char) *d++]) range--; startpos += irange - range; } else /* Searching backwards. */ { register char c = (size1 == 0 || startpos >= size1 ? string2[startpos - size1] : string1[startpos]); if (!fastmap[(unsigned char) TRANSLATE (c)]) goto advance; } } /* If can't match the null string, and that's all we have left, fail. */ if (range >= 0 && startpos == total_size && fastmap && !bufp->can_be_null) return -1; val = re_match_2_internal (bufp, string1, size1, string2, size2, startpos, regs, stop); #ifndef REGEX_MALLOC # ifdef C_ALLOCA alloca (0); # endif #endif if (val >= 0) return startpos; if (val == -2) return -2; advance: if (!range) break; else if (range > 0) { range--; startpos++; } else { range++; startpos--; } } return -1; } /* re_search_2 */ #ifdef _LIBC weak_alias (__re_search_2, re_search_2) #endif /* This converts PTR, a pointer into one of the search strings `string1' and `string2' into an offset from the beginning of that string. */ #define POINTER_TO_OFFSET(ptr) \ (FIRST_STRING_P (ptr) \ ? ((regoff_t) ((ptr) - string1)) \ : ((regoff_t) ((ptr) - string2 + size1))) /* Macros for dealing with the split strings in re_match_2. */ #define MATCHING_IN_FIRST_STRING (dend == end_match_1) /* Call before fetching a character with *d. This switches over to string2 if necessary. */ #define PREFETCH() \ while (d == dend) \ { \ /* End of string2 => fail. */ \ if (dend == end_match_2) \ goto fail; \ /* End of string1 => advance to string2. */ \ d = string2; \ dend = end_match_2; \ } /* Test if at very beginning or at very end of the virtual concatenation of `string1' and `string2'. If only one string, it's `string2'. */ #define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2) #define AT_STRINGS_END(d) ((d) == end2) /* Test if D points to a character which is word-constituent. We have two special cases to check for: if past the end of string1, look at the first character in string2; and if before the beginning of string2, look at the last character in string1. */ #define WORDCHAR_P(d) \ (SYNTAX ((d) == end1 ? *string2 \ : (d) == string2 - 1 ? *(end1 - 1) : *(d)) \ == Sword) /* Disabled due to a compiler bug -- see comment at case wordbound */ #if 0 /* Test if the character before D and the one at D differ with respect to being word-constituent. */ #define AT_WORD_BOUNDARY(d) \ (AT_STRINGS_BEG (d) || AT_STRINGS_END (d) \ || WORDCHAR_P (d - 1) != WORDCHAR_P (d)) #endif /* Free everything we malloc. */ #ifdef MATCH_MAY_ALLOCATE # define FREE_VAR(var) if (var) REGEX_FREE (var); var = NULL # define FREE_VARIABLES() \ do { \ REGEX_FREE_STACK (fail_stack.stack); \ FREE_VAR (regstart); \ FREE_VAR (regend); \ FREE_VAR (old_regstart); \ FREE_VAR (old_regend); \ FREE_VAR (best_regstart); \ FREE_VAR (best_regend); \ FREE_VAR (reg_info); \ FREE_VAR (reg_dummy); \ FREE_VAR (reg_info_dummy); \ } while (0) #else # define FREE_VARIABLES() ((void)0) /* Do nothing! But inhibit gcc warning. */ #endif /* not MATCH_MAY_ALLOCATE */ /* These values must meet several constraints. They must not be valid register values; since we have a limit of 255 registers (because we use only one byte in the pattern for the register number), we can use numbers larger than 255. They must differ by 1, because of NUM_FAILURE_ITEMS above. And the value for the lowest register must be larger than the value for the highest register, so we do not try to actually save any registers when none are active. */ #define NO_HIGHEST_ACTIVE_REG (1 << BYTEWIDTH) #define NO_LOWEST_ACTIVE_REG (NO_HIGHEST_ACTIVE_REG + 1) /* Matching routines. */ #ifndef emacs /* Emacs never uses this. */ /* re_match is like re_match_2 except it takes only a single string. */ int re_match (bufp, string, size, pos, regs) struct re_pattern_buffer *bufp; const char *string; int size, pos; struct re_registers *regs; { int result = re_match_2_internal (bufp, NULL, 0, string, size, pos, regs, size); # ifndef REGEX_MALLOC # ifdef C_ALLOCA alloca (0); # endif # endif return result; } # ifdef _LIBC weak_alias (__re_match, re_match) # endif #endif /* not emacs */ static boolean group_match_null_string_p _RE_ARGS ((unsigned char **p, unsigned char *end, register_info_type *reg_info)); static boolean alt_match_null_string_p _RE_ARGS ((unsigned char *p, unsigned char *end, register_info_type *reg_info)); static boolean common_op_match_null_string_p _RE_ARGS ((unsigned char **p, unsigned char *end, register_info_type *reg_info)); static int bcmp_translate _RE_ARGS ((const char *s1, const char *s2, int len, char *translate)); /* re_match_2 matches the compiled pattern in BUFP against the the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1 and SIZE2, respectively). We start matching at POS, and stop matching at STOP. If REGS is non-null and the `no_sub' field of BUFP is nonzero, we store offsets for the substring each group matched in REGS. See the documentation for exactly how many groups we fill. We return -1 if no match, -2 if an internal error (such as the failure stack overflowing). Otherwise, we return the length of the matched substring. */ int re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop) struct re_pattern_buffer *bufp; const char *string1, *string2; int size1, size2; int pos; struct re_registers *regs; int stop; { int result = re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop); #ifndef REGEX_MALLOC # ifdef C_ALLOCA alloca (0); # endif #endif return result; } #ifdef _LIBC weak_alias (__re_match_2, re_match_2) #endif /* This is a separate function so that we can force an alloca cleanup afterwards. */ static int re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop) struct re_pattern_buffer *bufp; const char *string1, *string2; int size1, size2; int pos; struct re_registers *regs; int stop; { /* General temporaries. */ int mcnt; unsigned char *p1; /* Just past the end of the corresponding string. */ const char *end1, *end2; /* Pointers into string1 and string2, just past the last characters in each to consider matching. */ const char *end_match_1, *end_match_2; /* Where we are in the data, and the end of the current string. */ const char *d, *dend; /* Where we are in the pattern, and the end of the pattern. */ unsigned char *p = bufp->buffer; register unsigned char *pend = p + bufp->used; /* Mark the opcode just after a start_memory, so we can test for an empty subpattern when we get to the stop_memory. */ unsigned char *just_past_start_mem = 0; /* We use this to map every character in the string. */ RE_TRANSLATE_TYPE translate = bufp->translate; /* Failure point stack. Each place that can handle a failure further down the line pushes a failure point on this stack. It consists of restart, regend, and reg_info for all registers corresponding to the subexpressions we're currently inside, plus the number of such registers, and, finally, two char *'s. The first char * is where to resume scanning the pattern; the second one is where to resume scanning the strings. If the latter is zero, the failure point is a ``dummy''; if a failure happens and the failure point is a dummy, it gets discarded and the next next one is tried. */ #ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global. */ fail_stack_type fail_stack; #endif #ifdef DEBUG static unsigned failure_id; unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0; #endif #ifdef REL_ALLOC /* This holds the pointer to the failure stack, when it is allocated relocatably. */ fail_stack_elt_t *failure_stack_ptr; #endif /* We fill all the registers internally, independent of what we return, for use in backreferences. The number here includes an element for register zero. */ size_t num_regs = bufp->re_nsub + 1; /* The currently active registers. */ active_reg_t lowest_active_reg = NO_LOWEST_ACTIVE_REG; active_reg_t highest_active_reg = NO_HIGHEST_ACTIVE_REG; /* Information on the contents of registers. These are pointers into the input strings; they record just what was matched (on this attempt) by a subexpression part of the pattern, that is, the regnum-th regstart pointer points to where in the pattern we began matching and the regnum-th regend points to right after where we stopped matching the regnum-th subexpression. (The zeroth register keeps track of what the whole pattern matches.) */ #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ const char **regstart, **regend; #endif /* If a group that's operated upon by a repetition operator fails to match anything, then the register for its start will need to be restored because it will have been set to wherever in the string we are when we last see its open-group operator. Similarly for a register's end. */ #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ const char **old_regstart, **old_regend; #endif /* The is_active field of reg_info helps us keep track of which (possibly nested) subexpressions we are currently in. The matched_something field of reg_info[reg_num] helps us tell whether or not we have matched any of the pattern so far this time through the reg_num-th subexpression. These two fields get reset each time through any loop their register is in. */ #ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global. */ register_info_type *reg_info; #endif /* The following record the register info as found in the above variables when we find a match better than any we've seen before. This happens as we backtrack through the failure points, which in turn happens only if we have not yet matched the entire string. */ unsigned best_regs_set = false; #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ const char **best_regstart, **best_regend; #endif /* Logically, this is `best_regend[0]'. But we don't want to have to allocate space for that if we're not allocating space for anything else (see below). Also, we never need info about register 0 for any of the other register vectors, and it seems rather a kludge to treat `best_regend' differently than the rest. So we keep track of the end of the best match so far in a separate variable. We initialize this to NULL so that when we backtrack the first time and need to test it, it's not garbage. */ const char *match_end = NULL; /* This helps SET_REGS_MATCHED avoid doing redundant work. */ int set_regs_matched_done = 0; /* Used when we pop values we don't care about. */ #ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */ const char **reg_dummy; register_info_type *reg_info_dummy; #endif #ifdef DEBUG /* Counts the total number of registers pushed. */ unsigned num_regs_pushed = 0; #endif DEBUG_PRINT1 ("\n\nEntering re_match_2.\n"); INIT_FAIL_STACK (); #ifdef MATCH_MAY_ALLOCATE /* Do not bother to initialize all the register variables if there are no groups in the pattern, as it takes a fair amount of time. If there are groups, we include space for register 0 (the whole pattern), even though we never use it, since it simplifies the array indexing. We should fix this. */ if (bufp->re_nsub) { regstart = REGEX_TALLOC (num_regs, const char *); regend = REGEX_TALLOC (num_regs, const char *); old_regstart = REGEX_TALLOC (num_regs, const char *); old_regend = REGEX_TALLOC (num_regs, const char *); best_regstart = REGEX_TALLOC (num_regs, const char *); best_regend = REGEX_TALLOC (num_regs, const char *); reg_info = REGEX_TALLOC (num_regs, register_info_type); reg_dummy = REGEX_TALLOC (num_regs, const char *); reg_info_dummy = REGEX_TALLOC (num_regs, register_info_type); if (!(regstart && regend && old_regstart && old_regend && reg_info && best_regstart && best_regend && reg_dummy && reg_info_dummy)) { FREE_VARIABLES (); return -2; } } else { /* We must initialize all our variables to NULL, so that `FREE_VARIABLES' doesn't try to free them. */ regstart = regend = old_regstart = old_regend = best_regstart = best_regend = reg_dummy = NULL; reg_info = reg_info_dummy = (register_info_type *) NULL; } #endif /* MATCH_MAY_ALLOCATE */ /* The starting position is bogus. */ if (pos < 0 || pos > size1 + size2) { FREE_VARIABLES (); return -1; } /* Initialize subexpression text positions to -1 to mark ones that no start_memory/stop_memory has been seen for. Also initialize the register information struct. */ for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++) { regstart[mcnt] = regend[mcnt] = old_regstart[mcnt] = old_regend[mcnt] = REG_UNSET_VALUE; REG_MATCH_NULL_STRING_P (reg_info[mcnt]) = MATCH_NULL_UNSET_VALUE; IS_ACTIVE (reg_info[mcnt]) = 0; MATCHED_SOMETHING (reg_info[mcnt]) = 0; EVER_MATCHED_SOMETHING (reg_info[mcnt]) = 0; } /* We move `string1' into `string2' if the latter's empty -- but not if `string1' is null. */ if (size2 == 0 && string1 != NULL) { string2 = string1; size2 = size1; string1 = 0; size1 = 0; } end1 = string1 + size1; end2 = string2 + size2; /* Compute where to stop matching, within the two strings. */ if (stop <= size1) { end_match_1 = string1 + stop; end_match_2 = string2; } else { end_match_1 = end1; end_match_2 = string2 + stop - size1; } /* `p' scans through the pattern as `d' scans through the data. `dend' is the end of the input string that `d' points within. `d' is advanced into the following input string whenever necessary, but this happens before fetching; therefore, at the beginning of the loop, `d' can be pointing at the end of a string, but it cannot equal `string2'. */ if (size1 > 0 && pos <= size1) { d = string1 + pos; dend = end_match_1; } else { d = string2 + pos - size1; dend = end_match_2; } DEBUG_PRINT1 ("The compiled pattern is:\n"); DEBUG_PRINT_COMPILED_PATTERN (bufp, p, pend); DEBUG_PRINT1 ("The string to match is: `"); DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2); DEBUG_PRINT1 ("'\n"); /* This loops over pattern commands. It exits by returning from the function if the match is complete, or it drops through if the match fails at this starting point in the input data. */ for (;;) { #ifdef _LIBC DEBUG_PRINT2 ("\n%p: ", p); #else DEBUG_PRINT2 ("\n0x%x: ", p); #endif if (p == pend) { /* End of pattern means we might have succeeded. */ DEBUG_PRINT1 ("end of pattern ... "); /* If we haven't matched the entire string, and we want the longest match, try backtracking. */ if (d != end_match_2) { /* 1 if this match ends in the same string (string1 or string2) as the best previous match. */ boolean same_str_p = (FIRST_STRING_P (match_end) == MATCHING_IN_FIRST_STRING); /* 1 if this match is the best seen so far. */ boolean best_match_p; /* AIX compiler got confused when this was combined with the previous declaration. */ if (same_str_p) best_match_p = d > match_end; else best_match_p = !MATCHING_IN_FIRST_STRING; DEBUG_PRINT1 ("backtracking.\n"); if (!FAIL_STACK_EMPTY ()) { /* More failure points to try. */ /* If exceeds best match so far, save it. */ if (!best_regs_set || best_match_p) { best_regs_set = true; match_end = d; DEBUG_PRINT1 ("\nSAVING match as best so far.\n"); for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++) { best_regstart[mcnt] = regstart[mcnt]; best_regend[mcnt] = regend[mcnt]; } } goto fail; } /* If no failure points, don't restore garbage. And if last match is real best match, don't restore second best one. */ else if (best_regs_set && !best_match_p) { restore_best_regs: /* Restore best match. It may happen that `dend == end_match_1' while the restored d is in string2. For example, the pattern `x.*y.*z' against the strings `x-' and `y-z-', if the two strings are not consecutive in memory. */ DEBUG_PRINT1 ("Restoring best registers.\n"); d = match_end; dend = ((d >= string1 && d <= end1) ? end_match_1 : end_match_2); for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++) { regstart[mcnt] = best_regstart[mcnt]; regend[mcnt] = best_regend[mcnt]; } } } /* d != end_match_2 */ succeed_label: DEBUG_PRINT1 ("Accepting match.\n"); /* If caller wants register contents data back, do it. */ if (regs && !bufp->no_sub) { /* Have the register data arrays been allocated? */ if (bufp->regs_allocated == REGS_UNALLOCATED) { /* No. So allocate them with malloc. We need one extra element beyond `num_regs' for the `-1' marker GNU code uses. */ regs->num_regs = MAX (RE_NREGS, num_regs + 1); regs->start = TALLOC (regs->num_regs, regoff_t); regs->end = TALLOC (regs->num_regs, regoff_t); if (regs->start == NULL || regs->end == NULL) { FREE_VARIABLES (); return -2; } bufp->regs_allocated = REGS_REALLOCATE; } else if (bufp->regs_allocated == REGS_REALLOCATE) { /* Yes. If we need more elements than were already allocated, reallocate them. If we need fewer, just leave it alone. */ if (regs->num_regs < num_regs + 1) { regs->num_regs = num_regs + 1; RETALLOC (regs->start, regs->num_regs, regoff_t); RETALLOC (regs->end, regs->num_regs, regoff_t); if (regs->start == NULL || regs->end == NULL) { FREE_VARIABLES (); return -2; } } } else { /* These braces fend off a "empty body in an else-statement" warning under GCC when assert expands to nothing. */ assert (bufp->regs_allocated == REGS_FIXED); } /* Convert the pointer data in `regstart' and `regend' to indices. Register zero has to be set differently, since we haven't kept track of any info for it. */ if (regs->num_regs > 0) { regs->start[0] = pos; regs->end[0] = (MATCHING_IN_FIRST_STRING ? ((regoff_t) (d - string1)) : ((regoff_t) (d - string2 + size1))); } /* Go through the first `min (num_regs, regs->num_regs)' registers, since that is all we initialized. */ for (mcnt = 1; (unsigned) mcnt < MIN (num_regs, regs->num_regs); mcnt++) { if (REG_UNSET (regstart[mcnt]) || REG_UNSET (regend[mcnt])) regs->start[mcnt] = regs->end[mcnt] = -1; else { regs->start[mcnt] = (regoff_t) POINTER_TO_OFFSET (regstart[mcnt]); regs->end[mcnt] = (regoff_t) POINTER_TO_OFFSET (regend[mcnt]); } } /* If the regs structure we return has more elements than were in the pattern, set the extra elements to -1. If we (re)allocated the registers, this is the case, because we always allocate enough to have at least one -1 at the end. */ for (mcnt = num_regs; (unsigned) mcnt < regs->num_regs; mcnt++) regs->start[mcnt] = regs->end[mcnt] = -1; } /* regs && !bufp->no_sub */ DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n", nfailure_points_pushed, nfailure_points_popped, nfailure_points_pushed - nfailure_points_popped); DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed); mcnt = d - pos - (MATCHING_IN_FIRST_STRING ? string1 : string2 - size1); DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt); FREE_VARIABLES (); return mcnt; } /* Otherwise match next pattern command. */ switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++)) { /* Ignore these. Used to ignore the n of succeed_n's which currently have n == 0. */ case no_op: DEBUG_PRINT1 ("EXECUTING no_op.\n"); break; case succeed: DEBUG_PRINT1 ("EXECUTING succeed.\n"); goto succeed_label; /* Match the next n pattern characters exactly. The following byte in the pattern defines n, and the n bytes after that are the characters to match. */ case exactn: mcnt = *p++; DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt); /* This is written out as an if-else so we don't waste time testing `translate' inside the loop. */ if (translate) { do { PREFETCH (); if ((unsigned char) translate[(unsigned char) *d++] != (unsigned char) *p++) goto fail; } while (--mcnt); } else { do { PREFETCH (); if (*d++ != (char) *p++) goto fail; } while (--mcnt); } SET_REGS_MATCHED (); break; /* Match any character except possibly a newline or a null. */ case anychar: DEBUG_PRINT1 ("EXECUTING anychar.\n"); PREFETCH (); if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n') || (bufp->syntax & RE_DOT_NOT_NULL && TRANSLATE (*d) == '\000')) goto fail; SET_REGS_MATCHED (); DEBUG_PRINT2 (" Matched `%d'.\n", *d); d++; break; case charset: case charset_not: { register unsigned char c; boolean not = (re_opcode_t) *(p - 1) == charset_not; DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : ""); PREFETCH (); c = TRANSLATE (*d); /* The character to match. */ /* Cast to `unsigned' instead of `unsigned char' in case the bit list is a full 32 bytes long. */ if (c < (unsigned) (*p * BYTEWIDTH) && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH))) not = !not; p += 1 + *p; if (!not) goto fail; SET_REGS_MATCHED (); d++; break; } /* The beginning of a group is represented by start_memory. The arguments are the register number in the next byte, and the number of groups inner to this one in the next. The text matched within the group is recorded (in the internal registers data structure) under the register number. */ case start_memory: DEBUG_PRINT3 ("EXECUTING start_memory %d (%d):\n", *p, p[1]); /* Find out if this group can match the empty string. */ p1 = p; /* To send to group_match_null_string_p. */ if (REG_MATCH_NULL_STRING_P (reg_info[*p]) == MATCH_NULL_UNSET_VALUE) REG_MATCH_NULL_STRING_P (reg_info[*p]) = group_match_null_string_p (&p1, pend, reg_info); /* Save the position in the string where we were the last time we were at this open-group operator in case the group is operated upon by a repetition operator, e.g., with `(a*)*b' against `ab'; then we want to ignore where we are now in the string in case this attempt to match fails. */ old_regstart[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p]) ? REG_UNSET (regstart[*p]) ? d : regstart[*p] : regstart[*p]; DEBUG_PRINT2 (" old_regstart: %d\n", POINTER_TO_OFFSET (old_regstart[*p])); regstart[*p] = d; DEBUG_PRINT2 (" regstart: %d\n", POINTER_TO_OFFSET (regstart[*p])); IS_ACTIVE (reg_info[*p]) = 1; MATCHED_SOMETHING (reg_info[*p]) = 0; /* Clear this whenever we change the register activity status. */ set_regs_matched_done = 0; /* This is the new highest active register. */ highest_active_reg = *p; /* If nothing was active before, this is the new lowest active register. */ if (lowest_active_reg == NO_LOWEST_ACTIVE_REG) lowest_active_reg = *p; /* Move past the register number and inner group count. */ p += 2; just_past_start_mem = p; break; /* The stop_memory opcode represents the end of a group. Its arguments are the same as start_memory's: the register number, and the number of inner groups. */ case stop_memory: DEBUG_PRINT3 ("EXECUTING stop_memory %d (%d):\n", *p, p[1]); /* We need to save the string position the last time we were at this close-group operator in case the group is operated upon by a repetition operator, e.g., with `((a*)*(b*)*)*' against `aba'; then we want to ignore where we are now in the string in case this attempt to match fails. */ old_regend[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p]) ? REG_UNSET (regend[*p]) ? d : regend[*p] : regend[*p]; DEBUG_PRINT2 (" old_regend: %d\n", POINTER_TO_OFFSET (old_regend[*p])); regend[*p] = d; DEBUG_PRINT2 (" regend: %d\n", POINTER_TO_OFFSET (regend[*p])); /* This register isn't active anymore. */ IS_ACTIVE (reg_info[*p]) = 0; /* Clear this whenever we change the register activity status. */ set_regs_matched_done = 0; /* If this was the only register active, nothing is active anymore. */ if (lowest_active_reg == highest_active_reg) { lowest_active_reg = NO_LOWEST_ACTIVE_REG; highest_active_reg = NO_HIGHEST_ACTIVE_REG; } else { /* We must scan for the new highest active register, since it isn't necessarily one less than now: consider (a(b)c(d(e)f)g). When group 3 ends, after the f), the new highest active register is 1. */ unsigned char r = *p - 1; while (r > 0 && !IS_ACTIVE (reg_info[r])) r--; /* If we end up at register zero, that means that we saved the registers as the result of an `on_failure_jump', not a `start_memory', and we jumped to past the innermost `stop_memory'. For example, in ((.)*) we save registers 1 and 2 as a result of the *, but when we pop back to the second ), we are at the stop_memory 1. Thus, nothing is active. */ if (r == 0) { lowest_active_reg = NO_LOWEST_ACTIVE_REG; highest_active_reg = NO_HIGHEST_ACTIVE_REG; } else highest_active_reg = r; } /* If just failed to match something this time around with a group that's operated on by a repetition operator, try to force exit from the ``loop'', and restore the register information for this group that we had before trying this last match. */ if ((!MATCHED_SOMETHING (reg_info[*p]) || just_past_start_mem == p - 1) && (p + 2) < pend) { boolean is_a_jump_n = false; p1 = p + 2; mcnt = 0; switch ((re_opcode_t) *p1++) { case jump_n: is_a_jump_n = true; case pop_failure_jump: case maybe_pop_jump: case jump: case dummy_failure_jump: EXTRACT_NUMBER_AND_INCR (mcnt, p1); if (is_a_jump_n) p1 += 2; break; default: /* do nothing */ ; } p1 += mcnt; /* If the next operation is a jump backwards in the pattern to an on_failure_jump right before the start_memory corresponding to this stop_memory, exit from the loop by forcing a failure after pushing on the stack the on_failure_jump's jump in the pattern, and d. */ if (mcnt < 0 && (re_opcode_t) *p1 == on_failure_jump && (re_opcode_t) p1[3] == start_memory && p1[4] == *p) { /* If this group ever matched anything, then restore what its registers were before trying this last failed match, e.g., with `(a*)*b' against `ab' for regstart[1], and, e.g., with `((a*)*(b*)*)*' against `aba' for regend[3]. Also restore the registers for inner groups for, e.g., `((a*)(b*))*' against `aba' (register 3 would otherwise get trashed). */ if (EVER_MATCHED_SOMETHING (reg_info[*p])) { unsigned r; EVER_MATCHED_SOMETHING (reg_info[*p]) = 0; /* Restore this and inner groups' (if any) registers. */ for (r = *p; r < (unsigned) *p + (unsigned) *(p + 1); r++) { regstart[r] = old_regstart[r]; /* xx why this test? */ if (old_regend[r] >= regstart[r]) regend[r] = old_regend[r]; } } p1++; EXTRACT_NUMBER_AND_INCR (mcnt, p1); PUSH_FAILURE_POINT (p1 + mcnt, d, -2); goto fail; } } /* Move past the register number and the inner group count. */ p += 2; break; /* \ has been turned into a `duplicate' command which is followed by the numeric value of as the register number. */ case duplicate: { register const char *d2, *dend2; int regno = *p++; /* Get which register to match against. */ DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno); /* Can't back reference a group which we've never matched. */ if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno])) goto fail; /* Where in input to try to start matching. */ d2 = regstart[regno]; /* Where to stop matching; if both the place to start and the place to stop matching are in the same string, then set to the place to stop, otherwise, for now have to use the end of the first string. */ dend2 = ((FIRST_STRING_P (regstart[regno]) == FIRST_STRING_P (regend[regno])) ? regend[regno] : end_match_1); for (;;) { /* If necessary, advance to next segment in register contents. */ while (d2 == dend2) { if (dend2 == end_match_2) break; if (dend2 == regend[regno]) break; /* End of string1 => advance to string2. */ d2 = string2; dend2 = regend[regno]; } /* At end of register contents => success */ if (d2 == dend2) break; /* If necessary, advance to next segment in data. */ PREFETCH (); /* How many characters left in this segment to match. */ mcnt = dend - d; /* Want how many consecutive characters we can match in one shot, so, if necessary, adjust the count. */ if (mcnt > dend2 - d2) mcnt = dend2 - d2; /* Compare that many; failure if mismatch, else move past them. */ if (translate ? bcmp_translate (d, d2, mcnt, translate) : memcmp (d, d2, mcnt)) goto fail; d += mcnt, d2 += mcnt; /* Do this because we've match some characters. */ SET_REGS_MATCHED (); } } break; /* begline matches the empty string at the beginning of the string (unless `not_bol' is set in `bufp'), and, if `newline_anchor' is set, after newlines. */ case begline: DEBUG_PRINT1 ("EXECUTING begline.\n"); if (AT_STRINGS_BEG (d)) { if (!bufp->not_bol) break; } else if (d[-1] == '\n' && bufp->newline_anchor) { break; } /* In all other cases, we fail. */ goto fail; /* endline is the dual of begline. */ case endline: DEBUG_PRINT1 ("EXECUTING endline.\n"); if (AT_STRINGS_END (d)) { if (!bufp->not_eol) break; } /* We have to ``prefetch'' the next character. */ else if ((d == end1 ? *string2 : *d) == '\n' && bufp->newline_anchor) { break; } goto fail; /* Match at the very beginning of the data. */ case begbuf: DEBUG_PRINT1 ("EXECUTING begbuf.\n"); if (AT_STRINGS_BEG (d)) break; goto fail; /* Match at the very end of the data. */ case endbuf: DEBUG_PRINT1 ("EXECUTING endbuf.\n"); if (AT_STRINGS_END (d)) break; goto fail; /* on_failure_keep_string_jump is used to optimize `.*\n'. It pushes NULL as the value for the string on the stack. Then `pop_failure_point' will keep the current value for the string, instead of restoring it. To see why, consider matching `foo\nbar' against `.*\n'. The .* matches the foo; then the . fails against the \n. But the next thing we want to do is match the \n against the \n; if we restored the string value, we would be back at the foo. Because this is used only in specific cases, we don't need to check all the things that `on_failure_jump' does, to make sure the right things get saved on the stack. Hence we don't share its code. The only reason to push anything on the stack at all is that otherwise we would have to change `anychar's code to do something besides goto fail in this case; that seems worse than this. */ case on_failure_keep_string_jump: DEBUG_PRINT1 ("EXECUTING on_failure_keep_string_jump"); EXTRACT_NUMBER_AND_INCR (mcnt, p); #ifdef _LIBC DEBUG_PRINT3 (" %d (to %p):\n", mcnt, p + mcnt); #else DEBUG_PRINT3 (" %d (to 0x%x):\n", mcnt, p + mcnt); #endif PUSH_FAILURE_POINT (p + mcnt, NULL, -2); break; /* Uses of on_failure_jump: Each alternative starts with an on_failure_jump that points to the beginning of the next alternative. Each alternative except the last ends with a jump that in effect jumps past the rest of the alternatives. (They really jump to the ending jump of the following alternative, because tensioning these jumps is a hassle.) Repeats start with an on_failure_jump that points past both the repetition text and either the following jump or pop_failure_jump back to this on_failure_jump. */ case on_failure_jump: on_failure: DEBUG_PRINT1 ("EXECUTING on_failure_jump"); EXTRACT_NUMBER_AND_INCR (mcnt, p); #ifdef _LIBC DEBUG_PRINT3 (" %d (to %p)", mcnt, p + mcnt); #else DEBUG_PRINT3 (" %d (to 0x%x)", mcnt, p + mcnt); #endif /* If this on_failure_jump comes right before a group (i.e., the original * applied to a group), save the information for that group and all inner ones, so that if we fail back to this point, the group's information will be correct. For example, in \(a*\)*\1, we need the preceding group, and in \(zz\(a*\)b*\)\2, we need the inner group. */ /* We can't use `p' to check ahead because we push a failure point to `p + mcnt' after we do this. */ p1 = p; /* We need to skip no_op's before we look for the start_memory in case this on_failure_jump is happening as the result of a completed succeed_n, as in \(a\)\{1,3\}b\1 against aba. */ while (p1 < pend && (re_opcode_t) *p1 == no_op) p1++; if (p1 < pend && (re_opcode_t) *p1 == start_memory) { /* We have a new highest active register now. This will get reset at the start_memory we are about to get to, but we will have saved all the registers relevant to this repetition op, as described above. */ highest_active_reg = *(p1 + 1) + *(p1 + 2); if (lowest_active_reg == NO_LOWEST_ACTIVE_REG) lowest_active_reg = *(p1 + 1); } DEBUG_PRINT1 (":\n"); PUSH_FAILURE_POINT (p + mcnt, d, -2); break; /* A smart repeat ends with `maybe_pop_jump'. We change it to either `pop_failure_jump' or `jump'. */ case maybe_pop_jump: EXTRACT_NUMBER_AND_INCR (mcnt, p); DEBUG_PRINT2 ("EXECUTING maybe_pop_jump %d.\n", mcnt); { register unsigned char *p2 = p; /* Compare the beginning of the repeat with what in the pattern follows its end. If we can establish that there is nothing that they would both match, i.e., that we would have to backtrack because of (as in, e.g., `a*a') then we can change to pop_failure_jump, because we'll never have to backtrack. This is not true in the case of alternatives: in `(a|ab)*' we do need to backtrack to the `ab' alternative (e.g., if the string was `ab'). But instead of trying to detect that here, the alternative has put on a dummy failure point which is what we will end up popping. */ /* Skip over open/close-group commands. If what follows this loop is a ...+ construct, look at what begins its body, since we will have to match at least one of that. */ while (1) { if (p2 + 2 < pend && ((re_opcode_t) *p2 == stop_memory || (re_opcode_t) *p2 == start_memory)) p2 += 3; else if (p2 + 6 < pend && (re_opcode_t) *p2 == dummy_failure_jump) p2 += 6; else break; } p1 = p + mcnt; /* p1[0] ... p1[2] are the `on_failure_jump' corresponding to the `maybe_finalize_jump' of this case. Examine what follows. */ /* If we're at the end of the pattern, we can change. */ if (p2 == pend) { /* Consider what happens when matching ":\(.*\)" against ":/". I don't really understand this code yet. */ p[-3] = (unsigned char) pop_failure_jump; DEBUG_PRINT1 (" End of pattern: change to `pop_failure_jump'.\n"); } else if ((re_opcode_t) *p2 == exactn || (bufp->newline_anchor && (re_opcode_t) *p2 == endline)) { register unsigned char c = *p2 == (unsigned char) endline ? '\n' : p2[2]; if ((re_opcode_t) p1[3] == exactn && p1[5] != c) { p[-3] = (unsigned char) pop_failure_jump; DEBUG_PRINT3 (" %c != %c => pop_failure_jump.\n", c, p1[5]); } else if ((re_opcode_t) p1[3] == charset || (re_opcode_t) p1[3] == charset_not) { int not = (re_opcode_t) p1[3] == charset_not; if (c < (unsigned char) (p1[4] * BYTEWIDTH) && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH))) not = !not; /* `not' is equal to 1 if c would match, which means that we can't change to pop_failure_jump. */ if (!not) { p[-3] = (unsigned char) pop_failure_jump; DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); } } } else if ((re_opcode_t) *p2 == charset) { /* We win if the first character of the loop is not part of the charset. */ if ((re_opcode_t) p1[3] == exactn && ! ((int) p2[1] * BYTEWIDTH > (int) p1[5] && (p2[2 + p1[5] / BYTEWIDTH] & (1 << (p1[5] % BYTEWIDTH))))) { p[-3] = (unsigned char) pop_failure_jump; DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); } else if ((re_opcode_t) p1[3] == charset_not) { int idx; /* We win if the charset_not inside the loop lists every character listed in the charset after. */ for (idx = 0; idx < (int) p2[1]; idx++) if (! (p2[2 + idx] == 0 || (idx < (int) p1[4] && ((p2[2 + idx] & ~ p1[5 + idx]) == 0)))) break; if (idx == p2[1]) { p[-3] = (unsigned char) pop_failure_jump; DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); } } else if ((re_opcode_t) p1[3] == charset) { int idx; /* We win if the charset inside the loop has no overlap with the one after the loop. */ for (idx = 0; idx < (int) p2[1] && idx < (int) p1[4]; idx++) if ((p2[2 + idx] & p1[5 + idx]) != 0) break; if (idx == p2[1] || idx == p1[4]) { p[-3] = (unsigned char) pop_failure_jump; DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); } } } } p -= 2; /* Point at relative address again. */ if ((re_opcode_t) p[-1] != pop_failure_jump) { p[-1] = (unsigned char) jump; DEBUG_PRINT1 (" Match => jump.\n"); goto unconditional_jump; } /* Note fall through. */ /* The end of a simple repeat has a pop_failure_jump back to its matching on_failure_jump, where the latter will push a failure point. The pop_failure_jump takes off failure points put on by this pop_failure_jump's matching on_failure_jump; we got through the pattern to here from the matching on_failure_jump, so didn't fail. */ case pop_failure_jump: { /* We need to pass separate storage for the lowest and highest registers, even though we don't care about the actual values. Otherwise, we will restore only one register from the stack, since lowest will == highest in `pop_failure_point'. */ active_reg_t dummy_low_reg, dummy_high_reg; unsigned char *pdummy; const char *sdummy; DEBUG_PRINT1 ("EXECUTING pop_failure_jump.\n"); POP_FAILURE_POINT (sdummy, pdummy, dummy_low_reg, dummy_high_reg, reg_dummy, reg_dummy, reg_info_dummy); } /* Note fall through. */ unconditional_jump: #ifdef _LIBC DEBUG_PRINT2 ("\n%p: ", p); #else DEBUG_PRINT2 ("\n0x%x: ", p); #endif /* Note fall through. */ /* Unconditionally jump (without popping any failure points). */ case jump: EXTRACT_NUMBER_AND_INCR (mcnt, p); /* Get the amount to jump. */ DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt); p += mcnt; /* Do the jump. */ #ifdef _LIBC DEBUG_PRINT2 ("(to %p).\n", p); #else DEBUG_PRINT2 ("(to 0x%x).\n", p); #endif break; /* We need this opcode so we can detect where alternatives end in `group_match_null_string_p' et al. */ case jump_past_alt: DEBUG_PRINT1 ("EXECUTING jump_past_alt.\n"); goto unconditional_jump; /* Normally, the on_failure_jump pushes a failure point, which then gets popped at pop_failure_jump. We will end up at pop_failure_jump, also, and with a pattern of, say, `a+', we are skipping over the on_failure_jump, so we have to push something meaningless for pop_failure_jump to pop. */ case dummy_failure_jump: DEBUG_PRINT1 ("EXECUTING dummy_failure_jump.\n"); /* It doesn't matter what we push for the string here. What the code at `fail' tests is the value for the pattern. */ PUSH_FAILURE_POINT (NULL, NULL, -2); goto unconditional_jump; /* At the end of an alternative, we need to push a dummy failure point in case we are followed by a `pop_failure_jump', because we don't want the failure point for the alternative to be popped. For example, matching `(a|ab)*' against `aab' requires that we match the `ab' alternative. */ case push_dummy_failure: DEBUG_PRINT1 ("EXECUTING push_dummy_failure.\n"); /* See comments just above at `dummy_failure_jump' about the two zeroes. */ PUSH_FAILURE_POINT (NULL, NULL, -2); break; /* Have to succeed matching what follows at least n times. After that, handle like `on_failure_jump'. */ case succeed_n: EXTRACT_NUMBER (mcnt, p + 2); DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt); assert (mcnt >= 0); /* Originally, this is how many times we HAVE to succeed. */ if (mcnt > 0) { mcnt--; p += 2; STORE_NUMBER_AND_INCR (p, mcnt); #ifdef _LIBC DEBUG_PRINT3 (" Setting %p to %d.\n", p - 2, mcnt); #else DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p - 2, mcnt); #endif } else if (mcnt == 0) { #ifdef _LIBC DEBUG_PRINT2 (" Setting two bytes from %p to no_op.\n", p+2); #else DEBUG_PRINT2 (" Setting two bytes from 0x%x to no_op.\n", p+2); #endif p[2] = (unsigned char) no_op; p[3] = (unsigned char) no_op; goto on_failure; } break; case jump_n: EXTRACT_NUMBER (mcnt, p + 2); DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt); /* Originally, this is how many times we CAN jump. */ if (mcnt) { mcnt--; STORE_NUMBER (p + 2, mcnt); #ifdef _LIBC DEBUG_PRINT3 (" Setting %p to %d.\n", p + 2, mcnt); #else DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p + 2, mcnt); #endif goto unconditional_jump; } /* If don't have to jump any more, skip over the rest of command. */ else p += 4; break; case set_number_at: { DEBUG_PRINT1 ("EXECUTING set_number_at.\n"); EXTRACT_NUMBER_AND_INCR (mcnt, p); p1 = p + mcnt; EXTRACT_NUMBER_AND_INCR (mcnt, p); #ifdef _LIBC DEBUG_PRINT3 (" Setting %p to %d.\n", p1, mcnt); #else DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p1, mcnt); #endif STORE_NUMBER (p1, mcnt); break; } #if 0 /* The DEC Alpha C compiler 3.x generates incorrect code for the test WORDCHAR_P (d - 1) != WORDCHAR_P (d) in the expansion of AT_WORD_BOUNDARY, so this code is disabled. Expanding the macro and introducing temporary variables works around the bug. */ case wordbound: DEBUG_PRINT1 ("EXECUTING wordbound.\n"); if (AT_WORD_BOUNDARY (d)) break; goto fail; case notwordbound: DEBUG_PRINT1 ("EXECUTING notwordbound.\n"); if (AT_WORD_BOUNDARY (d)) goto fail; break; #else case wordbound: { boolean prevchar, thischar; DEBUG_PRINT1 ("EXECUTING wordbound.\n"); if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d)) break; prevchar = WORDCHAR_P (d - 1); thischar = WORDCHAR_P (d); if (prevchar != thischar) break; goto fail; } case notwordbound: { boolean prevchar, thischar; DEBUG_PRINT1 ("EXECUTING notwordbound.\n"); if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d)) goto fail; prevchar = WORDCHAR_P (d - 1); thischar = WORDCHAR_P (d); if (prevchar != thischar) goto fail; break; } #endif case wordbeg: DEBUG_PRINT1 ("EXECUTING wordbeg.\n"); if (WORDCHAR_P (d) && (AT_STRINGS_BEG (d) || !WORDCHAR_P (d - 1))) break; goto fail; case wordend: DEBUG_PRINT1 ("EXECUTING wordend.\n"); if (!AT_STRINGS_BEG (d) && WORDCHAR_P (d - 1) && (!WORDCHAR_P (d) || AT_STRINGS_END (d))) break; goto fail; #ifdef emacs case before_dot: DEBUG_PRINT1 ("EXECUTING before_dot.\n"); if (PTR_CHAR_POS ((unsigned char *) d) >= point) goto fail; break; case at_dot: DEBUG_PRINT1 ("EXECUTING at_dot.\n"); if (PTR_CHAR_POS ((unsigned char *) d) != point) goto fail; break; case after_dot: DEBUG_PRINT1 ("EXECUTING after_dot.\n"); if (PTR_CHAR_POS ((unsigned char *) d) <= point) goto fail; break; case syntaxspec: DEBUG_PRINT2 ("EXECUTING syntaxspec %d.\n", mcnt); mcnt = *p++; goto matchsyntax; case wordchar: DEBUG_PRINT1 ("EXECUTING Emacs wordchar.\n"); mcnt = (int) Sword; matchsyntax: PREFETCH (); /* Can't use *d++ here; SYNTAX may be an unsafe macro. */ d++; if (SYNTAX (d[-1]) != (enum syntaxcode) mcnt) goto fail; SET_REGS_MATCHED (); break; case notsyntaxspec: DEBUG_PRINT2 ("EXECUTING notsyntaxspec %d.\n", mcnt); mcnt = *p++; goto matchnotsyntax; case notwordchar: DEBUG_PRINT1 ("EXECUTING Emacs notwordchar.\n"); mcnt = (int) Sword; matchnotsyntax: PREFETCH (); /* Can't use *d++ here; SYNTAX may be an unsafe macro. */ d++; if (SYNTAX (d[-1]) == (enum syntaxcode) mcnt) goto fail; SET_REGS_MATCHED (); break; #else /* not emacs */ case wordchar: DEBUG_PRINT1 ("EXECUTING non-Emacs wordchar.\n"); PREFETCH (); if (!WORDCHAR_P (d)) goto fail; SET_REGS_MATCHED (); d++; break; case notwordchar: DEBUG_PRINT1 ("EXECUTING non-Emacs notwordchar.\n"); PREFETCH (); if (WORDCHAR_P (d)) goto fail; SET_REGS_MATCHED (); d++; break; #endif /* not emacs */ default: abort (); } continue; /* Successfully executed one pattern command; keep going. */ /* We goto here if a matching operation fails. */ fail: if (!FAIL_STACK_EMPTY ()) { /* A restart point is known. Restore to that state. */ DEBUG_PRINT1 ("\nFAIL:\n"); POP_FAILURE_POINT (d, p, lowest_active_reg, highest_active_reg, regstart, regend, reg_info); /* If this failure point is a dummy, try the next one. */ if (!p) goto fail; /* If we failed to the end of the pattern, don't examine *p. */ assert (p <= pend); if (p < pend) { boolean is_a_jump_n = false; /* If failed to a backwards jump that's part of a repetition loop, need to pop this failure point and use the next one. */ switch ((re_opcode_t) *p) { case jump_n: is_a_jump_n = true; case maybe_pop_jump: case pop_failure_jump: case jump: p1 = p + 1; EXTRACT_NUMBER_AND_INCR (mcnt, p1); p1 += mcnt; if ((is_a_jump_n && (re_opcode_t) *p1 == succeed_n) || (!is_a_jump_n && (re_opcode_t) *p1 == on_failure_jump)) goto fail; break; default: /* do nothing */ ; } } if (d >= string1 && d <= end1) dend = end_match_1; } else break; /* Matching at this starting point really fails. */ } /* for (;;) */ if (best_regs_set) goto restore_best_regs; FREE_VARIABLES (); return -1; /* Failure to match. */ } /* re_match_2 */ /* Subroutine definitions for re_match_2. */ /* We are passed P pointing to a register number after a start_memory. Return true if the pattern up to the corresponding stop_memory can match the empty string, and false otherwise. If we find the matching stop_memory, sets P to point to one past its number. Otherwise, sets P to an undefined byte less than or equal to END. We don't handle duplicates properly (yet). */ static boolean group_match_null_string_p (p, end, reg_info) unsigned char **p, *end; register_info_type *reg_info; { int mcnt; /* Point to after the args to the start_memory. */ unsigned char *p1 = *p + 2; while (p1 < end) { /* Skip over opcodes that can match nothing, and return true or false, as appropriate, when we get to one that can't, or to the matching stop_memory. */ switch ((re_opcode_t) *p1) { /* Could be either a loop or a series of alternatives. */ case on_failure_jump: p1++; EXTRACT_NUMBER_AND_INCR (mcnt, p1); /* If the next operation is not a jump backwards in the pattern. */ if (mcnt >= 0) { /* Go through the on_failure_jumps of the alternatives, seeing if any of the alternatives cannot match nothing. The last alternative starts with only a jump, whereas the rest start with on_failure_jump and end with a jump, e.g., here is the pattern for `a|b|c': /on_failure_jump/0/6/exactn/1/a/jump_past_alt/0/6 /on_failure_jump/0/6/exactn/1/b/jump_past_alt/0/3 /exactn/1/c So, we have to first go through the first (n-1) alternatives and then deal with the last one separately. */ /* Deal with the first (n-1) alternatives, which start with an on_failure_jump (see above) that jumps to right past a jump_past_alt. */ while ((re_opcode_t) p1[mcnt-3] == jump_past_alt) { /* `mcnt' holds how many bytes long the alternative is, including the ending `jump_past_alt' and its number. */ if (!alt_match_null_string_p (p1, p1 + mcnt - 3, reg_info)) return false; /* Move to right after this alternative, including the jump_past_alt. */ p1 += mcnt; /* Break if it's the beginning of an n-th alternative that doesn't begin with an on_failure_jump. */ if ((re_opcode_t) *p1 != on_failure_jump) break; /* Still have to check that it's not an n-th alternative that starts with an on_failure_jump. */ p1++; EXTRACT_NUMBER_AND_INCR (mcnt, p1); if ((re_opcode_t) p1[mcnt-3] != jump_past_alt) { /* Get to the beginning of the n-th alternative. */ p1 -= 3; break; } } /* Deal with the last alternative: go back and get number of the `jump_past_alt' just before it. `mcnt' contains the length of the alternative. */ EXTRACT_NUMBER (mcnt, p1 - 2); if (!alt_match_null_string_p (p1, p1 + mcnt, reg_info)) return false; p1 += mcnt; /* Get past the n-th alternative. */ } /* if mcnt > 0 */ break; case stop_memory: assert (p1[1] == **p); *p = p1 + 2; return true; default: if (!common_op_match_null_string_p (&p1, end, reg_info)) return false; } } /* while p1 < end */ return false; } /* group_match_null_string_p */ /* Similar to group_match_null_string_p, but doesn't deal with alternatives: It expects P to be the first byte of a single alternative and END one byte past the last. The alternative can contain groups. */ static boolean alt_match_null_string_p (p, end, reg_info) unsigned char *p, *end; register_info_type *reg_info; { int mcnt; unsigned char *p1 = p; while (p1 < end) { /* Skip over opcodes that can match nothing, and break when we get to one that can't. */ switch ((re_opcode_t) *p1) { /* It's a loop. */ case on_failure_jump: p1++; EXTRACT_NUMBER_AND_INCR (mcnt, p1); p1 += mcnt; break; default: if (!common_op_match_null_string_p (&p1, end, reg_info)) return false; } } /* while p1 < end */ return true; } /* alt_match_null_string_p */ /* Deals with the ops common to group_match_null_string_p and alt_match_null_string_p. Sets P to one after the op and its arguments, if any. */ static boolean common_op_match_null_string_p (p, end, reg_info) unsigned char **p, *end; register_info_type *reg_info; { int mcnt; boolean ret; int reg_no; unsigned char *p1 = *p; switch ((re_opcode_t) *p1++) { case no_op: case begline: case endline: case begbuf: case endbuf: case wordbeg: case wordend: case wordbound: case notwordbound: #ifdef emacs case before_dot: case at_dot: case after_dot: #endif break; case start_memory: reg_no = *p1; assert (reg_no > 0 && reg_no <= MAX_REGNUM); ret = group_match_null_string_p (&p1, end, reg_info); /* Have to set this here in case we're checking a group which contains a group and a back reference to it. */ if (REG_MATCH_NULL_STRING_P (reg_info[reg_no]) == MATCH_NULL_UNSET_VALUE) REG_MATCH_NULL_STRING_P (reg_info[reg_no]) = ret; if (!ret) return false; break; /* If this is an optimized succeed_n for zero times, make the jump. */ case jump: EXTRACT_NUMBER_AND_INCR (mcnt, p1); if (mcnt >= 0) p1 += mcnt; else return false; break; case succeed_n: /* Get to the number of times to succeed. */ p1 += 2; EXTRACT_NUMBER_AND_INCR (mcnt, p1); if (mcnt == 0) { p1 -= 4; EXTRACT_NUMBER_AND_INCR (mcnt, p1); p1 += mcnt; } else return false; break; case duplicate: if (!REG_MATCH_NULL_STRING_P (reg_info[*p1])) return false; break; case set_number_at: p1 += 4; default: /* All other opcodes mean we cannot match the empty string. */ return false; } *p = p1; return true; } /* common_op_match_null_string_p */ /* Return zero if TRANSLATE[S1] and TRANSLATE[S2] are identical for LEN bytes; nonzero otherwise. */ static int bcmp_translate (s1, s2, len, translate) const char *s1, *s2; register int len; RE_TRANSLATE_TYPE translate; { register const unsigned char *p1 = (const unsigned char *) s1; register const unsigned char *p2 = (const unsigned char *) s2; while (len) { if (translate[*p1++] != translate[*p2++]) return 1; len--; } return 0; } /* Entry points for GNU code. */ /* re_compile_pattern is the GNU regular expression compiler: it compiles PATTERN (of length SIZE) and puts the result in BUFP. Returns 0 if the pattern was valid, otherwise an error string. Assumes the `allocated' (and perhaps `buffer') and `translate' fields are set in BUFP on entry. We call regex_compile to do the actual compilation. */ const char * re_compile_pattern (pattern, length, bufp) const char *pattern; size_t length; struct re_pattern_buffer *bufp; { reg_errcode_t ret; /* GNU code is written to assume at least RE_NREGS registers will be set (and at least one extra will be -1). */ bufp->regs_allocated = REGS_UNALLOCATED; /* And GNU code determines whether or not to get register information by passing null for the REGS argument to re_match, etc., not by setting no_sub. */ bufp->no_sub = 0; /* Match anchors at newline. */ bufp->newline_anchor = 1; ret = regex_compile (pattern, length, re_syntax_options, bufp); if (!ret) return NULL; return gettext (re_error_msgid + re_error_msgid_idx[(int) ret]); } #ifdef _LIBC weak_alias (__re_compile_pattern, re_compile_pattern) #endif /* Entry points compatible with 4.2 BSD regex library. We don't define them unless specifically requested. */ #if defined _REGEX_RE_COMP || defined _LIBC /* BSD has one and only one pattern buffer. */ static struct re_pattern_buffer re_comp_buf; char * #ifdef _LIBC /* Make these definitions weak in libc, so POSIX programs can redefine these names if they don't use our functions, and still use regcomp/regexec below without link errors. */ weak_function #endif re_comp (s) const char *s; { reg_errcode_t ret; if (!s) { if (!re_comp_buf.buffer) return gettext ("No previous regular expression"); return 0; } if (!re_comp_buf.buffer) { re_comp_buf.buffer = (unsigned char *) malloc (200); if (re_comp_buf.buffer == NULL) return (char *) gettext (re_error_msgid + re_error_msgid_idx[(int) REG_ESPACE]); re_comp_buf.allocated = 200; re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH); if (re_comp_buf.fastmap == NULL) return (char *) gettext (re_error_msgid + re_error_msgid_idx[(int) REG_ESPACE]); } /* Since `re_exec' always passes NULL for the `regs' argument, we don't need to initialize the pattern buffer fields which affect it. */ /* Match anchors at newlines. */ re_comp_buf.newline_anchor = 1; ret = regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf); if (!ret) return NULL; /* Yes, we're discarding `const' here if !HAVE_LIBINTL. */ return (char *) gettext (re_error_msgid + re_error_msgid_idx[(int) ret]); } int #ifdef _LIBC weak_function #endif re_exec (s) const char *s; { const int len = strlen (s); return 0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0); } #endif /* _REGEX_RE_COMP */ /* POSIX.2 functions. Don't define these for Emacs. */ #ifndef emacs /* regcomp takes a regular expression as a string and compiles it. PREG is a regex_t *. We do not expect any fields to be initialized, since POSIX says we shouldn't. Thus, we set `buffer' to the compiled pattern; `used' to the length of the compiled pattern; `syntax' to RE_SYNTAX_POSIX_EXTENDED if the REG_EXTENDED bit in CFLAGS is set; otherwise, to RE_SYNTAX_POSIX_BASIC; `newline_anchor' to REG_NEWLINE being set in CFLAGS; `fastmap' to an allocated space for the fastmap; `fastmap_accurate' to zero; `re_nsub' to the number of subexpressions in PATTERN. PATTERN is the address of the pattern string. CFLAGS is a series of bits which affect compilation. If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we use POSIX basic syntax. If REG_NEWLINE is set, then . and [^...] don't match newline. Also, regexec will try a match beginning after every newline. If REG_ICASE is set, then we considers upper- and lowercase versions of letters to be equivalent when matching. If REG_NOSUB is set, then when PREG is passed to regexec, that routine will report only success or failure, and nothing about the registers. It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for the return codes and their meanings.) */ int regcomp (preg, pattern, cflags) regex_t *preg; const char *pattern; int cflags; { reg_errcode_t ret; reg_syntax_t syntax = (cflags & REG_EXTENDED) ? RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC; /* regex_compile will allocate the space for the compiled pattern. */ preg->buffer = 0; preg->allocated = 0; preg->used = 0; /* Try to allocate space for the fastmap. */ preg->fastmap = (char *) malloc (1 << BYTEWIDTH); if (cflags & REG_ICASE) { unsigned i; preg->translate = (RE_TRANSLATE_TYPE) malloc (CHAR_SET_SIZE * sizeof (*(RE_TRANSLATE_TYPE)0)); if (preg->translate == NULL) return (int) REG_ESPACE; /* Map uppercase characters to corresponding lowercase ones. */ for (i = 0; i < CHAR_SET_SIZE; i++) preg->translate[i] = ISUPPER (i) ? TOLOWER (i) : i; } else preg->translate = NULL; /* If REG_NEWLINE is set, newlines are treated differently. */ if (cflags & REG_NEWLINE) { /* REG_NEWLINE implies neither . nor [^...] match newline. */ syntax &= ~RE_DOT_NEWLINE; syntax |= RE_HAT_LISTS_NOT_NEWLINE; /* It also changes the matching behavior. */ preg->newline_anchor = 1; } else preg->newline_anchor = 0; preg->no_sub = !!(cflags & REG_NOSUB); /* POSIX says a null character in the pattern terminates it, so we can use strlen here in compiling the pattern. */ ret = regex_compile (pattern, strlen (pattern), syntax, preg); /* POSIX doesn't distinguish between an unmatched open-group and an unmatched close-group: both are REG_EPAREN. */ if (ret == REG_ERPAREN) ret = REG_EPAREN; if (ret == REG_NOERROR && preg->fastmap) { /* Compute the fastmap now, since regexec cannot modify the pattern buffer. */ if (re_compile_fastmap (preg) == -2) { /* Some error occurred while computing the fastmap, just forget about it. */ free (preg->fastmap); preg->fastmap = NULL; } } return (int) ret; } #ifdef _LIBC weak_alias (__regcomp, regcomp) #endif /* regexec searches for a given pattern, specified by PREG, in the string STRING. If NMATCH is zero or REG_NOSUB was set in the cflags argument to `regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at least NMATCH elements, and we set them to the offsets of the corresponding matched substrings. EFLAGS specifies `execution flags' which affect matching: if REG_NOTBOL is set, then ^ does not match at the beginning of the string; if REG_NOTEOL is set, then $ does not match at the end. We return 0 if we find a match and REG_NOMATCH if not. */ int regexec (preg, string, nmatch, pmatch, eflags) const regex_t *preg; const char *string; size_t nmatch; regmatch_t pmatch[]; int eflags; { int ret; struct re_registers regs; regex_t private_preg; int len = strlen (string); boolean want_reg_info = !preg->no_sub && nmatch > 0; private_preg = *preg; private_preg.not_bol = !!(eflags & REG_NOTBOL); private_preg.not_eol = !!(eflags & REG_NOTEOL); /* The user has told us exactly how many registers to return information about, via `nmatch'. We have to pass that on to the matching routines. */ private_preg.regs_allocated = REGS_FIXED; if (want_reg_info) { regs.num_regs = nmatch; regs.start = TALLOC (nmatch * 2, regoff_t); if (regs.start == NULL) return (int) REG_NOMATCH; regs.end = regs.start + nmatch; } /* Perform the searching operation. */ ret = re_search (&private_preg, string, len, /* start: */ 0, /* range: */ len, want_reg_info ? ®s : (struct re_registers *) 0); /* Copy the register information to the POSIX structure. */ if (want_reg_info) { if (ret >= 0) { unsigned r; for (r = 0; r < nmatch; r++) { pmatch[r].rm_so = regs.start[r]; pmatch[r].rm_eo = regs.end[r]; } } /* If we needed the temporary register info, free the space now. */ free (regs.start); } /* We want zero return to mean success, unlike `re_search'. */ return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH; } #ifdef _LIBC weak_alias (__regexec, regexec) #endif /* Returns a message corresponding to an error code, ERRCODE, returned from either regcomp or regexec. We don't use PREG here. */ size_t regerror (errcode, preg, errbuf, errbuf_size) int errcode; const regex_t *preg; char *errbuf; size_t errbuf_size; { const char *msg; size_t msg_size; if (errcode < 0 || errcode >= (int) (sizeof (re_error_msgid_idx) / sizeof (re_error_msgid_idx[0]))) /* Only error codes returned by the rest of the code should be passed to this routine. If we are given anything else, or if other regex code generates an invalid error code, then the program has a bug. Dump core so we can fix it. */ abort (); msg = gettext (re_error_msgid + re_error_msgid_idx[errcode]); msg_size = strlen (msg) + 1; /* Includes the null. */ if (errbuf_size != 0) { if (msg_size > errbuf_size) { #if defined HAVE_MEMPCPY || defined _LIBC *((char *) __mempcpy (errbuf, msg, errbuf_size - 1)) = '\0'; #else memcpy (errbuf, msg, errbuf_size - 1); errbuf[errbuf_size - 1] = 0; #endif } else memcpy (errbuf, msg, msg_size); } return msg_size; } #ifdef _LIBC weak_alias (__regerror, regerror) #endif /* Free dynamically allocated space used by PREG. */ void regfree (preg) regex_t *preg; { if (preg->buffer != NULL) free (preg->buffer); preg->buffer = NULL; preg->allocated = 0; preg->used = 0; if (preg->fastmap != NULL) free (preg->fastmap); preg->fastmap = NULL; preg->fastmap_accurate = 0; if (preg->translate != NULL) free (preg->translate); preg->translate = NULL; } #ifdef _LIBC weak_alias (__regfree, regfree) #endif #endif /* not emacs */ nescc-1.3.4/src/libcompat/regex/000077500000000000000000000000001177770303300164755ustar00rootroot00000000000000nescc-1.3.4/src/libcompat/regex/regex.h000066400000000000000000000514551177770303300177720ustar00rootroot00000000000000/* Definitions for data structures and routines for the regular expression library, version 0.12. Copyright (C) 1985,1989-1993,1995-1998, 2000 Free Software Foundation, Inc. This file is part of the GNU C Library. Its master source is NOT part of the C library, however. The master source lives in /gd/gnu/lib. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _REGEX_H #define _REGEX_H 1 /* Allow the use in C++ code. */ #ifdef __cplusplus extern "C" { #endif /* POSIX says that must be included (by the caller) before . */ #if !defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE && defined VMS /* VMS doesn't have `size_t' in , even though POSIX says it should be there. */ # include #endif /* The following two types have to be signed and unsigned integer type wide enough to hold a value of a pointer. For most ANSI compilers ptrdiff_t and size_t should be likely OK. Still size of these two types is 2 for Microsoft C. Ugh... */ typedef long int s_reg_t; typedef unsigned long int active_reg_t; /* The following bits are used to determine the regexp syntax we recognize. The set/not-set meanings are chosen so that Emacs syntax remains the value 0. The bits are given in alphabetical order, and the definitions shifted by one from the previous bit; thus, when we add or remove a bit, only one other definition need change. */ typedef unsigned long int reg_syntax_t; /* If this bit is not set, then \ inside a bracket expression is literal. If set, then such a \ quotes the following character. */ #define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) /* If this bit is not set, then + and ? are operators, and \+ and \? are literals. If set, then \+ and \? are operators and + and ? are literals. */ #define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) /* If this bit is set, then character classes are supported. They are: [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. If not set, then character classes are not supported. */ #define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) /* If this bit is set, then ^ and $ are always anchors (outside bracket expressions, of course). If this bit is not set, then it depends: ^ is an anchor if it is at the beginning of a regular expression or after an open-group or an alternation operator; $ is an anchor if it is at the end of a regular expression, or before a close-group or an alternation operator. This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because POSIX draft 11.2 says that * etc. in leading positions is undefined. We already implemented a previous draft which made those constructs invalid, though, so we haven't changed the code back. */ #define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) /* If this bit is set, then special characters are always special regardless of where they are in the pattern. If this bit is not set, then special characters are special only in some contexts; otherwise they are ordinary. Specifically, * + ? and intervals are only special when not after the beginning, open-group, or alternation operator. */ #define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) /* If this bit is set, then *, +, ?, and { cannot be first in an re or immediately after an alternation or begin-group operator. */ #define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) /* If this bit is set, then . matches newline. If not set, then it doesn't. */ #define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) /* If this bit is set, then . doesn't match NUL. If not set, then it does. */ #define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) /* If this bit is set, nonmatching lists [^...] do not match newline. If not set, they do. */ #define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) /* If this bit is set, either \{...\} or {...} defines an interval, depending on RE_NO_BK_BRACES. If not set, \{, \}, {, and } are literals. */ #define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) /* If this bit is set, +, ? and | aren't recognized as operators. If not set, they are. */ #define RE_LIMITED_OPS (RE_INTERVALS << 1) /* If this bit is set, newline is an alternation operator. If not set, newline is literal. */ #define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) /* If this bit is set, then `{...}' defines an interval, and \{ and \} are literals. If not set, then `\{...\}' defines an interval. */ #define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) /* If this bit is set, (...) defines a group, and \( and \) are literals. If not set, \(...\) defines a group, and ( and ) are literals. */ #define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) /* If this bit is set, then \ matches . If not set, then \ is a back-reference. */ #define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) /* If this bit is set, then | is an alternation operator, and \| is literal. If not set, then \| is an alternation operator, and | is literal. */ #define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) /* If this bit is set, then an ending range point collating higher than the starting range point, as in [z-a], is invalid. If not set, then when ending range point collates higher than the starting range point, the range is ignored. */ #define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) /* If this bit is set, then an unmatched ) is ordinary. If not set, then an unmatched ) is invalid. */ #define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) /* If this bit is set, succeed as soon as we match the whole pattern, without further backtracking. */ #define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1) /* If this bit is set, do not process the GNU regex operators. If not set, then the GNU regex operators are recognized. */ #define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1) /* If this bit is set, turn on internal regex debugging. If not set, and debugging was on, turn it off. This only works if regex.c is compiled -DDEBUG. We define this bit always, so that all that's needed to turn on debugging is to recompile regex.c; the calling code can always have this bit set, and it won't affect anything in the normal case. */ #define RE_DEBUG (RE_NO_GNU_OPS << 1) /* This global variable defines the particular regexp syntax to use (for some interfaces). When a regexp is compiled, the syntax used is stored in the pattern buffer, so changing this does not affect already-compiled regexps. */ extern reg_syntax_t re_syntax_options; /* Define combinations of the above bits for the standard possibilities. (The [[[ comments delimit what gets put into the Texinfo file, so don't delete them!) */ /* [[[begin syntaxes]]] */ #define RE_SYNTAX_EMACS 0 #define RE_SYNTAX_AWK \ (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \ | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) #define RE_SYNTAX_GNU_AWK \ ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG) \ & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS)) #define RE_SYNTAX_POSIX_AWK \ (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ | RE_INTERVALS | RE_NO_GNU_OPS) #define RE_SYNTAX_GREP \ (RE_BK_PLUS_QM | RE_CHAR_CLASSES \ | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \ | RE_NEWLINE_ALT) #define RE_SYNTAX_EGREP \ (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \ | RE_NEWLINE_ALT | RE_NO_BK_PARENS \ | RE_NO_BK_VBAR) #define RE_SYNTAX_POSIX_EGREP \ (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES) /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ #define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC #define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC /* Syntax bits common to both basic and extended POSIX regex syntax. */ #define _RE_SYNTAX_POSIX_COMMON \ (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ | RE_INTERVALS | RE_NO_EMPTY_RANGES) #define RE_SYNTAX_POSIX_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM) /* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this isn't minimal, since other operators, such as \`, aren't disabled. */ #define RE_SYNTAX_POSIX_MINIMAL_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) #define RE_SYNTAX_POSIX_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD) /* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is removed and RE_NO_BK_REFS is added. */ #define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) /* [[[end syntaxes]]] */ /* Maximum number of duplicates an interval can allow. Some systems (erroneously) define this in other header files, but we want our value, so remove any previous define. */ #ifdef RE_DUP_MAX # undef RE_DUP_MAX #endif /* If sizeof(int) == 2, then ((1 << 15) - 1) overflows. */ #define RE_DUP_MAX (0x7fff) /* POSIX `cflags' bits (i.e., information for `regcomp'). */ /* If this bit is set, then use extended regular expression syntax. If not set, then use basic regular expression syntax. */ #define REG_EXTENDED 1 /* If this bit is set, then ignore case when matching. If not set, then case is significant. */ #define REG_ICASE (REG_EXTENDED << 1) /* If this bit is set, then anchors do not match at newline characters in the string. If not set, then anchors do match at newlines. */ #define REG_NEWLINE (REG_ICASE << 1) /* If this bit is set, then report only success or fail in regexec. If not set, then returns differ between not matching and errors. */ #define REG_NOSUB (REG_NEWLINE << 1) /* POSIX `eflags' bits (i.e., information for regexec). */ /* If this bit is set, then the beginning-of-line operator doesn't match the beginning of the string (presumably because it's not the beginning of a line). If not set, then the beginning-of-line operator does match the beginning of the string. */ #define REG_NOTBOL 1 /* Like REG_NOTBOL, except for the end-of-line. */ #define REG_NOTEOL (1 << 1) /* If any error codes are removed, changed, or added, update the `re_error_msg' table in regex.c. */ typedef enum { #ifdef _XOPEN_SOURCE REG_ENOSYS = -1, /* This will never happen for this implementation. */ #endif REG_NOERROR = 0, /* Success. */ REG_NOMATCH, /* Didn't find a match (for regexec). */ /* POSIX regcomp return error codes. (In the order listed in the standard.) */ REG_BADPAT, /* Invalid pattern. */ REG_ECOLLATE, /* Not implemented. */ REG_ECTYPE, /* Invalid character class name. */ REG_EESCAPE, /* Trailing backslash. */ REG_ESUBREG, /* Invalid back reference. */ REG_EBRACK, /* Unmatched left bracket. */ REG_EPAREN, /* Parenthesis imbalance. */ REG_EBRACE, /* Unmatched \{. */ REG_BADBR, /* Invalid contents of \{\}. */ REG_ERANGE, /* Invalid range end. */ REG_ESPACE, /* Ran out of memory. */ REG_BADRPT, /* No preceding re for repetition op. */ /* Error codes we've added. */ REG_EEND, /* Premature end. */ REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */ REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ } reg_errcode_t; /* This data structure represents a compiled pattern. Before calling the pattern compiler, the fields `buffer', `allocated', `fastmap', `translate', and `no_sub' can be set. After the pattern has been compiled, the `re_nsub' field is available. All other fields are private to the regex routines. */ #ifndef RE_TRANSLATE_TYPE # define RE_TRANSLATE_TYPE char * #endif struct re_pattern_buffer { /* [[[begin pattern_buffer]]] */ /* Space that holds the compiled pattern. It is declared as `unsigned char *' because its elements are sometimes used as array indexes. */ unsigned char *buffer; /* Number of bytes to which `buffer' points. */ unsigned long int allocated; /* Number of bytes actually used in `buffer'. */ unsigned long int used; /* Syntax setting with which the pattern was compiled. */ reg_syntax_t syntax; /* Pointer to a fastmap, if any, otherwise zero. re_search uses the fastmap, if there is one, to skip over impossible starting points for matches. */ char *fastmap; /* Either a translate table to apply to all characters before comparing them, or zero for no translation. The translation is applied to a pattern when it is compiled and to a string when it is matched. */ RE_TRANSLATE_TYPE translate; /* Number of subexpressions found by the compiler. */ size_t re_nsub; /* Zero if this pattern cannot match the empty string, one else. Well, in truth it's used only in `re_search_2', to see whether or not we should use the fastmap, so we don't set this absolutely perfectly; see `re_compile_fastmap' (the `duplicate' case). */ unsigned can_be_null : 1; /* If REGS_UNALLOCATED, allocate space in the `regs' structure for `max (RE_NREGS, re_nsub + 1)' groups. If REGS_REALLOCATE, reallocate space if necessary. If REGS_FIXED, use what's there. */ #define REGS_UNALLOCATED 0 #define REGS_REALLOCATE 1 #define REGS_FIXED 2 unsigned regs_allocated : 2; /* Set to zero when `regex_compile' compiles a pattern; set to one by `re_compile_fastmap' if it updates the fastmap. */ unsigned fastmap_accurate : 1; /* If set, `re_match_2' does not return information about subexpressions. */ unsigned no_sub : 1; /* If set, a beginning-of-line anchor doesn't match at the beginning of the string. */ unsigned not_bol : 1; /* Similarly for an end-of-line anchor. */ unsigned not_eol : 1; /* If true, an anchor at a newline matches. */ unsigned newline_anchor : 1; /* [[[end pattern_buffer]]] */ }; typedef struct re_pattern_buffer regex_t; /* Type for byte offsets within the string. POSIX mandates this. */ typedef int regoff_t; /* This is the structure we store register match data in. See regex.texinfo for a full description of what registers match. */ struct re_registers { unsigned num_regs; regoff_t *start; regoff_t *end; }; /* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer, `re_match_2' returns information about at least this many registers the first time a `regs' structure is passed. */ #ifndef RE_NREGS # define RE_NREGS 30 #endif /* POSIX specification for registers. Aside from the different names than `re_registers', POSIX uses an array of structures, instead of a structure of arrays. */ typedef struct { regoff_t rm_so; /* Byte offset from string's start to substring's start. */ regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ } regmatch_t; /* Declarations for routines. */ /* To avoid duplicating every routine declaration -- once with a prototype (if we are ANSI), and once without (if we aren't) -- we use the following macro to declare argument types. This unfortunately clutters up the declarations a bit, but I think it's worth it. */ #if __STDC__ # define _RE_ARGS(args) args #else /* not __STDC__ */ # define _RE_ARGS(args) () #endif /* not __STDC__ */ /* Sets the current default syntax to SYNTAX, and return the old syntax. You can also simply assign to the `re_syntax_options' variable. */ extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax)); /* Compile the regular expression PATTERN, with length LENGTH and syntax given by the global `re_syntax_options', into the buffer BUFFER. Return NULL if successful, and an error string if not. */ extern const char *re_compile_pattern _RE_ARGS ((const char *pattern, size_t length, struct re_pattern_buffer *buffer)); /* Compile a fastmap for the compiled pattern in BUFFER; used to accelerate searches. Return 0 if successful and -2 if was an internal error. */ extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer)); /* Search in the string STRING (with length LENGTH) for the pattern compiled into BUFFER. Start searching at position START, for RANGE characters. Return the starting position of the match, -1 for no match, or -2 for an internal error. Also return register information in REGS (if REGS and BUFFER->no_sub are nonzero). */ extern int re_search _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string, int length, int start, int range, struct re_registers *regs)); /* Like `re_search', but search in the concatenation of STRING1 and STRING2. Also, stop searching at index START + STOP. */ extern int re_search_2 _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1, int length1, const char *string2, int length2, int start, int range, struct re_registers *regs, int stop)); /* Like `re_search', but return how many characters in STRING the regexp in BUFFER matched, starting at position START. */ extern int re_match _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string, int length, int start, struct re_registers *regs)); /* Relates to `re_match' as `re_search_2' relates to `re_search'. */ extern int re_match_2 _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1, int length1, const char *string2, int length2, int start, struct re_registers *regs, int stop)); /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated with malloc, and must each be at least `NUM_REGS * sizeof (regoff_t)' bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using PATTERN_BUFFER will allocate its own register data, without freeing the old data. */ extern void re_set_registers _RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs, unsigned num_regs, regoff_t *starts, regoff_t *ends)); #if defined _REGEX_RE_COMP || defined _LIBC # ifndef _CRAY /* 4.2 bsd compatibility. */ extern char *re_comp _RE_ARGS ((const char *)); extern int re_exec _RE_ARGS ((const char *)); # endif #endif /* GCC 2.95 and later have "__restrict"; C99 compilers have "restrict", and "configure" may have defined "restrict". */ #ifndef __restrict # if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)) # if defined restrict || 199901L <= __STDC_VERSION__ # define __restrict restrict # else # define __restrict # endif # endif #endif /* For now unconditionally define __restrict_arr to expand to nothing. Ideally we would have a test for the compiler which allows defining it to restrict. */ #define __restrict_arr /* POSIX compatibility. */ extern int regcomp _RE_ARGS ((regex_t *__restrict __preg, const char *__restrict __pattern, int __cflags)); extern int regexec _RE_ARGS ((const regex_t *__restrict __preg, const char *__restrict __string, size_t __nmatch, regmatch_t __pmatch[__restrict_arr], int __eflags)); extern size_t regerror _RE_ARGS ((int __errcode, const regex_t *__preg, char *__errbuf, size_t __errbuf_size)); extern void regfree _RE_ARGS ((regex_t *__preg)); #ifdef __cplusplus } #endif /* C++ */ #endif /* regex.h */ /* Local variables: make-backup-files: t version-control: t trim-versions-without-asking: nil End: */ nescc-1.3.4/src/libcompat/regions.c000066400000000000000000000224101177770303300171740ustar00rootroot00000000000000/* * Copyright (c) 1999-2001 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the * distribution. * - Neither the name of the University of California nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * */ /* Idea: clear on page alloc rather than individual alloc Turns out not so good (on lcc at least, seems a wash on mudlle): logically should be bad for small regions (less than a few pages) */ #undef PRECLEAR #include "../autoconf.h" /*#include "stats.c"*/ #include "regions.h" #include #include #include #if SIZEOF_VOID_P > 4 #define LARGE_ADDRESSES #endif #if HAVE_MMAP #define USE_MMAP #endif #ifdef LARGE_ADDRESSES /* This supports up to 49 bit virtual addresses. If you have larger virtual addresses, you will need to decrease MEMSLICE1 and possibly adjust MEMSLICE2 */ #define MAXMEMBITS 64 #define MEMSLICE1 15 #define MEMSLICE2 18 #define MEMSLICE3 (MAXMEMBITS - RPAGELOG - MEMSLICE2 - MEMSLICE2) #else #define MAXMEMBITS 32 #endif #define RPAGESIZE (1 << RPAGELOG) #define K 2 #define MAXPAGE (1 << (MAXMEMBITS - RPAGELOG)) #define PAGENB(x) ((__rcintptr)(x) >> RPAGELOG) #define ALIGN(x, n) (((x) + ((n) - 1)) & ~((n) - 1)) #define PALIGN(x, n) ((void *)ALIGN((__rcintptr)(x), n)) #ifdef __GNUC__ #define RALIGNMENT __alignof(double) #define PTRALIGNMENT __alignof(void *) #define ALIGNMENT_LONG __alignof(unsigned long) #else #define RALIGNMENT 8 #define PTRALIGNMENT 4 #define ALIGNMENT_LONG 4 #endif typedef unsigned long __rcintptr; struct ablock { char *end, *allocfrom; }; struct allocator { struct ablock page; struct ablock superpage; struct ablock hyperpage; struct page *pages; struct page *bigpages; }; struct region_ { struct allocator normal; region parent, sibling, children; }; nomem_handler nomem_h; region permanent; static inline void clear(void *start, __rcintptr size) { long *clear, *clearend; clear = (long *)start; clearend = (long *)((char *)start + size); do *clear++ = 0; while (clear < clearend) ; } #ifdef PRECLEAR #define preclear clear #define postclear(s, e) #else #define preclear(s, e) #define postclear clear #endif #include "pages.c" #include "alloc.c" static void nochildren(region r) { if (r->children) abort(); } static void unlink_region(region r) { region *scan; scan = &r->parent->children; while (*scan != r) scan = &(*scan)->sibling; *scan = (*scan)->sibling; } static void link_region(region r, region parent) { r->sibling = parent->children; r->parent = parent; parent->children = r; } static int rstart; void initregion(region r) { char *first = (char *)r - rstart - offsetof(struct page, previous); /* Start using page with region header as a pointer-containing page */ r->normal.page.end = first + RPAGESIZE; r->normal.page.allocfrom = (char *)(r + 1); /* Guarantee failure for all other blocks */ r->normal.superpage.allocfrom = (char *)(K * RPAGESIZE + 1); r->normal.hyperpage.allocfrom = (char *)(K * K * RPAGESIZE + 1); /* Remember that r owns this page. */ r->normal.pages = (struct page *)first; set_region(r->normal.pages, 1, r); } region newregion(void) { return newsubregion(permanent); } region newsubregion(region parent) { char *first; region r; first = (char *)alloc_single_page(NULL); preclear(first + offsetof(struct page, pagecount), RPAGESIZE - offsetof(struct page, pagecount)); /* stagger regions across cache lines a bit */ rstart += 64; #if RPAGESIZE < 1024 #error RPAGESIZE must be at least 1024, or change the next if. #endif if (rstart >= 16 * 64) rstart = 0; r = (region)(first + rstart + offsetof(struct page, previous)); postclear(r, sizeof *r); initregion(r); if (parent) link_region(r, parent); return r; } inline char *rstralloc(region r, size_t size) { void *mem, *dummy; qalloc(r, &r->normal, &dummy, 0, 1, &mem, size, RALIGNMENT, 0); return mem; } inline char *rstralloc0(region r, size_t size) { char *mem; mem = rstralloc(r, size); clear(mem, size); return mem; } char *rstrdup(region r, const char *s) { char *news = rstralloc(r, strlen(s) + 1); strcpy(news, s); return news; } inline static char *internal_rstrextend(region r, const char *old, size_t newsize, int needsclear) { /* For now we don't attempt to extend the old storage area */ void *newmem, *hdr; unsigned long *oldhdr, oldsize; qalloc(r, &r->normal, &hdr, sizeof(unsigned long), ALIGNMENT_LONG, &newmem, newsize, RALIGNMENT, 0); /* If we don't do this we can't find the header: */ hdr = (char *)newmem - sizeof(unsigned long); *(unsigned long *)hdr = newsize; if (old) { oldhdr = (unsigned long *)(old - ALIGNMENT_LONG); oldsize = *oldhdr; if (oldsize > newsize) oldsize = newsize; else if (needsclear) clear((char *)newmem + oldsize, newsize - oldsize); memcpy(newmem, old, oldsize); } else if (needsclear) clear(newmem, newsize); return newmem; } inline char *rstrextend(region r, const char *old, size_t newsize) { return internal_rstrextend(r, old, newsize, 0); } inline char *rstrextend0(region r, const char *old, size_t newsize) { return internal_rstrextend(r, old, newsize, 1); } inline void *typed_ralloc(region r, size_t size, type_t t) { return rstralloc0(r, size); } void *__rcralloc_small0(region r, size_t size) { char *mem2; mem2 = PALIGN(r->normal.page.allocfrom, RALIGNMENT); if (mem2 + size >= r->normal.page.end) return typed_ralloc(r, size, 0); r->normal.page.allocfrom = mem2 + size; postclear(mem2, size); return mem2; } void *typed_rarrayextend(region r, void *old, size_t n, size_t size, type_t t) { return rstrextend0(r, old, n * size); } void *typed_rarrayalloc(region r, size_t n, size_t size, type_t t) { return typed_ralloc(r, n * size, t); } void typed_rarraycopy(void *to, void *from, size_t n, size_t size, type_t type) { memcpy(to, from, n * size); } static void delregion(region r) { nochildren(r); free_all_pages(r, &r->normal); } void deleteregion(region r) { unlink_region(r); delregion(r); } void deleteregion_ptr(region *r) { region tmp = *r; *r = NULL; deleteregion(tmp); } void deleteregion_array(int n, region *regions) { int i; for (i = 0; i < n; i++) unlink_region(regions[i]); for (i = 0; i < n; i++) { delregion(regions[i]); regions[i] = NULL; } } region regionof(void *ptr) { return page_region(PAGENB(ptr)); } void region_init(void) { rstart = -64; /* Save 64 bytes of memory! (sometimes ;-)) */ init_pages(); permanent = newregion(); #ifdef DEBUG_RALLOC if (getenv("REGIONSTATS")) benchmark_init(); atexit(memusage); #endif } nomem_handler set_nomem_handler(nomem_handler newhandler) { nomem_handler oldh = nomem_h; nomem_h = newhandler; return oldh; } #ifndef NO_REGION_MAIN int region_main(int argc, char **argv, char **envp); int main(int argc, char **argv, char **envp) { region_init(); return region_main(argc, argv, envp); } #endif /* Debugging support */ static FILE *out; static void printref(void *x) { #ifndef LARGE_ADDRESSES if (x >= (void *)__rcregionmap && x < (void *)&__rcregionmap[MAXPAGE]) return; #endif fprintf(out, "info symbol 0x%p\n", x); } void findrefs(region r, void *from, void *to) { char *f; if (!out) out = fopen("/dev/tty", "w"); for (f = PALIGN(from, PTRALIGNMENT); f < (char *)to; f += PTRALIGNMENT) if (regionof(*(void **)f) == r) printref(f); fflush(out); } #if defined(__GNUC__) && defined(sparc) /* This code breaks some version of sun's cc at least */ extern void _DYNAMIC, _end; void findgrefs(region r) { findrefs(r, &_DYNAMIC, &_end); } #endif void findrrefs(region r, region from) { struct page *p; for (p = from->normal.pages; p; p = p->next) findrefs(r, (char *)&p->previous, (char *)p + RPAGESIZE); for (p = r->normal.bigpages; p; p = p->next) findrefs(r, (char *)&p->previous, (char *)p + p->pagecount * RPAGESIZE); } nescc-1.3.4/src/libcompat/regions.h000066400000000000000000000074251177770303300172120ustar00rootroot00000000000000/* * Copyright (c) 1999-2001 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the * distribution. * - Neither the name of the University of California nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * */ #ifndef REGIONS_H #define REGIONS_H #define deletes //#define traditional #define sameregion #define parentptr #define RPAGELOG 12 typedef struct region_ *region; extern region permanent; #include void region_init(void); region newregion(void); region newsubregion(region parent); typedef int type_t; #define rctypeof(type) 0 /* Low-level alloc with dynamic type info */ void *typed_ralloc(region r, size_t size, type_t type); void *typed_rarrayalloc(region r, size_t n, size_t size, type_t type); void *typed_rarrayextend(region r, void *old, size_t n, size_t size, type_t type); void typed_rarraycopy(void *to, void *from, size_t n, size_t size, type_t type); void *__rcralloc_small0(region r, size_t size); /* In theory, the test at the start of qalloc should give the same benefit. In practice, it doesn't (gcc, at least, generates better code for __rcralloc_small0 than the equivalent path through typed_ralloc */ #define ralloc(r, type) (sizeof(type) < (1 << (RPAGELOG - 3)) ? __rcralloc_small0((r), sizeof(type)) : typed_ralloc((r), sizeof(type), rctypeof(type))) #define rarrayalloc(r, n, type) typed_rarrayalloc((r), (n), sizeof(type), rctypeof(type)) #define rarrayextend(r, old, n, type) typed_rarrayextend((r), (old), (n), sizeof(type), rctypeof(type)) #define rarraycopy(to, from, n, type) typed_rarraycopy((to), (from), (n), sizeof(type), rctypeof(type)) char *rstralloc(region r, size_t size); char *rstralloc0(region r, size_t size); char *rstrdup(region r, const char *s); /* rstrextend is used to extend an old string. The string MUST have been initially allocated by a call to rstrextend with old == NULL (you cannot initially allocate the string with rstralloc) */ char *rstrextend(region r, const char *old, size_t newsize); char *rstrextend0(region r, const char *old, size_t newsize); void deleteregion(region r); void deleteregion_ptr(region *r); void deleteregion_array(int n, region *regions); region regionof(void *ptr); typedef void (*nomem_handler)(void); nomem_handler set_nomem_handler(nomem_handler newhandler); /* Debugging support */ void findrefs(region r, void *from, void *to); void findgrefs(region r); void findrrefs(region r, region from); #endif nescc-1.3.4/src/libcompat/stats.c000066400000000000000000000042101177770303300166620ustar00rootroot00000000000000#include #include #include #include #include #if 0 #ifdef sparc #include #include /* Actually this can break if we're unlucky (context switch between rd tick and srlx */ #ifdef __GNUC__ register unsigned long long tscr asm("%o0"); #define tsc() ({ \ __asm__ __volatile__("rd %%tick,%%o1; srlx %%o1,32,%%o0" \ : : : "%o0", "%o1"); \ tscr; }) #else #define tsc() 0 #endif static double proc_frequency(void) { processor_info_t pinfo; processor_info(0, &pinfo); return pinfo.pi_clock * 1e6; } #endif #ifdef i386 #include #define tsc() ({unsigned long long x; rdtscll(x); x; }) #define rdpmcll(counter,x) \ __asm__ __volatile__("rdpmc" \ : "=A" (x) \ : "c" (counter)) #define pmc0() ({unsigned long long x; rdpmcll(0, x); x; }) #define pmc1() ({unsigned long long x; rdpmcll(1, x); x; }) double proc_frequency(void) { return 550e6; } #endif static struct tms s, e; unsigned long long start_ticks, end_ticks; static double ll_to_double(unsigned long long x) { return 4294967296.0 * (unsigned long)(x >> 32) + (unsigned long)x; } static void print_memory_usage(void) { #if 0 fprintf(stderr, "blocks alloced: %lu, %.1f%% 8K\n", (unsigned long)(total_8kblocks + total_otherblocks), (100.0 * total_8kblocks) / (total_8kblocks + total_otherblocks)); fprintf(stderr, "system bytes(kB): %lu\n", ((unsigned long)total_system_bytes + 512) / 1024); fprintf(stderr, "overhead: %.1f%%\n", total_system_bytes * 100.0 / bytes.max - 100); #endif { extern void malloc_stats(void); malloc_stats(); } fflush(stderr); } static void print_benchmark(void) { double tt, pfreq; end_ticks = tsc(); times(&e); pfreq = proc_frequency(); tt = ll_to_double(end_ticks - start_ticks) / pfreq; fprintf(stderr, "runtime: %.3f\n", tt); fprintf(stderr, "cputime: %.2f\n", (e.tms_utime - s.tms_utime) / 100.0); print_memory_usage(); } static void benchmark_init(void) { fputs("heap: compat regions\n", stderr); times(&s); start_ticks = tsc(); atexit(print_benchmark); } #else static void benchmark_init(void) {} #endif nescc-1.3.4/src/machine.c000066400000000000000000000032511177770303300151620ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "machine.h" #include "errors.h" #include "c-parse.tab.h" #undef yystype #include "c-parse.h" #include "semantics.h" #include "nesc-gcc.h" #include "machine/avr.c" #include "machine/self.c" #include "machine/keil.c" #include "machine/sdcc.c" #include "machine/msp430.c" #include "machine/env_machine.c" static machine_spec *machines[] = { &avr_machine, &self_machine, &keil_machine, &sdcc_machine, &msp430_machine, &env_machine, NULL }; machine_spec *target = &self_machine; const char *target_compiler = "gcc"; bool select_target(const char *targetname) { machine_spec **scan; for (scan = machines; *scan; scan++) if (!strcmp(targetname, (*scan)->machine_name)) { if (*scan == &env_machine && scan_env_machine(&env_machine, "NESC_MACHINE") == FALSE) { error("invalid target described in env NESC_MACHINE"); return FALSE; } target = *scan; return TRUE; } error("unknown target %s", targetname); return FALSE; } nescc-1.3.4/src/machine.h000066400000000000000000000034531177770303300151730ustar00rootroot00000000000000#ifndef MACHINE_H #define MACHINE_H typedef struct { size_t size, align; } machine_type_spec; struct yystype; typedef struct { const char *machine_name; void (*handle_option)(const char *opt); bool big_endian, pcc_bitfield_type_matters; size_t empty_field_boundary, structure_size_boundary; size_t word_size; machine_type_spec tptr, tfloat, tdouble, tlong_double, tshort, tint, tlong, tlong_long; size_t int1_align, int2_align, int4_align, int8_align; size_t wchar_t_size, size_t_size; bool char_signed, wchar_t_signed; char *async_functions_atribute; cval (*adjust_field_align)(field_declaration fdecl, cval alignment); bool (*decl_attribute)(gcc_attribute attr, data_declaration ddecl); bool (*tag_attribute)(gcc_attribute attr, tag_declaration tdecl); bool (*field_attribute)(gcc_attribute attr, field_declaration fdecl); bool (*type_attribute)(gcc_attribute attr, type *t); void (*preinit)(void); /* Immediately after target selection */ void (*init)(void); /* After everything else is setup */ int (*token)(const char *word, int length, struct yystype *lvalp); /* A Keil C for 8051 special... */ declaration (*keilc_definition)(location loc, cstring keyword, cstring name, expression address); /* Called once when compilation starts. Should: - setup system-specific include paths - return name of a file definining system-specific macros Targets using gcc can set this field to gcc_global_cpp_init */ const char *(*global_cpp_init)(void); /* Called just before preprocessing each file. Modify current.lex.finput as needed (eg, add pragma handlers). Can be NULL. */ void (*file_cpp_init)(void); } machine_spec; extern machine_spec *target; extern const char *target_compiler; bool select_target(const char *targetname); #endif nescc-1.3.4/src/machine/000077500000000000000000000000001177770303300150155ustar00rootroot00000000000000nescc-1.3.4/src/machine/avr.c000066400000000000000000000027251177770303300157570ustar00rootroot00000000000000static bool avr_decl_attribute(gcc_attribute attr, data_declaration ddecl) { const char *name = attr->word1->cstring.data; if (!strcmp(name, "signal")) { ddecl->async = TRUE; ddecl->spontaneous = c_call_atomic; return TRUE; } else if (!strcmp(name, "interrupt")) { ddecl->async = TRUE; ddecl->spontaneous = c_call_nonatomic; return TRUE; } return FALSE; } /* Basic pointer sizes and alignments for the AVR */ static machine_spec avr_machine = { "avr", gcc_save_machine_options, FALSE, /* big_endian */ FALSE, /* pcc_bitfield_type_matters */ 8, /* empty field boundary - in bits */ 8, /* structure size boundary - in bits */ 1, /* word size */ { 2, 1 }, /* pointer type */ { 4, 1 }, /* float */ { 4, 1 }, /* double */ { 4, 1 }, /* long double */ { 2, 1 }, /* short */ { 2, 1 }, /* int */ { 4, 1 }, /* long */ { 8, 1 }, /* long long (unsupported in avr-gcc) */ 1, 1, 1, 1, /* int1/2/4/8 align */ 2, 2, /* wchar_t, size_t size */ TRUE, TRUE, /* char, wchar_t signed */ NULL, /* no attribute for async functions */ NULL, /* adjust_field_align */ avr_decl_attribute, /* Attribute handling: declarations */ NULL, NULL, NULL, /* Attribute handling: tag, field, type */ NULL, NULL, /* preint, init */ NULL, /* token */ NULL, /* keil special */ gcc_global_cpp_init, /* global cpp support */ NULL /* per-file cpp support */ }; nescc-1.3.4/src/machine/env_machine.c000066400000000000000000000173631177770303300174470ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2004 The Regents of the University of California. The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ //$Id: env_machine.c,v 1.11 2010/04/21 20:05:52 idgay Exp $ //@author Cory Sharp /* Basic pointer sizes and alignments for a machine set in the environment * variable NESC_MACHINE of the form: * * export NESC_MACHINE="long_double=8,4 gcc=some-other-gcc" * * Particular order of the keynames is not necessary. The defaults below * are taken for otherwise unspecified values. */ #include static machine_spec env_machine = { "env", gcc_save_machine_options, /* [default] */ /* [keyname] */ FALSE, /* big_endian */ FALSE, /* pcc_bitfield_type_matters */ 8, /* empty_field_boundary */ 8, /* structure_size_boundary */ 1, /* word size */ {2, 1}, /* pointer */ {4, 1}, /* float */ {4, 1}, /* double */ {4, 1}, /* long_double */ {2, 1}, /* short */ {2, 1}, /* int */ {4, 1}, /* long */ {8, 1}, /* long_long */ 1, 1, 1, 1, /* int1248_align */ 2, 2, /* wchar_size_size */ TRUE, TRUE, /* char_wchar_signed */ NULL, /* no attribute for async functions */ NULL, /* adjust_field_align */ NULL, NULL, NULL, NULL, /* Attributes: need some way to specify this */ NULL, NULL, /* preinit, init */ NULL, /* token */ NULL, /* keil special */ gcc_global_cpp_init, /* global cpp support */ NULL /* per-file cpp support */ }; static const char *find_char(const char *str, const char *strend, char ch) { while (str != strend && *str != ch) str++; return str; } static const char *find_not_char(const char *str, const char *strend, char ch) { while (str != strend && *str == ch) str++; return str; } static bool is_literali(const char *literal, const char *str, const char *strend) { int n = strlen(literal); if (n == (strend - str) && strncasecmp(literal, str, n) == 0) return TRUE; return FALSE; } static int scan_boolean(const char *str, const char *strend) { if (is_literali("false", str, strend)) return 0; if (is_literali("true", str, strend)) return 1; return -1; } static bool scan_intlist(const char *str, const char *strend, int *intlist, int count) { while (count-- > 0) { if (str == strend) return FALSE; *intlist++ = atoi(str); str = find_not_char(find_char(str, strend, ','), strend, ','); } if (str != strend) return FALSE; return TRUE; } static bool scan_env_machine(machine_spec * machine, const char *envname) { const char *begin = getenv(envname); const char *end = begin; int n_errors = 0; struct { const char *name; machine_type_spec *spec; } typespecs[] = { { "pointer", &(machine->tptr) }, { "float", &(machine->tfloat) }, { "double", &(machine->tdouble) }, { "long_double", &(machine->tlong_double) }, { "short", &(machine->tshort) }, { "int", &(machine->tint) }, { "long", &(machine->tlong) }, { "long_long", &(machine->tlong_long) }, { NULL, NULL } }; if (begin == NULL) { error("environment variable %s is undefined", envname); return FALSE; } end = begin + strlen(begin); while (begin != end) { const char *space = find_char(begin, end, ' '); const char *equal = find_char(begin, space, '='); const char *value = find_not_char(equal, space, '='); const char *name = "(unknown)"; int intlist[4] = { 0, 0, 0, 0 }; if (is_literali(name = "pcc_bitfield_type_matters", begin, equal)) { int b = scan_boolean(value, space); if (b != -1) { machine->pcc_bitfield_type_matters = b ? TRUE : FALSE; } else { error("%s.%s, expected 'false' or 'true'", envname, name); n_errors++; } } else if (is_literali(name = "big_endian", begin, equal)) { int b = scan_boolean(value, space); if (b != -1) { machine->big_endian = b ? TRUE : FALSE; } else { error("%s.%s, expected 'false' or 'true'", envname, name); n_errors++; } } else if (is_literali(name = "empty_field_boundary", begin, equal)) { if (scan_intlist(value, space, intlist, 1) == TRUE) { machine->empty_field_boundary = intlist[0]; } else { error("%s.%s, expected one int", envname, name); n_errors++; } } else if (is_literali(name = "structure_size_boundary", begin, equal)) { if (scan_intlist(value, space, intlist, 1) == TRUE) { machine->structure_size_boundary = intlist[0]; } else { error("%s.%s, expected one int", envname, name); n_errors++; } } else if (is_literali(name = "word_size", begin, equal)) { if (scan_intlist(value, space, intlist, 1) == TRUE) { machine->word_size = intlist[0]; } else { error("%s.%s, expected one int", envname, name); n_errors++; } } else if (is_literali(name = "int1248_align", begin, equal)) { if (scan_intlist(value, space, intlist, 4) == TRUE) { machine->int1_align = intlist[0]; machine->int2_align = intlist[1]; machine->int4_align = intlist[2]; machine->int8_align = intlist[3]; } else { error("%s.%s, expected 4 ints", envname, name); n_errors++; } } else if (is_literali(name = "wchar_size_size", begin, equal)) { if (scan_intlist(value, space, intlist, 2) == TRUE) { machine->wchar_t_size = intlist[0]; machine->size_t_size = intlist[1]; } else { error("%s.%s, expected 2 ints, wchar_t size and size_t size", envname, name); n_errors++; } } else if (is_literali(name = "char_wchar_signed", begin, equal)) { const char *comma = find_char(value, space, ','); if (comma != space) { int b1 = scan_boolean(value, comma); int b2 = scan_boolean(find_not_char(comma, space, ','), space); if (b1 != -1 && b2 != -1) { machine->char_signed = b1 ? TRUE : FALSE; machine->wchar_t_signed = b2 ? TRUE : FALSE; } else { error("%s.%s, bools must be 'false' or 'true'", envname, name); n_errors++; } } else { error("%s.%s, expected 2 bools, char and wchar signed", envname, name); n_errors++; } } else if (is_literali(name = "async_functions", begin, equal)) { int l = space - value; char *s = rstralloc(permanent, l + 1); memcpy(s, value, l); s[l] = '\0'; machine->async_functions_atribute = s; } else { int i = 0; for (i = 0; typespecs[i].name != NULL; i++) { if (is_literali(name = typespecs[i].name, begin, equal)) { if (scan_intlist(value, space, intlist, 2) == TRUE) { typespecs[i].spec->size = intlist[0]; typespecs[i].spec->align = intlist[1]; break; } else { error("%s.%s, expected 2 ints, size and align", envname, name); n_errors++; } } } if (typespecs[i].name == NULL) { error("%s, unknown field name starting at %s", envname, begin); n_errors++; } } begin = find_not_char(space, end, ' '); } return (n_errors == 0) ? TRUE : FALSE; } nescc-1.3.4/src/machine/keil-gperf.h000066400000000000000000000144261177770303300172220ustar00rootroot00000000000000/* C code produced by gperf version 3.0.4 */ /* Command-line: gperf -j1 -t -E -H keil_hash -N is_keil_word -k'1,3,$' machine/keil.gperf */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) /* The character set is not based on ISO-646. */ error "gperf generated tables don't work with this execution character set. Please report a bug to ." #endif #line 1 "machine/keil.gperf" /* This file is part of the nesC compiler. Copyright (C) 2007 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #line 21 "machine/keil.gperf" struct keilword { char *name; int token; }; /* maximum key range = 20, duplicates = 0 */ #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static unsigned int keil_hash (str, len) register const char *str; register unsigned int len; { static unsigned char asso_values[] = { 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 12, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 23, 0, 15, 0, 13, 5, 0, 7, 23, 0, 23, 23, 2, 11, 11, 23, 10, 23, 0, 4, 0, 7, 23, 23, 8, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23 }; return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[0]] + asso_values[(unsigned char)str[len - 1]]; } #ifdef __GNUC__ __inline #if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__ __attribute__ ((__gnu_inline__)) #endif #endif struct keilword * is_keil_word (str, len) register const char *str; register unsigned int len; { enum { TOTAL_KEYWORDS = 20, MIN_WORD_LENGTH = 3, MAX_WORD_LENGTH = 10, MIN_HASH_VALUE = 3, MAX_HASH_VALUE = 22 }; static struct keilword wordlist[] = { {""}, {""}, {""}, #line 29 "machine/keil.gperf" {"far", TARGET_ATTRIBUTE0}, #line 23 "machine/keil.gperf" {"_at_", TARGET_ATTRIBUTE1}, #line 30 "machine/keil.gperf" {"idata", TARGET_ATTRIBUTE0}, #line 40 "machine/keil.gperf" {"_task_", TARGET_ATTRIBUTE1}, #line 37 "machine/keil.gperf" {"sfr", TARGET_DEF}, #line 36 "machine/keil.gperf" {"sbit", TARGET_DEF}, #line 31 "machine/keil.gperf" {"interrupt", TARGET_ATTRIBUTE1}, #line 34 "machine/keil.gperf" {"_priority_", TARGET_ATTRIBUTE1}, #line 39 "machine/keil.gperf" {"small", TARGET_ATTRIBUTE0}, #line 32 "machine/keil.gperf" {"large", TARGET_ATTRIBUTE0}, #line 42 "machine/keil.gperf" {"xdata", TARGET_ATTRIBUTE0}, #line 35 "machine/keil.gperf" {"reentrant", TARGET_ATTRIBUTE0}, #line 33 "machine/keil.gperf" {"pdata", TARGET_ATTRIBUTE0}, #line 24 "machine/keil.gperf" {"alien", TARGET_ATTRIBUTE0}, #line 28 "machine/keil.gperf" {"data", TARGET_ATTRIBUTE0}, #line 27 "machine/keil.gperf" {"compact", TARGET_ATTRIBUTE0}, #line 41 "machine/keil.gperf" {"using", TARGET_ATTRIBUTE1}, #line 25 "machine/keil.gperf" {"bdata", TARGET_ATTRIBUTE0}, #line 38 "machine/keil.gperf" {"sfr16", TARGET_DEF}, #line 26 "machine/keil.gperf" {"code", TARGET_ATTRIBUTE0} }; if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) { register int key = keil_hash (str, len); if (key <= MAX_HASH_VALUE && key >= 0) { register const char *s = wordlist[key].name; if (*str == *s && !strcmp (str + 1, s + 1)) return &wordlist[key]; } } return 0; } nescc-1.3.4/src/machine/keil.c000066400000000000000000000076311177770303300161140ustar00rootroot00000000000000/* Partial model for supporting Keil C (original version based on work by David Patnode (dpatnode@bradley.edu) for this file). Maps the address space keywords into attributes (see keil_token). Maps using, interrupt, etc into attributes (see keil_token). Defines typedefs for bit. The magic sfr/sfr16/sbit name = address Keil extension is rewritten to sfr __attribute((keil_address(address))) name using predefined typedefs for sbit, sfr and sfr16. This rewrite depends on the special Keil hack in the parser (look for TARGET_DEF in c-parse.y). Does not: - compute pointer size correctly (assumes they are all 2 bytes); could improve by writing attribute handling functions to compute the correct pointer size based on the address space attributes... (note the default pointer size should be 2 bytes anyway, because that size is used to size ptrdiff_t_type and intptr_type, and those will be unhappy if there's no integer type of the same size as the pointer size) - check any of the semantic restrictions associated with all these extensions */ #include "machine/keil-gperf.h" static data_declaration keil_sbit_ddecl, keil_sfr_ddecl, keil_sfr16_ddecl; static void keil_init(void) { declare_builtin_type("bit", unsigned_char_type); keil_sbit_ddecl = declare_builtin_type("sbit", unsigned_char_type); keil_sfr_ddecl = declare_builtin_type("sfr", unsigned_char_type); keil_sfr16_ddecl = declare_builtin_type("sfr16", unsigned_short_type); } static int keil_token(const char *token, int len, struct yystype *lvalp) { struct keilword *keyword = is_keil_word(token, len); if (keyword) { lvalp->idtoken.location = last_location(); lvalp->idtoken.id = make_cstring(parse_region, token, len); lvalp->idtoken.decl = NULL; return keyword->token; } return IDENTIFIER; } declaration keil_special(location loc, cstring keyword, cstring name, expression address) { /* I just love this kind of code. */ region r = parse_region; /* Build __attribute__((keil_address(address))) */ word aword = new_word(r, loc, str2cstring(r, "keil_address")); target_attribute address_attr = new_target_attribute(r, loc, aword, address); /* Build a declaration for name */ declarator d = make_identifier_declarator(loc, name); data_declaration type_ddecl; type_element elems; declaration vd; data_decl dd; /* Pick appropriate fake typedef for name based on keyword */ if (!strcmp(keyword.data, "sbit")) type_ddecl = keil_sbit_ddecl; else if (!strcmp(keyword.data, "sfr")) type_ddecl = keil_sfr_ddecl; else type_ddecl = keil_sfr16_ddecl; elems = CAST(type_element, new_typename(r, loc, type_ddecl)); vd = start_decl(d, NULL, elems, FALSE, CAST(attribute, address_attr)); finish_decl(vd, NULL); dd = new_data_decl(r, loc, elems, vd); return CAST(declaration, dd); } /* Basic pointer sizes and alignments for the 8051's compiled w/ Keil C51 */ static machine_spec keil_machine = { "keil51", NULL, TRUE, /* big_endian */ FALSE, /* pcc_bitfield_type_matters */ 8, /* empty field boundary - in bits */ 8, /* structure size boundary - in bits */ 1, /* word size */ { 2, 1 }, /* pointer type */ { 4, 1 }, /* float */ { 4, 1 }, /* double */ { 4, 1 }, /* long double */ { 2, 1 }, /* short */ { 2, 1 }, /* int */ { 4, 1 }, /* long */ { 8, 1 }, /* long long (unsupported in avr-gcc) */ 1, 1, 1, 1, /* int1/2/4/8 align */ 2, 2, /* wchar_t, size_t size */ TRUE, TRUE, /* char, wchar_t signed */ "reentrant", /* attribute for async functions */ NULL, /* adjust_field_align function */ NULL, NULL, NULL, NULL, /* attribute handling functions */ NULL, keil_init, keil_token, keil_special, /* Keil C special */ gcc_global_cpp_init, /* global cpp support: this should be tailored to keil to get correct behaviour */ NULL /* per-file cpp support */ }; nescc-1.3.4/src/machine/keil.gperf000066400000000000000000000023251177770303300167700ustar00rootroot00000000000000%{ /* This file is part of the nesC compiler. Copyright (C) 2007 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ %} struct keilword { char *name; int token; }; %% _at_, TARGET_ATTRIBUTE1 alien, TARGET_ATTRIBUTE0 bdata, TARGET_ATTRIBUTE0 code, TARGET_ATTRIBUTE0 compact, TARGET_ATTRIBUTE0 data, TARGET_ATTRIBUTE0 far, TARGET_ATTRIBUTE0 idata, TARGET_ATTRIBUTE0 interrupt, TARGET_ATTRIBUTE1 large, TARGET_ATTRIBUTE0 pdata, TARGET_ATTRIBUTE0 _priority_, TARGET_ATTRIBUTE1 reentrant, TARGET_ATTRIBUTE0 sbit, TARGET_DEF sfr, TARGET_DEF sfr16, TARGET_DEF small, TARGET_ATTRIBUTE0 _task_, TARGET_ATTRIBUTE1 using, TARGET_ATTRIBUTE1 xdata, TARGET_ATTRIBUTE0 nescc-1.3.4/src/machine/msp430.c000066400000000000000000000030641177770303300162120ustar00rootroot00000000000000static bool msp430_decl_attribute(gcc_attribute attr, data_declaration ddecl) { const char *name = attr->word1->cstring.data; /* Different from the AVR! */ if (!strcmp(name, "signal")) { ddecl->spontaneous = c_call_nonatomic; return TRUE; } else if (!strcmp(name, "interrupt")) { ddecl->async = TRUE; /* The signal attribute may have come first */ if (ddecl->spontaneous != c_call_nonatomic) ddecl->spontaneous = c_call_atomic; return TRUE; } return FALSE; } /* Basic pointer sizes and alignments for the TI MSP430 */ static machine_spec msp430_machine = { "msp430", gcc_save_machine_options, FALSE, /* big_endian */ FALSE, /* pcc_bitfield_type_matters */ 16, /* empty field boundary - in bits */ 8, /* structure size boundary - in bits */ 2, /* word size */ { 2, 2 }, /* pointer type */ { 4, 2 }, /* float */ { 4, 2 }, /* double */ { 4, 2 }, /* long double */ { 2, 2 }, /* short */ { 2, 2 }, /* int */ { 4, 2 }, /* long */ { 8, 2 }, /* long long */ 1, 2, 2, 2, /* int1/2/4/8 align */ 2, 2, /* wchar_t, size_t size */ TRUE, TRUE, /* char, wchar_t signed */ NULL, /* no attribute for async functions */ NULL, /* adjust_field_align */ msp430_decl_attribute, /* Attribute handling: declarations */ NULL, NULL, NULL, /* Attribute handling: tag, field, type */ NULL, NULL, /* preint, init */ NULL, /* token */ NULL, /* keil special */ gcc_global_cpp_init, /* global cpp support */ NULL /* per-file cpp support */ }; nescc-1.3.4/src/machine/sdcc-gperf.h000066400000000000000000000146551177770303300172160ustar00rootroot00000000000000/* C code produced by gperf version 3.0.4 */ /* Command-line: gperf -j1 -t -E -H sdcc_hash -N is_sdcc_word -k1,3 machine/sdcc.gperf */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) /* The character set is not based on ISO-646. */ error "gperf generated tables don't work with this execution character set. Please report a bug to ." #endif #line 1 "machine/sdcc.gperf" /* This file is part of the nesC compiler. Copyright (C) 2007 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #line 21 "machine/sdcc.gperf" struct sdccword { char *name; int token; }; /* maximum key range = 21, duplicates = 0 */ #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static unsigned int sdcc_hash (str, len) register const char *str; register unsigned int len; { static unsigned char asso_values[] = { 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 23, 0, 23, 14, 3, 23, 13, 23, 23, 0, 23, 23, 23, 23, 13, 23, 9, 23, 6, 23, 6, 5, 23, 23, 1, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23 }; register int hval = len; switch (hval) { default: hval += asso_values[(unsigned char)str[2]]; /*FALLTHROUGH*/ case 2: case 1: hval += asso_values[(unsigned char)str[0]]; break; } return hval; } #ifdef __GNUC__ __inline #if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__ __attribute__ ((__gnu_inline__)) #endif #endif struct sdccword * is_sdcc_word (str, len) register const char *str; register unsigned int len; { enum { TOTAL_KEYWORDS = 20, MIN_WORD_LENGTH = 2, MAX_WORD_LENGTH = 11, MIN_HASH_VALUE = 2, MAX_HASH_VALUE = 22 }; static struct sdccword wordlist[] = { {""}, {""}, #line 40 "machine/sdcc.gperf" {"at", TARGET_ATTRIBUTE1}, {""}, #line 30 "machine/sdcc.gperf" {"__at", TARGET_ATTRIBUTE1}, #line 37 "machine/sdcc.gperf" {"idata", TARGET_ATTRIBUTE0}, #line 35 "machine/sdcc.gperf" {"xdata", TARGET_ATTRIBUTE0}, #line 27 "machine/sdcc.gperf" {"__idata", TARGET_ATTRIBUTE0}, #line 25 "machine/sdcc.gperf" {"__xdata", TARGET_ATTRIBUTE0}, #line 23 "machine/sdcc.gperf" {"__data", TARGET_ATTRIBUTE0}, #line 42 "machine/sdcc.gperf" {"using", TARGET_ATTRIBUTE1}, #line 31 "machine/sdcc.gperf" {"__interrupt", TARGET_ATTRIBUTE1}, #line 32 "machine/sdcc.gperf" {"__using", TARGET_ATTRIBUTE1}, #line 33 "machine/sdcc.gperf" {"data", TARGET_ATTRIBUTE0}, #line 38 "machine/sdcc.gperf" {"pdata", TARGET_ATTRIBUTE0}, #line 41 "machine/sdcc.gperf" {"interrupt", TARGET_ATTRIBUTE1}, #line 28 "machine/sdcc.gperf" {"__pdata", TARGET_ATTRIBUTE0}, #line 34 "machine/sdcc.gperf" {"near", TARGET_ATTRIBUTE0}, #line 26 "machine/sdcc.gperf" {"__far", TARGET_ATTRIBUTE0}, #line 24 "machine/sdcc.gperf" {"__near", TARGET_ATTRIBUTE0}, #line 29 "machine/sdcc.gperf" {"__code", TARGET_ATTRIBUTE0}, #line 39 "machine/sdcc.gperf" {"code", TARGET_ATTRIBUTE0}, #line 36 "machine/sdcc.gperf" {"far", TARGET_ATTRIBUTE0} }; if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) { register int key = sdcc_hash (str, len); if (key <= MAX_HASH_VALUE && key >= 0) { register const char *s = wordlist[key].name; if (*str == *s && !strcmp (str + 1, s + 1)) return &wordlist[key]; } } return 0; } nescc-1.3.4/src/machine/sdcc.c000066400000000000000000000055401177770303300161010ustar00rootroot00000000000000/* Based on keil.c */ /* Basic pointer sizes and alignments for the 8051's compiled w/ SDCC */ /* Partial model for supporting SDCC. Maps the address space keywords into attributes (see sdcc_token). Maps __at, __using, __interrupt, etc into attributes (see sdcc_token). Defines typedefs for bit, sbit, sfr, sfr16 and sfr32. Does not: - allow you to say (e.g.) "signed bit", or "unsigned bit"; this applies to bit, sbit, sfr, sfr16 and sfr32. - compute pointer size correctly (assumes they are all 2 bytes); could improve by writing attribute handling functions to compute the correct pointer size based on the address space attributes... (note the default pointer size should be 2 bytes anyway, because that size is used to size ptrdiff_t_type and intptr_type, and those will be unhappy if there's no integer type of the same size as the pointer size) - check any of the semantic restrictions associated with all these extensions */ #include "machine/sdcc-gperf.h" static void sdcc_init(void) { declare_builtin_type("bit", unsigned_char_type); declare_builtin_type("sbit", unsigned_char_type); declare_builtin_type("sfr", unsigned_char_type); declare_builtin_type("sfr16", unsigned_short_type); declare_builtin_type("sfr32", unsigned_long_type); declare_builtin_type("__bit", unsigned_char_type); declare_builtin_type("__sbit", unsigned_char_type); declare_builtin_type("__sfr", unsigned_char_type); declare_builtin_type("__sfr16", unsigned_short_type); declare_builtin_type("__sfr32", unsigned_long_type); } static int sdcc_token(const char *token, int len, struct yystype *lvalp) { struct sdccword *keyword = is_sdcc_word(token, len); if (keyword) { lvalp->idtoken.location = last_location(); lvalp->idtoken.id = make_cstring(parse_region, token, len); lvalp->idtoken.decl = NULL; return keyword->token; } return IDENTIFIER; } static machine_spec sdcc_machine = { "sdcc51", NULL, FALSE, /* big_endian */ FALSE, /* pcc_bitfield_type_matters */ 8, /* empty field boundary - in bits */ 8, /* structure size boundary - in bits */ 1, /* word size */ { 2, 1 }, /* pointer type */ { 4, 1 }, /* float */ { 4, 1 }, /* double */ { 4, 1 }, /* long double */ { 2, 1 }, /* short */ { 2, 1 }, /* int */ { 4, 1 }, /* long */ { 8, 1 }, /* long long */ 1, 1, 1, 1, /* int1/2/4/8 align */ 2, 2, /* wchar_t, size_t size */ TRUE, TRUE, /* char, wchar_t signed */ NULL, /* no attribute for async functions */ NULL, /* adjust_field_align function */ NULL, NULL, NULL, NULL, /* attribute handling functions */ NULL, sdcc_init, sdcc_token, NULL, /* Keil C special */ gcc_global_cpp_init, /* global cpp support: this should be tailored to sdcc to get correct behaviour */ NULL /* per-file cpp support */ }; nescc-1.3.4/src/machine/sdcc.gperf000066400000000000000000000023561177770303300167640ustar00rootroot00000000000000%{ /* This file is part of the nesC compiler. Copyright (C) 2007 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ %} struct sdccword { char *name; int token; }; %% __data, TARGET_ATTRIBUTE0 __near, TARGET_ATTRIBUTE0 __xdata, TARGET_ATTRIBUTE0 __far, TARGET_ATTRIBUTE0 __idata, TARGET_ATTRIBUTE0 __pdata, TARGET_ATTRIBUTE0 __code, TARGET_ATTRIBUTE0 __at, TARGET_ATTRIBUTE1 __interrupt, TARGET_ATTRIBUTE1 __using, TARGET_ATTRIBUTE1 data, TARGET_ATTRIBUTE0 near, TARGET_ATTRIBUTE0 xdata, TARGET_ATTRIBUTE0 far, TARGET_ATTRIBUTE0 idata, TARGET_ATTRIBUTE0 pdata, TARGET_ATTRIBUTE0 code, TARGET_ATTRIBUTE0 at, TARGET_ATTRIBUTE1 interrupt, TARGET_ATTRIBUTE1 using, TARGET_ATTRIBUTE1 nescc-1.3.4/src/machine/self.c000066400000000000000000000063271177770303300161220ustar00rootroot00000000000000#include /* Basic pointer sizes and alignments for this machine */ /* GCC is broken (could be a broken design issue ;-)), so need the typedefs (rather than using the types directly in the calls to alignof) */ typedef int __attribute__ ((mode(__word__))) myword; typedef int __attribute__ ((mode(__byte__))) myint1; typedef int __attribute__ ((mode(__HI__))) myint2; typedef int __attribute__ ((mode(__SI__))) myint4; typedef int __attribute__ ((mode(__DI__))) myint8; /* Find out how big the smallest struct is. Assume this tells us to what multiples structs are rounded. */ struct self_smallest { char x; }; /* Find out to what multiple 0-bit bitfields round thingg */ struct self_efb { char x : 1; char : 0; }; /* Detect if bitfield type influences the struct */ struct self_pcc1 { int x : 1; }; struct self_pcc2 { char x : 1; }; static void self_preinit(void); #ifdef __i386__ #define SELF_ADJUST_FIELD_ALIGN self_adjust_field_align #define SELF_HANDLE_OPTION self_handle_option static bool align_double; static cval self_adjust_field_align(field_declaration fdecl, cval alignment) { if (!align_double && type_arithmetic(type_array_of_base(fdecl->type))) alignment = cval_min(make_cval_unsigned(32, size_t_type), alignment); return alignment; } static void self_handle_option(const char *arg) { if (!strcmp(arg, "-malign-double")) align_double = TRUE; else if (!strcmp(arg, "-mnoalign-double")) align_double = FALSE; gcc_save_machine_options(arg); } #else #define SELF_ADJUST_FIELD_ALIGN NULL #define SELF_HANDLE_OPTION gcc_save_machine_options #endif static machine_spec self_machine = { "pc", SELF_HANDLE_OPTION, FALSE, /* big_endian, set in preinit */ /* pcc_bitfield_type_matters */ sizeof(struct self_pcc1) != sizeof(struct self_pcc2), /* empty field boundary */ sizeof(struct self_efb) * BITSPERBYTE, /* structure size boundary */ sizeof(struct self_smallest) * BITSPERBYTE, sizeof(myword), /* word size */ { sizeof(void *), __alignof__(void *) }, /* pointer type */ { sizeof(float), __alignof__(float) }, /* float */ { sizeof(double), __alignof__(double) }, /* double */ { sizeof(long double), __alignof__(long double) }, /* long double */ { sizeof(short), __alignof__(short) }, /* short */ { sizeof(int), __alignof__(int) }, /* int */ { sizeof(long), __alignof__(long) }, /* long */ { sizeof(long long), __alignof__(long long) }, /* long long */ __alignof__(myint1), __alignof__(myint2), __alignof__(myint4), __alignof__(myint8), /* int1/2/4/8 align */ sizeof(wchar_t), sizeof(size_t), /* wchar_t, size_t size */ (char)-1 < 0, (wchar_t)-1 < 0, /* char, wchar_t signed */ NULL, /* no attribute for async functions */ SELF_ADJUST_FIELD_ALIGN, /* adjust_field_align */ NULL, NULL, NULL, NULL, /* No special attributes */ self_preinit, NULL, /* init */ NULL, /* token */ NULL, /* keil special */ gcc_global_cpp_init, /* global cpp support */ NULL /* per-file cpp support */ }; static void self_preinit(void) { union { uint8_t a; uint16_t b; } endian; endian.b = 1; self_machine.big_endian = endian.a != 1; } nescc-1.3.4/src/nconfig.h000066400000000000000000000040771177770303300152150ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NCONFIG_H #define NCONFIG_H /* autoconf/configure options */ #include "autoconf.h" #undef PACKAGE #undef PACKAGE_NAME #undef PACKAGE_STRING #undef PACKAGE_TARNAME #undef PACKAGE_BUGREPORT #undef PACKAGE_VERSION /* Target type structure information. This setup assumes that we are compiling on self, with gcc */ #include #define BITSPERBYTE CHAR_BIT /* Largest signed and unsigned int types (for constants and constant folding) */ typedef long long largest_int; typedef unsigned long long largest_uint; #define LARGEST_UINTBITS (SIZEOF_LONG_LONG * BITSPERBYTE) /* Miscellaneous config */ typedef unsigned char bool; #include "cstring.h" #ifndef NULL #define NULL ((void *)0) #endif #define TRUE 1 #define FALSE 0 #define SUCCESS_EXIT_CODE 0 #define FATAL_EXIT_CODE 33 #ifdef HAVE_ALLOCA_H #include #else #ifndef HAVE_ALLOCA #ifdef __GNUC__ #define alloca __builtin_alloca void *alloca(size_t n); #else #error need alloca #endif #endif #endif #if __GNUC__ >= 3 && __GNUC_MINOR__ >= 1 #define USE_UNNAMED_UNION #endif /* The number of non-significant low-order bits in pointer addresses (typically log2 of the alignment of allocations) */ #define ALIGNMENT_BITS 3 #ifdef WIN32 #define DIR_SEPARATOR '\\' #endif #endif nescc-1.3.4/src/nesc-abstract.c000066400000000000000000001154211177770303300163120ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "nesc-cg.h" #include "nesc-c.h" #include "nesc-abstract.h" #include "c-parse.h" #include "nesc-component.h" #include "nesc-semantics.h" #include "nesc-configuration.h" #include "AST_walk.h" #include "semantics.h" #include "constants.h" #include "nesc-constants.h" #include "c-lex.h" #include "expr.h" #include "nesc-env.h" #include "init.h" #include "attributes.h" #include "nesc-attributes.h" #include "unparse.h" static AST_walker clone_walker; /* data_declaration in: oldidentifier_decl: ignored as illegal in modules string enumerator function_decl identifier component_deref interface_deref typename variable_decl type_parm_decl */ /* tag_declaration in: tag_ref types */ /* field_declaration in: field_ref field_decl tag_declaration */ /* types in: (ignoring declared_type, currently unused) expression asttype field_declaration data_declaration (reptype in tag_declaration does not need instantiating) */ /* typelist in: data_declaration (gparms, can ignore oldstyle_args as not allowed in modules) */ static void *clone(region r, void *vn) { struct location l; node *n = vn; node new = AST_clone(r, *n); (*n)->instantiation = new; new->instantiation = NULL; *n = new; /* Update location to include the container (so we can print instance names in error messages) */ l = *new->location; l.container = current.container; new->location = make_location(l); return new; } static void forward(data_declaration *dd) { data_declaration ddecl = *dd; if (ddecl->instantiation) *dd = ddecl->instantiation; } static void instantiate_ddecl_types(data_declaration ddecl) { /* type's in declarations come from the source code, so cannot be unknown */ ddecl->type = instantiate_type(ddecl->type); if (ddecl->kind == decl_interface_ref && ddecl->gparms) ddecl->gparms = instantiate_typelist(ddecl->gparms); } static data_declaration hack_interface; static int hack_required; static void clone_ddecl(data_declaration ddecl) { data_declaration copy; /* If already cloned, return. */ if (ddecl->instantiation && (!hack_interface || ddecl->instantiation->interface == hack_interface)) { /* If the instantiation's context matches the current one, the instantiation was already done. */ if (ddecl->container && ddecl->instantiation->container == current.container) return; if (ddecl->container_function && ddecl->instantiation->container_function == current.function_decl->ddecl) return; } /* Copy module functions (incl. tasks) and variables */ if (!(ddecl->kind == decl_variable || ddecl->kind == decl_function || ddecl->kind == decl_constant || ddecl->kind == decl_typedef || ddecl->kind == decl_interface_ref)) return; /* Instantiate decls in modules */ if (!(ddecl->container || (ddecl->container_function && ddecl->container_function->container))) return; copy = declare(current.env, ddecl, TRUE); /* We don't have a proper environment, so the container and container_function fields are bogus. Set them correctly. */ if (ddecl->container) /* module level */ { copy->container = current.container; copy->container_function = NULL; } else /* local */ { copy->container = NULL; copy->container_function = current.function_decl->ddecl; } ddecl->instantiation = copy; copy->instantiation = NULL; copy->fn_uses = NULL; copy->nuses = NULL; copy->instanceof = ddecl; copy->interface = hack_interface; /* This hack_required thing is ugly. It's used when instantiating generic interfaces, to match the used/provides at the particular instantiation. */ if (ddecl_is_command_or_event(copy) && hack_required) copy->defined = (copy->ftype == function_command) ^ (hack_required - 1); instantiate_ddecl_types(copy); } static void copy_fields(region r, tag_declaration copy, tag_declaration orig) { field_declaration ofield, *nextfield; copy->fields = new_env(r, NULL); nextfield = ©->fieldlist; for (ofield = orig->fieldlist; ofield; ofield = ofield->next) { field_declaration cfield = ralloc(r, struct field_declaration); *cfield = *ofield; ofield->instantiation = cfield; cfield->instantiation = NULL; if (cfield->name) env_add(copy->fields, cfield->name, cfield); *nextfield = cfield; nextfield = &cfield->next; } } static void forward_tdecl(region r, tag_ref tref) { tag_declaration tdecl = tref->tdecl, copy; /* Ignore non-module tags */ if (!(tdecl->container || (tdecl->container_function && tdecl->container_function->container))) return; /* If already cloned, use instance & return */ if (tdecl->instantiation) { /* If the instantiation's context matches the current one, the instantiation was already done. */ tref->tdecl = tdecl->instantiation; if (tdecl->container && tdecl->instantiation->container == current.container) return; if (tdecl->container_function && tdecl->instantiation->container_function == current.function_decl->ddecl) return; } copy = declare_tag(tref); /* We don't have a proper environment, so the container and container_function fields are bogus. Set them correctly. */ if (tdecl->container) /* module level */ { copy->container = current.container; copy->container_function = NULL; } else /* local */ { copy->container = NULL; copy->container_function = current.function_decl->ddecl; } tref->tdecl = copy; tdecl->instantiation = copy; copy->reptype = tdecl->reptype; if (tdecl->defined) copy_fields(r, copy, tdecl); copy->instanceof = tdecl; copy->defined = tdecl->defined; copy->fields_const = tdecl->fields_const; copy->fields_volatile = tdecl->fields_volatile; copy->transparent_union = tdecl->transparent_union; copy->collapsed = tdecl->collapsed; copy->container = current.container; } static ivalue instantiate_ivalue(region r, ivalue value); static void instantiate_ivalue_array(region r, ivalue copy, ivalue value) { ivalue_array elem, *new_elems = ©->u.array; for (elem = value->u.array; elem; elem = elem->next) { ivalue_array copy_elem = ralloc(r, struct ivalue_array); *new_elems = copy_elem; new_elems = ©_elem->next; copy_elem->from = elem->from; copy_elem->to = elem->to; copy_elem->value = instantiate_ivalue(r, elem->value); } } static void instantiate_ivalue_structured(region r, ivalue copy, ivalue value) { ivalue_field field, *new_fields = ©->u.structured; for (field = value->u.structured; field; field = field->next) { ivalue_field copy_field = ralloc(r, struct ivalue_field); *new_fields = copy_field; new_fields = ©_field->next; if (field->field->instantiation) copy_field->field = field->field->instantiation; else copy_field->field = field->field; copy_field->value = instantiate_ivalue(r, field->value); } } static ivalue instantiate_ivalue(region r, ivalue value) { ivalue copy; // If already instantiated on this pass, return instantiation if (value->instantiation) return value->instantiation; /* type's in ivalues come from the source code, so cannot be unknown */ copy = new_ivalue(r, value->kind, instantiate_type(value->type)); value->instantiation = copy; switch (value->kind) { case iv_base: copy->u.base.require_constant_value = value->u.base.require_constant_value; break; case iv_array: instantiate_ivalue_array(r, copy, value); break; case iv_structured: instantiate_ivalue_structured(r, copy, value); break; default: assert(0); } return copy; } static void clear_ivalue_instantiations(ivalue value); static void clear_ivalue_array(ivalue value) { ivalue_array elem; for (elem = value->u.array; elem; elem = elem->next) clear_ivalue_instantiations(elem->value); } static void clear_ivalue_structured(ivalue value) { ivalue_field field; for (field = value->u.structured; field; field = field->next) clear_ivalue_instantiations(field->value); } static void clear_ivalue_instantiations(ivalue value) { // We've cleared here and beneath if instantiation is already NULL. if (!value->instantiation) return; value->instantiation = NULL; switch (value->kind) { case iv_base: break; case iv_array: clear_ivalue_array(value); break; case iv_structured: clear_ivalue_structured(value); break; default: assert(0); } } static type unary_type(unary e) { switch (e->kind) { case kind_unary_plus: case kind_unary_minus: case kind_bitnot: return type_default_conversion(e->arg1->type); case kind_realpart: case kind_imagpart: { type etype = type_default_conversion(e->arg1->type); return type_complex(etype) ? make_base_type(etype) : etype; } default: /* ++, --, cast, address of, dereference, field ref, component deref, not, sizeof expr, alignof expr */ return instantiate_type(e->type); } } static type binary_type(binary e) { switch(e->kind) { case kind_plus: case kind_minus: case kind_times: case kind_divide: case kind_modulo: case kind_bitand: case kind_bitor: case kind_bitxor: case kind_lshift: case kind_rshift: case kind_plus_assign: case kind_minus_assign: case kind_times_assign: case kind_divide_assign: case kind_modulo_assign: case kind_bitand_assign: case kind_bitor_assign: case kind_bitxor_assign: case kind_lshift_assign: case kind_rshift_assign: { type t1 = type_default_conversion(e->arg1->type); type t2 = type_default_conversion(e->arg2->type); /* Detect the various pointer arithmetic cases. These cannot lead to an unknown type, and don't want to be passed to common type */ if (type_pointer(t1) || type_pointer(t2)) return instantiate_type(e->type); else return common_type(t1, t2); } case kind_leq: case kind_geq: case kind_lt: case kind_gt: case kind_eq: case kind_ne: case kind_andand: case kind_oror: case kind_array_ref: case kind_assign: return instantiate_type(e->type); default: assert(0); return NULL; } } static type conditional_type(conditional e) { type rtype = NULL; type ttype = type_default_conversion(e->arg1->type); type ftype = type_default_conversion(e->arg2->type); if (type_equal(ttype, ftype)) rtype = ttype; else if (type_equal_unqualified(ttype, ftype)) rtype = make_qualified_type(ttype, no_qualifiers); else if (type_real(ttype) && type_real(ftype)) /* This should probably be type_arithmetic. See complex3.c/C9X */ rtype = common_type(ttype, ftype); else if (type_void(ttype) || type_void(ftype)) rtype = void_type; else if (type_pointer(ttype) && type_pointer(ftype)) { type tpointsto = type_points_to(ttype), fpointsto = type_points_to(ftype); if (type_compatible_unqualified(tpointsto, fpointsto)) rtype = common_type(tpointsto, fpointsto); else if (definite_null(e->arg1) && type_void(tpointsto)) rtype = fpointsto; else if (definite_null(e->arg2) && type_void(fpointsto)) rtype = tpointsto; else if (type_void(tpointsto)) rtype = tpointsto; /* void * result */ else if (type_void(fpointsto)) rtype = fpointsto; /* void * result */ else /* Slight difference from GCC: I qualify the result type with the appropriate qualifiers */ rtype = void_type; /* Qualifiers depend on both types */ rtype = make_pointer_type(qualify_type2(rtype, tpointsto, fpointsto)); } else if (type_pointer(ttype) && type_integer(ftype)) rtype = ttype; else if (type_pointer(ftype) && type_integer(ttype)) rtype = ftype; else if (flag_cond_mismatch) rtype = void_type; else assert(0); /* Qualifiers depend on both types */ return qualify_type2(rtype, ttype, ftype); } static type expression_type(expression e) { switch (e->kind) { default: if (is_binary(e)) return binary_type(CAST(binary, e)); if (is_unary(e)) return unary_type(CAST(unary, e)); /* constants, label address, sizeof type, alignof type, identifier, function call: these cannot be unknown type */ return instantiate_type(e->type); case kind_comma: return last_comma(CAST(comma, e))->type; case kind_conditional: return conditional_type(CAST(conditional, e)); /* ick */ break; } } static AST_walker_result clone_expression(AST_walker spec, void *data, expression *n) { expression new = clone(data, n); ivalue old_ivalue = NULL; if (new->ivalue) { ivalue copy = instantiate_ivalue(data, new->ivalue); old_ivalue = new->ivalue; new->ivalue = copy; if (copy->kind == iv_base) copy->u.base.expr = new; } AST_walk_children(spec, data, CAST(node, new)); // clear instantiation field in ivalues to be ready for next // instantiation attempt if (old_ivalue) clear_ivalue_instantiations(old_ivalue); /* A few nodes (related to initialisation) don't have types */ if (new->type) new->type = expression_type(new); return aw_done; } static AST_walker_result clone_stmt(AST_walker spec, void *data, statement *n) { statement new = clone(data, n); /* Update containing_atomic and parent_loop */ if (new->containing_atomic) new->containing_atomic = CAST(atomic_stmt, new->containing_atomic->instantiation); if (new->parent_loop) new->parent_loop = CAST(statement, new->parent_loop->instantiation); return aw_walk; } static AST_walker_result clone_asttype(AST_walker spec, void *data, asttype *n) { asttype new = clone(data, n); /* type's in asttype come from the source code, so cannot be unknown */ new->type = instantiate_type(new->type); return aw_walk; } static AST_walker_result clone_function_decl(AST_walker spec, void *data, function_decl *n) { declaration old = CAST(declaration, *n); function_decl new = clone(data, n); clone_ddecl(new->ddecl); if (new->ddecl->instantiation) { data_declaration instance = new->ddecl->instantiation; /* We need to forward the ddecl *and* update the definition field in the instantiated data_declaration. */ instance->definition = CAST(declaration, new); /* We update the ast field if it pointed to this function_decl (note that command and event data_declarations assume that the ast field points to the original variable_decl) */ if (instance->ast == old) instance->ast = CAST(declaration, new); new->ddecl = instance; } current.function_decl = new; current.env->fdecl = new; AST_walk_children(spec, data, CAST(node, new)); current.function_decl = NULL; current.env->fdecl = NULL; return aw_done; } static AST_walker_result clone_identifier(AST_walker spec, void *data, identifier *n) { clone_expression(spec, data, CASTPTR(expression, n)); forward(&(*n)->ddecl); return aw_done; } static AST_walker_result clone_interface_deref(AST_walker spec, void *data, interface_deref *n) { clone_expression(spec, data, CASTPTR(expression, n)); forward(&(*n)->ddecl); return aw_done; } static AST_walker_result clone_component_deref(AST_walker spec, void *data, component_deref *n) { component_deref new = clone(data, n); new->type = instantiate_type(new->type); forward(&new->ddecl); return aw_walk; } static AST_walker_result clone_variable_decl(AST_walker spec, void *data, variable_decl *n) { declaration old = CAST(declaration, *n); variable_decl new = clone(data, n); if (new->ddecl) { clone_ddecl(new->ddecl); if (new->ddecl->instantiation) { data_declaration instance = new->ddecl->instantiation; /* Forward the ddecl and update the ast and definition fields */ if (instance->definition == old) instance->definition = CAST(declaration, new); if (instance->ast == old) instance->ast = CAST(declaration, new); new->ddecl = instance; } } return aw_walk; } static AST_walker_result clone_type_parm_decl(AST_walker spec, void *data, type_parm_decl *n) { type_parm_decl new = clone(data, n); data_declaration instance; clone_ddecl(new->ddecl); instance = new->ddecl->instantiation; instance->definition = CAST(declaration, new); instance->ast = CAST(declaration, new); new->ddecl = instance; return aw_walk; } static AST_walker_result clone_typename(AST_walker spec, void *data, typename *n) { typename new = clone(data, n); forward(&new->ddecl); return aw_walk; } static AST_walker_result clone_enumerator(AST_walker spec, void *data, enumerator *n) { enumerator new = clone(data, n); clone_ddecl(new->ddecl); if (new->ddecl->instantiation) { data_declaration instance = new->ddecl->instantiation; /* Forward the ddecl and update the ast and definition fields */ instance->definition = CAST(declaration, new); instance->ast = CAST(declaration, new); new->ddecl = instance; } return aw_walk; } static AST_walker_result clone_tag_ref(AST_walker spec, void *data, tag_ref *n) { tag_ref new = clone(data, n); forward_tdecl(data, new); if (new->defined) new->tdecl->definition = new; AST_walk_children(spec, data, CAST(node, new)); return aw_done; } static AST_walker_result clone_field_decl(AST_walker spec, void *data, field_decl *n) { field_decl new = clone(data, n); AST_walk_children(spec, data, CAST(node, new)); new->fdecl = new->fdecl->instantiation; new->fdecl->type = instantiate_type(new->fdecl->type); new->fdecl->ast = new; return aw_done; } static AST_walker_result clone_field_ref(AST_walker spec, void *data, field_ref *n) { field_ref new; clone_expression(spec, data, CASTPTR(expression, n)); new = *n; if (new->fdecl->instantiation) new->fdecl = new->fdecl->instantiation; return aw_done; } static void set_ddecl_instantiation1(data_declaration fndecl, void *data) { data_declaration orig; instantiate_ddecl_types(fndecl); /* Here we make the copy of the fndecl created during parsing (the copy from the actual interface type) point to fndecl. We may have to go two deep for abstract modules in abstract configurations (but don't get fooled by generic interfaces) */ orig = fndecl->instanceof; if (orig->instanceof && orig->instanceof->container->kind == l_component) orig = orig->instanceof; orig->instantiation = fndecl; } static void set_env_instantiations(environment env) { const char *name; void *entry; env_scanner scan; env_scan(env->id_env, &scan); while (env_next(&scan, &name, &entry)) set_ddecl_instantiation1(entry, NULL); } static void set_specification_instantiations(nesc_declaration component) /* Effects: Set the instantiation pointers in the data_declarations of the original abstract component from which component is derived to the copies in component (in preparation for cloning component's AST and pointing to component's decls) Also instantiate the types in the copies The original data_declarations can be found by following the instanceof fields. We may have to follow these one deep (abstract modules in configurations) or two deep (abstract modules in abstract configurations)... */ { component_spec_iterate(component, set_ddecl_instantiation1, NULL, TRUE, TRUE); } static void set_ddecl_instantiation2(data_declaration fndecl, void *data) { /* We just make the decl fndecl is a copy of point back to fndecl */ fndecl->instanceof->instantiation = fndecl; } static void set_specification_instantiations_shallow(nesc_declaration component) /* Effects: Set the instantiation pointers in the data_declarations of the original abstract component from which component is derived to the copies in component (in preparation for cloning component's AST and pointing to component's decls) */ { component_spec_iterate(component, set_ddecl_instantiation2, NULL, TRUE, TRUE); } static declaration instantiate_parameters(region r, declaration orig_parms) /* Effects: Makes a new list of declarations for an abstract componnent */ { AST_walk_list(clone_walker, r, CASTPTR(node, &orig_parms)); AST_set_parents(CAST(node, orig_parms)); return CAST(declaration, orig_parms); } static void instantiate_endp(endp ep) /* Effects: Modifies ep based on instantiated ddecls */ { /* The component does not get instantiated and is ignored anyway */ if (ep->interface && ep->interface->instantiation) ep->interface = ep->interface->instantiation; if (ep->function && ep->function->instantiation) ep->function = ep->function->instantiation; if (ep->args_node) ep->args_node = CAST(expression, ep->args_node->instantiation); } static void instantiate_cg(cgraph copy, cgraph original) /* Effects: Copies the original graph into copy, with endpoints based on the instantiations specified in the function and interface ddecls */ { ggraph orig_g = cgraph_graph(original); gnode n; gedge connection; /* Add all edges from original to copy, but with updated ddecls */ graph_scan_nodes (n, orig_g) { struct endp from = *NODE_GET(endp, n); gnode cfrom; instantiate_endp(&from); cfrom = endpoint_lookup(copy, &from); graph_scan_out (connection, n) { struct endp to = *NODE_GET(endp, graph_edge_to(connection)); gnode cto; instantiate_endp(&to); cto = endpoint_lookup(copy, &to); /* User graphs have locations on the edges */ graph_add_edge(cfrom, cto, EDGE_GET(location, connection)); } } } static AST_walker_result clone_component_ref(AST_walker spec, void *data, component_ref *n) { component_ref new = clone(data, n); /* Instantiate any further abstract components inside this abstract configuration. */ if (new->cdecl->abstract) { new->cdecl = specification_copy(data, new, FALSE); set_specification_instantiations_shallow(new->cdecl); } return aw_walk; } static AST_walker_result clone_interface_ref(AST_walker spec, void *data, interface_ref *n) { interface_ref new = clone(data, n); AST_walk_children(spec, data, CAST(node, new)); clone_ddecl(new->ddecl); new->ddecl = new->ddecl->instantiation; if (new->ddecl->itype->abstract) { new->ddecl->itype = interface_copy(data, new, current.container->abstract); new->ddecl->functions = new->ddecl->itype->env; } else copy_interface_functions(data, current.container, new->ddecl, new->ddecl->functions); return aw_done; } static AST_walker_result clone_implementation(AST_walker spec, void *data, implementation *n) { implementation new = clone(data, n); nesc_declaration comp = current.container, orig = original_component(comp); /* Copy the components and connections (configurations) or the declarations (modules) */ AST_walk_children(spec, data, CAST(node, new)); /* Copy the local_statics list for nido by following the instantiation links in the original list */ if (orig->local_statics) { dd_list_pos scan; region r = regionof(comp->local_statics); dd_scan (scan, orig->local_statics) { data_declaration localsd = DD_GET(data_declaration, scan); dd_add_last(r, comp->local_statics, localsd->instantiation); } } /* Copy the connection graph (note that comp->connections was initialised to an "empty" graph */ instantiate_cg(comp->connections, orig->connections); instantiate_cg(comp->user_connections, orig->user_connections); return aw_done; } static AST_walker_result clone_ast(AST_walker spec, void *data, node *n) { clone(data, n); return aw_walk; } static void init_clone(void) { clone_walker = new_AST_walker(permanent); AST_walker_handle(clone_walker, kind_node, clone_ast); AST_walker_handle(clone_walker, kind_expression, clone_expression); AST_walker_handle(clone_walker, kind_field_ref, clone_field_ref); AST_walker_handle(clone_walker, kind_identifier, clone_identifier); AST_walker_handle(clone_walker, kind_interface_deref, clone_interface_deref); AST_walker_handle(clone_walker, kind_component_deref, clone_component_deref); AST_walker_handle(clone_walker, kind_statement, clone_stmt); AST_walker_handle(clone_walker, kind_asttype, clone_asttype); AST_walker_handle(clone_walker, kind_function_decl, clone_function_decl); AST_walker_handle(clone_walker, kind_variable_decl, clone_variable_decl); AST_walker_handle(clone_walker, kind_type_parm_decl, clone_type_parm_decl); AST_walker_handle(clone_walker, kind_typename, clone_typename); AST_walker_handle(clone_walker, kind_enumerator, clone_enumerator); AST_walker_handle(clone_walker, kind_implementation, clone_implementation); AST_walker_handle(clone_walker, kind_component_ref, clone_component_ref); AST_walker_handle(clone_walker, kind_interface_ref, clone_interface_ref); AST_walker_handle(clone_walker, kind_tag_ref, clone_tag_ref); AST_walker_handle(clone_walker, kind_field_decl, clone_field_decl); } void set_parameter_values(nesc_declaration cdecl, expression args) { declaration parm; /* We know args is the same length as parameters (earlier error if not) */ scan_declaration (parm, cdecl->parameters) { if (is_data_decl(parm)) { variable_decl vd = CAST(variable_decl, CAST(data_decl, parm)->decls); cst_kind k = type_real(vd->ddecl->type) ? cst_numerical : cst_address; if (!args) { vd->ddecl->value = make_unknown_cst(k == cst_numerical ? cval_unknown_number : cval_unknown_address, vd->ddecl->type); continue; } if (!is_type_argument(args) && check_constant_once(args, k)) { location l = args->location; /* We can assume the type is arithmetic (for now at least) (see declare_template_parameter) */ if (!args->cst) { /* avoid duplicate error messages */ if (args->type != error_type) error_with_location(l, "component arguments must be constants"); } else if (type_integer(vd->ddecl->type)) { if (!constant_integral(args->cst)) error_with_location(l, "integer constant expected"); else if (!cval_inrange(args->cst->cval, vd->ddecl->type)) error_with_location(l, "constant out of range for argument type"); } else if (type_floating(vd->ddecl->type)) { if (!constant_float(args->cst)) error_with_location(l, "floating-point constant expected"); } else if (type_charstar(vd->ddecl->type)) { /* Check that it's an actual string */ data_declaration sym; bool ok = FALSE; if (constant_address(args->cst)) { sym = cval_ddecl(args->cst->cval); /* We don't want any offset to the string either (could lift this restriction) */ ok = sym && sym->kind == decl_magic_string && cval_knownbool(args->cst->cval); } if (!ok) error_with_location(l, "string argument expected"); } } vd->ddecl->value = args->cst; } else /* type */ { type_parm_decl td = CAST(type_parm_decl, parm); if (!args) { td->ddecl->type = error_type; continue; } td->ddecl->type = args->type; td->ddecl->initialiser = args; } args = CAST(expression, args->next); } } node instantiate_ast_list(region r, node n) { AST_walk_list(clone_walker, r, &n); AST_set_parents(n); return n; } node instantiate_ast(region r, node n) { AST_walk(clone_walker, r, &n); AST_set_parents(n); return n; } dd_list instantiate_dd_list(region r, dd_list l) { dd_list copy; dd_list_pos scan; if (!l) return NULL; copy = dd_new_list(r); dd_scan (scan, l) dd_add_last(r, copy, instantiate_ast(r, DD_GET(node, scan))); return copy; } void instantiate(nesc_declaration component, expression arglist) /* Effects: Actually instantiate an abstract component For modules: copy module's AST, declarations, etc For configurations: make new shallow copies of included abstract components, and copy connection graph (using the new shallow copies) */ { region r = parse_region; assert(component->kind == l_component && component->original); current.container = component; /* We don't copy the component itself as we're handling the specification specially (not copied). So we just copy the parameters and the implementation. */ set_env_instantiations(component->parameter_env); set_specification_instantiations(component); /* A new dummy env for all instantiations in the implementation */ current.env = new_environment(r, NULL, TRUE, FALSE); component->impl = CAST(implementation, instantiate_ast_list(r, CAST(node, original_component(component)->impl))); } /* Component stack handling, for error message and loop detection */ struct instance_stack { struct instance_stack *next; nesc_declaration component; }; static struct instance_stack *stack, *avail; static struct instance_stack *new_instance_stack(void) /* Returns: a new, cleared, instance_stack */ { struct instance_stack *new; if (avail) { new = avail; avail = avail->next; new->next = NULL; } else new = ralloc(permanent, struct instance_stack); return new; } static void free_instance_stack(struct instance_stack *is) { is->next = avail; is->component = NULL; avail = is; } void push_instance(nesc_declaration component) /* Effects: push (concrete) component on the stack and set its full instance name. */ { struct instance_stack *new = new_instance_stack(); assert(!component->abstract); if (component->original) { /* Instantiated component names is parent name (currently at the top of the stack) . name-in-configuration (currently in instance_name) */ const char *oldname = component->instance_name; const char *parentname = stack->component->instance_name; int namelen = strlen(parentname) + strlen(oldname) + 2; char *newname; newname = rstralloc(parse_region, namelen); sprintf(newname, "%s.%s", parentname, oldname); component->instance_name = newname; } new->next = stack; stack = new; new->component = component; current.container = component; } nesc_declaration abstract_recursion(void) /* Returns: If the instance stack indicates the programmer has created an instantiation loop, i.e., component Y (instance of abstract component X) has caused the instantiation of the top-most component (another instance of X). Return Y if this is the case, NULL if not. */ { struct instance_stack *i; nesc_declaration component = stack->component; /* The case where component is not an instance falls through naturally */ component = original_component(component); for (i = stack->next; i; i = i->next) { /* If we hit a non-instance component there isn't a loop */ if (!i->component->original) return NULL; if (original_component(i->component) == component) return i->component; } return NULL; } void pop_instance(void) { struct instance_stack *top = stack; stack = stack->next; free_instance_stack(top); if (stack) current.container = stack->component; else current.container = NULL; } static void check_cg(cgraph connections) /* Effects: Checks constants used in the connections graph */ { ggraph g = cgraph_graph(connections); gnode n; graph_scan_nodes (n, g) { endp ep = NODE_GET(endp, n); if (ep->args_node) check_generic_arguments(ep->args_node, endpoint_args(ep)); } } static bool fold_components(nesc_declaration cdecl, int pass) { bool done; declaration spec; dd_list_pos attr; if (cdecl->folded == pass) return TRUE; cdecl->folded = pass; spec = CAST(component, cdecl->ast)->decls; done = fold_constants_list(CAST(node, spec), pass); if (cdecl->attributes) dd_scan (attr, cdecl->attributes) done = fold_constants_list(DD_GET(node, attr), pass) && done; done = fold_constants_list(CAST(node, cdecl->impl), pass) && done; if (cdecl->configuration) { declaration d; configuration c = CAST(configuration, cdecl->impl); check_cg(cdecl->connections); scan_declaration (d, c->decls) if (is_component_ref(d)) { component_ref comp = CAST(component_ref, d); set_parameter_values(comp->cdecl, comp->args); done = fold_components(comp->cdecl, pass) && done; } } return done; } void fold_program(nesc_declaration program, nesc_declaration scheduler) { int pass = 1; bool done; do { done = fold_constants_list(CAST(node, all_cdecls), pass); if (program) done = fold_components(program, pass) && done; if (scheduler) done = fold_components(scheduler, pass) && done; pass++; } while (!done); current.container = NULL; } void check_abstract_arguments(const char *kind, data_declaration ddecl, declaration parms, expression arglist) { location loc = ddecl->ast->location; int parmnum = 1; while (parms && arglist) { const char *errmsg = NULL; if (arglist->type == error_type) ; else if (is_data_decl(parms)) { variable_decl vparm = CAST(variable_decl, CAST(data_decl, parms)->decls); type parmtype = vparm->ddecl->type; if (type_incomplete(parmtype)) errmsg = "type of formal parameter %d is incomplete"; else if (is_type_argument(arglist)) errmsg = "formal parameter %d must be a value"; else { set_error_location(arglist->location); check_assignment(parmtype, arglist->type, arglist, NULL, ddecl, parmnum); } } else /* type argument */ { type_parm_decl tparm = CAST(type_parm_decl, parms); if (!is_type_argument(arglist)) errmsg = "formal parameter %d must be a type"; else switch (tparm->ddecl->typevar_kind) { case typevar_normal: /* These tests ensure the type can be used in assignments and as a function argument. */ if (type_array(arglist->type)) errmsg = "type parameter cannot be an array type (parameter %d)"; else if (type_function(arglist->type)) errmsg = "type parameter cannot be a function type (parameter %d)"; else if (type_incomplete(arglist->type)) errmsg = "type parameter %d is an incomplete type"; break; case typevar_integer: if (!type_integer(arglist->type)) errmsg = "parameter %d must be an integer type"; break; case typevar_number: if (!type_real(arglist->type)) errmsg = "parameter %d must be a numerical type"; break; default: assert(0); break; } } if (errmsg) error_with_location(loc, errmsg, parmnum); parmnum++; arglist = CAST(expression, arglist->next); parms = CAST(declaration, parms->next); } clear_error_location(); if (parms) error_with_location(loc, "too few arguments to %s `%s'", kind, ddecl->name); else if (arglist) error_with_location(loc, "too many arguments to %s `%s'", kind, ddecl->name); } static nesc_declaration nesc_declaration_copy(region r, nesc_declaration old, expression args, bool copy_is_abstract, data_declaration ddecl) { nesc_declaration copy; copy = new_nesc_declaration(r, old->kind, old->name); copy->configuration = old->configuration; copy->doc = old->doc; copy->abstract = copy_is_abstract; copy->original = old; /* Copy the parameters into new env, make new top-level env */ copy->parameter_env = current.env = new_environment(r, NULL, TRUE, FALSE); copy->env = new_environment(r, copy->parameter_env, TRUE, FALSE); hack_interface = ddecl; current.container = ddecl ? ddecl->container : copy; copy->parameters = instantiate_parameters(r, old->parameters); copy->arguments = args; set_parameter_values(copy, args); copy->attributes = instantiate_dd_list(r, old->attributes); current.env = copy->env; //current.container = copy; return copy; } nesc_declaration interface_copy(region r, interface_ref iref, bool copy_is_abstract) /* Returns: A copy of abstract interface intf, instantiated with arguments in arglist. */ { nesc_declaration intf = iref->ddecl->itype, copy; struct semantic_state old = current; assert(intf->kind == l_interface); copy = nesc_declaration_copy(r, intf, iref->args, copy_is_abstract, iref->ddecl); hack_required = 1 + iref->ddecl->required; copy->ast = CAST(nesc_decl, instantiate_ast_list(r, CAST(node, intf->ast))); hack_required = 0; hack_interface = NULL; current = old; return copy; } nesc_declaration specification_copy(region r, component_ref cref, bool copy_is_abstract) /* Returns: A copy of the parameters and specification of the component specified by cref, with arguments specified by cref */ { component spec; nesc_declaration comp = cref->cdecl, copy; struct semantic_state old = current; assert(comp->kind == l_component); copy = nesc_declaration_copy(r, comp, cref->args, copy_is_abstract, NULL); copy->instance_name = (cref->word2 ? cref->word2 : cref->word1)->cstring.data; if (!copy_is_abstract) { /* Give it a new name */ /* component may itself be a copy of the real original abstract component */ nesc_declaration abs_comp = comp->original ? comp->original : comp; char *newname = rstralloc(r, strlen(copy->name) + 20); copy->instance_number = abs_comp->instance_count++; sprintf(newname, "%s%s%d", copy->name, get_function_separator(), copy->instance_number); copy->name = newname; } copy->ast = comp->ast; clone(r, ©->ast); /* Copy the specification into the copy's env */ spec = CAST(component, copy->ast); spec->decls = CAST(declaration, instantiate_ast_list(r, CAST(node, spec->decls))); current = old; /* Give the copy an "empty" specification graph */ build_external_graph(r, copy); return copy; } static void typevar_attr(nesc_attribute attr, data_declaration ddecl, int kind) { if (ddecl->typevar_kind != typevar_normal) ignored_nesc_attribute(attr); else ddecl->typevar_kind = kind; } static void handle_integer_decl(nesc_attribute attr, data_declaration ddecl) { typevar_attr(attr, ddecl, typevar_integer); } static void handle_number_decl(nesc_attribute attr, data_declaration ddecl) { typevar_attr(attr, ddecl, typevar_number); } void init_abstract(void) { init_clone(); define_internal_attribute("integer", NULL, handle_integer_decl, NULL, NULL, NULL, NULL); define_internal_attribute("number", NULL, handle_number_decl, NULL, NULL, NULL, NULL); } nescc-1.3.4/src/nesc-abstract.h000066400000000000000000000042341177770303300163160ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_ABSTRACT_H #define NESC_ABSTRACT_H void instantiate(nesc_declaration component, expression arglist); /* Effects: Actually instantiate an abstract component. For modules: temp noop For configurations: make new shallow copies of included abstract components, and copy connection graph (using the new shallow copies) */ void push_instance(nesc_declaration component); /* Effects: push (concrete) component on the stack and set its full instance name. */ nesc_declaration abstract_recursion(void); /* Returns: If the instance stack indicates the programmer has created an instantiation loop, i.e., component Y (instance of abstract component X) has caused the instantiation of the top-most component (another instance of X). Return Y if this is the case, NULL if not. */ void fold_program(nesc_declaration program, nesc_declaration scheduler); void pop_instance(void); void init_abstract(void); void check_abstract_arguments(const char *kind, data_declaration ddecl, declaration parms, expression arglist); nesc_declaration interface_copy(region r, interface_ref iref, bool copy_is_abstract); /* Returns: A copy of abstract interface intf, instantiated with arguments in arglist. */ nesc_declaration specification_copy(region r, component_ref cref, bool copy_is_abstract); /* Returns: A copy of the parameters and specification of the component specified by cref, with arguments specified by cref */ #endif nescc-1.3.4/src/nesc-atomic.c000066400000000000000000000276271177770303300157750ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002-2006 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "AST_walk.h" #include "nesc-cg.h" #include "constants.h" #include "nesc-atomic.h" static atomic_t aseq(atomic_t a1, atomic_t a2) { if (a1 == NOT_ATOMIC || a2 == NOT_ATOMIC) return NOT_ATOMIC; if (a2 == ATOMIC_ANY) return a1; if (a1 == ATOMIC_ANY) return a2; return NOT_ATOMIC; } static atomic_t aalt(atomic_t a1, atomic_t a2) { if (a1 == NOT_ATOMIC || a2 == NOT_ATOMIC) return NOT_ATOMIC; if (a1 == ATOMIC_SINGLE || a2 == ATOMIC_SINGLE) return ATOMIC_SINGLE; return ATOMIC_ANY; } static atomic_t amany(atomic_t a) { if (a == ATOMIC_SINGLE) return NOT_ATOMIC; else return a; } static atomic_t aaccess(type t) { /* Single byte values have atomic read/write */ if (type_size_cc(t)) { cval tsize = type_size(t); if (cval_isinteger(tsize) && cval_uint_value(tsize) == 1) return ATOMIC_SINGLE; } return NOT_ATOMIC; } static atomic_t avar(data_declaration ddecl, context this_use) { context bad_contexts; if (ddecl->kind != decl_variable) return ATOMIC_ANY; /* Special-case locals: we don't set async_access on locals even if their address is taken (see nesc-concurrency.c). So the test below is not reliable. */ if (ddecl->islocal) return ddecl->use_summary & c_addressed ? NOT_ATOMIC : ATOMIC_ANY; if (!ddecl->async_access) return ATOMIC_ANY; /* Figure out dangerous accesses: If there are no writes in async contexts, then reads need not be protected */ bad_contexts = c_write; if (ddecl->async_write) bad_contexts |= c_read; if (this_use & bad_contexts) return aaccess(ddecl->type); else return ATOMIC_ANY; } /** * This code computes a conservative approximation of statements whose * execution is guaranteed to be atomic, allowing optimisation of * simple atomic statements. * * Currently it assumes that the only memory accesses that are atomic are * single-byte read/writes. It could be extended with platform-specific * knowledge of larger atomic r/w units. Platform-specific knowledge would * also allow optimisation of statements such as atomic x |= 4 if it is * known that this maps to a single instruction. */ /* An AST walker that isatomics all reachable expressions and statements */ static AST_walker isatomic_walker; static bool dirty; static cgraph callgraph; static atomic_t isatomic_stmt(statement stmt); static atomic_t isatomic_children(void *n) { atomic_t a = ATOMIC_ANY; AST_walk_children(isatomic_walker, &a, CAST(node, n)); return a; } static atomic_t acall1(data_declaration ddecl) { if (ddecl->definition) return CAST(function_decl, ddecl->definition)->stmt->isatomic; else return NOT_ATOMIC; } /* Return atomicness of possible targets of a command or event. This could be more accurate if we considered which things are dispatched vs multiply wired. But those cases seem unlikely to be atomic, so... */ static atomic_t acall_connected(data_declaration ddecl) { gedge called; atomic_t a = ATOMIC_ANY; /* The nodes connected from a command or event node include all the possible targets of that command or event. They also include any things called or used from any default handler for the command or event */ graph_scan_out (called, fn_lookup(callgraph, ddecl)) if (EDGE_GET(use, called)->c & c_fncall) a = aseq(a, acall1(NODE_GET(endp, graph_edge_to(called))->function)); return a; } /* Return atomicness of calls to 'ddecl' */ static atomic_t acall(data_declaration ddecl) { atomic_t a; if (ddecl->kind != decl_function) return NOT_ATOMIC; if ((ddecl->ftype == function_command || ddecl->ftype == function_event) && !ddecl->defined) { a = acall_connected(ddecl); if (!ddecl->definition || ddecl->suppress_definition) /* no default */ return a; } else a = ATOMIC_ANY; return aalt(a, acall1(ddecl)); } static atomic_t isatomic_expr(expression expr) { atomic_t a = NOT_ATOMIC; /* Default to not-atomic */ if (!expr) return ATOMIC_ANY; /* A read of an array-type expression actually takes the address of the container */ if ((expr->type && type_array(expr->type) && expr->static_address) || expr->cst) a = ATOMIC_ANY; else switch (expr->kind) { case kind_realpart: case kind_imagpart: case kind_unary_minus: case kind_unary_plus: case kind_conjugate: case kind_bitnot: case kind_not: case kind_plus: case kind_minus: case kind_times: case kind_divide: case kind_modulo: case kind_lshift: case kind_rshift: case kind_leq: case kind_geq: case kind_lt: case kind_gt: case kind_eq: case kind_ne: case kind_bitand: case kind_bitor: case kind_bitxor: case kind_andand: case kind_oror: case kind_assign: case kind_comma: case kind_extension_expr: case kind_compound_expr: case kind_cast: case kind_generic_call: a = isatomic_children(expr); break; case kind_identifier: a = avar(CAST(identifier, expr)->ddecl, expr->context); break; case kind_field_ref: { field_ref fref = CAST(field_ref, expr); a = isatomic_expr(fref->arg1); /* Bit field r/w's are not atomic. Could try and be more optimistic (e.g., non-byte-boundary crossing bitfield reads are presumably atomic) */ if (!cval_istop(fref->fdecl->bitwidth)) a = NOT_ATOMIC; break; } case kind_interface_deref: a = ATOMIC_ANY; break; case kind_conditional: { conditional ce = CAST(conditional, expr); atomic_t ac, a1, a2; ac = isatomic_expr(ce->condition); a1 = isatomic_expr(ce->arg1); a2 = isatomic_expr(ce->arg2); if (ce->condition->cst) { if (definite_zero(ce->condition)) a = a2; else a = a1; } else a = aseq(ac, aalt(a1, a2)); break; } case kind_array_ref: { array_ref are = CAST(array_ref, expr); atomic_t a1, a2; a1 = isatomic_expr(are->arg1); a2 = isatomic_expr(are->arg2); a = aseq(a1, aseq(a2, aaccess(are->type))); break; } case kind_dereference: a = aseq(isatomic_children(expr), aaccess(expr->type)); break; case kind_address_of: { expression arg = CAST(unary, expr)->arg1; /* Some heuristics for atomicity of & */ while (is_field_ref(arg) || is_extension_expr(arg)) arg = CAST(unary, arg)->arg1; if (is_dereference(arg)) a = isatomic_expr(CAST(dereference, arg)->arg1); else if (is_identifier(arg)) a = ATOMIC_ANY; else a = isatomic_expr(arg); break; } case kind_preincrement: case kind_postincrement: case kind_predecrement: case kind_postdecrement: { atomic_t a1 = isatomic_expr(CAST(increment, expr)->arg1); a = aseq(a1, a1); break; } case kind_plus_assign: case kind_minus_assign: case kind_times_assign: case kind_divide_assign: case kind_modulo_assign: case kind_bitand_assign: case kind_bitor_assign: case kind_bitxor_assign: case kind_lshift_assign: case kind_rshift_assign: { assign aexpr = CAST(assignment, expr); atomic_t a1, a2; a1 = isatomic_expr(aexpr->arg1); a2 = isatomic_expr(aexpr->arg2); a = aseq(a2, aseq(a1, a1)); break; } case kind_function_call: { function_call fce = CAST(function_call, expr); expression called = fce->arg1; if (is_generic_call(called)) called = CAST(generic_call, called)->arg1; if (is_identifier(called)) a = acall(CAST(identifier, called)->ddecl); else if (is_interface_deref(called)) a = acall(CAST(interface_deref, called)->ddecl); else a = NOT_ATOMIC; a = aseq(a, isatomic_children(expr)); break; } default: /* Just check children. Current statement not atomic. */ isatomic_children(expr); break; } if (expr->isatomic != a) { expr->isatomic = a; dirty = TRUE; } return a; } static atomic_t isatomic_stmt(statement stmt) { atomic_t a = NOT_ATOMIC; /* Default to not-atomic */ if (!stmt) return ATOMIC_ANY; switch (stmt->kind) { case kind_compound_stmt: case kind_labeled_stmt: case kind_expression_stmt: case kind_atomic_stmt: case kind_break_stmt: case kind_continue_stmt: case kind_goto_stmt: case kind_computed_goto_stmt: case kind_empty_stmt: case kind_return_stmt: a = isatomic_children(stmt); break; case kind_if_stmt: { if_stmt is = CAST(if_stmt, stmt); atomic_t ac, a1, a2; ac = isatomic_expr(is->condition); a1 = isatomic_stmt(is->stmt1); a2 = isatomic_stmt(is->stmt2); if (is->condition->cst) { if (definite_zero(is->condition)) a = a2; else a = a1; } else a = aseq(ac, aalt(a1, a2)); break; } case kind_while_stmt: case kind_dowhile_stmt: case kind_switch_stmt: { conditional_stmt cs = CAST(conditional_stmt, stmt); atomic_t ac, as; ac = isatomic_expr(cs->condition); as = isatomic_stmt(cs->stmt); if (cs->condition->cst && stmt->kind == kind_while_stmt && definite_zero(cs->condition)) a = ATOMIC_ANY; else a = amany(aseq(ac, as)); break; } case kind_for_stmt: { for_stmt fs = CAST(for_stmt, stmt); atomic_t a1, a2, a3, as; a1 = isatomic_expr(fs->arg1); a2 = isatomic_expr(fs->arg2); a3 = isatomic_expr(fs->arg3); as = isatomic_stmt(fs->stmt); if (fs->arg2 && fs->arg2->cst && definite_zero(fs->arg2)) a = ATOMIC_ANY; else a = amany(aseq(a2, aseq(as, a3))); a = aseq(a1, a); break; } default: /* Just check children. Current statement not atomic. */ isatomic_children(stmt); break; } if (stmt->isatomic != a) { stmt->isatomic = a; dirty = TRUE; } return a; } static AST_walker_result isatomic_ast_expr(AST_walker spec, void *data, expression *e) { atomic_t *a = data; *a = aseq(*a, isatomic_expr(*e)); return aw_done; } static AST_walker_result isatomic_ast_stmt(AST_walker spec, void *data, statement *s) { atomic_t *a = data; *a = aseq(*a, isatomic_stmt(*s)); return aw_done; } static AST_walker_result isatomic_ast_vdecl(AST_walker spec, void *data, variable_decl *vdp) { variable_decl vd = *vdp; atomic_t *a = data, ainit; if (vd->arg1 && vd->ddecl->islocal) { ainit = isatomic_expr(vd->arg1); *a = aseq(*a, aseq(ainit, avar(vd->ddecl, c_write))); } return aw_done; } void isatomic(cgraph g) { ggraph cg = cgraph_graph(g); gnode n; if (!nesc_optimise_atomic) return; callgraph = g; /* Fixed point search for function-atomicity */ graph_scan_nodes (n, cg) { data_declaration fn = NODE_GET(endp, n)->function; if (fn->definition) CAST(function_decl, fn->definition)->stmt->isatomic = ATOMIC_ANY; } do { dirty = FALSE; graph_scan_nodes (n, cg) { data_declaration fn = NODE_GET(endp, n)->function; if (fn->definition) isatomic_stmt(CAST(function_decl, fn->definition)->stmt); } } while (dirty); } void init_isatomic(void) { isatomic_walker = new_AST_walker(permanent); AST_walker_handle(isatomic_walker, kind_expression, isatomic_ast_expr); AST_walker_handle(isatomic_walker, kind_statement, isatomic_ast_stmt); AST_walker_handle(isatomic_walker, kind_variable_decl, isatomic_ast_vdecl); } nescc-1.3.4/src/nesc-atomic.h000066400000000000000000000015131177770303300157640ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2006 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_ATOMIC_H #define NESC_ATOMIC_H /* atomic_t is defined in AST.h */ void isatomic(cgraph callgraph); void init_isatomic(void); #endif nescc-1.3.4/src/nesc-attributes.c000066400000000000000000000150671177770303300167020ustar00rootroot00000000000000#include "parser.h" #include "init.h" #include "c-parse.h" #include "semantics.h" #include "nesc-attributes.h" #include "env.h" #include "edit.h" #include "attributes.h" typedef struct internal_attribute { const char *name; void (*handle_ndecl)(nesc_attribute attr, nesc_declaration ndecl); void (*handle_decl)(nesc_attribute attr, data_declaration ddecl); void (*handle_tag)(nesc_attribute attr, tag_declaration tdecl); void (*handle_field)(nesc_attribute attr, field_declaration fdecl); void (*handle_type)(nesc_attribute attr, type *t); } *iattr; static env internal_attributes; /* Return a reference to attribute tag (different from xref_tag because there is no implicit declaration) */ tag_ref lookup_attribute(word tag) { tag_ref tref = newkind_tag_ref(parse_region, kind_attribute_ref, tag->location, tag, NULL, NULL, FALSE); tag_declaration tdecl = lookup_tag(tref, FALSE); if (!tdecl) error_with_location(tag->location, "unknown attribute `%s'", tag->cstring.data); tref->tdecl = tdecl; return tref; } nesc_attribute start_attribute_use(word name) { /* Prepare to read an initialiser for the attribute definition specified by name */ nesc_attribute attr = new_nesc_attribute(parse_region, name->location, name, NULL); tag_ref aref = lookup_attribute(name); /* XXX: aref leaks */ type atype = error_type; /* Create new environment so that we can track whether this is a deputy scope or not. Using an environment makes it easy to recover parsing errors: we just call poplevel in the appropriate error production (see nattrib rules in c-parse.y). */ pushlevel(FALSE); attr->tdecl = aref->tdecl; if (aref->tdecl) { atype = make_tagged_type(aref->tdecl); if (aref->tdecl->deputy_scope) current.env->deputy_scope = TRUE; } start_init(NULL, attr); really_start_incremental_init(atype); return attr; } attribute finish_attribute_use(nesc_attribute attr, expression init) { attr->arg1 = make_init_list(attr->word1->location, init); finish_init(); poplevel(); return CAST(attribute, attr); } void define_internal_attribute(const char *name, void (*handle_ndecl)(nesc_attribute attr, nesc_declaration ndecl), void (*handle_decl)(nesc_attribute attr, data_declaration ddecl), void (*handle_tag)(nesc_attribute attr, tag_declaration tdecl), void (*handle_field)(nesc_attribute attr, field_declaration fdecl), void (*handle_type)(nesc_attribute attr, type *t), ...) { va_list args; field_declaration *next_field; word attr_word; type_element attr_tag; tag_declaration attr_decl; struct internal_attribute *iattr; /* Build and declare the attribute */ current.env = global_env; attr_word = build_word(parse_region, name); attr_tag = start_struct(dummy_location, kind_attribute_ref, attr_word); attr_decl = CAST(tag_ref, attr_tag)->tdecl; attr_decl->fields = new_env(parse_region, NULL); next_field = &attr_decl->fieldlist; /* Fields. A fieldname, fieldtype argument list, terminated with a null fieldname. We build a semi-fake struct for these. */ va_start(args, handle_type); for (;;) { const char *field_name = va_arg(args, const char *); field_declaration field; if (!field_name) break; field = ralloc(parse_region, struct field_declaration); field->containing_tag = attr_decl; *next_field = field; next_field = &field->next; field->name = field_name; field->type = va_arg(args, type); field->bitwidth = field->offset = cval_unknown_number; env_add(attr_decl->fields, field_name, field); } va_end(args); /* Add to internal attributes table */ iattr = ralloc(permanent, struct internal_attribute); iattr->name = name; iattr->handle_ndecl = handle_ndecl; iattr->handle_decl = handle_decl; iattr->handle_tag = handle_tag; iattr->handle_field = handle_field; iattr->handle_type = handle_type; env_add(internal_attributes, name, iattr); } ivalue lookup_attribute_field(nesc_attribute attr, const char *name) /* Returns: The initialiser for field name in attr, or NULL if it's not found */ { ivalue init = attr->arg1->ivalue; ivalue_field ifields; assert(init->kind == iv_structured); for (ifields = init->u.structured; ifields; ifields = ifields->next) if (!strcmp(ifields->field->name, name)) return ifields->value; return NULL; } static iattr internal_lookup(nesc_attribute attr) { return env_lookup(internal_attributes, attr->word1->cstring.data, TRUE); } static void save_user_attribute(nesc_attribute attr, dd_list *alist) { if (!*alist) *alist = dd_new_list(parse_region); dd_add_last(parse_region, *alist, attr); } void handle_nesc_type_attribute(nesc_attribute attr, type *t) { iattr handler = internal_lookup(attr); if (handler) { if (handler->handle_type) handler->handle_type(attr, t); else ignored_nesc_attribute(attr); } /* In the future, we might want to record the attribute on the type, and support dumping this information in nesc-dump.c. For now, though, attributes on types are only useful if they are @macro() attributes */ } void handle_nesc_decl_attribute(nesc_attribute attr, data_declaration ddecl) { iattr handler = internal_lookup(attr); if (handler) { if (handler->handle_decl) handler->handle_decl(attr, ddecl); else ignored_nesc_attribute(attr); } else save_user_attribute(attr, &ddecl->attributes); } void handle_nesc_field_attribute(nesc_attribute attr, field_declaration fdecl) { iattr handler = internal_lookup(attr); if (handler) { if (handler->handle_field) handler->handle_field(attr, fdecl); else ignored_nesc_attribute(attr); } else save_user_attribute(attr, &fdecl->attributes); } void handle_nesc_tag_attribute(nesc_attribute attr, tag_declaration tdecl) { iattr handler = internal_lookup(attr); if (handler) { if (handler->handle_tag) handler->handle_tag(attr, tdecl); else ignored_nesc_attribute(attr); } else save_user_attribute(attr, &tdecl->attributes); } void handle_nesc_nescdecl_attribute(nesc_attribute attr, nesc_declaration ndecl) { iattr handler = internal_lookup(attr); if (handler) { if (handler->handle_ndecl) handler->handle_ndecl(attr, ndecl); else ignored_nesc_attribute(attr); } else save_user_attribute(attr, &ndecl->attributes); } void init_nesc_attributes(void) { internal_attributes = new_env(permanent, NULL); } nescc-1.3.4/src/nesc-attributes.h000066400000000000000000000032421177770303300166770ustar00rootroot00000000000000#ifndef NESC_ATTIBUTES_H #define NESC_ATTIBUTES_H void init_nesc_attributes(void); nesc_attribute start_attribute_use(word name); attribute finish_attribute_use(nesc_attribute attr, expression init); void define_internal_attribute(const char *name, void (*handle_ndecl)(nesc_attribute attr, nesc_declaration ndecl), void (*handle_decl)(nesc_attribute attr, data_declaration ddecl), void (*handle_tag)(nesc_attribute attr, tag_declaration tdecl), void (*handle_field)(nesc_attribute attr, field_declaration fdecl), void (*handle_type)(nesc_attribute attr, type *t), ...); /* Effects: Declare an internal (compiler) @-style attribute called 'name', handled by the handle functions. Functions can be NULL if the attribute cannot be used on that kind of entity. Arguments to the attribute are specified by an fieldname, fieldtype argument list terminated with a null fieldname. Example: the @integer() attribute is declared with define_internal_attribute("integer", handle_integer_attribute, NULL); */ ivalue lookup_attribute_field(nesc_attribute attr, const char *name); /* Returns: The initialiser for field name in attr, or NULL if it's not found */ void handle_nesc_type_attribute(nesc_attribute attr, type *t); void handle_nesc_decl_attribute(nesc_attribute attr, data_declaration ddecl); void handle_nesc_field_attribute(nesc_attribute attr, field_declaration fdecl); void handle_nesc_tag_attribute(nesc_attribute attr, tag_declaration tdecl); void handle_nesc_nescdecl_attribute(nesc_attribute attr, nesc_declaration ndecl); #endif nescc-1.3.4/src/nesc-c.c000066400000000000000000000021531177770303300147260ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "nesc-c.h" #include "nesc-paths.h" #include "nesc-semantics.h" #include "c-parse.h" #include "nesc-cpp.h" declaration all_cdecls; void add_cdecls(declaration cdecls) { all_cdecls = declaration_chain(all_cdecls, CAST(declaration, cdecls)); } void load_c(location l, const char *name, bool name_is_path) { node cdecls = compile(l, NULL, name, name_is_path); add_cdecls(CAST(declaration, cdecls)); } nescc-1.3.4/src/nesc-c.h000066400000000000000000000015461177770303300147400ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_C_H #define NESC_C_H extern declaration all_cdecls; void load_c(location l, const char *name, bool name_is_path); void add_cdecls(declaration cdecls); #endif nescc-1.3.4/src/nesc-cg.c000066400000000000000000000040501177770303300150730ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* A connection graph */ #include "parser.h" #include "nesc-cg.h" #include "utils.h" struct cgraph { ggraph sameregion g; dhash_table sameregion ep_table; }; typedef struct ep_table_entry { struct endp ep; /* ep.function is the key */ gnode n; } *ep_table_entry; static int ep_compare(void *e1, void *e2) { ep_table_entry ep1 = e1, ep2 = e2; return ep1->ep.function == ep2->ep.function && ep1->ep.interface == ep2->ep.interface && ep1->ep.args_node == ep2->ep.args_node; } static unsigned long ep_hash(void *e) { ep_table_entry ep = e; return hash_ptr(ep->ep.interface) ^ hash_ptr(ep->ep.function) ^ hash_ptr(ep->ep.args_node); } cgraph new_cgraph(region r) { cgraph cg = ralloc(r, struct cgraph); cg->g = new_graph(r); cg->ep_table = new_dhash_table(r, 64, ep_compare, ep_hash); return cg; } gnode endpoint_lookup(cgraph cg, endp ep) { ep_table_entry gep; gep = dhlookup(cg->ep_table, ep); if (gep) return gep->n; gep = ralloc(regionof(cg), struct ep_table_entry); gep->ep = *ep; dhadd(cg->ep_table, gep); return gep->n = graph_add_node(cg->g, &gep->ep); } gnode fn_lookup(cgraph cg, data_declaration fndecl) { struct endp ep; ep.component = NULL; ep.interface = fndecl->interface; ep.function = fndecl; ep.args_node = NULL; return endpoint_lookup(cg, &ep); } ggraph cgraph_graph(cgraph cg) { return cg->g; } nescc-1.3.4/src/nesc-cg.h000066400000000000000000000024171177770303300151050ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_CG_H #define NESC_CG_H /* A connection graph */ struct endp { data_declaration component, interface, function; /* args_node is the list of args for the interface if not NULL. If no errors have been reported, then constant_integral(e->cst) || constant_unknown(e->cst) for all expressions e in the list */ expression args_node; }; typedef struct endp *endp; typedef struct cgraph *cgraph; cgraph new_cgraph(region r); gnode endpoint_lookup(cgraph ch, endp ep); gnode fn_lookup(cgraph cg, data_declaration fndecl); ggraph cgraph_graph(cgraph cg); #endif nescc-1.3.4/src/nesc-compile000077500000000000000000000107701177770303300157220ustar00rootroot00000000000000#!/usr/bin/perl # This file is part of the nesC compiler. # Copyright (C) 2002 Intel Corporation # # The attached "nesC" software is provided to you under the terms and # conditions of the GNU General Public License Version 2 as published by the # Free Software Foundation. # # nesC 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 nesC; see the file COPYING. If not, write to # the Free Software Foundation, 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. use File::Basename; # Extract information from enviroment variables set by nescc $ctarget = $ENV{NESCC_CFILE}; $conly = $ENV{NESCC_CONLY} eq "yes"; $deputy = $ENV{NESCC_DEPUTY} eq "yes"; @deputy_args = split(" ", $ENV{NESCC_DEPUTY_ARGS}); $gcc = $ENV{NESCC_GCC}; push @nesc_args, "-fnesc-gcc=$gcc"; for ($i = 0; $i <= $#ARGV; $i++) { $_ = $ARGV[$i]; if (/^-_ASM$/) { # magic marker for assembler options $for_assembler = 1; } elsif ($for_assembler) { push @gcc_args, "-Wa,$_"; } elsif (/^-/) { if (/^-fsyntax-only$/) { $nocompile = 1; } if (/^-[_WwvpfmH]/ || /^-pedantic$/ || /^-ansi$/) { push @nesc_args, $_; $verbose = 1 if /^-v/; } if (/^-([IDUA])/) { $opt = $1; ($i, $val) = &extractarg($i); push @nesc_args, "-$opt$val"; } elsif (/^-o/) { ($i, $objtarget) = &extractarg($i); } elsif (/^--param$/) { ($i, $param) = &nextarg($i); push @gcc_args, "--param"; push @gcc_args, $param; } elsif (/^-include$/) { ($i, $file) = &nextarg($i); push @nesc_args, "-include", $file; } elsif (/^-S$/) { $asmonly = 1; } elsif (/^-fnesc-tmpcfile=(.*)$/) { if ($ctarget eq "") { $ctarget = $1; $delcfile = 1; } } else { push @gcc_args, $_; } } else { if ($source ne "") { printf STDERR "two source files specified ($source and $_)\n"; exit 2; } $source = $_; } } # Split on spaces not preceded by \, then unquote. push @nesc_args, split(/(?&1|"); while () { return 1 if /^gcc version 4\.0/; } return 0; } nescc-1.3.4/src/nesc-component.c000066400000000000000000000202161177770303300165060ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "nesc-component.h" #include "nesc-semantics.h" #include "nesc-interface.h" #include "nesc-configuration.h" #include "nesc-module.h" #include "nesc-decls.h" #include "nesc-paths.h" #include "nesc-env.h" #include "nesc-cg.h" #include "semantics.h" #include "c-parse.h" #include "edit.h" #include "nesc-abstract.h" #include "attributes.h" bool generic_used; void interface_scan(data_declaration iref, env_scanner *scan) { env_scan(iref->functions->id_env, scan); } data_declaration interface_lookup(data_declaration iref, const char *name) { return env_lookup(iref->functions->id_env, name, FALSE); } void component_spec_iterate(nesc_declaration c, void (*iterator)(data_declaration fndecl, void *data), void *data, bool interfaces, bool otherdecls) { const char *ifname; void *ifentry; env_scanner scanifs; env_scan(c->env->id_env, &scanifs); while (env_next(&scanifs, &ifname, &ifentry)) { data_declaration idecl = ifentry; if (!otherdecls && !(idecl->kind == decl_interface_ref || idecl->kind == decl_function)) continue; if (idecl->kind != decl_interface_ref || interfaces) iterator(idecl, data); if (idecl->kind == decl_interface_ref) { env_scanner scanfns; const char *fnname; void *fnentry; interface_scan(idecl, &scanfns); while (env_next(&scanfns, &fnname, &fnentry)) iterator(fnentry, data); } } } void component_functions_iterate(nesc_declaration c, void (*iterator)(data_declaration fndecl, void *data), void *data) { component_spec_iterate(c, iterator, data, FALSE, FALSE); } static typelist make_gparm_typelist(declaration gparms) { declaration gparm; typelist gtypes = new_typelist(parse_region); scan_declaration (gparm, gparms) if (is_data_decl(gparm)) { data_decl gd = CAST(data_decl, gparm); variable_decl gv = CAST(variable_decl, gd->decls); typelist_append(gtypes, gv->ddecl->type); } return gtypes; } void copy_interface_functions(region r, nesc_declaration container, data_declaration iref, environment fns) { environment icopy = new_environment(r, NULL, TRUE, FALSE); env_scanner scanif; const char *fnname; void *fnentry; env_scan(fns->id_env, &scanif); while (env_next(&scanif, &fnname, &fnentry)) { data_declaration fndecl = fnentry, fncopy; /* Strings acquire a magic_string decl which we don't care about legal example: command int (*init())[sizeof "aa"]; */ if (fndecl->kind == decl_magic_string) continue; fncopy = declare(icopy, fndecl, FALSE); fncopy->fn_uses = NULL; fncopy->nuses = NULL; fncopy->instanceof = fndecl; fncopy->container = container; fncopy->interface = iref; /* required events and provided commands are defined */ fncopy->defined = (fncopy->ftype == function_command) ^ iref->required; } iref->functions = icopy; } void set_interface_functions_gparms(environment fns, typelist gparms) { env_scanner scanif; const char *fnname; void *fnentry; env_scan(fns->id_env, &scanif); while (env_next(&scanif, &fnname, &fnentry)) { data_declaration fndecl = fnentry; /* Push generic args onto fn type and decl */ fndecl->gparms = gparms; fndecl->type = make_generic_type(fndecl->type, gparms); } } void declare_interface_ref(interface_ref iref, declaration gparms, environment env, attribute attribs) { const char *iname = (iref->word2 ? iref->word2 : iref->word1)->cstring.data; nesc_declaration idecl = require(l_interface, iref->location, iref->word1->cstring.data); struct data_declaration tempdecl; data_declaration old_decl, ddecl; init_data_declaration(&tempdecl, CAST(declaration, iref), iname, void_type); tempdecl.kind = decl_interface_ref; tempdecl.type = NULL; tempdecl.itype = idecl; tempdecl.container = current.container; tempdecl.required = current.spec_section == spec_uses; tempdecl.gparms = gparms ? make_gparm_typelist(gparms) : NULL; handle_decl_attributes(attribs, &tempdecl); old_decl = env_lookup(env->id_env, iname, TRUE); if (old_decl) error("redefinition of `%s'", iname); ddecl = declare(env, &tempdecl, FALSE); iref->attributes = attribs; iref->ddecl = ddecl; if (idecl->abstract) { generic_used = TRUE; check_abstract_arguments("interface", ddecl, idecl->parameters, iref->args); ddecl->itype = interface_copy(parse_region, iref, current.container->abstract); ddecl->functions = ddecl->itype->env; } else { copy_interface_functions(parse_region, current.container, ddecl, ddecl->itype->env); if (iref->args) error("unexpected type arguments"); } /* We don't make the interface type generic. Instead, we push the generic type into each function in copy_interface_functions. This is because the syntax for invoking or defining a function on a generic interface is interfacename.functionname[generic args](...) */ if (gparms) set_interface_functions_gparms(ddecl->functions, ddecl->gparms); ddecl->type = make_interface_type(ddecl); } void check_interface_parameter_types(declaration parms) { declaration parm; scan_declaration (parm, parms) { data_decl dd = CAST(data_decl, parm); variable_decl vd = CAST(variable_decl, dd->decls); if (!vd->ddecl) { error_with_location(vd->location, "integral type required for generic parameter"); vd->ddecl = bad_decl; } else if (!type_integral(vd->ddecl->type)) { error_with_location(vd->location, "integral type required for generic parameter `%s'", vd->ddecl->name); vd->ddecl->type = int_type; } } } struct beg_data { cgraph cg; cgraph userg; }; void beg_iterator(data_declaration ddecl, void *data) { struct beg_data *d = data; struct endp node; node.component = NULL; node.args_node = NULL; /* The real connection graph contains all functions. The user connection graph contains all interfaces + the functions which are not in an interface */ if (ddecl->kind == decl_interface_ref) { node.interface = ddecl; node.function = NULL; endpoint_lookup(d->userg, &node); } else { node.interface = ddecl->interface; node.function = ddecl; endpoint_lookup(d->cg, &node); if (!node.interface) endpoint_lookup(d->userg, &node); } } void build_external_graph(region r, nesc_declaration cdecl) { struct beg_data d; /* A very simple graph, with single unconnected nodes for each endpoint of cdecl */ d.cg = new_cgraph(r); d.userg = new_cgraph(r); component_spec_iterate(cdecl, beg_iterator, &d, TRUE, FALSE); cdecl->connections = d.cg; cdecl->user_connections = d.userg; } void build_component(region r, nesc_declaration cdecl) { component the_component = CAST(component, cdecl->ast); the_component->implementation->cdecl = cdecl; cdecl->impl = the_component->implementation; AST_set_parents(CAST(node, cdecl->ast)); /* Build the default connection graph (just nodes for the external endpoints) */ build_external_graph(r, cdecl); if (is_configuration(cdecl->impl)) process_configuration(CAST(configuration, cdecl->impl)); else if (is_module(cdecl->impl)) process_module(CAST(module, cdecl->impl)); } environment start_implementation(void) { start_semantics(l_implementation, current.container, new_environment(parse_region, current.env, TRUE, FALSE)); return current.env; } nescc-1.3.4/src/nesc-component.h000066400000000000000000000043271177770303300165200ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_COMPONENT_H void build_component(region r, nesc_declaration cdecl); void declare_interface_ref(interface_ref iref, declaration gparms, environment genv, attribute attribs); void make_implicit_interface(data_declaration fndecl, function_declarator fdeclarator); void check_interface_parameter_types(declaration parms); environment start_implementation(void); void interface_scan(data_declaration iref, env_scanner *scan); data_declaration interface_lookup(data_declaration iref, const char *name); void component_spec_iterate(nesc_declaration c, void (*iterator)(data_declaration fndecl, void *data), void *data, bool interfaces, bool otherdecls); void component_functions_iterate(nesc_declaration c, void (*iterator)(data_declaration fndecl, void *data), void *data); nesc_declaration specification_copy(region r, component_ref cref, bool copy_is_abstract); /* Effects: Make a "shallow" copy of component specified by `cref' in region r, i.e., identical to cref->cdecl except that it has a copy of the specification (including a copy of each interface instance) The copy's instance_name is set to the name specified in cref (word2) Returns: The shallow copy */ void build_external_graph(region r, nesc_declaration cdecl); void copy_interface_functions(region r, nesc_declaration container, data_declaration iref, environment fns); extern bool generic_used; /* Hack to prevent doc generation until new doc system built */ #endif nescc-1.3.4/src/nesc-concurrency.c000066400000000000000000000154631177770303300170460ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "nesc-cg.h" #include "nesc-concurrency.h" #include "nesc-semantics.h" #include "machine.h" #include "c-parse.h" static inline bool is_call_edge(gedge e) { return (EDGE_GET(use, e)->c & c_fncall) != 0; } static void rec_async(gnode n, bool async_caller) { gedge edge; data_declaration fn = NODE_GET(endp, n)->function; bool async = fn->async || fn->actual_async || async_caller; if (async == fn->actual_async) return; fn->actual_async = async; /* Martin Leopold: add an "async" gcc attribute to any async elements for targets that need to identify functions callable from interrupts. */ if (fn->definition && target->async_functions_atribute) { function_decl fd = CAST(function_decl, fn->definition); location l = fd->modifiers->location; region r = parse_region; word aname = new_word(r, l, str2cstring(r, target->async_functions_atribute)); target_attribute attr = new_target_attribute(r, l, aname, NULL); fd->attributes = attribute_chain(attr, fd->attributes); } /* We don't pass async through commands or events that are not declared async to avoid reporting errors for the fns called by the "async but not so declared" command or event */ if (ddecl_is_command_or_event(fn)) async = fn->async; graph_scan_out (edge, n) if (is_call_edge(edge)) rec_async(graph_edge_to(edge), async); } void async_violation(gnode n) { data_declaration fn = NODE_GET(endp, n)->function; gedge edge; graph_scan_in (edge, n) if (is_call_edge(edge)) { use u = EDGE_GET(use, edge); data_declaration caller = NODE_GET(endp, graph_edge_from(edge))->function; if (caller->actual_async) nesc_warning_with_location(u->l, "`%s' called asynchronously from `%s'", decl_printname(fn), decl_printname(caller)); } } void check_async(cgraph callgraph) { ggraph cg = cgraph_graph(callgraph); gnode n; /* Find least fixed point of async w/ recursive graph walk */ graph_scan_nodes (n, cg) rec_async(n, FALSE); /* Report violations of async. We force async warnings when detecting data races. */ if (warn_async || warn_data_race) graph_scan_nodes (n, cg) { data_declaration fn = NODE_GET(endp, n)->function; if (ddecl_is_command_or_event(fn) && fn->actual_async && !fn->async) async_violation(n); } } static dd_list find_async_variables(region r, cgraph callgraph) { ggraph cg = cgraph_graph(callgraph); gnode n; dd_list avars = dd_new_list(r); /* Set async_access in all global or static variables that are accessed (r, w) in an async function. Return list of all such variables */ /* XXX: aliasing issues ignored for now. */ graph_scan_nodes (n, cg) { data_declaration fn = NODE_GET(endp, n)->function; dd_list_pos use; if (fn->actual_async && fn->fn_uses) dd_scan (use, fn->fn_uses) { iduse i = DD_GET(iduse, use); data_declaration id = i->id; context c = i->u->c; if (id->kind == decl_variable && !id->islocal && c & (c_read | c_write)) { if (!id->async_access) { id->async_access = TRUE; dd_add_last(r, avars, id); } if (c & c_write) id->async_write = TRUE; } } } return avars; } static void rec_contexts(gnode n, int call_contexts) { gedge edge; data_declaration fn = NODE_GET(endp, n)->function; int new_context = fn->call_contexts | fn->extra_contexts | call_contexts | fn->spontaneous; if (new_context == fn->call_contexts) return; fn->call_contexts = new_context; graph_scan_out (edge, n) { use u = EDGE_GET(use, edge); int cc = new_context; if (u->c & c_fncall) { if (u->c & c_atomic) cc = c_call_atomic; } else /* Non-call use. Conservatively assume that there may be atomic and non-atomic calls if this value ends up used as a function pointer */ cc = c_call_atomic | c_call_nonatomic; rec_contexts(graph_edge_to(edge), cc); } } static void find_fn_contexts(cgraph callgraph) { ggraph cg = cgraph_graph(callgraph); gnode n; /* Find least fixed point of call_contexts w/ recursive graph walk */ graph_scan_nodes (n, cg) rec_contexts(n, 0); } static void check_async_vars(dd_list avars) { dd_list_pos avar; dd_scan (avar, avars) { data_declaration v = DD_GET(data_declaration, avar); dd_list_pos ause; bool first = TRUE; if (!v->norace) dd_scan (ause, v->nuses) { use u = DD_GET(use, ause); context bad_contexts = c_write; /* If there are no writes in async contexts, then reads need not be protected */ if (v->async_write) bad_contexts |= c_read; /* Bad uses are uses that are both: - outside atomic statements (and fns only called from atomic statements) - uses specified by bad_contexts u->fn can be NULL in weird cases which don't correspond to executable code. */ if (u->fn && !(u->c & c_atomic || !(u->fn->call_contexts & c_call_nonatomic)) && u->c & bad_contexts) { const char *cname; if (first) { location vloc = v->definition ? v->definition->location : v->ast->location; first = FALSE; nesc_warning_with_location (vloc, "non-atomic accesses to shared variable `%s':", v->name); } if ((u->c & (c_read | c_write)) == (c_read | c_write) && v->async_write) cname = "r/w"; else if (u->c & c_read) cname = "read"; else cname = "write"; nesc_warning_with_location(u->l, " non-atomic %s", cname); } } } } void check_races(cgraph callgraph) { region r = newregion(); dd_list avars; /* First we mark all variables which are accessed in an async function. Then, we issue a warning for all uses of such variables which are not in an atomic context. To do that, we first need to know which contexts (atomic vs non-atomic) each function is called in. Exception: read-only variables do not need warnings. */ avars = find_async_variables(r, callgraph); find_fn_contexts(callgraph); if (warn_data_race) check_async_vars(avars); deleteregion(r); } nescc-1.3.4/src/nesc-concurrency.h000066400000000000000000000014441177770303300170450ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_CONCURRENCY_H void check_async(cgraph callgraph); void check_races(cgraph callgraph); #endif nescc-1.3.4/src/nesc-configuration.c000066400000000000000000000503251177770303300173570ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "nesc-configuration.h" #include "nesc-component.h" #include "nesc-env.h" #include "nesc-cg.h" #include "semantics.h" #include "constants.h" #include "c-parse.h" #include "expr.h" #include "nesc-abstract.h" /* define this to forbid linking a single function from an interface independently of the whole interface */ #define NO_FUNCTION_INTERFACE_MATCHING /* define this to forbid the implicit multiple matches from component -> component connections */ #define NO_COMPONENT_MATCHING void component_scan(data_declaration cref, env_scanner *scan) { env_scan(cref->ctype->env->id_env, scan); } static void connect_userg(location l, cgraph userg, struct endp from, struct endp to) { gnode gfrom = endpoint_lookup(userg, &from), gto = endpoint_lookup(userg, &to); graph_add_edge(gfrom, gto, l); } static void connect_cg(cgraph cg, struct endp from, struct endp to) { gnode gfrom = endpoint_lookup(cg, &from), gto = endpoint_lookup(cg, &to); graph_add_edge(gfrom, gto, NULL); /* If an endpoint has args, we must also connect the node w/o args */ if (from.args_node) graph_add_edge(fn_lookup(cg, from.function), gfrom, NULL); if (to.args_node) graph_add_edge(gto, fn_lookup(cg, to.function), NULL); } static void connect_function(location l, cgraph cg, cgraph userg, struct endp from, struct endp to) { connect_cg(cg, from, to); connect_userg(l, userg, from, to); } static type endpoint_type(endp p) { type t = NULL; if (p->args_node) { if (p->function) t = type_function_return_type(p->function->type); else if (p->interface) t = p->interface->type; } else { if (p->function) t = p->function->type; else if (p->interface) { t = p->interface->type; /* We don't normally include the generic parameters in the interface's type, but we do here to allow correct matching */ if (p->interface->gparms) t = make_generic_type(t, p->interface->gparms); } } return t; } typelist endpoint_args(endp p) { if (p->function) { type t = p->function->type; if (type_generic(t)) return type_function_arguments(t); } else if (p->interface) return p->interface->gparms; return NULL; } void connect_interface(location l, cgraph cg, cgraph userg, struct endp from, struct endp to, bool reverse) { env_scanner scanfns; const char *fnname; void *fnentry; if (to.interface->required ^ reverse) connect_userg(l, userg, to, from); else connect_userg(l, userg, from, to); assert(!from.function && !to.function /*&& from.interface->itype == to.interface->itype*/); /* All functions */ interface_scan(to.interface, &scanfns); while (env_next(&scanfns, &fnname, &fnentry)) { data_declaration fndecl = fnentry; assert(fndecl->kind == decl_function); to.function = fndecl; from.function = env_lookup(from.interface->functions->id_env, fndecl->name, TRUE); if (fndecl->defined ^ reverse) connect_cg(cg, from, to); else connect_cg(cg, to, from); } } int match_endpoints(endp p1, endp p2, endp amatch) { /* Should this be type_equal ? unclear (only real diff, given that we will forbid old style parameter lists, is transparent union handling) */ if (type_compatible(endpoint_type(p1), endpoint_type(p2))) { if (amatch) *amatch = *p2; return 1; } else return 0; } int match_function_interface(bool eqconnection, struct endp f, struct endp i, endp amatch) { #ifdef NO_FUNCTION_INTERFACE_MATCHING return 0; #else env_scanner scanfns; const char *fnname; void *fnentry; int matched = 0; bool want_defined; assert(f.function && !i.function); want_defined = f.function->defined ^ !eqconnection; /* Check all functions */ interface_scan(i.interface, &scanfns); while (env_next(&scanfns, &fnname, &fnentry)) { i.function = fnentry; if (i.function->defined == want_defined) matched += match_endpoints(&f, &i, amatch); } return matched; #endif } int match_interface_component(bool eqconnection, struct endp i, struct endp c, endp amatch) { const char *ifname; void *ifentry; int matched = 0; env_scanner scanifs; bool want_required; assert(i.interface && !c.interface); want_required = i.interface->required ^ !eqconnection; component_scan(c.component, &scanifs); while (env_next(&scanifs, &ifname, &ifentry)) { data_declaration idecl = ifentry; if (idecl->kind == decl_interface_ref) { c.interface = idecl; if (c.interface->required == want_required) matched += match_endpoints(&i, &c, amatch); } } return matched; } int match_function_component(bool eqconnection, struct endp f, struct endp c, endp amatch) { const char *ifname; void *ifentry; int matched = 0; env_scanner scanifs; bool want_defined; assert(f.function && !c.interface && !c.function); want_defined = f.function->defined ^ !eqconnection; component_scan(c.component, &scanifs); while (env_next(&scanifs, &ifname, &ifentry)) { data_declaration idecl = ifentry; c.function = c.interface = NULL; if (idecl->kind == decl_interface_ref) { c.interface = idecl; matched += match_function_interface(want_defined ^ idecl->required, f, c, amatch); } else { c.function = idecl; if (c.function->defined == want_defined) matched += match_endpoints(&f, &c, amatch); } } return matched; } void check_generic_arguments(expression args, typelist gparms) { expression arg; typelist_scanner scan_gparms; typelist_scan(gparms, &scan_gparms); scan_expression (arg, args) { location l = arg->location; type gparm_type = typelist_next(&scan_gparms); if (!gparm_type) { error_with_location(l, "too many arguments"); return; } if (arg->type == error_type || !check_constant_once(arg, cst_numerical)) continue; if (!arg->cst || !constant_integral(arg->cst)) error_with_location(l, "constant expression expected"); else { if (!cval_inrange(arg->cst->cval, gparm_type)) error_with_location(l, "constant out of range for argument type"); } } if (typelist_next(&scan_gparms)) error_with_location(args->location, "too few arguments"); } static bool lookup_endpoint(environment configuration_env, endpoint ep, endp lep) { parameterised_identifier pid; environment lookup_env = configuration_env; lep->component = lep->interface = lep->function = NULL; lep->args_node = NULL; scan_parameterised_identifier (pid, ep->ids) { const char *idname = pid->word1->cstring.data; location l = pid->location; if (!lookup_env) error_with_location(l, "unexpected identifier `%s'", idname); else { expression args = pid->args; data_declaration d = env_lookup(lookup_env->id_env, idname, TRUE); if (!d) { /* This is a bit hacky: lookup in parent env, but not if it's the global env. We want to check a configuration's env, and it's parent component's env, but not the global env. */ if (lookup_env->parent && lookup_env->parent != global_env) d = env_lookup(lookup_env->parent->id_env, idname, TRUE); if (!d) { error_with_location(l, "cannot find `%s'", idname); return FALSE; /* prevent cascading error messages */ } } if (args) { if (pid->next) error_with_location(l, "arguments must be specified last"); lep->args_node = pid->args; } switch (d->kind) { default: error_with_location(l, "cannot find `%s'", idname); return FALSE; /* prevent cascading error messages */ case decl_component_ref: assert(!lep->component); lep->component = d; lookup_env = d->ctype->env; break; case decl_interface_ref: assert(!lep->interface); lep->interface = d; #ifdef NO_FUNCTION_INTERFACE_MATCHING /* Can't lookup a function inside an interface (no partial interface connections) */ lookup_env = NULL; #else /* Get next environment */ lookup_env = d->itype->decls; #endif break; case decl_function: lep->function = d; lookup_env = NULL; break; } } } /* Check generic arguments */ if (lep->args_node) { typelist gparms = endpoint_args(lep); if (gparms) check_generic_arguments(lep->args_node, gparms); else error_with_location(ep->location, "endpoint is not a parameterised interface"); } return TRUE; } static void process_interface_connection(cgraph cg, cgraph userg, connection conn, struct endp p1, struct endp p2) { location l = conn->location; if (is_eq_connection(conn)) /* p1 = p2 */ { if (!p1.component && !p2.component) { if (p1.interface->required == p2.interface->required) error_with_location(l, "external to external connections must be between provided and used interfaces"); else connect_interface(l, cg, userg, p1, p2, TRUE); } else { if (p1.interface->required != p2.interface->required) error_with_location(l, "external to internal connections must be both provided or both used"); else if (!p1.component) connect_interface(l, cg, userg, p1, p2, FALSE); else connect_interface(l, cg, userg, p2, p1, FALSE); /* Note: connect_interface takes care of choosing the right edge direction. There are two cases: - the interface is provided: then we want edges from outside in, so from = the outside interface - the interface is required: then we want edges from inside out, but connect_interface will reverse them because the interface is required. So we also pick from = the outside interface. */ } } else /* p1 <- p2 */ { if (p1.interface->required) error_with_location(l, "target of '<-' interface must be provided"); else if (!p2.interface->required) error_with_location(l, "source of '<-' interface must be required"); else connect_interface(l, cg, userg, p2, p1, FALSE); } } static void process_function_connection(cgraph cg, cgraph userg, connection conn, struct endp p1, struct endp p2) { location l = conn->location; bool p1def = (p1.interface && !p1.interface->required) ^ p1.function->defined; bool p2def = (p2.interface && !p2.interface->required) ^ p2.function->defined; if (is_eq_connection(conn)) /* p1 = p2 */ { if (!p1.component && !p2.component) { if (p1def == p2def) error_with_location(l, "external to external connections must be between provided and used functions"); else if (p1def) connect_function(l, cg, userg, p1, p2); /* from provided to used */ else connect_function(l, cg, userg, p2, p1); } else { if (p1def != p2def) error_with_location(l, "external to internal connections must be both provided or both used"); else if ((!p1.component && !p1def) || (p1.component && p1def)) connect_function(l, cg, userg, p2, p1); else connect_function(l, cg, userg, p1, p2); } } else /* p1 <- p2 */ { if (!p1def) error_with_location(l, "target of '<-' function must be defined"); else if (p2def) error_with_location(l, "source of '<-' function must be used"); else connect_function(l, cg, userg, p2, p1); } } static void process_actual_connection(cgraph cg, cgraph userg, connection conn, struct endp p1, struct endp p2) { location l = conn->location; if (is_eq_connection(conn)) /* p1 = p2 */ { if (p1.component && p2.component) error_with_location(l, "there must be at least one external interface in an '=' connection"); } else /* p1 <- p2 */ { if (!p1.component || !p2.component) error_with_location(l, "external interfaces cannot be connected with `<-' or `->'"); } if (p1.function) process_function_connection(cg, userg, conn, p1, p2); else process_interface_connection(cg, userg, conn, p1, p2); } static void process_connection(cgraph cg, cgraph userg, connection conn, struct endp p1, struct endp p2) { int matches; bool eqconnection = is_eq_connection(conn); if (p1.function) /* f X ... */ { if (p2.function) /* f X f */ matches = match_endpoints(&p1, &p2, NULL); else if (p2.interface) /* f X i */ matches = match_function_interface(eqconnection, p1, p2, &p2); else /* f X c */ matches = match_function_component(eqconnection, p1, p2, &p2); } else if (p1.interface) /* i X ... */ { if (p2.function) /* i X f */ matches = match_function_interface(eqconnection, p2, p1, &p1); else if (p2.interface) /* i X i */ matches = match_endpoints(&p1, &p2, NULL); else /* i X c */ matches = match_interface_component(eqconnection, p1, p2, &p2); } else /* c X ... */ { if (p2.function) /* c X f */ matches = match_function_component(eqconnection, p2, p1, &p1); else /* c X i */ matches = match_interface_component(eqconnection, p2, p1, &p1); } if (matches == 0) error_with_location(conn->location, "no match"); else if (matches > 1) error_with_location(conn->location, "ambiguous match"); else process_actual_connection(cg, userg, conn, p1, p2); } static void process_component_connection(cgraph cg, cgraph userg, connection conn, struct endp p1, struct endp p2) { #ifndef NO_COMPONENT_MATCHING /* c X c, the only list case */ const char *ifname; void *ifentry; int total_matches = 0; env_scanner scanifs; bool eqconnection = is_eq_connection(conn); component_scan(p1.component, &scanifs); while (env_next(&scanifs, &ifname, &ifentry)) { data_declaration idecl = ifentry; int matches; p1.interface = p1.function = p2.interface = p2.function = NULL; if (idecl->kind == decl_interface_ref) { p1.interface = idecl; matches = match_interface_component(eqconnection, p1, p2, &p2); } else { p1.function = idecl; matches = match_function_component(eqconnection, p1, p2, &p2); } total_matches += matches; if (matches > 1) { error_with_location(conn->location, "ambiguous match"); break; } else if (matches == 1) process_actual_connection(cg, userg, conn, p1, p2); } if (total_matches == 0) #endif error_with_location(conn->location, "no match"); } static void process_connections(configuration c) { declaration decl; struct endp p1, p2; cgraph cg = c->cdecl->connections; cgraph userg = c->cdecl->user_connections; scan_declaration (decl, c->decls) if (is_connection(decl)) { connection conn = CAST(connection, decl); if (lookup_endpoint(c->ienv, conn->ep1, &p1) && lookup_endpoint(c->ienv, conn->ep2, &p2)) { /* There are a lot of kinds of connections here. lookup_endpoint has already resolved pseudo-interfaces to functions (c is component, i is interface, f is function, X is = or <-) c X c, c X i, i X c, c X f, f X c, i X i, i X f, f X i, f X f We first resolve the c X c case, which can lead to multiple connections, then handle all remaining cases in process_connection */ if (!p1.interface && !p2.interface && !p1.function && !p2.function) process_component_connection(cg, userg, conn, p1, p2); else process_connection(cg, userg, conn, p1, p2); } } } component_ref require_component(component_ref comp, word as) { struct data_declaration tempdecl; data_declaration old_decl, ddecl; const char *cname = comp->word1->cstring.data; const char *asname = (as ? as : comp->word1)->cstring.data; comp->word2 = as; comp->cdecl = require(l_component, comp->location, cname); init_data_declaration(&tempdecl, CAST(declaration, comp), asname, void_type); tempdecl.kind = decl_component_ref; /* Avoid duplicates in implementation *or* specification env */ old_decl = lookup_id(asname, TRUE); if (!old_decl) old_decl = env_lookup(current.env->parent->id_env, asname, TRUE); if (old_decl) error_with_location(comp->location, "redefinition of `%s'", asname); ddecl = declare(current.env, &tempdecl, FALSE); /* If the component is abstract, we make a copy of its specification so that we produce an accurate connection graph. We don't actually instantiate the component until later. This copy is "abstract" (will need further copying) if we are processing an abstract configuration */ if (comp->cdecl->abstract) { generic_used = TRUE; comp->cdecl = specification_copy(parse_region, comp, current.container->abstract); /* give copy a nice instance name if it is inside a generic configuration */ if (current.container->abstract) { size_t inamelen = strlen(current.container->name) + strlen(comp->cdecl->instance_name) + 2; char *iname = rstralloc(parse_region, inamelen); sprintf(iname, "%s.%s", current.container->name, comp->cdecl->instance_name); comp->cdecl->instance_name = iname; } if (!comp->abstract) error_with_location(comp->location, "generic component `%s' requires instantiation arguments", cname); else check_abstract_arguments("component", ddecl, comp->cdecl->parameters, comp->args); } else { if (comp->abstract) error_with_location(comp->location, "component `%s' is not generic", cname); } ddecl->type = make_component_type(ddecl); ddecl->ctype = comp->cdecl; return comp; } expression make_component_deref(location loc, expression object, cstring field) { expression result; data_declaration cref = type_cref(object->type); data_declaration fdecl = env_lookup(cref->ctype->env->id_env, field.data, TRUE); if (!fdecl) { error("component's specification has no element named `%s'", field.data); fdecl = bad_decl; } result = CAST(expression, new_component_deref(parse_region, loc, object, field, fdecl)); result->type = fdecl->type; result->cst = fold_identifier(result, fdecl, 0); return CAST(expression, result); } struct cfc_data { location loc; cgraph cg; data_declaration intf_last_error; }; /* Check that function fndecl (from the configuration's external interface) is connected, i.e.: - if defined there is an outgoing edge - if used there is an incoming edge */ static void check_function_connected(data_declaration fndecl, void *data) { struct cfc_data *d = data; gnode epnode; data_declaration idecl = fndecl->interface; assert(fndecl->kind == decl_function); #ifdef NO_FUNCTION_INTERFACE_MATCHING /* Avoid duplicate error messages: if one function not connected in an interface, then none are */ if (idecl == d->intf_last_error) return; #endif epnode = fn_lookup(d->cg, fndecl); if ((fndecl->defined && !graph_first_edge_out(epnode)) || (!fndecl->defined && !graph_first_edge_in(epnode))) { d->intf_last_error = idecl; if (idecl) #ifdef NO_FUNCTION_INTERFACE_MATCHING error_with_location(d->loc, "`%s' not connected", idecl->name); #else error_with_location(d->loc, "`%s.%s' not connected", idecl->name, fndecl->name); #endif else error_with_location(d->loc, "`%s' not connected", fndecl->name); } } /* Checks that all external interfaces/functions of the configuration are connected somewhere in cg */ static void check_complete_connection(configuration c) { struct cfc_data d; d.intf_last_error = NULL; d.loc = c->location; d.cg = c->cdecl->connections; component_functions_iterate(c->cdecl, check_function_connected, &d); } void process_configuration(configuration c) { int old_errorcount = errorcount; process_connections(c); /* Don't give error messages for missing connections if we found errors in the connections (to avoid duplicate errors) */ if (old_errorcount == errorcount) check_complete_connection(c); } nescc-1.3.4/src/nesc-configuration.h000066400000000000000000000024031177770303300173560ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_CONFIGURATION_H #define NESC_CONFIGURATION_H #include "nesc-cg.h" void process_configuration(configuration c); component_ref require_component(component_ref comp, word as); expression make_component_deref(location loc, expression object, cstring field);; void check_generic_arguments(expression args, typelist gparms); struct endp; typelist endpoint_args(struct endp *p); void component_scan(data_declaration cref, env_scanner *scan); void connect_interface(location l, cgraph cg, cgraph userg, struct endp from, struct endp to, bool reverse); #endif nescc-1.3.4/src/nesc-constants.c000066400000000000000000000153051177770303300165230ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "nesc-cg.h" #include "nesc-abstract.h" #include "c-parse.h" #include "nesc-component.h" #include "nesc-semantics.h" #include "AST_walk.h" #include "semantics.h" #include "constants.h" #include "init.h" #include "stmt.h" static AST_walker folder_walker; struct folder_data { bool *done; int pass; }; static AST_walker_result folder_expression(AST_walker spec, void *data, expression *n) { struct folder_data *d = data; expression e = *n; known_cst c = NULL, sa = NULL; /* Constant-fold children first */ AST_walk_children(spec, data, CAST(node, e)); /* XXX: default_conversion */ switch (e->kind) { case kind_lexical_cst: case kind_string: case kind_extension_expr: /* We preserve the constants in lexical_cst's and strings */ /* XXX: should we allow string arguments to components to be merged into strings (e.g. "aa" foo "bb", where foo is a `char *' component arg)? (If so: the ddecl for the args should be classified as a decl_magic_string, and make_string and this function must be modified accordingly) */ c = e->cst; sa = e->static_address; break; case kind_label_address: c = fold_label_address(e); break; case kind_sizeof_expr: c = fold_sizeof(e, CAST(sizeof_expr, e)->arg1->type); break; case kind_sizeof_type: c = fold_sizeof(e, CAST(sizeof_type, e)->asttype->type); break; case kind_alignof_expr: c = fold_alignof(e, CAST(alignof_expr, e)->arg1->type); break; case kind_alignof_type: c = fold_alignof(e, CAST(alignof_type, e)->asttype->type); break; case kind_cast: c = fold_cast(e); sa = CAST(cast, e)->arg1->static_address; break; case kind_conditional: c = fold_conditional(e); break; case kind_function_call: c = fold_function_call(e, d->pass); break; case kind_identifier: c = fold_identifier(e, CAST(identifier, e)->ddecl, d->pass); sa = foldaddress_identifier(e, CAST(identifier, e)->ddecl); break; case kind_field_ref: sa = foldaddress_field_ref(e); break; case kind_dereference: sa = CAST(dereference, e)->arg1->cst; break; case kind_address_of: c = CAST(address_of, e)->arg1->static_address; break; case kind_array_ref: { array_ref aref = CAST(array_ref, e); type atype; /* Find the array type */ if (type_integer(aref->arg1->type)) atype = aref->arg2->type; else atype = aref->arg1->type; sa = fold_binary(type_default_conversion(atype), e); break; } case kind_comma: { expression sub;; scan_expression (sub, CAST(comma, e)->arg1) if (!sub->cst) break; else if (!sub->next) { /* (e1, ..., en) is a constant expression if all ei are constant expressions. Weird? (see cst10.c) */ c = sub->cst; } break; } case kind_component_deref: c = fold_identifier(e, CAST(component_deref, e)->ddecl, d->pass); break; default: if (is_binary(e)) c = fold_binary(e->type, e); else if (is_unary(e)) c = fold_unary(e); break; } e->cst = c; e->static_address = sa; /* Handle default conversions to pointers */ if (e->converted_to_pointer) e->cst = sa; /* Notice unknown csts */ if ((sa && constant_unknown(sa)) || (c && constant_unknown(c))) *d->done = FALSE; if (e->ivalue && e->ivalue->kind == iv_base && e->ivalue->u.base.require_constant_value) check_init_element(e); return aw_done; } bool fold_constants_list(node n, int pass) /* Effects: Folds constants and lays out types in AST n Returns: FALSE if any constant folding op returned an unknown cst, TRUE otherwise */ { struct folder_data d; bool done = TRUE; d.done = &done; d.pass = pass; AST_walk_list(folder_walker, &d, CASTPTR(node, &n)); return done; } static AST_walker_result folder_array_declarator(AST_walker spec, void *data, array_declarator *n) { expression size = (*n)->arg1; AST_walk_children(spec, data, CAST(node, *n)); if (size) check_array_size(size, nice_declarator_name((*n)->declarator)); return aw_done; } static AST_walker_result folder_enum_ref(AST_walker spec, void *data, enum_ref *n) { if (!(*n)->defined) return aw_walk; layout_enum_start((*n)->tdecl); AST_walk_children(spec, data, CAST(node, *n)); layout_enum_end((*n)->tdecl); return aw_done; } static AST_walker_result folder_enumerator(AST_walker spec, void *data, enumerator *n) { enumerator e = *n; AST_walk_children(spec, data, CAST(node, e)); e->ddecl->value = layout_enum_value(e); return aw_done; } static AST_walker_result folder_tag_ref(AST_walker spec, void *data, tag_ref *n) { if (!(*n)->defined) return aw_walk; AST_walk_children(spec, data, CAST(node, *n)); layout_struct((*n)->tdecl); return aw_done; } static AST_walker_result folder_case_label(AST_walker spec, void *data, case_label *n) { case_label label = *n; AST_walk_children(spec, data, CAST(node, *n)); check_case_value(label->arg1); if (label->arg2) check_case_value(label->arg2); return aw_done; } static AST_walker_result folder_function_decl(AST_walker spec, void *data, function_decl *n) { function_decl fd = *n, old = current.function_decl; current.function_decl = fd; AST_walk_children(spec, data, CAST(node, *n)); current.function_decl = old; return aw_done; } void init_nesc_constants(void) { folder_walker = new_AST_walker(permanent); AST_walker_handle(folder_walker, kind_expression, folder_expression); AST_walker_handle(folder_walker, kind_array_declarator, folder_array_declarator); AST_walker_handle(folder_walker, kind_tag_ref, folder_tag_ref); AST_walker_handle(folder_walker, kind_enum_ref, folder_enum_ref); AST_walker_handle(folder_walker, kind_enumerator, folder_enumerator); AST_walker_handle(folder_walker, kind_case_label, folder_case_label); AST_walker_handle(folder_walker, kind_function_decl, folder_function_decl); } nescc-1.3.4/src/nesc-constants.h000066400000000000000000000005011177770303300165200ustar00rootroot00000000000000#ifndef NESC_CONSTANTS_H #define NESC_CONSTANTS_H bool fold_constants_list(node n, int pass); /* Effects: Folds constants and lays out types in AST list n pass is the current constant folding pass number (starts at 1, 0 is reserved for parse-time constant folding) */ void init_nesc_constants(void); #endif nescc-1.3.4/src/nesc-cpp.c000066400000000000000000000277411177770303300153000ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived in part from the GNU C Compiler. It is thus Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Changes for nesC are Copyright (C) 2002-2008 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "nesc-cpp.h" #include #include #include #include #include #include "nesc-paths.h" #include "machine.h" #include "flags.h" #include "semantics.h" #include "c-parse.h" #include "gcc-cpp.h" struct cpp_option { struct cpp_option *next; const char *opt, *arg; }; struct macro_def { const unsigned char *name; const unsigned char *def; }; static region opt_region; static char *cpp_save_dir; static dhash_table current_macros; static struct cpp_option *saved_options; static void account_for_newlines (const unsigned char *, size_t); static void print_line (source_location, const char *); static void maybe_print_line (source_location); static void save_pp_define(cpp_reader *pfile, source_location line, cpp_hashnode *node); static void save_pp_undef(source_location line, cpp_hashnode *node); void save_cpp_option(const char *option, const char *arg) { struct cpp_option *newopt; if (!opt_region) opt_region = newregion(); newopt = ralloc(opt_region, struct cpp_option); newopt->opt = option; newopt->arg = arg; newopt->next = saved_options; saved_options = newopt; } static int macro_compare(void *entry1, void *entry2) { struct macro_def *e1 = entry1, *e2 = entry2; return !strcmp((const char *)e1->name, (const char *)e2->name); } static unsigned long macro_hash(void *entry) { struct macro_def *e = entry; return hash_str((const char *)e->name); } static void macro_set(const unsigned char *name, const unsigned char *value) { struct macro_def fake = { name, NULL }; struct macro_def *old_value = dhlookup(current_macros, &fake); if (!old_value) { old_value = ralloc(permanent, struct macro_def); old_value->name = (unsigned char *)rstrdup(permanent, (char *)name); dhadd(current_macros, old_value); } old_value->def = value; } void preprocess_init(void) { struct cpp_option *opt; cpp_callbacks *cpp_cbacks; cpp_reader *reader; cpp_options *cpp_opts; const char *builtin_macros_file; current_macros = new_dhash_table(permanent, 512, macro_compare, macro_hash); builtin_macros_file = target->global_cpp_init(); init_nesc_paths_end(); current.fileregion = newregion(); if (!builtin_macros_file || !start_lex(l_c, builtin_macros_file)) { error("internal error: couldn't define builtin macros - exiting"); exit(2); } reader = current.lex.finput; cpp_opts = cpp_get_options(reader); cpp_cbacks = cpp_get_callbacks(reader); cpp_opts->warn_unused_macros = 0; if (!flag_undef) cpp_scan_nooutput(reader); /* Process saved options */ cpp_cbacks->file_change(reader, linemap_add(current.lex.line_map, LC_RENAME, 0, "", 0)); for (opt = saved_options; opt; opt = opt->next) { if (opt->opt[0] == 'D') cpp_define(reader, opt->arg); else if (opt->opt[0] == 'U') cpp_undef(reader, opt->arg); else if (opt->opt[0] == 'A') { if (opt->arg[0] == '-') cpp_unassert(reader, opt->arg + 1); else cpp_assert(reader, opt->arg); } } if (use_nido) { char *buf = alloca(16 + strlen(nido_num_nodes)); sprintf(buf, "TOSH_NUM_NODES=%s", nido_num_nodes); cpp_define(reader, buf); } end_lex(); current.lex.input = NULL; deleteregion_ptr(¤t.fileregion); } static void cb_define(cpp_reader *reader, source_location loc, cpp_hashnode *macro) { char *def = rstrdup(permanent, (char *)cpp_macro_definition(reader, macro)); char *firstspace = strchr(def, ' '); /* Massage def into cpp_define's format (same as -D) */ *firstspace = '='; macro_set(NODE_NAME(macro), (const unsigned char *)def); save_pp_define(reader, loc, macro); } static void cb_undef(cpp_reader *reader, source_location loc, cpp_hashnode *macro) { macro_set(NODE_NAME(macro), NULL); save_pp_undef(loc, macro); } void start_macro_saving(void) { cpp_reader *reader = current.lex.finput; cpp_callbacks *cbacks = cpp_get_callbacks(reader); dhash_scan existing_macros; struct macro_def *macro; /* Start by defining the current macros */ existing_macros = dhscan(current_macros); while ((macro = dhnext(&existing_macros))) if (macro->def) /* Ignore undef'ed macros - see cb_undef */ cpp_define(reader, (const char *)macro->def); /* And set the include chain stuff */ cbacks->define = cb_define; cbacks->undef = cb_undef; if (target->file_cpp_init) target->file_cpp_init(); } void end_macro_saving(void) { cpp_reader *reader = current.lex.finput; cpp_callbacks *cbacks = cpp_get_callbacks(reader); cbacks->define = NULL; cbacks->undef = NULL; } void save_pp_dir(const char *dir) { struct stat dbuf; int l = strlen(dir); cpp_save_dir = xstrdup(dir); /* Remove trailing slashes */ while (l > 1 && cpp_save_dir[l - 1] == '/') cpp_save_dir[--l] = '\0'; mkdir(cpp_save_dir, 0777); if (stat(cpp_save_dir, &dbuf) < 0 || !S_ISDIR(dbuf.st_mode)) { /* Just give up on saving preprocessed output */ fprintf(stderr, "Couldn't create directory `%s'\n", cpp_save_dir); cpp_save_dir = NULL; } } void save_pp_file_start(const char *path) { if (!cpp_save_dir) return; const char *fname = lbasename(path); char *pp_path = rstralloc(current.fileregion, strlen(cpp_save_dir) + strlen(fname) + 2); sprintf(pp_path, "%s/%s", cpp_save_dir, fname); current.lex.pp.outf = fopen(pp_path, "w"); if (!current.lex.pp.outf) { static int first = 1; if (first) warning("cannot create preprocessed output file `%s'", pp_path); first = FALSE; return; } /* Initialize the print structure. Setting current.lex.pp.src_line to -1 here is a trick to guarantee that the first token of the file will cause a linemarker to be output by maybe_print_line. */ current.lex.pp.src_line = -1; current.lex.pp.printed = 0; current.lex.pp.prev = 0; current.lex.pp.first_time = 1; current.lex.pp.avoid_paste = 0; current.lex.pp.source = NULL; } void save_pp_file_end(void) { if (!current.lex.pp.outf) return; /* Flush any pending output. */ if (current.lex.pp.printed) putc('\n', current.lex.pp.outf); fclose(current.lex.pp.outf); current.lex.pp.outf = NULL; } void save_pp_token(const cpp_token *token) { cpp_reader *pfile = current.lex.finput; if (!current.lex.pp.outf) return; if (token->type == CPP_PADDING) { current.lex.pp.avoid_paste = true; if (current.lex.pp.source == NULL || (!(current.lex.pp.source->flags & PREV_WHITE) && token->val.source == NULL)) current.lex.pp.source = token->val.source; return; } if (token->type == CPP_EOF) return; /* Subtle logic to output a space if and only if necessary. */ if (current.lex.pp.avoid_paste) { if (current.lex.pp.source == NULL) current.lex.pp.source = token; if (current.lex.pp.source->flags & PREV_WHITE || (current.lex.pp.prev && cpp_avoid_paste(pfile, current.lex.pp.prev, token)) || (current.lex.pp.prev == NULL && token->type == CPP_HASH)) putc(' ', current.lex.pp.outf); } else if (token->flags & PREV_WHITE) putc(' ', current.lex.pp.outf); current.lex.pp.avoid_paste = false; current.lex.pp.source = NULL; current.lex.pp.prev = token; cpp_output_token(token, current.lex.pp.outf); if(token->type == CPP_COMMENT) account_for_newlines(token->val.str.text, token->val.str.len); } /* Adjust current.lex.pp.src_line for newlines embedded in output. */ static void account_for_newlines(const unsigned char *str, size_t len) { while (len--) if (*str++ == '\n') current.lex.pp.src_line++; } /* If the token read on logical line LINE needs to be output on a different line to the current one, output the required newlines or a line marker, and return 1. Otherwise return 0. */ static void maybe_print_line(source_location src_loc) { const struct line_map *map = linemap_lookup(current.lex.line_map, src_loc); int src_line = SOURCE_LINE(map, src_loc); /* End the previous line of text. */ if (current.lex.pp.printed) { putc('\n', current.lex.pp.outf); current.lex.pp.src_line++; current.lex.pp.printed = 0; } if (src_line >= current.lex.pp.src_line && src_line < current.lex.pp.src_line + 8) { while (src_line > current.lex.pp.src_line) { putc('\n', current.lex.pp.outf); current.lex.pp.src_line++; } } else print_line(src_loc, ""); } /* Output a line marker for logical line LINE. Special flags are "1" or "2" indicating entering or leaving a file. */ static void print_line(source_location src_loc, const char *special_flags) { /* End any previous line of text. */ if (current.lex.pp.printed) putc('\n', current.lex.pp.outf); current.lex.pp.printed = 0; /*if (!flag_no_line_commands)*/ { const struct line_map *map = linemap_lookup(current.lex.line_map, src_loc); size_t to_file_len = strlen(map->to_file); unsigned char *to_file_quoted = (unsigned char *) alloca(to_file_len * 4 + 1); unsigned char *p; current.lex.pp.src_line = SOURCE_LINE(map, src_loc); /* cpp_quote_string does not nul-terminate, so we have to do it ourselves. */ p = cpp_quote_string(to_file_quoted, (unsigned char *) map->to_file, to_file_len); *p = '\0'; fprintf(current.lex.pp.outf, "# %u \"%s\"%s", current.lex.pp.src_line == 0 ? 1 : current.lex.pp.src_line, to_file_quoted, special_flags); if (map->sysp == 2) fputs(" 3 4", current.lex.pp.outf); else if (map->sysp == 1) fputs(" 3", current.lex.pp.outf); putc('\n', current.lex.pp.outf); } } /* Called when a line of output is started. TOKEN is the first token of the line, and at end of file will be CPP_EOF. */ void save_pp_line_change(cpp_reader *pfile, const cpp_token *token) { if (!current.lex.pp.outf) return; source_location src_loc = token->src_loc; maybe_print_line(src_loc); current.lex.pp.prev = 0; current.lex.pp.source = 0; /* Supply enough spaces to put this token in its original column, one space per column greater than 2, since scan_translation_unit will provide a space if PREV_WHITE. Don't bother trying to reconstruct tabs; we can't get it right in general, and nothing ought to care. Some things do care; the fault lies with them. */ /*if (!CPP_OPTION(pfile, traditional))*/ { const struct line_map *map = linemap_lookup(current.lex.line_map, src_loc); int spaces = SOURCE_COLUMN(map, src_loc) - 2; current.lex.pp.printed = 1; while (-- spaces >= 0) putc(' ', current.lex.pp.outf); } } static void save_pp_define(cpp_reader *pfile, source_location line, cpp_hashnode *node) { if (!current.lex.pp.outf) return; maybe_print_line (line); fprintf(current.lex.pp.outf, "#define %s\n", (const char *)cpp_macro_definition(pfile, node)); if (linemap_lookup(current.lex.line_map, line)->to_line != 0) current.lex.pp.src_line++; } static void save_pp_undef(source_location line, cpp_hashnode *node) { if (!current.lex.pp.outf) return; maybe_print_line(line); fprintf(current.lex.pp.outf, "#undef %s\n", NODE_NAME(node)); current.lex.pp.src_line++; } nescc-1.3.4/src/nesc-cpp.h000066400000000000000000000022461177770303300152760ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_CPP_H #define NESC_CPP_H #include "parser.h" void save_cpp_option(const char *option, const char *arg); void preprocess_init(void); void start_macro_saving(void); void end_macro_saving(void); struct cpp_token; struct cpp_reader; void save_pp_dir(const char *dir); void save_pp_file_start(const char *path); void save_pp_file_end(void); void save_pp_token(const struct cpp_token *tok); void save_pp_line_change(struct cpp_reader *pfile, const struct cpp_token *token); #endif nescc-1.3.4/src/nesc-decls.h000066400000000000000000000051551177770303300156100ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_DECLS_H #define NESC_DECLS_H typedef struct nesc_declaration { source_language kind; /* l_interface or l_component */ /* For source components, name and instance_name are the actual component name. For concrete instances of abstract components, name is the name to used in generated code, and instance_name is a user-friendly name (indicating the path through configurations that led to this instance). instance_name is used for error messages */ const char *name; const char *instance_name; int instance_number; nesc_decl ast; struct environment *env; struct docstring doc; bool abstract; /* true for abstract components and generic interfaces */ bool dumped; /* true if already added to dump list */ bool printed; /* true if declarations already printed */ declaration parameters; /* Parameters for generic components and interfaces */ expression arguments; /* Arguments for instantiations of generic components and interfaces */ struct environment *parameter_env; struct nesc_declaration *original; /* For instances: the "original" component or interface */ /* All '@'-style attributes attached to this declaration */ dd_list/*nesc_attribute*/ attributes; /* for components */ /* Binary components are mostly treated like modules. */ bool configuration; /* TRUE for configurations, FALSE for modules (needed before impl is set) and binary components. */ bool safe; /* TRUE if safety checks should be performed in here */ implementation impl; struct cgraph *connections; struct cgraph *user_connections; /* interfaces are not expanded */ dd_list local_statics; /* Local static variables (for nido) */ size_t instance_count; /* For abstract components, the instance count (used to give each instance a unique name) */ int folded; /* number of last constant folding pass */ } *nesc_declaration; #endif nescc-1.3.4/src/nesc-deputy.c000066400000000000000000000154671177770303300160320ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2008 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "nesc-deputy.h" #include "nesc-attributes.h" #include "AST_walk.h" #include "AST_utils.h" static AST_walker deputy_walker; struct deputy_data { bool deputy_scope; tag_declaration in_struct; environment env; }; static void dwalk(struct deputy_data *dd, void *p) { if (p) AST_walk(deputy_walker, dd, CASTPTR(node, &p)); } static AST_walker_result deputy_identifier(AST_walker unused, void *data, identifier *p) { identifier id = *p; struct deputy_data *dd = data; if (dd->deputy_scope) { const char *name = id->cstring.data; data_declaration realdecl = NULL; /* not doing make_identifier's error message suppression */ if (dd->in_struct && env_lookup(dd->in_struct->fields, name, TRUE)) realdecl = bad_decl; /* prevent renaming of field refs */ if (!realdecl) realdecl = env_lookup(dd->env->id_env, name, FALSE); if (realdecl) id->ddecl = realdecl; else error_with_location(id->location, "`%s' undeclared", name); } return aw_done; } static AST_walker_result deputy_nesc_attribute(AST_walker unused, void *data, nesc_attribute *p) { nesc_attribute na = *p; struct deputy_data ndd = *(struct deputy_data *)data; ndd.deputy_scope = na->tdecl->deputy_scope; AST_walk_children(deputy_walker, &ndd, CAST(node, na)); return aw_done; } static AST_walker_result deputy_tag_ref(AST_walker unused, void *data, tag_ref *p) { tag_ref tref = *p; struct deputy_data ndd = *(struct deputy_data *)data; ndd.in_struct = tref->kind != kind_enum_ref ? tref->tdecl : NULL; dwalk(data, tref->attributes); dwalk(&ndd, tref->fields); return aw_done; } static AST_walker_result deputy_fdeclarator(AST_walker unused, void *data, function_declarator *p) { function_declarator fd = *p; struct deputy_data ndd = *(struct deputy_data *)data; /* strangely or not, the parameters are no longer in scope within (from the AST perspective) the fdeclarator's declarator */ ndd.env = fd->env->parent; dwalk(&ndd, fd->declarator); dwalk(data, fd->return_type); dwalk(data, fd->parms); dwalk(data, fd->gparms); dwalk(data, fd->qualifiers); return aw_done; } static AST_walker_result deputy_function_decl(AST_walker unused, void *data, function_decl *p) { function_decl fdecl = *p; function_declarator fd = get_fdeclarator(fdecl->declarator); struct deputy_data ndd; /* The parameters are in scope for the result type too ... */ ndd.deputy_scope = FALSE; ndd.env = fd->env; ndd.in_struct = NULL; dwalk(&ndd, fdecl->declarator); dwalk(&ndd, fdecl->modifiers); dwalk(&ndd, fdecl->attributes); dwalk(data, fdecl->stmt); return aw_done; } static AST_walker_result deputy_data_decl(AST_walker unused, void *data, data_decl *p) { data_decl dd = *p; declaration first; variable_decl vd; function_declarator fd; struct deputy_data ndd; /* We only get deputy behaviour if there's a single variable declaration (variable_decl) with a function_delarator inside it. */ if (!dd->decls || dd->decls->next) return aw_walk; first = ignore_extensions(dd->decls); if (!is_variable_decl(first)) return aw_walk; vd = CAST(variable_decl, first); fd = get_fdeclarator(vd->declarator); if (!fd || !vd->ddecl) return aw_walk; /* The parameters are in scope for the result type too ... */ ndd.deputy_scope = FALSE; ndd.env = fd->env; ndd.in_struct = NULL; dwalk(&ndd, dd->modifiers); dwalk(&ndd, dd->decls); return aw_done; } static AST_walker_result deputy_compound_stmt(AST_walker unused, void *data, compound_stmt *p) { compound_stmt cs = *p; struct deputy_data ndd; ndd.deputy_scope = FALSE; ndd.env = cs->env; ndd.in_struct = NULL; AST_walk_children(deputy_walker, &ndd, CAST(node, cs)); return aw_done; } static AST_walker_result deputy_implementation(AST_walker unused, void *data, implementation *p) { implementation impl = *p; struct deputy_data ndd; ndd.deputy_scope = FALSE; ndd.env = impl->ienv; ndd.in_struct = NULL; AST_walk_children(deputy_walker, &ndd, CAST(node, impl)); return aw_done; } void resolve_deputy_scopes(nesc_decl ast) { struct deputy_data ndd; ndd.deputy_scope = FALSE; ndd.in_struct = NULL; ndd.env = ast->cdecl->env; dwalk(&ndd, ast); } static void attr_dscope_tdecl(nesc_attribute attr, tag_declaration tdecl) { if (tdecl->kind == kind_attribute_ref) tdecl->deputy_scope = TRUE; else error_with_location(attr->location, "@deputy_scope() can only be applied to attribute declarations"); } static void attr_ndecl_safe(nesc_attribute attr, nesc_declaration ndecl) { if (ndecl->kind == l_component) ndecl->safe = TRUE; else warning_with_location(attr->location, "@safe() attribute ignored"); } static void attr_decl_safe(nesc_attribute attr, data_declaration ddecl) { ddecl->safe = TRUE; } static void attr_ndecl_unsafe(nesc_attribute attr, nesc_declaration ndecl) { if (ndecl->kind == l_component) ndecl->safe = FALSE; else warning_with_location(attr->location, "@unsafe() attribute ignored"); } static void attr_decl_unsafe(nesc_attribute attr, data_declaration ddecl) { ddecl->safe = FALSE; } void init_deputy(void) { define_internal_attribute("deputy_scope", NULL, NULL, attr_dscope_tdecl, NULL, NULL, NULL); define_internal_attribute("safe", attr_ndecl_safe, attr_decl_safe, NULL, NULL, NULL, NULL); define_internal_attribute("unsafe", attr_ndecl_unsafe, attr_decl_unsafe, NULL, NULL, NULL, NULL); deputy_walker = new_AST_walker(permanent); AST_walker_handle(deputy_walker, kind_identifier, deputy_identifier); AST_walker_handle(deputy_walker, kind_nesc_attribute, deputy_nesc_attribute); AST_walker_handle(deputy_walker, kind_tag_ref, deputy_tag_ref); AST_walker_handle(deputy_walker, kind_function_declarator, deputy_fdeclarator); AST_walker_handle(deputy_walker, kind_function_decl, deputy_function_decl); AST_walker_handle(deputy_walker, kind_data_decl, deputy_data_decl); AST_walker_handle(deputy_walker, kind_compound_stmt, deputy_compound_stmt); AST_walker_handle(deputy_walker, kind_implementation, deputy_implementation); } nescc-1.3.4/src/nesc-deputy.h000066400000000000000000000014611177770303300160240ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2008 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_DEPUTY_H #define NESC_DEPUTY_H void resolve_deputy_scopes(nesc_decl ast); void init_deputy(void); #endif nescc-1.3.4/src/nesc-dfilter.c000066400000000000000000000240171177770303300161400ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include "parser.h" #include "nesc-dump.h" #include "nesc-dspec.h" #include "nesc-dspec-int.h" #include "nesc-semantics.h" /* Filters for XML dump requests. Current filters: file(globexp): match containing file name (unix-style file matching) name(regexp): match by item name (regular expression matching) attribute(namelist): match items containing one of the attributes in the namelist component(cname): match containing component name global(): match items from the global (C) scope instance(): match items in instances of generic components abstract(): match items that are not fully instantiated !global() && !abstract() && !instances(): "in a non-generic component" abstract() && !instance(): "in a generic component" !abstract() && instance(): "in a fully instantiated generic component (i.e., shows up in the generated C code)" abstract() && instance(): "a partially instantiated generic component, i.e., a generic component instantiated within a generic configuration" Filters can be combined with and, or, not. */ /* Implementation of filters is OOish, see the filter_op structure. Filters can be applied to nesc/tag/data_declaration objects (separate method for each). Each filter has an argument specification string of the form: - a sequence of n and t's for token and int arguments (in order) - "*t" or "*n" for an arbitrary list of tokens or numbers. See check_arg, make_ndf_op to extend this. */ static bool filter_file(ndf_op filter, location loc) { return !fnmatch(nd_tokenval(filter->args), loc->filename, 0); } static bool filter_name(ndf_op filter, const char *name) { return name && !regexec(filter->info, name, 0, NULL, 0); } static bool filter_attribute(ndf_op filter, dd_list/*nesc_attribute*/ attrs) { nd_arg reqattr; dd_list_pos actualattr; if (!attrs) return FALSE; /* return true if intersection of attributes in filter and attrs is non-empty */ scan_nd_arg (reqattr, filter->args) { const char *reqname = nd_tokenval(reqattr); dd_scan (actualattr, attrs) { nesc_attribute a = DD_GET(nesc_attribute, actualattr); if (!strcmp(a->word1->cstring.data, reqname)) return TRUE; } } return FALSE; } static bool filter_component(ndf_op filter, nesc_declaration container) { return container && !strcmp(nd_tokenval(filter->args), container->instance_name); } static bool fddecl_file(ndf_op op, data_declaration ddecl) { return filter_file(op, ddecl->definition ? ddecl->definition->location : ddecl->ast->location); } static bool fndecl_file(ndf_op op, nesc_declaration ndecl) { return filter_file(op, ndecl->ast->location); } static bool ftdecl_file(ndf_op op, tag_declaration tdecl) { return tdecl->definition && filter_file(op, tdecl->definition->location); } static bool fddecl_attribute(ndf_op op, data_declaration ddecl) { return filter_attribute(op, ddecl->attributes); } static bool fndecl_attribute(ndf_op op, nesc_declaration ndecl) { return filter_attribute(op, ndecl->attributes); } static bool ftdecl_attribute(ndf_op op, tag_declaration tdecl) { return filter_attribute(op, tdecl->attributes); } static void fcompile_name(ndf_op op) { int err; op->info = ralloc(dump_region, regex_t); err = regcomp(op->info, nd_tokenval(op->args), REG_EXTENDED); if (err) { char errmsg[200]; regerror(err, op->info, errmsg, sizeof errmsg); nderror(errmsg); } } static bool fddecl_name(ndf_op op, data_declaration ddecl) { return filter_name(op, ddecl->name); } static bool fndecl_name(ndf_op op, nesc_declaration ndecl) { return filter_name(op, ndecl->instance_name); } static bool ftdecl_name(ndf_op op, tag_declaration tdecl) { return filter_name(op, tdecl->name); } static bool fddecl_component(ndf_op op, data_declaration ddecl) { return filter_component(op, ddecl->container); } static bool fndecl_component(ndf_op op, nesc_declaration ndecl) { /* XXX: should this do something obvious w/ instantiated abstract components? */ return FALSE; } static bool ftdecl_component(ndf_op op, tag_declaration tdecl) { return filter_component(op, tdecl->container); } static bool fddecl_global(ndf_op op, data_declaration ddecl) { return !ddecl->container && !ddecl->container_function; } static bool fndecl_global(ndf_op op, nesc_declaration ndecl) { /* XXX: see fndecl_component comment */ return TRUE; } static bool ftdecl_global(ndf_op op, tag_declaration tdecl) { return !tdecl->container /* && !tdecl->container_function*/; } static bool is_instance(nesc_declaration ndecl) { return ndecl && ndecl->arguments; } static bool fddecl_instance(ndf_op op, data_declaration ddecl) { return is_instance(ddecl_container(ddecl)); } static bool fndecl_instance(ndf_op op, nesc_declaration ndecl) { return is_instance(ndecl); } static bool ftdecl_instance(ndf_op op, tag_declaration tdecl) { return is_instance(tdecl_container(tdecl)); } static bool is_abstract(nesc_declaration ndecl) { return ndecl && ndecl->abstract; } static bool fddecl_abstract(ndf_op op, data_declaration ddecl) { return is_abstract(ddecl_container(ddecl)); } static bool fndecl_abstract(ndf_op op, nesc_declaration ndecl) { return is_abstract(ndecl); } static bool ftdecl_abstract(ndf_op op, tag_declaration tdecl) { return is_abstract(tdecl_container(tdecl)); } static struct filter_op { const char *name; const char *args; /* Argument specification (see top) */ /* (optional) filter "compilation" (eg for regexps) */ void (*compile)(ndf_op op); /* Execute filter op on Xdecl */ bool (*execute_ddecl)(ndf_op op, data_declaration ddecl); bool (*execute_ndecl)(ndf_op op, nesc_declaration ndecl); bool (*execute_tdecl)(ndf_op op, tag_declaration tdecl); } ops[] = { { "file", "t", NULL, fddecl_file, fndecl_file, ftdecl_file }, { "name", "t", fcompile_name, fddecl_name, fndecl_name, ftdecl_name }, { "component", "t", NULL, fddecl_component, fndecl_component, ftdecl_component }, { "global", "", NULL, fddecl_global, fndecl_global, ftdecl_global }, { "instance", "", NULL, fddecl_instance, fndecl_instance, ftdecl_instance }, { "abstract", "", NULL, fddecl_abstract, fndecl_abstract, ftdecl_abstract }, { "attribute", "*t", NULL, fddecl_attribute, fndecl_attribute, ftdecl_attribute } }; static void check_arg(nd_arg arg, int kind) { bool ok; switch (kind) { default: ok = TRUE; case 't': ok = is_nd_token(arg); break; case 'n': ok = is_nd_int(arg); break; } if (!ok) nderror("wrong argument type"); } nd_filter make_ndf_op(region r, const char *name, nd_arg args) { int nargs = nd_arg_length(args); ndf_op op = new_ndf_op(r, name, args, nargs); int i; for (i = 0; i < sizeof ops / sizeof *ops; i++) if (!strcmp(name, ops[i].name)) { const char *argspec = ops[i].args; nd_arg arg; int old_ec = errorcount; op->filter_index = i; /* Check arguments */ if (argspec[0] == '*') scan_nd_arg (arg, args) check_arg(arg, argspec[1]); else { scan_nd_arg (arg, args) { if (!*argspec) nderror("too many arguments"); else check_arg(arg, *argspec++); } if (*argspec) nderror("not enough arguments"); } if (errorcount == old_ec && ops[i].compile) ops[i].compile(op); return CAST(nd_filter, op); } nderror("unknown filter operator"); return CAST(nd_filter, op); } /* The current filter, applied by dump_filter_Xdecl */ static nd_filter current_filter; enum { filter_ddecl, filter_ndecl, filter_tdecl }; static bool dofilter(int op, nd_filter f, void *decl) { switch (f->kind) { case kind_ndf_and: { ndf_and f1 = CAST(ndf_and, f); return dofilter(op, f1->filter1, decl) && dofilter(op, f1->filter2, decl); } case kind_ndf_or: { ndf_or f1 = CAST(ndf_or, f); return dofilter(op, f1->filter1, decl) || dofilter(op, f1->filter2, decl); } case kind_ndf_not: { ndf_not f1 = CAST(ndf_not, f); return !dofilter(op, f1->filter1, decl); } case kind_ndf_op: { ndf_op f1 = CAST(ndf_op, f); struct filter_op *fop = &ops[f1->filter_index]; switch (op) { case filter_ddecl: return fop->execute_ddecl(f1, decl); case filter_ndecl: return fop->execute_ndecl(f1, decl); case filter_tdecl: return fop->execute_tdecl(f1, decl); default: assert(0); return FALSE; } } default: assert(0); return FALSE; } } bool dump_filter_ddecl(data_declaration ddecl) { return !current_filter || dofilter(filter_ddecl, current_filter, ddecl); } bool dump_filter_ndecl(nesc_declaration ndecl) { return !current_filter || dofilter(filter_ndecl, current_filter, ndecl); } bool dump_filter_tdecl(tag_declaration tdecl) { return !current_filter || dofilter(filter_tdecl, current_filter, tdecl); } void dump_set_filter(nd_option opt) { nd_arg *optargs = &opt->args; nd_filter extracted = NULL; /* Extract filters from opt, build current filter. If multiple filters, just and them together. */ while (*optargs) if (!is_nd_filter(*optargs)) optargs = &(*optargs)->next; else { nd_filter f = CAST(nd_filter, *optargs); *optargs = (*optargs)->next; if (extracted) { ndf_and x = new_ndf_and(dump_region, extracted, f); extracted = CAST(nd_filter, x); } else extracted = f; } current_filter = extracted; } nescc-1.3.4/src/nesc-dfilter.h000066400000000000000000000023021177770303300161360ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_DFILTER_H #define NESC_DFILTER_H nd_filter make_ndf_op(region r, const char *name, nd_arg args); /* Returns: a new filter op for filter 'name' with arguments 'args' */ void dump_set_filter(nd_option opt); /* Effects: Sets current filter to the and of all filters found in option list opt. */ /* Returns: TRUE if argument passes current filter. */ bool dump_filter_ddecl(data_declaration ddecl); bool dump_filter_ndecl(nesc_declaration ndecl); bool dump_filter_tdecl(tag_declaration tdecl); #endif nescc-1.3.4/src/nesc-doc.c000066400000000000000000002266611177770303300152650ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 UC Berkeley The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Author: J. Robert von Behren Created: 7/4/2002 Modified: 7/8/2002 This file contains routines for generating documentation from nesC source code. The basic format for documentation is similar to Javadoc. For specifics, look Modified: 8/14/2002 by Phil Levis - Changed symlink code to unlink symlink before linking (else EEXIST occurs when repeating). - Removed color map elements -- default graphviz doesn't include language cmap. Modified 8/15/2002 by Phil Levis - Chase down pointer_declarators for functions properly now. Modified 8/21/2002 by Rob von Behren - add back cmap - requires newer graphviz, but makes for prettier HTML output */ #include #include #include #include #include #include #include #include #include "dhash.h" #include "parser.h" #include "c-parse.h" #include "nesc-doc.h" #include "nesc-component.h" #include "nesc-semantics.h" #include "nesc-c.h" #include "unparse.h" #include "AST_utils.h" #include "edit.h" #include "semantics.h" #include "constants.h" #include "sd_list.h" #include "nesc-cg.h" #include "graph.h" #include "nesc-env.h" #include "regions.h" #include "unparse.h" #include "errors.h" static region doc_region = NULL; #ifdef WIN32 #define mkdir(a, b) mkdir((a)) #endif ////////////////////////////////////////////////////////////////////// // // file name munging // ////////////////////////////////////////////////////////////////////// // separator character for directory paths static char dirsep = '/'; static char dirsep_string[2] = "/"; // "package name" to prepend to files in the current directory static const char *currdir_prefix = NULL; // full name of original working directory static char original_wd[1024]; // directory info to strip from the generated docs file names #define MAX_TOPDIRS 100 static const char *topdir[MAX_TOPDIRS]; static int num_topdirs = 0; // output directory for generated docs static const char *docdir = NULL; // flag, to determine whether or not to use graphviz static bool use_graphviz = FALSE; // flag, to determine whether or not to generate the app pages static bool is_app = FALSE; /** * Initialize the memory region for the doc tools **/ static void init_doc_region() { if(doc_region == NULL) doc_region = newregion(); } /** * Set the graphviz flag **/ void doc_use_graphviz(const bool use) { use_graphviz = use; } /** * Set the app flag **/ void doc_is_app(const bool val) { is_app = val; } /** * Set the doc dir **/ void doc_set_outdir(const char *dir) { assert(dir); docdir = dir; } /** * Add a top level source directory **/ void doc_add_topdir(const char *dir) { char realdir[PATH_MAX+1]; char *temp; init_doc_region(); assert(dir); if (num_topdirs >= MAX_TOPDIRS) fatal("ERROR: Too many `topdirs' (-fnesc-topdir) directories specified.\n"); // canonicalize the path if(realpath(dir, realdir) == NULL) { perror("realpath"); fatal("ERROR: Bad nesc-topdir option:\n '%s'\n",dir); } temp = rstralloc( doc_region, strlen(realdir)+1 ); assert( temp ); strcpy(temp, realdir); topdir[num_topdirs] = temp; num_topdirs++; } /** * Set the directory separator - used for cygwin? **/ void doc_set_dirsep(const char c) { dirsep = c; dirsep_string[0] = c; } /** * Initialize directory info. **/ static void find_currdir_prefix(const char *ocwd) { int i; char *cwd = rstrdup(doc_region, ocwd); unixify_path(cwd); // filename generation won't work if we don't know the top directories. if( num_topdirs <= 0 ) { fatal("ERROR: Documentation generation requires specifying\n -nesc-topdir arguments.\n"); } // look for the topdir that is above the cwd. for(i=0; iast); assert(iface->location != dummy_location); return doc_filename(iface->location->filename); } static char *component_docfile_name(const char *component_name) { nesc_declaration cdecl; component comp; cdecl = require(l_component, NULL /* location */, component_name); comp = CAST(component, cdecl->ast); assert(comp->location != dummy_location); return doc_filename(comp->location->filename); } static bool copy_file(const char *srcfile, const char *destfile) { char buf[1024 * 4]; FILE *in = fopen(srcfile, "r"); FILE *out = fopen(destfile, "w"); size_t nread; size_t nwritten; if( !in ) { warning("Can't read from source file '%s'", srcfile); return FALSE; } if( !out ) { warning("Can't write to file '%s'", destfile); return FALSE; } while( !feof(in) ) { nread = fread(buf, 1, sizeof(buf), in); if( ferror(in) ) { warning("error copying '%s' to '%s'. can't read source", srcfile, destfile); fclose(in); fclose(out); return FALSE; } assert( !ferror(in) ); if(nread > 0) { nwritten = fwrite(buf, 1, nread, out); if( ferror(out) || nwritten != nread ) { warning("error copying '%s' to '%s'. can't write dest", srcfile, destfile); fclose(in); fclose(out); return FALSE; } } } fclose(in); fclose(out); return TRUE; } static void add_source_symlink(const char *orig_src_filename, const char *linkname) { #ifdef WIN32 char buf[PATH_MAX+1]; char *srcfile; assert(chdir(original_wd) == 0); if(realpath(orig_src_filename, buf) == NULL) { perror("realpath"); fatal("error expanding path for '%s'\n", orig_src_filename); } srcfile = buf; assert(chdir(docdir) == 0); unlink(linkname); if( !copy_file(srcfile, linkname) ) { warning("can't copy source file '%s'", srcfile); } #else bool cygwin = FALSE; char buf[PATH_MAX+1]; char *srcfile; // remove symlinks, etc. We do this from the original working // directory, so that relative paths will be resolved correctly. assert(chdir(original_wd) == 0); if(realpath(orig_src_filename, buf) == NULL) { perror("realpath"); fatal("error expanding path for '%s'\n", orig_src_filename); } srcfile = buf; assert(chdir(docdir) == 0); // determine whether or not we are running under cygwin { char *ostype = getenv("OSTYPE"); if(ostype != NULL && !strcmp(ostype,"cygwin")) cygwin = TRUE; } unlink(linkname); if( !cygwin ) { if(symlink(srcfile, linkname) != 0) { perror("symlink"); warning("can't create symlink to source file %s",srcfile); } } else { if( !copy_file(srcfile, linkname) ) { warning("can't copy source file '%s'", srcfile); } } #endif } ////////////////////////////////////////////////////////////////////// // // output functions // ////////////////////////////////////////////////////////////////////// static FILE *current_doc_outfile; static FILE *open_outfile(const char *outfile) { unlink(outfile); current_doc_outfile = fopen(outfile,"w"); if( !current_doc_outfile ) fatal("can't write to output file '%s'",outfile); // set up unparse routines unparse_start(current_doc_outfile, NULL); disable_line_directives(); set_function_separator("."); enable_documentation_mode(); return current_doc_outfile; } static void close_outfile(FILE *doc_outfile) { fclose(doc_outfile); unparse_end(); } ////////////////////////////////////////////////////////////////////// // // External information cache // ////////////////////////////////////////////////////////////////////// typedef struct { char **comp; int num; int slots; } implementor_list; typedef struct { char *desc; bool is_iface; implementor_list r_list; implementor_list p_list; } ic_entry; static env ic_env; static implementor_list ic_empty_implementor_list; #if 0 static void ic_print() { env_scanner scanner; const char *name; ic_entry *entry; char *desc, *pos; // scan throug env_scan(ic_env, &scanner); while( env_next(&scanner, &name, (void **)&entry) ) { assert(entry); desc = entry->desc; if(desc == NULL) desc = ""; // kill weird whitespace in the description pos = desc; while( 1 ) { pos += strcspn(pos,"\r\n\t"); if(*pos == '\0') break; *pos = ' '; } printf("%s %d %s\n",name, entry->is_iface, desc); } printf("\n\n"); } #endif static void ilist_add(implementor_list *list, char *name) { int i; char *temp; // skip duplicates for(i=0; inum; i++) { if(strcmp(name, list->comp[i]) == 0) return; if(strcmp(name, list->comp[i]) < 0) break; } // first allocation if(list->comp == NULL) { list->comp = rarrayextend(doc_region, NULL, 10, char*); list->slots = 10; list->num = 0; } // expand, if necessary if(list->num == list->slots) { list->comp = rarrayextend(doc_region, list->comp, list->slots+10, char*); list->slots += 10; } // add the item, and shift the rest up while( i <= list->num ) { temp = list->comp[i]; list->comp[i] = name; name = temp; i++; } list->num++; } static ic_entry* ic_get_entry(char *key) { char *end; char save; ic_entry *entry; // remove extra suffix stuff from the key end = strstr(key,".nc"); if(end == NULL) return NULL; // should never happen end += strlen(".nc"); save = *end; *end = '\0'; // check the index entry = env_lookup(ic_env, key, TRUE); *end = save; return entry; } static void ic_read() { FILE *f; char key[1024]; int is_iface, nreq, nprov, i, ret; char desc[4096]; ic_entry *entry; ic_env = new_env(doc_region, NULL); ic_empty_implementor_list.num = 0; // FIXME: we should really lock the file, so we don't get garbage if // there are multiple concurrent compiles // open the existing file, if any f = fopen("info.idx","r"); if(f == NULL) return; // parse the file while( !feof(f) ) { key[0] = desc[0] = '\0'; is_iface = nreq = nprov = 0; ret = fscanf(f, "%s%d%d%d%*[ ]%[^\n]\n", key, &is_iface, &nreq, &nprov, desc); if(ret == -1 && feof(f)) break; if(ret != 4 && ret != 5) { warning("invalid data in info.idx - ignoring remainder of file\n"); fclose(f); return; } entry = ic_get_entry(key); if(entry == NULL) { entry = ralloc(doc_region, ic_entry); memset(entry, 0, sizeof(ic_entry)); env_add(ic_env, rstrdup(doc_region,key), entry); } if(strlen(desc) > 0) entry->desc = rstrdup(doc_region, desc); if(is_iface == 1) entry->is_iface = TRUE; // read interfaces for(i=0; ir_list), rstrdup(doc_region,desc)); } for(i=0; ip_list), rstrdup(doc_region,desc)); } } // close the file fclose(f); } static void ic_write() { FILE *f; env_scanner scanner; const char *name; ic_entry *entry; char *desc, *pos; int i; // open the output file f = fopen("info.idx", "w"); if(f == NULL) { warning("can't write to cache file 'info.idx'.\n"); return; } // scan throug env_scan(ic_env, &scanner); while( env_next(&scanner, &name, (void **)&entry) ) { assert(entry); desc = entry->desc; if(desc == NULL) desc = ""; // kill weird whitespace in the description pos = desc; while( 1 ) { pos += strcspn(pos,"\r\n\t"); if(*pos == '\0') break; *pos = ' '; } // write the file fprintf(f,"%s %d %d %d %s\n", name, entry->is_iface?1:0, entry->r_list.num, entry->p_list.num, desc); // write interfaces for(i=0; ir_list.num; i++) fprintf(f, " %s", entry->r_list.comp[i]); for(i=0; ip_list.num; i++) fprintf(f, " %s", entry->p_list.comp[i]); if(entry->r_list.num > 0 || entry->p_list.num > 0) fprintf(f,"\n"); } // close the file fclose(f); // FIXME: should unlock the file now } static char *ic_make_iface_key(const char *interface_name) { nesc_declaration idecl; interface iface; idecl = require(l_interface, &doc_empty_location, interface_name); iface = CAST(interface, idecl->ast); return doc_filename_with_ext(iface->location->filename,""); } static void ic_scan_rplist(nesc_declaration cdecl, char *name) { component comp = CAST(component, cdecl->ast); declaration dlist, decl; interface_ref iref; ic_entry *entry; implementor_list *list; char *ifname; scan_declaration(dlist, comp->decls) { if (is_rp_interface(dlist)) { rp_interface rp = CAST(rp_interface, dlist); scan_declaration(decl, rp->decls) { if( is_interface_ref(decl) ) { iref = CAST(interface_ref,decl); ifname = ic_make_iface_key(iref->word1->cstring.data); } else { continue; } entry = ic_get_entry( ifname ); if(entry == NULL) { entry = ralloc(doc_region, ic_entry); memset(entry, 0, sizeof(ic_entry)); env_add(ic_env, ifname, entry); } // pick the list if( rp->required ) list = &(entry->r_list); else list = &(entry->p_list); // add to the list ilist_add(list, name); } } } } static void ic_add_entry(nesc_declaration cdecl) { ic_entry *entry; char *key; // create the local key { nesc_decl d = CAST(nesc_decl, cdecl->ast); key = doc_filename_with_ext(d->location->filename,""); } // get an existing entry entry = ic_get_entry(key); if(entry == NULL) { entry = ralloc(doc_region, ic_entry); memset(entry, 0, sizeof(ic_entry)); env_add(ic_env, key, entry); } // fill in the entry if( cdecl->kind == l_interface ) entry->is_iface = TRUE; else entry->is_iface = FALSE; // docstring entry->desc = (char *)cdecl->doc.short_s; // implementor list if( cdecl->kind == l_component ) { ic_scan_rplist(cdecl, key); } } static char *ic_get_desc(char *key) { ic_entry *entry = ic_get_entry(key); if(entry == NULL) return NULL; return entry->desc; } static bool ic_is_iface(char *key) { ic_entry *entry = ic_get_entry(key); if(entry == NULL) return FALSE; return entry->is_iface; } ////////////////////////////////////////////////////////////////////// // // Docstring command parsing // ////////////////////////////////////////////////////////////////////// /** * Try to figure out if a given '@' sign is actually part of an email * address. If so, beg is assigned the position of the first * character of the address, and end is assigned the position of the * first whitespace character after the address. * * The heuristic that is used is as follows: * * 1. The string has non-whitespace characters, ended by * ".[a-zA-Z][a-zA-Z][a-zA-Z]? " * * 2. The string has no other * **/ static bool check_email_address(const char *docstring, char *pos, char **beg, char **end) { char *b, *e; char c; // find the beginning of the address b = pos-1; while( 1 ) { // beyond the start of the string if(b < docstring) break; // not a valid character, so quit c = *b; if( !((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_' || c == '-' || c == '.')) break; b--; } b++; // find the end of the address e = pos+1; while( 1 ) { c = *e; // at the end of the string if( c == '\0' ) break; // not a valid character if( !((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_' || c == '-' || c == '.')) break; e++; } e--; if(b < pos && e > pos) { *beg = b; *end = e; return TRUE; } else { return FALSE; } } typedef enum { in_main, in_return, in_param, in_author, in_version, in_modified, in_signals, in_see_also } docstring_context; static void output_docstring(char *docstring, location loc) { char *pos = docstring; char *at, *space; int len; docstring_context context = in_main; static char *whitespace = " \t\r\n"; while( 1 ) { // find the next @ directive at = strchr(pos,'@'); // output the rest, if there are no more @ directives if(at == NULL) { output_string(pos); if(context == in_param) output("\n"); if(context != in_main) output("\n"); return; } // directives must be preceeded by whitespace or an open paren space = at-1; if(space >= docstring && (*space==' ' || *space=='\t' || *space=='\n' || *space=='\r' || *space=='(') ) { // output up to the @ *at='\0'; output_string(pos); *at='@'; pos = at+1; // do some formatting, based on the command len = strcspn(pos, whitespace); if( len==strlen("return") && !strncasecmp("return",pos,len) ) { pos += len; if(context == in_param) output("\n"); if(context == in_main) output("\n"); else output("\n"); if(context != in_return) { output("\n\n
Returns:"); context = in_return; } else { output("
 "); } } else if( len==strlen("param") && !strncasecmp("param",pos,len) ) { pos += len; //if(context == in_param) output("\n"); if(context == in_main) output("\n"); if(context != in_param) { output("\n"); output("\n\n\n

Parameters:
"); output("

"); context = in_param; } else { //output("

 "); //output("
 "); output("

"); } // print out the parameter name, plus a separator pos += strspn(pos, whitespace); len = strcspn(pos, whitespace); // Null terminate the name *(pos + len) = '\0'; //output("

"); output("%*s",len,pos); output(" - "); // Restore to spaced text. *(pos + len) = ' '; pos += len; } else if( len==strlen("author") && !strncasecmp("author",pos,len) ) { pos += len; if(context == in_param) output("\n"); if(context == in_main) output("\n"); else output("\n"); if(context != in_author) { output("\n
Author:\n"); context = in_author; } else { output("
 "); } } else if( len==strlen("version") && !strncasecmp("version",pos,len) ) { pos += len; if(context == in_param) output("\n"); if(context == in_main) output("\n"); else output("\n"); if(context != in_version) { output("\n
Version:\n"); context = in_version; } else { output("
 "); } } else if( len==strlen("modified") && !strncasecmp("modified",pos,len) ) { pos += len; if(context == in_param) output("\n"); if(context == in_main) output("\n"); else output("\n"); if(context != in_modified) { output("\n
Modified:\n"); context = in_modified; } else { output("
 "); } } else if( len==strlen("signals") && !strncasecmp("signals",pos,len) ) { pos += len; if(context == in_param) output("\n"); if(context == in_main) output("\n"); else output("\n"); if(context != in_signals) { output("\n
Events signaled:\n"); context = in_signals; } else { output("
 "); } // FIXME: should print warnings for things (a) not mentioned // or (b) extraneously mentioned // FIXME: should add hrefs to the events (?) } else if( len==strlen("see") && !strncasecmp("see",pos,len) ) { pos += len; if(context == in_param) output("\n"); if(context == in_main) output("\n"); else output("\n"); if(context != in_see_also) { output("\n
See also:\n"); context = in_see_also; } else { output("
 "); } // FIXME: should add hrefs when possible } // output a warning, and print the bogus directive as-is else { warning("%s:%ld: Unknown documentation directive '@%.*s'\n", loc->filename, loc->lineno, len, pos); output("@"); } } // found an @ that isn't preceded by whitespace or '('. Don't print a warning. else { char *begin, *end; char save; // do a quick check to see if it might be an email address, and format it nicely if so. if( check_email_address(docstring, at, &begin, &end) ) { // output to the beginning of the address save=*begin; *begin='\0'; output_string(pos); *begin=save; // print the mailto: URL and the address end++; save=*end; *end='\0'; output("%s",begin,begin); *end = save; // set the position pos=end; } // not an email address, just output normally else { *at='\0'; output_string(pos); *at='@'; pos = at+1; output("@"); } } } } ////////////////////////////////////////////////////////////////////// // // HTML generation functions // ////////////////////////////////////////////////////////////////////// typedef enum { NAV_APP, NAV_COMP, NAV_INT, NAV_ALL, NAV_TREE, NAV_OTHER } navbar_mode; static void print_navbar(FILE *f, navbar_mode mode, const char *srcfile, const char *srctext) { char *spaces = "   "; if(srcfile) { fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f,"
\n"); } fprintf(f,"\n"); if(mode == NAV_APP) fprintf(f,"Apps\n"); else fprintf(f,"Apps\n"); fprintf(f, "%s\n", spaces); if(mode == NAV_COMP) fprintf(f,"Components\n"); else fprintf(f, "Components\n"); fprintf(f, "%s\n", spaces); if(mode == NAV_INT) fprintf(f,"Interfaces\n"); else fprintf(f, "Interfaces\n"); fprintf(f, "%s\n", spaces); if(mode == NAV_ALL) fprintf(f,"All Files\n"); else fprintf(f, "All Files\n"); fprintf(f, "%s\n", spaces); if(mode == NAV_TREE) fprintf(f,"Source Tree\n"); else fprintf(f, "Source Tree\n"); fprintf(f, "%s\n", spaces); fprintf(f, "\n"); if(srcfile) { fprintf(f,"\n"); fprintf(f,"\n"); fprintf(f,"source: %s\n", srcfile, srctext); fprintf(f, "\n"); fprintf(f,"
\n"); } fprintf(f, "
\n"); } static void print_short_variable_html(data_decl ddecl, variable_decl vd) { output("
  • "); //prt_declarator(d->declarator, d->qualifiers, d->attributes, d->ddecl, psd_skip_container); // FIXME: did this fix the variable declaration printing? prt_type_elements(ddecl->modifiers, 0); prt_declarator(vd->declarator, NULL, vd->attributes, vd->ddecl, psd_skip_container); // NOTE: these lines copied from unparse.c - not sure I want/need them. { //if (d->asm_stmt) // prt_asm_stmt_plain(d->asm_stmt); if (vd->arg1) { output(" = "); prt_expression(vd->arg1, P_ASSIGN); } } output("\n"); // show the description, if any if( vd->ddecl->doc.short_s ) { output("
    "); output_docstring((char *)vd->ddecl->doc.short_s, vd->ddecl->doc.loc); output("\n"); } } static inline void check_print_func_args(function_decl fd, data_decl dd, variable_decl vd, function_declarator *fdr, data_declaration *ddecl) { if( fd ) { assert(dd==NULL); assert(vd==NULL); if(fdr) *fdr = CAST(function_declarator, fd->fdeclarator); if(ddecl) *ddecl = fd->ddecl; } else { assert(fd==NULL); assert(dd); assert(vd); if (is_function_declarator(vd->declarator)) { if(fdr) *fdr = CAST(function_declarator, vd->declarator); if(ddecl) *ddecl = vd->ddecl; } // Chase down pointers if necessary. else if (is_pointer_declarator(vd->declarator)) { function_declarator fdcl = get_fdeclarator(vd->declarator); if(fdr) *fdr = fdcl; if(ddecl) *ddecl = vd->ddecl; } else { if(ddecl) *ddecl = vd->ddecl; } } } /** * print function return type & modifiers **/ static void print_func_return(function_decl fd, data_decl dd, variable_decl vd) { check_print_func_args(fd, dd, vd, NULL, NULL); if(fd) { prt_declarator(NULL, fd->modifiers, fd->attributes, fd->ddecl, psd_skip_container); } else { prt_type_elements(dd->modifiers, psd_skip_command_event); } } /** * print function name **/ static void print_func_name(function_decl fd, data_decl dd, variable_decl vd) { function_declarator fdr; data_declaration ddecl; check_print_func_args(fd, dd, vd, &fdr, &ddecl); prt_simple_declarator(fdr->declarator, ddecl, psd_skip_container | psd_need_paren_for_star | psd_need_paren_for_qual); } /** * print function arguments **/ // FIXME: this should allow an option to print only arg types, and not // names - necessary to canonicalize anchors and hrefs. static void print_func_args(function_decl fd, data_decl dd, variable_decl vd) { function_declarator fdr; data_declaration ddecl; check_print_func_args(fd, dd, vd, &fdr, &ddecl); prt_parameters(fdr->gparms ? fdr->gparms : ddecl ? ddecl_get_gparms(ddecl) : NULL, fdr->parms, psd_skip_container); } /** * print the entire header for a function - return name(args) **/ static void print_function_header(function_decl fd, data_decl dd, variable_decl vd) { print_func_return(fd, dd, vd); print_func_name(fd, dd, vd); print_func_args(fd, dd, vd); } /** * Check to see if a function has a long description **/ static bool has_long_desc(function_decl fd, data_decl dd, variable_decl vd) { if( fd ) { return (fd->ddecl->doc.long_s != NULL); } else { return (vd->ddecl->doc.long_s != NULL); } } /** * generate the text for a stand-alone function declaration. This * occurs when functions are listed on requires/provides lines in * components, or in uses/defines lines in interfaces. * * FIXME: For "provides", we should really use the actual declaration * of the function, since that will have the descriptive text. For * "requires", there probably won't be any(?) * * NOTE: for interfaces, the descriptive text should be with this * variable_decl (there's nowhere else for it to be). **/ typedef enum { short_desc = 0x0001, long_desc = 0, in_component = 0x0002, in_interface = 0, } function_flag; static void print_function_html(function_decl fd, data_decl dd, variable_decl vd, function_flag flags) { char *sdoc = NULL; char *ldoc = NULL; char *ifile = NULL; location loc = NULL; // set up the description pointers if( fd ) { sdoc = (char *)fd->ddecl->doc.short_s; ldoc = (char *)fd->ddecl->doc.long_s; loc = fd->ddecl->doc.loc; } else { sdoc = (char *)vd->ddecl->doc.short_s; ldoc = (char *)vd->ddecl->doc.long_s; loc = vd->ddecl->doc.loc; } // if we're not in the interface, fetch the name of the interface file, for external refs if( flags & in_component ) { if( fd ) { if( fd->ddecl->interface ) ifile = interface_docfile_name(fd->ddecl->interface->itype->name); } else { // NOTE: if( !in_interface && !fd ), then this is a function // from a requires/provides line in a component. In this case, // there is no interface anyway, so we should leave this blank. } } // short desc: if there is a long description, link to it. Otherwise, link to the interface if( flags & short_desc ) { output("
  • \n"); output(" "); print_func_return(fd,dd,vd); if(ldoc) {output(" \n");} else if(ifile) {output(" \n");} output(""); print_func_name(fd,dd,vd); output(""); if(ldoc || ifile) output(" \n"); print_func_args(fd,dd,vd); output("\n"); if(sdoc) { output(""); output_docstring(sdoc,loc); output("

    \n"); } output("\n"); } // long desc: print the anchor. if we're in the component file, also link to the interface. else { output(" \n"); output("

    "); print_func_name(fd,dd,vd); output("

    \n"); output(" "); print_func_return(fd,dd,vd); if(ifile) {output(" ");} output(""); print_func_name(fd,dd,vd); output(""); if(ifile) output(" \n"); print_func_args(fd,dd,vd); assert(ldoc); // should have checked in the caller output("

    "); output_docstring(ldoc,loc); output(""); //output("


    \n"); } } /** * Print a nicer looking HTML banner **/ static inline void start_html_banner() { output("\n"); output("
    \n"); } static inline void end_html_banner() { output("
    \n"); } static void print_html_banner(const char *text) { start_html_banner(); output("%s",text); end_html_banner(); } ////////////////////////////////////////////////////////////////////// // // Connection graph functions // ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// // tools for checking uniqueness of edges // in the interface connection graph ////////////////////////////////////////////////// typedef struct iface_graph_entry { endp req; endp prov; } *iface_graph_entry; #define iface_node_name( ep ) \ ( ep->component ? \ ep->component->ctype->name : \ ( ep->function->container ? \ ep->function->container->name : \ ep->function->ast->location->filename)) static int iface_graph_compare(void *entry1, void *entry2) { int ret; iface_graph_entry e1 = (iface_graph_entry) entry1; iface_graph_entry e2 = (iface_graph_entry) entry2; ret = strcmp(iface_node_name(e1->req), iface_node_name(e2->req)); if(ret) return 0; ret = strcmp(iface_node_name(e1->prov), iface_node_name(e2->prov)); if(ret) return 0; ret = strcmp(e1->req->interface->name, e2->req->interface->name); return !ret; } static unsigned long iface_graph_hash(void *entry) { unsigned long rhash, phash, ihash; iface_graph_entry e = (iface_graph_entry) entry; assert( iface_node_name(e->req) ); assert( iface_node_name(e->prov) ); assert( e->req->interface->name ); rhash = hash_str( iface_node_name(e->req) ); phash = hash_str( iface_node_name(e->prov) ); ihash = hash_str( e->req->interface->name ); return rhash ^ (phash<<1) ^ ihash; } static dhash_table new_iface_graph_table() { return new_dhash_table(newregion(), 10, iface_graph_compare, iface_graph_hash); } //static int fixme_graph_num = 1; static bool connection_already_printed(dhash_table table, endp ep1, endp ep2, endp *req, endp *prov) { // FIXME: kludge, to try to get things working with parameterized interfaces if(!ep1->component && !ep1->interface && ep1->function->interface) ep1->interface = ep1->function->interface; if(!ep2->component && !ep2->interface && ep2->function->interface) ep2->interface = ep2->function->interface; // sort out which is the "requires" side, and which is the "provides" side // For interfaces: ep1 is req, ep2 is prov if connecting a command, // the other way round if connecting an event // For functions: the direction in the graph is always the one we want if (ep1->interface) { if (ep1->function->ftype == function_command) { *req = ep1; *prov = ep2; } else { *req = ep2; *prov = ep1; } } else { *req = ep1; *prov = ep2; } // special case: if the interface is empty, we always show the connection if((*prov)->interface == NULL) { assert( (*req)->interface == NULL ); return FALSE; } // special case: skip loopback edges, created by parameterized interfaces if( !strcmp(iface_node_name(ep1),iface_node_name(ep2)) ) { return TRUE; } // see if this one has already been printed. This is done by checking a hashtable for the tripple of req,prov,iface { // create a table entry iface_graph_entry e = ralloc(regionof(table), struct iface_graph_entry); e->req = *req; e->prov = *prov; // do the lookup if( dhlookup(table,e) ) return TRUE; // add the new item to the table dhadd(table, e); return FALSE; } } /** * Display the nodes in the graph, along w/ info on edges **/ static void print_cg_html(const char *component_name, const char *component_file_name, cgraph cg, bool app_graph) { gnode n; dhash_table table = NULL; char *iface_dot, *func_dot; char *iface_gif, *func_gif; char *iface_cmap, *func_cmap; FILE *iface_file, *func_file; char *text_only_name; FILE *text_file; bool do_func_graph = FALSE; // FIXME: disable the function graph for now // FIXME: increment graph num for debugging /* fixme_graph_num++; fprintf(stderr, "%d.\n", fixme_graph_num); */ // create filenames if( app_graph ) { iface_dot = doc_filename_with_ext(component_file_name,".app.if.dot"); iface_gif = doc_filename_with_ext(component_file_name,".app.if.gif"); iface_cmap = doc_filename_with_ext(component_file_name,".app.if.cmap"); } else { iface_dot = doc_filename_with_ext(component_file_name,".if.dot"); iface_gif = doc_filename_with_ext(component_file_name,".if.gif"); iface_cmap = doc_filename_with_ext(component_file_name,".if.cmap"); } if( do_func_graph ) { if( app_graph ) { func_dot = doc_filename_with_ext(component_file_name,".app.func.dot"); func_gif = doc_filename_with_ext(component_file_name,".app.func.gif"); func_cmap = doc_filename_with_ext(component_file_name,".app.func.cmap"); } else { func_dot = doc_filename_with_ext(component_file_name,".func.dot"); func_gif = doc_filename_with_ext(component_file_name,".func.gif"); func_cmap = doc_filename_with_ext(component_file_name,".func.cmap"); } } text_only_name = doc_filename_with_ext(component_file_name,".text.html"); // start the text output { text_file = fopen(text_only_name, "w"); if( !text_file ) fatal("can't write text connection graph file '%s'", text_file); // print some additional HTML stuff, if we are linking in to this file externally if( use_graphviz ) { fprintf(text_file, "\n"); fprintf(text_file, "Text Connection Graph: %s\n", component_name); fprintf(text_file, "\n"); fprintf(text_file, "

    Text Connection Graph: %s

    \n", component_name); fprintf(text_file, "\n"); } // start the output table fprintf(text_file, "
    \n\n"); } // start the dot output if( use_graphviz ) { char *graphviz_opts = "\n\ rankdir=LR;\n\ ratio=compress;\n\ margin=\"0,0\";\n\ ranksep=0.0005; \n\ nodesep=0.1; \n\ node [shape=ellipse style=filled fillcolor=\"#e0e0e0\"];\n\ node [fontsize=10 height=.1 width=.1];\n\ edge [fontsize=9 arrowsize=.8];\n\ "; iface_file = fopen(iface_dot, "w"); if( !iface_file ) fatal("can't write to dot file '%s'", iface_dot); fprintf(iface_file, "digraph \"%s_if\" {%s", component_name, graphviz_opts); fprintf(iface_file, " node [fontcolor=blue];\n"); fprintf(iface_file, " edge [fontcolor=blue];\n"); fprintf(iface_file, "\n"); if( do_func_graph ) { func_file = fopen(func_dot, "w"); assert(func_file); if( !func_file ) fatal("can't write to dot file '%s'", func_dot); fprintf(func_file, "digraph \"%s_func\" {%s\n\n", component_name, graphviz_opts); fprintf(func_file, " node [fontcolor=blue];\n"); fprintf(func_file, " edge [fontcolor=blue];\n"); fprintf(func_file, "\n"); } } // examine connections graph_scan_nodes(n, cgraph_graph(cg)) { gedge e; endp ep1, ep2; ep1 = NODE_GET(endp, n); // out edges graph_scan_out(e,n) { ep2 = NODE_GET(endp, graph_edge_to(e)); // assertions already done above // connection graph - all functions (input for /usr/bin/dot) if( do_func_graph ) { // graphviz stuff if( use_graphviz ) { // FIXME: print the node info (ie URLs) // print the edge info fprintf(func_file, " %s -> %s [label = \"%s.%s\"];\n", ep1->component ? ep1->component->ctype->name : "C_code", ep2->component ? ep2->component->ctype->name : "C_code", ep2->interface ? ep2->interface->itype->name : "C_code", ep2->function->name); } // text stuff { // FIXME: should we bother with text function graph? } } // connection graph - interfaces (input for /usr/bin/dot) { endp req, prov; // allocate a new hashtable for removing duplicates if(table == NULL) { table = new_iface_graph_table(); } if( !connection_already_printed(table, ep1, ep2, &req, &prov) ) { // graphviz stuff if( use_graphviz ) { // print the node info (ie URLs) fprintf(iface_file, " %s [URL=\"%s\"];\n", iface_node_name(req), component_docfile_name( iface_node_name(req) )); fprintf(iface_file, " %s [URL=\"%s\"];\n", iface_node_name(prov), component_docfile_name( iface_node_name(prov) )); // edge info fprintf(iface_file, " %s -> %s [", iface_node_name( req ), iface_node_name( prov )); if(req->interface) { if(prov->interface && req->interface->required == prov->interface->required) fprintf(iface_file, " style=dashed"); fprintf(iface_file, " label=\"%s\" URL=\"%s\"", prov->interface->itype->name, interface_docfile_name(prov->interface->itype->name)); } else { fprintf(iface_file, " label=\"func:%s\" fontcolor=black", prov->function->name); } fprintf(iface_file, " ];\n"); } // text stuff // // FIXME: probably better to sort these in some nice way. // Perhaps a topological ordering startig from the main // component, with a breadth-first display? { // row start fprintf(text_file, "\n"); // requires side fprintf(text_file, " \n"); // arrow if(prov->interface && req->interface->required == prov->interface->required) fprintf(text_file, " \n"); else fprintf(text_file, " \n"); // provides side fprintf(text_file, " \n"); // row end fprintf(text_file, "\n"); } } } } } // clean up the region if(table) deleteregion( regionof(table) ); // finish up the graphviz output if( use_graphviz ) { // finish if file fprintf(iface_file, "}\n"); fclose(iface_file); // finish func file if( do_func_graph ) { fprintf(func_file, "}\n"); fclose(func_file); } } // finish up the text output { fprintf(text_file, "
    %s.", component_docfile_name( iface_node_name(req) ), iface_node_name(req)); if(req->interface) fprintf(text_file, "%s", interface_docfile_name(req->interface->itype->name), req->interface->itype->name); else fprintf(text_file, "%s",req->function->name); fprintf(text_file, " =  -> %s.", component_docfile_name( iface_node_name(prov) ), iface_node_name(prov)); if(req->interface) fprintf(text_file, "%s", interface_docfile_name(prov->interface->itype->name), prov->interface->itype->name); else fprintf(text_file, "%s",prov->function->name); fprintf(text_file, "
    \n
    \n\n"); fprintf(text_file, "
    Generated by nesdoc
    \n"); if( use_graphviz ) { fprintf(text_file, "\n"); fprintf(text_file, "\n"); } fclose(text_file); } // use dot to generate output if( use_graphviz ) { char cmd[1024]; int ret; memset(cmd, 0, sizeof(cmd)); // FIXME: error handling could be better here ret = snprintf(cmd,sizeof(cmd)-1,"dot -Tgif -o%s %s", iface_gif, iface_dot); assert(ret > 0); ret = system(cmd); if(ret == -1) fatal("ERROR: error running graphviz - please check your graphviz and font installations..\n"); ret = snprintf(cmd,sizeof(cmd)-1,"dot -Tcmap -o%s %s", iface_cmap, iface_dot); assert(ret > 0); ret = system(cmd); if(ret == -1) fatal("error running graphviz command:\n %s\n",cmd); if( do_func_graph ) { ret = snprintf(cmd,sizeof(cmd)-1,"dot -Tgif -o%s %s", func_gif, func_dot); assert(ret > 0); ret = system(cmd); assert(ret != -1); if(ret == -1) fatal("ERROR: error running graphviz - please check your graphviz and font installations..\n"); ret = snprintf(cmd,sizeof(cmd)-1,"dot -Tcmap -o%s %s", func_cmap, func_dot); assert(ret > 0); ret = system(cmd); if(ret == -1) fatal("error running graphviz command:\n %s\n",cmd); } } // add the HTML if( use_graphviz ) { start_html_banner(); output("

    Component Graph   "); output("(text version,",text_only_name); output("   help)

    \n"); end_html_banner(); // FIXME: add a link to the function graph page here. output("
    \n"); output("\n"); copy_file_to_output(iface_cmap); output("\n"); output("
    \n", iface_gif); } else { // just copy in the text output, if we aren't generating graphs print_html_banner("

    Component Graph

    "); output("
    \n"); copy_file_to_output(text_only_name); unlink(text_only_name); output("
    \n"); } if( do_func_graph ) { // FIXME: this stuff should all go to a seperate function graph HTML page print_html_banner("

    Component Function Graph

    "); output("\n"); copy_file_to_output(func_cmap); output("\n"); output("
    \n", func_gif); } // remove temp files //unlink(iface_dot); unlink(iface_cmap); //unlink(func_dot); unlink(func_cmap); } ////////////////////////////////////////////////////////////////////// // // Main routine for creating docs for a component // ////////////////////////////////////////////////////////////////////// static void generate_component_html(nesc_declaration cdecl) { FILE *outfile; component comp = CAST(component, cdecl->ast); // open the appropriate output file outfile = open_outfile( component_docfile_name(cdecl->name) ); // start the HTML { char *sourcelink = doc_filename_with_ext(cdecl->ast->location->filename, ".source"); char *sourcetext = doc_filename_with_ext(cdecl->ast->location->filename, ""); add_source_symlink(cdecl->ast->location->filename, sourcelink); output("\n\ \n\ \n\ Component: %s\n\ \n\ \n\ ", cdecl->name); print_navbar(outfile, NAV_OTHER, sourcelink, sourcetext); output("\n\

    Component: %s

    \n\ ", cdecl->name); } // print the overview documentation if( cdecl->doc.short_s ) { output("

    \n"); if(cdecl->doc.long_s) output_docstring((char *)cdecl->doc.long_s, cdecl->ast->location); else output_docstring((char *)cdecl->doc.short_s, cdecl->ast->location); output("\n

    \n\n"); } // module declaration (requires / provides stuff) if( comp->decls ) { rp_interface rp; declaration dlist, decl; interface_ref iref; bool header_printed = FALSE; // requires scan_declaration(dlist, comp->decls) { if(is_rp_interface(dlist) && (rp = CAST(rp_interface, dlist))->required ) { scan_declaration(decl,rp->decls) { // commands / events if( is_data_decl(decl) ) { data_decl dd = CAST(data_decl, decl); variable_decl vd; scan_variable_decl(vd, CAST(variable_decl,dd->decls)) { if(!header_printed) {print_html_banner("

    Require Interfaces

    "); output("
      \n"); header_printed=TRUE;} print_function_html(NULL, dd, vd, short_desc|in_component); } } // interfaces else if( is_interface_ref(decl) ) { if(!header_printed) {print_html_banner("

      Required Interfaces

      "); output("
        \n"); header_printed=TRUE;} iref = CAST(interface_ref,decl); output("
      • %s %s\n", interface_docfile_name(iref->word1->cstring.data), iref->word1->cstring.data, iref->word2 ? iref->word2->cstring.data : ""); } // everything else is an error else { AST_print( CAST(node,cdecl->ast) ); assert(0); } } } } if(header_printed) output("
      \n\n"); // provides header_printed = FALSE; scan_declaration(dlist, comp->decls) { if(is_rp_interface(dlist) && !(rp = CAST(rp_interface, dlist))->required ) { scan_declaration(decl,rp->decls) { // commands / events if( is_data_decl(decl) ) { data_decl dd = CAST(data_decl, decl); variable_decl vd; scan_variable_decl(vd, CAST(variable_decl,dd->decls)) { if(!header_printed) {print_html_banner("

      Provided Interfaces

      "); output("
        \n"); header_printed=TRUE;} print_function_html(NULL, dd, vd, short_desc|in_component); } } // interfaces else if( is_interface_ref(decl) ) { if(!header_printed) {print_html_banner("

        Provided Interfaces

        "); output("
          \n"); header_printed=TRUE;} iref = CAST(interface_ref,decl); output("
        • %s %s\n", interface_docfile_name(iref->word1->cstring.data), iref->word1->cstring.data, iref->word2 ? iref->word2->cstring.data : ""); } // everything else is an error else { AST_print( CAST(node,cdecl->ast) ); assert(0); } } } } if(header_printed) output("
        \n\n"); } // configuration (aka wiring) if( is_configuration(cdecl->impl) ) { print_cg_html(cdecl->name, CAST(component, cdecl->ast)->location->filename, cdecl->connections, FALSE); } // otherwise, we have a module (aka function defs) else if (is_module(cdecl->impl)) { module mod = CAST(module, cdecl->impl); declaration decl; bool printed_heading; bool first; // print variable descriptions printed_heading = FALSE; scan_declaration(decl, mod->decls) { // deal with single variable decls - I don't know if this ever happens.... if( is_variable_decl(decl) ) //print_short_variable_html( CAST(variable_decl,decl) ); assert(0); // deal with lists of variable decls else if( is_data_decl(decl) ) { data_decl dd = CAST(data_decl,decl); declaration d2; scan_declaration(d2, dd->decls) if( is_variable_decl(d2) ) { if(!printed_heading) {print_html_banner("

        Variables

        "); output("
          \n"); printed_heading=TRUE;} print_short_variable_html( dd, CAST(variable_decl,d2) ); } } } if(printed_heading) output("
        \n\n"); // print short function descriptions printed_heading = FALSE; scan_declaration(decl, mod->decls) { if( is_function_decl(decl) ) { if(!printed_heading) {print_html_banner("

        Function Index

        "); output("
          \n"); printed_heading=TRUE;} print_function_html(CAST(function_decl,decl), NULL, NULL, in_component|short_desc); } } if(printed_heading) output("
        \n\n"); // print long function descriptions printed_heading = FALSE; first = TRUE; scan_declaration(decl, mod->decls) { if( is_function_decl(decl) && has_long_desc(CAST(function_decl,decl),NULL,NULL) ) { if(!printed_heading) {print_html_banner("

        Function Descriptions

        \n"); printed_heading=TRUE;} if( !first ) output("
        \n"); print_function_html(CAST(function_decl,decl), NULL, NULL, in_component|long_desc); first = FALSE; } } } close_outfile(outfile); } static void generate_intf_function_list(const char *heading, nesc_declaration idecl, int kind, int flags) { declaration funcs = CAST(interface, idecl->ast)->decls; declaration f; bool printed_heading = FALSE; // commands scan_declaration(f,funcs) { data_decl dd = CAST(data_decl, f); variable_decl vd; scan_variable_decl(vd, CAST(variable_decl,dd->decls)) { if( vd->ddecl->ftype == kind ) { if( flags & short_desc || has_long_desc(NULL,dd,vd) ) { if(!printed_heading) { print_html_banner(heading); if(flags & short_desc) output("
          \n"); printed_heading=TRUE; } else { if( !(flags & short_desc) ) output("
          \n"); } print_function_html(NULL,dd,vd,in_interface|flags); } } } } if(printed_heading && flags & short_desc) output("
        \n"); } ////////////////////////////////////////////////// // generate HTML for an interface file ////////////////////////////////////////////////// static void generate_interface_html(nesc_declaration idecl) { FILE *outfile; // open the output file outfile = open_outfile( interface_docfile_name(idecl->name) ); // start the HTML { char *sourcelink = doc_filename_with_ext(idecl->ast->location->filename, ".source"); char *sourcetext = doc_filename_with_ext(idecl->ast->location->filename, ""); add_source_symlink(idecl->ast->location->filename, sourcelink); output("\n\ \n\ \n\ Interface: %s\n\ \n\ \n\ ", idecl->name); print_navbar(outfile, NAV_OTHER, sourcelink, sourcetext); output("\n\

        Interface: %s

        \n\ ", idecl->name); } if( idecl->doc.short_s ) { output("

        \n"); if(idecl->doc.long_s) output_docstring((char *)idecl->doc.long_s, idecl->ast->location); else output_docstring((char *)idecl->doc.short_s, idecl->ast->location); output("\n

        \n\n"); } // print cross refs { int i; char *name, *end; ic_entry *entry = ic_get_entry( ic_make_iface_key(idecl->name) ); assert(entry); if(entry->p_list.num > 0) { output("

        \n
        Components providing this interface:\n
        \n"); for(i=0; ip_list.num; i++) { name = entry->p_list.comp[i]; output(" ",name); end = strstr(name,".nc"); assert(end); *end = '\0'; output("%s
        \n",name); *end = '.'; } output("

        \n\n"); } if(entry->r_list.num > 0) { output("

        \n
        Components requiring this interface:\n
        \n"); for(i=0; ir_list.num; i++) { name = entry->r_list.comp[i]; output(" ",name); end = strstr(name,".nc"); assert(end); *end = '\0'; output("%s
        \n",name); *end = '.'; } output("

        \n\n"); } } // summary generate_intf_function_list("

        Commands

        ", idecl, function_command, short_desc); generate_intf_function_list("

        Events

        ", idecl, function_event, short_desc); // detailed descriptions generate_intf_function_list("

        Commands - Details

        ", idecl, function_command, long_desc); generate_intf_function_list("

        Events - Details

        ", idecl, function_event, long_desc); close_outfile(outfile); } ////////////////////////////////////////////////// // Create index files ////////////////////////////////////////////////// typedef struct _index_entry { char *name; char *path; char *fname; // for interfaces: path.name.ti.html // for components: path.name.td.html // for apps: name.app.html } index_entry; typedef struct { int num; index_entry *ent; } file_index; /** * compare two entries - used by qsort **/ static int index_entry_comparator_short(const void *va, const void *vb) { int ret; index_entry *a = (index_entry*) va; index_entry *b = (index_entry*) vb; ret = strcmp(a->name, b->name); if(ret) return ret; return strcmp(a->path, b->path); } static int index_entry_comparator_full(const void *va, const void *vb) { int ret; index_entry *a = (index_entry*) va; index_entry *b = (index_entry*) vb; ret = strcmp(a->path, b->path); if(ret) return ret; return strcmp(a->name, b->name); } /** * add an entry to the list **/ static void insert_entry(file_index *fi, char *docfile, char *suffix) { char *p; index_entry *e = &( fi->ent[fi->num++] ); // path e->path = rstralloc(doc_region, strlen(docfile)+1); strcpy(e->path, docfile); // chop off the suffix p = e->path + strlen(e->path) - strlen(suffix); assert( *p == '.' ); *p = '\0'; p--; // separate out the name. We special case for common source file extensions. while(p > e->path && *p != '.') p--; if( !strcmp(p,".nc") || !strcmp(p,".td") || !strcmp(p,".ti") || !strcmp(p,".h") || !strcmp(p,".c") ) { p--; while(p > e->path && *p != '.') p--; } if(p == e->path) e->name = e->path; else { *p = '\0'; e->name = p+1; } // file name e->fname = rstralloc(doc_region, strlen(docfile)+1); strcpy(e->fname, docfile); } /** * generate the index file **/ typedef enum { SORT_FILE = 1, SORT_PATH = 2 } index_sort_type; static void print_index_file(navbar_mode nmode, index_sort_type sort, file_index *ind) { int i; FILE *f; char *filename; char *title, *indexname, *sort_heading; // set up some shorthand, based on mode if(nmode == NAV_INT) { indexname = "interfaces"; title = "Interface Index"; sort_heading = "interface"; } else if(nmode == NAV_COMP) { indexname = "components"; title = "Component Index"; sort_heading = "component"; } else if(nmode == NAV_APP) { indexname = "apps"; title = "Application Index"; sort_heading = "app"; } else if(nmode == NAV_ALL) { indexname = "allfiles"; title = "All File Index"; sort_heading = "file"; } else { assert(0); } // create the file name, & open the file filename = rstralloc(doc_region, strlen(indexname) + strlen("_f.html") + 1); assert(filename); strcpy(filename, indexname); if( sort == SORT_FILE ) strcat(filename, "_f.html"); else strcat(filename, "_p.html"); // open the file f = fopen(filename, "w"); if( !f ) fatal("can't write to index file '%s'",f); // start the HTML fprintf(f, "\n"); fprintf(f, "%s\n", title); fprintf(f, "\n"); // add a navigation banner print_navbar(f, nmode, NULL, NULL); // title, and table tags fprintf(f, "

        %s

        \n", title); fprintf(f, "
        \n"); fprintf(f, "\n"); // add the sorting links fprintf(f, "\n"); if(sort == SORT_FILE) { fprintf(f, "\n", indexname); fprintf(f, "\n"); fprintf(f, "\n", sort_heading); fprintf(f, "\n"); fprintf(f, "\n"); } else { fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n", indexname, sort_heading); fprintf(f, "\n"); fprintf(f, "\n"); } fprintf(f, "\n"); // blank line fprintf(f, "\n"); fprintf(f, " \n"); fprintf(f, " \n"); fprintf(f, " \n"); fprintf(f, " \n"); fprintf(f, " \n"); fprintf(f, "\n"); // index for(i=0; inum; i++) { char *desc = ic_get_desc(ind->ent[i].fname); if(desc==NULL) desc = " "; if(sort == SORT_FILE) { fprintf(f, "\n"); fprintf(f, " \n", ind->ent[i].fname, ind->ent[i].path); fprintf(f, " \n"); fprintf(f, " \n", ind->ent[i].name); fprintf(f, " \n"); fprintf(f, " \n",desc); fprintf(f, "\n"); } else { // new path - print a blank line for all but the 'apps' page if(i>0 && strcmp(ind->ent[i].path, ind->ent[i-1].path) && nmode!=NAV_APP) { fprintf(f, "\n"); fprintf(f, " \n"); fprintf(f, " \n"); fprintf(f, " \n"); fprintf(f, " \n"); fprintf(f, " \n"); fprintf(f, "\n"); } fprintf(f, "\n"); fprintf(f, " \n", (i>0 && !strcmp(ind->ent[i].path, ind->ent[i-1].path)) ? " " : ind->ent[i].path); fprintf(f, " \n"); fprintf(f, " \n", ind->ent[i].fname, ind->ent[i].name); fprintf(f, " \n"); fprintf(f, " \n",desc); fprintf(f, "\n"); } } // cleanup fprintf(f, "
        path   %s   descriptionpath   %s   description
             
        %s %s %s
             
        %s %s %s
        \n"); fprintf(f, "
        \n"); fprintf(f, "
        Generated by nesdoc
        \n"); fprintf(f, "\n"); fprintf(f, "\n"); fclose(f); } static void print_hierarchical_index_file(const char *filename, file_index *ind) { FILE *f = fopen(filename,"w"); char *title = "Source Tree"; char *prevdir; int i,j,level; if( !f ) fatal("can't write to hierarchical index file '%s'",filename); fprintf(f, "\n"); fprintf(f, "%s\n", title); fprintf(f, "\n"); // add a navigation banner print_navbar(f, NAV_TREE, NULL, NULL); // title, and table tags fprintf(f, "

        %s

        \n", title); fprintf(f, "
        \n"); fprintf(f, "\n"); // listing prevdir = ""; for(i=0; inum; i++) { // print directory info, if necessary if( strcmp(prevdir,ind->ent[i].path) ) { char *a, *b, *dot; // find the common prefix level = 0; a = prevdir; b = ind->ent[i].path; while(*a == *b) { a++; b++; if(*b == '.') level++; } while(b > ind->ent[i].path && *b != '.') b--; if(*b == '.') b++; // print the dir headers do { dot = strchr(b,'.'); if(dot != NULL) *dot = '\0'; fprintf(f, "\n"); if(dot != NULL) *dot = '.'; b = dot+1; level++; } while(dot != NULL); prevdir = ind->ent[i].path; } // print the link fprintf(f, "\n"); } // cleanup fprintf(f, "
        \n"); for(j=0; j\n", b); fprintf(f, "
        \n"); for(j=0; j%s\n", ind->ent[i].fname, ind->ent[i].name); fprintf(f, "
        \n"); fprintf(f, "
        \n"); fprintf(f, "
        Generated by nesdoc
        \n"); fprintf(f, "\n"); fprintf(f, "\n"); fclose(f); } /** * Read through the doc directory, and generate appropriate index * files. The indices are sorted by the base interface or component * name. In cases in which there are multiple versions of a file (ie, * for different hardware), seperate links are given for each path. **/ static void generate_index_html() { file_index comp, iface, app, allfiles; // read the directory, and sort the entries { DIR *dir; // open the dir dir = opendir("."); if( !dir ) fatal("can't open directory '.'"); // allocate space { int nument = 0; while( readdir(dir) ) nument++; rewinddir(dir); iface.ent = rarrayalloc(doc_region, nument, index_entry); comp.ent = rarrayalloc(doc_region, nument, index_entry); app.ent = rarrayalloc(doc_region, nument, index_entry); allfiles.ent = rarrayalloc(doc_region, nument, index_entry); iface.num = 0; comp.num = 0; app.num = 0; allfiles.num = 0; } // scan dir { struct dirent *dent; while( (dent=readdir(dir)) != NULL ) { char *p; // find the second from the last "." p = dent->d_name + strlen(dent->d_name) - 1; while(p > dent->d_name && *p != '.') p--; p--; while(p > dent->d_name && *p != '.') p--; // add to the appropriate list if( !strcmp(p,".nc.html") ) { if( ic_is_iface(dent->d_name) ) insert_entry(&iface, dent->d_name, ".nc.html"); else insert_entry(&comp, dent->d_name, ".nc.html"); insert_entry(&allfiles, dent->d_name, ".html"); continue; } // scan back one more, for app files p--; while(p > dent->d_name && *p != '.') p--; if( !strcmp(p,".nc.app.html") ) { insert_entry(&app, dent->d_name, ".nc.app.html"); } } } } // Generate index files, sorted by short name { // sort qsort(iface.ent, iface.num, sizeof(index_entry), index_entry_comparator_short); qsort(comp.ent, comp.num, sizeof(index_entry), index_entry_comparator_short); qsort(app.ent, app.num, sizeof(index_entry), index_entry_comparator_short); qsort(allfiles.ent, allfiles.num, sizeof(index_entry), index_entry_comparator_short); // index files print_index_file(NAV_INT, SORT_FILE, &iface); print_index_file(NAV_COMP, SORT_FILE, &comp); print_index_file(NAV_APP, SORT_FILE, &app); print_index_file(NAV_ALL, SORT_FILE, &allfiles); } // generate index files, sorted by long name { // sort qsort(iface.ent, iface.num, sizeof(index_entry), index_entry_comparator_full); qsort(comp.ent, comp.num, sizeof(index_entry), index_entry_comparator_full); qsort(app.ent, app.num, sizeof(index_entry), index_entry_comparator_full); qsort(allfiles.ent, allfiles.num, sizeof(index_entry), index_entry_comparator_full); // index files print_index_file(NAV_INT, SORT_PATH, &iface); print_index_file(NAV_COMP, SORT_PATH, &comp); print_index_file(NAV_APP, SORT_PATH, &app); print_index_file(NAV_ALL, SORT_PATH, &allfiles); } // hierarchical, top-level index file qsort(allfiles.ent, allfiles.num, sizeof(index_entry), index_entry_comparator_full); print_hierarchical_index_file("index.html", &allfiles); } ////////////////////////////////////////////////// // Create whole-app description page ////////////////////////////////////////////////// static void generate_app_page(const char *filename, cgraph cg) { char *appname, *p; char *fname; FILE *f; // return if app file generation wasn't explicity requested if( !is_app ) return; // return, if the component is NULL if( cg == NULL ) return; // figure out the app name from the main file name appname = doc_filename_with_ext(filename, ""); p = appname + strlen(appname) - 1; while(p > appname && *p != '.') p--; *p = '\0'; while(p > appname && *p != '.') p--; if(*p == '.') p++; appname = p; // generate the file fname = doc_filename_with_ext(filename, ".app.html"); f = open_outfile(fname); fprintf(f, "\n"); fprintf(f, "App: %s\n", appname); fprintf(f, "\n"); print_navbar(f, NAV_OTHER, NULL, NULL); fprintf(f, "

        App: %s

        \n", appname); print_cg_html(appname, filename, cg, TRUE); fprintf(f, "
        Generated by nesdoc
        \n"); fprintf(f, "\n"); fprintf(f, "\n"); close_outfile(f); } ////////////////////////////////////////////////// // Generate connection graph help page ////////////////////////////////////////////////// #include "cg_help.c" static void generate_cg_help_page() { FILE *f; // open the gif file f = fopen("cg_help.gif", "w"); if( !f ) { warning("can't write to cg_help.gif - no help generated"); return; } fwrite(cg_help_gif, 1, sizeof(cg_help_gif), f); fclose(f); // open the HTML file f = fopen("cg_help.html", "w"); if( !f ) { warning("can't write to cg_help.gif - no help generated"); return; } // markmark fprintf(f, "\n"); fprintf(f, "Connection Graph Help\n"); fprintf(f, "\n"); print_navbar(f, NAV_OTHER, NULL, NULL); fprintf(f, "

        Connection Graph Help

        \n"); fprintf(f, "\n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\
        \n\ \n\    \n\ \n\
          \n\ \n\
        • A requires interface I, B provides I, and A and B are wired\n\ together.

          \n\ \n\

        • C and D both require or both provide J. The direction of the\n\ arrow indicates that the original wiring is \"C = D\".

          \n\ \n\

        • E requires function f, and F provides function f.

          \n\ \n\

        \n\
        \n\

        \n\ \n\ \n\ \n\ "); fclose(f); } ////////////////////////////////////////////////// // Generate all docs ////////////////////////////////////////////////// bool docs_requested(void) { return docdir != NULL; } void generate_docs(const char *ofilename, cgraph cg) { char *filename = rstrdup(doc_region, ofilename); unixify_path(filename); // if no docdir is specified, then the user didn't request doc generation // Initialization { // create the region init_doc_region(); // get the current working directory assert(getcwd(original_wd, sizeof(original_wd))); // set up dir info find_currdir_prefix(original_wd); // cd to the docdir { char *pos=strchr(docdir, dirsep); if(pos == docdir) pos=strchr(docdir+1, dirsep); // skip the first '/' of an absolute path while(pos != NULL) { *pos = '\0'; #ifndef ENOMEDIUM /* Ignore ENOMEDIUM on systems that don't have it */ #define ENOMEDIUM EEXIST #endif if(mkdir(docdir, 0755) != 0 && errno != EEXIST && errno != ENOMEDIUM) { perror("mkdir"); fatal("error making ancestor directory of docdir '%s'. errno=%d\n", docdir,errno); } *pos = dirsep; pos = strchr(pos+1, dirsep); } } if(mkdir(docdir, 0755) != 0 && errno != EEXIST && errno != ENOMEDIUM) { perror("mkdir"); fatal("error making parent directory of docdir '%s'. errno=%d\n", docdir,errno); } if(chdir(docdir) != 0) { perror("chdir"); fatal("error changing directory to docdir '%s'\n", docdir); } // read the information cache ic_read(); } // generate the connection graph help file generate_cg_help_page(); // update information cache with all loaded components { env_scanner scanner; const char *name; nesc_declaration decl; env_scan(get_nesc_env(), &scanner); while( env_next(&scanner, &name, (void **)&decl) ) ic_add_entry(decl); // write the information cache ic_write(); } // walk through the list of all components, and generate docs { env_scanner scanner; const char *name; nesc_declaration cdecl; if (flag_verbose) printf("\n Generating component docs\n"); env_scan(get_nesc_env(), &scanner); while( env_next(&scanner, &name, (void **)&cdecl) ) if (cdecl->kind == l_component) { if (flag_verbose) printf(" %s\n", cdecl->name); generate_component_html(cdecl); } } // generate docs for all interfaces { env_scanner scanner; const char *name; nesc_declaration idecl; if (flag_verbose) printf("\n Generating interface docs\n"); env_scan(get_nesc_env(), &scanner); while( env_next(&scanner, &name, (void **)&idecl) ) if (idecl->kind == l_interface) { if (flag_verbose) printf(" %s\n", idecl->name); generate_interface_html(idecl); } } // generate whole-app wiring page generate_app_page(filename,cg); // generate index files generate_index_html(); // cleanup { // kill the region // NOTE: using the region this way makes this module non-reentrant deleteregion(doc_region); doc_region = NULL; assert(chdir(original_wd) == 0); } } nescc-1.3.4/src/nesc-doc.h000066400000000000000000000023671177770303300152650ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 UC Berkeley The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_DOC_H #define NESC_DOC_H #include "nesc-cg.h" /* set the output dir */ void doc_set_outdir(const char *dir); /* Add a top level source directory */ void doc_add_topdir(const char *dir); /* Set the directory separator - used for cygwin? */ void doc_set_dirsep(const char c); /* set the use_graphviz flag */ void doc_use_graphviz(const bool use); bool docs_requested(void); /* actually generate docs */ void generate_docs(const char *filename, cgraph cg); /* tell the doc generation to create the whole-app page */ void doc_is_app(const bool val); #endif nescc-1.3.4/src/nesc-dspec-int.h000066400000000000000000000020631177770303300163770ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_DSPEC_INT_H #define NESC_DSPEC_INT_H /* Internal definitions for dump specification parsing */ struct ndstype { largest_int integer; union { const char *token; nd_arg nd_arg; nd_filter nd_filter; }; }; #define YYSTYPE struct ndstype void nd_read(const char *str); void nderror(char *err); #include "nesc-dspec.tab.h" int ndlex(void); #endif nescc-1.3.4/src/nesc-dspec.def000066400000000000000000000034601177770303300161200ustar00rootroot00000000000000;; -*- lisp -*- ; This file is part of the nesC compiler. ; Copyright (C) 2004-2005 Intel Corporation ; ; The attached "nesC" software is provided to you under the terms and ; conditions of the GNU General Public License Version 2 as published by the ; Free Software Foundation. ; ; nesC 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 nesC; see the file COPYING. If not, write to ; the Free Software Foundation, 59 Temple Place - Suite 330, ; Boston, MA 02111-1307, USA. (deffield name "const char *" (init)) (deffield str "const char *" (init)) (deffield val largest_int (init)) (deffield count int (init)) (deffield args nd_arg (init tree)) (deffield next nd_arg ()) (deffield filter1 nd_filter (init tree)) (deffield filter2 nd_filter (init tree)) (deffield info "void *" ()) (deffield filter_index int ()) (deftype nd_option nil (name args count) "the dump option NAME(ARGS). ARGS may be NULL COUNT is the number of elements in ARGS") (deftype nd_arg nil (next) "supertype for arguments") (deftype nd_int nd_arg (val) "an integer argument VAL") (deftype nd_token nd_arg (str) "some token argument STR") (deftype nd_filter nd_arg () "a filter") (deftype ndf_and nd_filter (filter1 filter2) "FILTER1 & FILTER2") (deftype ndf_or nd_filter (filter1 filter2) "FILTER1 | FILTER2") (deftype ndf_not nd_filter (filter1) "!FILTER1") (deftype ndf_op nd_filter (name args count info filter_index) "the basic filter NAME(ARGS). COUNT is the number of elements in ARGS (>= 1) INFO can be used to save extra information (e.g., compiled regexp info)") nescc-1.3.4/src/nesc-dspec.h000066400000000000000000000021011177770303300156000ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_DSPEC_H #define NESC_DSPEC_H #include "ND_types.h" #include "ND_list_nd_arg.h" #include "ND_defs.h" nd_option nd_parse(const char *what); /* Effects: parses -fnesc-dump option argument 'what', Return: the corresponding dump tree (see nesc-dspec.def) */ const char *nd_tokenval(nd_arg arg); /* Requires: nd_arg is an nd_token Returns: the token's string value */ #endif nescc-1.3.4/src/nesc-dspec.l000066400000000000000000000051521177770303300156150ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Lexer for -fnesc-dump arguments (tokens are numbers, names (can be arbitrary strings in "") and boolean operators */ %option nounput %{ #include #include #include #include "parser.h" #include "nesc-dump.h" #include "nesc-dspec.h" #include "nesc-dspec-int.h" /* We never wrap into another file */ #define YY_SKIP_YYWRAP #define ndwrap() (1) #define YY_USE_PROTOS #undef YY_INPUT #define YY_INPUT(buf, result, max_size) \ { (result) = string_read((buf), (max_size)); } static int string_read(char *buf, int max_size); void nderror(char *err); %} DIGIT [0-9] HEXDIGIT [0-9a-fA-F] %% [ \t] { } [,()|&!] { return ndtext[0]; } -?({DIGIT}+|0[xX]{HEXDIGIT}+) { errno = 0; ndlval.integer = strtoll(ndtext, NULL, 0); if (errno) nderror("integer constant out of bounds."); return ND_INTEGER; } \"([^\\"]*(\\.)?)+\" { char *str = rstralloc(dump_region, strlen(ndtext)); const char *text = ndtext + 1; ndlval.token = str; while (*text) { /* Shell-like \-processing: \ is preserved except in front of " and \ */ if (*text == '\\' && (text[1] == '"' || text[1] == '\\')) text++; *str++ = *text++; } str[-1] = '\0'; return ND_TOKEN; } [^, \t()|&!]+ { ndlval.token = rstrdup(dump_region, ndtext); return ND_TOKEN; } %% static YY_BUFFER_STATE mbuf; static const char *line; static int length, offset; void nd_read(const char *str) { if (mbuf) nd_delete_buffer(mbuf); mbuf = nd_create_buffer(stdin, YY_BUF_SIZE); nd_switch_to_buffer(mbuf); line = str; offset = 0; length = strlen(line); } static int string_read(char *abuf, int max_size) { int cnt; cnt = max_size; if (cnt > length - offset) cnt = length - offset; memcpy(abuf, line + offset, cnt); offset += cnt; return cnt; } void nderror(char *err) { error("dump option `%s': %s", line, err); } nescc-1.3.4/src/nesc-dspec.tab.c000066400000000000000000001261631177770303300163570ustar00rootroot00000000000000 /* A Bison parser, made by GNU Bison 2.4.1. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This program 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 3 of the License, or (at your option) any later version. This program 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 this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.4.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse ndparse #define yylex ndlex #define yyerror nderror #define yylval ndlval #define yychar ndchar #define yydebug nddebug #define yynerrs ndnerrs /* Copy the first part of user declarations. */ /* Line 189 of yacc.c */ #line 29 "nesc-dspec.y" #include "parser.h" #include "nesc-dump.h" #include "nesc-dspec.h" #include "nesc-dspec-int.h" #include "nesc-dfilter.h" static nd_option opt; /* Line 189 of yacc.c */ #line 92 "nesc-dspec.tab.c" /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { ND_TOKEN = 258, ND_INTEGER = 259 }; #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif /* Copy the second part of user declarations. */ /* Line 264 of yacc.c */ #line 137 "nesc-dspec.tab.c" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int yyi) #else static int YYID (yyi) int yyi; #endif { return yyi; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 4 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 26 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 11 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 7 /* YYNRULES -- Number of rules. */ #define YYNRULES 16 /* YYNRULES -- Number of states. */ #define YYNSTATES 28 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 259 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 2, 2, 2, 2, 6, 2, 8, 9, 2, 2, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 5, 10, 12, 13, 15, 19, 21, 23, 25, 27, 31, 35, 38, 42 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 12, 0, -1, 13, -1, 13, 8, 14, 9, -1, 3, -1, -1, 15, -1, 14, 10, 16, -1, 16, -1, 3, -1, 4, -1, 17, -1, 17, 5, 17, -1, 17, 6, 17, -1, 7, 17, -1, 8, 17, 9, -1, 3, 8, 14, 9, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { 0, 52, 52, 53, 56, 59, 60, 64, 65, 69, 70, 71, 75, 76, 77, 78, 79 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "ND_TOKEN", "ND_INTEGER", "'|'", "'&'", "'!'", "'('", "')'", "','", "$accept", "option", "name", "args", "args1", "arg", "filter", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 124, 38, 33, 40, 41, 44 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 11, 12, 12, 13, 14, 14, 15, 15, 16, 16, 16, 17, 17, 17, 17, 17 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 1, 4, 1, 0, 1, 3, 1, 1, 1, 1, 3, 3, 2, 3, 4 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 4, 0, 2, 1, 5, 9, 10, 0, 0, 0, 6, 8, 11, 5, 0, 14, 0, 3, 0, 0, 0, 0, 15, 7, 12, 13, 16 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 2, 3, 10, 11, 12, 13 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -9 static const yytype_int8 yypact[] = { 2, -9, 21, 14, -9, -1, 15, -9, 1, 1, 6, -9, -9, 12, -1, 15, -9, 5, -9, -1, 1, 1, 10, -9, -9, 18, -9, -9 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -9, -9, -9, 11, -9, 7, -8 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { 16, 17, 6, 7, 15, 1, 8, 9, 8, 9, 20, 21, 25, 26, 23, 18, 19, 20, 21, 27, 19, 4, 5, 14, 21, 22, 24 }; static const yytype_uint8 yycheck[] = { 8, 9, 3, 4, 3, 3, 7, 8, 7, 8, 5, 6, 20, 21, 9, 9, 10, 5, 6, 9, 10, 0, 8, 8, 6, 14, 19 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 3, 12, 13, 0, 8, 3, 4, 7, 8, 14, 15, 16, 17, 8, 3, 17, 17, 9, 10, 5, 6, 14, 9, 16, 17, 17, 9 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (YYLEX_PARAM) #else # define YYLEX yylex () #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) #else static void yy_stack_print (yybottom, yytop) yytype_int16 *yybottom; yytype_int16 *yytop; #endif { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule) #else static void yy_reduce_print (yyvsp, yyrule) YYSTYPE *yyvsp; int yyrule; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) ); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) #else static void yydestruct (yymsg, yytype, yyvaluep) const char *yymsg; int yytype; YYSTYPE *yyvaluep; #endif { YYUSE (yyvaluep); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (void); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; /*-------------------------. | yyparse or yypush_parse. | `-------------------------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void) #else int yyparse () #endif #endif { int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: `yyss': related to states. `yyvs': related to semantic values. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; YYSIZE_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yytoken = 0; yyss = yyssa; yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token. */ yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 2: /* Line 1455 of yacc.c */ #line 52 "nesc-dspec.y" { opt = new_nd_option(dump_region, (yyvsp[(1) - (1)].token), NULL, 0); ;} break; case 3: /* Line 1455 of yacc.c */ #line 53 "nesc-dspec.y" { opt = new_nd_option(dump_region, (yyvsp[(1) - (4)].token), (yyvsp[(3) - (4)].nd_arg), nd_arg_length((yyvsp[(3) - (4)].nd_arg))); ;} break; case 5: /* Line 1455 of yacc.c */ #line 59 "nesc-dspec.y" { (yyval.nd_arg) = NULL; ;} break; case 7: /* Line 1455 of yacc.c */ #line 64 "nesc-dspec.y" { (yyval.nd_arg) = nd_arg_chain((yyvsp[(1) - (3)].nd_arg), (yyvsp[(3) - (3)].nd_arg)); ;} break; case 9: /* Line 1455 of yacc.c */ #line 69 "nesc-dspec.y" { (yyval.nd_arg) = CAST(nd_arg, new_nd_token(dump_region, (yyvsp[(1) - (1)].token))); ;} break; case 10: /* Line 1455 of yacc.c */ #line 70 "nesc-dspec.y" { (yyval.nd_arg) = CAST(nd_arg, new_nd_int(dump_region, (yyvsp[(1) - (1)].integer))); ;} break; case 11: /* Line 1455 of yacc.c */ #line 71 "nesc-dspec.y" { (yyval.nd_arg) = CAST(nd_arg, (yyvsp[(1) - (1)].nd_filter)); ;} break; case 12: /* Line 1455 of yacc.c */ #line 75 "nesc-dspec.y" { (yyval.nd_filter) = CAST(nd_filter, new_ndf_or(dump_region, (yyvsp[(1) - (3)].nd_filter), (yyvsp[(3) - (3)].nd_filter))); ;} break; case 13: /* Line 1455 of yacc.c */ #line 76 "nesc-dspec.y" { (yyval.nd_filter) = CAST(nd_filter, new_ndf_and(dump_region, (yyvsp[(1) - (3)].nd_filter), (yyvsp[(3) - (3)].nd_filter))); ;} break; case 14: /* Line 1455 of yacc.c */ #line 77 "nesc-dspec.y" { (yyval.nd_filter) = CAST(nd_filter, new_ndf_not(dump_region, (yyvsp[(2) - (2)].nd_filter))); ;} break; case 15: /* Line 1455 of yacc.c */ #line 78 "nesc-dspec.y" { (yyval.nd_filter) = (yyvsp[(2) - (3)].nd_filter); ;} break; case 16: /* Line 1455 of yacc.c */ #line 79 "nesc-dspec.y" { (yyval.nd_filter) = make_ndf_op(dump_region, (yyvsp[(1) - (4)].token), (yyvsp[(3) - (4)].nd_arg)); ;} break; /* Line 1455 of yacc.c */ #line 1420 "nesc-dspec.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (yymsg); } else { yyerror (YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined(yyoverflow) || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } /* Line 1675 of yacc.c */ #line 84 "nesc-dspec.y" nd_option nd_parse(const char *what) { opt = NULL; nd_read(what); if (ndparse()) return NULL; return opt; } #include "ND_types.c" #include "ND_list_nd_arg.c" const char *nd_tokenval(nd_arg arg) { return CAST(nd_token, arg)->str; } nescc-1.3.4/src/nesc-dspec.tab.h000066400000000000000000000037221177770303300163570ustar00rootroot00000000000000 /* A Bison parser, made by GNU Bison 2.4.1. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This program 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 3 of the License, or (at your option) any later version. This program 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 this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { ND_TOKEN = 258, ND_INTEGER = 259 }; #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif extern YYSTYPE ndlval; nescc-1.3.4/src/nesc-dspec.y000066400000000000000000000047021177770303300156320ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Parser for -fnesc-dump option arguments. General forms are: NAME NAME(arguments) where NAME describes a particular dump request (see nesc-dump.c) and the optional arguments describe the request in more detail. The arguments are a list of tokens (arbitrary strings), numbers and filters (see nesc-dfilter.c). The meaning of these depends on the dump request. */ %{ #include "parser.h" #include "nesc-dump.h" #include "nesc-dspec.h" #include "nesc-dspec-int.h" #include "nesc-dfilter.h" static nd_option opt; %} %token ND_TOKEN %token ND_INTEGER %type name %type args args1 arg %type filter %left '|' %left '&' %nonassoc '!' %% option: name { opt = new_nd_option(dump_region, $1, NULL, 0); } | name '(' args ')' { opt = new_nd_option(dump_region, $1, $3, nd_arg_length($3)); } ; name: ND_TOKEN ; args: /* empty */ { $$ = NULL; } | args1 ; args1: args ',' arg { $$ = nd_arg_chain($1, $3); } | arg ; arg: ND_TOKEN { $$ = CAST(nd_arg, new_nd_token(dump_region, $1)); } | ND_INTEGER { $$ = CAST(nd_arg, new_nd_int(dump_region, $1)); } | filter { $$ = CAST(nd_arg, $1); } ; filter: filter '|' filter { $$ = CAST(nd_filter, new_ndf_or(dump_region, $1, $3)); } | filter '&' filter { $$ = CAST(nd_filter, new_ndf_and(dump_region, $1, $3)); } | '!' filter { $$ = CAST(nd_filter, new_ndf_not(dump_region, $2)); } | '(' filter ')' { $$ = $2; } | ND_TOKEN '(' args ')' { $$ = make_ndf_op(dump_region, $1, $3); } ; %% nd_option nd_parse(const char *what) { opt = NULL; nd_read(what); if (ndparse()) return NULL; return opt; } #include "ND_types.c" #include "ND_list_nd_arg.c" const char *nd_tokenval(nd_arg arg) { return CAST(nd_token, arg)->str; } nescc-1.3.4/src/nesc-dump.c000066400000000000000000000521321177770303300154530ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* The internal nesC dump information system. Current allowable requests: - components, interfaces, interfacedefs, tags: extract lists of the specified internal objects managed via the lists[] array (see below) support filter arguments (see nesc-dfiler.c) - referenced(): implicitly dump any referenced item of the specified kind, e.g., referenced(interfacedefs) will dump all interface definitions referred to from other XML elements - wiring: dump wiring graph wiring(functions) dumps the function-level graph (but this is currently in a somewhat different form than the regular graph, so should probably not be used) */ #include "parser.h" #include "nesc-dump.h" #include "nesc-env.h" #include "nesc-dspec.h" #include "nesc-dfilter.h" #include "nesc-xml.h" #include "nesc-cg.h" #include "semantics.h" #include "nesc-semantics.h" #include "nesc-component.h" #include "constants.h" /* The current set of dump requests */ static dd_list/*nd_option*/ opts; region dump_region; /* for dump request allocations */ static const char *dumpfile; /* What to output */ enum { wiring_none, wiring_user, wiring_functions } wiring = wiring_none; bool configuration_wiring; bool component_declarations; /* More OOish stuff to manage dump requests of concrete nesC internal objects (components, tags, etc). The lists array contains the currently supported list. Each of these concrete requests supports filters (and does not have any other options). */ static bool tdecl_addfilter(void *entry); static bool ndecl_addfilter(void *entry); static bool ddecl_addfilter(void *entry); static void dump_component(void *entry); static void dump_ddecl_void(void *entry); static void dump_interfacedef(void *entry); static void dump_tag(void *entry); static void select_components(xml_list l, nd_option opt, dd_list comps); static void select_interfaces(xml_list l, nd_option opt, dd_list comps); static void select_variables(xml_list l, nd_option opt, dd_list comps); static void select_constants(xml_list l, nd_option opt, dd_list comps); static void select_functions(xml_list l, nd_option opt, dd_list comps); static void select_typedefs(xml_list l, nd_option opt, dd_list comps); static void select_interfacedefs(xml_list l, nd_option opt, dd_list comps); static void select_tags(xml_list l, nd_option opt, dd_list comps); /* lists */ static struct { const char *name; /* Return TRUE if entry has not yet been added to its dump list */ bool (*addfilter)(void *entry); /* Add entries selected by 'opt' to list 'l'. 'comps' is the list of the program's components. */ void (*select)(xml_list l, nd_option opt, dd_list comps); /* Dump a single entry in XML */ void (*dump)(void *entry); /* The list of referenced items of, e.g., components is created by adding entries to a global variable (xl_components in this case) holding an xml_list (see xml_list_add in nesc-xml.c). By default this variable is NULL, so nothing happens. The 'referenced' dump request sets this variable to point to the list l (see next field) to track, e.g., referenced components. The 'referenced' field contains the address of this global variable. */ xml_list *referenced; xml_list l; /* The list of entries of this kind */ } lists[] = { { "components", ndecl_addfilter, select_components, dump_component, &xl_components }, { "interfaces", ddecl_addfilter, select_interfaces, dump_ddecl_void, &xl_interfaces }, { "interfacedefs", ndecl_addfilter, select_interfacedefs, dump_interfacedef, &xl_interfacedefs }, { "tags", tdecl_addfilter, select_tags, dump_tag, &xl_tags }, { "variables", ddecl_addfilter, select_variables, dump_ddecl_void, &xl_variables }, { "constants", ddecl_addfilter, select_constants, dump_ddecl_void, &xl_constants }, { "functions", ddecl_addfilter, select_functions, dump_ddecl_void, &xl_functions }, { "typedefs", ddecl_addfilter, select_typedefs, dump_ddecl_void, &xl_typedefs } }; #define NLISTS (sizeof lists / sizeof *lists) static bool tdecl_addfilter(void *entry) { tag_declaration decl = entry; if (decl->dumped) return FALSE; decl->dumped = TRUE; return TRUE; } static bool ndecl_addfilter(void *entry) { nesc_declaration decl = entry; if (decl->dumped) return FALSE; decl->dumped = TRUE; return TRUE; } static bool ddecl_addfilter(void *entry) { data_declaration decl = entry; if (decl->dumped) return FALSE; decl->dumped = TRUE; return TRUE; } /* Actual XML dump functions. See doc/dump for the corresponding DSD schemas. The dump functions are found partially here (for high-level elements), in nesc-xml.c (low-level elements and basic functions) and types.c (for types). */ static void dump_attributes(dd_list/*nesc_attribute*/ attributes) { dd_list_pos scan; if (!attributes) return; dd_scan (scan, attributes) { nesc_attribute attr = DD_GET(nesc_attribute, scan); indentedtag("attribute-value"); nxml_tdecl_ref(attr->tdecl); nxml_value(attr->arg1->ivalue); indentedtag_pop(); } } static void dump_parameters(const char *name, declaration parms); void dump_ddecl(data_declaration ddecl) { switch (ddecl->kind) { case decl_variable: indentedtag_start("variable"); break; case decl_constant: indentedtag_start("constant"); if (ddecl->value) /* generic components args are constants, but have no value */ xml_attr_cval("cst", ddecl->value->cval); break; case decl_function: indentedtag_start("function"); switch (ddecl->ftype) { case function_event: xml_attr_noval("event"); xml_attr_int("provided", ddecl->defined); break; case function_command: xml_attr_noval("command"); xml_attr_int("provided", ddecl->defined); break; default: break; } xml_attr_bool("safe", ddecl->safe); break; case decl_typedef: indentedtag_start("typedef"); break; case decl_interface_ref: indentedtag_start("interface"); xml_attr_int("provided", !ddecl->required); break; case decl_component_ref: indentedtag_start("internal-component"); break; default: assert(0); } if (ddecl->name) /* Parameter names may be omitted in declarations */ xml_attr("name", ddecl->name); xml_attr_ptr("ref", ddecl); xml_attr_loc((ddecl->definition ? ddecl->definition : ddecl->ast)->location); xml_tag_end(); /* Symbols have either a nesC container, a containing function, containing interface or none of these (global symbols) */ xstartline(); nxml_doc(&ddecl->doc); if (ddecl->container) nxml_ndecl_ref(ddecl->container); if (ddecl->container_function) nxml_ddecl_ref(ddecl->container_function); nxml_type(ddecl->type); dump_attributes(ddecl->attributes); switch (ddecl->kind) { case decl_interface_ref: { env_scanner fns; const char *fnname; void *fnentry; nxml_instance(ddecl->itype); if (ddecl->gparms) nxml_typelist("interface-parameters", ddecl->gparms); indentedtag("interface-functions"); interface_scan(ddecl, &fns); while (env_next(&fns, &fnname, &fnentry)) { xstartline(); nxml_ddecl_ref(fnentry); } indentedtag_pop(); break; } case decl_function: { if (ddecl->interface) nxml_ddecl_ref(ddecl->interface); /* Builtin functions have no real AST */ if (!is_error_decl(ddecl->ast)) { function_declarator fdecl = ddecl_get_fdeclarator(ddecl); if (fdecl->parms) /* absent in old-style functions */ dump_parameters("parameters", fdecl->parms); if (fdecl->gparms) dump_parameters("instance-parameters", fdecl->gparms); } break; } default: break; } indentedtag_pop(); } static void dump_parameter(declaration parm) { data_declaration pdecl = NULL; /* (void) parameters have a NULL ddecl, so will be ignored */ if (is_data_decl(parm)) /* regular parameter */ { data_decl data = CAST(data_decl, parm); variable_decl vdecl = CAST(variable_decl, data->decls); pdecl = vdecl->ddecl; } else if (is_ellipsis_decl(parm)) { xml_qtag("varargs"); xnewline(); } else if (is_type_parm_decl(parm)) { type_parm_decl tp = CAST(type_parm_decl, parm); pdecl = tp->ddecl; } if (pdecl) dump_ddecl(pdecl); } static void dump_parameters(const char *name, declaration parms) { declaration parm; indentedtag(name); scan_declaration (parm, parms) dump_parameter(parm); indentedtag_pop(); } static void dump_endp(const char *tag, endp ep) { xstartline(); xml_tag(tag); nxml_ddecl_ref(ep->function ? ep->function : ep->interface); if (ep->args_node) nxml_arguments(ep->args_node); xml_pop(); } static void dump_wire(location l, gnode from, gnode to) { endp fdata = NODE_GET(endp, from), tdata = NODE_GET(endp, to); indentedtag_start("wire"); if (l) xml_attr_loc(l); xml_tag_end(); dump_endp("from", fdata); dump_endp("to", tdata); indentedtag_pop(); } static void dump_wiring(cgraph cg) { gnode from; gedge wire; /* Print a wiring graph */ indentedtag("wiring"); graph_scan_nodes (from, cgraph_graph(cg)) { graph_scan_out (wire, from) dump_wire(EDGE_GET(location, wire), from, graph_edge_to(wire)); } indentedtag_pop(); } static void dump_ndecl_doc(nesc_declaration ndecl) { nxml_doc(&ndecl->doc); } static void do_wiring(int wiring, cgraph cg, cgraph userg) { if (wiring == wiring_functions) dump_wiring(cg); if (wiring == wiring_user) dump_wiring(userg); } static void dump_component(void *entry) { nesc_declaration comp = entry; /* Partially instantiated components (i.e., generic components created inside generic configurations) need some special handling */ bool partially_instantiated = comp->original && comp->abstract; indentedtag_start("component"); xml_attr("qname", comp->instance_name); xml_attr_loc(comp->ast->location); xml_attr_bool("abstract", comp->abstract); xml_attr_bool("safe", comp->safe); xml_tag_end(); xnewline(); dump_ndecl_doc(comp); if (comp->original) nxml_instance(comp); else if (comp->abstract) /* not for partially instantiated components */ dump_parameters("parameters", comp->parameters); xml_qtag(comp->configuration ? "configuration" : "module"); dump_attributes(comp->attributes); if (comp->configuration && configuration_wiring && !partially_instantiated) do_wiring(wiring_user, comp->connections, comp->user_connections); if (component_declarations && !partially_instantiated) { } indentedtag_pop(); } static void dump_ddecl_void(void *entry) { dump_ddecl(entry); } static void dump_interfacedef(void *entry) { nesc_declaration idef = entry; env_scanner fns; const char *fnname; void *fnentry; indentedtag_start("interfacedef"); xml_attr("qname", idef->name); xml_attr_loc(idef->ast->location); xml_tag_end(); dump_ndecl_doc(idef); if (idef->abstract) dump_parameters("parameters", idef->parameters); dump_attributes(idef->attributes); env_scan(idef->env->id_env, &fns); while (env_next(&fns, &fnname, &fnentry)) { data_declaration fndecl = fnentry; if (fndecl->kind != decl_magic_string) dump_ddecl(fnentry); } indentedtag_pop(); } static void dump_field(field_declaration field) { indentedtag_start("field"); xml_attr("name", field->name); xml_attr_ptr("ref", field); /* collapsing structs into their parent can cause duplicate names */ xml_attr_bool("packed", field->packed); xml_attr_cval("bit-offset", field->offset); if (cval_istop(field->bitwidth)) xml_attr_cval("size", type_size_cc(field->type) ? type_size(field->type) : cval_top); else xml_attr_cval("bit-size", field->bitwidth); xml_tag_end(); nxml_type(field->type); dump_attributes(field->attributes); indentedtag_pop(); } static void dump_tag(void *entry) { tag_declaration tdecl = entry; indentedtag_start(tagkind_name(tdecl->kind)); if (tdecl->name) xml_attr("name", tdecl->name); if (tdecl->definition) xml_attr_loc(tdecl->definition->location); xml_attr_ptr("ref", tdecl); xml_attr_bool("defined", tdecl->defined); xml_attr_bool("packed", tdecl->packed); xml_attr_bool("scoped", !!tdecl->container/* || tdecl->container_function*/); xml_attr_cval("size", tdecl->size); xml_attr_cval("alignment", tdecl->alignment); xml_tag_end(); xnewline(); if (tdecl->container) { nxml_ndecl_ref(tdecl->container); xnewline(); } #if 0 if (tdecl->containing_function) { nxml_ddecl_ref(tdecl->containing_function); xnewline(); } #endif dump_attributes(tdecl->attributes); if (tdecl->kind == kind_enum_ref) nxml_type(tdecl->reptype); else { field_declaration fields; for (fields = tdecl->fieldlist; fields; fields = fields->next) if (fields->name) /* skip unnamed fields */ dump_field(fields); } indentedtag_pop(); } static void dump_list(const char *name, xml_list l, void (*dump)(void *entry)) { dd_list latest = xml_list_latest(l); dd_list_pos elem; if (!latest) return; indentedtag(name); dd_scan (elem, latest) dump(DD_GET(void *, elem)); indentedtag_pop(); } static void source_ndecl_iterate(int kind, int processkind, xml_list l, void (*process)(int kind, xml_list l, nesc_declaration ndecl)) { env_scanner scanenv; const char *name; void *val; env_scan(get_nesc_env(), &scanenv); while (env_next(&scanenv, &name, &val)) { nesc_declaration ndecl = val; if (ndecl->kind == kind) process(processkind, l, ndecl); } } static void add_ddecls_from_env(int kind, xml_list l, struct environment *env) { env_scanner scan; const char *name; void *decl; env_scan(env->id_env, &scan); while (env_next(&scan, &name, &decl)) { data_declaration ddecl = decl; if (ddecl->kind == kind && dump_filter_ddecl(ddecl)) xml_list_add(l, ddecl); } } static void add_ddecls_from_component(int kind, xml_list l, nesc_declaration comp) { add_ddecls_from_env(kind, l, comp->env); add_ddecls_from_env(kind, l, comp->impl->ienv); } static void select_ddecls(int kind, xml_list l, dd_list comps) { dd_list_pos scan; add_ddecls_from_env(kind, l, global_env); if (comps) dd_scan (scan, comps) add_ddecls_from_component(kind, l, DD_GET(nesc_declaration, scan)); source_ndecl_iterate(l_component, kind, l, add_ddecls_from_component); } /* The toplevel requests supported by -fnesc-dump */ /* ---------------------------------------------- */ /* Most of these are handled via the lists system (see above) */ static void add_component(int dummy, xml_list l, nesc_declaration comp) { if (dump_filter_ndecl(comp)) xml_list_add(l, comp); } static void select_components(xml_list l, nd_option opt, dd_list comps) { dd_list_pos scan_components; nd_arg arg; scan_nd_arg (arg, opt->args) if (is_nd_token(arg)) { const char *req = nd_tokenval(arg); if (!strcmp(req, "wiring")) configuration_wiring = TRUE; else error("unknown components option `%s'", req); } else error("bad components option"); if (comps) dd_scan (scan_components, comps) add_component(0, l, DD_GET(nesc_declaration, scan_components)); source_ndecl_iterate(l_component, 0, l, add_component); } static void add_interfacedef(int dummy, xml_list l, nesc_declaration ndecl) { if (dump_filter_ndecl(ndecl)) xml_list_add(l, ndecl); } static void select_interfacedefs(xml_list l, nd_option opt, dd_list comps) { source_ndecl_iterate(l_interface, 0, l, add_interfacedef); } static void select_interfaces(xml_list l, nd_option opt, dd_list comps) { select_ddecls(decl_interface_ref, l, comps); } static void select_variables(xml_list l, nd_option opt, dd_list comps) { select_ddecls(decl_variable, l, comps); } static void select_constants(xml_list l, nd_option opt, dd_list comps) { select_ddecls(decl_constant, l, comps); } static void select_functions(xml_list l, nd_option opt, dd_list comps) { select_ddecls(decl_function, l, comps); } static void select_typedefs(xml_list l, nd_option opt, dd_list comps) { select_ddecls(decl_typedef, l, comps); } static void add_tags_from_env(xml_list l, struct environment *env) { env_scanner scan; const char *name; void *decl; env_scan(env->tag_env, &scan); while (env_next(&scan, &name, &decl)) { tag_declaration tdecl = decl; if (dump_filter_tdecl(tdecl)) xml_list_add(l, tdecl); } } static void add_tags_from_component(int dummy, xml_list l, nesc_declaration comp) { add_tags_from_env(l, comp->env); add_tags_from_env(l, comp->impl->ienv); } static void select_tags(xml_list l, nd_option opt, dd_list comps) { dd_list_pos scan_components; add_tags_from_env(l, global_env); if (comps) dd_scan (scan_components, comps) add_tags_from_component(0, l, DD_GET(nesc_declaration, scan_components)); source_ndecl_iterate(l_component, 0, l, add_tags_from_component); } static void select_wiring(nd_option opt, dd_list comps) { nd_arg arg; if (!comps) { error("wiring can only be requested on an actual program"); return; } wiring = wiring_user; scan_nd_arg (arg, opt->args) if (is_nd_token(arg)) { const char *req = nd_tokenval(arg); if (!strcmp(req, "functions")) wiring = wiring_functions; else error("unknown wiring request for `%s'", req); } else error("bad argument to wiring"); } static void select_referenced(nd_option opt) { nd_arg arg; scan_nd_arg (arg, opt->args) if (is_nd_token(arg)) { const char *req = nd_tokenval(arg); int i; for (i = 0; i < NLISTS; i++) if (!strcmp(req, lists[i].name)) { *lists[i].referenced = lists[i].l; break; } if (i == NLISTS) error("unknown referenced request for `%s'", req); } else error("bad argument to referenced"); } void select_dump(char *what) { nd_option opt; if (!dump_region) dump_region = permanent; opt = nd_parse(what); if (opt) { #if 0 nd_arg arg; int i = 0; fprintf(stderr, "opt %s, %d args\n", opt->name, opt->count); scan_nd_arg (arg, opt->args) if (is_nd_int(arg)) fprintf(stderr, " arg %d int %ld\n", ++i, (long)ND_CAST(nd_int, arg)->val); else fprintf(stderr, " arg %d token %s\n", ++i, ND_CAST(nd_token, arg)->str); #endif if (!opts) opts = dd_new_list(dump_region); dd_add_last(dump_region, opts, opt); } } void select_dumpfile(char *name) { dumpfile = name; } bool dump_selected(void) { return opts != NULL; } static void do_lists(void) { int i; for (i = 0; i < NLISTS; i++) dump_list(lists[i].name, lists[i].l, lists[i].dump); } void dump_info(nesc_declaration program, cgraph cg, cgraph userg, dd_list modules, dd_list comps) { dd_list_pos scan_opts; bool list_change = FALSE; int i; FILE *dumpf = NULL; for (i = 0; i < NLISTS; i++) lists[i].l = new_xml_list(dump_region, &list_change, lists[i].addfilter); /* Process options to find out what is selected */ dd_scan (scan_opts, opts) { nd_option opt = DD_GET(nd_option, scan_opts); int i; dump_set_filter(opt); for (i = 0; i < NLISTS; i++) if (!strcmp(opt->name, lists[i].name)) { lists[i].select(lists[i].l, opt, comps); break; } if (i < NLISTS) ; else if (!strcmp(opt->name, "wiring")) select_wiring(opt, comps); else if (!strcmp(opt->name, "referenced")) select_referenced(opt); else error("unknown dump request `%s'", opt->name); } /* Repeatedly dump selected information (w/o performing any actual I/O). This will collect all items selected by the 'referenced' request. This repeated collection of items is supported by the xml_list type (from nesc-xml.c) */ xml_start_dummy(); do_wiring(wiring, cg, userg); for (;;) { do_lists(); if (!list_change) break; list_change = FALSE; } /* All information now collected. Reset the lists and dump the information for real. */ for (i = 0; i < NLISTS; i++) xml_list_reset(lists[i].l); if (!dumpfile) xml_start(stdout); else { dumpf = fopen(dumpfile, "w"); if (!dumpf) { perror("couldn't create dump file"); return; } xml_start(dumpf); } indentedtag_start("nesc"); xml_attr("xmlns", "http://www.tinyos.net/nesC"); xml_tag_end(); xnewline(); do_wiring(wiring, cg, userg); do_lists(); indentedtag_pop(); xml_end(); if (dumpf) fclose(dumpf); /* Nothing should have been added to the lists in the actual output pass */ assert(!list_change); } nescc-1.3.4/src/nesc-dump.h000066400000000000000000000030621177770303300154560ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_DUMP_H #define NESC_DUMP_H /* The internal nesC dump information system. Dumps information in XML according to the DSD schema which can be found in doc/dump (see the README there for more details). Java code to parse this schema into a programmer-friendly form is in the net.tinyos.nesc.dump package (found under tools/java). */ #include "nesc-cg.h" extern region dump_region; void select_dump(char *what); /* Effects: Register a new -fnesc-dump request 'what' Errors are signaled through the usual 'error' call. */ void select_dumpfile(char *name); /* Effects: Select target file for dump */ bool dump_selected(void); /* Effects: Return true if any calls to select_dump where made. */ void dump_info(nesc_declaration program, cgraph cg, cgraph userg, dd_list modules, dd_list components); /* Effects: Dump selected information. */ #endif nescc-1.3.4/src/nesc-env.c000066400000000000000000000054711177770303300153020ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "nesc-env.h" #include "env.h" #include "nesc-interface.h" #include "nesc-component.h" #include "nesc-c.h" #include "nesc-decls.h" #include "nesc-semantics.h" #include "c-parse.h" #include "semantics.h" /* Top-level nesc environment. Keeps track of loaded interfaces and components, loads them on demand */ /* The environments for components and interfaces */ static env nesc_env, nesc_c_env; /* hack, to give the doc generation an easy way to list interfaces & components */ env get_nesc_env(void) { return nesc_env; } void init_nesc_env(region r) { nesc_env = new_env(r, NULL); nesc_c_env = new_env(r, NULL); } nesc_declaration new_nesc_declaration(region r, source_language kind, const char *name) { nesc_declaration new = ralloc(r, struct nesc_declaration); new->kind = kind; new->name = new->instance_name = name; if (kind == l_component && use_nido) new->local_statics = dd_new_list(r); new->env = new_environment(r, global_env, TRUE, FALSE); new->safe = flag_default_safe; return new; } void nesc_declare(nesc_declaration d) { check_name(d->name); env_add(nesc_env, d->name, d); } nesc_declaration nesc_lookup(const char *name) { return env_lookup(nesc_env, name, FALSE); } void preload(source_language sl, location l, const char *name) { if (!nesc_lookup(name)) load(sl, l, name, FALSE); } nesc_declaration require(source_language sl, location l, const char *name) { nesc_declaration d = nesc_lookup(name); if (!d) d = load(sl, l, name, FALSE); if (sl != d->kind) { /* Make a dummy declaration to make everyone happy */ nesc_decl nd; d = new_nesc_declaration(parse_region, sl, name); nd = dummy_nesc_decl(l, d); error_with_location(l, "expected %s `%s', but got %s %s", language_name(sl), name, d->kind == l_interface ? "an" : "a", language_name(d->kind)); } return d; } void require_c(location l, const char *name) { static int dummy; int *present = env_lookup(nesc_c_env, name, FALSE); if (!present) { env_add(nesc_c_env, name, &dummy); load_c(l, name, FALSE); } } nescc-1.3.4/src/nesc-env.h000066400000000000000000000023761177770303300153100ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_ENV_H #define NESC_ENV_H /* Top-level nesc environment. Keeps track of loaded interfaces and components, loads them on demand */ nesc_declaration new_nesc_declaration(region r, source_language kind, const char *name); void init_nesc_env(region r); env get_nesc_env(void); void nesc_declare(nesc_declaration d); nesc_declaration nesc_lookup(const char *name); void preload(source_language sl, location l, const char *name); nesc_declaration require(source_language sl, location l, const char *name); void require_c(location l, const char *name); #endif nescc-1.3.4/src/nesc-gcc.c000066400000000000000000000220311177770303300152350ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "nesc-cpp.h" #include #include #include #include #include #include "nesc-paths.h" #include "machine.h" #include "flags.h" #include "semantics.h" #include "c-parse.h" #include "gcc-cpp.h" /* Some extra options for gcc */ struct extra_option { struct extra_option *next; const char *opt; }; static struct extra_option *extra_options; static int extra_options_count; void add_gcc_option(const char *option) { struct extra_option *newopt; newopt = ralloc(permanent, struct extra_option); newopt->opt = option; newopt->next = extra_options; extra_options = newopt; extra_options_count++; } static char *mktempfile(region r, const char *name) { char *newname; #ifdef WIN32 if (!strncmp(name, "/tmp/", 5)) { char *tmpenv = getenv("TMP"); if (!tmpenv) { fprintf(stderr, "You must define the TMP environment variable to point to a directory\n"); fprintf(stderr, "for temporary files.\n"); exit(2); } newname = rstralloc(r, strlen(tmpenv) + strlen(name)); sprintf(newname, "%s/%s", tmpenv, name + 5); } else newname = rstrdup(r, name); if (!mktemp(newname)) { perror("couldn't create temporary file"); exit(2); } #else int fd; newname = rstrdup(r, name); fd = mkstemp(newname); if (fd < 0) { perror("couldn't create temporary file"); exit(2); } close(fd); #endif return newname; } #if defined(__CYGWIN__) || defined(WIN32) #include #ifndef WIN32 #include #endif static bool safe_dup(int from, int to, int save) { if (dup2(to, save) < 0) return FALSE; return dup2(from, to) >= 0; } static void dup_restore(int to, int save) { if (dup2(save, to) < 0) { perror("internal problem - canot restore file descriptor"); exit(2); } } static bool exec_gcc(char *gcc_output_template, bool mkotmp, char **gcc_output_file, char *gcc_error_template, bool mketmp, char **gcc_error_file, int nargs, void (*setargs)(void *data, const char **argv), void *data) { int gcc_stat, res, outputfd, errorfd; const char **argv; static int tmpfd1 = -1, tmpfd2 = -1; char *outputf, *errorf; argv = alloca((nargs + 2) * sizeof *argv); argv[0] = target_compiler; setargs(data, argv + 1); /* It's really spammy with this on */ if (flag_verbose >= 2) { int i; for (i = 0; argv[i]; i++) fprintf(stderr, "%s ", argv[i]); fprintf(stderr, "\n"); } if (tmpfd1 < 0 || tmpfd2 < 0) { tmpfd1 = open(DEVNULL, O_RDONLY); tmpfd2 = open(DEVNULL, O_RDONLY); if (tmpfd1 < 0 || tmpfd2 < 0) { fprintf(stderr, "Internal error (can't open " DEVNULL "!?)\n"); exit(2); } } if (mkotmp) outputf = mktempfile(permanent, gcc_output_template); else outputf = gcc_output_template; *gcc_output_file = outputf; if (mketmp) errorf = mktempfile(permanent, gcc_error_template); else errorf = gcc_error_template; *gcc_error_file = errorf; outputfd = creat(outputf, 0666); errorfd = creat(errorf, 0666); if (outputfd < 0 || errorfd < 0) { if (outputfd >= 0) close(outputfd); if (errorfd >= 0) close(errorfd); return FALSE; } if (!safe_dup(outputfd, 1, tmpfd1)) return FALSE; if (!safe_dup(errorfd, 2, tmpfd2)) { dup_restore(1, tmpfd1); return FALSE; } close(outputfd); close(errorfd); gcc_stat = spawnvp(_P_WAIT, target_compiler, argv); #ifdef WIN32 res = gcc_stat == 0 ? 0 : 2; #else if (WIFEXITED(gcc_stat)) res = WEXITSTATUS(gcc_stat); else res = 2; #endif if (res != 0) fprintf(stderr, "could not execute %s\n", target_compiler); dup_restore(1, tmpfd1); dup_restore(2, tmpfd2); return res == 0; } #else #include static bool exec_gcc(char *gcc_output_template, bool mkotmp, char **gcc_output_file, char *gcc_error_template, bool mketmp, char **gcc_error_file, int nargs, void (*setargs)(void *data, const char **argv), void *data) { int gcc_pid, gcc_stat, res; char *outputf, *errorf; if (mkotmp) outputf = mktempfile(permanent, gcc_output_template); else outputf = gcc_output_template; *gcc_output_file = outputf; if (mketmp) errorf = mktempfile(permanent, gcc_error_template); else errorf = gcc_error_template; *gcc_error_file = errorf; if ((gcc_pid = fork()) == 0) { const char **argv; int outputfd = creat(outputf, 0666); int errorfd = creat(errorf, 0666); argv = alloca((nargs + 2) * sizeof *argv); argv[0] = target_compiler; setargs(data, argv + 1); /* It's really spammy with this on */ if (flag_verbose >= 2) { int i; for (i = 0; argv[i]; i++) fprintf(stderr, "%s ", argv[i]); fprintf(stderr, "\n"); } if (outputfd < 0 || dup2(outputfd, 1) < 0 || errorfd < 0 || dup2(errorfd, 2) < 0) exit(2); close(outputfd); close(errorfd); execvp(target_compiler, (char **)argv); fprintf(stderr, "could not execute %s: %s\n", target_compiler, strerror(errno)); exit(2); } for (;;) { int pid = wait(&gcc_stat); if (pid == -1) { if (errno == EINTR) continue; else { res = 2; break; } } if (pid == gcc_pid) { if (WIFEXITED(gcc_stat)) res = WEXITSTATUS(gcc_stat); else res = 2; break; } } return res == 0; } #endif #define LINELEN 160 /* Make a copy of path with leading+trailing whitespace removed */ static char *sanitize_path(region r, const char *path) { char *pcopy; int l; while (ISSPACE(*path)) path++; pcopy = rstrdup(r, path); l = strlen(pcopy); while (l > 0 && ISSPACE(pcopy[l - 1])) pcopy[--l] = '\0'; return pcopy; } static void gcc_preprocess_init_setargs(void *data, const char **argv) { int opt = 0, i; struct extra_option *extras; argv[opt++] = "-v"; argv[opt++] = "-x"; argv[opt++] = "c"; if (flag_mingw_gcc) argv[opt++] = "nul:"; else argv[opt++] = "/dev/null"; argv[opt++] = "-E"; argv[opt++] = "-dM"; if (flag_nostdinc) argv[opt++] = "-nostdinc"; /* The saved options are reversed */ for (extras = extra_options, i = extra_options_count; extras; extras = extras->next) argv[opt + --i] = extras->opt; opt += extra_options_count; argv[opt++] = NULL; } static char *gcc_builtin_macros_file; static void gcc_cpp_cleanup(void) { if (gcc_builtin_macros_file) unlink(gcc_builtin_macros_file); } static void print_error_file(FILE *to, char *filename) { char line[256]; FILE *f; if (!filename) { fprintf(to, "-- no output\n"); return; } f = fopen(filename, "r"); if (!f) { fprintf(to, "-- failed to open error message file %s\n", filename); return; } while (fgets(line, sizeof line - 1, f)) fputs(line, to); if (ferror(f)) fprintf(to, "-- error reading message file %s\n", filename); fclose(f); } const char *gcc_global_cpp_init(void) { static char tbuiltins[] = "/tmp/nesccppbXXXXXX"; static char tincludes[] = "/tmp/nesccppiXXXXXX"; char *includes = NULL; FILE *incf; char line[LINELEN]; bool quote_includes = FALSE, bracket_includes = FALSE; atexit(gcc_cpp_cleanup); /* Execute gcc to get builtin macros and include search path */ if (!exec_gcc(tbuiltins, TRUE, &gcc_builtin_macros_file, tincludes, TRUE, &includes, 7 + extra_options_count, gcc_preprocess_init_setargs, NULL)) { error("invocation of %s to find builtin macros failed (error message output follows)", target_compiler); print_error_file(stderr, includes); return NULL; } /* Read gcc error output to get search path */ incf = fopen(includes, "r"); if (!incf) { unlink(includes); return NULL; } while (fgets(line, LINELEN - 1, incf)) { if (!strncmp(line, "#include \"...\"", 14)) quote_includes = TRUE; else if (!strncmp(line, "#include <...>", 14)) bracket_includes = TRUE; else if (!strncmp(line, "End of search list.", 19)) break; else if (bracket_includes) add_nesc_dir(sanitize_path(permanent, line), CHAIN_SYSTEM); else if (quote_includes) add_nesc_dir(sanitize_path(permanent, line), CHAIN_QUOTE); } fclose(incf); unlink(includes); return gcc_builtin_macros_file; } void gcc_save_machine_options(const char *opt) { if (opt[1] == 'm') add_gcc_option(opt); } nescc-1.3.4/src/nesc-gcc.h000066400000000000000000000015541177770303300152510ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002-2008 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_GCC_H #define NESC_GCC_H const char *gcc_global_cpp_init(void); void add_gcc_option(const char *option); void gcc_save_machine_options(const char *opt); #endif nescc-1.3.4/src/nesc-generate.c000066400000000000000000001051421177770303300163000ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "c-parse.h" #include "nesc-generate.h" #include "nesc-inline.h" #include "nesc-component.h" #include "nesc-semantics.h" #include "nesc-c.h" #include "unparse.h" #include "AST_utils.h" #include "edit.h" #include "semantics.h" #include "constants.h" #include "nesc-concurrency.h" #include "nesc-uses.h" #include "nesc-network.h" #include "nesc-atomic.h" #include "nesc-cpp.h" static void prt_nesc_function_hdr(data_declaration fn_decl, psd_options options) /* Effects: prints the C function declaration for fn_decl */ { /* We print the declaration from the interface rather than that of fn_decl itself, as this latter may use not-yet-defined typedefs. prt_declarator will use the name from fn_decl in its output. */ variable_decl ifn_vd = CAST(variable_decl, fn_decl->ast); data_decl fn_dd = CAST(data_decl, ifn_vd->parent); psd_options opts; function_declarator fd; asttype ret; prt_diff_info(fn_decl); set_location(fn_dd->location); if (!is_binary_component(fn_decl->container->impl)) output("static "); /* Functions returning a network type should return the base type instead */ if (is_function_declarator(ifn_vd->declarator)) opts = psd_rewrite_nxbase; else opts = 0; options |= psd_rename_parameters; fd = get_fdeclarator(ifn_vd->declarator); /* Handle nesdoc-overridden return type */ if (fd && (ret = fd->return_type)) { prt_attribute_elements(fn_dd->modifiers); prt_type_elements(ret->qualifiers, opts); prt_declarator(ret->declarator, NULL, ifn_vd->attributes, fn_decl, options | psd_print_ddecl_fdeclarator); } else { prt_type_elements(fn_dd->modifiers, opts); prt_declarator(ifn_vd->declarator, NULL, ifn_vd->attributes, fn_decl, options); } } void prt_nesc_function_declaration(data_declaration fndecl, void *data) { if (fndecl->definition && fndecl->isused && !fndecl->suppress_definition) { prt_nesc_function_hdr(fndecl, psd_print_default); outputln(";"); } } void prt_nesc_function_declarations(nesc_declaration mod) { component_functions_iterate(mod, prt_nesc_function_declaration, NULL); } /* A description of the target functions a used function is connected to */ typedef struct full_connection { endp ep; expression cond; expression args; } *full_connection; struct connections { /* Connection being sought */ region r; cgraph cg; data_declaration called; /* the list of targets which are called generically (with generic arguments passed through unchanged). NULL if 'called' is not generic. Both 'cond' and 'args' are NULL for generic_calls */ dd_list/**/ generic_calls; /* normal_calls is the list of all other targets. If 'called' is generic, 'cond' is the expression list that must match the generic parameters of 'called' for the call to 'ep' to take place. 'args' is the expression list to add to the arguments if 'ep' is generic. */ dd_list/**/ normal_calls; /* The combiner function used, if any */ data_declaration combiner; }; static full_connection new_full_connection(region r, endp ep, expression cond, expression args) { full_connection c = ralloc(r, struct full_connection); c->ep = ep; c->cond = cond; c->args = args; return c; } static type function_return_type(data_declaration fndecl) { return type_function_return_type(get_actual_function_type(fndecl->type)); } void prt_ncf_header(struct connections *c, type return_type) { if (c->called->makeinline && flag_no_inline < 2) output("inline "); prt_nesc_function_hdr(c->called, 0); outputln("{"); indent(); if (!type_void(return_type)) { prt_data_decl(build_declaration(parse_region, NULL, return_type, "__nesc_result", NULL, NULL)); newline(); } } void prt_ncf_trailer(type return_type) { if (!type_void(return_type)) { newline(); outputln("return __nesc_result;"); } unindent(); outputln("}"); } static bool prt_arguments(declaration parms, bool first, bool rename) /* Effects: prints argument list composed of the variables declared in 'parms'. 'first' must be TRUE iff no arguments have yet been printed. Returns: TRUE iff 'first' and no arguments printed */ { declaration parm; scan_declaration (parm, parms) { /* Not supporting ... here for now. Fix requires different approach */ data_decl dd = CAST(data_decl, parm); variable_decl vd = CAST(variable_decl, dd->decls); if (!vd->ddecl) /* empty (void) parameter list */ break; if (!first) output(", "); first = FALSE; if (rename || !vd->ddecl->name) output("arg_%p", vd->ddecl); else output((char *)vd->ddecl->name); } return first; } void prt_ncf_direct_call(struct connections *c, full_connection ccall, bool first_call, psd_options options, type return_type, function_declarator called_fd) /* Effects: prints call to 'calls' in a connection function. Assigns result if last_call is TRUE. */ { bool first_arg = TRUE; data_declaration combiner = type_combiner(return_type); bool calling_combiner = FALSE; if (!type_void(return_type)) { output("__nesc_result = "); /* Combine w/ the combiner on subsequent calls */ if (!first_call && combiner) { output("%s(__nesc_result, ", combiner->name); calling_combiner = TRUE; } } prt_ddecl_full_name(ccall->ep->function, options); output("("); if (ccall->ep->function->gparms) { if (ccall->args) { /* Non-generic calling generic, add arguments */ prt_expressions(ccall->args, first_arg); first_arg = FALSE; } else { /* Generic calling generic, pass arguments through */ first_arg = prt_arguments(ddecl_get_gparms(c->called), first_arg, TRUE); } } else assert(!ccall->args); prt_arguments(called_fd->parms, first_arg, FALSE); if (calling_combiner) output(")"); outputln(");"); } void prt_ncf_default_call(struct connections *c, type return_type, function_declarator called_fd) { struct full_connection default_target; struct endp default_ep; default_target.ep = &default_ep; default_target.cond = default_target.args = NULL; default_ep.function = c->called; prt_ncf_direct_call(c, &default_target, TRUE, psd_print_default, return_type, called_fd); } bool prt_ncf_direct_calls(struct connections *c, dd_list/**/ calls, type return_type) /* Effects: prints calls to 'calls' in a connection function. */ { dd_list_pos call; bool first_call = TRUE; function_declarator called_fd = ddecl_get_fdeclarator(c->called); dd_scan (call, calls) { full_connection ccall = DD_GET(full_connection, call); assert(!ccall->cond); prt_ncf_direct_call(c, ccall, first_call, 0, return_type, called_fd); first_call = FALSE; } return first_call; } static int constant_expression_list_compare(expression arg1, expression arg2) { while (arg1) { largest_int uval1, uval2; uval1 = cval_sint_value(arg1->cst->cval); uval2 = cval_sint_value(arg2->cst->cval); /* Can't use - as might overflow and mod down to 0 */ if (uval1 < uval2) return -1; else if (uval1 > uval2) return 1; arg1 = CAST(expression, arg1->next); arg2 = CAST(expression, arg2->next); } assert(!arg2); return 0; } static int condition_compare(const void *p1, const void *p2) { struct full_connection *const *c1 = p1, *const *c2 = p2; return constant_expression_list_compare((*c1)->cond, (*c2)->cond); } static void prt_ncf_condition(struct connections *c, expression cond) { declaration gparm; bool first = TRUE; scan_declaration (gparm, ddecl_get_gparms(c->called)) { data_decl dd = CAST(data_decl, gparm); variable_decl vd = CAST(variable_decl, dd->decls); if (first) output("if ("); else output(" && "); first = FALSE; output("arg_%p == ", vd->ddecl); prt_expression(cond, P_REL); cond = CAST(expression, cond->next); } output(") "); } static void prt_ncf_conditional_calls(struct connections *c, bool first_call, type return_type) { dd_list_pos call; int i, j, ncalls = dd_length(c->normal_calls); full_connection *cond_eps = rarrayalloc(c->r, ncalls, full_connection); function_declarator called_fd = ddecl_get_fdeclarator(c->called); bool one_arg = FALSE; /* No work to do */ if (ncalls == 0 && !dd_is_empty(c->generic_calls)) return; /* Sort calls so we can find connections with the same conditions */ i = 0; dd_scan (call, c->normal_calls) cond_eps[i++] = DD_GET(full_connection, call); qsort(cond_eps, ncalls, sizeof(full_connection), condition_compare); if (ncalls > 0 && !cond_eps[0]->cond->next) { /* use switch rather than cascaded ifs (gcc generate better code) */ one_arg = TRUE; output("switch ("); prt_arguments(ddecl_get_gparms(c->called), TRUE, TRUE); outputln(") {"); indent(); } /* output the calls */ i = 0; while (i < ncalls) { expression cond = cond_eps[i]->cond; bool first_cond_call = first_call; /* output latest condition */ if (one_arg) { output("case "); prt_expression(cond, P_ASSIGN); outputln(":"); } else { if (i != 0) output("else "); prt_ncf_condition(c, cond); outputln("{"); } indent(); /* find last target with same condition */ j = i; while (++j < ncalls && condition_compare(&cond_eps[i], &cond_eps[j]) == 0) ; /* print them, setting result for the last one */ while (i < j) { prt_ncf_direct_call(c, cond_eps[i], first_cond_call, 0, return_type, called_fd); first_cond_call = FALSE; i++; } if (one_arg) outputln("break;"); unindent(); if (!one_arg) outputln("}"); } /* output call to default if there are no non-conditional calls */ if (first_call) { if (ncalls > 0) { if (one_arg) outputln("default:"); else outputln("else"); } indent(); prt_ncf_default_call(c, return_type, called_fd); unindent(); if (ncalls > 0 && one_arg) { outputln(" break;"); outputln("}"); unindent(); } } else if (one_arg) { unindent(); outputln("}"); } } static void prt_nesc_connection_function(struct connections *c) { type return_type = function_return_type(c->called); set_fixed_location(c->called->ast->location); if (type_network_base_type(return_type)) return_type = type_network_platform_type(return_type); prt_ncf_header(c, return_type); if (c->called->gparms) { bool first_call; first_call = prt_ncf_direct_calls(c, c->generic_calls, return_type); prt_ncf_conditional_calls(c, first_call, return_type); } else { if (dd_is_empty(c->normal_calls)) prt_ncf_default_call(c, return_type, ddecl_get_fdeclarator(c->called)); else prt_ncf_direct_calls(c, c->normal_calls, return_type); } prt_ncf_trailer(return_type); clear_fixed_location(); } void prt_nesc_called_function_hdr(data_declaration fndecl, void *data) { if (!(fndecl->defined || fndecl->uncallable) && fndecl->isused) { prt_nesc_function_hdr(fndecl, 0); outputln(";"); } /* This is a handy place to check that all binary entry points are callable */ if (!fndecl->defined && fndecl->uncallable && is_binary_component(fndecl->container->impl)) error("binary entry point %s%s%s.%s is not fully wired", fndecl->container->instance_name, fndecl->interface ? "." : "", fndecl->interface ? fndecl->interface->name : "", fndecl->name); } void prt_nesc_called_function_headers(cgraph cg, nesc_declaration mod) { component_functions_iterate(mod, prt_nesc_called_function_hdr, NULL); } void prt_nesc_module(cgraph cg, nesc_declaration mod) { prt_nesc_called_function_headers(cg, mod); if (is_binary_component(mod->impl)) return; prt_toplevel_declarations(CAST(module, mod->impl)->decls); /* Make local static variables gloabal when nido is used. Note: this raises several issues (aka problems): - local static variables are named mod$fn$x rather than just x (mildly confusing when debugging) - the generated code will have errors (or worse, incorrect behaviour) if the local static declaration relied on local declarations inside fn (e.g., typedefs, enums, structs). There's no really nice fix to this except renaming and extracting all such entities (maybe this can be done when we have our own version of gdb and preserving symbol names is less important) */ if (use_nido) { dd_list_pos scan; dd_scan (scan, mod->local_statics) { data_declaration localsvar = DD_GET(data_declaration, scan); variable_decl localsvd; data_decl localsdd; if (!localsvar->isused) continue; localsvd = CAST(variable_decl, localsvar->ast); localsdd = CAST(data_decl, localsvd->parent); /* Note: we don't print the elements with pte_duplicate as we don't (easily) know here if the elements will be printed several times. If the type elements define a new type we most likely have a problem anyway (see discussion above) */ prt_variable_decl(localsdd->modifiers, localsvd, 0); outputln(";"); } } } static bool find_reachable_functions(struct connections *c, gnode n, expression gcond, expression gargs) { endp ep = NODE_GET(endp, n); if (ep->args_node) { /* First set of arguments is a condition if 'called' is generic */ if (c->called->gparms && !gcond) gcond = ep->args_node; else if (gargs) { /* We already have some arguments, so this is a condition again. If the condition doesn't match gargs, then the call is filtered out. If they do match, we set gargs to null (we're back to a non-parameterised call) */ if (constant_expression_list_compare(gargs, ep->args_node) != 0) return FALSE; gargs = NULL; } else { assert(!gargs); gargs = ep->args_node; } } if (graph_node_markedp(n)) return TRUE; else if (!ep->args_node && ep->function->defined && !ep->function->container->configuration) { full_connection target = new_full_connection(c->r, ep, gcond, gargs); assert(!graph_first_edge_out(n)); dd_add_last(c->r, c->called->gparms && !gcond ? c->generic_calls : c->normal_calls, target); } else { gedge out; graph_mark_node(n); graph_scan_out (out, n) if (find_reachable_functions(c, graph_edge_to(out), gcond, gargs)) return TRUE; graph_unmark_node(n); } return FALSE; } static void find_connected_functions(struct connections *c) { gnode called_fn_node; graph_clear_all_marks(cgraph_graph(c->cg)); called_fn_node = fn_lookup(c->cg, c->called); assert(!graph_first_edge_in(called_fn_node)); if (find_reachable_functions(c, called_fn_node, NULL, NULL)) error_with_location(c->called->ast->location, "cycle in configuration (for %s%s%s.%s)", c->called->container->name, c->called->interface ? "." : "", c->called->interface ? c->called->interface->name : "", c->called->name); } static void combine_warning(struct connections *c) { if (warn_no_combiner) { /* Warnings to be enabled when result_t gets defined correctly */ if (c->called->interface) nesc_warning("calls to %s.%s in %s fan out, but there is no combine function specified for the return type", c->called->interface->name, c->called->name, c->called->container->name); else nesc_warning("calls to %s in %s fan out, but there is no combine function specified for the return type" , c->called->name, c->called->container->name); } } static bool combiner_used; static bool cicn_direct_calls(dd_list/**/ calls) { dd_list_pos first = dd_first(calls); if (dd_is_end(first)) return TRUE; if (!dd_is_end(dd_next(first))) combiner_used = TRUE; return FALSE; } static void cicn_conditional_calls(struct connections *c, bool first_call) { dd_list_pos call; int i, j, ncalls = dd_length(c->normal_calls); full_connection *cond_eps = rarrayalloc(c->r, ncalls, full_connection); /* Sort calls so we can find connections with the same conditions */ i = 0; dd_scan (call, c->normal_calls) cond_eps[i++] = DD_GET(full_connection, call); qsort(cond_eps, ncalls, sizeof(full_connection), condition_compare); /* output the calls */ i = 0; while (i < ncalls) { /* find last target with same condition */ j = i; while (++j < ncalls && condition_compare(&cond_eps[i], &cond_eps[j]) == 0) ; if (i + first_call < j) combiner_used = TRUE; i = j; } } static void check_if_combiner_needed(struct connections *c) { /* To see if a combiner is needed, we follow (a simplified form of) the logic used in printing the connection function (see prt_nesc_connection_function) */ type return_type = function_return_type(c->called); if (type_void(return_type)) /* No combiner needed */ return; combiner_used = FALSE; if (c->called->gparms) { bool first_call; first_call = cicn_direct_calls(c->generic_calls); cicn_conditional_calls(c, first_call); } else cicn_direct_calls(c->normal_calls); if (combiner_used) { c->combiner = type_combiner(return_type); if (!c->combiner) combine_warning(c); } } void find_function_connections(data_declaration fndecl, void *data) { cgraph cg = data; if (!fndecl->defined) { region r = parse_region; struct connections *connections; fndecl->connections = connections = ralloc(r, struct connections); connections->r = r; connections->cg = cg; connections->called = fndecl; connections->generic_calls = dd_new_list(r); connections->normal_calls = dd_new_list(r); find_connected_functions(connections); /* a function is uncallable if it has no default definition and non-generic: no connections generic: no generic connections */ if (!(fndecl->definition || !dd_is_empty(connections->generic_calls) || (!fndecl->gparms && !dd_is_empty(connections->normal_calls)))) fndecl->uncallable = TRUE; else fndecl->suppress_definition = !dd_is_empty(fndecl->gparms ? connections->generic_calls : connections->normal_calls); check_if_combiner_needed(connections); } } void find_connections(cgraph cg, nesc_declaration mod) { component_functions_iterate(mod, find_function_connections, cg); } static void mark_reachable_function(cgraph cg, data_declaration caller, data_declaration ddecl, use caller_use); static void mark_connected_function_list(cgraph cg, data_declaration caller, dd_list/*full_connection*/ calls) { dd_list_pos connected; dd_scan (connected, calls) { full_connection conn = DD_GET(full_connection, connected); mark_reachable_function(cg, caller, conn->ep->function, new_use(dummy_location, caller, c_executable | c_fncall)); } } static void mark_reachable_function(cgraph cg, data_declaration caller, data_declaration ddecl, use caller_use) { dd_list_pos use; if (caller && ddecl->kind == decl_function) graph_add_edge(fn_lookup(cg, caller), fn_lookup(cg, ddecl), caller_use); /* Hack because ALLCODE env variable adds task decl's to spontaneous_calls */ if (type_task(ddecl->type) && ddecl->interface) return; if (ddecl->isused) return; ddecl->isused = TRUE; if (ddecl->kind != decl_function || (ddecl->container && !(ddecl->container->kind == l_component && !ddecl->container->configuration))) return; if ((ddecl->ftype == function_command || ddecl->ftype == function_event) && !ddecl->defined) { struct connections *conn = ddecl->connections; /* Call to a command or event not defined in this module. Mark all connected functions */ mark_connected_function_list(cg, ddecl, conn->generic_calls); mark_connected_function_list(cg, ddecl, conn->normal_calls); if (conn->combiner) mark_reachable_function(cg, ddecl, conn->combiner, new_use(dummy_location, caller, c_executable | c_fncall)); /* Don't process body of suppressed default defs */ if (ddecl->suppress_definition) return; } /* Make sure ddecl gets a node in the graph even if it doesn't call anything */ fn_lookup(cg, ddecl); if (ddecl->fn_uses) dd_scan (use, ddecl->fn_uses) { iduse i = DD_GET(iduse, use); mark_reachable_function(cg, ddecl, i->id, i->u); } } static declaration dummy_function(data_declaration ddecl) { empty_stmt body = new_empty_stmt(parse_region, dummy_location); function_decl fd = new_function_decl(parse_region, dummy_location, NULL, NULL, NULL, NULL, CAST(statement, body), NULL, NULL); fd->ddecl = ddecl; return CAST(declaration, fd); } static void mark_binary_reachable(data_declaration fndecl, void *data) { if (fndecl->defined) { fndecl->definition = dummy_function(fndecl); fndecl->noinlinep = TRUE; } else mark_reachable_function(data, NULL, fndecl, NULL); } static cgraph mark_reachable_code(dd_list modules) { dd_list_pos used, mod; cgraph cg = new_cgraph(parse_region); /* We use the connection graph type to represent our call graph */ dd_scan (used, spontaneous_calls) mark_reachable_function(cg, NULL, DD_GET(data_declaration, used), NULL); dd_scan (used, nglobal_uses) mark_reachable_function(cg, NULL, DD_GET(iduse, used)->id, NULL); /* All used functions from binary components are entry points */ dd_scan (mod, modules) { nesc_declaration m = DD_GET(nesc_declaration, mod); if (is_binary_component(m->impl)) component_functions_iterate(m, mark_binary_reachable, cg); } return cg; } static void prt_nesc_function(data_declaration fn) { assert(fn->kind == decl_function); if (fn->definition && !fn->suppress_definition && !(fn->container && is_binary_component(fn->container->impl))) prt_function_body(CAST(function_decl, fn->definition)); /* if this is a connection function, print it now */ if ((fn->ftype == function_command || fn->ftype == function_event) && !fn->defined && !fn->uncallable) prt_nesc_connection_function(fn->connections); } static bool isinlined(data_declaration fn) { return fn->isinline || fn->makeinline; } static void topological_prt(gnode gep, bool force) { gedge out; data_declaration fn; fn = NODE_GET(endp, gep)->function; if (isinlined(fn) || force) { if (graph_node_markedp(gep)) return; graph_mark_node(gep); graph_scan_out (out, gep) topological_prt(graph_edge_to(out), FALSE); prt_nesc_function(fn); } } static void prt_inline_functions(cgraph callgraph) { gnode fns; graph_clear_all_marks(cgraph_graph(callgraph)); graph_scan_nodes (fns, cgraph_graph(callgraph)) { data_declaration fn = NODE_GET(endp, fns)->function; if (isinlined(fn)) { gedge callers; bool inlinecallers = FALSE; graph_scan_in (callers, fns) { data_declaration caller = NODE_GET(endp, graph_edge_from(callers))->function; if (isinlined(caller)) { inlinecallers = TRUE; break; } } if (!inlinecallers) topological_prt(fns, FALSE); } } } static void prt_noninline_functions(cgraph callgraph) { gnode fns; graph_scan_nodes (fns, cgraph_graph(callgraph)) { data_declaration fn = NODE_GET(endp, fns)->function; if (!isinlined(fn)) { /* There may be some inlined functions which were not printed earlier, because they were: a) recursive (possibly indirectly), with explicit inline keywords b) not called from another inline function So we use topological_prt here to ensure they are printed before any calls to them from non-inlined functions */ topological_prt(fns, TRUE); } } } static void suppress_function(const char *name) { data_declaration d = lookup_global_id(name); if (d && d->kind == decl_function && d->definition) d->suppress_definition = TRUE; } static void prt_ddecl_for_init(region r, data_declaration ddecl) { type_quals dquals = type_qualifiers(ddecl->type); if (dquals & const_qualifier) { /* We need to cast the const away */ type nonconst; declarator nc_decl; type_element nc_mods; asttype nc_type; output("*("); nonconst = make_qualified_type(ddecl->type, dquals & ~const_qualifier); type2ast(r, dummy_location, make_pointer_type(nonconst), NULL, &nc_decl, &nc_mods); nc_type = new_asttype(r, dummy_location, nc_decl, nc_mods); prt_asttype(nc_type); output(")&"); } prt_plain_ddecl(ddecl, 0); output("[__nesc_mote]"); } static void prt_nido_initializer(region r, variable_decl vd) { data_declaration ddecl = vd->ddecl; expression init; if (!ddecl || !ddecl->isused || ddecl->kind != decl_variable) return; /* Don't print if not referenced */ init = vd->arg1; if (!init) { output("memset((void *)&"); prt_ddecl_for_init(r, ddecl); output(", 0, sizeof "); prt_ddecl_for_init(r, ddecl); output(")"); } else if (is_init_list(init)) { declarator vtype; type_element vmods; output("memcpy((void *)&"); prt_ddecl_for_init(r, ddecl); output(", (void *)&"); type2ast(parse_region, dummy_location, ddecl->type, NULL, &vtype, &vmods); output("("); prt_declarator(vtype, vmods, NULL, NULL, 0); output(")"); prt_expression(init, P_ASSIGN); output(", sizeof "); prt_ddecl_for_init(r, ddecl); output(")"); } else { prt_ddecl_for_init(r, ddecl); output(" = "); prt_expression(init, P_ASSIGN); } outputln(";"); } static void prt_nido_initializations(nesc_declaration mod) { declaration dlist; declaration d; dd_list_pos lscan; region r; /* binary component? */ if (!is_module(mod->impl)) return; r = newregion(); dlist = CAST(module, mod->impl)->decls; outputln("/* Module %s */", mod->name); /* Static variables */ scan_declaration (d, dlist) { declaration reald = ignore_extensions(d); variable_decl vd; if (reald->kind != kind_data_decl) continue; scan_variable_decl (vd, CAST(variable_decl, CAST(data_decl, d)->decls)) prt_nido_initializer(r, vd); } /* Local static variables */ dd_scan (lscan, mod->local_statics) { data_declaration localsd = DD_GET(data_declaration, lscan); prt_nido_initializer(r, CAST(variable_decl, localsd->ast)); } deleteregion(r); newline(); } static void prt_nido_initialize(dd_list modules) { dd_list_pos mod; nido_mote_number = "__nesc_mote"; outputln("/* Invoke static initialisers for mote '__nesc_mote' */\n"); outputln("static void __nesc_nido_initialise(int __nesc_mote)"); outputln("{"); indent(); dd_scan (mod, modules) prt_nido_initializations(DD_GET(nesc_declaration, mod)); unindent(); outputln("}"); } static void prt_typedefs(nesc_declaration comp) { declaration parm; scan_declaration (parm, comp->parameters) if (is_type_parm_decl(parm)) { type_parm_decl td = CAST(type_parm_decl, parm); asttype arg = CAST(type_argument, td->ddecl->initialiser)->asttype; output("typedef "); prt_declarator(arg->declarator, arg->qualifiers, NULL, td->ddecl, psd_print_ddecl); outputln(";"); } } void prt_nesc_interface_typedefs(nesc_declaration comp) { const char *ifname; void *ifentry; env_scanner scanifs; env_scan(comp->env->id_env, &scanifs); while (env_next(&scanifs, &ifname, &ifentry)) { data_declaration idecl = ifentry; if (idecl->kind == decl_interface_ref) prt_typedefs(idecl->itype); } } void prt_nesc_typedefs(nesc_declaration comp); void prt_configuration_declarations(declaration dlist) { declaration d; scan_declaration (d, dlist) if (is_component_ref(d)) prt_nesc_typedefs(CAST(component_ref, d)->cdecl); else prt_toplevel_declaration(d); } void prt_nesc_typedefs(nesc_declaration comp) { assert(!comp->abstract); if (comp->printed) return; comp->printed = TRUE; if (comp->original) prt_typedefs(comp); /* Print declarations in specification */ prt_toplevel_declarations(CAST(component, comp->ast)->decls); /* Only module interface type arguments are used in output */ if (!comp->configuration) prt_nesc_interface_typedefs(comp); else /* Recursively print declarations found in configurations */ prt_configuration_declarations(CAST(configuration, comp->impl)->decls); } static void prt_nido_resolver(region r, variable_decl vd) { data_declaration ddecl = vd->ddecl; expression init; if (!ddecl || !ddecl->isused || ddecl->kind != decl_variable) return; /* Don't print if not referenced */ init = vd->arg1; output("if (!strcmp(varname, \""); prt_plain_ddecl(ddecl, 0); outputln("\"))"); outputln("{"); indent(); output("*addr = (uintptr_t)&"); prt_ddecl_for_init(r, ddecl); outputln(";"); output("*size = sizeof("); prt_ddecl_for_init(r, ddecl); outputln(");"); outputln("return 0;"); unindent(); outputln("}"); } static void prt_nido_resolvers(nesc_declaration mod) { declaration dlist; declaration d; region r; /* binary component? */ if (!is_module(mod->impl)) return; r = newregion(); dlist = CAST(module, mod->impl)->decls; outputln("/* Module %s */", mod->name); /* Static variables */ scan_declaration (d, dlist) { declaration reald = ignore_extensions(d); variable_decl vd; if (reald->kind != kind_data_decl) continue; scan_variable_decl (vd, CAST(variable_decl, CAST(data_decl, d)->decls)) prt_nido_resolver(r, vd); } deleteregion(r); newline(); } static void prt_nido_resolver_function(dd_list modules) { dd_list_pos mod; outputln("/* Nido variable resolver function */\n"); outputln("static int __nesc_nido_resolve(int __nesc_mote,"); outputln(" char* varname,"); outputln(" uintptr_t* addr, size_t* size)"); outputln("{"); indent(); dd_scan (mod, modules) prt_nido_resolvers(DD_GET(nesc_declaration, mod)); outputln("return -1;"); unindent(); outputln("}"); } static void include_support_functions(void) { static char *fns[] = { "__nesc_atomic_start", "__nesc_atomic_end", "__nesc_enable_interrupt", "__nesc_disable_interrupt", "__nesc_nido_initialise", "__nesc_nido_resolve" }; int i; for (i = 0; i < sizeof fns / sizeof *fns; i++) { data_declaration fndecl = lookup_global_id(fns[i]); /* Adding the function to spontaneous_calls w/o setting the spontaneous field makes the function stay static */ if (fndecl && fndecl->kind == decl_function && !fndecl->spontaneous) dd_add_last(parse_region, spontaneous_calls, fndecl); } } void generate_c_code(const char *target_name, nesc_declaration program, cgraph cg, dd_list modules, dd_list components) { dd_list_pos mod; cgraph callgraph; FILE *output = NULL, *diff_file = NULL; if (target_name) { output = fopen(target_name, "w"); if (!output) { perror("couldn't create output file"); exit(2); } } if (diff_output) { char *diffname = rstralloc(permanent, strlen(diff_output) + 9); if (use_nido) { /* There's no use for nido+diffs, and it would complicate things somewhat (nido changes rules for symbols, etc) */ error("diff output is not supported with simulation"); exit(1); } sprintf(diffname, "%s/symbols", diff_output); diff_file = fopen(diffname, "w"); if (!diff_file) { fprintf(stderr, "couldn't create diff output file %s: ", diffname); perror(NULL); exit(2); } } include_support_functions(); unparse_start(output ? output : stdout, diff_file); disable_line_directives(); /* define nx_struct as struct and nx_union as union (simplifies prt_tag) */ outputln("#define nx_struct struct"); outputln("#define nx_union union"); /* suppress debug functions if necessary */ if (flag_no_debug) { suppress_function("dbg"); suppress_function("dbg_clear"); suppress_function("dbg_active"); outputln("#define dbg(mode, format, ...) ((void)0)"); outputln("#define dbg_clear(mode, format, ...) ((void)0)"); outputln("#define dbg_active(mode) 0"); } /* We start by finding each module's identifier uses and connections and marking uncallable functions */ collect_uses(all_cdecls); handle_network_types(all_cdecls); dd_scan (mod, modules) { nesc_declaration m = DD_GET(nesc_declaration, mod); if (is_module(m->impl)) { declaration body = CAST(module, m->impl)->decls; collect_uses(body); handle_network_types(body); } find_connections(cg, m); } /* Then we set the 'isused' bit on all functions that are reachable from spontaneous_calls or global_uses */ callgraph = mark_reachable_code(modules); check_async(callgraph); check_races(callgraph); isatomic(callgraph); inline_functions(callgraph); /* Then we print the code. */ /* The C declarations first */ enable_line_directives(); prt_toplevel_declarations(all_cdecls); disable_line_directives(); /* Typedefs for abstract module type arguments. This relies on the fact that abstract configurations are present in the components list ahead of the abstract modules that they instantiate */ if (program) prt_nesc_typedefs(program); enable_line_directives(); dd_scan (mod, modules) prt_nesc_function_declarations(DD_GET(nesc_declaration, mod)); dd_scan (mod, modules) prt_nesc_module(cg, DD_GET(nesc_declaration, mod)); prt_inline_functions(callgraph); prt_noninline_functions(callgraph); if (use_nido) { prt_nido_resolver_function(modules); disable_line_directives(); prt_nido_initialize(modules); } unparse_end(); if (output) fclose(output); if (diff_file) fclose(diff_file); } nescc-1.3.4/src/nesc-generate.h000066400000000000000000000016071177770303300163060ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_GENERATE_H #define NESC_GENERATE_H #include "nesc-cg.h" void generate_c_code(const char *target_name, nesc_declaration program, cgraph cg, dd_list modules, dd_list components); #endif nescc-1.3.4/src/nesc-inline.c000066400000000000000000000244511177770303300157670ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "nesc-inline.h" #include "constants.h" #include "flags.h" enum { base_inlineable_size = 9, inline_per_arg = 2 }; struct inline_node { data_declaration fn; size_t size; bool uninlinable; }; static void ig_add_fn(region r, ggraph ig, data_declaration fn, size_t size) { struct inline_node *n = ralloc(r, struct inline_node); n->fn = fn; n->size = size; fn->ig_node = graph_add_node(ig, n); } static void ig_add_edge(data_declaration from, data_declaration to) { graph_add_edge(from->ig_node, to->ig_node, NULL); /* Recursion - mark as uninlinable */ if (from == to) { struct inline_node *n = NODE_GET(struct inline_node *, from->ig_node); n->uninlinable = TRUE; } } static size_t statement_size(statement stmt, bool inatomic); static size_t expression_size(expression expr, bool inatomic); static size_t elist_size(expression elist, bool inatomic) { expression e; size_t sum = 0; scan_expression (e, elist) sum += expression_size(e, inatomic); return sum; } static size_t expression_size(expression expr, bool inatomic) { size_t sum = 0; if (!expr) return 0; if (expr->cst || is_string(expr)) return 1; switch (expr->kind) { case kind_identifier: sum += 1; break; case kind_comma: sum += elist_size(CAST(comma, expr)->arg1, inatomic); break; case kind_cast_list: { sum += expression_size(CAST(cast_list, expr)->init_expr, inatomic); break; } case kind_init_specific: { init_specific init = CAST(init_specific, expr); sum += expression_size(init->init_expr, inatomic); break; } case kind_init_list: { sum += elist_size(CAST(init_list, expr)->args, inatomic); break; } case kind_conditional: { conditional ce = CAST(conditional, expr); if (ce->condition->cst) { if (definite_zero(ce->condition)) sum += expression_size(ce->arg2, inatomic); else sum += expression_size(ce->arg1, inatomic); } else { sum += 2 + expression_size(ce->condition, inatomic); sum += expression_size(ce->arg1, inatomic); sum += expression_size(ce->arg2, inatomic); } break; } case kind_compound_expr: sum += statement_size(CAST(compound_expr, expr)->stmt, inatomic); break; case kind_function_call: { function_call fce = CAST(function_call, expr); sum += 1 + expression_size(fce->arg1, inatomic); sum += elist_size(fce->args, inatomic); break; } case kind_generic_call: { generic_call fce = CAST(generic_call, expr); sum += 1 + expression_size(fce->arg1, inatomic); sum += elist_size(fce->args, inatomic); break; } case kind_extension_expr: sum += expression_size(CAST(unary, expr)->arg1, inatomic); break; default: if (is_unary(expr)) sum += 1 + expression_size(CAST(unary, expr)->arg1, inatomic); else if (is_binary(expr)) { binary be = CAST(binary, expr); sum += 1 + expression_size(be->arg1, inatomic); sum += expression_size(be->arg2, inatomic); } else assert(0); break; } return sum; } static size_t statement_size(statement stmt, bool inatomic) { size_t sum = 0; if (!stmt) return 0; switch (stmt->kind) { case kind_asm_stmt: { sum += 1; /* A guess. Hard to count asm instructions. */ break; } case kind_compound_stmt: { compound_stmt cs = CAST(compound_stmt, stmt); statement s; declaration d; scan_declaration (d, cs->decls) if (is_data_decl(d)) { variable_decl vd; /* Include size of initialisers of non-static variables */ scan_variable_decl (vd, CAST(variable_decl, CAST(data_decl, d)->decls)) if (vd->ddecl->kind == decl_variable && vd->ddecl->vtype != variable_static) sum += 1 + expression_size(vd->arg1, inatomic); } scan_statement (s, cs->stmts) sum += statement_size(s, inatomic); break; } case kind_if_stmt: { if_stmt is = CAST(if_stmt, stmt); if (is->condition->cst) { if (definite_zero(is->condition)) sum += statement_size(is->stmt2, inatomic); else sum += statement_size(is->stmt1, inatomic); } else { sum += 2 + expression_size(is->condition, inatomic); sum += statement_size(is->stmt1, inatomic); sum += statement_size(is->stmt2, inatomic); } break; } case kind_labeled_stmt: { labeled_stmt ls = CAST(labeled_stmt, stmt); sum += statement_size(ls->stmt, inatomic); break; } case kind_atomic_stmt: { atomic_stmt ls = CAST(atomic_stmt, stmt); sum += statement_size(ls->stmt, inatomic); if (!inatomic) sum += 6; break; } case kind_expression_stmt: { expression_stmt es = CAST(expression_stmt, stmt); sum += expression_size(es->arg1, inatomic); break; } case kind_while_stmt: case kind_dowhile_stmt: case kind_switch_stmt: { conditional_stmt cs = CAST(conditional_stmt, stmt); if (cs->condition->cst && stmt->kind != kind_switch_stmt && definite_zero(cs->condition)) { /* do s while (0): just include size of s while (0) s: size is 0 */ if (stmt->kind == kind_dowhile_stmt) sum += statement_size(cs->stmt, inatomic); break; } sum += 2 + expression_size(cs->condition, inatomic); sum += statement_size(cs->stmt, inatomic); break; } case kind_for_stmt: { for_stmt fs = CAST(for_stmt, stmt); sum += 2 + statement_size(fs->stmt, inatomic); sum += expression_size(fs->arg1, inatomic); sum += expression_size(fs->arg2, inatomic); sum += expression_size(fs->arg3, inatomic); break; } case kind_break_stmt: case kind_continue_stmt: case kind_goto_stmt: sum += 1; break; case kind_empty_stmt: break; case kind_computed_goto_stmt: { computed_goto_stmt cgs = CAST(computed_goto_stmt, stmt); sum += 1 + expression_size(cgs->arg1, inatomic); break; } case kind_return_stmt: { return_stmt rs = CAST(return_stmt, stmt); sum += 1 + expression_size(rs->arg1, inatomic); break; } default: assert(0); } return sum; } static size_t function_size(function_decl fd) { return statement_size(fd->stmt, fd->ddecl->call_contexts == c_call_atomic); } static size_t typelist_length(typelist tl) { typelist_scanner tls; size_t count = 0; if (!tl) return 0; typelist_scan(tl, &tls); while (typelist_next(&tls)) count++; return count; } static size_t function_argcount(data_declaration ddecl) { size_t count = typelist_length(type_function_arguments(ddecl->type)); if (type_generic(ddecl->type)) count += typelist_length(type_function_arguments(type_function_return_type(ddecl->type))); return count; } static ggraph make_ig(region r, cgraph callgraph) { ggraph cg = cgraph_graph(callgraph); ggraph ig = new_graph(r); gnode n; graph_scan_nodes (n, cg) { /* Size should be at least 1 (because of the -1 in inline_function) */ data_declaration fn = NODE_GET(endp, n)->function; size_t fnsize = 1; if (fn->definition) fnsize = function_size(CAST(function_decl, fn->definition)); if (fn->interface && !fn->defined) { /* stub function. size is based on number of outgoing edges and number of parameters (first outgoing edge counted as "free") */ gedge e; int edgecount = 0; graph_scan_out (e, n) edgecount++; /* use size of default definition (already computed above) if no outgoing edges */ if (edgecount > 0) fnsize = (edgecount - 1) * (2 + function_argcount(fn)) + 1; } ig_add_fn(r, ig, fn, fnsize); } graph_scan_nodes (n, cg) { data_declaration fn = NODE_GET(endp, n)->function; gedge e; graph_scan_out (e, n) ig_add_edge(fn, NODE_GET(endp, graph_edge_to(e))->function); } return ig; } static void inline_function(gnode n, struct inline_node *in) { gedge call_edge, called_edge, next_edge; if (in->uninlinable || in->fn->noinlinep || in->fn->spontaneous) return; in->fn->makeinline = TRUE; /* Add callgraph edges implied by this inlining and update caller sizes */ graph_scan_in (call_edge, n) { gnode caller = graph_edge_from(call_edge); struct inline_node *caller_in = NODE_GET(struct inline_node *, caller); caller_in->size += in->size - 1; graph_scan_out (called_edge, n) { gnode called = graph_edge_to(called_edge); ig_add_edge(caller_in->fn, NODE_GET(struct inline_node *, called)->fn); } } /* Remove edges leaving inlined function (we don't bother removing incoming edges as we won't look at them again) */ called_edge = graph_first_edge_out(n); while (called_edge) { next_edge = graph_next_edge_out(called_edge); graph_remove_edge(called_edge); called_edge = next_edge; } } void inline_functions(cgraph callgraph) { region igr = newregion(); ggraph ig = make_ig(igr, callgraph); gnode n; int bis = base_inlineable_size, ipa = inline_per_arg; if (getenv("NESC_BIS")) bis = atoi(getenv("NESC_BIS")); if (getenv("NESC_IPA")) ipa = atoi(getenv("NESC_IPA")); if (flag_no_inline) return; /* Inline small fns and single-call fns */ graph_scan_nodes (n, ig) { struct inline_node *in = NODE_GET(struct inline_node *, n); if (!in->fn->isinline && !in->fn->makeinline) { gedge e; size_t edgecount = 0; graph_scan_in (e, n) edgecount++; if (edgecount == 1 || (bis >=0 && in->size <= bis + function_argcount(in->fn) * ipa)) inline_function(n, in); } } deleteregion(igr); } nescc-1.3.4/src/nesc-inline.h000066400000000000000000000014541177770303300157720ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_INLINE_H #define NESC_INLINE_H #include "nesc-cg.h" void inline_functions(cgraph callgraph); #endif nescc-1.3.4/src/nesc-interface.c000066400000000000000000000017571177770303300164550ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "nesc-interface.h" #include "nesc-semantics.h" #include "nesc-decls.h" #include "nesc-paths.h" #include "nesc-env.h" #include "semantics.h" #include "c-parse.h" #include "edit.h" void build_interface(region r, nesc_declaration idecl) { AST_set_parents(CAST(node, idecl->ast)); } nescc-1.3.4/src/nesc-interface.h000066400000000000000000000014531177770303300164530ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_INTERFACE_H #define NESC_INTERFACE_H void build_interface(region r, nesc_declaration idecl); #endif nescc-1.3.4/src/nesc-keywords.h000066400000000000000000000013101177770303300163520ustar00rootroot00000000000000K(abstract, ABSTRACT, RID_NESC) K(as, AS, RID_NESC) K(async, SCSPEC, RID_ASYNC | RID_NESC) K(call, CALL, RID_NESC) K(command, SCSPEC, RID_COMMAND | RID_NESC) K(components, COMPONENTS, RID_NESC) K(event, SCSPEC, RID_EVENT | RID_NESC) K(extends, EXTENDS, RID_NESC) K(implementation, IMPLEMENTATION, RID_NESC) K(new, NEW, RID_NESC) K(post, POST, RID_NESC) K(provides, PROVIDES, RID_NESC) K(signal, SIGNAL, RID_NESC) K(task, SCSPEC, RID_TASK | RID_NESC) K(uses, USES, RID_NESC) K(atomic, ATOMIC, NORID) K(component, COMPONENT, NORID) K(configuration, CONFIGURATION, NORID) K(generic, GENERIC, NORID) K(includes, INCLUDES, NORID) K(interface, INTERFACE, NORID) K(module, MODULE, NORID) K(norace, SCSPEC, RID_NORACE) nescc-1.3.4/src/nesc-magic.c000066400000000000000000000125151177770303300155670ustar00rootroot00000000000000#include #include "parser.h" #include "nesc-magic.h" #include "semantics.h" #include "AST_utils.h" #include "c-parse.h" #include "constants.h" #include "unparse.h" data_declaration magic_unique, magic_uniqueN, magic_uniqueCount; static data_declaration declare_magic(const char *name, type return_type, typelist argument_types, known_cst (*magic_fold)(function_call fcall, int pass)) { struct data_declaration tempdecl; type ftype = make_function_type(return_type, argument_types, FALSE, FALSE); init_data_declaration(&tempdecl, new_error_decl(parse_region, dummy_location), name, ftype); tempdecl.kind = decl_magic_function; tempdecl.magic_fold = magic_fold; tempdecl.ftype = function_normal; return declare(global_env, &tempdecl, FALSE); } data_declaration get_magic(function_call fcall) /* Returns: magic function called by fcall if it's a magic function call, NULL otherwise */ { if (is_identifier(fcall->arg1)) { identifier called = CAST(identifier, fcall->arg1); if (called->ddecl->kind == decl_magic_function) return called->ddecl; } return NULL; } known_cst fold_magic(function_call fcall, int pass) { data_declaration called = get_magic(fcall); if (called) { /* we can assume arguments are of valid type and number, check that they are constants in the parse phase */ if (pass == 0) { bool all_constant = TRUE; expression arg; int argn = 1; scan_expression (arg, fcall->args) { if (!arg->cst) { error("argument %d to magic function `%s' is not constant", argn, called->name); all_constant = FALSE; } argn++; } if (!all_constant) return NULL; } return called->magic_fold(fcall, pass); } return NULL; } static env unique_env; static region unique_region; static unsigned int *unique_parse(const char *uname, function_call fcall) { data_declaration name_ddecl = string_ddecl(fcall->args); unsigned int *lastval; char *name_str; location loc = fcall->location; if (!name_ddecl) { error_with_location(loc, "argument to `%s' must be a string", uname); return NULL; } name_str = ddecl2str(current.fileregion, name_ddecl); if (!name_str) { error_with_location(loc, "can't handle this string as argument to `%s'", uname); return NULL; } lastval = env_lookup(unique_env, name_str, FALSE); if (!lastval) { lastval = ralloc(unique_region, int); name_str = rstrdup(unique_region, name_str); env_add(unique_env, name_str, lastval); } return lastval; } static known_cst unique_fold(function_call fcall, int pass) { unsigned int *lastval; /* On pass 0, we don't know the value (and we can't even look for lastval yet, as we may be in a generic component passing a string argument to unique) On pass 1, we look for lastval and pick a value On subsequent passes, we stick to our choice */ if (pass == 0) return make_unknown_cst(cval_unknown_number, unsigned_int_type); lastval = unique_parse("unique", fcall); if (!lastval) return NULL; if (pass == 1) return make_unsigned_cst((*lastval)++, unsigned_int_type); else return fcall->cst; } static known_cst uniqueN_fold(function_call fcall, int pass) { unsigned int *lastval; /* On pass 0, we don't know the value (and we can't even look for lastval yet, as we may be in a generic component passing a string argument to unique) On pass 1, we look for lastval and pick a value On subsequent passes, we stick to our choice */ if (pass == 0) return make_unknown_cst(cval_unknown_number, unsigned_int_type); lastval = unique_parse("uniqueN", fcall); if (!lastval) return NULL; if (pass == 1) { known_cst n = CAST(expression, fcall->args->next)->cst; unsigned int val = *lastval; *lastval += constant_uint_value(n); return make_unsigned_cst(val, unsigned_int_type); } else return fcall->cst; } static known_cst uniqueCount_fold(function_call fcall, int pass) { unsigned int *lastval; /* On pass 0, we don't know the value (and we can't even look for lastval yet, as we may be in a generic component passing a string argument to uniqueCount) On pass 1, we still don't know (haven't seen all uniques) On pass 2 and subsequent, we get the value from the unique env */ if (pass < 2) return make_unknown_cst(cval_unknown_number, unsigned_int_type); lastval = unique_parse("uniqueCount", fcall); if (!lastval) return NULL; return make_unsigned_cst(*lastval, unsigned_int_type); } static void unique_init(void) { typelist string_args, string_int_args; string_args = new_typelist(parse_region); typelist_append(string_args, make_pointer_type(char_type)); magic_unique = declare_magic("unique", unsigned_int_type, string_args, unique_fold); string_int_args = new_typelist(parse_region); typelist_append(string_int_args, make_pointer_type(char_type)); typelist_append(string_int_args, unsigned_int_type); magic_uniqueN = declare_magic("uniqueN", unsigned_int_type, string_int_args, uniqueN_fold); magic_uniqueCount = declare_magic("uniqueCount", unsigned_int_type, string_args, uniqueCount_fold); unique_region = newregion(); unique_env = new_env(unique_region, NULL); } void init_magic_functions(void) { unique_init(); } nescc-1.3.4/src/nesc-magic.h000066400000000000000000000011201177770303300155620ustar00rootroot00000000000000/* Magic function support. Magic functions are constant folded at compile-time, all their arguments must be constants (or string constants). They are used to pick unique numbers for generic interfaces, lookup active message types, etc */ #ifndef NESC_MAGIC_H #define NESC_MAGIC_H extern data_declaration magic_unique, magic_uniqueCount; void init_magic_functions(void); data_declaration get_magic(function_call fcall); /* Returns: magic function called by fcall if it's a magic function call, NULL otherwise */ known_cst fold_magic(function_call fcall, int pass); #endif nescc-1.3.4/src/nesc-main.c000066400000000000000000000274141177770303300154370ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include "parser.h" #include "semantics.h" #include "nesc-env.h" #include "nesc-decls.h" #include "nesc-cg.h" #include "nesc-paths.h" #include "nesc-c.h" #include "nesc-interface.h" #include "nesc-component.h" #include "c-parse.h" #include "nesc-generate.h" #include "nesc-doc.h" #include "nesc-semantics.h" #include "nesc-cpp.h" #include "nesc-msg.h" #include "nesc-magic.h" #include "nesc-uses.h" #include "nesc-abstract.h" #include "nesc-attributes.h" #include "nesc-constants.h" #include "nesc-dump.h" #include "nesc-network.h" #include "nesc-task.h" #include "nesc-deputy.h" #include "edit.h" #include "machine.h" #include "nesc-atomic.h" #include "unparse.h" #include "nesc-main.h" /* The set of C files to require before loading the main component */ struct ilist { struct ilist *next; char *name; bool name_is_path; }; static struct ilist *includelist, **includelist_end = &includelist; static region includeregion; void add_nesc_include(const char *name, bool name_is_path) { struct ilist *np; if (!includeregion) includeregion = newregion(); np = ralloc(includeregion, struct ilist); np->next = NULL; np->name = rstrdup(includeregion, name); np->name_is_path = name_is_path; *includelist_end = np; includelist_end = &np->next; } /* Adds the component graph 'component' to the whole program graph 'master' */ static void connect_graph(cgraph master, cgraph component) { ggraph cg = cgraph_graph(component); gnode n; gedge connection; /* Add all edges from component to master */ graph_scan_nodes (n, cg) { endp from = NODE_GET(endp, n); gnode mfrom = endpoint_lookup(master, from); graph_scan_out (connection, n) { endp to = NODE_GET(endp, graph_edge_to(connection)); gnode mto = endpoint_lookup(master, to); graph_add_edge(mfrom, mto, EDGE_GET(location, connection)); } } } static void connect(location loc, nesc_declaration cdecl, cgraph cg, cgraph userg, dd_list modules, dd_list components) { nesc_declaration loop; if ((loop = abstract_recursion())) { /* We can help the programmer find the loop by showing the instantiation path that causes it. loop's instance name is a prefix of cdecl's, the looping path is loop's abstract component name followed by the difference between loop's and cdecl's instance name. */ error_with_location(loc, "component instantiation loop `%s%s'", original_component(loop)->name, cdecl->instance_name + strlen(loop->instance_name)); } else if (!dd_find(components, cdecl)) { dd_add_last(regionof(components), components, cdecl); connect_graph(cg, cdecl->connections); connect_graph(userg, cdecl->user_connections); if (!cdecl->configuration) dd_add_last(regionof(modules), modules, cdecl); else { configuration c = CAST(configuration, cdecl->impl); declaration d; scan_declaration (d, c->decls) if (is_component_ref(d)) { component_ref comp = CAST(component_ref, d); push_instance(comp->cdecl); if (comp->cdecl->original) instantiate(comp->cdecl, comp->args); connect(comp->location, comp->cdecl, cg, userg, modules, components); pop_instance(); } } } } static void connect_graphs(region r, nesc_declaration program, nesc_declaration scheduler, cgraph *cg, cgraph *userg, dd_list *modules, dd_list *components) { *cg = new_cgraph(r); *userg = new_cgraph(r); *modules = dd_new_list(r); *components = dd_new_list(r); push_instance(program); connect(toplevel_location, program, *cg, *userg, *modules, *components); if (scheduler) connect(toplevel_location, scheduler, *cg, *userg, *modules, *components); pop_instance(); } int nesc_option(char *p) { if (p[0] != '-') return FALSE; /* Skip optional (make gcc 3.x happy) initial _ added by ncc */ if (p[1] == '_') p += 2; else p += 1; /* Yes, using here strlen is evil. But who *really* cares? */ if (!strncmp (p, "fnesc-nido-tosnodes=", strlen("fnesc-nido-tosnodes="))) { nido_num_nodes = p + strlen("fnesc-nido-tosnodes="); } else if (!strncmp (p, "fnesc-nido-motenumber=", strlen("fnesc-nido-motenumber="))) { nido_mote_number = p + strlen("fnesc-nido-motenumber="); } else if (!strncmp (p, "fnesc-include=", strlen("fnesc-include="))) { add_nesc_include(p + strlen("fnesc-include="), FALSE); } else if (!strncmp (p, "fnesc-path=", strlen("fnesc-path="))) { add_nesc_path(p + strlen("fnesc-path="), CHAIN_BRACKET); } else if (!strncmp (p, "fnesc-msg=", strlen("fnesc-msg="))) { select_nesc_msg(p + strlen("fnesc-msg=")); } else if (!strcmp (p, "fnesc-csts")) { select_nesc_csts(); } else if (!strncmp (p, "fnesc-dump=", strlen("fnesc-dump="))) { select_dump(p + strlen("fnesc-dump=")); } else if (!strncmp (p, "fnesc-dumpfile=", strlen("fnesc-dumpfile="))) { select_dumpfile(p + strlen("fnesc-dumpfile=")); } else if (!strncmp (p, "fnesc-target=", strlen("fnesc-target="))) { select_target(p + strlen("fnesc-target=")); } else if (!strcmp (p, "fnesc-simulate")) { use_nido = TRUE; } else if (!strncmp (p, "fnesc-gcc=", strlen("fnesc-gcc="))) { target_compiler = p + strlen("fnesc-gcc="); } else if (!strcmp (p, "fnesc-mingw-gcc")) { flag_mingw_gcc = 1; } else if (!strcmp (p, "fnesc-no-debug")) { flag_no_debug = 1; } else if (!strcmp (p, "fnesc-no-inline")) { flag_no_inline++; } else if (!strcmp (p, "fnesc-verbose")) { flag_verbose = 2; } else if (!strcmp (p, "fnesc-save-macros")) { flag_save_macros = 1; } else if (!strncmp (p, "fnesc-scheduler=", strlen("fnesc-scheduler="))) { set_scheduler(p + strlen("fnesc-scheduler=")); } else if (!strncmp (p, "fnesc-docdir=", strlen("fnesc-docdir="))) { doc_set_outdir(p + strlen("fnesc-docdir=")); } else if (!strncmp (p, "fnesc-topdir=", strlen("fnesc-topdir="))) { doc_add_topdir(p + strlen("fnesc-topdir=")); } else if (!strncmp (p, "fnesc-is-app", strlen("fnesc-is-app"))) { doc_is_app(TRUE); } else if (!strncmp (p, "fnesc-docs-use-graphviz", strlen("fnesc-docs-use-graphviz"))) { doc_use_graphviz(TRUE); } else if (!strcmp (p, "fnesc-optimize-atomic")) nesc_optimise_atomic = 1; else if (!strncmp (p, "fnesc-genprefix=", strlen("fnesc-genprefix="))) unparse_prefix(p + strlen("fnesc-genprefix=")); else if (!strcmp (p, "fnesc-deputy")) flag_deputy = 1; else if (!strcmp (p, "fnesc-no-deputy")) flag_deputy = 0; else if (!strcmp (p, "fnesc-default-safe")) flag_default_safe = 1; else if (!strcmp (p, "fnesc-default-unsafe")) flag_default_safe = 0; else if (!strcmp (p, "fnesc-gccize")) flag_gccize = 1; else if (!strcmp (p, "Wnesc-docstring")) warn_unexpected_docstring = 1; else if (!strcmp (p, "Wno-nesc-docstring")) warn_unexpected_docstring = 0; else if (!strcmp (p, "Wnesc-fnptr")) warn_fnptr = 1; else if (!strcmp (p, "Wno-nesc-fnptr")) warn_fnptr = 0; else if (!strcmp (p, "Wnesc-data-race")) warn_data_race = 1; else if (!strcmp (p, "Wno-nesc-data-race")) warn_data_race = 0; else if (!strcmp (p, "Wnesc-async")) warn_async = 1; else if (!strcmp (p, "Wno-nesc-async")) warn_async = 0; else if (!strcmp (p, "Wnesc-combine")) warn_no_combiner = 1; else if (!strcmp (p, "Wno-nesc-combine")) warn_no_combiner = 0; else if (!strcmp (p, "Wnesc-all")) warn_data_race = warn_fnptr = warn_async = warn_no_combiner = 1; else if (!strcmp (p, "Wnesc-error")) nesc_error = TRUE; else if (!strncmp(p, "fnesc-diff=", strlen("fnesc-diff="))) { char *dirs = p + 11, *comma = strchr(dirs, ','); /* , or only for original */ if (comma) { diff_input = rstralloc(permanent, comma - dirs + 1); strncpy(diff_input, dirs, comma - dirs); diff_input[comma - dirs] = '\0'; diff_output = comma + 1; } else diff_output = dirs; } else if (!strncmp(p, "fnesc-separator=", strlen("fnesc-separator="))) set_function_separator(p + 16); else if (!strncmp(p, "fnesc-cppdir=", strlen("fnesc-cppdir="))) save_pp_dir(p + 13); else return FALSE; return TRUE; } static void destroy_target(const char *name) { if (name) { /* unlink would be nicer, but would have nasty consequences for -o /dev/null when run by root... */ int fd = creat(name, 0666); if (fd < 0) { fprintf(stderr, "%s: ", name); perror("failed to truncate target"); } else close(fd); } } void nesc_compile(const char *filename, const char *target_name) { struct ilist *includes; nesc_declaration program = NULL; bool gencode = FALSE; cgraph cg = NULL, userg = NULL; dd_list modules = NULL, components = NULL; if (filename == NULL) { fprintf(stderr, "usage: nesc1 \n"); return; } parse_region = newregion(); preprocess_init(); init_nesc_attributes(); cval_init(); init_types(); init_lex(); init_semantics(); init_nesc_env(parse_region); init_magic_functions(); init_uses(); init_abstract(); init_nesc_constants(); init_network(); init_internal_nesc_attributes(); init_isatomic(); init_deputy(); if (target->init) target->init(); for (includes = includelist; includes; includes = includes->next) if (includes->name_is_path) load_c(toplevel_location, includes->name, TRUE); else require_c(toplevel_location, includes->name); if (flag_use_scheduler) load_scheduler(); if (nesc_filename(filename)) /* We need to assume some language - it will get fixed once we see the actual file */ program = load(l_any, toplevel_location, filename, TRUE); else { flag_c = TRUE; load_c(toplevel_location, filename, TRUE); } if (errorcount) return; if (program && program->kind == l_component && !program->abstract) { connect_graphs(parse_region, program, scheduler, &cg, &userg, &modules, &components); if (errorcount) return; current.container = NULL; fold_program(program, scheduler); gencode = TRUE; } else /* The "program" is a C file, interface or abstract component */ fold_program(NULL, NULL); if (errorcount) return; /* Destroy target in all circumstances (prevents surprises when "compiling" interfaces) */ destroy_target(target_name); if (docs_requested()) { if (generic_used) error("documentation system does not yet support generic components and interfaces"); else if (program) generate_docs(filename, cg); else error("documentation requested on a C file "); gencode = FALSE; } if (layout_requested()) { dump_msg_layout(); gencode = FALSE; } if (dump_selected()) dump_info(program, cg, userg, modules, components); if (gencode) generate_c_code(target_name, program, cg, modules, components); else if (flag_c) generate_c_code(target_name, NULL, new_cgraph(permanent), dd_new_list(permanent), dd_new_list(permanent)); } nescc-1.3.4/src/nesc-main.h000066400000000000000000000017601177770303300154400ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_MAIN_H #define NESC_MAIN_H void add_nesc_include(const char *name, bool name_is_path); void nesc_compile(const char *component_name, const char *target_name); int nesc_option(char *p); /* Effects: If p is a nesC option, set flags appropriately. Returns: TRUE iff p was a nesC option */ #endif nescc-1.3.4/src/nesc-module.c000066400000000000000000000056611177770303300160000ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "nesc-module.h" #include "nesc-configuration.h" #include "nesc-component.h" #include "c-parse.h" #include "expr.h" #include "semantics.h" #include "nesc-semantics.h" #include "nesc-task.h" expression make_generic_call(location loc, expression iref, expression args) { expression result = CAST(expression, new_generic_call(parse_region, loc, iref, args)); check_arguments(iref->type, args, get_function_ddecl(iref), TRUE); result->type = type_function_return_type(iref->type); return result; } word make_word(location l, cstring s) { return new_word(parse_region, l, s); } declarator make_interface_ref_declarator(location l, cstring w1, cstring w2) { identifier_declarator id = new_identifier_declarator(parse_region, l, w2); return CAST(declarator, new_interface_ref_declarator(parse_region, l, CAST(declarator, id), make_word(l, w1))); } expression make_interface_deref(location loc, expression object, cstring field) { interface_deref result; data_declaration iref = type_iref(object->type); data_declaration fdecl = interface_lookup(iref, field.data); result = new_interface_deref(parse_region, loc, object, field, fdecl); if (!fdecl) { error("interface has no command or event named `%s'", field.data); result->type = error_type; } else result->type = fdecl->type; return CAST(expression, result); } /* Check that function fndecl (from the module's external interface) is implemented. */ static void check_function_implemented(data_declaration fndecl, void *data) { location *loc = data; data_declaration idecl = fndecl->interface; assert(fndecl->kind == decl_function); if (fndecl->defined && !fndecl->definition) { if (idecl) error_with_location(*loc, "`%s.%s' not implemented", idecl->name, fndecl->name); else error_with_location(*loc, "`%s' not implemented", fndecl->name); } } /* Checks that all defined functions of the modules are implemented */ static void check_complete_implementation(module m) { component_functions_iterate(m->cdecl, check_function_implemented, &m->location); } void process_module(module m) { check_complete_implementation(m); /* Add wires to graph for tasks */ wire_scheduler(m); } nescc-1.3.4/src/nesc-module.h000066400000000000000000000017731177770303300160050ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_MODULE_H #define NESC_MODULE_H expression make_generic_call(location loc, expression iref, expression args); declarator make_interface_ref_declarator(location l, cstring w1, cstring w2); expression make_interface_deref(location loc, expression object, cstring field); void process_module(module c); #endif nescc-1.3.4/src/nesc-msg.c000066400000000000000000000125531177770303300152770ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "parser.h" #include "nesc-msg.h" #include "semantics.h" #include "constants.h" #include "c-parse.h" #include "AST_utils.h" static const char *selected_type; static bool print_csts; void select_nesc_msg(const char *name) { selected_type = name; } void select_nesc_csts(void) { print_csts = TRUE; } static void dump_type(type t) { if (type_complex(t)) { printf("C"); t = make_base_type(t); } if (type_network_base_type(t)) printf("N%s", type_networkdef(t)->name); /* Enums treated as ints for now */ else if (type_integer(t)) if (type_unsigned(t)) printf("U"); else printf("I"); else if (type_float(t)) printf("F"); else if (type_double(t)) printf("D"); else if (type_long_double(t)) printf("LD"); else if (type_union(t)) if (type_network(t)) printf("ANU"); else printf("AU"); else if (type_struct(t)) if (type_network(t)) printf("ANS"); else printf("AS"); else if (type_pointer(t)) printf("U"); else assert(0); } static void dump_fields(region r, const char *prefix, field_declaration fields) { while (fields) { if (fields->name) /* skip anon fields */ { type t = fields->type; printf(" %s%s ", prefix, fields->name); while (type_array(t)) { type base = type_array_of(t); expression size = type_array_size(t); printf("[%lu]", (unsigned long)constant_uint_value(size->cst)); t = base; } dump_type(t); assert(cval_isinteger(fields->offset)); printf(" %lu %lu\n", (unsigned long)cval_uint_value(fields->offset), (unsigned long) (!cval_istop(fields->bitwidth) ? cval_uint_value(fields->bitwidth) : BITSPERBYTE * cval_uint_value(type_size(t)))); if (type_aggregate(t)) { tag_declaration tdecl = type_tag(t); char *newprefix = rarrayalloc(r, strlen(prefix) + strlen(fields->name) + 2, char); sprintf(newprefix, "%s%s.", prefix, fields->name); dump_fields(r, newprefix, tdecl->fieldlist); printf(" %s%s AX\n", prefix, fields->name); } } fields = fields->next; } } static known_cst constant_value(const char *name) { data_declaration decl; static struct known_cst bad_value; decl = lookup_global_id(name); if (decl && decl->kind == decl_constant) return decl->value; bad_value.type = error_type; return &bad_value; } static int am_type(region r, tag_declaration tdecl) { char *am_name = rarrayalloc(r, strlen(tdecl->name) + 4, char), *s; known_cst am_val; sprintf(am_name, "AM_%s", tdecl->name); for (s = am_name; *s; s++) *s = toupper(*s); am_val = constant_value(am_name); if (type_integer(am_val->type) && cval_knownvalue(am_val->cval)) return constant_sint_value(am_val); fprintf(stderr, "warning: Cannot determine AM type for %s\n", selected_type); fprintf(stderr, " (Looking for definition of %s)\n", am_name); return -1; } static void dump_layout(tag_declaration tdecl) { region r = newregion(); printf("%s %s %lu %d\n", tagkind_name(tdecl->kind), tdecl->name, (unsigned long)cval_uint_value(tdecl->size), am_type(r, tdecl)); dump_fields(r, "", tdecl->fieldlist); deleteregion(r); } bool layout_requested(void) { return selected_type || print_csts; } void dump_msg_layout(void) { tag_declaration tdecl; /* We look for a tagged type with name selected_type in the global environment, and dump the layout in a perl-friendly format. We also dump any requested constants. */ if (selected_type) { tdecl = env_lookup(global_env->tag_env, selected_type, FALSE); if (!tdecl) { fprintf(stderr, "error: tag %s not found\n", selected_type); exit(1); } if (tdecl->kind == kind_enum_ref) { fprintf(stderr, "error: %s is an enum\n", selected_type); exit(1); } if (cval_istop(tdecl->size)) { fprintf(stderr, "error: %s is variable size\n", selected_type); exit(1); } if (type_contains_pointers(make_tagged_type(tdecl))) { fprintf(stderr, "warning: %s contains pointers\n", selected_type); } dump_layout(tdecl); } if (print_csts) { env_scanner scan_global; const char *name; void *vdecl; env_scan(global_env->id_env, &scan_global); while (env_next(&scan_global, &name, &vdecl)) { data_declaration ddecl = vdecl; if (ddecl->kind == decl_constant) { known_cst val = ddecl->value; printf("%s \"%s\" ", name, ddecl->definition->location->filename); dump_type(val->type); putchar(' '); if (cval_knownvalue(val->cval)) cval_print(stdout, val->cval); else puts(" UNKNOWN"); putchar('\n'); } } } } nescc-1.3.4/src/nesc-msg.h000066400000000000000000000015461177770303300153040ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_MSG_H #define NESC_MSG_H void select_nesc_msg(const char *name); void select_nesc_csts(void); bool layout_requested(void); void dump_msg_layout(void); #endif nescc-1.3.4/src/nesc-ndoc.c000066400000000000000000000224401177770303300154300ustar00rootroot00000000000000#include #include "parser.h" #include "nesc-ndoc.h" #include "c-parse.h" #include "semantics.h" #include "AST_utils.h" static char *rmakestr(region r, char *s, char *e) { int l = e - s; char *news = rstralloc(r, l + 1); news[l] = '\0'; memcpy(news, s, l); return news; } static void save_doctag(location loc, region entries_r, dd_list *entries, char *tag_s, char *tag_e, char *arg_s, char *arg_e, int lineno) { if (entries) { struct doctag *dtag = typed_ralloc(entries_r, sizeof(struct doctag) + sizeof(const char *), rctypeof(struct doctag)); dtag->lineno = lineno; dtag->tag = rmakestr(entries_r, tag_s, tag_e); dtag->args[0] = rmakestr(entries_r, arg_s, arg_e); dd_add_last(entries_r, *entries, dtag); } else { /* warn about ignored quoted arguments that normally have semantic significance */ struct location here = *loc; here.lineno += lineno; warning_with_location(&here, "@%s argument ignored", rmakestr(current.fileregion, tag_s, tag_e)); } } bool get_latest_docstring(struct docstring *doc, region tags_r, dd_list *tags) { enum { s_linestart, s_normal, s_doctag, s_docarg_start, s_docarg } state; const char *raw, *r; char *parsed, *p, *short_end, *doctag, *doctag_end, *docarg; bool cpp_comment; int lineno; char c; location loc; if (!get_raw_docstring(&raw, &loc)) return FALSE; if (warn_unexpected_docstring && doc->short_s) { warning_with_location(loc, "duplicate documentation string"); warning_with_location(doc->loc, "(this is the location of the previous documentation string)"); } doc->loc = loc; doc->long_s = NULL; if (tags) *tags = dd_new_list(tags_r); parsed = alloca(strlen(raw) + 1); /* Prepare to parse raw */ cpp_comment = raw[1] == '/'; if (cpp_comment) r = raw; else r = raw + 2; p = parsed; lineno = 0; state = s_linestart; short_end = NULL; while ((c = *r++)) { if (state == s_linestart) { if (isspace(c) || (cpp_comment && c == '/')) continue; state = s_normal; /* Skip one * in C-style comments (we've cleared line_start, so won't do this twice) */ if (!cpp_comment && c == '*') continue; } if (c == '\r' || c == '\n') { if (state == s_docarg) { /* warn about broken quoted arguments, as they have semantic significance */ struct location here = *loc; here.lineno += lineno; warning_with_location(&here, "unterminated @%s argument ignored", rmakestr(current.fileregion, doctag, doctag_end)); } *p++ = '\n'; lineno++; state = s_linestart; continue; } /* Skip trailing / in C-style comments */ if (!cpp_comment && c == '/' && !*r) break; *p++ = c; /* Space after . or space before @ indicates end of short doc string */ if (!short_end) { if (c == '.' && isspace(*r)) short_end = p; else if (c == '@' && p - 2 >= parsed && isspace(p[-2])) short_end = p - 1; if (short_end) doc->short_s = rmakestr(parse_region, parsed, short_end); } /* Extract tags with a fun state machine */ redo: switch (state) { case s_normal: if (c == '@' && p - 2 >= parsed && isspace(p[-2])) { doctag = p; state = s_doctag; } break; case s_doctag: if (!isalpha(c)) /* doctag keyword done, decide if we like it */ { /* Currently we like all non-empty doctags and assume they might have up to one quoted argument - filtering is left to our caller. This might want to change if we get into fancier syntax for doctag arguments with semantic significance */ if (p - 1 > doctag) /* not empty */ { doctag_end = p - 1; state = s_docarg_start; } else state = s_normal; goto redo; } break; case s_docarg_start: if (isspace(c)) ; else if (c == '\'') { docarg = p; state = s_docarg; } else { state = s_normal; goto redo; } break; case s_docarg: if (c == '\'') { save_doctag(loc, tags_r, tags, doctag, doctag_end, docarg, p - 1, lineno); state = s_normal; } break; default: assert(0); break; } } if (short_end) { /* if there's only whitespace after short_end, then there's no long string */ while (*short_end && isspace(*short_end)) short_end++; if (*short_end) doc->long_s = rmakestr(parse_region, parsed, p); } else /* only a short string */ doc->short_s = rmakestr(parse_region, parsed, p); return TRUE; } static void update_parameters(function_declarator fd) { node *parm = CASTPTR(node, &fd->parms); while (*parm) { if (is_data_decl(*parm)) /* skip errors */ { /* The ddecl points to the variable_decl of the new definition. New variable_decls have a parent field pointing to their containing data_decl (from the call to AST_set_parents below). Use this to update the declaration list. */ data_decl pd = CAST(data_decl, *parm); variable_decl vd = CAST(variable_decl, pd->decls); if (vd->ddecl) { node newdecl = vd->ddecl->ast->parent; /* We also ignore forward parameter declarations (gcc ext) */ if (!vd->forward && newdecl) { newdecl->next = (*parm)->next; *parm = CAST(node, newdecl); } } } parm = &(*parm)->next; } } static void enforce_redeclaration(node newdecl) { if (is_data_decl(newdecl)) { variable_decl vd = CAST(variable_decl, CAST(data_decl, newdecl)->decls); if (vd->ddecl->definition == vd->ddecl->ast) error("%s is not a function parameter", vd->ddecl->name); } } void ignored_doctag(location docloc, struct doctag *tag) { struct location tagloc = *docloc; tagloc.lineno += tag->lineno; warning_with_location(&tagloc, "@%s tag ignored", tag->tag); } void ignored_doctags(location docloc, dd_list tags) { dd_list_pos stags; dd_scan (stags, tags) ignored_doctag(docloc, DD_GET(struct doctag *, stags)); } void handle_ddecl_doc_tags(location docloc, data_declaration ddecl, dd_list tags) { declarator d; declaration ast; if (!tags) return; if (!type_functional(ddecl->type)) { ignored_doctags(docloc, tags); return; } ast = ddecl->ast; if (is_function_decl(ast)) d = CAST(function_decl, ast)->declarator; else d = CAST(variable_decl, ast)->declarator; handle_fdecl_doc_tags(docloc, ddecl, get_fdeclarator(d), tags); } void handle_fdecl_doc_tags(location docloc, data_declaration ddecl, function_declarator fd, dd_list tags) { struct semantic_state old; struct location cloc; dd_list_pos stags; if (!tags || !fd) return; old = current; cloc = current.lex.input->l; current.env = fd->env; allow_parameter_redeclaration(fd->parms, FALSE); dd_scan (stags, tags) { struct doctag *tag = DD_GET(struct doctag *, stags); struct location tagloc = *docloc; node parsed; tagloc.lineno += tag->lineno; if (!strcmp(tag->tag, "param")) { int old_errorcount = errorcount; start_lex_string(l_parameter, tag->args[0]); set_lex_location(&tagloc); parsed = parse(); AST_set_parents(parsed); /* Type errors in redeclaration confuse the redeclaration check, and we've already failed compilation anyway */ if (errorcount == old_errorcount) enforce_redeclaration(parsed); end_lex(); } else if (!strcmp(tag->tag, "return")) { if (fd->return_type) warning_with_location(&tagloc, "duplicate @return tag ignored"); else { start_lex_string(l_type, tag->args[0]); set_lex_location(&tagloc); parsed = parse(); end_lex(); if (parsed) { fd->return_type = CAST(asttype, parsed); if (!type_equal(type_function_return_type(ddecl->type), fd->return_type->type)) error("inconsistent return type in @return tag"); } } } else ignored_doctag(docloc, tag); } update_parameters(fd); current = old; set_lex_location(&cloc); } #ifdef TESTING char doc_string[65536]; struct location dummy = { "", NULL, 1 }; bool get_raw_docstring(const char **docs, location *docl) { *docs = doc_string; *docl = &dummy; return TRUE; } region parse_region; /* Report warning msg at l */ void vwarning_with_location(location l, const char *format, va_list args) { fprintf(stderr, "%s:%lu: ", l->filename, l->lineno); fprintf(stderr, "warning: "); vfprintf(stderr, format, args); putc('\n', stderr); } /* Report warning msg at l */ void warning_with_location(location l, const char *format, ...) { va_list args; va_start(args, format); vwarning_with_location(l, format, args); va_end(args); } struct semantic_state current; int warn_unexpected_docstring; int region_main(int argc, char **argv) { struct docstring doc = { NULL, NULL, NULL }; dd_list tags; dd_list_pos e; if (argc != 1) return 2; current.fileregion = parse_region = newregion(); fread(doc_string, sizeof doc_string, 1, stdin); get_latest_docstring(&doc, permanent, &tags); printf("short: %s\n", doc.short_s); printf("long: %s\n", doc.long_s ? doc.long_s : ""); dd_scan (e, tags) { struct doctag *dtag = DD_GET(struct doctag *, e); printf("at %d: %s is %s\n", dtag->lineno, dtag->tag, dtag->args[0]); } return 0; } #endif nescc-1.3.4/src/nesc-ndoc.h000066400000000000000000000030451177770303300154350ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2008 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_NDOC_H #define NESC_NDOC_H struct docstring { const char *short_s, *long_s; location loc; }; struct doctag { int lineno; /* relative to start of string, first line=0 */ const char *tag; /* @param, @result, etc */ const char *args[]; /* arguments to key: @param(1): parameter name or declaration @result(1): result type or empty string */ }; bool get_latest_docstring(struct docstring *doc, region tags_r, dd_list *tags); struct data_declaration; struct AST_function_declarator; void handle_ddecl_doc_tags(location docloc, struct data_declaration *ddecl, dd_list tags); void handle_fdecl_doc_tags(location docloc, struct data_declaration *ddecl, struct AST_function_declarator *fd, dd_list tags); void ignored_doctag(location docloc, struct doctag *tag); void ignored_doctags(location docloc, dd_list tags); #endif nescc-1.3.4/src/nesc-network.c000066400000000000000000000346161177770303300162060ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "constants.h" #include "nesc-network.h" #include "nesc-semantics.h" #include "AST_utils.h" #include "AST_walk.h" #include "c-parse.h" #include "edit.h" #include "unparse.h" #include "nesc-uses.h" static type uchar_ptr_type; static bool network_bitfield(expression e) { if (is_field_ref(e) && type_network_base_type(e->type)) { field_ref fref = CAST(field_ref, e); field_declaration fdecl = fref->fdecl; return !cval_istop(fdecl->bitwidth); } return FALSE; } static void xtox_used(data_declaration transcoderfn, function_decl fn) { data_declaration fdecl = fn ? fn->ddecl : NULL; ddecl_used(transcoderfn, new_use(dummy_location, fdecl, c_executable | c_fncall)); } static void hton_used(expression e, function_decl fn) { data_declaration ntdef = type_networkdef(e->type); if (network_bitfield(e)) xtox_used(ntdef->bf_encoder, fn); else xtox_used(ntdef->encoder, fn); } static void ntoh_used(expression e, function_decl fn) { data_declaration ntdef = type_networkdef(e->type); if (network_bitfield(e)) xtox_used(ntdef->bf_decoder, fn); else xtox_used(ntdef->decoder, fn); } static void validate_network_lvalue(expression e) { conditional cond; if ((cond = conditional_lvalue(e)) && (type_network_base_type(cond->arg1->type) || type_network_base_type(cond->arg2->type))) error_with_location(e->location, "Conditional assignment not supported for network types"); } /* Check if expression e is of network base type. Parameters whose address is not taken are actually of the base type (this should be extended to all local vars whose address is not taken, but currently isn't) */ static bool really_network_base(expression e) { if (is_identifier(e)) { identifier id = CAST(identifier, e); data_declaration ddecl = id->ddecl; if (ddecl->kind == decl_variable && ddecl->isparameter && !(ddecl->use_summary & c_addressed)) return FALSE; } return e->type && type_network_base_type(e->type); } static data_declaration add_network_temporary(function_decl fn, type t) { /* See Weird hack comment in prt_network_assignment */ if (fn) return add_temporary(parse_region, CAST(compound_stmt, fn->stmt), t); else return NULL; } static AST_walker_result network_expression(AST_walker spec, void *data, expression *n) { expression e = *n; function_decl fn = data; if (really_network_base(e) && (e->context & c_read) && !(e->context & c_write)) ntoh_used(e, fn); return aw_walk; } static AST_walker_result network_assignment(AST_walker spec, void *data, assignment *n) { assignment a = *n; function_decl fn = data; if (really_network_base(a->arg1)) { if (a->kind != kind_assign) /* op= reads too */ { ntoh_used(a->arg1, fn); /* See problem/ugly hack comment in network_increment */ /* op= needs a temp */ if (!a->temp1) a->temp1 = add_network_temporary(fn, uchar_ptr_type); } hton_used(a->arg1, fn); } validate_network_lvalue(a->arg1); return aw_walk; } static AST_walker_result network_increment(AST_walker spec, void *data, increment *n) { increment i = *n; function_decl fn = data; if (really_network_base(i->arg1)) { ntoh_used(i->arg1, fn); hton_used(i->arg1, fn); /* Problem: adding the declarations for the temporaries changes the AST as we're walking through it. If we add a temporary while walking through the first declaration, we'll revisit this declaration. Oops. Ugly hack fix: don't create the temporaries if they've already been created. Note that this could lead to duplicate error messages from validate_network_lvalue, but that's for use of a deprecated gcc feature which is going away soon. */ if (!i->temp1) { /* we use 2 temps */ i->temp1 = add_network_temporary(fn, uchar_ptr_type); i->temp2 = add_network_temporary(fn, type_network_platform_type(i->type)); } } validate_network_lvalue(i->arg1); return aw_walk; } static AST_walker_result network_fdecl(AST_walker spec, void *data, function_decl *fd) { AST_walk_children(spec, *fd, CAST(node, *fd)); return aw_done; } /* An AST walker that does network type processing on the AST */ static AST_walker network_walker; static void init_network_walker(void) { network_walker = new_AST_walker(parse_region); AST_walker_handle(network_walker, kind_expression, network_expression); AST_walker_handle(network_walker, kind_increment, network_increment); AST_walker_handle(network_walker, kind_assignment, network_assignment); AST_walker_handle(network_walker, kind_function_decl, network_fdecl); } void handle_network_types(declaration decls) { node n = CAST(node, decls); AST_walk_list(network_walker, NULL, &n); } static void output_hton(type t) { output_string(type_networkdef(t)->encoder->name); } static void output_ntoh(type t) { output_string(type_networkdef(t)->decoder->name); } static void output_hton_bf(type t) { output_string(type_networkdef(t)->bf_encoder->name); } static void output_ntoh_bf(type t) { output_string(type_networkdef(t)->bf_decoder->name); } static void output_hton_expr(expression e) { if (network_bitfield(e)) output_hton_bf(e->type); else output_hton(e->type); } static void output_ntoh_expr(expression e) { if (network_bitfield(e)) output_ntoh_bf(e->type); else output_ntoh(e->type); } /* Print a network lvalue, return TRUE if it's a bitfield (in which case the field name is not printed) */ static bool prt_network_lvalue(expression e) { bool isbf = network_bitfield(e); if (isbf) { /* Network bitfields have no name in the generated code. Just print the structure. We'll add the offset and size later. */ output("(unsigned char *)&"); prt_expression(CAST(field_ref, e)->arg1, P_CALL); } else { prt_expression_helper(e, P_CALL); output(".nxdata"); } return isbf; } static void prt_network_bitfield_info(expression e) { field_ref fref = CAST(field_ref, e); field_declaration fdecl = fref->fdecl; output(", %llu, %llu", cval_uint_value(fdecl->offset), cval_uint_value(fdecl->bitwidth)); } static void prt_network_full_lvalue(expression e) { if (prt_network_lvalue(e)) prt_network_bitfield_info(e); } static bool prt_network_assignment(expression e) { char *selfassign = NULL; assignment a; if (!(is_assignment(e) && really_network_base((CAST(assignment, e))->arg1))) return FALSE; a = CAST(assignment, e); switch (e->kind) { case kind_plus_assign: selfassign = "+"; break; case kind_minus_assign: selfassign = "-"; break; case kind_times_assign: selfassign = "*"; break; case kind_divide_assign: selfassign = "/"; break; case kind_lshift_assign: selfassign = "<<"; break; case kind_rshift_assign: selfassign = ">>"; break; case kind_bitand_assign: selfassign = "&"; break; case kind_bitor_assign: selfassign = "|"; break; case kind_bitxor_assign: selfassign = "^"; break; default: break; } /* Weird hack: when temp1 is not set, this op= is outside a function, i.e., in something like a sizeof. We can just pretend it's a regular assignment. */ if (selfassign && !a->temp1) selfassign = NULL; set_location(e->location); if (selfassign) { const char *temp = a->temp1->name; bool bitfield; output("(%s = ", temp); bitfield = prt_network_lvalue(a->arg1); output(", "); output_hton_expr(a->arg1); output("(%s", temp); if (bitfield) prt_network_bitfield_info(a->arg1); output(", "); output_ntoh_expr(a->arg1); output("(%s", temp); if (bitfield) prt_network_bitfield_info(a->arg1); output(") %s ", selfassign); prt_expression(a->arg2, P_TIMES); output("))"); } else { output_hton_expr(a->arg1); output("("); prt_network_full_lvalue(a->arg1); output(", "); prt_expression(a->arg2, P_ASSIGN); output(")"); } return TRUE; } static bool prt_network_increment(expression e) { increment i; const char *temp; char incop; bool bitfield; if (!(is_increment(e) && really_network_base((CAST(increment, e))->arg1))) return FALSE; i = CAST(increment, e); temp = i->temp1->name; incop = i->kind == kind_preincrement || i->kind == kind_postincrement ? '+' : '-'; /* pre-op: (t1 = &e, HTON(t1, (t2 = NTOH(t1) +/- 1)), t2) post-op: (t1 = &e, HTON(t1, (t2 = NTOH(t1)) +/- 1), t2) */ set_location(i->location); output("(%s = ", temp); bitfield = prt_network_lvalue(i->arg1); output(", "); output_hton_expr(i->arg1); output("(%s", temp); if (bitfield) prt_network_bitfield_info(i->arg1); output(", "); output("(%s = ", i->temp2->name); output_ntoh_expr(i->arg1); output("(%s", temp); if (bitfield) prt_network_bitfield_info(i->arg1); if (i->kind == kind_postincrement || i->kind == kind_postdecrement) output(")) %c 1)", incop); else output(") %c 1))", incop); output(", %s)", i->temp2->name); return TRUE; } static bool prt_network_read(expression e) { if (!(really_network_base(e) && (e->context & c_read) && !(e->context & c_write))) return FALSE; output_ntoh_expr(e); output("("); prt_network_full_lvalue(e); output(")"); return TRUE; } bool prt_network_expression(expression e) { return prt_network_read(e) || prt_network_assignment(e) || prt_network_increment(e); } bool prt_network_typedef(data_decl d, variable_decl vd) { if (vd->ddecl->kind == decl_typedef && vd->ddecl->basetype) { /* A Network base type typedef */ type basetype = vd->ddecl->basetype; if (!type_size_cc(basetype) && cval_isinteger(type_size(basetype))) error_with_location(vd->location, "network base type `%s' is of unknown size", vd->ddecl->name); else { set_location(vd->location); output("typedef struct { unsigned char nxdata[%d]; } __attribute__((packed)) %s;", (int)type_size_int(basetype), vd->ddecl->name); } return TRUE; } return FALSE; } static bool prt_network_parameter_copy(declaration parm, bool copies, bool init) { if (is_data_decl(parm)) { data_decl dd = CAST(data_decl, parm); variable_decl vd = CAST(variable_decl, dd->decls); data_declaration ddecl = vd->ddecl; if (ddecl && type_network_base_type(ddecl->type) && (ddecl->use_summary & c_addressed)) { /* We need a real network type copy. */ if (!init) { if (!copies) { outputln("{"); indent(); } prt_data_decl(dd); } else { output_hton(ddecl->type); outputln("(%s.nxdata, %s%s);", ddecl->name, NXBASE_PREFIX, ddecl->name); } return TRUE; } } return copies; } /* Network base type parameters are passed as their underlying type. Thus we need to copy them to a real network base type variable if their address is taken */ bool prt_network_parameter_copies(function_decl fn) { function_declarator fd = get_fdeclarator(fn->declarator); declaration d; bool copies = FALSE; scan_declaration (d, fd->gparms) copies = prt_network_parameter_copy(d, copies, FALSE); scan_declaration (d, fd->parms) copies = prt_network_parameter_copy(d, copies, FALSE); scan_declaration (d, fd->gparms) prt_network_parameter_copy(d, copies, TRUE); scan_declaration (d, fd->parms) prt_network_parameter_copy(d, copies, TRUE); return copies; } static unsigned long filler_count; struct network_state { size_t offset; bool isextension; }; static void network_align_to(largest_uint offset, struct network_state *ns) { if (ns->offset < offset) /* There's a gap. Fill it. */ outputln("unsigned char __nesc_filler%lu[%llu];", filler_count++, offset - ns->offset); } void prt_network_field_data_decl(data_decl d, struct network_state *ns) { declaration fd; psd_options opts = 0; type_element interesting; scan_declaration (fd, d->decls) { field_decl fdd = CAST(field_decl, fd); field_declaration fdecl = fdd->fdecl; /* bitfields just show up as filler */ if (cval_istop(fdecl->bitwidth)) { if (!cval_isinteger(fdecl->offset)) error_with_location(fdd->location, "unsupported network type"); else { largest_uint offset = cval_uint_value(fdecl->offset) / BITSPERBYTE; network_align_to(offset, ns); if (type_size_cc(fdecl->type)) ns->offset = offset + type_size_int(fdecl->type); } if (ns->isextension) output("__extension__ "); prt_type_elements(d->modifiers, opts); opts |= psd_duplicate; prt_field_decl(fdd); outputln(";"); } } /* If there's an unnamed struct/union field, we need to print it and account for its size in ns */ if (!(opts & psd_duplicate)) scan_type_element (interesting, d->modifiers) if (is_tag_ref(interesting)) { tag_ref tr = CAST(tag_ref, interesting); prt_type_element(interesting, opts); outputln(";"); if (cval_isinteger(tr->tdecl->size)) ns->offset += cval_uint_value(tr->tdecl->size); } } void prt_network_field_declaration(declaration d, struct network_state *ns) { ns->isextension = FALSE; while (is_extension_decl(d)) { ns->isextension = TRUE; d = CAST(extension_decl, d)->decl; } prt_network_field_data_decl(CAST(data_decl, d), ns); } void prt_network_fields(tag_ref tref) { declaration d; struct network_state ns = { 0, FALSE }; output(" {"); indent(); startline(); scan_declaration (d, tref->fields) prt_network_field_declaration(d, &ns); if (cval_isinteger(tref->tdecl->size)) network_align_to(cval_uint_value(tref->tdecl->size), &ns); unindent(); startline(); output("} __attribute__((packed))"); } void init_network(void) { init_network_walker(); uchar_ptr_type = make_pointer_type(unsigned_char_type); } nescc-1.3.4/src/nesc-network.h000066400000000000000000000021431177770303300162010ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_NETWORK_H /* Prefix for non-network version of network base types */ #define NXBASE_PREFIX "__nesc_nxbase_" void handle_network_types(declaration decls); void init_network(void); void prt_network_fields(tag_ref tref); void prt_network_routines(void); bool prt_network_expression(expression e); bool prt_network_typedef(data_decl d, variable_decl vd); bool prt_network_parameter_copies(function_decl fn); #endif nescc-1.3.4/src/nesc-paths.c000066400000000000000000000124501177770303300156240ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002-2008 Intel Corporation This file also includes code from gcc that is Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include #include #include "nesc-paths.h" #include "semantics.h" #include "gcc-cpp.h" /* Locate components/interfaces from their name */ static region pathregion; /* Include chains heads and tails. */ static struct cpp_dir *heads[4]; static struct cpp_dir *tails[4]; static bool include_current_dir; static int maxdirlen; static char *canonicalise(region r, const char *path, int len) { int newlen = len + 1; char *cp; if (len == 0) return ""; if (path[len - 1] != '/' #ifdef DIR_SEPARATOR && path[len - 1] != DIR_SEPARATOR #endif ) newlen++; cp = rarrayalloc(r, newlen, char); memcpy(cp, path, len); cp[newlen - 2] = '/'; /* make sure last char is / */ cp[newlen - 1] = '\0'; /* null terminate */ unixify_path(cp); return cp; } /* Handle -I- */ static void add_minus(region r) { if (!include_current_dir) error("-I- specified twice"); include_current_dir = FALSE; heads[CHAIN_QUOTE] = heads[CHAIN_BRACKET]; tails[CHAIN_QUOTE] = tails[CHAIN_BRACKET]; heads[CHAIN_BRACKET] = NULL; tails[CHAIN_BRACKET] = NULL; } static void add_dir(region r, const char *path, int len, int chain) { cpp_dir *np = ralloc(r, struct cpp_dir); int l; np->next = NULL; np->name = canonicalise(r, path, len);; np->sysp = chain == CHAIN_SYSTEM || chain == CHAIN_AFTER; np->construct = 0; np->user_supplied_p = 1; /* appears unused */ if (tails[chain]) tails[chain]->next = np; else heads[chain] = np; tails[chain] = np; l = strlen(np->name); if (l > maxdirlen) maxdirlen = l; } void add_nesc_dir(const char *path, int chain) { if (!strcmp(path, "-")) add_minus(pathregion); else add_dir(pathregion, path, strlen(path), chain); } static bool file_exists(const char *fullname) { struct stat sbuf; return stat(fullname, &sbuf) == 0 && S_ISREG(sbuf.st_mode); } static const char *find_file(char *filename) { char *fullname = alloca(maxdirlen + strlen(filename) + 1); struct cpp_dir *p; if (include_current_dir && file_exists(filename)) return ""; for (p = heads[CHAIN_QUOTE]; p; p = p->next) { sprintf(fullname, "%s%s", p->name, filename); if (file_exists(fullname)) return p->name; } return NULL; } static void build_search_path(region r, const char *pathlist, int chain) { if (pathlist) { char *colon; while ((colon = strchr(pathlist, ':'))) { *colon = '\0'; add_dir(r, pathlist, colon - pathlist, chain); pathlist = colon + 1; } add_dir(r, pathlist, strlen(pathlist), chain); } } void init_nesc_paths_start(region r) { include_current_dir = TRUE; maxdirlen = 0; pathregion = r; } void add_nesc_path(const char *path, int chain) { build_search_path(pathregion, path, chain); } static void join(int c1, int c2) { if (heads[c1]) tails[c1]->next = heads[c2]; else heads[c1] = heads[c2]; } void init_nesc_paths_end(void) { add_nesc_path(getenv("NESCPATH"), CHAIN_BRACKET); join(CHAIN_SYSTEM, CHAIN_AFTER); join(CHAIN_BRACKET, CHAIN_SYSTEM); join(CHAIN_QUOTE, CHAIN_BRACKET); /* If verbose, print the list of dirs to search. */ if (flag_verbose) { struct cpp_dir *p; fprintf (stderr, "#include \"...\" and component search starts here:\n"); for (p = heads[CHAIN_QUOTE];; p = p->next) { if (p == heads[CHAIN_BRACKET]) fprintf (stderr, "#include <...> search starts here:\n"); if (!p) break; fprintf (stderr, " %s\n", p->name); } fprintf (stderr, "End of search list.\n"); } } void set_cpp_include_path(void) { cpp_reader *reader = current.lex.finput; cpp_set_include_chains(reader, heads[CHAIN_QUOTE], heads[CHAIN_BRACKET], !include_current_dir); } #define MAX_EXT_LEN 2 const char *find_nesc_file(region r, source_language l, const char *name) { int filename_len = strlen(name) + MAX_EXT_LEN + 2; char *filename = alloca(filename_len); const char *dirname; int fullname_len; char *fullname; strcpy(filename, name); switch (l) { case l_interface: strcat(filename, ".nc"); break; case l_component: strcat(filename, ".nc"); break; case l_c: strcat(filename, ".h"); break; default: assert(0); break; } dirname = find_file(filename); if (!dirname) return NULL; fullname_len = strlen(dirname) + filename_len; fullname = rarrayalloc(r, fullname_len, char); sprintf(fullname, "%s%s", dirname, filename); return fullname; } nescc-1.3.4/src/nesc-paths.h000066400000000000000000000021631177770303300156310ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_PATHS_H #define NESC_PATHS_H /* Locate components/interfaces from their name */ enum { CHAIN_QUOTE, CHAIN_BRACKET, CHAIN_SYSTEM, CHAIN_AFTER }; void init_nesc_paths_start(region r); void add_nesc_path(const char *path, int chain); void add_nesc_dir(const char *path, int chain); void init_nesc_paths_end(void); void set_cpp_include_path(void); const char *find_nesc_file(region r, source_language l, const char *name); #endif nescc-1.3.4/src/nesc-semantics.c000066400000000000000000000533341177770303300165010ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "nesc-semantics.h" #include "semantics.h" #include "nesc-decls.h" #include "c-parse.h" #include "AST_utils.h" #include "nesc-paths.h" #include "nesc-cpp.h" #include "nesc-env.h" #include "nesc-component.h" #include "nesc-interface.h" #include "edit.h" #include "c-parse.h" #include "semantics.h" #include "nesc-attributes.h" #include "attributes.h" #include "init.h" #include "unparse.h" #include "nesc-deputy.h" #include #include bool nesc_attributep(gcc_attribute a) /* Returns: TRUE if a is a nesc-specific attribute */ { const char *name = a->word1->cstring.data; return !strcmp(name, "C") || !strcmp(name, "spontaneous") || !strcmp(name, "combine") || !strcmp(name, "nx_base") || !strcmp(name, "nx_base_le") || !strcmp(name, "nx_base_be") || !strcmp(name, "hwevent") || !strcmp(name, "atomic_hwevent"); } type get_actual_function_type(type t) /* Returns: The actual function type for a (possibly generic) type t representing the type of a function/command/event */ { if (type_generic(t)) return type_function_return_type(t); else return t; } function_declarator ddecl_get_fdeclarator(data_declaration fndecl) /* Effects: Returns fndecl's function_declarator Requires: fndecl represent a function or function pointer */ { declarator fd; if (is_variable_decl(fndecl->ast)) fd = CAST(variable_decl, fndecl->ast)->declarator; else fd = CAST(function_decl, fndecl->ast)->declarator; return get_fdeclarator(fd); } declaration ddecl_get_gparms(data_declaration fndecl) /* Effects: Returns the declaration list for fndecl's generic parameters Requires: fndecl represent a function or function pointer */ { /* For functions in interfaces we get them from the interface ref */ if (fndecl->kind == decl_function && fndecl->interface) return CAST(interface_ref, fndecl->interface->ast)->gparms; /* Otherwise we get them from the function's declarator */ return ddecl_get_fdeclarator(fndecl)->gparms; } bool ddecl_is_command_or_event(data_declaration decl) { return decl->kind == decl_function && (decl->ftype == function_event || decl->ftype == function_command); } bool nesc_filename(const char *name) { char *dot = strrchr(lbasename(name), '.'); if (dot) { if (!strcmp(dot, ".nc")) return TRUE; } return FALSE; /* C by default */ } const char *element_name(region r, const char *path) /* Returns: Return the "identifier part" of path, i.e., remove any directory and extension The returned string is allocated in region r. */ { const char *base, *dot; base = lbasename(path); dot = strrchr(base, '.'); if (dot) { /* Extract id */ char *copy = rarrayalloc(r, dot - base + 1, char); memcpy(copy, base, dot - base); copy[dot - base] = '\0'; return copy; } else return rstrdup(r, base); } const char *language_name(source_language l) { switch (l) { case l_interface: return "interface"; case l_component: case l_implementation: return "component"; case l_c: return "C file"; case l_any: return ""; default: assert(0); return "BUG"; } } node compile(location loc, nesc_declaration container, const char *name, bool name_is_path) { source_language l = container ? container->kind : l_c; const char *path = name_is_path ? name : find_nesc_file(parse_region, l, name); node parse_tree = NULL; struct semantic_state old_semantic_state = current; bool ok; if (!path) error_with_location(loc, "%s %s not found", language_name(l), name); else { if (flag_verbose) fprintf(stderr, "preprocessing %s\n", path); current.file = container; current.fileregion = newregion(); start_semantics(l_c, NULL, global_env); ok = start_lex(l, path); save_pp_file_start(path); if (!ok) error_with_location(loc, "failed to preprocess %s", path); else parse_tree = parse(); deleteregion_ptr(¤t.fileregion); end_lex(); save_pp_file_end(); } current = old_semantic_state; return parse_tree; } nesc_decl dummy_nesc_decl(location loc, nesc_declaration d) { word wname = build_word(parse_region, d->name); nesc_decl nd; switch (d->kind) { case l_component: { environment env = new_environment(parse_region, global_env, TRUE, FALSE); implementation impl = CAST(implementation, new_module(parse_region, loc, env, NULL)); nd = CAST(nesc_decl, new_component(parse_region, dummy_location, wname, NULL, FALSE, NULL, NULL, impl)); break; } case l_interface: nd = CAST(nesc_decl, new_interface(parse_region, loc, wname, NULL, NULL)); break; default: assert(0); nd = NULL; break; } d->ast = nd; nd->cdecl = d; build(nd); return nd; } void build(nesc_decl ast) { struct semantic_state old_semantic_state = current; nesc_declaration decl = ast->cdecl; current.container = decl; resolve_deputy_scopes(ast); switch (decl->kind) { case l_interface: build_interface(parse_region, decl); break; case l_component: build_component(parse_region, decl); break; default: assert(0); } current = old_semantic_state; } nesc_declaration load(source_language sl, location l, const char *name, bool name_is_path) { /* The l_any stuff is a bit of a hack. It's for use from nesc-main.c only, to allow loading something whose "kind" is not yet known. When using l_any, the global environment will record "name" as being a component, but the returned declaration may be a component or interface. */ const char *element = name_is_path ? element_name(parse_region, name) : name; const char *actual_name; node ptree; nesc_decl ast = NULL; nesc_declaration decl = new_nesc_declaration(parse_region, sl == l_any ? l_component : sl, element); /* We don't get duplicates as we only load on demand */ nesc_declare(decl); ptree = compile(l, decl, name, name_is_path); if (ptree) { bool badkind; ast = CAST(nesc_decl, ptree); build(ast); actual_name = ast->word1->cstring.data; badkind = sl != l_any && ast->cdecl->kind != sl; if (badkind || strcmp(element, actual_name)) warning_or_error_with_location(!badkind, ast->location, "expected %s `%s', but got %s '%s'", language_name(sl), element, language_name(ast->cdecl->kind), actual_name); /* Force creation of dummy AST if we get wrong kind (this avoids a duplicate error message in require) */ if (badkind) ast = NULL; } if (!ast) ast = dummy_nesc_decl(new_location(name, 0), decl); return ast->cdecl; /* can be different from decl when sl == l_any */ } nesc_declaration start_nesc_entity(source_language sl, word name) { nesc_declaration decl; /* If the kind of entity in the file matches the expected kind (passed to load), reuse the existing declaration. Otherwise make a temporary one to use while loading the file */ if (sl == current.file->kind) decl = current.file; else decl = new_nesc_declaration(parse_region, sl, name->cstring.data); get_latest_docstring(&decl->doc, permanent, NULL); start_semantics(sl, decl, decl->env); return decl; } bool is_module_local_static(data_declaration ddecl) { return ddecl->kind == decl_variable && (ddecl->vtype == variable_static && ddecl->container_function && ddecl->container_function->container); } bool is_module_variable(data_declaration ddecl) { return ddecl->kind == decl_variable && ddecl->Cname == FALSE && /* top-level module var or local static module var */ (ddecl->container || is_module_local_static(ddecl)); } nesc_declaration ddecl_container(data_declaration ddecl) { while (ddecl->container_function) ddecl = ddecl->container_function; return ddecl->container; } nesc_declaration tdecl_container(tag_declaration tdecl) { #if 0 if (tdecl->container_function) return ddecl_container(tdecl->container_function); else #endif return tdecl->container; } const char *make_intf_printname(const char *iname, const char *fname) /* Returns: string "iname.fname" allocated in current.fileregion */ { size_t ilen = strlen(iname); size_t dlen = strlen(fname); char *fullname = rstralloc(current.fileregion, ilen + dlen + 2); memcpy(fullname, iname, ilen); fullname[ilen] = '.'; strcpy(fullname + ilen + 1, fname); return fullname; } const char *decl_printname(data_declaration ddecl) { if (ddecl_is_command_or_event(ddecl) && ddecl->interface) return make_intf_printname(ddecl->interface->name, ddecl->name); else return ddecl->name; } data_declaration get_function_ddecl(expression e) /* Returns: If e denotes a specific function, return its data_declaration Otherwise return NULL */ { if (is_identifier(e)) { identifier id = CAST(identifier, e); if (id->ddecl->kind == decl_function) return id->ddecl; } else if (is_interface_deref(e)) return CAST(interface_deref, e)->ddecl; return NULL; } data_declaration declare_function(location loc, const char *name, type signature) /* Effects: If 'name' is already declared, check that it is a function with the specified signature. If it isn't declared, declare it as a function with the specified signature. Returns: data_declaration for the function, or NULL if an error was reported to the user. */ { data_declaration fdecl; bool ok = FALSE; /* If function already declared, declaration should match signature. If not, we declare it with given signature */ fdecl = lookup_id(name, FALSE); if (fdecl) { if (fdecl->kind != decl_function || !(fdecl->ftype == function_normal || fdecl->ftype == function_static)) error_with_location(loc, "function `%s' is not a C function", name); else if (!type_compatible_unqualified(fdecl->type, signature)) error_with_location(loc, "function `%s' does not have the right signature", name); else ok = TRUE; } else { struct data_declaration tempdecl; declaration dummy = make_error_decl(); /* Declare function */ dummy->location = loc; init_data_declaration(&tempdecl, dummy, name, signature); tempdecl.kind = decl_function; tempdecl.ftype = function_normal; tempdecl.isexternalscope = tempdecl.isfilescoperef = TRUE; fdecl = declare(current.env, &tempdecl, FALSE); ok = TRUE; } return ok ? fdecl : NULL; } void handle_combine_attribute(location loc, const char *combiner, type *t) { data_declaration cdecl = declare_function(loc, combiner, build_function_type(parse_region, *t, *t, *t, NULL)); if (cdecl) *t = make_combiner_type(*t, cdecl); } void handle_nxbase_attribute(location loc, bool be, bool allow_bf, const char *basename, data_declaration ddecl) { region r = parse_region; char *encoder_name, *decoder_name; type t = ddecl->type; encoder_name = rstralloc(r, strlen(basename) + 13); sprintf(encoder_name, "__nesc_hton_%s", basename); decoder_name = rstralloc(r, strlen(basename) + 13); sprintf(decoder_name, "__nesc_ntoh_%s", basename); ddecl->encoder = /* takes buffer and original value. returns original value */ declare_function(loc, encoder_name, build_function_type(r, t, ptr_void_type, t, NULL)); ddecl->decoder = /* takes buffer and returns decoded value */ declare_function(loc, decoder_name, build_function_type(r, t, const_ptr_void_type, NULL)); if (allow_bf) { encoder_name = rstralloc(r, strlen(basename) + 15); sprintf(encoder_name, "__nesc_htonbf_%s", basename); decoder_name = rstralloc(r, strlen(basename) + 15); sprintf(decoder_name, "__nesc_ntohbf_%s", basename); /* bitfields take additional offset, length fields */ ddecl->bf_encoder = declare_function(loc, encoder_name, build_function_type(r, t, ptr_void_type, unsigned_int_type, unsigned_char_type, t, NULL)); ddecl->bf_decoder = declare_function(loc, decoder_name, build_function_type(r, t, const_ptr_void_type, unsigned_int_type, unsigned_char_type, NULL)); } ddecl->isbe = be; /* We do this even if we got an error, to ensure ddecl gets treated as a network type. */ ddecl->basetype = t; } /* Create definition for template parameter 'elements d' with attributes attributes. Returns the declaration for the parameter. */ declaration declare_template_parameter(declarator d, type_element elements, attribute attributes) { /* There must be at least a declarator or some form of type specification */ location l = d ? d->location : elements->location; variable_decl vd = new_variable_decl(parse_region, l, d, attributes, NULL, NULL, NULL); data_decl dd = new_data_decl(parse_region, l, elements, CAST(declaration, vd)); data_declaration ddecl = NULL, old_decl = NULL; struct data_declaration tempdecl; dd_list extra_attr; int class; scflags scf; const char *name; bool defaulted_int; type parm_type; parse_declarator(elements, vd->declarator, FALSE, FALSE, &class, &scf, NULL, &name, &parm_type, &defaulted_int, NULL, &extra_attr); vd->declared_type = parm_type; /* Storage class checks */ if (class) { /* Detect "typedef t", to declare a type parameter */ if (class == RID_TYPEDEF && defaulted_int && is_identifier_declarator(d)) return declare_type_parameter(d->location, CAST(identifier_declarator, d)->cstring, attributes, extra_attr); else if (class == RID_TYPEDEF && d == NULL) { /* Recognise "typedef TYPENAME", and declare TYPENAME as a type parameter (i.e., we're shadowing a global typedef) */ type_element elem; typename tname; bool ok = TRUE; /* Check there's only a typedef and a typename */ scan_type_element (elem, elements) if (is_typename(elem)) tname = CAST(typename, elem); else if (!(is_attribute(elem) || (is_rid(elem) && CAST(rid, elem)->id == RID_TYPEDEF))) ok = FALSE; if (ok && tname) { cstring cname = make_cstring(parse_region, tname->ddecl->name, strlen(tname->ddecl->name)); return declare_type_parameter(l, cname, attributes, extra_attr); } } } if (!name) error("no name specified for parameter"); else if (class) error("storage class specified for parameter `%s'", name); check_variable_scflags(scf, vd->location, "parameter", name); /* Allow real, integral and string types. Not allowing complex for now, though it would be a trivial extension */ if (!(type_real(parm_type) || type_chararray(parm_type, TRUE))) error("only char [] and arithmetic types allowed as component arguments"); if (type_array(parm_type)) /* Transfer const-ness of array into that of type pointed to. */ parm_type = make_pointer_type(qualify_type1(type_array_of(parm_type), parm_type)); init_data_declaration(&tempdecl, CAST(declaration, vd), name, parm_type); tempdecl.kind = decl_constant; tempdecl.substitute = TRUE; tempdecl.definition = tempdecl.ast; old_decl = lookup_id(tempdecl.name, TRUE); if (old_decl && duplicate_decls(&tempdecl, old_decl, FALSE, FALSE)) ddecl = old_decl; else ddecl = declare(current.env, &tempdecl, FALSE); vd->ddecl = ddecl; ignored_dd_attributes(extra_attr); ignored_attributes(attributes); return CAST(declaration, dd); } declaration declare_type_parameter(location l, cstring id, attribute attribs, dd_list extra_attr) { type_parm_decl d = new_type_parm_decl(parse_region, l, id, NULL); data_declaration ddecl; if ((ddecl = lookup_id(id.data, TRUE))) error("duplicate parameter name `%s' in parameter list", id.data); else { struct data_declaration tempdecl; init_data_declaration(&tempdecl, CAST(declaration, d), id.data, error_type); tempdecl.kind = decl_typedef; tempdecl.typevar_kind = typevar_normal; tempdecl.definition = tempdecl.ast; handle_decl_attributes(attribs, &tempdecl); handle_decl_dd_attributes(extra_attr, &tempdecl); ddecl = declare(current.env, &tempdecl, FALSE); ddecl->type = make_variable_type(ddecl); } d->ddecl = ddecl; return CAST(declaration, d); } expression make_type_argument(asttype t) { type_argument e = new_type_argument(parse_region, t->location, t); e->type = t->type; return CAST(expression, e); } nesc_declaration original_component(nesc_declaration c) { while (c->original) c = c->original; return c; } static void attr_C_tdecl(nesc_attribute attr, tag_declaration tdecl) { if (tdecl->container_function) error_with_location(attr->location, "`@C()' is for symbols with external scope only"); else if (current.container && current.container->abstract) error_with_location(attr->location, "@C() cannot be used inside generic components"); else tdecl->Cname = TRUE; } static void attr_C_decl(nesc_attribute attr, data_declaration ddecl) { if (!ddecl->isexternalscope) error_with_location(attr->location, "`@C()' is for symbols with external scope only"); else if (current.container && current.container->abstract) error_with_location(attr->location, "@C() cannot be used inside generic components"); else ddecl->Cname = TRUE; } static bool require_function(nesc_attribute attr, data_declaration ddecl) { if (ddecl->kind == decl_function && ddecl->ftype == function_normal) return TRUE; error_with_location(attr->location, "`@%s()' is for external functions only", attr->word1->cstring.data); return FALSE; } static void attr_hwevent_decl(nesc_attribute attr, data_declaration ddecl) { if (require_function(attr, ddecl)) { ddecl->async = TRUE; ddecl->spontaneous = c_call_nonatomic; } } static void attr_atomic_hwevent_decl(nesc_attribute attr, data_declaration ddecl) { if (require_function(attr, ddecl)) { ddecl->async = TRUE; ddecl->spontaneous = c_call_atomic; } } static void attr_spontaneous_decl(nesc_attribute attr, data_declaration ddecl) { if (require_function(attr, ddecl)) { /* The test avoids overriding the effect of atomic_hwevent */ if (!ddecl->spontaneous) ddecl->spontaneous = c_call_nonatomic; } } static void attr_combine_decl(nesc_attribute attr, data_declaration ddecl) { ivalue fn_init = lookup_attribute_field(attr, "fn"); data_declaration fn_name_ddecl; char *fn_name; if (fn_init && fn_init->kind == iv_base && (fn_name_ddecl = string_ddecl(fn_init->u.base.expr)) && (fn_name = ddecl2str(parse_region, fn_name_ddecl))) { if (ddecl->kind == decl_typedef) handle_combine_attribute(attr->location, fn_name, &ddecl->type); else error_with_location(attr->location, "@combine(\"function-name\") can only be used with typedef"); } else error_with_location(attr->location, "usage is @combine(\"function-name\")"); } static void attr_macro_tdecl(nesc_attribute attr, tag_declaration tdecl) { ivalue macro_name_init = lookup_attribute_field(attr, "macro_name"); data_declaration macro_name_ddecl; char *macro_name, *m; if (tdecl->kind != kind_attribute_ref) { error_with_location(attr->location, "@macro() can only be applied to attribute declarations"); return; } if (!(macro_name_init && macro_name_init->kind == iv_base && (macro_name_ddecl = string_ddecl(macro_name_init->u.base.expr)) && (macro_name = ddecl2str(parse_region, macro_name_ddecl)))) goto bad; /* Check that the symbol name is a valid macro name (C symbol) */ if (!(isalpha(macro_name[0]) || macro_name[0] == '_')) goto bad; for (m = macro_name + 1; *m; m++) if (!(isalnum(*m) || *m == '_')) goto bad; tdecl->macro_name = macro_name; return; bad: error_with_location(attr->location, "usage is @macro(\"macro-name\")"); } void init_internal_nesc_attributes(void) { define_internal_attribute("C", NULL, attr_C_decl, attr_C_tdecl, NULL, NULL, NULL); define_internal_attribute("hwevent", NULL, attr_hwevent_decl, NULL, NULL, NULL, NULL); define_internal_attribute("atomic_hwevent", NULL, attr_atomic_hwevent_decl, NULL, NULL, NULL, NULL); define_internal_attribute("spontaneous", NULL, attr_spontaneous_decl, NULL, NULL, NULL, NULL); define_internal_attribute("combine", NULL, attr_combine_decl, NULL, NULL, NULL, "fn", make_pointer_type(char_type), NULL); define_internal_attribute("macro", NULL, NULL, attr_macro_tdecl, NULL, NULL, "macro_name", make_pointer_type(char_type), NULL); } void check_name(const char *name) { const char *occ, *sep = get_function_separator(); int lsep = strlen(sep); /* Ignore leading instances of the separator */ while (!strncmp(name, sep, lsep)) name++; occ = strstr(name, sep); if (!occ) return; /* Ignore trailing instances of the separator */ while (occ[lsep] && !strncmp(occ + 1, sep, lsep)) occ++; if (occ[lsep]) { static int first = 1; warning("symbol `%s' contains the separator `%s' used in generated code", name, sep); if (first) { warning("This can cause bugs or compile errors when the C code"); warning("generated by nesC is passed to the underlying C compiler"); first = FALSE; } } } nescc-1.3.4/src/nesc-semantics.h000066400000000000000000000114641177770303300165040ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_SEMANTICS_H #define NESC_SEMANTICS_H struct environment; #include "nesc-decls.h" void init_internal_nesc_attributes(void); /* Effects: Define internal nesC @-style attributes */ bool nesc_filename(const char *name); const char *element_name(region r, const char *path); /* Returns: Return the "identifier part" of path, i.e., remove any directory and extension The returned string is allocated in region r. */ node compile(location loc, nesc_declaration container, const char *name, bool name_is_path); nesc_declaration load(source_language sl, location l, const char *name, bool name_is_path); type get_actual_function_type(type t); /* Returns: The actual function type for a (possibly generic) type t representing the type of a function/command/event */ function_declarator ddecl_get_fdeclarator(data_declaration fndecl); /* Effects: Returns fndecl's function_declarator Requires: fndecl represent a function */ declaration ddecl_get_gparms(data_declaration fndecl); /* Effects: Returns the declaration list for fndecl's generic parameters Requires: fndecl represent a function */ bool ddecl_is_command_or_event(data_declaration decl); bool nesc_attributep(gcc_attribute a); /* Returns: TRUE if a is a nesc-specific attribute */ const char *language_name(source_language l); nesc_decl dummy_nesc_decl(location loc, nesc_declaration ndecl); void build(nesc_decl ast); nesc_declaration start_nesc_entity(source_language sl, word name); bool is_module_variable(data_declaration ddecl); /* Returns: TRUE if ddecl is a module variable (this includes is_module_local_static) */ bool is_module_local_static(data_declaration ddecl); /* Returns: TRUE if ddecl is a local static variable inside a module */ const char *make_intf_printname(const char *iname, const char *fname); /* Returns: string "iname.fname" allocated in current.fileregion */ const char *decl_printname(data_declaration ddecl); /* Returns: The printable name for ddecl (interface.name for commands or events in interfaces, just the name otherwise) Any necessary memory is allocated in current.fileregion */ data_declaration get_function_ddecl(expression e); /* Returns: If e denotes a specific function, return its data_declaration Otherwise return NULL */ void handle_combine_attribute(location loc, const char *combiner, type *t); /* Effects: handle combine attribute specifying function 'combiner', modifying *t as appropriate */ void handle_nxbase_attribute(location loc, bool be, bool allow_bf, const char *fnbasename, data_declaration ddecl); /* Effects: handle network type attribute specifying functions ntoh_fnbasename and hton_fnbasename as the decoding and encoding functions respectively. If allow_bf is true, then ntohbf_fnbasename and htonbf_fnbasename are the bitfield decoding and encoding functions repsectively. If be is true, this is a big endian type (transitions between big and little-endian bitfields cause alignemnt to the next byte inside a struct). Modifies ddecl to reflect it's status as a base network type. */ declaration declare_template_parameter(declarator d, type_element elements, attribute attributes); declaration declare_type_parameter(location l, cstring id, attribute attribs, dd_list extra_attr); expression make_type_argument(asttype t); nesc_declaration original_component(nesc_declaration c); /* Some macros to make nesc_error easier to deal with */ #define nesc_warning (nesc_error ? error : warning) #define nesc_warning_with_location (nesc_error ? error_with_location : warning_with_location) data_declaration declare_function(location loc, const char *name, type signature); /* Effects: If 'name' is already declared, check that it is a function with the specified signature. If it isn't declared, declare it as a function with the specified signature. Returns: data_declaration for the function, or NULL if an error was reported to the user. */ nesc_declaration ddecl_container(data_declaration ddecl); nesc_declaration tdecl_container(tag_declaration tdecl); void check_name(const char *name); #endif nescc-1.3.4/src/nesc-task.c000066400000000000000000000303601177770303300154470ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "constants.h" #include "nesc-task.h" #include "nesc-semantics.h" #include "nesc-component.h" #include "nesc-configuration.h" #include "semantics.h" #include "AST_utils.h" #include "c-parse.h" #include "nesc-cg.h" #include "nesc-c.h" #include "nesc-magic.h" #include "edit.h" #include "expr.h" static char *scheduler_name; static char *scheduler_unique_name; static char *scheduler_interface_name; static char *scheduler_interfacedef_name; static char *scheduler_run_name; static char *scheduler_post_name; nesc_declaration scheduler; static data_declaration scheduler_interface; declaration all_tasks; static word make_scheduler_interfacedef_name(location l) { static bool alloc; static cstring ascstring; if (!alloc) { alloc = TRUE; ascstring = str2cstring(permanent, scheduler_interfacedef_name); } return new_word(parse_region, l, ascstring); } static cstring make_scheduler_run_name(void) { static bool alloc; static cstring ascstring; if (!alloc) { alloc = TRUE; ascstring = str2cstring(permanent, scheduler_run_name); } return ascstring; } static cstring make_scheduler_post_name(void) { static bool alloc; static cstring ascstring; if (!alloc) { alloc = TRUE; ascstring = str2cstring(permanent, scheduler_post_name); } return ascstring; } static void declare_scheduler_interface(data_declaration task_decl) { region r = parse_region; location loc = task_decl->ast->location; word task_name; interface_ref task_interface; rp_interface task_uses; int osection; /* We save the task's replacement interface in its interface field... */ if (task_decl->interface) return; /* Build the (uses) 'interface Scheduler as X' ast, declare the interface. */ /* This specific AST structure is assumed in wire_scheduler below */ task_name = new_word(r, loc, str2cstring(r, task_decl->name)); task_interface = new_interface_ref(r, loc, make_scheduler_interfacedef_name(loc), NULL, task_name, NULL, NULL, NULL); osection = current.spec_section; current.spec_section = spec_uses; declare_interface_ref(task_interface, NULL, current.container->env, NULL); current.spec_section = osection; task_decl->interface = task_interface->ddecl; /* Build the 'uses ' AST, add it to the component */ task_uses = new_rp_interface(r, loc, TRUE, CAST(declaration, task_interface)); all_tasks = declaration_chain(CAST(declaration, task_uses), all_tasks); } static void replace_task_with_event(type_element modifiers) { type_element modifier; scan_type_element (modifier, modifiers) if (is_rid(modifier)) { rid keyword = CAST(rid, modifier); if (keyword->id == RID_TASK) keyword->id = RID_EVENT; } } void handle_post(function_call fcall) { identifier task = CAST(identifier, fcall->arg1); interface_deref scheduler_post; data_declaration postdecl; postdecl = interface_lookup(task->ddecl->interface, scheduler_post_name); if (!postdecl || postdecl->ftype != function_command) { static int oneerror; if (!oneerror) { oneerror = TRUE; error("task interface `%s' has no command named `%s'", scheduler_interface_name, scheduler_post_name); } return; } /* Rewrite post foo() to call foo.post() */ fcall->call_kind = command_call; task->ddecl = task->ddecl->interface; task->type = task->ddecl->type; scheduler_post = new_interface_deref(parse_region, task->location, CAST(expression, task), make_scheduler_post_name(), postdecl); scheduler_post->type = postdecl->type; fcall->arg1 = CAST(expression, scheduler_post); } void handle_task_definition(function_decl fdecl) { function_declarator fd; declare_scheduler_interface(fdecl->ddecl); replace_task_with_event(fdecl->modifiers); /* Replace foo with foo.run. We only bother doing this if the declarator is a valid task declarator (function_declarator with nested identifier_declarator) - if it isn't, we have an error in the form of a misdeclared task. */ /* (we only get here for something which really is a function declaration) */ fd = CAST(function_declarator, fdecl->declarator); if (is_identifier_declarator(fd->declarator)) { data_declaration rundecl; identifier_declarator oldd = CAST(identifier_declarator, fd->declarator); identifier_declarator rund = new_identifier_declarator(parse_region, fd->location, make_scheduler_run_name()); interface_ref_declarator ird = new_interface_ref_declarator(parse_region, fd->location, CAST(declarator, rund), new_word(parse_region, fd->location, oldd->cstring)); fd->declarator = CAST(declarator, ird); /* Update task's declaration object */ rundecl = interface_lookup(fdecl->ddecl->interface, scheduler_run_name); if (!rundecl || rundecl->ftype != function_event) { static int oneerror; if (!oneerror) { oneerror = TRUE; error("task interface `%s' has no event named `%s'", scheduler_interface_name, scheduler_run_name); } } else { /* Don't lose safe flag */ rundecl->safe = fdecl->ddecl->safe; fdecl->ddecl = rundecl; rundecl->definition = CAST(declaration, fdecl); } } } void handle_task_declaration(variable_decl vdecl) { declare_scheduler_interface(vdecl->ddecl); /* This declaration will be suppressed in unparsing, as you can't declare events anyway. So no further work needed. */ } void load_scheduler(void) { scheduler = load(l_component, toplevel_location, scheduler_name, FALSE); if (scheduler_name) { data_declaration intf = env_lookup(scheduler->env->id_env, scheduler_interface_name, TRUE); /* Check interface for validity. It must be the provided, have a single parameter and be the right interface type. Also, no generic interfaces please. */ if (intf && intf->kind == decl_interface_ref && !intf->required && intf->gparms && !intf->itype->abstract && !strcmp(intf->itype->name, scheduler_interfacedef_name)) { typelist_scanner dummy; typelist_scan(intf->gparms, &dummy); if (typelist_next(&dummy) && !typelist_next(&dummy)) scheduler_interface = intf; } if (!scheduler_interface) error_with_location(toplevel_location, "Scheduler `%s' has no scheduling interface named `%s'", scheduler_name, scheduler_interface_name); } } static expression build_taskid(module m, data_declaration taskdecl) { /* Build a unique identifier for a task whose declaration is taskdecl, in module m. Method: we add enum { m$taskdecl = unique("task-unique-string") }; to all_cdecls and return an identifier-expression referring to m$taskdecl */ location loc = taskdecl->ast->location; region r = parse_region; cstring idname; enumerator idast; struct data_declaration tempdecl; enum_ref idenum; tag_declaration enumdecl; data_decl iddecl; expression unique_id, unique_fn, unique_args, use_id; cstring silly_name; identifier_declarator silly_id; declarator silly_d; type_element silly_modifiers; rid silly_typedef; type silly_type; variable_decl silly_vd; data_decl silly_decl; /* Build unique("task-unique-string") */ unique_fn = build_identifier(r, loc, magic_unique); unique_args = build_string(r, loc, scheduler_unique_name); default_conversion(unique_args); unique_id = build_function_call(r, loc, unique_fn, unique_args); /* Build, declare enumerator taskdecl */ idname = str2cstring(r, taskdecl->name); idast = new_enumerator(r, loc, idname, unique_id, NULL); init_data_declaration(&tempdecl, CAST(declaration, idast), idname.data, int_type); tempdecl.kind = decl_constant; tempdecl.definition = tempdecl.ast; tempdecl.value = unique_id->cst; idast->ddecl = declare(m->ienv, &tempdecl, FALSE); /* Build the enum declaration */ idenum = new_enum_ref(r, loc, NULL, NULL, NULL, TRUE); idenum->fields = CAST(declaration, idast); idenum->tdecl = enumdecl = declare_tag(idenum); layout_enum_start(enumdecl); enumdecl->definition = idenum; enumdecl->defined = TRUE; layout_enum_end(enumdecl); /* Build the expression we will use in the wiring. */ use_id = build_identifier(r, loc, idast->ddecl); /* Hack: the use_id expression needs to be in the module's AST so that we do instantiation and constant folding on it. We build a silly typedef for that purpose: typedef int __nesc_sillytask_taskdecl[use_id] */ silly_name = alloc_cstring(r, strlen(taskdecl->name) + 17); sprintf(silly_name.data, "__nesc_sillytask_%s", taskdecl->name); silly_id = new_identifier_declarator(r, loc, silly_name); silly_type = make_array_type(int_type, use_id); type2ast(r, loc, silly_type, CAST(declarator, silly_id), &silly_d, &silly_modifiers); silly_typedef = new_rid(r, loc, RID_TYPEDEF); silly_vd = new_variable_decl(r, loc, silly_d, NULL, NULL, NULL, NULL/*ddecl*/); init_data_declaration(&tempdecl, CAST(declaration, silly_vd), silly_name.data, silly_type); tempdecl.kind = decl_typedef; tempdecl.definition = tempdecl.ast; silly_vd->ddecl = declare(m->ienv, &tempdecl, FALSE); silly_vd->declared_type = silly_type; silly_decl = new_data_decl(r, loc, type_element_chain(CAST(type_element, silly_typedef), silly_modifiers), CAST(declaration, silly_vd)); m->decls = declaration_chain(CAST(declaration, silly_decl), m->decls); /* Build the declaration and add it to the module's decls */ iddecl = new_data_decl(r, loc, CAST(type_element, idenum), NULL); m->decls = declaration_chain(CAST(declaration, iddecl), m->decls); return use_id; } void wire_scheduler(module m) { rp_interface taskuse; cgraph cg = m->cdecl->connections, userg = m->cdecl->user_connections; struct endp m_end, scheduler_end; if (!scheduler_interface) { declaration task; static int use_module = 0; /* If all_tasks is non-null, we have a problem: a task that needs to be wired, but the scheduler is not yet available. Report as an error. */ scan_declaration (task, all_tasks) { error_with_location(task->location, "scheduler depends on a task"); if (!use_module) { use_module = 1; error_with_location(task->location, "The -fnesc_scheduler flag should specify a module"); error_with_location(task->location, "(the module with the scheduling code, even if the scheduler is a configuration)"); } } return; } m_end.component = NULL; m_end.function = NULL; m_end.args_node = NULL; scheduler_end.component = NULL; scheduler_end.interface = scheduler_interface; scheduler_end.function = NULL; /* This matches the structure created in declare_scheduler_interface */ scan_rp_interface (taskuse, CAST(rp_interface, all_tasks)) { interface_ref task = CAST(interface_ref, taskuse->decls); location loc = task->location; expression args = build_taskid(m, task->ddecl); /* Create m.task -> scheduler.tasks[unique("task-unique-string")] */ m_end.interface = task->ddecl; scheduler_end.args_node = args; connect_interface(loc, cg, userg, m_end, scheduler_end, FALSE); } } void set_scheduler(char *spec) { scheduler_name = strtok(spec, ","); scheduler_unique_name = strtok(NULL, ","); scheduler_interface_name = strtok(NULL, ","); scheduler_interfacedef_name = strtok(NULL, ","); scheduler_run_name = strtok(NULL, ","); scheduler_post_name = strtok(NULL, ","); if (scheduler_post_name && !strtok(NULL, ",")) flag_use_scheduler = TRUE; else { flag_use_scheduler = FALSE; error("invalid arguments to -fnesc-scheduler"); } } nescc-1.3.4/src/nesc-task.h000066400000000000000000000020201177770303300154440ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_TASK_H #define NESC_TASK_H extern nesc_declaration scheduler; extern declaration all_tasks; void set_scheduler(char *spec); void load_scheduler(void); void wire_scheduler(module m); void handle_post(function_call fcall); void handle_task_definition(function_decl fdecl); void handle_task_declaration(variable_decl vdecl); #endif nescc-1.3.4/src/nesc-uses.c000066400000000000000000000343651177770303300154750ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "constants.h" #include "nesc-uses.h" #include "nesc-semantics.h" #include "AST_utils.h" #include "AST_walk.h" #include "c-parse.h" static region rr; dd_list nglobal_uses; data_declaration enable_interrupt; /* IDEAS: track fields of structs */ context exe_context(context c) { return c & (c_atomic | c_executable | c_constant); } static context access_context(context c) { /* Something that came via a deref is really just a read */ if (c & c_deref) c = exe_context(c) | c_read; /* Constant contexts don't read or write. But they might address... */ if (c & c_constant) c &= ~(c_read | c_write); return c; } static context use_context(context c) { /* Non-executable contexts do not actually "do" anything. So don't set those bits in the 'use' context */ if (!(c & c_executable)) return 0; return access_context(c); } use new_use(location l, data_declaration fn, context c) { use u = ralloc(rr, struct use); u->l = l; u->fn = fn; u->c = use_context(c); return u; } static iduse new_iduse(data_declaration id, use u) { iduse i = ralloc(rr, struct iduse); i->id = id; i->u = u; return i; } void ddecl_used(data_declaration id, use u) { iduse i = new_iduse(id, u); if (!id->nuses) id->nuses = dd_new_list(rr); dd_add_last(rr, id->nuses, u); id->use_summary |= u->c; if (u->fn) { if (!u->fn->fn_uses) u->fn->fn_uses = dd_new_list(rr); dd_add_last(rr, u->fn->fn_uses, i); } else dd_add_last(rr, nglobal_uses, i); } static void identifier_used(identifier id, data_declaration fn, context c) { ddecl_used(id->ddecl, new_use(id->location, fn, c)); } static void interface_used(interface_deref iref, data_declaration fn, context c) { ddecl_used(iref->ddecl, new_use(iref->location, fn, c)); } static void collect_uses_ast(void *n, data_declaration fn, context c); static void collect_uses_children(void *n, data_declaration fn, context c); static void collect_uses_stmt(statement stmt, data_declaration fn, context c); static void collect_uses_expr(expression expr, data_declaration fn, context c); static void collect_uses_deref(expression expr, expression dereferenced, data_declaration fn, context c) { c = use_context(c); if (c & c_addressed) /* &*x is just x, not a pointer deref */ c &= ~c_addressed; else { c |= c_deref; /*pointer_use(expr, c);*/ } collect_uses_expr(dereferenced, fn, c); } static void collect_uses_expr(expression expr, data_declaration fn, context c) { context exe_c = exe_context(c); if (!expr) return; /* A read of an array-type expression actually takes the address of the container XXX: test on type needed because we have some unhandled nodes such as init_list (Note: these may not have a type in the future too. They probably shouldn't be expressions anyway) */ if (expr->type && type_array(expr->type)) { /* A dereference of an array type means that the context operation is being applied to the array. If not in a dereference, a read of an array returns its address, so is an address-taking context */ if (c & c_deref) c &= ~c_deref; else if (c & c_read) c = (c & ~c_read) | c_addressed; } else if (expr->cst) c |= c_constant; switch (expr->kind) { case kind_identifier: expr->context = access_context(c); identifier_used(CAST(identifier, expr), fn, c); break; case kind_interface_deref: interface_used(CAST(interface_deref, expr), fn, c); break; case kind_comma: { expression e; scan_expression (e, CAST(comma, expr)->arg1) if (e->next) collect_uses_expr(e, fn, exe_c); else collect_uses_expr(e, fn, c); break; } case kind_extension_expr: collect_uses_expr(CAST(unary, expr)->arg1, fn, c); break; case kind_conditional: { conditional ce = CAST(conditional, expr); context true_c = c, false_c = c; if (ce->condition->cst) { if (definite_zero(ce->condition)) true_c &= ~c_executable; else false_c &= ~c_executable; } collect_uses_expr(ce->condition, fn, exe_c | c_read); collect_uses_expr(ce->arg1, fn, true_c); collect_uses_expr(ce->arg2, fn, false_c); break; } case kind_compound_expr: collect_uses_stmt(CAST(compound_expr, expr)->stmt, fn, c); break; case kind_function_call: { function_call fce = CAST(function_call, expr); expression e; // tasks posts are a "read" of the task if (fce->call_kind == post_task) collect_uses_expr(fce->arg1, fn, exe_c | c_read); // C named fn calls, commands and events are c_fncall, // otherwise its c_read (and a warning about fn ptr use) else if (!(is_interface_deref(fce->arg1) || is_generic_call(fce->arg1) || (is_identifier(fce->arg1) && (CAST(identifier, fce->arg1)->ddecl->kind == decl_function || CAST(identifier, fce->arg1)->ddecl->kind == decl_magic_function)) || fce->va_arg_call)) { /* We allow a function pointer calls in C code on the assumption that this represents runtime implementation stuff (e.g., the task scheduler, or tossim stuff) */ if (warn_fnptr && (!fn || fn->container)) nesc_warning_with_location(fce->location, "call via function pointer"); collect_uses_expr(fce->arg1, fn, exe_c | c_read); } else collect_uses_expr(fce->arg1, fn, exe_c | c_fncall); scan_expression (e, fce->args) collect_uses_expr(e, fn, exe_c | c_read); break; } case kind_generic_call: { generic_call fce = CAST(generic_call, expr); expression e; collect_uses_expr(fce->arg1, fn, exe_c | c_fncall); scan_expression (e, fce->args) collect_uses_expr(e, fn, exe_c | c_read); break; } case kind_array_ref: { array_ref are = CAST(array_ref, expr); expression arg1 = are->arg1, arg2 = are->arg2, arg; /* When presented with something like 1[a], switch args to ensure that arg1 is the pointer or array, arg2 the index */ if (type_integer(arg1->type)) { arg = arg1; arg1 = arg2; arg2 = arg; } collect_uses_deref(expr, arg1, fn, c); collect_uses_expr(arg2, fn, exe_c | c_read); expr->context = access_context(c); break; } case kind_dereference: expr->context = access_context(c); collect_uses_deref(expr, CAST(dereference, expr)->arg1, fn, c); break; case kind_address_of: { expression arg = CAST(unary, expr)->arg1; if (c & c_deref) /* *&x is just x */ c &= ~c_deref; else c = exe_c | c_addressed; collect_uses_expr(arg, fn, c); break; } case kind_field_ref: { expr->context = access_context(c); collect_uses_expr(CAST(field_ref, expr)->arg1, fn, c); break; } case kind_preincrement: case kind_postincrement: case kind_predecrement: case kind_postdecrement: { unary ue = CAST(unary, expr); collect_uses_expr(ue->arg1, fn, exe_c | c_read | c_write); break; } case kind_assign: { binary be = CAST(binary, expr); collect_uses_expr(be->arg1, fn, exe_c | c_write); collect_uses_expr(be->arg2, fn, exe_c | c_read); break; } case kind_plus_assign: case kind_minus_assign: case kind_times_assign: case kind_divide_assign: case kind_modulo_assign: case kind_bitand_assign: case kind_bitor_assign: case kind_bitxor_assign: case kind_lshift_assign: case kind_rshift_assign: { binary be = CAST(binary, expr); collect_uses_expr(be->arg1, fn, exe_c | c_read | c_write); collect_uses_expr(be->arg2, fn, exe_c | c_read); break; } case kind_sizeof_expr: case kind_alignof_expr: collect_uses_expr(CAST(unary, expr)->arg1, fn, 0); break; case kind_cast: { cast ce = CAST(cast, expr); collect_uses_ast(ce->asttype, fn, c); collect_uses_expr(ce->arg1, fn, c); } default: if (is_unary(expr)) collect_uses_expr(CAST(unary,expr)->arg1, fn, c); else if (is_binary(expr)) { binary be = CAST(binary, expr); collect_uses_expr(be->arg1, fn, exe_c | c_read); collect_uses_expr(be->arg2, fn, exe_c | c_read); } else /* A default catch-all for sizeof_type, alignof_type, label_address, cast_list, init_list, init_index, init_field, lexical_cst, string_cst, string Embeddded expressions are compile-time constants or read-only, so the default collect_uses_ast_expr is valid. */ collect_uses_children(expr, fn, c); break; } } static void collect_uses_asm_operands(asm_operand operands, data_declaration fn, context exe_c) { asm_operand aop; scan_asm_operand (aop, operands) { int mode = asm_rwmode(aop->string); context c = exe_c; /* = is write, + is r/w, everything else is read */ if (mode == '=' || mode == '+') c |= c_write; if (mode != '=') c |= c_read; collect_uses_expr(aop->arg1, fn, c); } } static void collect_uses_stmt(statement stmt, data_declaration fn, context c) { context exe_c = exe_context(c); if (!stmt) return; switch (stmt->kind) { case kind_compound_stmt: { compound_stmt cs = CAST(compound_stmt, stmt); statement s; collect_uses_ast(cs->id_labels, fn, c); collect_uses_ast(cs->decls, fn, c); /* The last statement is possiblt read (in compound_expr) */ scan_statement (s, cs->stmts) if (s->next) collect_uses_stmt(s, fn, exe_c); else collect_uses_stmt(s, fn, c); break; } case kind_if_stmt: { if_stmt is = CAST(if_stmt, stmt); context true_c = exe_c, false_c = exe_c; if (is->condition->cst) { if (definite_zero(is->condition)) true_c &= ~c_executable; else false_c &= ~c_executable; } collect_uses_expr(is->condition, fn, exe_c | c_read); collect_uses_stmt(is->stmt1, fn, true_c); collect_uses_stmt(is->stmt2, fn, false_c); break; } case kind_while_stmt: case kind_dowhile_stmt: case kind_switch_stmt: { conditional_stmt cs = CAST(conditional_stmt, stmt); context body_c = exe_c; if (cs->condition->cst && stmt->kind == kind_while_stmt && definite_zero(cs->condition)) body_c &= ~c_executable; collect_uses_expr(cs->condition, fn, exe_c | c_read); collect_uses_stmt(cs->stmt, fn, body_c); break; } case kind_for_stmt: { for_stmt fs = CAST(for_stmt, stmt); context body_c = exe_c; if (fs->arg2 && fs->arg2->cst && definite_zero(fs->arg2)) body_c &= ~c_executable; collect_uses_expr(fs->arg1, fn, exe_c | c_read); collect_uses_expr(fs->arg2, fn, exe_c | c_read); collect_uses_expr(fs->arg3, fn, body_c | c_read); collect_uses_stmt(fs->stmt, fn, body_c); break; } case kind_labeled_stmt: collect_uses_ast(CAST(labeled_stmt, stmt)->label, fn, c); collect_uses_stmt(CAST(labeled_stmt, stmt)->stmt, fn, c); break; case kind_expression_stmt: collect_uses_expr(CAST(expression_stmt, stmt)->arg1, fn, c); break; case kind_atomic_stmt: collect_uses_stmt(CAST(atomic_stmt,stmt)->stmt, fn, exe_c | c_atomic); break; case kind_asm_stmt: { asm_stmt as = CAST(asm_stmt, stmt); collect_uses_expr(as->arg1, fn, exe_c | c_read); collect_uses_asm_operands(as->asm_operands1, fn, exe_c); collect_uses_asm_operands(as->asm_operands2, fn, exe_c); break; } default: /* for break_stmt, continue_stmt, goto_stmt, computed_goto_stmt, empty_stmt, return_stmt */ collect_uses_children(stmt, fn, c); break; } } /* An AST walker that collect_usess all reachable expressions */ static AST_walker collect_uses_walker; struct uses_data { context c; data_declaration function; }; static AST_walker_result collect_uses_ast_expr(AST_walker spec, void *data, expression *e) { struct uses_data *ud = data; collect_uses_expr(*e, ud->function, exe_context(ud->c) | c_read); return aw_done; } static AST_walker_result collect_uses_ast_stmt(AST_walker spec, void *data, statement *s) { struct uses_data *ud = data; collect_uses_stmt(*s, ud->function, exe_context(ud->c)); return aw_done; } static AST_walker_result collect_uses_ast_fdecl(AST_walker spec, void *data, function_decl *fd) { struct uses_data *ud = data; struct uses_data new_ud = *ud; new_ud.function = (*fd)->ddecl; AST_walk_children(spec, &new_ud, CAST(node, *fd)); return aw_done; } static void init_collect_uses_walker(void) { collect_uses_walker = new_AST_walker(rr); AST_walker_handle(collect_uses_walker, kind_expression, collect_uses_ast_expr); AST_walker_handle(collect_uses_walker, kind_statement, collect_uses_ast_stmt); AST_walker_handle(collect_uses_walker, kind_function_decl, collect_uses_ast_fdecl); } static void collect_uses_ast(void *n, data_declaration fn, context c) { node nn = CAST(node, n); struct uses_data new_ud; new_ud.c = c; new_ud.function = fn; AST_walk_list(collect_uses_walker, &new_ud, &nn); } static void collect_uses_children(void *n, data_declaration fn, context c) { struct uses_data new_ud; new_ud.c = c; new_ud.function = fn; AST_walk_children(collect_uses_walker, &new_ud, CAST(node, n)); } void collect_uses(declaration decls) { collect_uses_ast(decls, NULL, c_executable); } void init_uses(void) { type ei_type; rr = parse_region; nglobal_uses = dd_new_list(rr); init_collect_uses_walker(); ei_type = build_function_type(parse_region, void_type, NULL); enable_interrupt = declare_function(dummy_location, "__nesc_enable_interrupt", ei_type); } nescc-1.3.4/src/nesc-uses.h000066400000000000000000000040141177770303300154660ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_USES_H #define NESC_USES_H typedef enum { c_atomic = 1, c_executable = 2, c_read = 4, c_write = 8, c_fncall = 16, c_addressed = 32, c_deref = 64, c_constant = 128 } context; typedef struct use { location l; data_declaration fn; /* function containing use */ context c; } *use; typedef struct iduse { data_declaration id; use u; } *iduse; extern dd_list nglobal_uses; /* Declaration of __nesc_enable_interrupt function. Data-race detection and duplicate atomic suppression needs to be aware of these calls to function correctly. The current implementation is simplistic (conservative and unsafe): If function X calls __nesc_enable_interrupt, we assume that: - there are non-atomic calls to X - calls made from inside an atomic statement in X are still atomic (i.e., we assume there is no way to reach a statement inside 'atomic' from the __nesc_enable_interrupt() call. We do issue a warning when __nesc_enable_interrupt() is called from within an atomic statement). The proper behaviour would be to analyse X's control flow graph. */ extern data_declaration enable_interrupt; void collect_uses(declaration decls); context exe_context(context c); void init_uses(void); use new_use(location l, data_declaration fn, context c); void ddecl_used(data_declaration id, use u); #endif nescc-1.3.4/src/nesc-xml.c000066400000000000000000000257661177770303300153230ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "parser.h" #include "nesc-xml.h" #include "semantics.h" #include "nesc-semantics.h" #include "constants.h" #include "init.h" /* Pick an indentation amount */ #define INDENT 2 static region xml_region; static FILE *xml_file; static int indent_level; static dd_list tags; static bool at_line_start; void xindent(void) { indent_level += INDENT; } void xunindent(void) { indent_level -= INDENT; } void xputc(char c) { if (xml_file) putc(c, xml_file); } static void output_indentation(void) { int i; if (xml_file) for (i = 0; i < indent_level; i++) putc(' ', xml_file); } static void output_indent_if_needed(void) { if (at_line_start) { at_line_start = FALSE; output_indentation(); } } void xnewline(void) { xputc('\n'); at_line_start = TRUE; } void xstartline(void) { if (!at_line_start) xnewline(); } void xstartline_noindent(void) { xstartline(); at_line_start = FALSE; } void xvprintf(char *format, va_list args) { if (xml_file) { output_indent_if_needed(); vfprintf(xml_file, format, args); } } void xprintf(char *format, ...) { va_list args; va_start(args, format); xvprintf(format, args); va_end(args); } /* Output an arbitrary C character in an XML-friendly way. Control characters are remapped to 0x2400, except CR, LF and Tab */ void xqputc(int c) { /* Ahh, the joys of XML. The control characters are lurking from 0x2400 onwards, except for CR, LF and Tab which exist at their usual value. Furthermore, ", < and & need to be quoted */ /* Some characters show up as small numbers */ if (c == '"' || c == '<' || c == '&' || c == '\r' || c == '\n' || c == '\t') xprintf("&#%d;", c); /* Regular ASCII chars show up as themselves */ else if ((unsigned char)c == c && isprint(c)) putc(c, xml_file); else { /* Everything else shows up on the 0x24xx page */ c += 0x2400; xprintf("&#%d;", c); } } /* Output a string quoted to match XML AttValue rules */ void xqputs(const char *s) { if (!xml_file) return; while (*s) xqputc(*s++); } /* Output a wide-char string quoted to match XML AttValue rules */ void xqputcs(const cstring s) { int i; if (!xml_file) return; for (i = 0; i < s.length; i++) xqputc(s.data[i]); } void xputs(const char *s) { if (!xml_file) return; output_indent_if_needed(); fputs(s, xml_file); } /* Leaks until xml_end. */ static void push_tag(const char *tag) { if (tags) dd_add_first(xml_region, tags, (char *)tag); } static const char *pop_tag(void) { dd_list_pos top; const char *tag; if (!tags) return NULL; top = dd_first(tags); tag = DD_GET(const char *, top); dd_remove(top); return tag; } void xml_tag_start(const char *tag) { push_tag(tag); xprintf("<%s", tag); } void xml_tag(const char *tag) { xml_tag_start(tag); xml_tag_end(); } void xml_tag_end(void) { xputs(">"); } void xml_qtag(const char *tag) { xprintf("<%s/>", tag); } void xml_tag_end_pop(void) { pop_tag(); xputs("/>"); } void xml_pop(void) { xprintf("", pop_tag()); } void xml_attr(const char *name, const char *val) { xprintf(" %s=\"", name); xqputs(val); xputs("\""); } void xml_attr_int(const char *name, largest_int val) { xprintf(" %s=\"%lld\"", name, val); } void xml_attr_ptr(const char *name, void *val) { xprintf(" %s=\"%p\"", name, val); } void xml_attr_noval(const char *name) { xprintf(" %s=\"\"", name); } void xml_attr_bool(const char *name, bool val) { if (val) xml_attr_noval(name); } void xml_attr_cval(const char *name, cval val) { bool unknown = FALSE; xprintf(" %s=\"", name); if (cval_isunsigned(val)) xprintf("I:%llu", cval_uint_value(val)); else if (cval_isinteger(val)) xprintf("I:%lld", cval_sint_value(val)); else if (cval_isunknown(val)) unknown = TRUE; else if (cval_isfloating(val)) /* XXX: hacky version */ xprintf("F:%.20Le", cval_float_value(val)); else if (cval_isaddress(val)) { data_declaration ddecl = cval_ddecl(val); /* XXX: We don't (yet) support strings with an offset */ if (ddecl && ddecl->kind == decl_magic_string && cval_knownbool(val)) { /* Wide strings are printed as their byte-by-byte rep. FIXME */ xputs("S:"); xqputcs(ddecl->schars); } else unknown = TRUE; } else if (cval_istop(val)) xputs("V:"); else unknown = TRUE; if (unknown) xputs("U:"); xputc('"'); } void xml_attr_loc(location loc) { if (loc == dummy_location) { xprintf(" loc=\"NONE\""); return; } xprintf(" loc=\"%d", loc->lineno); if (loc->container) { xputc('('); xqputs(loc->container->instance_name); xputc(')'); } xputc(':'); xqputs(loc->filename); xputc('"'); } void xml_start_dummy(void) { xml_file = NULL; indent_level = 0; at_line_start = TRUE; tags = NULL; } void xml_start(FILE *f) { xml_region = newregion(); xml_file = f; indent_level = 0; at_line_start = TRUE; tags = dd_new_list(xml_region); } void xml_end(void) { deleteregion_ptr(&xml_region); xml_file = NULL; tags = NULL; } /* Convenient shortcuts */ void indentedtag_start(const char *name) { xstartline(); xml_tag_start(name); xindent(); } void indentedtag(const char *name) { xstartline(); xml_tag(name); xindent(); xnewline(); } void indentedtag_pop(void) { xstartline(); xunindent(); xml_pop(); xnewline(); } /* Standard nesC xml elements */ xml_list xl_variables, xl_constants, xl_functions, xl_typedefs, xl_interfaces, xl_icomponents, xl_interfacedefs, xl_components, xl_tags; void nxml_simple_value(type t, cval val) { indentedtag_start("value"); xml_attr_cval("cst", val); /* val can be cval_top */ xml_tag_end(); nxml_type(t); indentedtag_pop(); } void nxml_ddecl_ref(data_declaration ddecl) { xml_list l = NULL; switch (ddecl->kind) { case decl_variable: xml_tag_start("variable-ref"); l = xl_variables; break; case decl_constant: xml_tag_start("constant-ref"); l = xl_constants; break; case decl_function: xml_tag_start("function-ref"); l = xl_functions; break; case decl_typedef: xml_tag_start("typedef-ref"); l = xl_typedefs; break; case decl_interface_ref: xml_tag_start("interface-ref"); l = xl_interfaces; break; case decl_component_ref: xml_tag_start("internal-component-ref"); l = xl_icomponents; break; default: assert(0); } xml_list_add(l, ddecl); xml_attr("name", ddecl->name); if (ddecl->container || ddecl->container_function) xml_attr_noval("scoped"); xml_attr_ptr("ref", ddecl); xml_tag_end_pop(); } void nxml_ndecl_ref(nesc_declaration ndecl) { if (ndecl->kind == l_interface) { xml_tag_start("interfacedef-ref"); xml_list_add(xl_interfacedefs, ndecl); } else { xml_list_add(xl_components, ndecl); xml_tag_start("component-ref"); } xml_attr("qname", ndecl->instance_name); //xml_attr_ptr("ref", ndecl); xml_tag_end_pop(); } void nxml_arguments(expression arguments) { expression arg; indentedtag("arguments"); scan_expression (arg, arguments) { if (is_type_argument(arg)) nxml_type(CAST(type_argument, arg)->asttype->type); else nxml_simple_value(arg->type, arg->cst ? arg->cst->cval : cval_top); } indentedtag_pop(); } void nxml_instance(nesc_declaration ndecl) { nesc_declaration orig = original_component(ndecl); indentedtag_start("instance"); if (ndecl->kind == l_component && ndecl->original && !ndecl->abstract) xml_attr_int("number", ndecl->instance_number); xml_tag_end(); xnewline(); nxml_ndecl_ref(orig); if (ndecl->arguments) nxml_arguments(ndecl->arguments); indentedtag_pop(); } void nxml_tdecl_ref(tag_declaration tdecl) { char tag[20]; xml_list_add(xl_tags, tdecl); sprintf(tag, "%s-ref", tagkind_name(tdecl->kind)); xml_tag_start(tag); if (tdecl->name) xml_attr("name", tdecl->name); xml_attr_bool("scoped", !!tdecl->container/* || tdecl->container_function*/); xml_attr_ptr("ref", tdecl); xml_tag_end_pop(); } static void nxml_value_base(ivalue value) { nxml_simple_value(value->type, value->u.base.value); } static void nxml_value_array(ivalue value) { ivalue_array elem; indentedtag("value-array"); nxml_type(value->type); for (elem = value->u.array; elem; elem = elem->next) { indentedtag_start("array-element"); xml_attr_int("from", elem->from); xml_attr_int("to", elem->to); xml_tag_end(); nxml_value(elem->value); indentedtag_pop(); } indentedtag_pop(); } static void nxml_value_structured(ivalue value) { ivalue_field field; indentedtag("value-structured"); nxml_type(value->type); for (field = value->u.structured; field; field = field->next) { indentedtag_start("structured-element"); xml_attr("field", field->field->name); xml_attr_ptr("ref", field->field); xml_tag_end(); nxml_value(field->value); indentedtag_pop(); } indentedtag_pop(); } void nxml_value(ivalue value) { switch (value->kind) { case iv_base: nxml_value_base(value); break; case iv_array: nxml_value_array(value); break; case iv_structured: nxml_value_structured(value); break; default: assert(0); } } void nxml_doc(struct docstring *doc) { if (!doc->short_s) return; indentedtag_start("documentation"); xml_attr_loc(doc->loc); xml_tag_end(); xnewline(); xml_tag("short"); xqputs(doc->short_s); xml_pop(); xnewline(); if (doc->long_s) { xml_tag("long"); xqputs(doc->long_s); xml_pop(); xnewline(); } indentedtag_pop(); } /* Incremental list creation support */ struct xml_list { region r; dd_list all; dd_list latest; bool *changed; bool (*addfilter)(void *entry); }; xml_list new_xml_list(region r, bool *changed, bool (*addfilter)(void *entry)) { xml_list l = ralloc(r, struct xml_list); l->r = r; l->all = dd_new_list(l->r); l->changed = changed; l->addfilter = addfilter; return l; } void xml_list_add(xml_list l, void *entry) { if (!l || !l->addfilter(entry)) return; if (!l->latest) l->latest = dd_new_list(l->r); dd_add_last(l->r, l->latest, entry); dd_add_last(l->r, l->all, entry); *l->changed = TRUE; } dd_list xml_list_latest(xml_list l) { dd_list latest = l->latest; l->latest = NULL; return latest; } void xml_list_reset(xml_list l) { l->latest = l->all; } nescc-1.3.4/src/nesc-xml.h000066400000000000000000000052511177770303300153130ustar00rootroot00000000000000/* This file is part of the nesC compiler. Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NESC_XML_H #define NESC_XML_H #include "parser.h" #include "nesc-xml.h" typedef struct xml_list *xml_list; /* Low-level text output functions */ void xindent(void); void xunindent(void); void xnewline(void); void xstartline(void); void xstartline_noindent(void); void xvprintf(char *format, va_list args); void xprintf(char *format, ...); void xqputs(const char *s); void xqputcs(cstring cs); void xputs(const char *s); /* Tag/attribute handling */ void xml_tag_start(const char *tag); void xml_tag(const char *tag); void xml_tag_end(void); void xml_qtag(const char *tag); void xml_tag_end_pop(void); void xml_pop(void); void xml_attr(const char *name, const char *val); void xml_attr_int(const char *name, largest_int val); void xml_attr_ptr(const char *name, void *val); void xml_attr_noval(const char *name); void xml_attr_bool(const char *name, bool val); void xml_attr_cval(const char *name, cval val); void xml_attr_loc(location loc); void xml_start_dummy(void); void xml_start(FILE *f); void xml_end(void); /* Convenient shortcuts */ void indentedtag_start(const char *name); void indentedtag(const char *name); void indentedtag_pop(void); /* Standard nesC xml elements */ /* Lists to which nxml_[dtn]decl_ref arguments should be added. (could be a call to some function in nesc-dump.c, but doesn't seem worth the bother) */ extern xml_list xl_variables, xl_constants, xl_functions, xl_typedefs, xl_interfaces, xl_icomponents, xl_interfacedefs, xl_components, xl_tags; void nxml_ddecl_ref(data_declaration ddecl); void nxml_tdecl_ref(tag_declaration tdecl); void nxml_ndecl_ref(nesc_declaration ndecl); void nxml_value(ivalue value); void nxml_arguments(expression arguments); void nxml_instance(nesc_declaration ndecl); void nxml_doc(struct docstring *doc); /* Incremental list creation support */ xml_list new_xml_list(region r, bool *changed, bool (*addfilter)(void *entry)); void xml_list_add(xml_list l, void *entry); dd_list xml_list_latest(xml_list l); void xml_list_reset(xml_list l); #endif nescc-1.3.4/src/nodetypes.def000066400000000000000000000644271177770303300161200ustar00rootroot00000000000000;; -*- lisp -*- ; This file is part of the nesC compiler. ; ; This file is derived from the RC Compiler. It is thus ; Copyright (C) 2000-2001 The Regents of the University of California. ; Changes for nesC are ; Copyright (C) 2002 Intel Corporation ; ; The attached "nesC" software is provided to you under the terms and ; conditions of the GNU General Public License Version 2 as published by the ; Free Software Foundation. ; ; nesC 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 nesC; see the file COPYING. If not, write to ; the Free Software Foundation, 59 Temple Place - Suite 330, ; Boston, MA 02111-1307, USA. ;; AST definition ;; (deffield FIELD-NAME C-TYPE (ATTRIBUTES)) ;; (deftype TYPE-NAME SUPER-TYPE (FIELDS) "DOCUMENTATION") ;; (defnode NODE-NAME TYPE-NAME "DOCUMENTATION") ;; deffield: ;; Define field FIELD-NAME with type C-TYPE. The attributes listed are ;; interpreted by the various generators, attributes are either symbols, ;; or lists whose first element is a symbol ;; Current attributes: ;; init: field is an argument to the constructing function for the types ;; that contain it ;; tree: "part of" the abstract syntax tree. this means that ;; generated functions that walk the tree (XXX_walk, XXX_print) ;; will follow this field recursively ;; nodump: field is not marshalled/unmarshalled ;; noprint: field is not printed as part of AST ;; dump-special: call dump_FIELD-NAME to marshall/unmarshall this node ;; print-special: call print_FIELD-NAME to print node (deffield temp int (nodump noprint (default "23"))) ; a random int field with default value 23 (deffield type type ()) (deffield declared_type type ()) (deffield name "const char *" ()) (deffield location location (init)) (deffield next "node sameregion" ()) (deffield asttype asttype (init tree)) (deffield condition expression (init tree)) (deffield arg1 expression (init tree)) (deffield arg2 expression (init tree)) (deffield arg3 expression (init tree)) (deffield stmt statement (init tree)) (deffield stmt1 statement (init tree)) (deffield stmt2 statement (init tree)) (deffield stmts statement (init tree)) (deffield asm_stmt asm_stmt (init tree)) (deffield extension bool ()) (deffield label label (init tree)) (deffield labels label (init tree)) (deffield id_label id_label (init tree)) (deffield id_labels id_label (init tree)) (deffield cstring cstring (init)) (deffield word1 word (init tree)) (deffield word2 word (init tree)) (deffield strings string_cst (init tree)) (deffield args expression (init tree)) (deffield modifiers type_element (init tree)) (deffield qualifiers type_element (init tree)) (deffield init_expr expression (init tree)) (deffield parms declaration (init tree)) (deffield gparms declaration (init tree)) (deffield decl declaration (init tree)) (deffield decls declaration (init tree)) (deffield asm_operands1 asm_operand (init tree)) (deffield asm_operands2 asm_operand (init tree)) (deffield asm_clobbers string (init tree)) (deffield doublecst "long double" (init)) (deffield id "enum rid" (init)) (deffield declarator declarator (init tree)) (deffield string string (init tree)) (deffield fields declaration (init tree)) (deffield defined bool (init)) (deffield parent_function function_decl (init)) (deffield env environment (init)) (deffield ddecl data_declaration (init)) (deffield ident identifier (init)) (deffield incrementrc bool (init)) (deffield old_parms declaration (init)) (deffield attributes attribute (init tree)) (deffield length size_t (init)) (deffield cval cval (init)) (deffield va_arg_call asttype (init)) (deffield parent "node sameregion" ()) (deffield parent_ptr "node sameregion *sameregion" ()) (deffield tdecl tag_declaration ()) (deffield context context ()) (deffield fdeclarator function_declarator ()) (deffield lvalue bool ()) (deffield bitfield bool ()) (deffield isregister bool ()) (deffield side_effects bool ()) (deffield cst known_cst ()) (deffield static_address known_cst ()) (deffield undeclared_variables env ()) (deffield base_labels env ()) (deffield scoped_labels env ()) (deffield ldecl label_declaration ()) (deffield parent_loop statement ()) (deffield current_loop statement ()) (deffield next_label label ()) (deffield nlocals int ()) (deffield break_dest node ()) (deffield continue_dest node ()) (deffield forward bool ()) (deffield converted_to_pointer bool ()) (deffield fdecl field_declaration ()) (deffield cst_checked bool ()) (deffield instantiation node ()) (deffield spelling "const char *" ()) (deffield parens bool ()) (deffield ivalue ivalue ()) ;; nesc fields (deffield call_kind nesc_call_kind (init)) (deffield implementation implementation (init tree)) (deffield required bool (init)) (deffield ep1 endpoint (init tree)) (deffield ep2 endpoint (init tree)) (deffield ids parameterised_identifier (init tree)) (deffield external bool (init)) (deffield ienv environment (init)) (deffield designator designator (init tree)) (deffield abstract bool (init)) (deffield containing_atomic atomic_stmt ()) (deffield type_checked bool ()) (deffield isatomic atomic_t ((default "NOT_ATOMIC"))) (deffield return_type asttype (tree)) (deffield cdecl nesc_declaration ()) (deffield temp1 data_declaration ()) (deffield temp2 data_declaration ()) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Base types ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (deftype node nil (location next parent parent_ptr instantiation) "The common supertype of all AST nodes") (deftype declaration node () "The common type of all definitions") (deftype statement node (parent_loop containing_atomic isatomic) "The common type of all statements PARENT_LOOP: - for break and continue: the containing for/while/do-while/switch statement they escape from - for for/while/do-while: the containing for/while/do-while/switch statement CONTAINING_ATOMIC - for return statement: their containing atomic statement - for labels and looping statements, their containing atomic statement (or NULL for none). Used to check that break, continue and goto do not break in or out of an atomic statement. (Note: for nested atomic statements, CONTAINING_ATOMIC will point to a dangling node as we drop these nested statements from the AST) ISATOMIC is ATOMIC_ANY if the statement does not involve any shared variable accesses ATOMIC_SINGLE if the statement involves a single access to a shared variable, and that access is guaranteed to be atomic (e.g., a single byte) NOT_ATOMIC otherwise") (deftype expression node (lvalue side_effects cst bitfield isregister type static_address converted_to_pointer cst_checked spelling parens ivalue context isatomic) "Expression nodes are subtypes of this type. LVALUE is true if this expression can be used in a context requiring an lvalue. BITFIELD is true if this lvalue is a bitfield. ISREGISTER is true if this lvalue is (declared to be) in a register. SIDE_EFFECTS is true if the expression has side effects. CST is non-null (and points to an appropriate constant) if this expression is constant. STATIC_ADDRESS is true for lvalues whose address is a constant expression CONVERTED_TO_POINTER is true for expressions which default_conversion indicates need converting to pointer type (note that these nodes did not have their type changed) CST_CHECKED is set to true once we've successfully checked this expression's constantness, and associated constant value (used to avoid duplicate error messages in repeated constant folding passes) SPELLING saves the `spelling' (a user-friendly name) of expressions used in initialisers. PARENS is TRUE if the expression is in parentheses IVALUE is a pointer to an ivalue (see init.h) holding the value of an initialiser expression. On an init_list or in an expression used as a simple initialiser (e.g., '3 + 2' in 'int x = 3 + 2'), this is the value of the initialiser. Inside these initialisers, ivalue points into the ivalue structure of the containing initialiser. CONTEXT is the usage context for this expression (see nesc-uses.h) ISATOMIC is ATOMIC_ANY if the statement does not involve any shared variable accesses ATOMIC_SINGLE if the statement involves a single access to a shared variable, and that access is guaranteed to be atomic (e.g., a single byte) NOT_ATOMIC otherwise") (deftype type_element node () "A common super-type for all type-building elements (qualifiers, etc)") (deftype declarator node () "A common super-type for all declarator elements") (deftype label node (next_label) "A common super-type for all labels. NEXT_LABEL points to the next case or default label of a switch (for case or default labels only)") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Declarations ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defnode error_decl declaration "Placeholder for erroneous declarations") (deftype asm_decl declaration (asm_stmt) "Asm statement STMT at the top level of a file (GCC)") (deftype data_decl declaration (modifiers decls) "The declaration MODIFIERS DECLS; DECLS is a list") (deftype extension_decl declaration (decl) "__extension__ DECL; (GCC)") (deftype ellipsis_decl declaration () "A pseudo-declaration to represent ... in a function argument list") (deftype enumerator declaration (cstring arg1 ddecl) "The enumeration element CSTRING = ARG1. CSTRING is optional") (deftype oldidentifier_decl declaration (cstring ddecl) "CSTRING in an old-style parameter list") (deftype function_decl declaration (declarator modifiers attributes old_parms stmt parent_function ddecl fdeclarator declared_type undeclared_variables base_labels scoped_labels current_loop nlocals) "A function declaration with body STMT OLD_PARMS is the old-style parameter declaration list.") (deftype implicit_decl declaration (ident) "Used as the AST node for implicit declarations. IDENT points to the identifier node that implicitly declared the function") (deftype variable_decl declaration (declarator attributes arg1 asm_stmt ddecl declared_type forward) "Declaration of DECLARATOR ASM_STMT ATTRIBUTES = ARG1. ATTRIBUTES is a list. ASM_STMT is optional (GCC specific). ARG1 is an optional initialiser. DDECL points to the declaration for this item. DECLARED_TYPE is the type in this declaration (which may be different than that in DDECL->TYPE) FORWARD is true for parameters that are forward declarations") (deftype field_decl declaration (declarator attributes arg1 type_checked fdecl) "Declaration of field DECLARATOR ATTRIBUTES : ARG1. QUALIFIERS and ATTRIBUTEES are lists. ARG1 is an optional bitfield specifier TYPE_CHECKED is set to true once it has been checked that this field is of network type (inside network structures) FDECL is this field's declaration") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Types and type elements ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (deftype asttype node (declarator qualifiers type) "The source-level type QUALIFIERS DECLARATOR") (deftype typename type_element (ddecl) "typedef-type with declaration DDECL. The name is ddecl->name") (deftype typeof_expr type_element (arg1) "typeof ARG1") (deftype typeof_type type_element (asttype) "typeof(ASTTYPE)") (deftype attribute type_element (word1) "base type for gcc and nesc attributes") (deftype gcc_attribute attribute (args) "The (gcc) attribute WORD1(ARGS). args can be empty, and may not be semantically valid") (deftype rid type_element (id) "Storage class specifier, type specifier or type qualifier ID (see RID_xxx)") (deftype qualifier type_element (id) "Type or function qualifier ID (see qualifiers.h and type_quals in types.h)") (deftype tag_ref type_element (word1 attributes fields defined tdecl) "struct/union/enum WORD1 { FIELDS; } ATTRIBUTES ATTRIBUTES and FIELDS are lists. ATTRIBUTES is GCC specific. WORD1 is optional. DEFINED is TRUE if this declaration defines the struct/union/enum. DEFINED == FALSE => FIELDS == NULL TDECL points to the internal declaration node for this type") (deftype struct_ref tag_ref () "A struct") (defnode attribute_ref tag_ref "An attribute definition") (deftype union_ref tag_ref () "A union") (defnode enum_ref tag_ref "An enum") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Declarators ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; The last DECLARATOR in a chain is: ;; NULL_NODE in absolute declarations ;; an identifier_decl otherwise (deftype nested_declarator declarator (declarator) "A common supertype for function/pointer/array declarator which includes the nested DECLARATOR") (deftype function_declarator nested_declarator (parms gparms qualifiers env return_type) "Function declarator DECLARATOR(PARMS). PARMS is a list of declarations. ENV is the environment for parms GPARMS is the list of declarations of generic parameters (commands, events only) RETURN_TYPE (optional) contains an overridden return type from nesdoc") (deftype pointer_declarator nested_declarator () "Pointer declarator *DECLARATOR") (deftype qualified_declarator nested_declarator (modifiers) "Declarator MODIFIERS DECLARATOR. The MODIFIERS are qualifiers or attributes. Note: MODIFIERS is never NULL") (deftype array_declarator nested_declarator (arg1) "Array declarator DECLARATOR[ARG1]. ARG1 is optional") (deftype identifier_declarator declarator (cstring) "Declaration of CSTRING") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Statements ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defnode error_stmt statement "Placeholder for erroneous statements") (deftype asm_stmt statement (arg1 asm_operands1 asm_operands2 asm_clobbers qualifiers) "The statement asm QUALIFIERS (ARG1 : ASM_OPERANDS1 : ASM_OPERANDS2 : ASM_CLOBBERS) where ASM_OPERANDS1, ASM_OPERANDS2, QUALIFIERS are optional, ASM_CLOBBERS is a list (GCC)") (deftype compound_stmt statement (id_labels decls stmts env) "{ ID_LABELS DECLS STMTS }. The ID_LABELS are GCC-specific. ID_LABELS, DECLS, STMTS are lists ENV is the environment for the block") (deftype if_stmt statement (condition stmt1 stmt2) "IF (CONDITION) STMT1 ELSE STMT2. STMT2 is optional") (deftype labeled_stmt statement (label stmt) "LABEL: STMT") (deftype expression_stmt statement (arg1) "EXPR;") (deftype conditional_stmt statement (condition stmt) "Basic type for all conditional statements") (defnode while_stmt conditional_stmt "WHILE (CONDITION) STMT") (defnode dowhile_stmt conditional_stmt "DO STMT WHILE (CONDITION") (deftype switch_stmt conditional_stmt (next_label) "SWITCH (CONDITION) STMT. NEXT_LABEL points to the switches first label") (deftype for_stmt statement (arg1 arg2 arg3 stmt) "FOR (ARG1; ARG2; ARG3) STMT. ARG1, ARG2, ARG3 are optional") (deftype break_stmt statement () "BREAK;") (deftype continue_stmt statement () "CONTINUE;") (deftype return_stmt statement (arg1) "RETURN ARG1. ARG1 is optional") (deftype goto_stmt statement (id_label) "GOTO ID_LABEL") (deftype computed_goto_stmt statement (arg1) "GOTO *ARG1 (GCC)") (deftype empty_stmt statement () ";") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Expressions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defnode error_expr expression "Placeholder for erroneous expressions") (deftype unary expression (arg1) "Unary expression nodes, kind defines operator") (deftype binary expression (arg1 arg2) "Binary expression nodes, kind defines operator") (deftype comma expression (arg1) "A comma separated list of expressions ARG1") (deftype sizeof_type expression (asttype) "sizeof (ASTTYPE)") (deftype alignof_type expression (asttype) "__alignof (ASTTYPE) (GCC)") (deftype label_address expression (id_label) "&&ID_LABEL (GCC)") (deftype cast unary (asttype) "(ASTTYPE)ARG1") (deftype cast_list expression (asttype init_expr) "(ASTTYPE){INIT_EXPR} (GCC)") (deftype conditional expression (condition arg1 arg2) "CONDITION ? ARG1 : ARG2 GCC specific: ARG1 is optional") (deftype identifier expression (cstring ddecl) "The identrifier CSTRING DEAD_USE is true for identifiers used as the target of a regular assignment") (deftype compound_expr expression (stmt) "({stmt}) (GCC)") (deftype function_call expression (arg1 args va_arg_call call_kind) "ARG1(ARGS). ARGS is a list of expressions If VA_ARG_CALL is non-null, this is actually a call to the pseudo-function __builtin_va_arg(args, va_arg_call) (where va_arg_call is a type). In this case arg1 is a dummy identifier. CALL_KIND is one of normal_call, post_task, command_call or event_signal.") (defnode array_ref binary "ARG1[ARG2]") (deftype field_ref unary (cstring fdecl) "ARG1.CSTRING The field_declaration is saved in FDECL") (defnode dereference unary "*ARG1") (defnode extension_expr unary "__extension__ ARG1 (GCC)") (defnode sizeof_expr unary "sizeof ARG1") (defnode alignof_expr unary "__alignof ARG1 (GCC)") (defnode realpart unary "__real ARG1 (GCC)") (defnode imagpart unary "__imag ARG1 (GCC)") (defnode address_of unary "&ARG1") (defnode unary_minus unary "-ARG1") (defnode unary_plus unary "+ARG1") (defnode conjugate unary "~ARG1 on complex arguments") (defnode bitnot unary "~ARG1") (defnode not unary "!ARG1") (deftype increment unary (temp1 temp2) "parent for increment nodes") (defnode preincrement increment "++ARG1") (defnode predecrement increment "--ARG1") (defnode postincrement increment "ARG1++") (defnode postdecrement increment "ARG1--") (defnode plus binary "ARG1 + ARG2") (defnode minus binary "ARG1 - ARG2") (defnode times binary "ARG1 * ARG2") (defnode divide binary "ARG1 / ARG2") (defnode modulo binary "ARG1 % ARG2") (defnode lshift binary "ARG1 << ARG2") (defnode rshift binary "ARG1 >> ARG2") (deftype comparison binary () "binary comparison ops") (defnode leq comparison "ARG1 <= ARG2") (defnode geq comparison "ARG1 >= ARG2") (defnode lt comparison "ARG1 < ARG2") (defnode gt comparison "ARG1 > ARG2") (defnode eq comparison "ARG1 == ARG2") (defnode ne comparison "ARG1 != ARG2") (defnode bitand binary "ARG1 & ARG2") (defnode bitor binary "ARG1 | ARG2") (defnode bitxor binary "ARG1 ^ ARG2") (defnode andand binary "ARG1 && ARG2") (defnode oror binary "ARG1 || ARG2") (deftype assignment binary (temp1) "ARG1 ARG2") (defnode assign assignment "ARG1 = ARG2") (defnode plus_assign assignment "ARG1 += ARG2") (defnode minus_assign assignment "ARG1 -= ARG2") (defnode times_assign assignment "ARG1 *= ARG2") (defnode divide_assign assignment "ARG1 /= ARG2") (defnode modulo_assign assignment "ARG1 %= ARG2") (defnode lshift_assign assignment "ARG1 <<= ARG2") (defnode rshift_assign assignment "ARG1 >>= ARG2") (defnode bitand_assign assignment "ARG1 &= ARG2") (defnode bitor_assign assignment "ARG1 |= ARG2") (defnode bitxor_assign assignment "ARG1 ^= ARG2") ;; Initialiser expressions (not allowed in most contexts) (deftype init_list expression (args) "{ ARGS }. ARGS is a list of expressions The type of the init_list is the type of the initialised entity. If this entity is an incomplete array type, the type of the init_list is the actual array size deduced from the initialiser.") (deftype init_specific expression (designator init_expr) "DESIGNATOR = INIT_EXPR in an init_list. DESIGNATOR is a list The type is not set in init_specific nodes") (deftype designator node () "Base type for designators") (deftype designate_field designator (cstring) ". CSTRING in an initialisation designator") (deftype designate_index designator (arg1 arg2) "[ARG1] or [ARG1 ... ARG2] in a designator. ARG2 is optional. ARG2 is a GCC extension") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Constants ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (deftype lexical_cst expression (cstring) "A constant represented as in its unparsed lexical form CSTRING. These appear in the AST.") (deftype string_cst lexical_cst () "A single lexical string - a sequence of these gets concatenated to form a string. The source form of the constant can be found in CSTRING.") (deftype string expression (strings ddecl) "A list of STRINGS forming a single string constant. DDECL is the magic_string declaration for this string.") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Labels ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (deftype id_label label (cstring ldecl) "The label CSTRING:") (deftype case_label label (arg1 arg2) "CASE ARG1 ... ARG2: ARG2 is optional, it's presence is GCC-specific") (deftype default_label label () "DEFAULT:") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Miscellaneous ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (deftype word node (cstring) "The identifier CSTRING used uninterpreted") (deftype asm_operand node (word1 string arg1) "STRING(EXPR) or [WORD1] STRING(EXPR) (GCC)") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; nesc extensions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; the different kinds of files ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (deftype nesc_decl declaration (word1 attributes cdecl) "a supertype for interface/component declarations of WORD1 CDECL is the declaration for this interface/component ATTRIBUTES are its attributes") (deftype interface nesc_decl (decls) "interface WORD1 { DECLS }") (deftype component nesc_decl (abstract parms decls implementation) "ABSTRACT configuration/module WORD1 PARMS { DECLS } IMPLEMENTATION If ABSTRACT is true, this is a generic component, and PARMS is its parameters.") (deftype implementation node (ienv cdecl) "a base type for module and configuration implementations IENV is the implementation's environment CDECL is the declaration for this component") (deftype configuration implementation (decls) "configuration implementation { DECLS } where DECLS include regular declarations, component_refs and connections") (deftype module implementation (decls) "module implementation { DECLS }'") (deftype binary_component implementation () "binary component implementation placeholder") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; component definition types ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (deftype rp_interface declaration (required decls) "a required or provided function or interface declaration (DECL is either a data_decl or an interface_ref). REQUIRED is true for 'requires', false for 'provides' clauses") (deftype interface_ref declaration (word1 args word2 gparms attributes ddecl) "an interface which is required or provided by a component: interface WORD1 < ARGS > WORD2 [ GPARMS ] ATTRIBUTES ARGS is a list of type_arguments for template interfaces WORD2 is optional, GPARMS, ARGS, ATTRIBUTES are optional") (deftype component_ref declaration (word1 word2 abstract args cdecl) "a reference to component WORD1 'as' WORD2 WORD2 is optional ABSTRACT is true for abstract component instantiations, false otherwise ARGS is the argument list for abstract component instantiations CDECL is filled in to point to the loaded component") (deftype connection declaration (ep1 ep2) "A connection between interfaces EP1 and EP2") (defnode rp_connection connection "EP1 (required) <- EP2 (provided) Legal if EP1 and EP2 are both interfaces of the component, or if neither EP1 and EP2 are interfaces of the component") (defnode eq_connection connection "EP1 = EP2, where both interfaces are either required or provided. Legal if exactly one of EP1 and EP2 are interfaces of the component") (deftype endpoint node (ids) "a list of parameterised_identifier in IDS") (deftype parameterised_identifier node (word1 args) "WORD1[ARGS] if ARGS != null, just WORD1 otherwise") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; types for extensions to the regular C syntax ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (deftype generic_declarator declarator (declarator parms) "parameterised declaration DECLARATOR [ PARMS ]") (deftype generic_call expression (arg1 args) "ARG1[ARGS]. ARGS is a list of expressions, ARG1 is a generic function") (deftype interface_ref_declarator nested_declarator (word1) "WORD1 . DECLARATOR in a declarator (for defining commands, events in component implementations For now at least, DECLARATOR is always an identifier_declarator") (deftype interface_deref unary (cstring ddecl) "ARG1.CSTRING where ARG1 is an interface_ref. DDECL is the command or event's declaration") (deftype component_deref unary (cstring ddecl) "ARG1.CSTRING where ARG1 is a component_ref. component_deref is *not* used for references to typedefed types in components. DDECL is the specification element's declaration") (deftype component_typeref typename (cstring) "CSTRING . typedef-name, a typedef-from-component-type with declaration DDECL. The typedef-name is in ddecl->name") (deftype atomic_stmt statement (stmt) "ATOMIC stmt An atomic_stmt is not made for lexically nested atomic statements") (defnode nx_struct_ref struct_ref "A network struct") (defnode nx_union_ref union_ref "A network union") (deftype nesc_attribute attribute (arg1 tdecl) "@WORD1(ARG1), a nesC attribute. ARG1 is an init_list. TDECL is the reference to the declaration of attribute WORD1") (defnode target_attribute gcc_attribute "a target-specific extension represented internally as a gcc-style attribute") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; types for the polymorphic extensions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (deftype type_parm_decl declaration (cstring ddecl) "A declaration of type parameter CSTRING") (deftype type_argument expression (asttype) "ASTTYPE used as a template argument") nescc-1.3.4/src/parser.h000066400000000000000000000021661177770303300150630ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef PARSER_H #define PARSER_H #include #include #include #include #include #include #include #include "nconfig.h" #include "array.h" #include "utils.h" #include "AST.h" #include "flags.h" #include "errors.h" #endif nescc-1.3.4/src/qualifiers.h000066400000000000000000000002121177770303300157210ustar00rootroot00000000000000Q(const, TYPE_QUAL, const_qualifier, 2) Q(volatile, TYPE_QUAL, volatile_qualifier, 4) Q(__restrict, TYPE_QUAL, restrict_qualifier, 8) nescc-1.3.4/src/sd_list.c000066400000000000000000000041351177770303300152210ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include "sd_list.h" /* static doubly-linked list */ struct sd_list { struct sd_list_pos *first; struct sd_list_pos *null; struct sd_list_pos *last; }; sd_list sd_new_list(region r) { sd_list new = ralloc(r, struct sd_list); new->first = (sd_list_pos)&new->null; new->null = NULL; new->last = (sd_list_pos)new; return new; } void sd_del_list(sd_list l) { } void sd_add_first(sd_list l, sd_list_pos data) { sd_insert_after((sd_list_pos)l, data); } void sd_add_last(sd_list l, sd_list_pos data) { sd_insert_before((sd_list_pos)&l->null, data); } void sd_insert_before(sd_list_pos where, sd_list_pos data) { data->previous = where->previous; data->next = where; where->previous->next = data; where->previous = data; } void sd_insert_after(sd_list_pos where, sd_list_pos data) { data->previous = where; data->next = where->next; where->next->previous = data; where->next = data; } void sd_remove(sd_list_pos what) { what->previous->next = what->next; what->next->previous = what->previous; } sd_list_pos sd_first(sd_list l) { return l->first; } sd_list_pos sd_last(sd_list l) { return l->last; } unsigned long sd_length(sd_list l) { sd_list_pos scan; unsigned long len = 0; sd_scan (scan, l) len++; return len; } nescc-1.3.4/src/sd_list.h000066400000000000000000000033631177770303300152300ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef SD_LIST_H #define SD_LIST_H /* static doubly-linked list */ typedef struct sd_list *sd_list; typedef struct sd_list_pos { struct sd_list_pos *next; struct sd_list_pos *previous; } *sd_list_pos; sd_list sd_new_list(region r); void sd_del_list(sd_list l); /* XXX: a noop */ void sd_add_first(sd_list l, sd_list_pos data); void sd_add_last(sd_list l, sd_list_pos data); void sd_insert_before(sd_list_pos where, sd_list_pos data); void sd_insert_after(sd_list_pos where, sd_list_pos data); void sd_remove(sd_list_pos what); sd_list_pos sd_first(sd_list l); sd_list_pos sd_last(sd_list l); #define sd_is_beginning(l) (!(l)->previous) #define sd_is_end(l) (!(l)->next) #define sd_next(l) ((l)->next) #define sd_previous(l) ((l)->previous) #define SD_GET(type, where) ((type)(where)) #define sd_scan(var, list) for (var = sd_first((list)); !sd_is_end(var); var = sd_next(var)) unsigned long sd_length(sd_list l); #endif nescc-1.3.4/src/semantics.c000066400000000000000000003330711177770303300155520ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "semantics.h" #include "flags.h" #include "c-parse.h" #include "c-lex.h" #include "env.h" #include "expr.h" #include "stmt.h" #include "AST_utils.h" #include "constants.h" #include "nesc-component.h" #include "nesc-interface.h" #include "nesc-semantics.h" #include "nesc-doc.h" #include "nesc-cpp.h" #include "machine.h" #include "attributes.h" #include "nesc-task.h" /* Predefined __builtin_va_list type */ type builtin_va_list_type; data_declaration builtin_va_arg_decl; data_declaration builtin_constant_p; /* The current semantic state */ struct semantic_state current; dd_list spontaneous_calls; data_declaration bad_decl; static type implicit_function_type, dummy_function_type; static function_declarator dummy_function_declarator; /* The global environment */ environment global_env; static known_cst onecst, zerocst; static expression oneexpr; environment new_environment(region r, environment parent, bool global_level, bool parm_level) { environment env = ralloc(r, struct environment); #if 0 env->fdecl = NULL; #endif env->parent = parent; env->parm_level = parm_level; env->global_level = global_level; env->deputy_scope = FALSE; if (parent) { env->fdecl = parent->fdecl; env->id_env = new_env(r, parent->id_env); /* ANSI C is weird */ if (parent->parm_level) env->tag_env = parent->tag_env; else env->tag_env = new_env(r, parent->tag_env); } else { env->id_env = new_env(r, NULL); env->tag_env = new_env(r, NULL); } return env; } void init_data_declaration(data_declaration dd, declaration ast, const char *name, type t) { dd->kind = 0; dd->name = name; dd->type = t; dd->attributes = NULL; dd->safe = flag_default_safe; dd->shadowed = NULL; dd->ast = ast; dd->definition = NULL; dd->isexternalscope = FALSE; dd->isfilescoperef = FALSE; dd->needsmemory = FALSE; dd->isused = FALSE; dd->in_system_header = ast->location->in_system_header; dd->ftype = 0; dd->isinline = FALSE; dd->noinlinep = FALSE; dd->isexterninline = FALSE; dd->oldstyle_args = NULL; dd->vtype = 0; dd->islocal = FALSE; dd->isparameter = FALSE; dd->islimbo = FALSE; dd->value = NULL; dd->schars.data = NULL; dd->schars.length = 0; dd->id = 0; dd->defined = FALSE; dd->suppress_definition = FALSE; dd->uncallable = FALSE; dd->async = FALSE; dd->actual_async = FALSE; dd->required = FALSE; dd->itype = NULL; dd->gparms = NULL; dd->ctype = NULL; dd->container = NULL; dd->interface = NULL; dd->Cname = FALSE; dd->nuses = NULL; dd->fn_uses = NULL; dd->connections = NULL; dd->spontaneous = 0; dd->magic_fold = NULL; dd->substitute = FALSE; dd->makeinline = FALSE; dd->container_function = NULL; dd->use_summary = 0; dd->async_access = dd->async_write = FALSE; dd->norace = FALSE; dd->instantiation = NULL; dd->instanceof = NULL; dd->call_contexts = dd->extra_contexts = 0; dd->printed = FALSE; dd->dumped = FALSE; dd->encoder = dd->decoder = NULL; dd->bf_encoder = dd->bf_decoder = NULL; dd->basetype = NULL; dd->typevar_kind = typevar_none; dd->doc.short_s = dd->doc.long_s = NULL; dd->doc.loc = NULL; } data_declaration lookup_id(const char *s, bool this_level_only) { return env_lookup(current.env->id_env, s, this_level_only); } data_declaration lookup_global_id(const char *s) { return env_lookup(global_env->id_env, s, TRUE); } data_declaration declare(environment b, data_declaration from, bool ignore_shadow) { data_declaration dd = ralloc(parse_region, struct data_declaration); *dd = *from; if (dd->name) { check_name(dd->name); /* In PCC-compatibility mode, extern decls of vars with no current decl take effect at top level no matter where they are. */ /* We don't do the GCC "type exists at global scope" check because it's mostly meaningless. XXX: review if I start freeing mem earlier */ if (!b->global_level) { /* Here to install a non-global value. */ data_declaration shadowed = lookup_id(dd->name, FALSE); char *warnstring = 0; /* Warn if shadowing an argument at the top level of the body. */ if (shadowed && shadowed->islocal /* This warning doesn't apply to the parms of a nested fcn. */ && !b->parm_level /* Check that this is one level down from the parms. */ && b->parent->parm_level /* Check that the decl exists in the parm level */ && env_lookup(b->parent->id_env, dd->name, TRUE)) { if (shadowed->isparameter) warnstring = "declaration of `%s' shadows a parameter"; else warnstring = "declaration of `%s' shadows a symbol from the parameter list"; } /* Maybe warn if shadowing something else. */ else if (warn_shadow && !ignore_shadow) { if (dd->isparameter && b->parent->parm_level) /* Don't warn about the parm names in function declarator within a function declarator. It would be nice to avoid warning in any function declarator in a declaration, as opposed to a definition, but there is no way to tell it's not a definition. */ ; else if (shadowed && shadowed->isparameter) warnstring = "declaration of `%s' shadows a parameter"; else if (shadowed && shadowed->islocal) warnstring = "declaration of `%s' shadows previous local"; else if (shadowed) warnstring = "declaration of `%s' shadows global declaration"; } if (warnstring) { (error_shadow ? error : warning)(warnstring, dd->name); (error_shadow ? error_with_location : warning_with_location)(shadowed->ast->location, "location of shadowed declaration"); } } /* Parameters are declared before the function_decl is created (and may be declared in several places). The id's of parameters are set in start_function */ if (dd->kind == decl_variable && dd->islocal && !dd->isparameter) dd->id = b->fdecl->nlocals++; } assert(!dd->islimbo); if (b->global_level) dd->container = current.container; if (current.function_decl) dd->container_function = current.function_decl->ddecl; env_add(b->id_env, dd->name, dd); if (!dd->container || (dd->container && !dd->container->abstract)) { /* C names go all the way to the top... */ if (dd->Cname) env_add(global_env->id_env, dd->name, dd); if (!dd->container_function && flag_c && !dd->spontaneous) dd->spontaneous = c_call_nonatomic; if (dd->spontaneous || (getenv("ALLCODE") && dd->kind == decl_function)) dd_add_last(parse_region, spontaneous_calls, dd); } return dd; } tag_declaration declare_tag_env(environment env, tag_ref t) { tag_declaration tdecl = ralloc(parse_region, struct tag_declaration); const char *name = t->word1 ? t->word1->cstring.data : NULL; tdecl->kind = t->kind; tdecl->name = name; tdecl->size = tdecl->alignment = tdecl->user_alignment = cval_top; #if 0 /* ralloc guarantees 0 / NULL */ tdecl->fields = NULL; tdecl->fieldlist = NULL; tdecl->defined = tdecl->being_defined = FALSE; tdecl->fields_const = tdecl->fields_volatile = FALSE; tdecl->transparent_union = FALSE; tdecl->collapsed = FALSE; tdecl->size_cc = FALSE; tdecl->container = NULL; tdecl->dumped = FALSE; tdecl->instanceof = NULL; tdecl->Cname = FALSE; tdecl->macro_name = NULL; tdecl->deputy_scope = FALSE; #endif if (name) { tdecl->shadowed = env_lookup(env->tag_env, name, FALSE); if (tdecl->shadowed && warn_shadow) (error_shadow ? error : warning) ("tag %s shadows enclosing struct/union/enum", name); } else tdecl->shadowed = NULL; if (env->global_level) tdecl->container = current.container; if (current.function_decl) tdecl->container_function = current.function_decl->ddecl; /* We register all tags in the environment, even unnamed ones. */ env_add(env->tag_env, name, tdecl); return tdecl; } tag_declaration lookup_tag_env(environment env, tag_ref t, bool this_level_only) { tag_declaration found = env_lookup(env->tag_env, t->word1->cstring.data, this_level_only); /* Check if wrong kind */ if (found && found->kind != t->kind) current.pending_invalid_xref = t; return found; } tag_declaration declare_tag(tag_ref t) { return declare_tag_env(current.env, t); } tag_declaration lookup_tag(tag_ref t, bool this_level_only) { return lookup_tag_env(current.env, t, this_level_only); } tag_declaration declare_global_tag(tag_ref t) { return declare_tag_env(global_env, t); } tag_declaration lookup_global_tag(tag_ref t) { return lookup_tag_env(global_env, t, TRUE); } /* If elements is 'struct foo' shadow tag foo in the current environment */ void shadow_tag(type_element elements) { shadow_tag_warned(elements, 0); } /* Like shadow_tag, but warned is: 1 => we have done a pedwarn; 2 => we have done a warning, but no pedwarn. */ void shadow_tag_warned(type_element elements, int warned) { type_element elem; int found_tag = 0; current.pending_invalid_xref = 0; scan_type_element (elem, elements) { if (is_tag_ref(elem)) { tag_ref tag = CAST(tag_ref, elem); word name = tag->word1; found_tag++; if (name == 0) { if (warned != 1 && !is_enum_ref(elem)) /* Empty unnamed enum OK */ { pedwarn ("unnamed struct/union that defines no instances"); warned = 1; } } else { void *tagdecl = lookup_tag(tag, TRUE); if (tagdecl == 0) declare_tag(tag); else pending_xref_error(); } } else { if (!warned && ! current.lex.input->l.in_system_header) { warning("useless keyword or type name in empty declaration"); warned = 2; } } } if (found_tag > 1) error("two types specified in one empty declaration"); if (warned != 1) { if (found_tag == 0) pedwarn("empty declaration"); } } /* Print an error message now for a recent invalid struct, union or enum cross reference. We don't print them immediately because they are not invalid when used in the `struct foo;' construct for shadowing. */ void pending_xref_error(void) { if (current.pending_invalid_xref != 0) { error_with_location(current.pending_invalid_xref->location, "`%s' defined as wrong kind of tag", current.pending_invalid_xref->word1->cstring.data); current.pending_invalid_xref = 0; } } declaration make_void_parm(location loc) { region r = parse_region; rid rvoid = new_rid(r, loc, RID_VOID); variable_decl vdvoid = new_variable_decl(r, loc, NULL, NULL, NULL, NULL, NULL); data_decl ddvoid = new_data_decl(r, loc, CAST(type_element, rvoid), CAST(declaration, vdvoid)); return CAST(declaration, ddvoid); } /* At end of parameter list, warn about any struct, union or enum tags defined within. Do so because these types cannot ever become complete. */ static void parmlist_tags_warning(environment parm_env) { env_scanner scan_tags; const char *tagname; tag_declaration tagdecl; static bool already = FALSE; env_scan(parm_env->tag_env, &scan_tags); while (env_next(&scan_tags, &tagname, (void **)&tagdecl)) { int kind = tagdecl->kind; const char *kindname = tagkind_name(kind); /* An anonymous union parm type is meaningful as a GNU extension. So don't warn for that. */ if (kind == kind_union_ref && !tagname && !pedantic) continue; if (tagname) warning("`%s %s' declared inside parameter list", kindname, tagname); else warning("anonymous %s declared inside parameter list", kindname); if (!already) { warning("its scope is only this definition or declaration,"); warning("which is probably not what you want."); already = TRUE; } } } typelist make_arg_types(bool definition, declaration parameters, bool *varargs) { declaration parameter; typelist arg_types = new_typelist(parse_region); *varargs = FALSE; if (!is_void_parms(parameters)) scan_declaration (parameter, parameters) if (is_ellipsis_decl(parameter)) *varargs = TRUE; else if (is_error_decl(parameter)) { /* Make an "accept everything" signature for arg lists with error_decls */ *varargs = TRUE; arg_types = new_typelist(parse_region); typelist_append(arg_types, error_type); return arg_types; } else { data_decl dp = CAST(data_decl, parameter); variable_decl vp = CAST(variable_decl, dp->decls); assert(!vp->next); if (!vp->ddecl->name && definition) error_with_decl(dp->decls, "parameter name omitted"); typelist_append(arg_types, vp->ddecl->type); } return arg_types; } bool new_style(declaration parameters) { return parameters && !is_oldidentifier_decl(parameters); } static dd_list push_attribute(dd_list al, attribute attr) { /* pstate.ds_region would be good, but isn't quite accessible */ if (!al) al = dd_new_list(parse_region); dd_add_last(parse_region, al, attr); return al; } static void check_duplicate_rid(int specbits, rid rspec) { if (specbits & 1 << rspec->id) pedwarn_with_location(rspec->location, "duplicate `%s'", rid_name(rspec)); } static void check_duplicate_qualifiers1(location l, type_quals new1, type_quals old) { if (old & new1) pedwarn_with_location(l, "duplicate `%s'", qualifier_name(new1)); } static void check_duplicate_qualifiers(location l, type_quals new, type_quals old) { type_quals qual; for (qual = 1; qual < last_qualifier; qual <<= 1) if (new & qual) check_duplicate_qualifiers1(l, qual, old); } static void check_legal_qualifiers(location l, type_quals quals) { /* Placeholder for checks for any extra qualifiers */ } static type parse_qualifiers(type t, location l, type_element qlist, dd_list *oattributes) { type_element q; type_quals tqs = no_qualifiers; scan_type_element (q, qlist) if (is_qualifier(q)) { qualifier qq = CAST(qualifier, q); check_duplicate_qualifiers1(qq->location, qq->id, tqs); tqs |= qq->id; } else if (is_attribute(q)) { /* Filter out type-only attributes */ if (!handle_type_attribute(CAST(attribute, q), &t)) *oattributes = push_attribute(*oattributes, CAST(attribute, q)); } check_legal_qualifiers(l, tqs); return make_qualified_type(t, tqs); } static type make_nesc_function_type(int class, type returns, typelist argtypes, bool varargs) { switch (class) { case RID_TASK: return make_task_type(returns, argtypes, varargs); case RID_EVENT: return make_event_type(returns, argtypes, varargs); case RID_COMMAND: return make_command_type(returns, argtypes, varargs); default: return make_function_type(returns, argtypes, varargs, FALSE); } } scflags parse_scflags(int specbits) { scflags scf = 0; if (specbits & 1 << RID_INLINE) scf |= scf_inline; if (specbits & 1 << RID_DEFAULT) scf |= scf_default; if (specbits & 1 << RID_ASYNC) scf |= scf_async; if (specbits & 1 << RID_NORACE) scf |= scf_norace; return scf; } void check_variable_scflags(scflags scf, location l, const char *kind, const char *name) { const char *badqual = NULL; void (*msg)(location l, const char *format, ...) = error_with_location; /* default already covered in parse_declarator */ if (scf & scf_inline) { badqual = "inline"; msg = pedwarn_with_location; /* this is what gcc does */ } if (scf & scf_async) badqual = "async"; if (badqual) msg(l, "%s `%s' declared `%s'", kind, name, badqual); } void check_array_size(expression size, const char *printname) { if (!check_constant_once(size, cst_numerical)) return; if (size->cst && constant_integral(size->cst)) { if (pedantic) { constant_overflow_warning(size->cst); if (definite_zero(size)) pedwarn_with_location (size->location, "ANSI C forbids zero-size array `%s'", printname); } if (cval_intcompare(size->cst->cval, cval_zero) < 0) error_with_location(size->location, "size of array `%s' is negative", printname); } else if (!(current.function_decl || current.env->parm_level)) { if (size->cst) error_with_location(size->location, "type size can't be explicitly evaluated"); else error_with_location(size->location, "variable-size type declared outside of any function"); } else if (pedantic) { if (size->cst) pedwarn_with_location(size->location, "ANSI C forbids array `%s' whose size can't be evaluated", printname); else pedwarn_with_location(size->location, "ANSI C forbids variable-size array `%s'", printname); } } void parse_declarator(type_element modifiers, declarator d, bool bitfield, bool require_parm_names, int *oclass, scflags *oscf, const char **ointf, const char **oname, type *ot, bool *owarn_defaulted_int, function_declarator *ofunction_declarator, dd_list *oattributes) { location loc = d ? d->location : modifiers->location; int specbits = 0, nclasses = 0; type_quals specquals = no_qualifiers; bool longlong = FALSE; const char *printname, *iname; type_element spec; type t = NULL; bool modified; dd_list attributes = NULL; *owarn_defaulted_int = FALSE; /* We get the name now so that we have a name for error messages */ if (ointf) *ointf = NULL; declarator_name(d, oname, &iname); printname = nice_declarator_name(d); *oclass = 0; scan_type_element (spec, modifiers) { type newtype = NULL; switch (spec->kind) { case kind_rid: { rid rspec = CAST(rid, spec); int id = rspec->id; switch (id) { case RID_INT: newtype = int_type; break; case RID_CHAR: newtype = char_type; break; case RID_FLOAT: newtype = float_type; break; case RID_DOUBLE: newtype = double_type; break; case RID_VOID: newtype = void_type; break; case RID_AUTO: case RID_STATIC: case RID_EXTERN: case RID_REGISTER: case RID_TYPEDEF: case RID_COMMAND: case RID_EVENT: case RID_TASK: *oclass = id; nclasses++; break; case RID_LONG: /* long long detection */ if (specbits & 1 << RID_LONG) { if (longlong) error_with_location(spec->location, "`long long long' is too long for GCC"); else { if (pedantic && !current.lex.input->l.in_system_header) pedwarn_with_location(spec->location, "ANSI C does not support `long long'"); longlong = TRUE; } break; } /* Fall through */ default: check_duplicate_rid(specbits, rspec); break; } specbits |= 1 << id; break; } case kind_qualifier: { qualifier q = CAST(qualifier, spec); int id = q->id; check_duplicate_qualifiers1(loc, id, specquals); specquals |= id; break; } case kind_typename: case kind_component_typeref: newtype = CAST(typename, spec)->ddecl->type; break; case kind_typeof_type: newtype = CAST(typeof_type, spec)->asttype->type; break; case kind_typeof_expr: newtype = CAST(typeof_expr, spec)->arg1->type; if (type_generic(newtype) || (type_functional(newtype) && !type_function(newtype))) { error_with_location(spec->location, "expression does not have a valid type"); newtype = error_type; } else if (type_unknown(newtype)) { error_with_location(spec->location, "typeof an expression based on an @integer() or @number() type not supported"); newtype = error_type; } break; case kind_struct_ref: case kind_union_ref: case kind_enum_ref: case kind_nx_struct_ref: case kind_nx_union_ref: newtype = make_tagged_type(CAST(tag_ref, spec)->tdecl); break; case kind_attribute_ref: error_with_location(spec->location, "attributes cannot be used as types"); newtype = error_type; break; case kind_gcc_attribute: case kind_target_attribute: case kind_nesc_attribute: attributes = push_attribute(attributes, CAST(attribute, spec)); break; default: assert(0); break; } if (newtype) { if (t) error_with_location(spec->location, "two or more data types in declaration of `%s'", printname); else t = newtype; } } /* Long double is a special combination. */ if ((specbits & 1 << RID_LONG) && !longlong && (specbits & 1 << RID_DOUBLE)) { specbits &= ~(1 << RID_LONG); t = long_double_type; } modified = !!(specbits & (1 << RID_LONG | 1 << RID_SHORT | 1 << RID_SIGNED | 1 << RID_UNSIGNED)); /* No type at all: default to `int', or `double' (if complex specified and no long/short/signed/unsigned) */ if (!t) { if (specbits & 1 << RID_COMPLEX) { if (!modified) { specbits |= 1 << RID_DOUBLE; t = double_type; } else { specbits |= 1 << RID_INT; t = int_type; } } else { /* Defer defaulted int warning to caller (msg depends on context) */ if (!modified) *owarn_defaulted_int = TRUE; specbits |= 1 << RID_INT; t = int_type; } } if (nclasses > 1) error_with_location(loc, "multiple storage classes in declaration of `%s'", printname); /* Now process the modifiers that were specified and check for invalid combinations. */ /* Check all other uses of type modifiers. */ if (modified) { int ok = 0; if ((specbits & 1 << RID_LONG) && (specbits & 1 << RID_SHORT)) error_with_location(loc, "both long and short specified for `%s'", printname); else if ((specbits & 1 << RID_SHORT) && !(specbits & 1 << RID_INT)) { static int already = 0; error_with_location(loc, "short invalid for `%s'", printname); if (!already && !pedantic) { error_with_location(loc, "short is only valid with int"); already = 1; } } else if ((specbits & 1 << RID_LONG) && !(specbits & 1 << RID_INT)) { static int already = 0; error_with_location(loc, "long invalid for `%s'", printname); if (!already && !pedantic) { error_with_location(loc, "long is only valid with int or double"); already = 1; } } else if ((specbits & 1 << RID_SIGNED) && (specbits & 1 << RID_UNSIGNED)) error_with_location(loc, "both signed and unsigned specified for `%s'", printname); else if (((specbits & 1 << RID_SIGNED) || (specbits & 1 << RID_UNSIGNED)) && !(specbits & (1 << RID_INT | 1 << RID_CHAR))) error_with_location(loc, "signed or unsigned invalid for `%s'", printname); else ok = 1; /* Discard the type modifiers if they are invalid. */ if (! ok) { specbits &= ~(1 << RID_LONG | 1 << RID_SHORT | 1 << RID_UNSIGNED | 1 << RID_SIGNED); longlong = 0; } } if ((specbits & 1 << RID_COMPLEX) && !(type_integral(t) || type_floating(t))) { error_with_location(loc, "complex invalid for `%s'", printname); specbits &= ~(1 << RID_COMPLEX); } /* Decide whether an integer type is signed or not. Optionally treat bitfields as signed by default. */ if ((specbits & 1 << RID_UNSIGNED) /* Traditionally, all bitfields are unsigned. */ || (bitfield && flag_traditional && (/*!explicit_flag_signed_bitfields ||*/ !flag_signed_bitfields)) || (bitfield && !flag_signed_bitfields && ((specbits & 1 << RID_INT) || (specbits & 1 << RID_CHAR)) && !(specbits & 1 << RID_SIGNED))) { if (longlong) t = unsigned_long_long_type; else if (specbits & 1 << RID_LONG) t = unsigned_long_type; else if (specbits & 1 << RID_SHORT) t = unsigned_short_type; else if (t == char_type) t = unsigned_char_type; else t = unsigned_int_type; } else if ((specbits & 1 << RID_SIGNED) && (specbits & 1 << RID_CHAR)) t = signed_char_type; else if (longlong) t = long_long_type; else if (specbits & 1 << RID_LONG) t = long_type; else if (specbits & 1 << RID_SHORT) t = short_type; if (specbits & 1 << RID_COMPLEX) t = make_complex_type(t); /* Check for qualifiers redundant with base type */ check_duplicate_qualifiers(loc, specquals, type_qualifiers(t)); specquals |= type_qualifiers(t); check_legal_qualifiers(loc, specquals); t = make_qualified_type(t, specquals); *oscf = parse_scflags(specbits); if ((*oscf & scf_default) && !(*oclass == RID_EVENT || *oclass == RID_COMMAND)) { *oscf &= ~scf_default; error_with_location(loc, "default can only be specified for events or commands"); } if (pedantic && type_function(t) && (type_const(t) || type_volatile(t)) && !current.lex.input->l.in_system_header) pedwarn_with_location(loc, "ANSI C forbids const or volatile function types"); /* Now figure out the structure of the declarator proper. Descend through it, creating more complex types, until we reach the declared identifier (or NULL, in an abstract declarator). */ while (d && d->kind != kind_identifier_declarator) { switch (d->kind) { case kind_array_declarator: { array_declarator ad = CAST(array_declarator, d); expression size = ad->arg1; d = ad->declarator; /* Check for some types that there cannot be arrays of. */ if (type_void(t)) { error_with_location(ad->location, "declaration of `%s' as array of voids", printname); t = error_type; } if (type_function(t)) { error_with_location(ad->location, "declaration of `%s' as array of functions", printname); t = error_type; } if (size && is_error_expr(size)) t = error_type; if (t == error_type) continue; if (size) { if (!type_integer(size->type)) { error_with_location(ad->location, "size of array `%s' has non-integer type", printname); size = oneexpr; } else check_array_size(size, printname); } /* Build the array type itself, then merge any constancy or volatility */ t = make_array_type(t, size); break; } case kind_function_declarator: { function_declarator fd = CAST(function_declarator, d); bool newstyle; d = fd->declarator; if (ofunction_declarator) *ofunction_declarator = fd; /* Declaring a function type. Make sure we have a valid type for the function to return. */ if (t == error_type) t = int_type; /* Warn about some types functions can't return. */ if (type_function(t)) { error_with_location(fd->location, "`%s' declared as function returning a function", printname); t = int_type; } if (type_array(t)) { error_with_location(fd->location, "`%s' declared as function returning an array", printname); t = int_type; } #ifndef TRADITIONAL_RETURN_FLOAT /* Traditionally, declaring return type float means double. */ if (flag_traditional && type_float(t)) t = qualify_type1(double_type, t); #endif /* TRADITIONAL_RETURN_FLOAT */ /* Require new-style declarations */ if (current.language != l_c) { /* Force empty parameter lists to void */ if (!fd->parms) fd->parms = make_void_parm(fd->location); newstyle = !is_oldidentifier_decl(fd->parms); if (!newstyle) error("old-style parameter lists not supported"); } else newstyle = new_style(fd->parms); if (newstyle) { bool definition = require_parm_names && d && d->kind == kind_identifier_declarator; bool varargs; typelist argtypes = make_arg_types(definition, fd->parms, &varargs); if (*oclass == RID_TASK) { if (!is_void_parms(fd->parms)) error_with_location(fd->location, "`%s' declared as a task with parameters", printname); if (!type_void(t)) error_with_location(fd->location, "task `%s' must return void", printname); } t = make_nesc_function_type(*oclass, t, argtypes, varargs); if (fd->gparms) { argtypes = make_arg_types(definition, fd->gparms, &varargs); t = make_generic_type(t, argtypes); } } else /* Old-style function */ t = make_function_type(t, NULL, FALSE, TRUE); t = parse_qualifiers(t, fd->location, fd->qualifiers, NULL); break; } case kind_pointer_declarator: { pointer_declarator pd = CAST(pointer_declarator, d); d = pd->declarator; t = make_pointer_type(t); break; } case kind_qualified_declarator: { qualified_declarator qd = CAST(qualified_declarator, d); d = qd->declarator; t = parse_qualifiers(t, qd->location, qd->modifiers, &attributes); break; } case kind_interface_ref_declarator: { interface_ref_declarator id = CAST(interface_ref_declarator, d); d = id->declarator; if (ointf) *ointf = id->word1->cstring.data; else error_with_location(id->location, "unexpected interface reference in declaration of `%s'", printname); break; } default: assert(0); } } *ot = t; *oattributes = attributes; } static declarator finish_function_declarator(function_declarator fd) { declaration parm; environment penv = poplevel(); fd->env = penv; if (new_style(fd->parms) && !is_void_parms(fd->parms)) scan_declaration (parm, fd->parms) if (!is_ellipsis_decl(parm) && !is_error_decl(parm)) { variable_decl vp = CAST(variable_decl, CAST(data_decl, parm)->decls); if (!vp->ddecl) { error_with_location(fd->location, "parameter declared void"); vp->ddecl = bad_decl; } else if (!vp->ddecl->isused) { /* ok, so it's not really a field */ const char *pname = nice_field_name(vp->ddecl->name); error_with_location(fd->location, "parameter `%s' has just a forward declaration", pname); } } parmlist_tags_warning(penv); return CAST(declarator, fd); } declarator finish_array_or_fn_declarator(declarator nested, nested_declarator d) { d->declarator = nested; if (is_function_declarator(d)) return finish_function_declarator(CAST(function_declarator, d)); else return CAST(declarator, d); } /* Return zero if the declaration NEWDECL is valid when the declaration OLDDECL (assumed to be for the same name and kind of declaration) has already been seen. Otherwise return an error message format string with a %s where the identifier should go. */ static char *redeclaration_error_message(data_declaration newdecl, data_declaration olddecl, bool newinitialised) { if (olddecl->islimbo) return 0; if (newdecl->kind == decl_typedef) { if (flag_traditional && type_compatible(newdecl->type, olddecl->type)) return 0; /* This gets a warning later */ if (olddecl->in_system_header || newdecl->in_system_header) return 0; return "redefinition of `%s'"; } else if (newdecl->kind == decl_function) { /* Declarations of functions can insist on internal linkage but they can't be inconsistent with internal linkage, so there can be no error on that account. However defining the same name twice is no good. */ if (olddecl->definition && newdecl->definition /* However, defining once as extern inline and a second time in another way is ok. */ && !(olddecl->isexterninline && !newdecl->isexterninline)) return "redefinition of `%s'"; return 0; } else if (newdecl->kind == decl_constant) return "redefinition of `%s'"; else if (current.env->global_level) { /* Objects declared at top level: */ /* If at least one is a reference, it's ok. */ if (newdecl->isfilescoperef || olddecl->isfilescoperef) return 0; /* Reject two definitions with initialisation. */ if (newinitialised && olddecl->initialiser) return "redefinition of `%s'"; /* Now we have two tentative defs, or one tentative and one real def. */ /* Insist that the linkage match. */ if (olddecl->isexternalscope != newdecl->isexternalscope) return "conflicting declarations of `%s'"; return 0; } else { /* Newdecl has block scope. If olddecl has block scope also, then reject two definitions, and reject a definition together with an external reference. Otherwise, it is OK, because newdecl must be an extern reference to olddecl. */ if (!(newdecl->isexternalscope && olddecl->isexternalscope)) #if 0 Why check the context ? && DECL_CONTEXT (newdecl) == DECL_CONTEXT (olddecl) #endif return "redeclaration of `%s'"; return 0; } } /* Return TRUE if t1 looks like a modern declaration for malloc (&friends) and t2 looks like an oldstyle declaration thereof */ static bool looks_like_malloc_redeclaration(type t1, type t2) { type t1return = type_function_return_type(t1); type t2return = type_function_return_type(t2); return type_function_oldstyle(t1) && type_pointer(t1return) && type_pointer(t2return) && type_void(type_points_to(t2return)) && type_char(type_points_to(t1return)) && self_promoting_args(t2); } void show_previous_decl(void (*message)(declaration d, const char *format, ...), data_declaration olddecl) { if (olddecl->kind == decl_function && olddecl->ftype == function_implicit) message(olddecl->ast, "previous implicit declaration of `%s'", olddecl->name); else if (ddecl_is_command_or_event(olddecl) && olddecl->definition) message(olddecl->definition, "previous declaration of `%s'", decl_printname(olddecl)); else message(olddecl->ast, "previous declaration of `%s'", decl_printname(olddecl)); } /* Handle when a new declaration NEWDECL has the same name as an old one OLDDECL in the same binding contour. Prints an error message if appropriate. If safely possible, alter OLDDECL to look like NEWDECL, and return 1. Otherwise, return 0. When DIFFERENT_BINDING_LEVEL is true, NEWDECL is an external declaration, and OLDDECL is in an outer binding level and should thus not be changed. */ int duplicate_decls(data_declaration newdecl, data_declaration olddecl, bool different_binding_level, bool newinitialised) { type oldtype = olddecl->type; type newtype = newdecl->type; char *errmsg = 0; void (*previous_message)(declaration d, const char *format, ...) = NULL; bool types_match; assert(!(newdecl->kind == decl_function && newdecl->ftype == function_implicit)); /* New decl is completely inconsistent with the old one => tell caller to replace the old one. This is an error, except if traditional and in different binding levels */ if (newdecl->kind != olddecl->kind) { bool iswarning = (flag_traditional && different_binding_level) || olddecl->islimbo; warning_or_error(iswarning, "`%s' redeclared as different kind of symbol", decl_printname(olddecl)); show_previous_decl(iswarning ? warning_with_decl : error_with_decl, olddecl); newdecl->shadowed = olddecl; return 0; } if (newtype == error_type || oldtype == error_type) types_match = FALSE; else types_match = type_compatible_unqualified(newtype, oldtype); /* For real parm decl following a forward decl, or a declaration of an old style parameter (oldtype == void) return 1 so old decl will be reused. */ if ((oldtype == void_type || types_match) && newdecl->isparameter && !olddecl->isused) { /* Point to the latest declaration */ olddecl->ast = newdecl->ast; return 1; } /* The new declaration is the same kind of object as the old one. The declarations may partially match. Print warnings if they don't match enough. Ultimately, copy most of the information from the new decl to the old one, and keep using the old one. */ if (flag_traditional && olddecl->kind == decl_function && olddecl->ftype == function_implicit) /* If -traditional, avoid error for redeclaring fcn after implicit decl. */ ; /* Permit char *foo () to match void *foo (...) if not pedantic, if one of them came from a system header file. */ else if (!types_match && olddecl->kind == decl_function && (olddecl->in_system_header || newdecl->in_system_header) && (looks_like_malloc_redeclaration(oldtype, newtype) || looks_like_malloc_redeclaration(newtype, oldtype))) { if (pedantic) pedwarn_with_decl(newdecl->ast, "conflicting types for `%s'", decl_printname(olddecl)); /* Make sure we keep void * as ret type, not char *. */ if (type_void(type_points_to(type_function_return_type(oldtype)))) newdecl->type = newtype = oldtype; /* Set IN_SYSTEM_HEADER, so that if we see another declaration we will come back here again. */ newdecl->in_system_header = TRUE; } else if (!types_match /* Permit char *foo (int, ...); followed by char *foo (); if not pedantic. */ && !(olddecl->kind == decl_function && !pedantic && type_function_oldstyle(newtype) /* Return types must still match. */ && type_compatible(type_function_return_type(oldtype), type_function_return_type(newtype)))) { void (*message)(const char *format, ...) = olddecl->islimbo ? warning : error; previous_message = olddecl->islimbo ? warning_with_decl : error_with_decl; message("conflicting types for `%s'", decl_printname(olddecl)); /* Check for function type mismatch involving an empty arglist vs a nonempty one. */ if (newdecl->kind == decl_function && type_compatible(type_function_return_type(oldtype), type_function_return_type(newtype)) && ((type_function_oldstyle(oldtype) && !olddecl->definition) || (type_function_oldstyle(newtype) && !newdecl->definition))) { /* Classify the problem further. */ if (type_function_varargs(newtype) || type_function_varargs(oldtype)) { message("A parameter list with an ellipsis can't match"); message("an empty parameter name list declaration."); } else { typelist_scanner scanargs; type t; typelist args = type_function_arguments(oldtype); if (!args) args = type_function_arguments(newtype); typelist_scan(args, &scanargs); while ((t = typelist_next(&scanargs))) if (!type_self_promoting(t)) { message("An argument type that has a default promotion"); message("can't match an empty parameter name list declaration."); break; } } } } else { errmsg = redeclaration_error_message(newdecl, olddecl, newinitialised); if (errmsg) { error_with_decl(newdecl->ast, errmsg, decl_printname(olddecl)); previous_message = error_with_decl; } else if (newdecl->kind == decl_typedef && (olddecl->in_system_header || newdecl->in_system_header)) { warning_with_decl(newdecl->ast, "redefinition of `%s'", decl_printname(olddecl)); previous_message = warning_with_decl; } else if (olddecl->kind == decl_function && olddecl->oldstyle_args && !type_function_oldstyle(newtype)) { int nargs; typelist_scanner oldparms, newparms; /* Prototype decl follows defn w/o prototype. */ typelist_scan(olddecl->oldstyle_args, &oldparms); typelist_scan(type_function_arguments(newtype), &newparms); nargs = 1; errmsg = NULL; for (;;) { type oldparm = typelist_next(&oldparms); type newparm = typelist_next(&newparms); if (!oldparm && !newparm) break; if (!oldparm || !newparm) { errmsg = "prototype for `%s' follows and number of arguments"; break; } /* Type for passing arg must be consistent with that declared for the arg. */ if (!type_compatible(oldparm, newparm) /* If -traditional, allow `unsigned int' instead of `int' in the prototype. */ && !(flag_traditional && type_equal_unqualified(oldparm, int_type) && type_equal_unqualified(newparm, unsigned_int_type))) { errmsg = "prototype for `%s' follows and argument %d"; break; } nargs++; } if (errmsg) { warning_or_error_with_decl(olddecl->islimbo, newdecl->ast, errmsg, decl_printname(olddecl), nargs); warning_or_error_with_decl(olddecl->islimbo, olddecl->ast, "doesn't match non-prototype definition here"); } else { warning_with_decl(newdecl->ast, "prototype for `%s' follows", decl_printname(olddecl)); warning_with_decl(olddecl->ast, "non-prototype definition here"); } } /* Warn about mismatches in various flags. */ else if (newdecl->kind == decl_function) { /* Warn if function is now inline but was previously declared not inline and has been called. */ if (!olddecl->isinline && newdecl->isinline) { if (olddecl->isused) { warning("`%s' declared inline after being called", decl_printname(olddecl)); previous_message = warning_with_decl; } if (olddecl->definition) { warning("`%s' declared inline after its definition", decl_printname(olddecl)); previous_message = warning_with_decl; } } /* Warn for static following external */ if (newdecl->ftype == function_static && olddecl->ftype == function_implicit) { pedwarn("`%s' was declared implicitly `extern' and later `static'", decl_printname(olddecl)); previous_message = pedwarn_with_decl; } else if (newdecl->ftype == function_static && olddecl->ftype == function_normal) { pedwarn("static declaration for `%s' follows non-static", decl_printname(olddecl)); previous_message = pedwarn_with_decl; } /* Warn for mismatched async */ if (newdecl->async != olddecl->async) { error("`%s': async mismatch with declaration", decl_printname(olddecl)); previous_message = error_with_decl; } } else if (newdecl->kind == decl_variable) { /* If pedantic, warn when static declaration follows a non-static declaration. */ if (pedantic && olddecl->isexternalscope && !newdecl->isexternalscope) { pedwarn("static declaration for `%s' follows non-static", decl_printname(olddecl)); previous_message = pedwarn_with_decl; } /* Warn when const declaration follows a non-const declaration */ if (!type_const(oldtype) && type_const(newtype)) warning("const declaration for `%s' follows non-const", decl_printname(olddecl)); /* These bits are logically part of the type, for variables. */ else if (pedantic && (type_const(oldtype) != type_const(newtype) || type_volatile(oldtype) != type_volatile(newtype))) { pedwarn("type qualifiers for `%s' conflict with previous decl", decl_printname(olddecl)); previous_message = pedwarn_with_decl; } } } /* Optionally warn about more than one declaration for the same name. */ /* Let's try a different test than GCC */ if (errmsg == 0 && warn_redundant_decls && !olddecl->islimbo && !(olddecl->isfilescoperef && !newdecl->isfilescoperef)) { warning_with_decl(newdecl->ast, "redundant redeclaration of `%s' in same scope", decl_printname(olddecl)); previous_message = warning_with_decl; } if (previous_message) show_previous_decl(previous_message, olddecl); /* Copy all the DECL_... slots specified in the new decl except for any that we copy here from the old type. */ /* If either decl says `inline', this fn is inline, unless its definition was passed already. */ if (newdecl->isinline && !olddecl->definition) olddecl->isinline = TRUE; newdecl->isinline = olddecl->isinline; /* If either of the decls says noinline, make sure that none of the declerations are made inline. */ if (newdecl->noinlinep || olddecl->noinlinep) newdecl->noinlinep = olddecl->noinlinep = TRUE; if (different_binding_level) { /* newdecl must be a reference to something at file scope */ assert(newdecl->isfilescoperef && !newdecl->needsmemory); assert(!(newdecl->kind == decl_variable && newdecl->vtype == variable_static)); assert(!(newdecl->kind == decl_function && (newdecl->ftype == function_implicit || newdecl->ftype == function_nested))); /* We copy some info over to the newdecl which will shadow olddecl */ newdecl->shadowed = olddecl; newdecl->definition = olddecl->definition; newdecl->isinline = olddecl->isinline; newdecl->isexterninline = olddecl->isexterninline; newdecl->oldstyle_args = olddecl->oldstyle_args; if (olddecl->in_system_header) newdecl->in_system_header = TRUE; newdecl->isexternalscope = olddecl->isexternalscope; /* We don't copy the type */ return 0; } /* newdecl should be too new to have any oldstyle args yet */ assert(!newdecl->oldstyle_args); /* Merge the data types specified in the two decls. */ if (types_match) olddecl->type = common_type(newtype, oldtype); else if (newtype != error_type) /* GCC keeps the old type. I think it makes more sense to keep the new one. And it means I can examine the decl in current.function_decl and find the type of the current function, not something random */ olddecl->type = newtype; olddecl->islimbo = FALSE; if (newdecl->definition) olddecl->definition = newdecl->definition; olddecl->isexternalscope &= newdecl->isexternalscope; olddecl->isfilescoperef &= newdecl->isfilescoperef; olddecl->needsmemory |= newdecl->needsmemory; olddecl->Cname |= newdecl->Cname; if (newdecl->spontaneous && !olddecl->spontaneous) { olddecl->spontaneous = newdecl->spontaneous; dd_add_last(parse_region, spontaneous_calls, olddecl); } olddecl->norace |= newdecl->norace; /* For functions, static overrides non-static. */ if (newdecl->kind == decl_function) { if (olddecl->ftype != function_static) olddecl->ftype = newdecl->ftype; /* Also set isexterninline correctly */ if ((olddecl->definition && !olddecl->isexterninline) || (newdecl->definition && !newdecl->isexterninline)) olddecl->isexterninline = FALSE; else if (olddecl->isexterninline || newdecl->isexterninline) olddecl->isexterninline = TRUE; /* the last case is 2 non-inline externs, so isexterninline is correct */ } else if (newdecl->kind == decl_variable) { /* static overrides extern (the combinations with register are errors anyway) */ if (olddecl->vtype != variable_static) olddecl->vtype = variable_static; } olddecl->in_system_header = newdecl->in_system_header = olddecl->in_system_header || newdecl->in_system_header; /* Point to the latest declaration (except for commands and events) */ if (!ddecl_is_command_or_event(olddecl)) olddecl->ast = newdecl->ast; return 1; } static void transparent_union_argument(data_declaration ddecl) { ddecl->type = make_qualified_type (ddecl->type, type_qualifiers(ddecl->type) | transparent_qualifier); } bool is_doublecharstar(type t) { return type_pointer(t) && type_charstar(type_points_to(t)); } void check_function(data_declaration dd, declaration fd, int class, scflags scf, const char *name, type function_type, bool nested, bool isdeclaration, bool defaulted_int) { type return_type, actual_function_type; if (defaulted_int && (warn_implicit_int || warn_return_type)) warning("return-type defaults to `int'"); if (scf & scf_norace) error("norace is for variables only"); actual_function_type = type_generic(function_type) ? type_function_return_type(function_type) : function_type; return_type = type_function_return_type(actual_function_type); /* XXX: Does this volatile/const stuff actually work with my imp ? */ if (pedantic && type_void(return_type) && (type_const(return_type) || type_volatile(return_type)) && !current.lex.input->l.in_system_header) pedwarn("ANSI C forbids const or volatile void function return type"); if (type_volatile(function_type) && !type_void(return_type)) warning("`noreturn' function returns non-void value"); /* Record presence of `inline', if it is reasonable. */ if (scf & scf_inline && !strcmp(name, "main") && !nested) { warning("cannot inline function `main'"); scf &= ~scf_inline; } if (nested && (class == RID_COMMAND || class == RID_EVENT)) error("commands and events cannot be declared inside functions"); /* Warn for unlikely, improbable, or stupid declarations of `main'. */ if (current.language == l_c && warn_main && !strcmp("main", name) && !nested) { if (!type_equal_unqualified(return_type, int_type)) pedwarn("return type of `%s' is not `int'", name); /* Just being "bug"-compatible w/ GCC here */ if (!type_function_oldstyle(function_type)) { typelist_scanner scanargs; type argtype; int argct = 0; typelist_scan(type_function_arguments(function_type), &scanargs); while ((argtype = typelist_next(&scanargs))) { ++argct; switch (argct) { case 1: if (!type_equal_unqualified(argtype, int_type)) pedwarn("first argument of `%s' should be `int'", name); break; case 2: if (!is_doublecharstar(argtype)) pedwarn("second argument of `%s' should be `char **'", name); break; case 3: if (!is_doublecharstar(argtype)) pedwarn("third argument of `%s' should probably be `char **'", name); break; } } /* It is intentional that this message does not mention the third argument, which is warned for only pedantically, because it's blessed by mention in an appendix of the standard. */ if (argct > 0 && (argct < 2 || argct > 3)) pedwarn("`%s' takes only zero or two arguments", name); if (argct == 3 && pedantic) pedwarn("third argument of `%s' is deprecated", name); if (class == RID_STATIC) pedwarn("`%s' is normally a non-static function", name); } } init_data_declaration(dd, fd, name, function_type); dd->kind = decl_function; dd->isexternalscope = FALSE; if (nested) dd->ftype = function_nested; else if (class == RID_STATIC) dd->ftype = function_static; else if (class == RID_COMMAND) dd->ftype = function_command; else if (class == RID_EVENT) dd->ftype = function_event; else { dd->ftype = function_normal; dd->isexternalscope = TRUE; } /* XXX: Should probably be FALSE for extern inline */ dd->needsmemory = !isdeclaration; dd->isinline = (scf & scf_inline) != 0; dd->isexterninline = dd->isinline && class == RID_EXTERN; dd->isfilescoperef = dd->isexterninline || isdeclaration; if (scf & scf_async) { if (dd->ftype == function_command || dd->ftype == function_event) dd->async = TRUE; else error("`async' is for commands and events only"); } } data_declaration declare_string(const char *name, cstring value, bool wide) { struct data_declaration tempdecl; expression expr_l = build_uint_constant(parse_region, dummy_location, size_t_type, value.length + 1); type value_type = make_array_type(wide ? wchar_type : char_type, expr_l); init_data_declaration(&tempdecl, new_error_decl(parse_region, dummy_location), name, value_type); tempdecl.kind = decl_magic_string; tempdecl.needsmemory = TRUE; tempdecl.in_system_header = TRUE; tempdecl.vtype = variable_static; tempdecl.schars = value; return declare(current.env, &tempdecl, TRUE); } static void declare_magic_string(const char *name, const char *value) { declare_string(name, str2cstring(parse_region, value), FALSE); } bool builtin_declaration(data_declaration dd) /* Returns: TRUE if dd is a declaration for something builtin (i.e., starts with __builtin_ */ { return strncmp(dd->name, "__builtin_", 10) == 0; } data_declaration declare_builtin_type(const char *name, type t) { struct data_declaration tempdecl; init_data_declaration(&tempdecl, new_error_decl(parse_region, dummy_location), name, t); tempdecl.kind = decl_typedef; tempdecl.in_system_header = TRUE; return declare(current.env, &tempdecl, TRUE); } static tag_declaration make_anonymous_struct(void) { tag_ref tref = newkind_tag_ref(parse_region, kind_struct_ref, dummy_location, NULL, NULL, NULL, TRUE); return declare_global_tag(tref); } static void declare_builtin_types(void) { builtin_va_list_type = make_pointer_type(make_tagged_type(make_anonymous_struct())); declare_builtin_type("__builtin_va_list", builtin_va_list_type); } static data_declaration declare_builtin(const char *name, data_kind kind, type t) { struct data_declaration tempdecl; init_data_declaration(&tempdecl, new_error_decl(parse_region, dummy_location), name, t); tempdecl.kind = kind; tempdecl.needsmemory = TRUE; tempdecl.in_system_header = TRUE; tempdecl.vtype = variable_static; return declare(global_env, &tempdecl, TRUE); } data_declaration declare_builtin_identifier(const char *name, type t) { return declare_builtin(name, decl_variable, t); } data_declaration declare_builtin_function(const char *name, type t) { return declare_builtin(name, decl_function, t); } static void declare_builtin_identifiers(void) { typelist emptylist = new_typelist(parse_region); type default_function_type = make_function_type(int_type, emptylist, FALSE, TRUE); /* Use = as a suffix for this "dummy" identifier (used in function_call nodes that represent calls to __builtin_va_arg) */ builtin_va_arg_decl = declare_builtin_identifier("=va_arg", int_type); builtin_constant_p = declare_builtin_function("__builtin_constant_p", default_function_type); } static void declare_function_name(void) { const char *name, *printable_name; if (current.function_decl == NULL) { name = ""; printable_name = "top level"; } else { name = current.function_decl->ddecl->name; printable_name = name; } declare_magic_string("__FUNCTION__", name); declare_magic_string("__PRETTY_FUNCTION__", printable_name); } static void error_assert(bool ok) { if (!ok) { error("confused by earlier errors - bailing out"); exit(FATAL_EXIT_CODE); } } static void detect_bogus_env(void) { /* We should not come here with the current env as parm level and not in a function. If we do, it's because the error recovery productions failed to pop some levels. So do it now. */ while (!current.function_decl && current.env->parm_level) { /* This should only be possible after a (parse) error. Ensure that we aren't confused... */ assert(errorcount > 0); poplevel(); } } /* Start definition of function 'elements d' with attributes attribs. nested is true for nested function definitions. Returns false in case of error. Sets current.function_decl to the declaration for this function */ bool start_function(type_element elements, declarator d, attribute attribs, bool nested) { int class; scflags scf; const char *name, *intf; type function_type, actual_function_type; bool defaulted_int, old_decl_has_prototype, normal_function; data_declaration old_decl, ddecl; function_decl fdecl; function_declarator fdeclarator; struct data_declaration tempdecl; env_scanner scan; const char *id; void *idval; dd_list doc_tags = NULL; dd_list extra_attr; detect_bogus_env(); if (!nested) error_assert(current.env->global_level && current.function_decl == NULL); parse_declarator(elements, d, FALSE, TRUE, &class, &scf, &intf, &name, &function_type, &defaulted_int, &fdeclarator, &extra_attr); actual_function_type = type_generic(function_type) ? type_function_return_type(function_type) : function_type; if (!type_functional(actual_function_type)) return FALSE; /* We don't set current.function_decl yet so that error messages do not say "In function " as we're not "in" the function yet */ fdecl = new_function_decl(parse_region, d->location, d, elements, attribs, NULL, NULL, current.function_decl, NULL); fdecl->declared_type = function_type; fdecl->undeclared_variables = new_env(parse_region, NULL); fdecl->current_loop = NULL; if (class == RID_AUTO) { if (pedantic || !nested) pedwarn("function definition declared `auto'"); class = 0; } else if (class == RID_REGISTER) { error("function definition declared `register'"); class = 0; } else if (class == RID_TYPEDEF) { error("function definition declared `typedef'"); class = 0; } else if (class == RID_EXTERN && nested) { error("nested function `%s' declared `extern'", name); class = 0; } else if ((class == RID_STATIC || scf & scf_inline) && nested) { if (pedantic) pedwarn("invalid storage class for function `%s'", name); class = 0; } if (class == RID_COMMAND || class == RID_EVENT || class == RID_TASK) { if (nested) { error("commands, events or tasks cannot be nested"); class = 0; } else if (current.language == l_c) { error("commands, events or tasks not allowed in C files"); class = 0; } } if (fdeclarator->gparms && !(class == RID_COMMAND || class == RID_EVENT)) { error("generic parameters only allowed on commands and events"); fdeclarator->gparms = NULL; } if (!type_void(type_function_return_type(actual_function_type)) && type_incomplete(type_function_return_type(actual_function_type))) { type t; error("return-type is an incomplete type"); /* Yuck */ t = make_function_type(void_type, type_function_arguments(actual_function_type), type_function_varargs(actual_function_type), type_function_oldstyle(actual_function_type)); if (type_generic(function_type)) t = make_generic_type(t, type_function_arguments(function_type)); function_type = qualify_type1(t, function_type); } check_function(&tempdecl, CAST(declaration, fdecl), class, scf, name, function_type, nested, FALSE, defaulted_int); tempdecl.definition = tempdecl.ast; if (current.container) tempdecl.safe = current.container->safe; handle_decl_attributes(attribs, &tempdecl); handle_decl_dd_attributes(extra_attr, &tempdecl); if (intf) { data_declaration iref = lookup_id(intf, FALSE); old_decl = NULL; if (!iref || iref->kind != decl_interface_ref) error("unknown interface `%s'", intf); else { old_decl = interface_lookup(iref, name); if (!old_decl) error("`%s' is not in interface `%s'", name, intf); } } else if (class == RID_COMMAND || class == RID_EVENT) { old_decl = lookup_id(name, FALSE); if (!old_decl) error("unknown command or event `%s'", name); } else old_decl = lookup_id(name, !tempdecl.Cname); if (old_decl) { if (((class == RID_COMMAND || class == RID_EVENT) && !old_decl->defined) ^ ((scf & scf_default) != 0)) { if (scf & scf_default) { error("`%s' is defined, not used, in this component", name); error("(default implementations are only for used commands or events)"); } else error("`%s' is used, not defined, in this component", name); } } else scf &= ~scf_default; old_decl_has_prototype = old_decl && old_decl->kind == decl_function && !type_function_oldstyle(old_decl->type); normal_function = !nested && class != RID_STATIC; /* Optionally warn of old-fashioned def with no previous prototype. */ if (warn_strict_prototypes && type_function_oldstyle(function_type) && !old_decl_has_prototype) warning("function declaration isn't a prototype"); /* Optionally warn of any global def with no previous prototype. */ else if (warn_missing_prototypes && normal_function && !old_decl_has_prototype && strcmp("main", name)) warning("no previous prototype for `%s'", name); /* Optionally warn of any def with no previous prototype if the function has already been used. */ else if (warn_missing_prototypes && old_decl && old_decl->ftype == function_implicit) warning("`%s' was used with no prototype before its definition", name); /* Optionally warn of any global def with no previous declaration. */ else if (warn_missing_declarations && normal_function && !old_decl && strcmp("main", name)) warning("no previous declaration for `%s'", name); /* Optionally warn of any def with no previous declaration if the function has already been used. */ else if (warn_missing_declarations && old_decl && old_decl->ftype == function_implicit) warning("`%s' was used with no declaration before its definition", name); /* If return types match and old declaraton has a prototype and new declaration hasn't, borrow the prototype. We will check for errors in store_parm_decls. */ if (old_decl_has_prototype && type_function_oldstyle(function_type) && type_compatible(type_function_return_type(old_decl->type), type_function_return_type(function_type))) { function_type = qualify_type1 (make_function_type(type_function_return_type(function_type), type_function_arguments(old_decl->type), type_function_varargs(old_decl->type), FALSE), old_decl->type); tempdecl.type = function_type; } if (old_decl && duplicate_decls(&tempdecl, old_decl, FALSE, FALSE)) { ddecl = old_decl; /* Safety annotation from implementation is the only one that counts */ ddecl->safe = tempdecl.safe; } else ddecl = declare(current.env, &tempdecl, FALSE); fdecl->base_labels = fdecl->scoped_labels = new_env(parse_region, current.function_decl ? current.function_decl->scoped_labels : NULL); fdecl->ddecl = ddecl; fdecl->fdeclarator = fdeclarator; get_latest_docstring(&ddecl->doc, current.fileregion, &doc_tags); handle_fdecl_doc_tags(ddecl->doc.loc, ddecl, fdeclarator, doc_tags); /* If requested, replace post/task by references to an interface */ if (type_task(ddecl->type) && flag_use_scheduler) handle_task_definition(fdecl); /* save environments */ current.env = fdeclarator->env; current.env->fdecl = current.function_decl = fdecl; /* Set id of parameters (done here rather than in declare because parameters of a given function may be declared several times) */ env_scan(current.env->id_env, &scan); while (env_next(&scan, &id, &idval)) { data_declaration iddecl = idval; if (iddecl->kind == decl_variable) { assert(iddecl->isparameter); iddecl->id = current.function_decl->nlocals++; } } return TRUE; } void implicit_decl_warning(data_declaration ddecl) { if (builtin_declaration(ddecl)) return; if (current.language != l_c || mesg_implicit_function_declaration == 2) error("implicit declaration of function `%s'", ddecl->name); else if (mesg_implicit_function_declaration == 1) warning("implicit declaration of function `%s'", ddecl->name); } data_declaration implicitly_declare(identifier fnid) { struct data_declaration tempdecl; declaration pseudo_ast = CAST(declaration, new_implicit_decl(parse_region, fnid->location, fnid)); init_data_declaration(&tempdecl, pseudo_ast, fnid->cstring.data, implicit_function_type); tempdecl.kind = decl_function; tempdecl.isexternalscope = TRUE; tempdecl.isfilescoperef = TRUE; tempdecl.ftype = function_implicit; /* Point to the limbo version of any previous implicit declaration */ tempdecl.shadowed = lookup_global_id(tempdecl.name); if (!tempdecl.shadowed) /* warn once only */ implicit_decl_warning(&tempdecl); return declare(current.env, &tempdecl, FALSE); } /* Declare parameters, either from new style declarations in the declarator, or from old_parms */ void store_parm_decls(declaration old_parms) { if (!oldstyle_function(current.function_decl)) { /* This case is when the function was defined with an ANSI prototype. The parms already have decls, so we need not do anything here except record them as in effect and complain if any redundant old-style parm decls were written. */ if (old_parms) error_with_decl(CAST(declaration, current.function_decl), "parm types given both in parmlist and separately"); } else { oldidentifier_decl parm, parms; current.function_decl->old_parms = old_parms; /* Need to either: - compare arg types to previous prototype - or build pseudo-prototype for this function */ parms = CAST(oldidentifier_decl, current.function_decl->fdeclarator->parms); scan_oldidentifier_decl (parm, parms) /* If no declaration given, default to int. */ if (parm->ddecl->type == void_type) { parm->ddecl->type = int_type; if (extra_warnings) warning_with_decl(CAST(declaration, parm), "type of `%s' defaults to `int'", parm->cstring.data); } } /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function. */ declare_function_name(); } /* End definition of current function, furnishing it it's body. */ declaration finish_function(statement body) { declaration fn = CAST(declaration, current.function_decl); current.function_decl->stmt = body; error_assert(current.env->parm_level); poplevel(); /* Pop parameter level */ check_labels(); current.function_decl = current.function_decl->parent_function; return fn; } /* Start a new scope */ void pushlevel(bool parm_level) { current.env = new_environment(parse_region, current.env, FALSE, parm_level); } /* Pop back to enclosing scope */ environment poplevel(void) { environment old = current.env; current.env = current.env->parent; return old; } void push_label_level(void) { current.function_decl->scoped_labels = new_env(parse_region, current.function_decl->scoped_labels); } void pop_label_level(void) { check_labels(); current.function_decl->scoped_labels = env_parent(current.function_decl->scoped_labels); assert(current.function_decl->scoped_labels); } void declarator_name(declarator d, const char **oname, const char **iname) { *oname = *iname = NULL; while (d) { switch (d->kind) { case kind_identifier_declarator: *oname = CAST(identifier_declarator, d)->cstring.data; return; case kind_interface_ref_declarator: *iname = CAST(interface_ref_declarator, d)->word1->cstring.data; /* fall through */ default: d = CAST(nested_declarator, d)->declarator; break; } } } const char *nice_declarator_name(declarator d) /* Returns: a user-friendly name for declarator d, allocated in current.fileregion if necessary */ { const char *name, *iname; declarator_name(d, &name, &iname); if (!name) return "type name"; else if (iname) return make_intf_printname(iname, name); else return name; } dd_list check_parameter(data_declaration dd, type_element elements, variable_decl vd) /* Returns: Attributes found while parsing the declarator */ { int class; scflags scf; const char *name, *printname; bool defaulted_int; type parm_type; dd_list extra_attr; parse_declarator(elements, vd->declarator, FALSE, FALSE, &class, &scf, NULL, &name, &parm_type, &defaulted_int, NULL, &extra_attr); vd->declared_type = parm_type; printname = name ? name : "type name"; /* Storage class checks */ if (class && class != RID_REGISTER) { error("storage class specified for parameter `%s'", printname); class = 0; } check_variable_scflags(scf, vd->location, "parameter", printname); /* A parameter declared as an array of T is really a pointer to T. One declared as a function is really a pointer to a function. */ if (type_array(parm_type)) /* Transfer const-ness of array into that of type pointed to. */ parm_type = make_pointer_type(qualify_type1(type_array_of(parm_type), parm_type)); else if (type_function(parm_type)) parm_type = make_pointer_type(parm_type); init_data_declaration(dd, CAST(declaration, vd), name, parm_type); dd->kind = decl_variable; dd->definition = dd->ast; dd->isexternalscope = FALSE; dd->isfilescoperef = FALSE; dd->needsmemory = FALSE; dd->isused = TRUE; dd->vtype = class == RID_REGISTER ? variable_register : variable_normal; dd->islocal = dd->isparameter = TRUE; dd->norace = (scf & scf_norace) != 0; return extra_attr; } static bool error_signature(type fntype) /* Returns: TRUE if fntype is the "error in function declaration" type signature (varargs with one argument of type error_type) */ { typelist tl; typelist_scanner stl; if (!type_function_varargs(fntype)) return FALSE; tl = type_function_arguments(fntype); if (!tl || empty_typelist(tl)) return FALSE; typelist_scan(tl, &stl); return typelist_next(&stl) == error_type && !typelist_next(&stl); } /* Start definition of variable 'elements d' with attributes attributes, asm specification astmt. If initialised is true, the variable has an initialiser. Returns the declaration for the variable. */ declaration start_decl(declarator d, asm_stmt astmt, type_element elements, bool initialised, attribute attributes) { variable_decl vd = new_variable_decl(parse_region, d->location, d, attributes, NULL, astmt, NULL); dd_list extra_attr; struct data_declaration tempdecl; data_declaration ddecl = NULL, old_decl; dd_list doc_tags = NULL; detect_bogus_env(); if (current.env->parm_level) { extra_attr = check_parameter(&tempdecl, elements, vd); handle_decl_attributes(attributes, &tempdecl); handle_decl_dd_attributes(extra_attr, &tempdecl); if (type_void(tempdecl.type)) { error("parameter `%s' declared void", tempdecl.name); tempdecl.type = int_type; } /* Update environment for old-style declarations only if function doesn't have a prototype. We will report an error message later for arguments specified for functions with prototypes. */ if (oldstyle_function(current.function_decl)) { /* Traditionally, a parm declared float is actually a double. */ if (flag_traditional && type_equal_unqualified(tempdecl.type, float_type)) tempdecl.type = qualify_type1(double_type, tempdecl.type); old_decl = lookup_id(tempdecl.name, TRUE); if (old_decl && duplicate_decls(&tempdecl, old_decl, FALSE, FALSE)) { /* Don't allow more than one "real" duplicate of a forward parm decl. */ ddecl = old_decl; ddecl->type = tempdecl.type; ddecl->ast = CAST(declaration, vd); ddecl->isused = TRUE; } else { error("declaration for parameter `%s' but no such parameter", tempdecl.name); ddecl = declare(current.env, &tempdecl, FALSE); } } else /* Make a dummy decl to keep everyone happy */ ddecl = declare(current.env, &tempdecl, FALSE); if (initialised) error("parameter `%s' is initialized", vd->ddecl ? vd->ddecl->name : "type name"); } else { int class; scflags scf; const char *name, *printname; bool defaulted_int; type var_type; bool different_binding_level = FALSE; function_declarator fdeclarator = NULL; parse_declarator(elements, d, FALSE, FALSE, &class, &scf, NULL, &name, &var_type, &defaulted_int, &fdeclarator, &extra_attr); vd->declared_type = var_type; printname = name ? name : "type name"; if (current.language == l_interface) { if (!(type_command(var_type) || type_event(var_type))) { error("only commands and events can be defined in interfaces"); class = RID_COMMAND; var_type = dummy_function_type; fdeclarator = dummy_function_declarator; } } else if (current.language == l_component) { if (type_command(var_type) || type_event(var_type)) { if (current.spec_section == spec_normal) error("commands/events must be provided or used"); } else if (class == RID_TYPEDEF) { if (current.spec_section != spec_normal) error("typedefs cannot be provided or used"); } else { error("variables and functions cannot be declared in component specifications"); var_type = error_type; } } else if (current.language == l_implementation && current.container->configuration) { if (class != RID_TYPEDEF) error("only types and constants can be declared in configurations"); } else if (class == RID_COMMAND || class == RID_EVENT) { if (current.language == l_implementation) error("commands or events can only be defined, not declared"); else error("commands or events not allowed in C files"); class = 0; } if (warn_implicit_int && defaulted_int && !type_function(var_type)) warning("type defaults to `int' in declaration of `%s'", printname); init_data_declaration(&tempdecl, CAST(declaration, vd), name, var_type); /* The fun begins */ /* `extern' with initialization is invalid if not at top level. */ if (class == RID_EXTERN && initialised) { if (current.env->global_level) warning("`%s' initialized and declared `extern'", printname); else error("`%s' has both `extern' and initializer", printname); } if (class == RID_AUTO && current.env->global_level) { error("top-level declaration of `%s' specifies `auto'", printname); class = 0; } if (class == RID_TYPEDEF) { /* typedef foo = bar means give foo the same type as bar. We haven't parsed bar yet, so `finish_decl' will fix that up. Any other case of an initialization in a TYPE_DECL is an error. */ if (initialised && (pedantic || elements->next)) error("typedef `%s' is initialized", printname); tempdecl.kind = decl_typedef; tempdecl.definition = tempdecl.ast; tempdecl.isexternalscope = FALSE; tempdecl.isfilescoperef = FALSE; tempdecl.needsmemory = FALSE; /* XXX: should give errors for silly values of scf (but gcc doesn't even complain about inline typedef int foo;) */ } else if (type_functional(var_type) || type_generic(var_type)) { /* Note: type_generic here can only be for generic functions (generic interfaces only show up in components), and use declare_interface_ref */ bool nested = !current.env->global_level && class == RID_AUTO; if (initialised) error("function `%s' is initialized like a variable", printname); if (class == RID_AUTO && pedantic) pedwarn("invalid storage class for function `%s'", name); if (class == RID_REGISTER) { error("invalid storage class for function `%s'", name); class = 0; } /* Function declaration not at top level. Storage classes other than `extern' are not allowed and `extern' makes no difference. */ if (!current.env->global_level && pedantic && (class == RID_STATIC || class == RID_INLINE)) pedwarn("invalid storage class for function `%s'", name); if (fdeclarator && fdeclarator->gparms) { if (current.language == l_interface) error("generic parameters not allowed in interfaces"); else if (!(class == RID_COMMAND || class == RID_EVENT)) error("generic parameters not allowed on functions"); } if ((type_command(var_type) || type_event(var_type)) && type_function_varargs(var_type) && !error_signature(var_type)) error("varargs commands and events are not supported"); check_function(&tempdecl, CAST(declaration, vd), class, scf, name, var_type, nested, TRUE, defaulted_int); } else { int extern_ref = !initialised && class == RID_EXTERN; if (type_void(var_type) && !(class == RID_EXTERN || (current.env->global_level && !(class == RID_STATIC || class == RID_REGISTER)))) { error("variable `%s' declared void", printname); var_type = int_type; } /* It's a variable. */ check_variable_scflags(scf, d->location, "variable", printname); #if 0 /* Don't allow initializations for incomplete types except for arrays which might be completed by the initialization. */ if (TYPE_SIZE (TREE_TYPE (decl)) != 0) { /* A complete type is ok if size is fixed. */ if (TREE_CODE (TYPE_SIZE (TREE_TYPE (decl))) != INTEGER_CST || C_DECL_VARIABLE_SIZE (decl)) { error ("variable-sized object may not be initialized"); initialised = 0; } } else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE) { error ("variable `%s' has initializer but incomplete type", IDENTIFIER_POINTER (DECL_NAME (decl))); initialised = 0; } else if (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))) == 0) { error ("elements of array `%s' have incomplete type", IDENTIFIER_POINTER (DECL_NAME (decl))); initialised = 0; } #endif tempdecl.kind = decl_variable; tempdecl.vtype = class == RID_REGISTER ? variable_register : class == RID_STATIC ? variable_static : variable_normal; tempdecl.isfilescoperef = extern_ref; if (!extern_ref) tempdecl.definition = tempdecl.ast; if (current.env->global_level) { tempdecl.isexternalscope = class != RID_STATIC && class != RID_REGISTER; tempdecl.needsmemory = !extern_ref; tempdecl.islocal = FALSE; } else { tempdecl.isexternalscope = extern_ref; tempdecl.needsmemory = class == RID_STATIC; tempdecl.islocal = !(extern_ref || class == RID_STATIC); } tempdecl.norace = (scf & scf_norace) != 0; } if (warn_nested_externs && tempdecl.isfilescoperef && !current.env->global_level && !tempdecl.in_system_header) warning("nested extern declaration of `%s'", printname); handle_decl_attributes(attributes, &tempdecl); handle_decl_dd_attributes(extra_attr, &tempdecl); old_decl = lookup_id(name, !tempdecl.Cname); if ((current.language == l_interface || current.language == l_component) && current.env->global_level) { if (old_decl) error("redefinition of `%s'", printname); old_decl = NULL; } else if (!old_decl && tempdecl.isfilescoperef) { /* Check the global environment if declaring something with file scope */ old_decl = lookup_global_id(name); /* global typedefs don't count */ if (old_decl && old_decl->kind == decl_typedef) old_decl = NULL; if (old_decl) different_binding_level = TRUE; } if (old_decl && duplicate_decls(&tempdecl, old_decl, different_binding_level, initialised)) ddecl = old_decl; else ddecl = declare(current.env, &tempdecl, FALSE); ddecl->defined = current.spec_section == spec_provides; } assert(ddecl); vd->ddecl = ddecl; /* If requested, replace post/task by references to an interface */ if (type_task(ddecl->type) && flag_use_scheduler) handle_task_declaration(vd); if (ddecl->kind == decl_typedef) set_typedef_type(ddecl, ddecl->basetype != NULL); get_latest_docstring(&ddecl->doc, current.fileregion, &doc_tags); handle_ddecl_doc_tags(ddecl->doc.loc, ddecl, doc_tags); return CAST(declaration, vd); } /* Finish definition of decl, furnishing the optional initialiser init. Returns decl */ declaration finish_decl(declaration decl, expression init) { variable_decl vd = CAST(variable_decl, decl); data_declaration dd = vd->ddecl; vd->arg1 = init; dd->initialiser = init; if (init) { if (dd->kind == decl_typedef) dd->type = init->type; else if (type_array(dd->type)) { /* Incomplete array types get their size from the initialiser (this is set correctly for both strings and init_lists) */ if (!type_array_size(dd->type)) dd->type = init->type; } else if (type_network_base_type(dd->type)) error_with_decl(decl, "initialisation of network base types not yet supported"); } /* Check for a size */ if (type_array(dd->type)) { /* Don't you love gcc code? */ int do_default = (dd->needsmemory /* Even if pedantic, an external linkage array may have incomplete type at first. */ ? pedantic && !dd->isexternalscope : !dd->isfilescoperef); if (!type_array_size(dd->type)) { if (do_default) error_with_decl(decl, "array size missing in `%s'", decl_printname(dd)); /* This is what gcc has to say about the next line (see comment/question above): If a `static' var's size isn't known, make it extern as well as static, so it does not get allocated. If it is not `static', then do not mark extern; finish_incomplete_decl will give it a default size and it will get allocated. */ else if (!pedantic && dd->needsmemory && !dd->isexternalscope) dd->isfilescoperef = 1; } } if (is_module_local_static(dd) && use_nido) dd_add_last(regionof(current.container->local_statics), current.container->local_statics, dd); return decl; } /* Create definition of function parameter 'elements d' with attributes attributes. Returns the declaration for the parameter. */ declaration declare_parameter(declarator d, type_element elements, attribute attributes) { /* There must be at least a declarator or some form of type specification */ location l = d ? d->location : elements->location; variable_decl vd = new_variable_decl(parse_region, l, d, attributes, NULL, NULL, NULL); data_decl dd = new_data_decl(parse_region, l, elements, CAST(declaration, vd)); data_declaration ddecl = NULL, old_decl = NULL; struct data_declaration tempdecl; dd_list extra_attr; extra_attr = check_parameter(&tempdecl, elements, vd); if (tempdecl.name) old_decl = lookup_id(tempdecl.name, TRUE); if (old_decl && duplicate_decls(&tempdecl, old_decl, FALSE, FALSE)) { /* Don't allow more than one "real" duplicate of a forward parm decl. */ ddecl = old_decl; ddecl->isused = TRUE; } else if (!type_void(tempdecl.type)) ddecl = declare(current.env, &tempdecl, FALSE); if (ddecl) { /* Forward transparent union property from union to parameter */ if (type_union(ddecl->type) && type_tag(ddecl->type)->transparent_union) transparent_union_argument(ddecl); handle_decl_attributes(attributes, ddecl); handle_decl_dd_attributes(extra_attr, ddecl); } else { ignored_dd_attributes(extra_attr); ignored_attributes(attributes); } vd->ddecl = ddecl; return CAST(declaration, dd); } void allow_parameter_redeclaration(declaration parms, bool mark_forward) { declaration parm; /* We could walk the parameter env instead, but this will break some code I'm currently writing... */ scan_declaration (parm, parms) if (is_data_decl(parm)) /* skip errors */ { data_decl pd = CAST(data_decl, parm); variable_decl vd = CAST(variable_decl, pd->decls); if (mark_forward) vd->forward = TRUE; if (vd->ddecl) { vd->ddecl->isused = FALSE; /* This being non-NULL is used to detect redeclarations in handle_fdecl_doc_tags - it being non-NULL is an indication that we're not working on a "fresh" (just-parsed) AST */ assert(vd->ddecl->ast->parent == NULL); } } } declaration declare_old_parameter(location l, cstring id) { oldidentifier_decl d = new_oldidentifier_decl(parse_region, l, id, NULL); data_declaration ddecl; if ((ddecl = lookup_id(id.data, TRUE))) error("duplicate parameter name `%s' in parameter list", id.data); else { struct data_declaration tempdecl; /* The void type indicates that this is an old-style declaration */ /* Note that isused is left FALSE to allow one declaration */ init_data_declaration(&tempdecl, CAST(declaration, d), id.data, void_type); tempdecl.kind = decl_variable; tempdecl.definition = tempdecl.ast; tempdecl.isexternalscope = FALSE; tempdecl.isfilescoperef = FALSE; tempdecl.needsmemory = FALSE; tempdecl.vtype = variable_normal; tempdecl.islocal = tempdecl.isparameter = TRUE; ddecl = declare(current.env, &tempdecl, FALSE); } d->ddecl = ddecl; return CAST(declaration, d); } /* Start definition of struct/union (indicated by skind) type tag. */ type_element start_struct(location l, AST_kind skind, word tag) { tag_ref tref = newkind_tag_ref(parse_region, skind, l, tag, NULL, NULL, TRUE); tag_declaration tdecl = tag ? lookup_tag(tref, TRUE) : NULL; pending_xref_error(); if (tdecl && tdecl->kind == skind) { if (tdecl->defined || tdecl->being_defined) { error("redefinition of `%s %s'", tagkind_name(skind), tag->cstring.data); tdecl = declare_tag(tref); } } else tdecl = declare_tag(tref); tref->tdecl = tdecl; tdecl->definition = tref; tdecl->being_defined = TRUE; tdecl->packed |= flag_pack_struct; return CAST(type_element, tref); } static field_declaration *declare_field(tag_declaration tdecl, field_declaration fdecl, location floc, field_declaration *nextfield) { type field_type = fdecl->type; const char *name = fdecl->name; fdecl->containing_tag = tdecl; if (!tdecl->fields_const) { type base_field_type = type_base(field_type); if (type_const(base_field_type) || ((type_struct(base_field_type) || type_union(base_field_type)) && type_tag(base_field_type)->fields_const)) tdecl->fields_const = TRUE; } /* XXX: Surely we should do the same as for const here ? */ if (type_volatile(field_type)) tdecl->fields_volatile = TRUE; if (name) { if (env_lookup(tdecl->fields, name, TRUE)) error_with_location(floc, "duplicate member `%s'", name); env_add(tdecl->fields, name, fdecl); } #if 0 fdecl->next = NULL; #endif *nextfield = fdecl; return &fdecl->next; } cval check_bitfield_width(field_declaration fdecl) { expression w = fdecl->ast->arg1; known_cst cwidth = w->cst; cval bitwidth = cval_top; bool printmsg; const char *errormsg = NULL; printmsg = check_constant_once(w, cst_numerical); if (cwidth && constant_unknown(cwidth)) bitwidth = cval_unknown_number; else if (!(cwidth && constant_integral(cwidth))) errormsg = "bit-field `%s' width not an integer constant"; else { largest_uint width = constant_uint_value(cwidth); if (pedantic && printmsg) constant_overflow_warning(cwidth); /* Detect and ignore out of range field width. */ if (!type_unsigned(cwidth->type) && constant_sint_value(cwidth) < 0) errormsg = "negative width in bit-field `%s'"; else if (width > type_size_int(fdecl->type) * BITSPERBYTE) errormsg = "width of `%s' exceeds its type"; else if (width == 0 && fdecl->name) errormsg = "zero width for bit-field `%s'"; else bitwidth = cval_cast(cwidth->cval, size_t_type); } if (printmsg && errormsg) error_with_location(w->location, errormsg, nice_field_name(fdecl->name)); return bitwidth; } static bool is_nx_tag(tag_declaration tdecl) { return tdecl->kind == kind_nx_struct_ref || tdecl->kind == kind_nx_union_ref; } /* Finish definition of struct/union furnishing the fields and attribs. Computes size and alignment of struct/union (see ASSUME: comments). Returns t */ void layout_struct(tag_declaration tdecl) { cval offset, alignment, size; bool isunion = tdecl->kind == kind_union_ref || tdecl->kind == kind_nx_union_ref; field_declaration fdecl; declaration dlist; field_decl flist; bool isnetwork = is_nx_tag(tdecl); bool lastbitfield_be = FALSE; offset = size = make_type_cval(0); alignment = cval_bitsperbyte; // We scan all the fields of the struct (field), but we also need to scan // the declaration of the struct to handle anonymous struct/union // boundaries (maybe we should have saved markers?). To do the latter, // we use fdecl/flist, where flist is the "current" list of fields // (corresponding to, e.g., `int x, y, z;' in a struct) and fdecl is // the declaration following the one being used in flist /* ASSUME: This code attempts to replicate gcc's struct layout rules for the target, based on it's pcc_bitfield_type_matters, structure_size_boundary and empty_field_boundary fields. See the gcc internal (`info gccint') documentation for the meaning of these fields. */ fdecl = tdecl->fieldlist; dlist = tdecl->definition->fields; flist = NULL; for (;;) { cval fsize, falign; // Get the next data_decl in the struct if (!flist) { data_decl decl; if (!dlist) break; decl = CAST(data_decl, ignore_extensions(dlist)); dlist = CAST(declaration, dlist->next); // Is this a struct/union we should merge in? if (decl->decls) flist = CAST(field_decl, decl->decls); // No. else { tag_declaration anon_tdecl = get_unnamed_tag_decl(decl); field_declaration anon_field; // No? if (!anon_tdecl || !anon_tdecl->defined || anon_tdecl->name) continue; // Yes. Get size, alignment of struct/union fsize = cval_times(anon_tdecl->size, cval_bitsperbyte); falign = cval_times(anon_tdecl->alignment, cval_bitsperbyte); /* Adjust copied anonymous fields */ offset = cval_align_to(offset, falign); for (anon_field = anon_tdecl->fieldlist; anon_field; anon_field = anon_field->next, fdecl = fdecl->next) fdecl->offset = cval_add(anon_field->offset, offset); } } if (flist) { /* decode field_decl field */ type field_type = fdecl->type; cval bitwidth = cval_top; if (flist->arg1) bitwidth = check_bitfield_width(fdecl); /* Check for network type fields in network structures once the type is known. Avoid duplicate error messages. */ if (isnetwork && !flist->type_checked && !type_variable(field_type)) { flist->type_checked = TRUE; if (!type_network(field_type)) error_with_location(flist->location, "field `%s' must be a network type", fdecl->name); } fdecl->bitwidth = bitwidth; if (type_size_cc(field_type)) fsize = cval_times(type_size(field_type), cval_bitsperbyte); else fsize = cval_top; /* don't care about alignment if no size (type_incomplete(field_type) is true, so we got an error above */ if (fdecl->packed || tdecl->packed) falign = cval_bitsperbyte; else falign = cval_times (type_has_size(field_type) ? type_alignment(field_type) : cval_top, cval_bitsperbyte); if (target->adjust_field_align && !type_realigned(field_type)) falign = target->adjust_field_align(fdecl, falign); if (cval_istop(bitwidth)) /* regular field */ offset = cval_align_to(offset, falign); else if (cval_isunknown(bitwidth)) { if (!cval_istop(offset)) offset = cval_unknown_number; } else if (!cval_boolvalue(bitwidth)) /* ie, 0 */ { if (target->pcc_bitfield_type_matters || isnetwork) { offset = cval_align_to(offset, falign); falign = make_type_cval(1); /* No structure alignment implications */ } else { /* I'm not to blame for gcc's weirdness. */ if (!type_realigned(field_type)) falign = make_type_cval(1); falign = cval_lcm(falign, make_cval_unsigned(target->empty_field_boundary, size_t_type)); offset = cval_align_to(offset, falign); } fsize = bitwidth; } else { assert(cval_intcompare(bitwidth, cval_zero) > 0); if (target->pcc_bitfield_type_matters && !isnetwork) { /* skip to next unit on crossing falign-sized boundary. align struct to falign (note the inconsistency with the 0-width bitfield). */ /* This tests ((offset + bitwidth + falign - 1) / falign - offset / falign) > fsize / falign */ cval val1 = cval_sub(cval_add(cval_add(offset, bitwidth), falign), make_type_cval(1)); cval val2 = cval_sub(cval_divide(val1, falign), cval_divide(offset, falign)); // if falign or offset are top or unknown, this will // contaminate val2 as appropriate if (!cval_knownvalue(val2)) offset = val2; else if (cval_intcompare(val2, cval_divide(fsize, falign)) > 0) offset = cval_align_to(offset, falign); } else { /* More network type bitfield fun: when switching between big and little-endian bitfields, we align to the next byte boundary (otherwise we could start filling bytes from opposing ends, which would be very confusing) */ if (isnetwork && type_network_base_type(field_type)) { bool isbe = type_networkdef(field_type)->isbe; if (isbe != lastbitfield_be) offset = cval_align_to(offset, cval_bitsperbyte); lastbitfield_be = isbe; } // more gcc fun if (type_realigned(field_type)) offset = cval_align_to(offset, falign); else // don't align, don't affect struct alignment falign = cval_bitsperbyte; } fsize = bitwidth; } fdecl->offset = offset; flist = CAST(field_decl, flist->next); fdecl = fdecl->next; } if (!isunion) { offset = cval_add(offset, fsize); size = offset; } else size = cval_max(fsize, size); alignment = cval_lcm(alignment, falign); } if (!isnetwork) alignment = cval_lcm(alignment, make_cval_unsigned(target->structure_size_boundary, size_t_type)); if (!cval_istop(tdecl->user_alignment)) alignment = cval_lcm(alignment, cval_times(tdecl->user_alignment, cval_bitsperbyte)); tdecl->size = cval_divide(cval_align_to(size, alignment), cval_bitsperbyte); tdecl->alignment = cval_divide(alignment, cval_bitsperbyte); } /* Finish definition of struct/union furnishing the fields and attribs. Computes size and alignment of struct/union (see ASSUME: comments). Returns t */ type_element finish_struct(type_element t, declaration fields, attribute attribs) { tag_ref s = CAST(tag_ref, t); tag_declaration tdecl = s->tdecl; bool hasmembers = FALSE; field_declaration *nextfield = &tdecl->fieldlist; declaration fdecl; bool isnetwork = is_nx_tag(tdecl); s->fields = fields; s->attributes = attribs; handle_tag_attributes(attribs, tdecl); tdecl->fields = new_env(parse_region, NULL); scan_declaration (fdecl, fields) { /* Get real list of fields */ data_decl flist = CAST(data_decl, ignore_extensions(fdecl)); field_decl field; if (!flist->decls) /* possibly a struct/union we should merge in */ { tag_declaration anon_tdecl = get_unnamed_tag_decl(flist); field_declaration anon_field; location floc = flist->location; if (!anon_tdecl) error_with_location(floc, "unnamed fields of type other than struct or union are not allowed"); else if (!anon_tdecl->defined) error_with_location(floc, "anonymous field has incomplete type"); else if (anon_tdecl->name) warning_with_location(floc, "declaration does not declare anything"); else if (isnetwork && !is_nx_tag(anon_tdecl)) error_with_location(floc, "field `%s' must be a network type", nice_field_name(NULL)); else { /* Process alignment to this struct/union in "main" loop below */ anon_tdecl->collapsed = TRUE; /* Copy fields */ for (anon_field = anon_tdecl->fieldlist; anon_field; anon_field = anon_field->next) { field_declaration fdecl = ralloc(parse_region, struct field_declaration); *fdecl = *anon_field; fdecl->ast = NULL; nextfield = declare_field(tdecl, fdecl, floc, nextfield); if (fdecl->name) hasmembers = TRUE; } } } else scan_field_decl (field, CAST(field_decl, flist->decls)) { /* decode field_decl field */ field_declaration fdecl; type field_type; const char *name; int class; scflags scf; const char *printname; bool defaulted_int; type tmpft; location floc = field->location; dd_list extra_attr; fdecl = ralloc(parse_region, struct field_declaration); parse_declarator(flist->modifiers, field->declarator, field->arg1 != NULL, FALSE, &class, &scf, NULL, &name, &tmpft, &defaulted_int, NULL, &extra_attr); field_type = tmpft; /* Grammar doesn't allow scspec: */ assert(scf == 0 && class == 0); printname = nice_field_name(name); /* Support "flexible arrays" (y[] as field member) -- simply make the size 0 which we already handle */ if (type_array(field_type) && !type_array_size(field_type)) field_type = make_array_type(type_array_of(field_type), build_zero(parse_region, dummy_location)); if (type_function(field_type)) { error_with_location(floc, "field `%s' declared as a function", printname); field_type = make_pointer_type(field_type); } else if (type_void(field_type)) { error_with_location(floc, "field `%s' declared void", printname); field_type = error_type; } else if (type_incomplete(field_type)) { error_with_location(floc, "field `%s' has incomplete type", printname); field_type = error_type; } fdecl->type = field_type; handle_field_attributes(field->attributes, fdecl); handle_field_dd_attributes(extra_attr, fdecl); field_type = fdecl->type; /* attributes might change type */ if (field->arg1) { const char *errmsg = NULL; if (!type_integer(field_type)) errmsg = "bit-field `%s' has invalid type"; else if (!(type_integer(field->arg1->type))) errmsg = "bit-field `%s' width not an integer constant"; else if (type_network_base_type(field_type)) { if (!type_networkdef(field_type)->bf_encoder) errmsg = "type of `%s' cannot be used as a bit-field"; else if (!isnetwork) errmsg = "bit-field `%s' of network type used inside non-network type"; } if (errmsg) { error_with_location(floc, errmsg, printname); field->arg1 = NULL; } } fdecl->ast = field; field->fdecl = fdecl; fdecl->name = name; nextfield = declare_field(tdecl, fdecl, floc, nextfield); if (name) hasmembers = TRUE; } } if (pedantic && !is_attribute_ref(s) && !hasmembers) pedwarn("%s has no %smembers", tagkind_name(s->kind), (fields ? "named " : "")); tdecl->defined = TRUE; tdecl->being_defined = FALSE; layout_struct(tdecl); return t; } /* Return a reference to struct/union/enum (indicated by skind) type tag */ type_element xref_tag(location l, AST_kind skind, word tag) { tag_ref tref = newkind_tag_ref(parse_region, skind, l, tag, NULL, NULL, FALSE); tag_declaration tdecl = lookup_tag(tref, FALSE); if (!tdecl) tdecl = declare_tag(tref); tref->tdecl = tdecl; return CAST(type_element, tref); } static known_cst last_enum_value; void layout_enum_start(tag_declaration tdecl) { last_enum_value = NULL; } void layout_enum_end(tag_declaration tdecl) { declaration names = tdecl->definition->fields; cval smallest, largest; bool enum_isunsigned; type type_smallest, type_largest, enum_reptype; enumerator v, values = CAST(enumerator, names); /* Pick a representation type for this enum, if not already done. */ if (tdecl->reptype && !type_unknown_int(tdecl->reptype)) return; /* First, find largest and smallest values defined in this enum. */ if (!names) smallest = largest = cval_zero; else { smallest = largest = value_of_enumerator(values); if (!cval_isunknown(smallest)) scan_enumerator (v, CAST(enumerator, values->next)) { cval vv = value_of_enumerator(v); if (cval_isunknown(vv)) { smallest = vv; break; } if (cval_intcompare(vv, largest) > 0) largest = vv; if (cval_intcompare(vv, smallest) < 0) smallest = vv; } } if (cval_isunknown(smallest)) enum_reptype = unknown_int_type; else { /* Pick a type that will hold the smallest and largest values. */ enum_isunsigned = cval_intcompare(smallest, cval_zero) >= 0; type_smallest = type_for_cval(smallest, enum_isunsigned); type_largest = type_for_cval(largest, enum_isunsigned); assert(type_smallest); if (!type_largest) { assert(!enum_isunsigned); warning("enumeration values exceed range of largest integer"); type_largest = long_long_type; } if (type_size_int(type_smallest) > type_size_int(type_largest)) enum_reptype = type_smallest; else enum_reptype = type_largest; /* We use int as the enum type if that fits, except if both: - the values fit in a (strictly) smaller type - the packed attribute was specified */ if (cval_inrange(smallest, int_type) && cval_inrange(largest, int_type) && !(tdecl->packed && type_size_int(enum_reptype) < type_size_int(int_type))) enum_reptype = int_type; } tdecl->reptype = enum_reptype; tdecl->size = type_size(enum_reptype); tdecl->alignment = type_alignment(enum_reptype); /* Change type of all enum constants to enum_reptype */ scan_enumerator (v, values) v->ddecl->value = cast_constant(v->ddecl->value, enum_reptype); } known_cst layout_enum_value(enumerator e) { const char *name = e->cstring.data; expression value = e->arg1; known_cst cst = NULL; // We're already done if we have a non-unknown type for e's value if (e->ddecl && !type_unknown_int(e->ddecl->value->type)) return e->ddecl->value; if (value) { cst = value->cst; if (check_constant_once(value, cst_numerical)) { if (!value->cst || !constant_integral(value->cst)) { error("enumerator value for `%s' not integer constant", name); cst = NULL; } } } if (!cst) { /* Last value + 1 */ if (last_enum_value) { /* No clear logic anywhere to specify which type we should use (ANSI C must specify int, cf warning below) */ type addtype = type_unsigned(last_enum_value->type) ? unsigned_long_long_type : long_long_type; cst = fold_add(addtype, last_enum_value, onecst); } else cst = zerocst; } if (constant_integral(cst)) { if (pedantic && !cval_inrange(cst->cval, int_type)) { pedwarn("ANSI C restricts enumerator values to range of `int'"); cst = zerocst; } if (type_size_int(cst->type) < type_size_int(int_type)) cst->type = type_for_size(type_size(int_type), flag_traditional && type_unsigned(cst->type)); } last_enum_value = cst; return cst; } /* Start definition of struct/union (indicated by skind) type tag. */ type_element start_enum(location l, word tag) { enum_ref tref = new_enum_ref(parse_region, l, tag, NULL, NULL, TRUE); tag_declaration tdecl = tag ? lookup_tag(tref, TRUE) : NULL; pending_xref_error(); if (tdecl && tdecl->kind == kind_enum_ref) { if (tdecl->defined) error("redefinition of `enum %s'", tag->cstring.data); } else tdecl = declare_tag(tref); tref->tdecl = tdecl; tdecl->definition = tref; tdecl->being_defined = TRUE; tdecl->packed = flag_short_enums; layout_enum_start(tdecl); return CAST(type_element, tref); } /* Finish definition of enum furnishing the names and attribs. Returns t */ type_element finish_enum(type_element t, declaration names, attribute attribs) { tag_ref s = CAST(tag_ref, t); tag_declaration tdecl = s->tdecl; s->fields = names; s->attributes = attribs; handle_tag_attributes(attribs, tdecl); tdecl->fields = 0; tdecl->defined = TRUE; tdecl->being_defined = FALSE; layout_enum_end(tdecl); return t; } declaration make_enumerator(location loc, cstring id, expression value) { declaration ast; struct data_declaration tempdecl; data_declaration ddecl, old_decl; environment env = current.env; if (value && !type_integer(value->type)) { error("enumerator value for `%s' not integer constant", id.data); value = NULL; } ast = CAST(declaration, new_enumerator(parse_region, loc, id, value, NULL)); init_data_declaration(&tempdecl, ast, id.data, int_type); tempdecl.kind = decl_constant; tempdecl.definition = ast; tempdecl.value = layout_enum_value(CAST(enumerator, ast)); if (current.language == l_interface) { error("only commands and events can be defined in interfaces"); /* We don't want the symbol in the interface's env, so give it it's own private home! */ env = new_environment(parse_region, NULL, FALSE, FALSE); } old_decl = env_lookup(env->id_env, id.data, TRUE); if (old_decl && duplicate_decls(&tempdecl, old_decl, FALSE, FALSE)) ddecl = old_decl; else ddecl = declare(env, &tempdecl, FALSE); CAST(enumerator, ast)->ddecl = ddecl; return ast; } /* Create declaration of field 'elements d : bitfield' with attributes attributes. d can be NULL, bitfield can be NULL, but not both at the same time. Returns the declaration for the field. */ declaration make_field(declarator d, expression bitfield, type_element elements, attribute attributes) { /* We get at least one of a declarator or a bitfield */ location l = d ? d->location : bitfield->location; return CAST(declaration, new_field_decl(parse_region, l, d, attributes, bitfield)); } /* Create and return type 'elements d' where d is an absolute declarator */ asttype make_type(type_element elements, declarator d) { location l = elements ? elements->location : d->location; int class; scflags scf; const char *name; bool defaulted_int; asttype t = new_asttype(parse_region, l, d, elements); dd_list extra_attr; parse_declarator(t->qualifiers, t->declarator, FALSE, FALSE, &class, &scf, NULL, &name, &t->type, &defaulted_int, NULL, &extra_attr); assert(t->type && !(class || scf || name)); return t; } /* Returns name of r */ static char *rid_name_int(int id) { switch (id) { case RID_INT: return "int"; case RID_CHAR: return "char"; case RID_FLOAT: return "float"; case RID_DOUBLE: return "double"; case RID_VOID: return "void"; case RID_UNSIGNED: return "unsigned"; case RID_SHORT: return "short"; case RID_LONG: return "long"; case RID_AUTO: return "auto"; case RID_STATIC: return "static"; case RID_EXTERN: return "extern"; case RID_REGISTER: return "register"; case RID_TYPEDEF: return "typedef"; case RID_SIGNED: return "signed"; case RID_INLINE: return "__inline"; case RID_COMPLEX: return "__complex"; case RID_COMMAND: return "command"; case RID_EVENT: return "event"; case RID_ASYNC: return "async"; case RID_TASK: return "task"; case RID_DEFAULT: return "default"; case RID_NORACE: return "norace"; default: assert(0); return NULL; } } /* Returns name of r */ char *rid_name(rid r) { return rid_name_int(r->id); } /* If statement list l1 ends with an unfinished label, attach l2 to that label. Otherwise attach l2 to the end of l1 */ statement chain_with_labels(statement l1, statement l2) { node last, last_label; if (!l1) return l2; if (!l2) return l1; last_label = last = last_node(CAST(node, l1)); /* There may be an unfinished sub-label due to 'a: b:' */ while (last_label->kind == kind_labeled_stmt) { labeled_stmt ls = CAST(labeled_stmt, last_label); if (!ls->stmt) /* An unfinished labeled statement */ { ls->stmt = l2; return l1; } last_label = CAST(node, ls->stmt); } last->next = CAST(node, l2); return l1; } void init_semantics(void) { current.fileregion = parse_region; spontaneous_calls = dd_new_list(parse_region); global_env = current.env = new_environment(parse_region, NULL, TRUE, FALSE); bad_decl = ralloc(parse_region, struct data_declaration); bad_decl->kind = decl_error; bad_decl->name = "undeclared"; bad_decl->type = error_type; bad_decl->ast = new_error_decl(parse_region, dummy_location); dummy_function_declarator = new_function_declarator(parse_region, dummy_location, NULL, NULL, NULL, NULL, NULL); implicit_function_type = make_function_type(int_type, NULL, FALSE, TRUE); dummy_function_type = make_function_type(int_type, new_typelist(parse_region), FALSE, FALSE); /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */ declare_function_name (); /* Declare builtin type __builtin_va_list */ declare_builtin_types(); declare_builtin_identifiers(); onecst = make_signed_cst(1, int_type); zerocst = make_signed_cst(0, int_type); oneexpr = build_uint_constant(parse_region, dummy_location, size_t_type, 1); } void start_semantics(source_language l, nesc_declaration container, environment env) { current.env = env; current.language = l; current.function_decl = NULL; current.pending_invalid_xref = NULL; current.container = container; current.in_atomic = NULL; current.spec_section = spec_normal; } static bool samekind(type t1, type t2) { return (type_integer(t1) && type_integer(t2)) || (type_floating(t1) && type_floating(t2)); } bool handle_mode_attribute(location loc, data_declaration ddecl, const char *mode) { type tm, t = ddecl->type; /* Simplified mode attribute support. We're missing: - support for multiple pointer sizes (see comment below) - the vector modes */ if (!(ddecl->kind == decl_variable || ddecl->kind == decl_typedef)) return FALSE; tm = type_for_mode(mode, type_unsigned(t)); if (!tm) { error_with_location(loc, "unknown machine mode `%s'", mode); return TRUE; } if (type_pointer(t)) { /* Simplified pointer handling. We only allow modes that specify the pointer size (in which case we do nothing). In all other cases, we'll report an error. Most targets do not support more than one pointer mode (the exceptions seem to be s390 and mips, that allow both 32 and 64 bit pointers) */ if (type_size_int(t) != type_size_int(tm)) error("invalid pointer mode `%s'", mode); } else if (samekind(t, tm) || (type_complex(t) && type_complex(tm) && samekind(make_base_type(t), make_base_type(tm)))) /* If this is a valid resizing, set type. We lose enum-ness here but that shouldn't matter. (If it does, add changing-size support in types.c) */ ddecl->type = tm; else error_with_location(loc, "mode `%s' applied to inappropriate type", mode); return TRUE; } /* Make "word" argument of attributes into an expression */ expression make_attr_args(location loc, cstring id, expression args) { identifier result = new_identifier(parse_region, loc, id, bad_decl); result->type = error_type; result->next = CAST(node, args); return CAST(expression, result); } nescc-1.3.4/src/semantics.h000066400000000000000000000212671177770303300155600ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef SEMANTICS_H #define SEMANTICS_H /* Storage specifier "flags" (inline, e.g.) */ typedef enum { scf_inline = 1, scf_default = 2, scf_async = 4, scf_norace = 8 } scflags; /* Predefined __builtin_va_list type */ extern type builtin_va_list_type; extern data_declaration builtin_va_arg_decl; extern data_declaration builtin_constant_p; #include "cstring.h" #include "decls.h" #include "c-lex-state.h" /* Print an error message now for a recent invalid struct, union or enum cross reference. We don't print them immediately because they are not invalid when used in the `struct foo;' construct for shadowing. */ void pending_xref_error(void); extern environment global_env; data_declaration lookup_id(const char *s, bool this_level_only); data_declaration lookup_global_id(const char *s); /* If elements is 'struct foo' shadow tag foo in the current environment */ void shadow_tag(type_element elements); /* Like shadow_tag, but a pedwarn has already been issued if warned == 1 */ void shadow_tag_warned(type_element elements, int warned); declarator finish_array_or_fn_declarator(declarator nested, nested_declarator d); /* Start definition of function 'elements d' with attributes attribs. nested is true for nested function definitions. Returns false in case of error. Sets current.function_decl to the declaration for this function */ bool start_function(type_element elements, declarator d, attribute attribs, bool nested); /* Add old-style parameter declarations old_parms to the current function */ void store_parm_decls(declaration old_parms); /* End definition of current function, furnishing it it's body. */ declaration finish_function(statement body); /* Start a new scope */ void pushlevel(bool parm_level); /* Pop back to enclosing scope */ environment poplevel(void); /* Categories of variable declarations */ enum { var_typedef, var_register, var_normal, var_static, var_extern }; /* Start definition of variable 'elements d' with attributes extra_attributes and attributes, asm specification astmt. If initialised is true, the variable has an initialiser. Returns the declaration for the variable. */ declaration start_decl(declarator d, asm_stmt astmt, type_element elements, bool initialised, attribute attributes); /* Finish definition of decl, furnishing the optional initialiser init. Returns decl */ declaration finish_decl(declaration decl, expression init); /* Create definition of function parameter 'elements d' with attributes extra_attributes and attributes. Returns the declaration for the parameter. */ declaration declare_parameter(declarator d, type_element elements, attribute attributes); /* Allow parameters to be redeclared. mark_forward should be TRUE if these are "forward" parameter declarations (gcc extension) */ void allow_parameter_redeclaration(declaration parms, bool mark_forward); declaration declare_old_parameter(location l, cstring id); /* Start definition of struct/union (indicated by skind) type tag. */ type_element start_struct(location l, AST_kind skind, word tag); /* Finish definition of struct/union furnishing the fields and attribs. Returns t */ type_element finish_struct(type_element t, declaration fields, attribute attribs); /* Return a reference to struct/union/enum (indicated by skind) type tag */ type_element xref_tag(location l, AST_kind skind, word tag); /* Start definition of struct/union (indicated by skind) type tag. */ type_element start_enum(location l, word tag); /* Finish definition of enum furnishing the names and attribs. Returns t */ type_element finish_enum(type_element t, declaration names, attribute attribs); /* Create declaration of field 'elements d : bitfield' with attributes extra_attributes and attributes. d can be NULL, bitfield can be NULL, but not both at the same time. Returns the declaration for the field. */ declaration make_field(declarator d, expression bitfield, type_element elements, attribute attributes); declaration make_enumerator(location loc, cstring id, expression value); /* Create and return type 'elements d' where d is an absolute declarator */ asttype make_type(type_element elements, declarator d); /* Returns name of r */ char *rid_name(rid r); /* If statement list l1 ends with an unfinished label, attach l2 to that label. Otherwise attach l2 to the end of l1 */ statement chain_with_labels(statement l1, statement l2); void declarator_name(declarator d, const char **oname, const char **iname); const char *nice_declarator_name(declarator d); /* Returns: a user-friendly name for declarator d, allocated in current.fileregion if necessary */ data_declaration lookup_id(const char *s, bool this_level_only); data_declaration implicitly_declare(identifier fnid); void push_label_level(void); void pop_label_level(void); void init_data_declaration(data_declaration dd, declaration ast, const char *name, type t); data_declaration declare(environment env, data_declaration from, bool ignore_shadow); /* Build a declaration object for a string */ data_declaration declare_string(const char *name, cstring value, bool wide); environment new_environment(region r, environment parent, bool global_level, bool parm_level); tag_declaration declare_tag(tag_ref t); tag_declaration lookup_tag(tag_ref t, bool this_level_only); tag_declaration declare_global_tag(tag_ref t); tag_declaration lookup_global_tag(tag_ref t); void init_semantics(void); void start_semantics(source_language l, nesc_declaration container, environment parent_env); struct semantic_state { region fileregion; /* A per-file region. "Renewed" at the start of each file and of each implementation section */ source_language language; /* The current language */ environment env; /* The current environment */ nesc_declaration file; /* The nesC entity of the file being compiled (different from container while dealing with C declarations at the beginning of the file) */ nesc_declaration container; /* The nesC entity being compiled (NULL for C) */ function_decl function_decl; /* The function currently being defined */ tag_ref pending_invalid_xref; /* Internal use */ enum { /* Within a component specification, are we: */ spec_normal, /* - neither in provides or in uses */ spec_provides, /* - in a provides section */ spec_uses /* - in a uses section */ } spec_section; atomic_stmt in_atomic; /* The lexically containing atomic statement (NULL for none) */ char *preprocessed_file; /* Temp file holding preprocessor output */ struct lex_state lex; }; extern struct semantic_state current; extern dd_list spontaneous_calls; /* List of spontaneously-called functions */ void check_variable_scflags(scflags scf, location l, const char *kind, const char *name); void parse_declarator(type_element modifiers, declarator d, bool bitfield, bool require_parm_names, int *oclass, scflags *oscf, const char **ointf, const char **oname, type *ot, bool *owarn_defaulted_int, function_declarator *ofunction_declarator, dd_list *oattributes); int duplicate_decls(data_declaration newdecl, data_declaration olddecl, bool different_binding_level, bool newinitialised); void check_array_size(expression size, const char *printname); void layout_enum_start(tag_declaration tdecl); void layout_enum_end(tag_declaration tdecl); known_cst layout_enum_value(enumerator e); void layout_struct(tag_declaration tdecl); const char *tagkind_name(int tagkind); bool handle_mode_attribute(location loc, data_declaration ddecl, const char *mode); /* Make "word" argument of attributes into an expression */ expression make_attr_args(location loc, cstring id, expression args); data_declaration declare_builtin_type(const char *name, type t); #endif nescc-1.3.4/src/stmt.c000066400000000000000000000224571177770303300145560ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "stmt.h" #include "semantics.h" #include "expr.h" #include "c-parse.h" #include "constants.h" #include "edit.h" #include "AST_utils.h" void fail_in_atomic(const char *context) { if (current.in_atomic) error("%s not allowed in atomic statements", context); } void fail_different_atomic(atomic_stmt target) { if (target != current.in_atomic) error("control transfer crosses atomic statement boundary"); } void check_condition(const char *context, expression e) { type etype = default_conversion(e); if (etype != error_type && !type_scalar(etype)) error("%s condition must be scalar", context); if (warn_parentheses && is_assignment(e) && !e->parens) warning("suggest parentheses around assignment used as truth value"); } void check_switch(expression e) { if (e->type != error_type && !type_integer(e->type)) error("switch quantity not an integer"); } static type current_return_type(void) { type fntype = current.function_decl->ddecl->type; if (type_generic(fntype)) fntype = type_function_return_type(fntype); if (type_volatile(fntype)) warning("function declared `noreturn' has a `return' statement"); return type_function_return_type(fntype); } void check_void_return(void) { type ret = current_return_type(); if (warn_return_type && ret != error_type && !type_void(ret)) warning("`return' with no value, in function returning non-void"); } statement make_void_return(location loc) { statement ret = CAST(statement, new_return_stmt(parse_region, loc, NULL)); ret->containing_atomic = current.in_atomic; check_void_return(); return ret; } void check_return(expression e) { type ret = current_return_type(); if (type_void(ret)) { if (pedantic || !type_void(e->type)) warning("`return' with a value, in function returning void"); } else { check_assignment(ret, default_conversion_for_assignment(e), e, "return", NULL, 0); /* XXX: Missing warning about returning address of local var */ } } statement make_return(location loc, expression arg) { declaration temp = NULL; statement ret; if (arg->type != error_type && current.in_atomic) { data_declaration ddecl; pushlevel(FALSE); temp = CAST(declaration, build_declaration(parse_region, current.env, current_return_type(), "__nesc_temp", arg, &ddecl)); arg = build_identifier(parse_region, loc, ddecl); } ret = CAST(statement, new_return_stmt(parse_region, loc, arg)); ret->containing_atomic = current.in_atomic; check_return(arg); if (temp) ret = CAST(statement, new_compound_stmt(parse_region, loc, NULL, temp, ret, poplevel())); return ret; } void check_computed_goto(expression e) { /* Rather weak check (same as gcc) */ check_conversion(ptr_void_type, e->type); } label_declaration new_label_declaration(region r, const char *name, id_label firstuse) { label_declaration ldecl = ralloc(r, struct label_declaration); ldecl->name = name; ldecl->explicitly_declared = FALSE; ldecl->firstuse = firstuse; ldecl->definition = NULL; ldecl->containing_function = current.function_decl; /* The label "belongs" to the atomic statement in force the first time it's mentioned */ ldecl->containing_atomic = current.in_atomic; return ldecl; } void lookup_label(id_label label) { label_declaration ldecl; if (!current.function_decl) { error ("label %s referenced outside of any function", label->cstring.data); /* A dummy decl to make everybody happy. */ label->ldecl = new_label_declaration(parse_region, label->cstring.data, label); return; } ldecl = env_lookup(current.function_decl->scoped_labels, label->cstring.data, FALSE); /* Only explicitly declared labels are visible in nested functions */ if (ldecl && !ldecl->explicitly_declared && ldecl->containing_function != current.function_decl) ldecl = NULL; if (!ldecl) /* new label */ { ldecl = new_label_declaration(parse_region, label->cstring.data, label); env_add(current.function_decl->base_labels, label->cstring.data, ldecl); } else if (ldecl->containing_atomic != current.in_atomic) error("label %s is referenced in different atomic statements", label->cstring.data); label->ldecl = ldecl; } void use_label(id_label label) { lookup_label(label); label->ldecl->used = TRUE; } static void duplicate_label_error(id_label label) { error("duplicate label declaration `%s'", label->cstring.data); error_with_location(label->ldecl->definition ? label->ldecl->definition->location : label->ldecl->firstuse->location, "this is a previous declaration"); } void define_label(id_label label) { lookup_label(label); if (label->ldecl->definition) duplicate_label_error(label); else label->ldecl->definition = label; } void declare_label(id_label label) { label_declaration ldecl = env_lookup(current.function_decl->scoped_labels, label->cstring.data, TRUE); if (ldecl) { label->ldecl = ldecl; duplicate_label_error(label); } else { ldecl = new_label_declaration(parse_region, label->cstring.data, label); env_add(current.function_decl->scoped_labels, label->cstring.data, ldecl); } ldecl->explicitly_declared = TRUE; } void check_labels(void) { env_scanner scan_labels; void *ld; const char *lname; env_scan(current.function_decl->scoped_labels, &scan_labels); while (env_next(&scan_labels, &lname, &ld)) { label_declaration ldecl = ld; if (!ldecl->definition) error_with_location(ldecl->firstuse->location, "label `%s' used but not defined", lname); else if (!ldecl->used && warn_unused) warning_with_location(ldecl->firstuse->location, "label `%s' defined but not used", lname); } } void push_loop(statement loop_statement) { loop_statement->parent_loop = current.function_decl->current_loop; current.function_decl->current_loop = loop_statement; loop_statement->containing_atomic = current.in_atomic; } void pop_loop(void) { current.function_decl->current_loop = current.function_decl->current_loop->parent_loop; } static statement containing_switch(label l) { statement sw = current.function_decl->current_loop; /* Find a switch */ while (sw && !is_switch_stmt(sw)) sw = sw->parent_loop; if (sw) { /* Chain the label */ /* XXX: n^2 algo */ label *last = &CAST(switch_stmt, sw)->next_label; bool lisdefault = is_default_label(l); /* XXX: no duplicate case check */ while (*last) { if (is_default_label(*last) && lisdefault) { error("multiple default labels in one switch"); error_with_location((*last)->location, "this is the first default label"); lisdefault = FALSE; /* Only one error */ } last = &(*last)->next_label; } fail_different_atomic(sw->containing_atomic); *last = l; } return sw; } void check_case_value(expression e) { if (check_constant_once(e, cst_numerical)) if (!e->cst || !(e->type == error_type || type_integer(e->type))) error_with_location(e->location, "case label does not reduce to an integer constant"); } void check_case(label label0) { statement sw = containing_switch(label0); case_label label = CAST(case_label, label0); if (!sw) error("case label not within a switch statement"); check_case_value(label->arg1); if (label->arg2) check_case_value(label->arg2); /* XXX: no range check (compared to switched type), no empty range check */ /* XXX: no check for unreachable code */ } void check_default(label default_label) { statement sw = containing_switch(default_label); if (!sw) error("default label not within a switch statement"); /* XXX: no check for unreachable code */ } void check_break(statement break_statement) { statement current_loop = current.function_decl->current_loop; if (!current_loop) error("break statement not within loop or switch"); else fail_different_atomic(current_loop->containing_atomic); break_statement->parent_loop = current_loop; } void check_continue(statement continue_statement) { statement loop = current.function_decl->current_loop; /* Find a loop */ while (loop && is_switch_stmt(loop)) loop = loop->parent_loop; if (!loop) error("continue statement not within a loop"); else fail_different_atomic(loop->containing_atomic); continue_statement->parent_loop = loop; } nescc-1.3.4/src/stmt.h000066400000000000000000000034401177770303300145520ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef STMT_H #define STMT_H void check_condition(const char *context, expression e); void check_switch(expression e); void check_void_return(void); void check_return(expression e); void check_computed_goto(expression e); statement make_return(location loc, expression arg); statement make_void_return(location loc); void lookup_label(id_label label); void use_label(id_label label); void define_label(id_label label); void declare_label(id_label label); void check_labels(void); void check_case(label case_label); void check_case_value(expression e); void check_default(label default_label); void check_break(statement break_statement); void check_continue(statement continue_statement); void fail_in_atomic(const char *context); void push_loop(statement loop_statement); void pop_loop(void); label_declaration new_label_declaration(region r, const char *name, id_label firstuse); #endif nescc-1.3.4/src/tdspecs000066400000000000000000000005531177770303300150040ustar00rootroot00000000000000.nc: @nesc @nesc: perl -S nesc-compile %{m*} %{D*&U*&A*} %{H} %{I*} %{undef} %{trigraphs} %{i*} %{nostdinc} %{a*} %{g*} %{O*} %{W*} %{w} %{S} %{pedantic*} %{std*} %{ansi} %{traditional} %{v} %{p*} %{f*} %{!fsyntax-only:-fnesc-tmpcfile=%g.c %{S:%W{o*}%{!o*:-o %b.s}}%{!S:%{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}}} %{fsyntax-only:-o %j} %{-param*} %i -_ASM %Y nescc-1.3.4/src/toplev.c000066400000000000000000000255101177770303300150710ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include "parser.h" #include "c-parse.h" #include "unparse.h" #include "semantics.h" #include "machine.h" #include "nesc-main.h" #include "nesc-paths.h" #include "nesc-cpp.h" #include "nesc-msg.h" #include "nesc-doc.h" #if HAVE_POLL #include #endif /* Table of language-independent -f and -W options. STRING is the option name. VARIABLE is the address of the variable. ON_VALUE is the value to store in VARIABLE if `-fSTRING' is seen as an option. (If `-fno-STRING' is seen as an option, the opposite value is stored.) */ static struct { char c; char *string; int *variable; int on_value;} fW_options[] = { { 'f', "syntax-only", &flag_syntax_only, 1 }, { 'f', "parse-only", &flag_parse_only, 1 }, { 'f', "pack-struct", &flag_pack_struct, 1 }, { 'f', "allow-single-precision", &flag_allow_single_precision, 1 }, { 'f', "signed-char", &flag_signed_char, 1 }, { 'f', "unsigned-char", &flag_signed_char, 0 }, { 'f', "signed-bitfields", &flag_signed_bitfields, 1 }, { 'f', "unsigned-bitfields", &flag_signed_bitfields, 0 }, { 'f', "short-enums", &flag_short_enums, 1 }, { 'f', "cond-mismatch", &flag_cond_mismatch, 1 }, { 'f', "asm", &flag_no_asm, 0 }, { 'W', "unused", &warn_unused, 1 }, { 'W', "error", &warnings_are_errors, 1 }, { 'W', "shadow", &warn_shadow, 1 }, { 'W', "switch", &warn_switch, 1 }, { 'W', "aggregate-return", &warn_aggregate_return, 1 }, { 'W', "cast-align", &warn_cast_align, 1 }, { 'W', "uninitialized", &warn_uninitialized, 1 }, { 'W', "inline", &warn_inline, 1 }, { 'W', "error-implicit-function-declaration", &mesg_implicit_function_declaration, 2 }, { 'W', "implicit-function-declaration", &mesg_implicit_function_declaration, 1 }, { 'W', "implicit-int", &warn_implicit_int, 1 }, { 'W', "write-strings", &warn_write_strings, 1 }, { 'W', "cast-qual", &warn_cast_qual, 1 }, { 'W', "bad-function-cast", &warn_bad_function_cast, 1 }, { 'W', "pointer-arith", &warn_pointer_arith, 1 }, { 'W', "strict-prototypes", &warn_strict_prototypes, 1 }, { 'W', "missing-prototypes", &warn_missing_prototypes, 1 }, { 'W', "missing-declarations", &warn_missing_declarations, 1 }, { 'W', "redundant-decls", &warn_redundant_decls, 1 }, { 'W', "nested-externs", &warn_nested_externs, 1 }, { 'W', "traditional", &warn_traditional, 1 }, { 'W', "format", &warn_format, 1 }, { 'W', "char-subscripts", &warn_char_subscripts, 1 }, { 'W', "conversion", &warn_conversion, 1 }, { 'W', "parentheses", &warn_parentheses, 1 }, { 'W', "return-type", &warn_return_type, 1 }, { 'W', "missing-braces", &warn_missing_braces, 1 }, { 'W', "main", &warn_main, 1 }, { 'W', "sign-compare", &warn_sign_compare, 1 }, { 'W', "multichar", &warn_multichar, 1 }, { 'W', "comment", &warn_comments, 1 }, { 'W', "comments", &warn_comments, 1 }, { 'W', "trigraphs", &warn_trigraphs, 1 }, { 'W', "unused-macros", &warn_unused_macros, 1 }, { 'W', "endif-labels", &warn_endif_labels, 1 }, { 'W', "system-headers", &warn_system_headers, 1 }, { 'W', "undef", &warn_undef, 1 }, { 'W', "missing-include-dirs", &warn_missing_include_dirs, 1 }, { 'W', "multichar", &warn_multichar, 1 } }; /* Options with arguments */ #define OPTS_WITH_ARGS "DUAIo" const char *opts_with_args[] = { "include", "imacros", "idirafter", "iprefix", "iwithprefix", "iwithprefixbefore", "isystem", "iquote" }; #ifdef SIGPIPE /* Handler for SIGPIPE. */ static void pipe_closed (int signo) { fatal("output pipe has been closed"); } #endif /* Print a fatal error message. NAME is the text. Also include a system error message based on `errno'. */ /* Decode the string P as a language-specific option for C. */ static bool c_option(char *p) { if (!strcmp (p, "-v")) flag_verbose = 1; else if (!strcmp (p, "-traditional")) flag_traditional = 1; else if (!strcmp (p, "-trigraphs")) flag_trigraphs = 1; else if (!strcmp (p, "-ansi")) flag_no_asm = 1; else if (!strcmp (p, "-pedantic")) pedantic = 1; else if (!strcmp (p, "-pedantic-errors")) flag_pedantic_errors = pedantic = 1; else if (!strcmp (p, "-nostdinc")) flag_nostdinc = 1; else if (!strcmp (p, "-undef")) flag_undef = 1; else if (!strcmp (p, "-fdollars-in-identifiers")) fprintf(stderr, "nesC does not support $ in identifiers"); else if (!strcmp (p, "-fno-dollars-in-identifiers")) dollars_in_ident = 0; else if (!strcmp (p, "-w")) inhibit_warnings = 1; else if (!strcmp (p, "-Wimplicit")) { warn_implicit_int = 1; if (mesg_implicit_function_declaration != 2) mesg_implicit_function_declaration = 1; } else if (!strcmp (p, "-Wno-implicit")) warn_implicit_int = 0, mesg_implicit_function_declaration = 0; else if (!strcmp (p, "-W")) { extra_warnings = 1; /* We save the value of warn_uninitialized, since if they put -Wuninitialized on the command line, we need to generate a warning about not using it without also specifying -O. */ if (warn_uninitialized != 1) warn_uninitialized = 2; } else if (!strcmp (p, "-Wall")) { /* We save the value of warn_uninitialized, since if they put -Wuninitialized on the command line, we need to generate a warning about not using it without also specifying -O. */ if (warn_uninitialized != 1) warn_uninitialized = 2; warn_implicit_int = 1; mesg_implicit_function_declaration = 1; warn_return_type = 1; warn_unused = 1; warn_switch = 1; warn_format = 1; warn_char_subscripts = 1; warn_parentheses = 1; warn_missing_braces = 1; /* We set this to 2 here, but 1 in -Wmain, so -ffreestanding can turn it off only if it's not explicit. */ warn_main = 2; warn_trigraphs = 1; warn_comments = 1; } else if (!strcmp (p, "-H")) { print_include_names = 1; } else return FALSE; return TRUE; } static void rcc_aborting(int s) { location where; signal(SIGABRT, 0); fprintf(stderr, "nesC: Internal error. Please send a bug report to the nesC bug mailing list\nat nescc-bugs@lists.sourceforge.net\n"); where = current_location(); if (where != dummy_location) fprintf(stderr, "Current location (guess): %s:%lu\n", where->filename, where->lineno); if (getenv("RCCDEBUG")) abort(); else exit(FATAL_EXIT_CODE); } /* Entry point of cc1/c++. Decode command args, then call compile_file. Exit code is 35 if can't open files, 34 if fatal error, 33 if had nonfatal errors, else success. */ static void outofmemory(void) { fprintf(stderr, "Out of memory - exiting\n"); exit(FATAL_EXIT_CODE); } int region_main(int argc, char **argv) deletes { int i; char *filename = 0; char *targetfile = 0; char *p; #if HAVE_POLL char* waitforgdb; /* * Check for an environment variable NCCGDB, and if set, block * calling poll(). When gdb attaches, it sends us a signal which * causes poll to return with EINTR, and we continue on our merry * way. */ waitforgdb = getenv("NCCGDB"); if (waitforgdb) { fprintf(stderr, "ncc pid %d waiting for gdb attach\n", getpid()); poll(0, 0, -1); // should return with EINTR } #endif signal(SIGABRT, rcc_aborting); signal(SIGSEGV, rcc_aborting); #ifdef SIGBUS signal(SIGBUS, rcc_aborting); #endif set_nomem_handler(outofmemory); init_nesc_paths_start(newregion()); p = argv[0] + strlen (argv[0]); while (p != argv[0] && p[-1] != '/' #ifdef DIR_SEPARATOR && p[-1] != DIR_SEPARATOR #endif ) --p; progname = p; #ifdef SIGPIPE signal (SIGPIPE, pipe_closed); #endif flag_signed_char = 2; /* Detect if user specifies a value */ for (i = 1; i < argc; ) { int j; if (c_option(argv[i]) || nesc_option(argv[i])) i++; else if (argv[i][0] == '-' && argv[i][1] != 0) { char *str = argv[i++] + 1; char *arg = NULL; if (strchr(OPTS_WITH_ARGS, str[0])) { if (!str[1]) if (i < argc) arg = argv[i++]; else { str = ""; error("argument to `-%c' is missing", str[0]); } else arg = str + 1; } for (j = 0; j < sizeof opts_with_args / sizeof *opts_with_args; j++) if (!strcmp(str, opts_with_args[j])) { if (i < argc) arg = argv[i++]; else { str = ""; error("argument to `-%s' is missing", str); } break; } if (str[0] == 'o') targetfile = arg; else if (str[0] == 'I') add_nesc_dir(arg, CHAIN_BRACKET); else if (str[0] == 'D' || str[0] == 'U' || str[0] == 'A') save_cpp_option(str, arg); else if (str[0] == 'f' || str[0] == 'W') { char kind = str[0]; char *p = &str[1]; /* Some kind of -f or -W option. p's value is the option sans -f/W. Search for it in the table of options. */ for (j = 0; j < sizeof (fW_options) / sizeof (fW_options[0]); j++) { if (kind == fW_options[j].c && !strcmp (p, fW_options[j].string)) { *fW_options[j].variable = fW_options[j].on_value; break; } if (kind == fW_options[j].c && p[0] == 'n' && p[1] == 'o' && p[2] == '-' && !strcmp (p+3, fW_options[j].string)) { *fW_options[j].variable = ! fW_options[j].on_value; break; } } } else if (!strcmp(str, "include")) add_nesc_include(arg, TRUE); } else filename = argv[i++]; } /* Pass options on to the target too (this a bit hacky, but fine so far) */ if (target->handle_option) for (i = 1; i < argc; i++) if (argv[i][0] == '-' && argv[i][1] != 0) target->handle_option(argv[i]); if (target->preinit) target->preinit(); if (flag_signed_char == 2) /* not set by user */ flag_signed_char = target->char_signed; if (filename) nesc_compile (filename, targetfile); else { fprintf(stderr, "usage: %s [options] \n", argv[0]); exit(FATAL_EXIT_CODE); } if (errorcount) exit (FATAL_EXIT_CODE); else exit (SUCCESS_EXIT_CODE); return 0; } nescc-1.3.4/src/types.c000066400000000000000000002057631177770303300147360ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "types.h" #include "constants.h" #include "c-parse.h" #include "machine.h" #include "nesc-semantics.h" #include "nesc-xml.h" #include "AST_utils.h" #include #include struct type { enum { tk_primitive, tk_complex, tk_tagged, tk_error, tk_void, tk_pointer, tk_function, tk_array, tk_iref, tk_variable, tk_cref } kind; type_quals qualifiers; enum { nx_no, nx_base, nx_derived } network; data_declaration combiner, basedecl, typedefdecl; /* size is not used for aggregate types (as the values may be discovered after the type is created) or for arrays (as they may be arrays of aggregates) alignment is used for aggregates and arrays only if it is non-zero (indicating an alignment overridden by an attribute) */ cval size; cval alignment; bool user_align; union { /* tk_primtive and tk_complex. The order reflects promotion order (for an arbitrary machine, see common_primitive_type) */ enum { /* The elements of this enum must be ordered as follows: - all integral types before tp_first_floating - do not change the floating type order - the integral types are ordered by "rank" (see c9x std) and unsignedness (unsigned > signed) (common_primitive_type relies on this order) - The tp_[u]int types must be before tp_char (for the assert in common_primitive_type). These types are only used when the corresponding size is not available amongst short/int/long/long long If this frontend followed c9x, these types would always exist and be special integer types distinct from the regular ones (see the rank stuff), but we're following gcc so they aren't. If this changes, common_primitive_type, default_conversion and type_default_conversion need revising. */ tp_error, tp_int2, tp_uint2, tp_int4, tp_uint4, tp_int8, tp_uint8, tp_char, tp_signed_char, tp_unsigned_char, tp_short, tp_unsigned_short, tp_int, tp_unsigned_int, tp_long, tp_unsigned_long, tp_long_long, tp_unsigned_long_long, /* Used as the rep type of enums whose constants are derived from template arguments and whose size is hence unknown. The unknown int type has the highest rank (its unsignedness is unknown, we assume its signed). */ tp_unknown_int, tp_first_floating, tp_float = tp_first_floating, tp_double, tp_long_double, /* Like tp_unknown_int, but might be a real or integer */ tp_unknown_number, tp_last } primitive; /* tk_tagged */ tag_declaration tag; /* tk_pointer */ type pointsto; /* tk_function */ struct { type returns; typelist argtypes; bool varargs; bool oldstyle; enum { tkf_c, tkf_event, tkf_command, tkf_task, tkf_generic } fkind; } fn; /* tk_array */ struct { type arrayof; expression size; /* If size is a known constant, it is guaranteed >= 0 */ } array; /* tk_iref */ data_declaration iref; /* tk_cref */ data_declaration cref; /* tk_variable */ data_declaration tdecl; } u; }; #ifdef RC_ADJUST static void rc_update_type(struct type *old, struct type *new) { regionid base = regionidof(old); switch (old->kind) { case tk_tagged: RC_UPDATE(base, old->u.tag, new->u.tag); break; case tk_pointer: RC_UPDATE(base, old->u.pointsto, new->u.pointsto); break; case tk_function: RC_UPDATE(base, old->u.fn.returns, new->u.fn.returns); RC_UPDATE(base, old->u.fn.argtypes, new->u.fn.argtypes); break; case tk_array: RC_UPDATE(base, old->u.array.arrayof, new->u.array.arrayof); RC_UPDATE(base, old->u.array.size, new->u.array.size); break; default: break; } } static size_t rc_adjust_type(void *x, int by) { struct type *p = x; RC_ADJUST_PREAMBLE; switch (p->kind) { case tk_tagged: RC_ADJUST(p->u.tag, by); break; case tk_pointer: RC_ADJUST(p->u.pointsto, by); break; case tk_function: RC_ADJUST(p->u.fn.returns, by); RC_ADJUST(p->u.fn.argtypes, by); break; case tk_array: RC_ADJUST(p->u.array.arrayof, by); RC_ADJUST(p->u.array.size, by); break; default: break; } return sizeof *p; } #endif static region types_region; static type primitive_types[tp_last]; static type complex_types[tp_last]; type float_type, double_type, long_double_type, int_type, unsigned_int_type, long_type, unsigned_long_type, long_long_type, unsigned_long_long_type, short_type, unsigned_short_type, char_type, char_array_type, wchar_type, wchar_array_type, unsigned_char_type, signed_char_type, void_type, ptr_void_type, const_ptr_void_type, size_t_type, ptrdiff_t_type, intptr_type, int2_type, uint2_type, int4_type, uint4_type, int8_type, uint8_type, unknown_int_type, unknown_number_type, error_type; static type copy_type(type t) { type nt = ralloc(types_region, struct type); *nt = *t; return nt; } static type new_type(int kind) { type nt = ralloc(types_region, struct type); nt->kind = kind; /*nt->qualifiers = 0; nt->network = nx_no; nt->user_align = FALSE; nt->combiner = nt->basedecl = nt->typedefdecl = NULL;*/ nt->size = nt->alignment = cval_top; return nt; } /* Return the 'complex t' version of basic type t (one of the integral or floating-point types) */ type make_complex_type(type t) { assert(t->kind == tk_primitive); return qualify_type1(complex_types[t->u.primitive], t); } /* Return the base type of complex type t (one of the integral or floating-point types) */ type make_base_type(type t) { assert(t->kind == tk_complex); return primitive_types[t->u.primitive]; } /* Return the type t with it's qualifiers set to tq (old qualifiers are ignored). This is illegal for function types. For arrays, the qualifiers get pushed down to the base type. */ type make_qualified_type(type t, type_quals qualifiers) { /* Push const or volatile down to base type */ if (t->kind == tk_array) return make_array_type(make_qualified_type(t->u.array.arrayof, qualifiers), t->u.array.size); else { type nt = copy_type(t); nt->qualifiers = qualifiers; return nt; } } /* Return type 'pointer to t' (unqualified) */ type make_pointer_type(type t) { type nt = new_type(tk_pointer); nt->u.pointsto = t; /* ASSUME: all pointers are the same */ nt->size = make_type_cval(target->tptr.size); nt->alignment = make_type_cval(target->tptr.align); return nt; } /* Return type 'array [size] of t'. size is optional */ type make_array_type(type t, expression size) { type nt = new_type(tk_array); nt->u.array.arrayof = t; nt->u.array.size = size; nt->network = t->network != nx_no ? nx_derived : nx_no; return nt; } /* Return type 'function with argument types argtypes returning t'. If oldstyle is true, this is an oldstyle function type and argtypes is NULL */ type make_function_type(type t, typelist argtypes, bool varargs, bool oldstyle) { type nt = new_type(tk_function); nt->u.fn.fkind = tkf_c; nt->u.fn.returns = t; nt->u.fn.argtypes = argtypes; nt->u.fn.varargs = varargs; nt->u.fn.oldstyle = oldstyle; nt->size = nt->alignment = make_type_cval(1); return nt; } type build_function_type(region r, type returns, ...) { va_list args; typelist argtypes; va_start(args, returns); argtypes = new_typelist(r); for (;;) { type onearg = va_arg(args, type); if (!onearg) break; typelist_append(argtypes, onearg); } return make_function_type(returns, argtypes, FALSE, FALSE); } /* Return the tagged type whose declaration is d */ type make_tagged_type(tag_declaration d) { type nt = new_type(tk_tagged); nt->u.tag = d; if (d->kind == kind_nx_struct_ref || d->kind == kind_nx_union_ref) nt->network = nx_derived; return nt; } bool type_network(type t) { return t->network != nx_no; } /* Make the single instance of pk, with specified size and alignment (Note that we may make copies if this single instance for different alignments) Requires: must be called at most once for each pk, from types_init */ static type make_primitive0(int pk, cval size, cval alignment, cval complex_size) { type nt = new_type(tk_primitive), ct; nt->u.primitive = pk; nt->size = size; nt->alignment = alignment; primitive_types[pk] = nt; ct = new_type(tk_complex); ct->u.primitive = pk; ct->size = complex_size; /* can't compute as types not available yet */ ct->alignment = nt->alignment; /* ASSUME: alignof(complex t) == alignof(t) */ complex_types[pk] = ct; return nt; } static type make_primitive(int pk, int size, int alignment) { return make_primitive0(pk, make_type_cval(size), make_type_cval(alignment), make_type_cval(size * 2)); } static type make_unknown_primitive(int pk) { return make_primitive0(pk, cval_unknown_number, cval_unknown_number, cval_unknown_number); } static type lookup_primitive(int default_kind, int size, int alignment, bool isunsigned) { int i; for (i = tp_signed_char; i < tp_unknown_int; i++) if (cval_uint_value(primitive_types[i]->size) == size && type_unsigned(primitive_types[i]) == isunsigned) return primitive_types[i]; return make_primitive(default_kind, size, alignment); } static type lookup_float(int size) { int i; for (i = tp_first_floating; i < tp_unknown_number; i++) if (cval_uint_value(primitive_types[i]->size) == size) return primitive_types[i]; return error_type; } /* Return the integral type of size 'size', unsigned if 'isunsigned' is true */ type type_for_size(cval size, bool isunsigned) { type t; if (cval_isunknown(size)) return unknown_int_type; t = lookup_primitive(tp_error, cval_sint_value(size), 0, isunsigned); assert(t->u.primitive != tp_error); return t; } static type type_for_size_int(int size, bool isunsigned) { type t = lookup_primitive(tp_error, size, 0, isunsigned); assert(t->u.primitive != tp_error); return t; } type type_for_cval(cval c, bool isunsigned) { int i; if (cval_isunknown(c)) return unknown_int_type; for (i = tp_signed_char; i < tp_unknown_int; i++) if (type_unsigned(primitive_types[i]) == isunsigned && cval_inrange(c, primitive_types[i])) return primitive_types[i]; return NULL; } void init_types(void) { types_region = newregion(); float_type = make_primitive (tp_float, target->tfloat.size, target->tfloat.align); double_type = make_primitive (tp_double, target->tdouble.size, target->tdouble.align); long_double_type = make_primitive (tp_long_double, target->tlong_double.size, target->tlong_double.align); short_type = make_primitive (tp_short, target->tshort.size, target->tshort.align); unsigned_short_type = make_primitive (tp_unsigned_short, target->tshort.size, target->tshort.align); int_type = make_primitive (tp_int, target->tint.size, target->tint.align); unsigned_int_type = make_primitive (tp_unsigned_int, target->tint.size, target->tint.align); long_type = make_primitive (tp_long, target->tlong.size, target->tlong.align); unsigned_long_type = make_primitive (tp_unsigned_long, target->tlong.size, target->tlong.align); long_long_type = make_primitive (tp_long_long, target->tlong_long.size, target->tlong_long.align); unsigned_long_long_type = make_primitive (tp_unsigned_long_long, target->tlong_long.size, target->tlong_long.align); signed_char_type = make_primitive(tp_signed_char, 1, target->int1_align); unsigned_char_type = make_primitive(tp_unsigned_char, 1, target->int1_align); char_type = make_primitive(tp_char, 1, target->int1_align); int2_type = lookup_primitive(tp_int2, 2, target->int2_align, FALSE); uint2_type = lookup_primitive(tp_uint2, 2, target->int2_align, TRUE); int4_type = lookup_primitive(tp_int4, 4, target->int4_align, FALSE); uint4_type = lookup_primitive(tp_uint4, 4, target->int4_align, TRUE); int8_type = lookup_primitive(tp_int8, 8, target->int8_align, FALSE); uint8_type = lookup_primitive(tp_uint8, 8, target->int8_align, TRUE); unknown_int_type = make_unknown_primitive(tp_unknown_int); unknown_number_type = make_unknown_primitive(tp_unknown_number); char_array_type = make_array_type(char_type, NULL); error_type = new_type(tk_error); error_type->size = error_type->alignment = make_type_cval(1); void_type = new_type(tk_void); void_type->size = void_type->alignment = make_type_cval(1); ptr_void_type = make_pointer_type(void_type); const_ptr_void_type = make_pointer_type(make_qualified_type(void_type, const_qualifier)); wchar_type = type_for_size_int(target->wchar_t_size, !target->wchar_t_signed); wchar_array_type = make_array_type(wchar_type, NULL); size_t_type = type_for_size_int(target->size_t_size, TRUE); ptrdiff_t_type = type_for_size_int(target->tptr.size, FALSE); intptr_type = type_for_size_int(target->tptr.size, TRUE); } struct typelist { region sameregion r; struct typelist_element *sameregion first; }; struct typelist_element { struct typelist_element *sameregion next; type t; }; typelist new_typelist(region r) { typelist tl = ralloc(r, struct typelist); tl->r = r; tl->first = NULL; return tl; } void typelist_append(typelist tl, type t) { struct typelist_element *nte = ralloc(tl->r, struct typelist_element); struct typelist_element *sameregion *last; nte->t = t; last = &tl->first; while (*last) last = &(*last)->next; *last = nte; } bool empty_typelist(typelist tl) { return tl->first == NULL; } void typelist_scan(typelist tl, typelist_scanner *scanner) { *scanner = tl->first; } type typelist_next(typelist_scanner *scanner) { type t; if (!*scanner) return NULL; t = (*scanner)->t; *scanner = (*scanner)->next; return t; } type_quals type_qualifiers(type t) { /* Arrays don't have qualifiers */ while (t->kind == tk_array) t = t->u.array.arrayof; return t->qualifiers; } #define Q(name, kind, tq, val) \ bool type_ ## name(type t) \ { \ return (type_qualifiers(t) & tq) != 0; \ } #include "qualifiers.h" #undef Q bool type_transparent(type t) { return (type_qualifiers(t) & transparent_qualifier) != 0; } bool type_readonly(type t) { return type_const(t) || (type_tagged(t) && type_tag(t)->fields_const); } bool type_integral(type t) /* Does not include enum's */ { return t->kind == tk_primitive && t->u.primitive < tp_first_floating; } bool type_smallerthanint(type t) { return t->kind == tk_primitive && t->u.primitive < tp_unknown_int && cval_intcompare(t->size, int_type->size) < 0; } bool type_unsigned(type t) { if (t->kind == tk_primitive) switch (t->u.primitive) { case tp_char: return !flag_signed_char; case tp_unsigned_char: case tp_unsigned_short: case tp_unsigned_int: case tp_unsigned_long: case tp_unsigned_long_long: case tp_uint2: case tp_uint4: case tp_uint8: return TRUE; default: break; } return FALSE; } bool type_floating(type t) { return t->kind == tk_primitive && t->u.primitive >= tp_first_floating && t->u.primitive < tp_unknown_number; } bool type_plain_char(type t) { return t->kind == tk_primitive && t->u.primitive == tp_char; } bool type_signed_char(type t) { return t->kind == tk_primitive && t->u.primitive == tp_signed_char; } bool type_unsigned_char(type t) { return t->kind == tk_primitive && t->u.primitive == tp_unsigned_char; } bool type_short(type t) { return t->kind == tk_primitive && t->u.primitive == tp_short; } bool type_unsigned_short(type t) { return t->kind == tk_primitive && t->u.primitive == tp_unsigned_short; } bool type_int(type t) { return t->kind == tk_primitive && t->u.primitive == tp_int; } bool type_unsigned_int(type t) { return t->kind == tk_primitive && t->u.primitive == tp_unsigned_int; } bool type_long(type t) { return t->kind == tk_primitive && t->u.primitive == tp_long; } bool type_unsigned_long(type t) { return t->kind == tk_primitive && t->u.primitive == tp_unsigned_long; } bool type_long_long(type t) { return t->kind == tk_primitive && t->u.primitive == tp_long_long; } bool type_unsigned_long_long(type t) { return t->kind == tk_primitive && t->u.primitive == tp_unsigned_long_long; } bool type_unknown_int(type t) { return t->kind == tk_primitive && t->u.primitive == tp_unknown_int; } bool type_float(type t) { return t->kind == tk_primitive && t->u.primitive == tp_float; } bool type_double(type t) { return t->kind == tk_primitive && t->u.primitive == tp_double; } bool type_long_double(type t) { return t->kind == tk_primitive && t->u.primitive == tp_long_double; } bool type_unknown_number(type t) { return t->kind == tk_primitive && t->u.primitive == tp_unknown_number; } bool type_unknown(type t) /* unknown_int or unknown_number */ { return type_unknown_int(t) || type_unknown_number(t); } bool type_char(type t) { return t->kind == tk_primitive && (t->u.primitive == tp_char || t->u.primitive == tp_unsigned_char || t->u.primitive == tp_signed_char); } bool type_void(type t) { return t->kind == tk_void; } bool type_function(type t) { return t->kind == tk_function && t->u.fn.fkind == tkf_c; } bool type_array(type t) { return t->kind == tk_array; } bool type_pointer(type t) { return t->kind == tk_pointer; } bool type_complex(type t) { return t->kind == tk_complex; } bool type_enum(type t) { return t->kind == tk_tagged && t->u.tag->kind == kind_enum_ref; } bool type_tagged(type t) { return t->kind == tk_tagged; } bool type_struct(type t) { return t->kind == tk_tagged && (t->u.tag->kind == kind_struct_ref || t->u.tag->kind == kind_nx_struct_ref); } bool type_attribute(type t) { return t->kind == tk_tagged && t->u.tag->kind == kind_attribute_ref; } bool type_union(type t) { return t->kind == tk_tagged && (t->u.tag->kind == kind_union_ref || t->u.tag->kind == kind_nx_union_ref); } type type_function_return_type(type t) { assert(t->kind == tk_function); return t->u.fn.returns; } typelist type_function_arguments(type t) { assert(t->kind == tk_function); return t->u.fn.argtypes; } bool type_function_varargs(type t) { assert(t->kind == tk_function); return t->u.fn.varargs; } bool type_function_oldstyle(type t) { assert(t->kind == tk_function); return t->u.fn.oldstyle; } type type_points_to(type t) { assert(t->kind == tk_pointer); return t->u.pointsto; } type type_array_of(type t) { assert(t->kind == tk_array); return t->u.array.arrayof; } type type_array_of_base(type t) { while (t->kind == tk_array) t = t->u.array.arrayof; return t; } expression type_array_size(type t) { assert(t->kind == tk_array); return t->u.array.size; } cval type_array_size_cval(type t) /* Returns: number of elements in array type t if known, cval_top otherwise */ { known_cst s; if (t->u.array.size && (s = t->u.array.size->cst) && (constant_integral(s) || constant_unknown(s))) return cval_cast(s->cval, size_t_type); return cval_top; } tag_declaration type_tag(type t) { assert(t->kind == tk_tagged); return t->u.tag; } bool type_incomplete(type t) { return t->kind == tk_void || (t->kind == tk_tagged && !t->u.tag->defined) || (t->kind == tk_array && (type_incomplete(t->u.array.arrayof) || !t->u.array.size)); } /* Return TRUE if two type lists are equal */ static bool type_lists_equal(typelist al1, typelist al2) { struct typelist_element *args1 = al1->first, *args2 = al2->first; for (;;) { if (args1 == 0 && args2 == 0) return TRUE; /* If one list is shorter than the other, they fail to match. */ if (args1 == 0 || args2 == 0) return FALSE; if (!type_equal(args1->t, args2->t)) return FALSE; args1 = args1->next; args2 = args2->next; } } /* Return TRUE if two function types F1 and F2 are equal. */ bool function_equal(type t1, type t2) { /* Function kinds and return types must match */ if (!(t1->u.fn.fkind == t2->u.fn.fkind && type_equal(t1->u.fn.returns, t2->u.fn.returns))) return FALSE; if (!t1->u.fn.oldstyle && !t2->u.fn.oldstyle) return t1->u.fn.varargs == t2->u.fn.varargs && type_lists_equal(t1->u.fn.argtypes, t2->u.fn.argtypes); else return t1->u.fn.oldstyle == t2->u.fn.oldstyle; } bool type_equal(type t1, type t2) { return t1->qualifiers == t2->qualifiers && type_equal_unqualified(t1, t2); } static bool array_sizes_match(type t1, type t2) /* Return: TRUE if we think the array sizes of t1, t2 match */ { known_cst s1 = t1->u.array.size ? t1->u.array.size->cst : NULL; known_cst s2 = t2->u.array.size ? t2->u.array.size->cst : NULL; // Non-constant array sizes match everything // Unknown array sizes match everything too // (XXX: we should check again after instantiation, but we'll leave // that to the backend C compiler) if (!s1 || !constant_integral(s1) || !s2 || !constant_integral(s2)) return TRUE; return cval_intcompare(s1->cval, s2->cval) == 0; } bool type_equal_unqualified(type t1, type t2) { if (t1 == error_type || t2 == error_type) return TRUE; /* The unknown types are actually not equal to themselves... */ if (type_unknown_int(t1) || type_unknown_number(t1)) return FALSE; /* Short-circuit easy case */ if (t1 == t2) return TRUE; /* Different classes of types can't be compatible. */ if (t1->kind != t2->kind) return FALSE; /* sameregion, traditional and parentptr qualifiers must always match */ if ((t1->qualifiers & ~(const_qualifier | volatile_qualifier | restrict_qualifier | transparent_qualifier)) != (t2->qualifiers & ~(const_qualifier | volatile_qualifier | restrict_qualifier | transparent_qualifier))) return FALSE; /* Network base types are identified by their declaration */ if (type_network_base_type(t1) || type_network_base_type(t2)) return t1->basedecl == t2->basedecl; switch (t1->kind) { case tk_primitive: case tk_complex: return t1->u.primitive == t2->u.primitive; case tk_void: return TRUE; case tk_tagged: return t1->u.tag == t2->u.tag; case tk_pointer: return type_equal(t1->u.pointsto, t2->u.pointsto); case tk_function: return function_equal(t1, t2); case tk_array: return type_equal(t1->u.array.arrayof, t2->u.array.arrayof) && array_sizes_match(t1, t2); case tk_variable: return t1->u.tdecl == t2->u.tdecl; default: assert(0); return FALSE; } } /* Return TRUE if T is not affected by default promotions. */ bool type_self_promoting(type t) { if (t->kind != tk_primitive) return TRUE; switch (t->u.primitive) { case tp_float: case tp_char: case tp_unsigned_char: case tp_signed_char: case tp_short: case tp_unsigned_short: return FALSE; default: return TRUE; } } /* Return TRUE if function type FNTYPE specifies a fixed number of parameters and none of their types is affected by default promotions. TRUE for oldstyle functions */ bool self_promoting_args(type fntype) { struct typelist_element *parms; if (type_function_varargs(fntype)) return FALSE; if (type_function_oldstyle(fntype)) return TRUE; for (parms = type_function_arguments(fntype)->first; parms; parms = parms->next) if (!type_self_promoting(parms->t)) return FALSE; return TRUE; } /* Allow wait (union {union wait *u; int *i}) and wait (union wait *) to be compatible. */ static bool weird_parameter_match(type t1, type t2) { tag_declaration t1decl; if (type_union(t1) && (!(t1decl = type_tag(t1))->name || t1decl->transparent_union) && type_size_cc(t1) && type_size_cc(t2)) { cval s1 = type_size(t1), s2 = type_size(t2); /* We don't do this for types of unknown size */ if (cval_isinteger(s1) && cval_isinteger(s2) && cval_intcompare(s1, s2) == 0) { field_declaration field; for (field = t1decl->fieldlist; field; field = field->next) if (type_compatible(field->type, t2)) return TRUE; } } return FALSE; } static type weird_common_parameter(type t1, type t2) { /* Given wait (union {union wait *u; int *i} *) and wait (union wait *), prefer union wait * as type of parm. */ if (weird_parameter_match(t1, t2)) { if (pedantic) pedwarn("function types not truly compatible in ANSI C"); return t2; } return NULL; } /* Check two lists of types for compatibility, returning 0 for incompatible, 1 for compatible, or 2 for compatible with warning. */ static int type_lists_compatible(typelist al1, typelist al2) { /* 1 if no need for warning yet, 2 if warning cause has been seen. */ int val = 1; int newval = 0; struct typelist_element *args1 = al1->first, *args2 = al2->first; while (1) { if (args1 == 0 && args2 == 0) return val; /* If one list is shorter than the other, they fail to match. */ if (args1 == 0 || args2 == 0) return 0; if (!(newval = type_compatible_unqualified(args1->t, args2->t))) { if (!weird_parameter_match(args1->t, args2->t) && !weird_parameter_match(args2->t, args1->t)) return 0; } /* type_compatible said ok, but record if it said to warn. */ if (newval > val) val = newval; args1 = args1->next; args2 = args2->next; } } /* Return 1 if two function types F1 and F2 are compatible. If either type specifies no argument types, the other must specify a fixed number of self-promoting arg types. Otherwise, if one type specifies only the number of arguments, the other must specify that number of self-promoting arg types. Otherwise, the argument types must match. */ int function_compatible(type t1, type t2) { typelist args1, args2; /* 1 if no need for warning yet, 2 if warning cause has been seen. */ int val = 1; /* Kinds and return types must match */ if (!(t1->u.fn.fkind == t2->u.fn.fkind && type_compatible(t1->u.fn.returns, t2->u.fn.returns))) return 0; args1 = t1->u.fn.argtypes; args2 = t2->u.fn.argtypes; /* An unspecified parmlist matches any specified parmlist whose argument types don't need default promotions. */ if (t1->u.fn.oldstyle) { if (args2 && !self_promoting_args(t2)) return 0; #if 0 /* If one of these types comes from a non-prototype fn definition, compare that with the other type's arglist. If they don't match, ask for a warning (but no error). */ if (TYPE_ACTUAL_ARG_TYPES (f1) && 1 != type_lists_compatible(args2, TYPE_ACTUAL_ARG_TYPES (f1))) val = 2; #endif return val; } if (t2->u.fn.oldstyle) { if (args1 && !self_promoting_args(t1)) return 0; #if 0 if (TYPE_ACTUAL_ARG_TYPES (f2) && 1 != type_lists_compatible(args1, TYPE_ACTUAL_ARG_TYPES (f2))) val = 2; #endif return val; } if (t1->u.fn.varargs != t2->u.fn.varargs) return 0; /* Both types have argument lists: compare them and propagate results. */ return type_lists_compatible(args1, args2); } static bool interface_equal(nesc_declaration i1, nesc_declaration i2) /* Returns: TRUE if the interface types are equal, i.e., they have the same type arguments to the same base interface */ { type_parm_decl p1 = CAST(type_parm_decl, i1->parameters), p2 = CAST(type_parm_decl, i2->parameters); if (original_component(i1) != original_component(i2)) return FALSE; while (p1 && p2) { if (!type_equal(p1->ddecl->type, p2->ddecl->type)) return FALSE; p1 = CAST(type_parm_decl, p1->next); p2 = CAST(type_parm_decl, p2->next); } return p1 == NULL && p2 == NULL; /* or p1 == p2 ;-) */ } bool type_compatible_unqualified(type t1, type t2) { if (t1 == error_type || t2 == error_type) return 1; /* The unknown types are actually not compatible with themselves... */ if (type_unknown_int(t1) || type_unknown_number(t1)) return FALSE; /* Short-circuit easy case */ if (t1 == t2) return 1; /* Different classes of types can't be compatible. */ if (t1->kind != t2->kind) return 0; #if 0 /* The combiners must match too */ if (t1->combiner != t2->combiner) return 0; #endif /* sameregion, traditional and parentptr qualifiers must always match */ if ((t1->qualifiers & ~(const_qualifier | volatile_qualifier | restrict_qualifier | transparent_qualifier)) != (t2->qualifiers & ~(const_qualifier | volatile_qualifier | restrict_qualifier | transparent_qualifier))) return 0; /* Network base types are identified by their declaration */ if (type_network_base_type(t1) || type_network_base_type(t2)) return t1->basedecl == t2->basedecl; switch (t1->kind) { case tk_primitive: case tk_complex: return t1->u.primitive == t2->u.primitive; case tk_void: return 1; case tk_tagged: return t1->u.tag == t2->u.tag; case tk_pointer: return type_compatible(t1->u.pointsto, t2->u.pointsto); case tk_function: return function_compatible(t1, t2); case tk_array: return type_compatible(t1->u.array.arrayof, t2->u.array.arrayof) && array_sizes_match(t1, t2); case tk_iref: return interface_equal(t1->u.iref->itype, t2->u.iref->itype); case tk_cref: return t1->u.cref == t2->u.cref; case tk_variable: return t1->u.tdecl == t2->u.tdecl; default: assert(0); return 0; } } bool type_compatible(type t1, type t2) { /* Qualifiers must match. */ /* GCC appears to allow changes to restrict (see /usr/include/sys/stat.h and the decls/defs of stat/lstat in redhat linux 7) */ /* XXX: investigate more. */ if ((t1->qualifiers & ~restrict_qualifier) != (t2->qualifiers & ~restrict_qualifier)) return 0; else return type_compatible_unqualified(t1, t2); } type qualify_type1(type t, type t1) { return make_qualified_type(t, type_qualifiers(t1)); } type qualify_type2(type t, type t1, type t2) { return make_qualified_type(t, type_qualifiers(t1) | type_qualifiers(t2)); } type align_type(type t, cval new_alignment) { type nt = copy_type(t); nt->alignment = new_alignment; nt->user_align = TRUE; return nt; } bool type_realigned(type t) { return t->user_align; } static int common_primitive_type(type t1, type t2) { int pk1 = t1->u.primitive, pk2 = t2->u.primitive; int pk = pk1 < pk2 ? pk2 : pk1; /* Note: the results of this function depend on the relative sizes of char, short, int, long and long long. The results are only correct for a version of C that has types that match those set by types_init (which uses those from the C compiler that compiles this file) */ if (pk1 < tp_first_floating && pk2 < tp_first_floating) { largest_uint s1, s2; /* The simple cases */ if (pk1 == tp_unknown_int || pk2 == tp_unknown_int) return tp_unknown_int; s1 = cval_uint_value(t1->size); s2 = cval_uint_value(t2->size); if (s1 < s2) return pk2; else if (s1 > s2) return pk1; /* The pain starts, see 6.3.1.8 of c9x */ /* If the sizes are the same, then we can't have a tp_[u]int or a tp_char/short/int/long/etc pair (as we only have tp_[u]int if there is no corresponding integer type of the same size. So we can compare rank by comparing pk1 and pk2 */ assert(!((pk1 < tp_char && pk2 >= tp_char) || (pk1 >= tp_char && pk2 < tp_char))); /* the higher rank wins, and if either of the types is unsigned, the result is unsigned (thus unsigned short + int == unsigned int if sizeof(short) == sizeof(int) */ if ((type_unsigned(t1) || type_unsigned(t2)) && !type_unsigned(primitive_types[pk])) /* A bit inefficient, admittedly */ pk = make_unsigned_type(primitive_types[pk])->u.primitive; return pk; } /* Floating point types follow the order specified in the enum and win over all integral types. This includes unknown_number winning over everybody. */ return pk; } /* Return the common type of two types. This is used in two cases: - when type_compatible(t1, t2) is true, to pick a merged type for declarations - to merge two types that are compatible in some expressions (e.g. ?:, arithmetic) */ type common_type(type t1, type t2) { type rtype; data_declaration combiner; /* Save time if the two types are the same. */ if (t1 == t2) return t1; /* If one type is nonsense, use the other. */ if (t1 == error_type) return t2; if (t2 == error_type) return t1; combiner = NULL; if (t1->combiner == t2->combiner) combiner = t1->combiner; /* Special enum handling: if same enum, just merge qualifiers. otherwise treat an enum type as the unsigned integer type of the same width. Note that gcc does not check for the same enum. Some weird behaviour... (see enum2.c) */ if (type_enum(t1)) { if (type_equal_unqualified(t1, t2)) return make_combiner_type(qualify_type2(t1, t1, t2), combiner); t1 = qualify_type1(type_for_size(type_size(t1), TRUE), t1); } if (type_enum(t2)) t2 = qualify_type1(type_for_size(type_size(t1), TRUE), t2); /* If one type is complex, form the common type of the non-complex components, then make that complex. */ if (type_complex(t1) || type_complex(t2)) { int pk = common_primitive_type(t1, t2); assert((t1->kind == tk_primitive || t1->kind == tk_complex) && (t2->kind == tk_primitive || t2->kind == tk_complex)); rtype = complex_types[pk]; } else switch (t1->kind) { case tk_primitive: /* We need to preserve equivalent network base types because common_type is used for redeclarations */ if (type_network_base_type(t1) && type_network_base_type(t2) && t1->basedecl == t2->basedecl) rtype = make_qualified_type(t1, 0); else { int pk = common_primitive_type(t1, t2); assert(t2->kind == tk_primitive); rtype = primitive_types[pk]; break; } case tk_void: case tk_tagged: case tk_variable: rtype = t1; break; case tk_pointer: rtype = make_pointer_type(common_type(t1->u.pointsto, t2->u.pointsto)); break; case tk_array: { /* Merge the element types, and have a size if either arg has one. */ type element_type = common_type(t1->u.array.arrayof, t2->u.array.arrayof); expression size1 = t1->u.array.size, size2 = t2->u.array.size; rtype = make_array_type(element_type, size1 ? size1 : size2); break; } case tk_function: /* Function types: prefer the one that specified arg types. If both do, merge the arg types. Also merge the return types. */ { type valtype = common_type(t1->u.fn.returns, t2->u.fn.returns); typelist args; bool oldstyle, varargs; if (t1->u.fn.oldstyle && t2->u.fn.oldstyle) { args = NULL; oldstyle = TRUE; varargs = FALSE; } else if (t1->u.fn.oldstyle) { args = t2->u.fn.argtypes; oldstyle = FALSE; varargs = t2->u.fn.varargs; } else if (t2->u.fn.oldstyle) { args = t1->u.fn.argtypes; oldstyle = FALSE; varargs = t1->u.fn.varargs; } else { /* If both args specify argument types, we must merge the two lists, argument by argument. */ struct typelist_element *args1 = t1->u.fn.argtypes->first; struct typelist_element *args2 = t2->u.fn.argtypes->first; type argtype; oldstyle = FALSE; varargs = t1->u.fn.varargs; args = new_typelist(t1->u.fn.argtypes->r); while (args1) { (void) ((argtype = weird_common_parameter(args1->t, args2->t)) || (argtype = weird_common_parameter(args2->t, args1->t)) || (argtype = common_type(args1->t, args2->t))); typelist_append(args, argtype); args1 = args1->next; args2 = args2->next; } } rtype = make_function_type(valtype, args, varargs, oldstyle); /* Hack up the function kind */ rtype->u.fn.fkind = t1->u.fn.fkind; break; } default: assert(0); return NULL; } rtype = qualify_type2(rtype, t1, t2); return make_combiner_type(rtype, combiner); } type type_base(type t) { while (t->kind == tk_array) t = t->u.array.arrayof; return t; } bool type_integer(type t) { return type_integral(t) || type_enum(t) || (type_variable(t) && type_variable_decl(t)->typevar_kind == typevar_integer); } bool type_real(type t) { return type_integer(t) || type_floating(t) || type_unknown_number(t) || (type_variable(t) && type_variable_decl(t)->typevar_kind == typevar_number); } bool type_arithmetic(type t) { return type_real(t) || type_complex(t); } bool type_scalar(type t) { return type_arithmetic(t) || type_pointer(t); } bool type_aggregate(type t) { return type_struct(t) || type_union(t) || type_attribute(t); } type make_unsigned_type(type t) { if (t->kind != tk_primitive) return t; switch (t->u.primitive) { case tp_char: case tp_signed_char: return qualify_type1(unsigned_char_type, t); case tp_short: return qualify_type1(unsigned_short_type, t); case tp_int: return qualify_type1(unsigned_int_type, t); case tp_long: return qualify_type1(unsigned_long_type, t); case tp_long_long: return qualify_type1(unsigned_long_long_type, t); case tp_int2: return qualify_type1(uint2_type, t); case tp_int4: return qualify_type1(uint4_type, t); case tp_int8: return qualify_type1(uint8_type, t); default: break; } assert(type_unknown_int(t) || type_unknown_number(t) || type_unsigned(t)); return t; } static type_element rid2ast(region r, location loc, int keyword, type_element rest) { type_element ast = CAST(type_element, new_rid(r, loc, keyword)); ast->next = CAST(node, rest); return ast; } static type_element qualifier2ast(region r, location loc, int keyword, type_element rest) { type_element ast = CAST(type_element, new_qualifier(r, loc, keyword)); ast->next = CAST(node, rest); return ast; } static type_element qualifiers2ast(region r, location loc, type_quals quals, type_element rest) { if (quals & volatile_qualifier) rest = qualifier2ast(r, loc, volatile_qualifier, rest); if (quals & const_qualifier) rest = qualifier2ast(r, loc, const_qualifier, rest); return rest; } static type_element primitive2ast(region r, location loc, int primitive, type_element rest) { bool isunsigned = FALSE; int keyword; switch (primitive) { case tp_unsigned_char: isunsigned = TRUE; case tp_char: keyword = RID_CHAR; break; case tp_signed_char: return rid2ast(r, loc, RID_SIGNED, rid2ast(r, loc, RID_CHAR, rest)); case tp_unsigned_short: isunsigned = TRUE; case tp_short: keyword = RID_SHORT; break; case tp_unsigned_int: isunsigned = TRUE; case tp_int: keyword = RID_INT; break; case tp_unsigned_long: isunsigned = TRUE; case tp_long: keyword = RID_LONG; break; case tp_unsigned_long_long: isunsigned = TRUE; case tp_long_long: keyword = RID_LONG; rest = rid2ast(r, loc, RID_LONG, rest); break; case tp_float: keyword = RID_FLOAT; break; case tp_double: keyword = RID_DOUBLE; break; case tp_long_double: keyword = RID_DOUBLE; rest = rid2ast(r, loc, RID_LONG, rest); break; default: assert(0); keyword = RID_INT; break; } rest = rid2ast(r, loc, keyword, rest); if (isunsigned) rest = rid2ast(r, loc, RID_UNSIGNED, rest); return rest; } #define UNNAMED_STRUCT_PREFIX "__nesc_unnamed" void name_tag(tag_declaration tag) { /* Name unnamed structs, unions or enums */ if (!tag->name) { static long nextid = 4242; char tagname[sizeof(UNNAMED_STRUCT_PREFIX) + 20]; sprintf(tagname, UNNAMED_STRUCT_PREFIX "%ld", nextid++); tag->definition->word1 = new_word(parse_region, dummy_location, str2cstring(parse_region, tagname)); tag->name = tag->definition->word1->cstring.data; } } static type_element tag2ast(region r, location loc, tag_declaration tag, type_element rest) { tag_ref tr; name_tag(tag); tr = newkind_tag_ref(r, tag->kind, loc, new_word(r, loc, str2cstring(r, tag->name)), NULL, NULL, FALSE); tr->tdecl = tag; tr->next = CAST(node, rest); /* creating a type naming a tag that shadows another is tricky as the placement of the type affects its meaning. The current use of type2ast is for declaring temporaries. These are placed at the start of the closest enclosing block. This is correct as long as the temporary does not rely on a tag declared in the same block that shadows a tag in an enclosing scope (as the temporary would then erroneously refer to the enclosing tag). The simplest check which detects this situation is any use of a shadowed tag (which I am assuming are very rare anyway). The correct solution is that if the type of temporary x refers to tags t1...tn declared in the current block, then x should be placed just before the declaration of the latest of ti, the tag in t1...tn which was declared latest, and the declaration of x should be preceded by 'struct/union/enum ti;'. This is somewhat painful. To avoid any problems, compile with error_shadow = warn_shadow = 1 (this is what RC does) */ assert(!tag->shadowed); return CAST(type_element, tr); } static type_element typevar2ast(region r, location loc, data_declaration tvar, type_element rest) { type_element tname; /* Unlike with tags, we don't need to worry about whether the type variable is shadowed, as type variables are always replaced by their value in generated code... If we were to re-output nesC code, we could run into problems. */ tname = CAST(type_element, new_typename(r, loc, tvar)); tname->next = CAST(node, rest); return tname; } static declaration parameter2ast(region r, location loc, type t) { variable_decl vd; data_decl dd; declarator tdeclarator; type_element tmodifiers; /* Build AST for the declaration */ type2ast(r, loc, t, NULL, &tdeclarator, &tmodifiers); vd = new_variable_decl(r, loc, tdeclarator, NULL, NULL, NULL, NULL); vd->declared_type = t; dd = new_data_decl(r, loc, tmodifiers, CAST(declaration, vd)); return CAST(declaration, dd); } /* Build AST nodes such that "MODIFIERS D" represents the declaration of "T INSIDE", at location loc, allocating in region r */ void type2ast(region r, location loc, type t, declarator inside, declarator *d, type_element *modifiers) { /* XXX: De-recursify */ type_element qualifiers = qualifiers2ast(r, loc, t->qualifiers, NULL); /* A network base type uses its typedef name (it is effectively a new type, not a typedef) */ if (type_network_base_type(t)) { typename tname = new_typename(r, loc, t->basedecl); tname->next = CAST(node, qualifiers); *d = inside; *modifiers = CAST(type_element, tname); return; } switch (t->kind) { case tk_primitive: *modifiers = primitive2ast(r, loc, t->u.primitive, qualifiers); *d = inside; break; case tk_complex: *modifiers = rid2ast(r, loc, RID_COMPLEX, primitive2ast(r, loc, t->u.primitive, qualifiers)); *d = inside; break; case tk_tagged: *modifiers = tag2ast(r, loc, t->u.tag, qualifiers); *d = inside; break; case tk_void: *modifiers = rid2ast(r, loc, RID_VOID, qualifiers); *d = inside; break; case tk_pointer: if (qualifiers) inside = CAST(declarator, new_qualified_declarator(r, loc, inside, qualifiers)); inside = CAST(declarator, new_pointer_declarator(r, loc, inside)); type2ast(r, loc, t->u.pointsto, inside, d, modifiers); break; case tk_array: assert(qualifiers == NULL); inside = CAST(declarator, new_array_declarator(r, loc, inside, t->u.array.size)); type2ast(r, loc, t->u.array.arrayof, inside, d, modifiers); break; case tk_function: { declaration parms; assert(t->u.fn.fkind == tkf_c); /* XXX: not done for nesC stuff yet (not needed yet) */ /* XXX: doesn't rebuild fn qualifiers. Are we generating C here or not ? */ /* XXX: Should build environment for parameters */ if (t->u.fn.oldstyle) parms = NULL; else if (empty_typelist(t->u.fn.argtypes)) parms = parameter2ast(r, loc, void_type); else { struct typelist_element *args = t->u.fn.argtypes->first; declaration *lastparm = &parms; while (args) { *lastparm = parameter2ast(r, loc, args->t); lastparm = (declaration *)&(*lastparm)->next; args = args->next; } if (t->u.fn.varargs) { *lastparm = CAST(declaration, new_ellipsis_decl(r, loc)); lastparm = (declaration *)&(*lastparm)->next; } *lastparm = NULL; } inside = CAST(declarator, new_function_declarator(r, loc, inside, parms, NULL, NULL, NULL)); type2ast(r, loc, t->u.fn.returns, inside, d, modifiers); break; } case tk_variable: *modifiers = typevar2ast(r, loc, t->u.tdecl, qualifiers); *d = inside; break; default: assert(0); break; } } bool type_contains_pointers(type t) { field_declaration field; if (type_pointer(t)) return TRUE; if (type_array(t)) return type_contains_pointers(type_array_of(t)); if (!type_aggregate(t)) return FALSE; for (field = type_tag(t)->fieldlist; field; field = field->next) if (type_contains_pointers(field->type)) return TRUE; return FALSE; } bool type_contains_union_with_pointers(type t) { field_declaration field; if (type_array(t)) return type_contains_union_with_pointers(type_array_of(t)); if (type_union(t)) return type_contains_pointers(t); if (!type_struct(t)) return FALSE; for (field = type_tag(t)->fieldlist; field; field = field->next) if (type_contains_union_with_pointers(field->type)) return TRUE; return FALSE; } type type_default_conversion(type from) { if (type_enum(from)) from = type_tag(from)->reptype; if (type_smallerthanint(from)) { /* Traditionally, unsignedness is preserved in default promotions. */ if (flag_traditional && type_unsigned(from)) return unsigned_int_type; else return int_type; } /* Note: if we had a type of same size as int, but of lesser rank, we should be returning one of int/unsigned int here, but we don't support that kind of type */ if (flag_traditional && !flag_allow_single_precision && type_float(from)) return double_type; if (type_function(from)) return make_pointer_type(from); if (type_array(from)) return make_pointer_type(type_array_of(from)); if (type_variable(from)) { data_declaration vdecl = type_variable_decl(from); switch (vdecl->typevar_kind) { case typevar_integer: return unknown_int_type; case typevar_number: return unknown_number_type; default: break; } } return from; } /* would be called type_default_function_array_conversion in gcc 3.x */ type type_default_conversion_for_assignment(type from) { if (type_array(from) || type_function(from)) return type_default_conversion(from); else return from; } type function_call_type(function_call fcall) { type fntype = fcall->arg1->type; if (type_pointer(fntype)) fntype = type_points_to(fntype); assert(type_functional(fntype)); return fntype; } cval type_size(type t) /* Requires: type_size_cc(t) Returns: size of type t in a cval. The cval is either unknown (for types derived in some way from template arguments) or an unsigned number */ { assert(type_size_cc(t)); if (type_tagged(t)) return t->u.tag->size; if (type_array(t)) return cval_times(type_array_size_cval(t), type_size(t->u.array.arrayof)); return t->size; } largest_uint type_size_int(type t) /* Requires: type_size_cc(t) && cval_isinteger(type_size(t)) (i.e., t not variable or unknown size) Returns: size of t */ { return cval_uint_value(type_size(t)); } cval type_alignment(type t) { assert(type_has_size(t)); if (!cval_istop(t->alignment)) /* Possibly overridden alignment */ return t->alignment; if (type_tagged(t)) return t->u.tag->alignment; if (type_array(t)) return type_alignment(t->u.array.arrayof); /* We should never get here (all types have non-zero alignment) */ assert(0); return t->alignment; } /* True if the sizeof of t is a compile-time constant (known or unknown) */ bool type_size_cc(type t) { if (!type_has_size(t)) return FALSE; if (type_tagged(t)) return !cval_istop(t->u.tag->size); if (type_array(t)) return !cval_istop(type_array_size_cval(t)) && type_size_cc(t->u.array.arrayof); return TRUE; } bool type_has_size(type t) { /* Similar, but not identical to, type_incomplete */ return type_void(t) || !type_incomplete(t); } char *qualifier_name(type_quals q) { switch (q) { default: abort(); return NULL; #define Q(name, kind, tq, val) case tq: return #name; #include "qualifiers.h" #undef Q } } /* nesc types */ bool type_command(type t) { return t->kind == tk_function && t->u.fn.fkind == tkf_command; } bool type_event(type t) { return t->kind == tk_function && t->u.fn.fkind == tkf_event; } bool type_task(type t) { return t->kind == tk_function && t->u.fn.fkind == tkf_task; } bool type_generic(type t) { return t->kind == tk_function && t->u.fn.fkind == tkf_generic; } type make_command_type(type t, typelist argtypes, bool varargs) { type newt = make_function_type(t, argtypes, varargs, FALSE); newt->u.fn.fkind = tkf_command; return newt; } type make_event_type(type t, typelist argtypes, bool varargs) { type newt = make_function_type(t, argtypes, varargs, FALSE); newt->u.fn.fkind = tkf_event; return newt; } type make_task_type(type t, typelist argtypes, bool varargs) { type newt = make_function_type(t, argtypes, varargs, FALSE); newt->u.fn.fkind = tkf_task; return newt; } type make_generic_type(type t, typelist argtypes) { type newt = make_function_type(t, argtypes, FALSE, FALSE); newt->u.fn.fkind = tkf_generic; return newt; } type make_interface_type(data_declaration itype) { type nt = new_type(tk_iref); nt->u.iref = itype; /* These are not yet stored, but I'll assume they might be like pointers some day... */ /* ASSUME: all pointers are the same */ nt->size = make_type_cval(target->tptr.size); nt->alignment = make_type_cval(target->tptr.align); return nt; } bool type_interface(type t) { return t->kind == tk_iref; } data_declaration type_iref(type t) { assert(type_interface(t)); return t->u.iref; } type make_component_type(data_declaration ctype) { type nt = new_type(tk_cref); nt->u.cref = ctype; /* These are not yet stored, but I'll assume they might be like pointers some day... */ /* ASSUME: all pointers are the same */ nt->size = make_type_cval(target->tptr.size); nt->alignment = make_type_cval(target->tptr.align); return nt; } bool type_component(type t) { return t->kind == tk_cref; } data_declaration type_cref(type t) { assert(type_component(t)); return t->u.cref; } bool type_functional(type t) { return t->kind == tk_function && t->u.fn.fkind != tkf_generic; } type make_combiner_type(type t, data_declaration combiner) { type nt; if (!combiner) return t; nt = copy_type(t); nt->combiner = combiner; return nt; } data_declaration type_combiner(type t) { return t->combiner; } void set_typedef_type(data_declaration def, bool network) /* Requires: def->kind == decl_typedef Effects: Sets def's type to remember the typedef it comes from If network is true, the type becomes a network base type */ { type nt = copy_type(def->type); if (network) { nt->network = nx_base; nt->alignment = make_type_cval(1); nt->basedecl = def; } nt->typedefdecl = def; def->type = nt; } data_declaration type_typedef(type t) /* Returns: the typedef t comes from, or NULL if none */ { return t->typedefdecl; } data_declaration type_networkdef(type t) /* Requires: type_network_base_type(t) Returns: the network base type definition for t */ { assert(type_network_base_type(t)); return t->basedecl; } bool type_network_base_type(type t) { return t->network == nx_base; } type type_network_platform_type(type t) /* Requires: type_network_base_type(t) Returns: t's non-network base type */ { return type_networkdef(t)->basetype; } /* Type variables */ type make_variable_type(data_declaration tdecl) /* Requires: tdecl->kind == decl_typedef. */ { type nt = new_type(tk_variable); nt->u.tdecl = tdecl; /* Type variables have unknown size and alignment */ nt->size = nt->alignment = cval_unknown_number; return nt; } bool type_variable(type t) { return t->kind == tk_variable; } data_declaration type_variable_decl(type t) { assert(type_variable(t)); return t->u.tdecl; } typelist instantiate_typelist(typelist old) /* Returns: An instantiated copy of typelist old, allocated in the same region */ { typelist new = new_typelist(old->r); struct typelist_element *scan = old->first; while (scan) { typelist_append(new, instantiate_type(scan->t)); scan = scan->next; } return new; } type instantiate_type(type t) /* Effects: Instantiate a type with type variables based on the instantiation of the variables and tag declarations. These are found in type_variable_decl(vartype)->instantiation->type for variables type_tag(tagtype)->instantiation for tags Returns: The instantiated type */ { type newt = NULL; /* Instantiating an unknown type is not possible (we don't know what type to produce) */ assert(!type_unknown(t)); switch (t->kind) { case tk_tagged: if (t->u.tag->instantiation) newt = make_tagged_type(t->u.tag->instantiation); break; case tk_pointer: newt = make_pointer_type(instantiate_type(t->u.pointsto)); break; case tk_function: { type ret = instantiate_type(t->u.fn.returns); typelist args = NULL; if (t->u.fn.argtypes) args = instantiate_typelist(t->u.fn.argtypes); newt = make_function_type(ret, args, t->u.fn.varargs, t->u.fn.oldstyle); newt->u.fn.fkind = t->u.fn.fkind; break; } case tk_array: newt = make_array_type(instantiate_type(t->u.array.arrayof), !t->u.array.size ? NULL : CAST(expression, t->u.array.size->instantiation)); break; case tk_iref: if (t->u.iref->instantiation) newt = make_interface_type(t->u.iref->instantiation); break; case tk_cref: if (t->u.cref->instantiation) newt = make_component_type(t->u.cref->instantiation); break; case tk_variable: if (t->u.tdecl->instantiation) newt = t->u.tdecl->instantiation->type; break; default: break; } if (newt) return make_qualified_type(newt, t->qualifiers); else return t; } static char *primname[] = { NULL, /* error */ "int16_t", "uint16_t", "int32_t", "uint32_t", "int64_t", "uint64_t", "char", "signed char", "unsigned char", "short", "unsigned short", "int", "unsigned int", "long", "unsigned long", "long long", "unsigned long long", "unknown int", "float", "double", "long double", "unknown number" }; static const char *rconcat(region r, const char *s1, const char *s2) { int l = strlen(s1) + strlen(s2) + 1; char *s = rstralloc(r, l); strcpy(s, s1); strcat(s, s2); return s; } static const char *add_qualifiers(region r, type_quals qs, const char *to) { type_quals q; for (q = 1; q < last_qualifier; q <<= 1) if (qs & q) { to = rconcat(r, " ", to); to = rconcat(r, qualifier_name(q), to); } return to; } static const char *add_parens(region r, const char *to) { to = rconcat(r, "(", to); to = rconcat(r, to, ")"); return to; } static void split_type_name(region r, type t, const char **prefix, const char **decls, bool decls_is_star) { const char *basic; switch (t->kind) { case tk_primitive: basic = primname[t->u.primitive]; basic = add_qualifiers(r, t->qualifiers, basic); break; case tk_complex: basic = rconcat(r, "complex ", primname[t->u.primitive]); basic = add_qualifiers(r, t->qualifiers, basic); break; case tk_void: basic = "void"; basic = add_qualifiers(r, t->qualifiers, basic); break; case tk_pointer: *decls = add_qualifiers(r, t->qualifiers, *decls); *decls = rconcat(r, "*", *decls); split_type_name(r, t->u.pointsto, &basic, decls, TRUE); break; case tk_array: /* can't have qualifiers here - see make_qualified_type */ if (decls_is_star) *decls = add_parens(r, *decls); *decls = rconcat(r, *decls, "[]"); split_type_name(r, t->u.array.arrayof, &basic, decls, FALSE); break; case tk_function: { const char *args= ""; if (!t->u.fn.oldstyle) { typelist_scanner scanargs; type argt; bool first = TRUE; typelist_scan(t->u.fn.argtypes, &scanargs); while ((argt = typelist_next(&scanargs))) { if (!first) args = rconcat(r, args, ", "); args = rconcat(r, args, type_name(r, argt)); first = FALSE; } if (t->u.fn.varargs) args = rconcat(r, args, ", ..."); } if (decls_is_star) *decls = add_parens(r, *decls); if (t->qualifiers) /* This isn't legal C syntax, but seems the reasonable rep */ *decls = add_parens(r, add_qualifiers(r, t->qualifiers, *decls)); *decls = rconcat(r, *decls, add_parens(r, args)); split_type_name(r, t->u.fn.returns, &basic, decls, FALSE); break; } case tk_tagged: { tag_declaration tdecl = t->u.tag; basic = rconcat(r, tagkind_name(tdecl->kind), " "); if (tdecl->container) { basic = rconcat(r, basic, tdecl->container->name); basic = rconcat(r, basic, "."); } if (tdecl->name) basic = rconcat(r, basic, tdecl->name); else basic = rconcat(r, basic, "/*anon*/"); basic = add_qualifiers(r, t->qualifiers, basic); break; } default: /* for bugs, tk_error tk_iref tk_cref */ basic = "error"; break; } *prefix = basic; } const char *type_name(region r, type t) { const char *prefix, *decls; decls = ""; split_type_name(r, t, &prefix, &decls, FALSE); if (decls[0]) return rconcat(r, prefix, rconcat(r, " ", decls)); else return prefix; } static void nxml_typedef(data_declaration tdef) { xindent(); xstartline(); xml_tag("typename"); nxml_ddecl_ref(tdef); xml_pop(); xnewline(); xunindent(); } void nxml_type(type t) { type_quals quals = type_qualifiers(t) & (const_qualifier | volatile_qualifier | restrict_qualifier); data_declaration tdef = type_typedef(t); xstartline(); if (quals) { indentedtag_start("type-qualified"); #define Q(name, kind, tq, val) \ if (quals & val) xml_attr_noval(# name); #include "qualifiers.h" #undef Q xml_tag_end(); xnewline(); if (tdef) { nxml_typedef(tdef); tdef = NULL; } } switch (t->kind) { case tk_primitive: if (t->u.primitive < tp_first_floating) xml_tag_start("type-int"); else xml_tag_start("type-float"); xml_attr("cname", primname[t->u.primitive]); xml_attr_bool("unsigned", type_unsigned(t)); break; case tk_complex: if (t->u.primitive < tp_first_floating) { xml_tag_start("type-complex-int"); xml_attr_bool("unsigned", type_unsigned(primitive_types[t->u.primitive])); } else xml_tag_start("type-complex-float"); xml_attr("cname", primname[t->u.primitive]); break; case tk_void: xml_tag_start("type-void"); break; case tk_pointer: xml_tag_start("type-pointer"); break; case tk_array: xml_tag_start("type-array"); xml_attr_cval("elements", type_array_size_cval(t)); break; case tk_function: xml_tag_start("type-function"); xml_attr_bool("oldstyle", t->u.fn.oldstyle); xml_attr_bool("varargs", t->u.fn.varargs); break; case tk_tagged: xml_tag_start("type-tag"); break; case tk_iref: xml_tag_start("type-interface"); break; case tk_cref: xml_tag_start("type-component"); break; case tk_variable: xml_tag_start("type-var"); break; default: /* for bugs */ xml_tag_start("type-error"); break; } xml_attr_cval("size", type_size_cc(t) ? type_size(t) : cval_top); xml_attr_cval("alignment", type_has_size(t) ? type_alignment(t) : cval_top); if (t->network == nx_base) xml_attr("network", t->basedecl->name); switch (t->kind) { default: xml_tag_end(); break; case tk_pointer: xml_tag_end(); xnewline(); xindent(); nxml_type(t->u.pointsto); xunindent(); break; case tk_array: xml_tag_end(); xnewline(); xindent(); nxml_type(t->u.array.arrayof); xunindent(); break; case tk_function: xml_tag_end(); xnewline(); xindent(); nxml_type(t->u.fn.returns); if (!t->u.fn.oldstyle) nxml_typelist("function-parameters", t->u.fn.argtypes); xunindent(); break; case tk_tagged: xml_tag_end(); nxml_tdecl_ref(t->u.tag); break; case tk_iref: xml_tag_end(); nxml_ddecl_ref(t->u.iref); break; case tk_cref: xml_tag_end(); nxml_ddecl_ref(t->u.cref); break; case tk_variable: xml_tag_end(); nxml_ddecl_ref(t->u.tdecl); break; } if (tdef) nxml_typedef(tdef); xml_pop(); xnewline(); if (quals) indentedtag_pop(); } void nxml_typelist(const char *name, typelist types) { typelist_scanner scantypes; type t; indentedtag(name); typelist_scan(types, &scantypes); while ((t = typelist_next(&scantypes))) nxml_type(t); indentedtag_pop(); } enum { TYPE_HASH_PRIMITIVE = 1, TYPE_HASH_COMPLEX = TYPE_HASH_PRIMITIVE + tp_last, TYPE_HASH_ERROR = TYPE_HASH_COMPLEX + tp_last, TYPE_HASH_VOID, TYPE_HASH_FUNCTION }; /* Return a hash value to distinguish types. Note that we are much less careful here than in type_equal, since hash collisions only effect performance. */ unsigned long type_hash(type t) { switch (t->kind) { case tk_error: return TYPE_HASH_ERROR; case tk_primitive: return TYPE_HASH_PRIMITIVE + t->u.primitive; case tk_complex: return TYPE_HASH_COMPLEX + t->u.primitive; case tk_void: return TYPE_HASH_VOID; case tk_tagged: return hash_ptr(t->u.tag); case tk_pointer: return (type_hash(t->u.pointsto) << 1) ^ 0x51353157; case tk_function: return TYPE_HASH_FUNCTION; case tk_array: return (type_hash(t->u.array.arrayof) << 1) ^ 0x40142453 ; default: assert(0); return 0; } } /* True if an assignment to type child could modify a value of type parent according to the ANSI C rules. Note: child cannot be an array type (assignments to arrays do not exist in C) */ bool type_contains(type parent, type child) { assert(!type_array(child)); /* Short-circuit easy case */ if (parent == child) return TRUE; /* Char writes can be used on any value */ if (type_char(child)) return TRUE; switch (parent->kind) { default: /* for primitive, void, function */ return type_equal_unqualified(parent, child); case tk_complex: /* true if child is primitive or complex and same base primitive type */ return (child->kind == tk_primitive || child->kind == tk_complex) && parent->u.primitive == child->u.primitive; case tk_tagged: { /* Same tags -> yes. Otherwise, for structs, unions: true if parent has a field type that contains child */ field_declaration field; if (child->kind == tk_tagged && parent->u.tag == child->u.tag) return TRUE; if (parent->u.tag->kind == kind_enum_ref) return FALSE; for (field = parent->u.tag->fieldlist; field; field = field->next) if (type_contains(field->type, child)) return TRUE; return FALSE; } case tk_pointer: /* base types must match, but can have different qualifiers (this is different from type_equal) */ return child->kind == tk_pointer && type_equal_unqualified(parent->u.pointsto, child->u.pointsto); case tk_array: { type base_parent = parent; while (base_parent->kind == tk_array) base_parent = base_parent->u.array.arrayof; return type_contains(base_parent, child); } } } bool type_charstar(type t) { return type_pointer(t) && type_char(type_points_to(t)); } bool type_chararray(type t, bool no_size_allowed) { return t == char_array_type || /* check for easy, common case first */ (type_array(t) && type_char(type_array_of(t)) && !(no_size_allowed && type_array_size(t))); } bool type_wchararray(type t, bool no_size_allowed) { return t == wchar_array_type || /* check for easy, common case first */ (type_array(t) && type_equal(wchar_type, type_array_of(t)) && !(no_size_allowed && type_array_size(t))); } /* See gcc's machmode.def for the source of this mode data. This is a very simplified form. */ typedef enum { m_int, m_float, m_cint, m_cfloat } machmode_t; type type_for_mode(const char *mode, bool isunsigned) /* Returns: type (unsigned if 'unsigned' is TRUE) corresponding to the specified mode */ { int i; static struct { char *name; size_t s; machmode_t m; } modes[] = { { "byte", 1, m_int }, { "word", 0, m_int }, { "pointer", 0, m_int }, { "QI", 1, m_int }, { "HI", 2, m_int }, { "SI", 4, m_int }, { "DI", 8, m_int }, { "TI", 16, m_int }, { "OI", 32, m_int }, { "QF", 1, m_float }, { "HF", 2, m_float }, { "TQF", 3, m_float }, { "SF", 4, m_float }, { "DF", 8, m_float }, { "XF", 12, m_float }, { "TF", 16, m_float }, { "QC", 1, m_cfloat }, { "HC", 2, m_cfloat }, { "SC", 4, m_cfloat }, { "DC", 8, m_cfloat }, { "XC", 12, m_cfloat }, { "TC", 16, m_cfloat }, { "CQI", 1, m_cint }, { "CHI", 2, m_cint }, { "CSI", 4, m_cint, }, { "CDI", 8, m_int }, { "CTI", 16, m_cint }, { "COI", 32, m_cint } }; modes[1].s = target->word_size; modes[2].s = target->tptr.size; for (i = 0; i < sizeof modes / sizeof *modes; i++) if (is_attr_name(mode, modes[i].name)) { type t; switch (modes[i].m) { case m_int: case m_cint: t = lookup_primitive(tp_error, modes[i].s, 0, isunsigned); break; case m_float: case m_cfloat: t = lookup_float(modes[i].s); break; } if (t->u.primitive == tp_error) return NULL; if (modes[i].m == m_cint || modes[i].m == m_cfloat) t = make_complex_type(t); return t; } return NULL; } nescc-1.3.4/src/types.h000066400000000000000000000240701177770303300147310ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from RC and the GNU C Compiler. It is thus Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef TYPES_H #define TYPES_H /* Type sizes, alignments and offsets are represented as cvals, and can be one of: - top: variable-sized types - unknown: derived from a template argument - an unsigned number (preferably created with make_type_cval) (note: must be a cval_uint!) These numbers represent bytes, except in field offsets which use bits */ #include "cval.h" #include "decls.h" typedef enum { no_qualifiers = 0, transparent_qualifier = 1, #define Q(name, kind, qual, val) qual = val, #include "qualifiers.h" #undef Q last_qualifier } type_quals; extern type float_type, double_type, long_double_type, int_type, unsigned_int_type, long_type, unsigned_long_type, long_long_type, unsigned_long_long_type, short_type, unsigned_short_type, char_type, char_array_type, wchar_type, wchar_array_type, unsigned_char_type, signed_char_type, void_type, ptr_void_type, size_t_type, ptrdiff_t_type, intptr_type, unknown_int_type, unknown_number_type, const_ptr_void_type; extern type error_type; void init_types(void); void set_typedef_type(data_declaration def, bool network); /* Requires: def->kind == decl_typedef Effects: Sets def's type to remember the typedef it comes from If network is true, the type becomes a network base type */ data_declaration type_typedef(type t); /* Returns: the typedef t comes from, or NULL if none */ data_declaration type_networkdef(type t); /* Requires: type_network_base_type(t) Returns: the network base type definition for t */ /* Build types */ /* Return the 'complex t' version of basic type t (one of the integral or floating-point types) */ type make_complex_type(type t); /* Return the base type of complex type t (one of the integral or floating-point types) */ type make_base_type(type t); /* Return the type t with it's qualifiers set to qualifiers (old qualifiers are ignored). This is illegal for array types */ type make_qualified_type(type t, type_quals qualifiers); type qualify_type1(type t, type t1); type qualify_type2(type t, type t1, type t2); /* Return 't' modified to have alignment 'new_alignment' */ type align_type(type t, cval new_alignment); /* Return TRUE if t's alignment was changed with align_type */ bool type_realigned(type t); /* Return type 'pointer to t' (unqualified) */ type make_pointer_type(type t); /* Return type 'array [size] of t'. size is optional */ type make_array_type(type t, expression size); /* Return type 'function with argument types argtypes returning t'. If oldstyle is true, this is an oldstyle function type and argtypes is NULL */ type make_function_type(type t, typelist argtypes, bool varargs, bool oldstyle); type build_function_type(region r, type returns, ...); /* Return the tagged type whose declaration is d */ type make_tagged_type(tag_declaration d); typelist new_typelist(region r); void typelist_append(typelist l, type t); bool empty_typelist(typelist l); /* Scanning */ typedef struct typelist_element *typelist_scanner; void typelist_scan(typelist tl, typelist_scanner *scanner); type typelist_next(typelist_scanner *scanner); /* Size and alignment */ cval type_size(type t); /* Requires: type_size_cc(t) */ cval type_alignment(type t); largest_uint type_size_int(type t); /* Requires: type_size_cc(t) && cval_isinteger(type_size(t)) (i.e., t not variable or unknown size) Returns: size of t */ /* True if t has a size (void or not incomplete) */ bool type_has_size(type t); /* True if the sizeof of t is a compile-time constant */ bool type_size_cc(type t); /* Note: type_size_cc => type_has_size */ type common_type(type t1, type t2); bool type_equal(type t1, type t2); bool type_equal_unqualified(type t1, type t2); bool type_compatible(type t1, type t2); bool type_compatible_unqualified(type t1, type t2); /* Return TRUE if T is not affected by default promotions. */ bool type_self_promoting(type t); bool type_incomplete(type t); /* Return name of qualifier q (must not be a qualifier set) */ char *qualifier_name(type_quals q); type_quals type_qualifiers(type t); #define Q(name, kind, tq, val) bool type_ ## name(type t); #include "qualifiers.h" #undef Q bool type_transparent(type t); bool type_readonly(type t); bool type_plain_char(type t); bool type_signed_char(type t); bool type_unsigned_char(type t); bool type_short(type t); bool type_unsigned_short(type t); bool type_int(type t); bool type_unsigned_int(type t); bool type_long(type t); bool type_unsigned_long(type t); bool type_long_long(type t); bool type_unsigned_long_long(type t); bool type_unknown_int(type t); bool type_long_double(type t); bool type_unknown_number(type t); bool type_unknown(type t); /* unknown_int or unknown_number */ bool type_tagged(type t); bool type_integral(type t); /* Does not include enum's */ bool type_floating(type t); bool type_complex(type t); bool type_float(type t); bool type_double(type t); bool type_void(type t); bool type_char(type t); bool type_function(type t); bool type_array(type t); bool type_pointer(type t); bool type_enum(type t); bool type_struct(type t); bool type_attribute(type t); /* For internal use for @attributes */ bool type_union(type t); bool type_integer(type t); /* Does include enum's */ bool type_unsigned(type t); bool type_smallerthanint(type t); bool type_real(type t); bool type_arithmetic(type t); bool type_scalar(type t); bool type_aggregate(type t); /* struct or union */ type make_unsigned_type(type t); type type_function_return_type(type t); typelist type_function_arguments(type t); bool type_function_varargs(type t); bool type_function_oldstyle(type t); /* Return TRUE if function type FNTYPE specifies a fixed number of parameters and none of their types is affected by default promotions. */ bool self_promoting_args(type fntype); type type_points_to(type t); type type_array_of(type t); type type_array_of_base(type t); expression type_array_size(type t); cval type_array_size_cval(type t); /* Returns: number of elements in array type t if known, cval_top otherwise */ tag_declaration type_tag(type t); type type_base(type t); /* Build AST nodes such that "MODIFIERS D" represents the declaration of "T INSIDE", at location loc, allocating in region r */ void type2ast(region r, location loc, type t, declarator inside, declarator *d, type_element *modifiers); bool type_contains_pointers(type t); bool type_contains_cross_pointers(type t); bool type_contains_qualified_pointers(type t); /* True if any sameregion/traditional ptrs */ bool type_contains_union_with_pointers(type t); type type_default_conversion(type from); type type_default_conversion_for_assignment(type from); type function_call_type(function_call fcall); void name_tag(tag_declaration tag); /* Return the integral type of size 'size', unsigned if 'isunsigned' is true */ type type_for_size(cval size, bool isunsigned); type type_for_cval(cval c, bool isunsigned); /* nesc type extensions */ type make_interface_type(data_declaration itype); bool type_interface(type t); data_declaration type_iref(type t); type make_component_type(data_declaration ctype); bool type_component(type t); data_declaration type_cref(type t); /* Similar to functions, but different to avoid surprising behaviour... */ bool type_command(type t); bool type_event(type t); bool type_task(type t); bool type_functional(type t); /* all of the above, and type_function */ bool type_generic(type t); /* for generic interfaces */ type make_command_type(type t, typelist argtypes, bool varargs); type make_event_type(type t, typelist argtypes, bool varargs); type make_task_type(type t, typelist argtypes, bool varargs); type make_generic_type(type t, typelist argtypes); type make_combiner_type(type t, data_declaration combiner); data_declaration type_combiner(type t); bool type_network_base_type(type t); bool type_network(type t); type type_network_platform_type(type t); /* Requires: type_network_base_type(t) Returns: A non-network type with the same size and signedness as t Note that such a type is platform-dependent */ /* Type variables */ type make_variable_type(data_declaration tdecl); /* Requires: tdecl->kind == decl_typedef. */ bool type_variable(type t); data_declaration type_variable_decl(type t); type instantiate_type(type t); /* Effects: Instantiate a type with type variables based on the instantiation of the variables and tag declarations. These are found in type_variable_decl(vartype)->instantiation->type for variables type_tag(tagtype)->instantiation for tags Returns: The instantiated type */ typelist instantiate_typelist(typelist old); /* Returns: An instantiated copy of typelist old, allocated in the same region */ const char *type_name(region r, type t); unsigned long type_hash(type t); bool type_contains(type parent, type child); bool type_charstar(type t); bool type_chararray(type t, bool no_size_allowed); bool type_wchararray(type t, bool no_size_allowed); void nxml_type(type t); /* Effects: Outputs XML representation of type t. */ void nxml_typelist(const char *name, typelist types); /* Effects: Outputs XML representartion of typelist types wrapped in tag 'name' */ type type_for_mode(const char *mode, bool isunsigned); /* Returns: type (unsigned if 'unsigned' is TRUE) corresponding to the specified mode */ #endif nescc-1.3.4/src/unparse.c000066400000000000000000001634401177770303300152420ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include "parser.h" #include "unparse.h" #include "semantics.h" #include "constants.h" #include "AST_utils.h" #include "errors.h" #include "nesc-semantics.h" #include "nesc-magic.h" #include "nesc-network.h" /* Set this to 1 to avoid warnings from gcc about paren use with -Wparentheses */ #define CONSERVATIVE_PARENS 1 /* Pick an indentation amount */ #define INDENT 2 /* The output file for unparsing */ static FILE *of; static FILE *symf; /* for symbol info */ static bool no_line_directives; static int indent_level; static struct location output_loc; static location fixed_location; static bool at_line_start; /* separator used between module name and function name */ static char *function_separator = "$"; /* modify behavior of low-level functions when printing docs */ static bool documentation_mode; /* List of lines to output at start of file */ static dd_list unparse_header; typedef struct prt_closure { void (*fn)(struct prt_closure *closure); const char *name; struct prt_closure *parent; } *prt_closure; void indent(void) { indent_level += INDENT; } void unindent(void) { indent_level -= INDENT; } static void output_indentation(void) { int i; for (i = 0; i < indent_level; i++) putc(' ', of); } void newline(void) { putc('\n', of); at_line_start = TRUE; if (fixed_location) fprintf(of, "#line %lu\n", fixed_location->lineno); else output_loc.lineno++; } void startline(void) { if (!at_line_start) newline(); } void startline_noindent(void) { startline(); at_line_start = FALSE; } static void output_indent_if_needed(void) { if (at_line_start) { at_line_start = FALSE; output_indentation(); } } static void voutput(char *format, va_list args) { output_indent_if_needed(); vfprintf(of, format, args); } void output(char *format, ...) { va_list args; va_start(args, format); voutput(format, args); va_end(args); } void outputln(char *format, ...) { va_list args; va_start(args, format); voutput(format, args); va_end(args); newline(); } void output_quoted(const char *s) { /* Output a string which may contain newlines, \ and " */ while (*s) { if (*s == '\n') /* don't confuse the line numbers */ fputs("\\n", of); else { if (*s == '\\' || *s == '"') putc('\\', of); putc(*s, of); } s++; } } void output_quoted_cs(cstring s) { /* Output a string which may contain newlines, \ and " */ int i; for (i = 0; i < s.length; i++) { char c = s.data[i]; if (c == '\n') /* don't confuse the line numbers */ fputs("\\n", of); else if ((unsigned char)c == c && isprint(c)) { if (c == '\\' || c == '"') putc('\\', of); putc(c, of); } else /* The "" at the end avoids confusion if the next character is '0'-'9', 'a'-'f' or 'A'-'F' */ output("\\x%lx\"\"", (unsigned long)c); } } /** * copy a file to the output stream. **/ void copy_file_to_output(char *filename) { char buf[1024 * 4]; FILE *infile = fopen(filename, "r"); size_t nread; size_t nwritten; assert(infile); while( !feof(infile) ) { nread = fread(buf, 1, sizeof(buf), infile); assert( !ferror(infile) ); if(nread > 0) { nwritten = fwrite(buf, 1, nread, of); assert( !ferror(of) ); assert(nwritten == nread); } } fclose(infile); } #define STRIP_PREFIX "__nesc_keyword_" #define STRIP_PREFIX_LEN (sizeof(STRIP_PREFIX) - 1) void output_stripped_cstring(cstring s) { output_indent_if_needed(); if (strncmp(s.data, STRIP_PREFIX, STRIP_PREFIX_LEN) == 0) fwrite(s.data + STRIP_PREFIX_LEN, s.length - STRIP_PREFIX_LEN, 1, of); else fwrite(s.data, s.length, 1, of); } void output_cstring(cstring s) { output_indent_if_needed(); fwrite(s.data, s.length, 1, of); } void output_string(const char *s) { output_indent_if_needed(); fwrite(s, strlen(s), 1, of); } void print_stripped_string(FILE *f, const char *s) { if (strncmp(s, STRIP_PREFIX, STRIP_PREFIX_LEN) == 0) fputs(s + STRIP_PREFIX_LEN, f); else fputs(s, f); } void output_stripped_string(const char *s) { output_indent_if_needed(); print_stripped_string(of, s); } void output_stripped_string_dollar(const char *s) { output_stripped_string(s); output_string(function_separator); } static void output_line_directive(location l, bool include_filename) { if (fixed_location) return; startline_noindent(); if (include_filename) { output("# %lu \"", l->lineno); output_quoted(l->filename); outputln("\"%s", l->in_system_header ? " 3" : ""); } else outputln("#line %lu", l->lineno); output_loc = *l; } void set_location(location l) { /* Ignore dummy locations */ if (l->filename == dummy_location->filename || no_line_directives) return; if ((l->filename != output_loc.filename && strcmp(l->filename, output_loc.filename)) || l->in_system_header != output_loc.in_system_header) output_line_directive(l, TRUE); else if (output_loc.lineno != l->lineno) { /* Just send some newlines for small changes */ if (!fixed_location && output_loc.lineno < l->lineno && output_loc.lineno + 10 >= l->lineno) { while (output_loc.lineno != l->lineno) newline(); } else output_line_directive(l, FALSE); } } void set_fixed_location(location l) { assert(l->filename != dummy_location->filename); set_location(l); fixed_location = l; } void clear_fixed_location(void) { fixed_location = NULL; } struct location output_location(void) { return output_loc; } static void output_complex(known_cst c) { assert(0); } void output_constant(known_cst c) /* Requires: (constant_integral(c) || constant_float(c)) && type_arithmetic(c->type) or c denotes a string constant && type_chararray(c->type, FALSE) Effects: prints a parsable representable of c to f */ { type t = c->type; if (type_complex(t)) { output_complex(c); return; } if (type_floating(t)) { /* XXX: hacky version */ output("%.20Le", constant_float_value(c)); } else if (type_chararray(t, FALSE)) { data_declaration ddecl = cval_ddecl(c->cval); assert(ddecl && ddecl->kind == decl_magic_string); output("\""); /* FIXME we ignore wide char issues, just outputting the raw bytes - this should be ok for now as we don't actually allow wide-char strings as arguments to generics anyway */ output_quoted_cs(ddecl->schars); output("\""); } else { assert(type_integral(t)); if (type_unsigned(t)) output("%llu", constant_uint_value(c)); else output("%lld", constant_sint_value(c)); if (type_size_int(t) <= type_size_int(int_type)) { if (type_unsigned(t)) output("U"); } else if (type_long(t)) output("L"); else if (type_unsigned_long(t)) output("UL"); else if (type_long_long(t)) output("LL"); else if (type_unsigned_long_long(t)) output("ULL"); else assert(0); } } void prt_toplevel_declarations(declaration dlist); void prt_toplevel_declaration(declaration d); void prt_asm_decl(asm_decl d); void prt_extension_decl(extension_decl d); void prt_data_decl(data_decl d); void prt_ellipsis_decl(ellipsis_decl d); void prt_function_decl(function_decl d); void prt_variable_decl(type_element modifier, variable_decl d, psd_options options); void prt_interesting_elements(type_element elements, psd_options options); void prt_type_elements(type_element elements, psd_options options); bool prt_type_element(type_element em, psd_options options); void prt_attribute_elements(type_element elements); bool prt_attribute_element(type_element em); void prt_typename(typename tname, psd_options options); void prt_typeof_expr(typeof_expr texpr); void prt_typeof_type(typeof_type ttype); void prt_gcc_attribute(gcc_attribute a); void prt_target_attribute(target_attribute a); void prt_nesc_attribute(nesc_attribute a); void prt_rid(rid r, psd_options options); void prt_qualifier(qualifier q); void prt_tag_ref(tag_ref sr, psd_options options); void prt_fields(declaration flist); void prt_enumerators(declaration elist, tag_declaration ddecl); void prt_field_declaration(declaration d); void prt_field_extension_decl(extension_decl d); void prt_field_data_decl(data_decl d); void prt_field_decl(field_decl fd); void prt_enumerator(enumerator ed, tag_declaration ddecl); void prt_asttype(asttype t); void prt_word(word w); void prt_expressions(expression elist, bool isfirst); void prt_expression(expression e, int context_priority); void prt_comma(comma e, int context_priority); void prt_sizeof_type(sizeof_type e, int context_priority); void prt_alignof_type(alignof_type e, int context_priority); void prt_label_address(label_address e, int context_priority); void prt_cast(cast e, int context_priority); void prt_cast_list(cast_list e, int context_priority); void prt_conditional(conditional e, int context_priority); void prt_identifier(identifier e, int context_priority); void prt_compound_expr(compound_expr e, int context_priority); void prt_function_call(function_call e, int context_priority); void prt_generic_call(generic_call e, int context_priority); void prt_array_ref(array_ref e, int context_priority); void prt_interface_deref(interface_deref e, int context_priority); void prt_field_ref(field_ref e, int context_priority); void prt_unary(unary e, int context_priority); void prt_binary(binary e, int context_priority); void prt_init_list(init_list e, int context_priority); void prt_init_specific(init_specific e, int context_priority); void prt_lexical_cst(lexical_cst e, int context_priority); void prt_string(string e, int context_priority); void prt_parameter_declarations(declaration dlist); void prt_parameter_declaration(declaration d); void prt_statement(statement s); void prt_compound_stmt(compound_stmt s, bool trusted); void prt_compound_declarations(declaration dlist); void prt_compound_declaration(declaration d); void prt_asm_stmt(asm_stmt s); void prt_asm_stmt_plain(asm_stmt s); void prt_asm_operands(asm_operand olist); void prt_asm_operand(asm_operand o); void prt_if_stmt(if_stmt s); void prt_labeled_stmt(labeled_stmt s); void prt_expression_stmt(expression_stmt s); void prt_while_stmt(while_stmt s); void prt_dowhile_stmt(while_stmt s); void prt_switch_stmt(switch_stmt s); void prt_for_stmt(for_stmt s); void prt_break_stmt(break_stmt s); void prt_continue_stmt(continue_stmt s); void prt_return_stmt(return_stmt s); void prt_goto_stmt(goto_stmt s); void prt_computed_goto_stmt(computed_goto_stmt s); void prt_empty_stmt(empty_stmt s); void prt_atomic_stmt(atomic_stmt s); void prt_label(label l); void prt_id_label(id_label l); void prt_case_label(case_label l); void prt_default_label(default_label l); void prt_regionof(expression e); region unparse_region; void unparse_start(FILE *to, FILE *symbols) { dd_list_pos header_line; of = to; symf = symbols; output_loc = *dummy_location; at_line_start = TRUE; no_line_directives = FALSE; documentation_mode = FALSE; indent_level = 0; unparse_region = newregion(); if (unparse_header) dd_scan (header_line, unparse_header) { output_string(DD_GET(const char *, header_line)); newline(); } } void unparse_end(void) deletes { deleteregion_ptr(&unparse_region); } void unparse(FILE *to, declaration program) deletes { unparse_start(to, NULL); prt_toplevel_declarations(program); unparse_end(); } void unparse_prefix(const char *line) { if (!unparse_header) unparse_header = dd_new_list(permanent); dd_add_last(permanent, unparse_header, (char *)line); } void enable_line_directives(void) { if (no_line_directives) { no_line_directives = FALSE; /* Force #line on next output of some location */ output_loc = *dummy_location; } } void disable_line_directives(void) { no_line_directives = TRUE; } void set_function_separator(char *sep) { function_separator = sep; } const char *get_function_separator(void) { return function_separator; } FILE *set_unparse_outfile(FILE *newout) { FILE *temp = of; of = newout; return temp; } void enable_documentation_mode(void) { documentation_mode = TRUE; } void disable_documentation_mode(void) { documentation_mode = FALSE; } void prt_toplevel_declarations(declaration dlist) { declaration d; scan_declaration (d, dlist) prt_toplevel_declaration(d); } #define PRTCASE(type, x) case kind_ ## type: prt_ ## type(CAST(type, (x))); return void prt_toplevel_declaration(declaration d) { startline(); switch (d->kind) { PRTCASE(asm_decl, d); PRTCASE(data_decl, d); PRTCASE(function_decl, d); PRTCASE(extension_decl, d); case kind_rp_interface: return; case kind_component_ref: return; case kind_eq_connection: return; case kind_rp_connection: return; default: assert(0); break; } } /* Invariant: all declarations end with ; */ void prt_asm_decl(asm_decl d) { prt_asm_stmt(d->asm_stmt); } void prt_extension_decl(extension_decl d) { set_location(d->location); output("__extension__ "); prt_toplevel_declaration(d->decl); } void prt_ellipsis_decl(ellipsis_decl d) { set_location(d->location); output("..."); } static void prt_prefix(location loc, data_declaration ddecl, type_element modifiers) { bool pinline = FALSE, pstatic = FALSE; type_element em; set_location(loc); /* Hack to add static and inline where necessary */ if (ddecl && ddecl->kind == decl_function && !ddecl->isexterninline && !ddecl->spontaneous && ddecl->definition) { if (ddecl->ftype != function_static) { output("static "); pstatic = TRUE; } if (ddecl->makeinline && flag_no_inline < 2) { output("inline "); pinline = TRUE; } } scan_type_element (em, modifiers) if (is_rid(em)) { rid r = CAST(rid, em); /* Filter-out rids that should not be printed by calling continue */ switch (r->id) { default: continue; case RID_EXTERN: case RID_STATIC: if (pstatic) continue; break; case RID_INLINE: if (pinline) continue; break; case RID_REGISTER: case RID_TYPEDEF: break; } set_location(r->location); output("%s ", rid_name(r)); } } void prt_symbol_name(FILE *f, data_declaration ddecl) { if (!ddecl->Cname) { if (ddecl->container) { print_stripped_string(f, ddecl->container->name); fputs(function_separator, f); } if (ddecl->kind == decl_function && ddecl->interface) { print_stripped_string(f, ddecl->interface->name); fputs(function_separator, f); } if (!ddecl->defined && ddecl_is_command_or_event(ddecl)) fprintf(f, "default%s", function_separator); } print_stripped_string(f, ddecl->name); } void prt_attribute_for(data_declaration ddecl) { output("__attribute__((section(\".nesc."); prt_symbol_name(of, ddecl); output("\"))) "); } void prt_symbol_info(data_declaration ddecl) { if (!ddecl->printed) { ddecl->printed = TRUE; prt_symbol_name(symf, ddecl); if (ddecl->kind == decl_function) { if (ddecl->makeinline || ddecl->isinline || ddecl->isexterninline) fprintf(symf, " FNINLINE\n"); else fprintf(symf, " FN\n"); } else { assert(ddecl->kind == decl_variable); if (ddecl->initialiser) fprintf(symf, " DATA\n"); else fprintf(symf, " BSS\n"); } } } void prt_diff_info(data_declaration ddecl) { if (symf && ddecl && ddecl->needsmemory) { prt_attribute_for(ddecl); prt_symbol_info(ddecl); } } void prt_data_decl(data_decl d) { declaration vd; psd_options opts = 0; scan_declaration (vd, d->decls) { variable_decl vdd = CAST(variable_decl, vd); data_declaration vdecl = vdd->ddecl; psd_options vopts = opts; if (vdecl) /* because build_declaration does not make a data_declaration */ { /* Ignore unused non-local declarations (local ones might have an initialiser which must still be executed) */ if (((vdecl->kind == decl_function || vdecl->kind == decl_variable) && !vdecl->isused && !vdecl->islocal)) continue; if (use_nido && is_module_local_static(vdecl)) continue; if (prt_network_typedef(d, vdd)) vopts |= psd_prefix_nxbase; if (type_task(vdecl->type) && vdecl->interface) continue; } prt_diff_info(vdecl); prt_variable_decl(d->modifiers, vdd, vopts); opts |= psd_duplicate; outputln(";"); } if (!(opts & psd_duplicate)) prt_interesting_elements(d->modifiers, opts); } void prt_parameter_declarations(declaration dlist) { declaration d; scan_declaration (d, dlist) prt_parameter_declaration(d); } void prt_parameter_declaration(declaration d) { startline(); switch (d->kind) { PRTCASE(data_decl, d); PRTCASE(ellipsis_decl, d); default: assert(0); break; } } void prt_function_decl(function_decl d) { if (d->ddecl->isused && !d->ddecl->suppress_definition) { function_declarator fd = get_fdeclarator(d->declarator); asttype ret = fd->return_type; prt_diff_info(d->ddecl); prt_prefix(d->location, d->ddecl, d->modifiers); if (ret) { prt_attribute_elements(d->modifiers); prt_declarator(ret->declarator, ret->qualifiers, NULL, d->ddecl, psd_print_default | psd_print_ddecl_fdeclarator); } else prt_declarator(d->declarator, d->modifiers, NULL, d->ddecl, psd_print_default); if (d->attributes) { output(" "); prt_type_elements(CAST(type_element, d->attributes), 0); } outputln(";"); } } void prt_function_body(function_decl d) { if (d->ddecl->isused && !d->ddecl->suppress_definition) { function_declarator fd = get_fdeclarator(d->declarator); asttype ret = fd->return_type; bool extrablock; /* We set current.function_decl because unparsing may produce error messages */ current.function_decl = d; current.container = d->ddecl->container; prt_diff_info(d->ddecl); prt_prefix(d->location, d->ddecl, d->modifiers); /* gcc wants the attributes here */ prt_type_elements(CAST(type_element, d->attributes), flag_gccize ? 0 : psd_no_target_attributes); if (ret) { prt_attribute_elements(d->modifiers); prt_declarator(ret->declarator, ret->qualifiers, NULL, d->ddecl, psd_print_default | psd_print_ddecl_fdeclarator); } else prt_declarator(d->declarator, d->modifiers, NULL, d->ddecl, psd_print_default); if (!flag_gccize) prt_type_elements(CAST(type_element, d->attributes), psd_only_target_attributes); startline(); prt_parameter_declarations(d->old_parms); extrablock = prt_network_parameter_copies(d); assert(is_compound_stmt(d->stmt)); prt_compound_stmt(CAST(compound_stmt, d->stmt), !d->ddecl->safe); newline(); if (extrablock) { unindent(); outputln("}"); } current.function_decl = d->parent_function; } } void prt_variable_decl(type_element modifiers, variable_decl d, psd_options options) { function_declarator fd = get_fdeclarator(d->declarator); asttype ret; prt_prefix(d->location, d->ddecl, modifiers); /* Handle nesdoc-overridden return type */ if (fd && (ret = fd->return_type)) { prt_attribute_elements(modifiers); prt_declarator(ret->declarator, ret->qualifiers, NULL, d->ddecl, options | psd_print_ddecl_fdeclarator); } else prt_declarator(d->declarator, modifiers, NULL, d->ddecl, options); if (d->asm_stmt) prt_asm_stmt_plain(d->asm_stmt); if (d->attributes) { output(" "); prt_type_elements(CAST(type_element, d->attributes), 0); } if (d->arg1 && !(use_nido && is_module_variable(d->ddecl))) { output(" = "); prt_expression(d->arg1, P_ASSIGN); } } void prt_declarator(declarator d, type_element elements, attribute attributes, data_declaration ddecl, psd_options options) { psd_options te_opts = options & (psd_duplicate | psd_rewrite_nxbase); if (d && is_function_declarator(d)) te_opts |= psd_rewrite_nxbase; prt_type_elements(elements, te_opts); options |= psd_need_paren_for_qual; options &= ~psd_need_paren_for_star; prt_simple_declarator(d, ddecl, options); if (attributes) { output(" "); prt_type_elements(CAST(type_element, attributes), 0); } } void prt_container(nesc_declaration container) { if (container->original) /* Put actual container name in a comment for human readers */ output("/*%s*/", container->instance_name); output_stripped_string_dollar(container->name); } void prt_plain_ddecl(data_declaration ddecl, psd_options options) { if (!ddecl->Cname) { if (ddecl->container && !(options & psd_skip_container)) prt_container(ddecl->container); if (/*ddecl->kind == decl_function &&*/ ddecl->interface) output_stripped_string_dollar(ddecl->interface->name); if ((options & psd_print_default) && !ddecl->defined && ddecl_is_command_or_event(ddecl)) { output("default"); output_string(function_separator); } } /* static local module variables are printed as fn$var in nido */ if (use_nido && is_module_local_static(ddecl)) { prt_plain_ddecl(ddecl->container_function, 0); output_string(function_separator); } if (options & psd_prefix_nxbase) output(NXBASE_PREFIX); output_stripped_string(ddecl->name); } void prt_ddecl_full_name(data_declaration ddecl, psd_options options) { prt_plain_ddecl(ddecl, options); if (use_nido && is_module_variable(ddecl)) output("[%s]", nido_num_nodes); } /* The return value is TRUE iff d is an identifier_declarator possibly prefixed with qualified_declarators */ bool prt_simple_declarator(declarator d, data_declaration ddecl, psd_options options) { if (!d) { if (options & psd_print_ddecl_fdeclarator) { if (is_function_decl(ddecl->ast)) d = CAST(function_decl, ddecl->ast)->declarator; else d = CAST(variable_decl, ddecl->ast)->declarator; d = CAST(declarator, get_fdeclarator(d)); options &= ~psd_print_ddecl_fdeclarator; } else { if (options & psd_print_ddecl) prt_ddecl_full_name(ddecl, options); else if (options & psd_rename_identifier) output("arg_%p", ddecl); return FALSE; } } switch (d->kind) { case kind_function_declarator: { function_declarator fd = CAST(function_declarator, d); prt_simple_declarator(fd->declarator, ddecl, options | psd_need_paren_for_star | psd_need_paren_for_qual); prt_parameters(fd->gparms ? fd->gparms : ddecl ? ddecl_get_gparms(ddecl) : NULL, fd->parms, options & psd_rename_parameters); break; } case kind_array_declarator: { array_declarator ad = CAST(array_declarator, d); bool is_id; is_id = prt_simple_declarator(ad->declarator, ddecl, options | psd_need_paren_for_star | psd_need_paren_for_qual); if (!ad->arg1) { /* The array-type test is necessary because char x[] in a parameter declaration is really a pointer declaration */ if (ddecl && is_id && type_array(ddecl->type)) { /* This is a declaration of an incomplete array type. The type of ddecl contains the size of the array if it is known. We need to print the size because of tossim (a declaration like 'char foo[TOSNODES][]' would be illegal) */ expression dsize = type_array_size(ddecl->type); if (dsize) output("[%lu]", (unsigned long)constant_uint_value(dsize->cst)); else /* we never found the size */ output("[]"); } else output("[]"); } else { set_location(ad->arg1->location); output("["); prt_expression(ad->arg1, P_TOP); output("]"); } break; } case kind_qualified_declarator: { qualified_declarator qd = CAST(qualified_declarator, d); bool is_id; set_location(qd->modifiers->location); if (options & psd_need_paren_for_qual) output("("); prt_type_elements(qd->modifiers, 0); is_id = prt_simple_declarator(qd->declarator, ddecl, options & ~psd_need_paren_for_qual); if (options & psd_need_paren_for_qual) output(")"); return is_id; } case kind_pointer_declarator: { pointer_declarator pd = CAST(pointer_declarator, d); if (options & psd_need_paren_for_star) output("("); output("*"); prt_simple_declarator(pd->declarator, ddecl, options & ~(psd_need_paren_for_star | psd_need_paren_for_qual)); if (options & psd_need_paren_for_star) output(")"); break; } case kind_identifier_declarator: set_location(d->location); if (options & psd_rename_identifier) output("arg_%p", ddecl); else if (ddecl) { prt_ddecl_full_name(ddecl, options); /* check that we printed the symbol info (too late if we get here) */ assert(!(symf && ddecl->needsmemory && !ddecl->printed)); } else output_stripped_cstring(CAST(identifier_declarator, d)->cstring); return TRUE; case kind_interface_ref_declarator: prt_simple_declarator(CAST(interface_ref_declarator, d)->declarator, ddecl, options | psd_need_paren_for_star | psd_need_paren_for_qual); break; default: assert(0); break; } return FALSE; } void prt_type_elements(type_element elements, psd_options options) { type_element em; scan_type_element (em, elements) { if (prt_type_element(em, options)) output(" "); } } void prt_attribute_elements(type_element elements) { type_element em; scan_type_element (em, elements) { if (prt_attribute_element(em)) output(" "); } } void prt_interesting_elements(type_element elements, psd_options options) { type_element interesting = interesting_element(elements); if (interesting) { prt_type_element(interesting, options); outputln(";"); } } bool prt_type_element(type_element em, psd_options options) { if ((options & psd_only_target_attributes) && em->kind != kind_target_attribute) return FALSE; if ((options & psd_no_target_attributes) && em->kind == kind_target_attribute) return FALSE; switch (em->kind) { case kind_component_typeref: /* fall through to prt_typename */ case kind_typename: prt_typename(CAST(typename, em), options); break; case kind_typeof_expr: prt_typeof_expr(CAST(typeof_expr, em)); break; case kind_typeof_type: prt_typeof_type(CAST(typeof_type, em)); break; case kind_gcc_attribute: prt_gcc_attribute(CAST(gcc_attribute, em)); break; case kind_target_attribute: if (flag_gccize) prt_gcc_attribute(CAST(gcc_attribute, em)); else prt_target_attribute(CAST(target_attribute, em)); break; case kind_nesc_attribute: prt_nesc_attribute(CAST(nesc_attribute, em)); break; case kind_qualifier: prt_qualifier(CAST(qualifier, em)); break; case kind_rid: { rid r = CAST(rid, em); if (!documentation_mode && r->id >= RID_LASTTYPE) return FALSE; prt_rid(r, options); break; } default: if (is_tag_ref(em)) prt_tag_ref(CAST(tag_ref, em), options); else assert(0); break; } return TRUE; } bool prt_attribute_element(type_element em) { switch (em->kind) { case kind_gcc_attribute: case kind_target_attribute: prt_gcc_attribute(CAST(gcc_attribute, em)); return TRUE; case kind_nesc_attribute: prt_nesc_attribute(CAST(nesc_attribute, em)); return TRUE; default: return FALSE; } } void prt_typename(typename tname, psd_options options) { data_declaration tdecl = tname->ddecl; psd_options newopts = 0; set_location(tname->location); if (type_network_base_type(tdecl->type) && (options & psd_rewrite_nxbase)) newopts |= psd_prefix_nxbase; prt_plain_ddecl(tdecl, newopts); } void prt_typeof_expr(typeof_expr texpr) { set_location(texpr->location); output("typeof("); prt_expression(texpr->arg1, P_TOP); output(")"); } void prt_typeof_type(typeof_type ttype) { set_location(ttype->location); output("typeof("); prt_asttype(ttype->asttype); output(")"); } void prt_gcc_attribute(gcc_attribute a) { if (!nesc_attributep(a)) { set_location(a->location); output("__attribute(("); prt_word(a->word1); if (a->args) { output("("); prt_expressions(a->args, TRUE); output(")"); } output("))"); } } void prt_target_attribute(target_attribute a) { set_location(a->location); if (!strcmp(a->word1->cstring.data, "iar_at")) output("@"); else if (!strcmp(a->word1->cstring.data, "keil_address")) output("="); else prt_word(a->word1); if (a->args) { output(" "); prt_expressions(a->args, TRUE); } } void prt_nesc_attribute(nesc_attribute a) { /* If the attribute has a macro_name, then print attribute like a macro call. If not, just ignore the attribute. */ if (a->tdecl->macro_name) { init_list args = CAST(init_list, a->arg1); expression e; int count = 0, field_count = 0; field_declaration field; /* This code checks that the attribute can be printed as a macro call, i.e., that complex initializers are not used and that all fields have an initializer - this is done here because it seems easier than enforcing these rules elsewhere */ set_location(a->location); output("%s(", a->tdecl->macro_name); /* Like prt_expressions, but check that we can rewrite what was a structure initializer as arguments to a macro */ scan_expression (e, args->args) { if (count > 0) output(", "); count++; if (is_init_list(e) || is_init_specific(e)) error_with_location(e->location, "complex initializers not allowed with @macro() attributes"); prt_expression(e, P_ASSIGN); /* priority is that of assignment */ } output(")"); /* Check that all arguments are specified, so that the macro gets the same argument count on all uses. Could extend to "at least enough" arguments to allow the case of a variably-sized array at the end of the attribute, and a variable-argument macro */ for (field = a->tdecl->fieldlist; field; field = field->next) field_count++; if (field_count != count) error_with_location(a->location, "incorrect argument count to @macro() attribute"); } } void prt_rid(rid r, psd_options options) { switch (r->id) { case RID_COMMAND: case RID_EVENT: case RID_TASK: case RID_ASYNC: case RID_NORACE: // show these in documenation mode, but not otherwise if (documentation_mode && !(options & psd_skip_command_event)) output("%s", rid_name(r)); break; case RID_DEFAULT: break; case RID_EXTERN: if (options & psd_noextern) return; /* FALLTHROUGH */ default: set_location(r->location); output("%s", rid_name(r)); break; } } void prt_qualifier(qualifier q) { set_location(q->location); output("%s", qualifier_name(q->id)); } void prt_tag_ref(tag_ref tr, psd_options options) { /* We must not name anonymous struct/unions (those which are collapsed into a containing struct/union) as that would make them non-anonymous (in gcc 3.3 and following) */ if (!tr->tdecl->collapsed) name_tag(tr->tdecl); /* We just print attributes as structs, with a prefix on the name (__nesc_attr_). They will be ignored by the C compiler. */ set_location(tr->location); /* There's a #define for nx_struct, nx_union in the header (this is not an issue as these are keywords) */ if (tr->kind == kind_attribute_ref) output("struct "); else output("%s ", tagkind_name(tr->kind)); if (tr->word1) { if (tr->tdecl && tr->tdecl->container && !tr->tdecl->Cname) prt_container(tr->tdecl->container); if (tr->kind == kind_attribute_ref) output("__nesc_attr_"); prt_word(tr->word1); } if (!(options & psd_duplicate) && tr->defined) { if (tr->kind == kind_enum_ref) prt_enumerators(tr->fields, tr->tdecl); else if (type_network(make_tagged_type(tr->tdecl))) prt_network_fields(tr); else prt_fields(tr->fields); } if (tr->attributes) { output(" "); prt_type_elements(CAST(type_element, tr->attributes), 0); } } void prt_enumerators(declaration elist, tag_declaration tdecl) { declaration d; output(" {"); indent(); startline(); scan_declaration (d, elist) { prt_enumerator(CAST(enumerator, d), tdecl); if (d->next) output(", "); } unindent(); startline(); output("}"); } void prt_fields(declaration flist) { declaration d; output(" {"); indent(); startline(); scan_declaration (d, flist) prt_field_declaration(d); unindent(); startline(); output("}"); } void prt_field_declaration(declaration d) { if (is_extension_decl(d)) prt_field_extension_decl(CAST(extension_decl, d)); else prt_field_data_decl(CAST(data_decl, d)); } void prt_field_extension_decl(extension_decl d) { set_location(d->location); output("__extension__ "); prt_field_declaration(d->decl); } void prt_field_data_decl(data_decl d) { declaration fd; prt_type_elements(d->modifiers, 0); scan_declaration (fd, d->decls) { prt_field_decl(CAST(field_decl, fd)); if (fd->next) output(", "); } outputln(";"); } void prt_field_decl(field_decl fd) { prt_declarator(fd->declarator, NULL, fd->attributes, NULL, 0); if (fd->arg1) { output(" : "); prt_expression(fd->arg1, P_TOP); } } void prt_enumerator(enumerator ed, tag_declaration tdecl) { set_location(ed->location); if (tdecl && tdecl->container) output_stripped_string_dollar(tdecl->container->name); output_stripped_cstring(ed->cstring); if (ed->arg1) { output(" = "); prt_expression(ed->arg1, P_ASSIGN); } } void prt_parameters(declaration gparms, declaration parms, psd_options options) { declaration d; bool forward = FALSE; bool first = TRUE; /* If asked to rename parameters, ask prt_parameter to rename identifiers when calling prt_declarator */ if (options & psd_rename_parameters) options = psd_rename_identifier; else options = 0; output("("); scan_declaration (d, gparms) { prt_parameter(d, first, FALSE, options); first = FALSE; } if (!(gparms && is_void_parms(parms))) scan_declaration (d, parms) { forward = prt_parameter(d, first, forward, 0); first = FALSE; } output(")"); } bool prt_parameter(declaration parm, bool first, bool lastforward, psd_options options) { switch (parm->kind) { case kind_oldidentifier_decl: if (!first) output(", "); set_location(parm->location); output_stripped_cstring(CAST(oldidentifier_decl, parm)->cstring); return FALSE; case kind_ellipsis_decl: if (!first) output(", "); set_location(parm->location); output("..."); return FALSE; case kind_data_decl: { data_decl dd = CAST(data_decl, parm); variable_decl vd = CAST(variable_decl, dd->decls); if (lastforward && !vd->forward) output("; "); else if (!first) output(", "); if (vd->ddecl && type_network_base_type(vd->ddecl->type)) { options |= psd_rewrite_nxbase; /* If addressed, we need a real network type copy. This is added by prt_network_parameter_copies, so we rename the actual parameter */ if (vd->ddecl->use_summary & c_addressed) options |= psd_prefix_nxbase; } /* Force a name for the parameter when none is given */ if (vd->ddecl && !vd->ddecl->name) options |= psd_rename_identifier; prt_declarator(vd->declarator, dd->modifiers, vd->attributes, vd->ddecl, options); return vd->forward; } default: assert(0); return FALSE; } } void prt_asttype(asttype t) { prt_declarator(t->declarator, t->qualifiers, NULL, NULL, 0); } void prt_word(word w) { set_location(w->location); output_stripped_cstring(w->cstring); } void prt_expressions(expression elist, bool isfirst) { expression e; scan_expression (e, elist) { if (!isfirst) output(", "); isfirst = FALSE; prt_expression(e, P_ASSIGN); /* priority is that of assignment */ } } #define PRTEXPR(type, x) case kind_ ## type: prt_ ## type(CAST(type, (x)), context_priority); return /* Context priorities are that of the containing operator, starting at 0 for , going up to 14 for ->, . See the symbolic P_XX constants P_TOP (-1) is used for contexts with no priority restrictions. */ void prt_expression_helper(expression e, int context_priority) { #if 0 /* Turned on for debugging sometimes. */ if (e->cst && constant_integral(e->cst) && type_integral(e->cst->type)) { output_constant(e->cst); return; } #endif switch (e->kind) { PRTEXPR(comma, e); PRTEXPR(sizeof_type, e); PRTEXPR(alignof_type, e); PRTEXPR(label_address, e); PRTEXPR(cast, e); PRTEXPR(cast_list, e); PRTEXPR(conditional, e); PRTEXPR(identifier, e); PRTEXPR(compound_expr, e); PRTEXPR(function_call, e); PRTEXPR(generic_call, e); PRTEXPR(array_ref, e); PRTEXPR(field_ref, e); PRTEXPR(interface_deref, e); PRTEXPR(init_list, e); PRTEXPR(init_specific, e); case kind_string_cst: PRTEXPR(lexical_cst, e); PRTEXPR(string, e); default: if (is_unary(e)) { prt_unary(CAST(unary, e), context_priority); return; } assert(is_binary(e)); prt_binary(CAST(binary, e), context_priority); return; } } void prt_expression(expression e, int context_priority) { if (!prt_network_expression(e)) prt_expression_helper(e, context_priority); } #define OPEN(pri) \ if (pri < context_priority) \ output("(") #define CLOSE(pri) \ if (pri < context_priority) \ output(")") void prt_comma(comma e, int context_priority) { OPEN(P_COMMA); prt_expressions(e->arg1, TRUE); CLOSE(P_COMMA); } void prt_sizeof_type(sizeof_type e, int context_priority) { set_location(e->location); output("sizeof("); prt_asttype(e->asttype); output(")"); } void prt_alignof_type(alignof_type e, int context_priority) { set_location(e->location); output("__alignof__("); prt_asttype(e->asttype); output(")"); } void prt_label_address(label_address e, int context_priority) { set_location(e->location); output("&&"); prt_id_label(e->id_label); } void prt_asttype_cast(asttype t) { /* Casts to a network base type are replaced by casts to the correspondingly sized base type */ if (type_network_base_type(t->type)) { declarator d; type_element qualifiers; type2ast(unparse_region, t->location, qualify_type1(type_network_platform_type(t->type), t->type), NULL, &d, &qualifiers); t = new_asttype(unparse_region, t->location, d, qualifiers); } prt_asttype(t); } void prt_cast(cast e, int context_priority) { OPEN(P_CAST); set_location(e->location); output("("); prt_asttype_cast(e->asttype); output(")"); prt_expression(e->arg1, P_CAST); CLOSE(P_CAST); } void prt_cast_list(cast_list e, int context_priority) { OPEN(P_CAST); set_location(e->location); output("("); prt_asttype_cast(e->asttype); output(")"); prt_init_list(CAST(init_list, e->init_expr), P_ASSIGN); CLOSE(P_CAST); } void prt_conditional(conditional e, int context_priority) { OPEN(P_COND); prt_expression(e->condition, P_OR); output(" ? "); if (e->arg1) prt_expression(e->arg1, P_COND); output(" : "); prt_expression(e->arg2, P_COND); CLOSE(P_COND); } void prt_identifier(identifier e, int context_priority) { data_declaration decl = e->ddecl; if (decl->kind == decl_function && decl->uncallable) error_with_location(e->location, "%s not connected", e->cstring.data); set_location(e->location); if (decl->kind == decl_constant && decl->substitute) output_constant(decl->value); else if (decl->kind == decl_error) /* attributes have bad code... */ output_cstring(e->cstring); else prt_plain_ddecl(decl, 0); if (use_nido && is_module_variable(decl)) output("[%s]", nido_mote_number); } void prt_compound_expr(compound_expr e, int context_priority) { set_location(e->location); output("("); prt_compound_stmt(CAST(compound_stmt, e->stmt), FALSE); output(")"); } void prt_function_call(function_call e, int context_priority) { switch (e->call_kind) { case post_task: set_location(e->arg1->location); output("TOS_post("); prt_expression(e->arg1, P_ASSIGN); output(")"); break; default: if (e->va_arg_call) { /* The extra parentheses are added because gcc 2.96 (aka redhat 7's gcc) has a broken syntax for __builtin_va_arg */ output("(__builtin_va_arg("); prt_expression(e->args, P_ASSIGN); output(", "); prt_asttype(e->va_arg_call); output("))"); } else if (get_magic(e)) output_constant(e->cst); else { prt_expression(e->arg1, P_CALL); /* Generic calls have already started the argument list. See prt_generic_call */ if (is_generic_call(e->arg1)) prt_expressions(e->args, FALSE); else { output("("); prt_expressions(e->args, TRUE); } output(")"); } break; } } void prt_generic_call(generic_call e, int context_priority) { prt_expression(e->arg1, P_CALL); /* function_call will finish the argument list. See prt_function_call */ output("("); prt_expressions(e->args, TRUE); /* This is a convenient place to do this check. We can't easily do it in make_generic_call as we don't (yet) know our parent. */ if (!is_function_call(e->parent)) error_with_location(e->location, "generic arguments can only be used in command/event calls"); } void prt_array_ref(array_ref e, int context_priority) { prt_expression(e->arg1, P_CALL); output("["); prt_expression(e->arg2, P_TOP); output("]"); } void prt_field_ref(field_ref e, int context_priority) { /* Reconstruct -> for nicer output */ if (is_dereference(e->arg1)) { prt_expression(CAST(dereference, e->arg1)->arg1, P_CALL); output("->"); } else { prt_expression(e->arg1, P_CALL); output("."); } output_stripped_cstring(e->cstring); } void prt_interface_deref(interface_deref e, int context_priority) { data_declaration decl = e->ddecl; if (decl->kind == decl_function && decl->uncallable) error_with_location(e->location, "%s.%s not connected", CAST(identifier, e->arg1)->cstring.data, e->cstring.data); prt_expression(e->arg1, P_CALL); output_string(function_separator); output_stripped_cstring(e->cstring); } void prt_unary(unary e, int context_priority) { char *op = NULL, *postop = NULL; int pri = 0; /* Yuck. Evil hack because gcc is broken (breaks the a[i] == *(a+i) rule when a is a non-lvalue array). So we undo our earlier rewrite (from fix.c) of a[i] as *(a+i). Note that gcc doesn't allow i[a] in this case (bozos at work?) */ if (is_dereference(e) && is_plus(e->arg1)) { plus derefed = CAST(plus, e->arg1); if (type_array(derefed->arg1->type)) { prt_array_ref(derefed, context_priority); return; } } set_location(e->location); switch (e->kind) { case kind_dereference: op = "*"; break; case kind_extension_expr: op = "__extension__ "; break; /* Higher priority for sizeof/alignof expr because we must add parens around sizeof cast_expr (e.g. sizeof((char)x), not sizeof (char)x */ case kind_sizeof_expr: op = "sizeof "; pri = P_CALL; break; case kind_alignof_expr: op = "__alignof__ "; pri = P_CALL; break; case kind_realpart: op = "__real__ "; break; case kind_imagpart: op = "__imag__ "; break; case kind_address_of: op = "&"; break; case kind_unary_minus: op = "-"; break; case kind_unary_plus: op = "+"; break; case kind_preincrement: op = "++"; break; case kind_predecrement: op = "--"; break; case kind_postincrement: postop = "++"; break; case kind_postdecrement: postop = "--"; break; case kind_conjugate: case kind_bitnot: op = "~"; break; case kind_not: op = "!"; break; case kind_component_deref: prt_plain_ddecl(CAST(component_deref, e)->ddecl, 0); return; default: assert(0); return; } OPEN(P_CAST); if (op) { output_string(op); if (is_unary(e->arg1)) output(" "); /* Catch weirdness such as - - x */ if (!pri) pri = P_CAST; } prt_expression(e->arg1, pri ? pri : P_CALL); if (postop) output_string(postop); CLOSE(P_CAST); } const char *binary_op_name(AST_kind kind) { switch (kind) { case kind_plus: return "+"; case kind_minus: return "-"; case kind_times: return "*"; case kind_divide: return "/"; case kind_modulo: return "%"; case kind_lshift: return "<<"; case kind_rshift: return ">>"; case kind_leq: return "<="; case kind_geq: return ">="; case kind_lt: return "<"; case kind_gt: return ">"; case kind_eq: return "=="; case kind_ne: return "!="; case kind_bitand: return "&"; case kind_bitor: return "|"; case kind_bitxor: return "^"; case kind_andand: return "&&"; case kind_oror: return "||"; case kind_assign: return "="; case kind_plus_assign: return "+="; case kind_minus_assign: return "-="; case kind_times_assign: return "*="; case kind_divide_assign: return "/="; case kind_modulo_assign: return "%="; case kind_lshift_assign: return "<<="; case kind_rshift_assign: return ">>="; case kind_bitand_assign: return "&="; case kind_bitor_assign: return "|="; case kind_bitxor_assign: return "^="; default: assert(0); return ""; } } void prt_binary(binary e, int context_priority) { int pri, lpri, rpri; const char *op = binary_op_name(e->kind); switch (e->kind) { case kind_times: case kind_divide: case kind_modulo: lpri = P_TIMES; pri = P_TIMES; rpri = P_CAST; break; case kind_plus: case kind_minus: lpri = P_PLUS; pri = P_PLUS; rpri = P_TIMES; break; case kind_lshift: case kind_rshift: pri = P_SHIFT; if (CONSERVATIVE_PARENS) lpri = rpri = P_TIMES; else { lpri = P_SHIFT; rpri = P_PLUS; } break; case kind_leq: case kind_geq: case kind_lt: case kind_gt: pri = P_REL; if (CONSERVATIVE_PARENS) lpri = rpri = P_PLUS; else { lpri = P_REL; rpri = P_SHIFT; } break; case kind_eq: case kind_ne: pri = P_EQUALS; if (CONSERVATIVE_PARENS) lpri = rpri = P_PLUS; else { lpri = P_EQUALS; rpri = P_REL; } break; case kind_bitand: pri = P_BITAND; if (CONSERVATIVE_PARENS) lpri = rpri = P_TIMES; else { lpri = P_BITAND; rpri = P_EQUALS; } break; case kind_bitxor: pri = P_BITXOR; if (CONSERVATIVE_PARENS) lpri = rpri = P_TIMES; else { lpri = P_BITXOR; rpri = P_BITAND; } break; case kind_bitor: pri = P_BITOR; if (CONSERVATIVE_PARENS) lpri = rpri = P_TIMES; else { lpri = P_BITOR; rpri = P_BITXOR; } break; case kind_andand: lpri = P_AND; pri = P_AND; rpri = P_BITOR; break; case kind_oror: pri = P_OR; if (CONSERVATIVE_PARENS) lpri = rpri = P_BITOR; else { lpri = P_OR; rpri = P_AND; } break; case kind_assign: case kind_plus_assign: case kind_minus_assign: case kind_times_assign: case kind_divide_assign: case kind_modulo_assign: case kind_lshift_assign: case kind_rshift_assign: case kind_bitand_assign: case kind_bitor_assign: case kind_bitxor_assign: lpri = P_CAST; pri = P_ASSIGN; rpri = P_ASSIGN; break; default: assert(0); return; } OPEN(pri); prt_expression(e->arg1, lpri); set_location(e->location); output(" %s ", op); prt_expression(e->arg2, rpri); CLOSE(pri); } void prt_lexical_cst(lexical_cst e, int context_priority) { set_location(e->location); output_cstring(e->cstring); } void prt_string(string e, int context_priority) { lexical_cst s; scan_lexical_cst (s, CAST(lexical_cst, e->strings)) prt_lexical_cst(s, P_TOP); } void prt_init_list(init_list e, int context_priority) { set_location(e->location); output("{ "); prt_expressions(e->args, TRUE); output(" }"); } void prt_designator(designator dl) { designator d; scan_designator (d, dl) switch (d->kind) { case kind_designate_field: { designate_field df = CAST(designate_field, d); output("."); output_cstring(df->cstring); break; } case kind_designate_index: { designate_index di = CAST(designate_index, d); output("["); prt_expression(di->arg1, P_ASSIGN); if (di->arg2) { output(" ... "); prt_expression(di->arg2, P_ASSIGN); } output("] "); break; } default: assert(0); } } void prt_init_specific(init_specific e, int context_priority) { set_location(e->location); prt_designator(e->designator); output(" = "); prt_expression(e->init_expr, P_ASSIGN); } void prt_statement(statement s) { switch (s->kind) { PRTCASE(asm_stmt, s); PRTCASE(if_stmt, s); PRTCASE(labeled_stmt, s); PRTCASE(expression_stmt, s); PRTCASE(while_stmt, s); PRTCASE(dowhile_stmt, s); PRTCASE(switch_stmt, s); PRTCASE(for_stmt, s); PRTCASE(break_stmt, s); PRTCASE(continue_stmt, s); PRTCASE(return_stmt, s); PRTCASE(goto_stmt, s); PRTCASE(computed_goto_stmt, s); PRTCASE(empty_stmt, s); PRTCASE(atomic_stmt, s); case kind_compound_stmt: prt_compound_stmt(CAST(compound_stmt, s), FALSE); return; default: assert(0); return; } } static void prt_as_compound(statement s) { if (!is_compound_stmt(s)) outputln("{"); prt_statement(s); if (!is_compound_stmt(s)) { startline(); outputln("}"); } } void prt_compound_stmt(compound_stmt s, bool trusted) { statement s1; set_location(s->location); if (trusted && flag_deputy) outputln("{ __DEPUTY_TRUSTEDBLOCK"); else outputln("{"); indent(); if (s->id_labels) { id_label l; output("__label__ "); scan_id_label (l, s->id_labels) { prt_id_label(l); if (l->next) output(", "); } outputln(";"); } if (s->decls) { prt_compound_declarations(s->decls); newline(); } scan_statement (s1, s->stmts) prt_statement(s1); unindent(); outputln("}"); } void prt_compound_declarations(declaration dlist) { declaration d; scan_declaration (d, dlist) prt_compound_declaration(d); } void prt_compound_declaration(declaration d) { startline(); switch (d->kind) { PRTCASE(data_decl, d); PRTCASE(extension_decl, d); PRTCASE(function_decl, d); default: assert(0); break; } } void prt_asm_stmt(asm_stmt s) { prt_asm_stmt_plain(s); output(";"); } void prt_asm_stmt_plain(asm_stmt s) { set_location(s->location); output(" __asm "); if (s->qualifiers) prt_type_elements(s->qualifiers, 0); output("("); prt_expression(s->arg1, P_TOP); if (s->asm_operands1 || s->asm_operands2 || s->asm_clobbers) { output(" : "); prt_asm_operands(s->asm_operands1); if (s->asm_operands2 || s->asm_clobbers) { output(" : "); prt_asm_operands(s->asm_operands2); if (s->asm_clobbers) { output(" : "); prt_expressions(CAST(expression, s->asm_clobbers), TRUE); } } } output(")"); } void prt_asm_operands(asm_operand olist) { asm_operand o; scan_asm_operand (o, olist) { prt_asm_operand(o); if (o->next) output(", "); } } void prt_asm_operand(asm_operand o) { set_location(o->location); if (o->word1) { output("["); prt_word(o->word1); output("] "); } prt_string(o->string, P_TOP); output("("); prt_expression(o->arg1, P_TOP); output(")"); } void prt_if_stmt(if_stmt s) { #if 0 if (s->condition->cst && constant_knownbool(s->condition->cst)) { if (constant_boolvalue(s->condition->cst)) prt_statement(s->stmt1); else if (s->stmt2) prt_statement(s->stmt2); else outputln(";"); return; } #endif set_location(s->location); output("if ("); /* CONSERVATIVE_PARENS: force parens around assignment within if */ prt_expression(s->condition, CONSERVATIVE_PARENS ? P_COND : P_TOP); output(") "); indent(); prt_as_compound(s->stmt1); unindent(); if (s->stmt2) { startline(); output("else "); indent(); prt_as_compound(s->stmt2); unindent(); } } void prt_labeled_stmt(labeled_stmt s) { prt_label(s->label); output(": "); indent(); prt_statement(s->stmt); unindent(); } void prt_expression_stmt(expression_stmt s) { prt_expression(s->arg1, P_TOP); outputln(";"); } void prt_while_stmt(while_stmt s) { set_location(s->location); output("while ("); /* CONSERVATIVE_PARENS: force parens around assignment within while */ prt_expression(s->condition, CONSERVATIVE_PARENS ? P_COND : P_TOP); output(") "); indent(); prt_statement(s->stmt); unindent(); } void prt_dowhile_stmt(while_stmt s) { #if 0 /* Elide do ... while (0) */ if (s->condition->cst && constant_knownbool(s->condition->cst) && !constant_boolvalue(s->condition->cst)) { prt_statement(s->stmt); return; } #endif set_location(s->location); output("do "); indent(); prt_statement(s->stmt); unindent(); startline(); output("while ("); /* CONSERVATIVE_PARENS: force parens around assignment within do while */ prt_expression(s->condition, CONSERVATIVE_PARENS ? P_COND : P_TOP); outputln(");"); } void prt_switch_stmt(switch_stmt s) { set_location(s->location); output("switch ("); /* CONSERVATIVE_PARENS: force parens around assignment within switch */ prt_expression(s->condition, CONSERVATIVE_PARENS ? P_COND : P_TOP); output(") "); indent(); prt_statement(s->stmt); unindent(); } void prt_for_stmt(for_stmt s) { set_location(s->location); output("for ("); if (s->arg1) prt_expression(s->arg1, P_TOP); output("; "); if (s->arg2) prt_expression(s->arg2, P_TOP); output("; "); if (s->arg3) prt_expression(s->arg3, P_TOP); output(") "); indent(); prt_statement(s->stmt); unindent(); } void prt_break_stmt(break_stmt s) { set_location(s->location); outputln("break;"); } void prt_continue_stmt(continue_stmt s) { set_location(s->location); outputln("continue;"); } void prt_return_stmt(return_stmt s) { bool inatomic = FALSE; if (s->containing_atomic && s->containing_atomic->isatomic == NOT_ATOMIC && current.function_decl->ddecl->call_contexts != c_call_atomic) { /* We rewrote return statemnts within atomic to return a local variable in stmt.c. So we can just end the atomic section now. */ outputln("{"); indent(); set_location(s->location); if (current.function_decl->ddecl->call_contexts == c_call_nonatomic && nesc_optimise_atomic) outputln("__nesc_enable_interrupt(); "); else outputln("__nesc_atomic_end(__nesc_atomic); "); inatomic = TRUE; } set_location(s->location); if (s->arg1) { output("return "); prt_expression(s->arg1, P_TOP); outputln(";"); } else outputln("return;"); if (inatomic) { unindent(); outputln("}"); } } void prt_goto_stmt(goto_stmt s) { set_location(s->location); output("goto "); prt_id_label(s->id_label); outputln(";"); } void prt_computed_goto_stmt(computed_goto_stmt s) { set_location(s->location); output("goto *"); prt_expression(s->arg1, P_TOP); outputln(";"); } void prt_empty_stmt(empty_stmt s) { set_location(s->location); outputln(";"); } void prt_atomic_stmt(atomic_stmt s) { struct location hack; /* If the function's context is c_call_atomic, we can remove this atomic. */ if (current.function_decl->ddecl->call_contexts == c_call_atomic) { outputln("/* atomic removed: atomic calls only */"); prt_statement(s->stmt); return; } /* If the body of the atomic is atomic, we don't need to do anything */ if (s->isatomic != NOT_ATOMIC) { outputln("/* atomic removed: %s */", s->isatomic == ATOMIC_ANY ? "no shared variable access" : "single single-byte shared variable access"); prt_statement(s->stmt); return; } set_location(s->location); if (current.function_decl->ddecl->call_contexts == c_call_nonatomic && nesc_optimise_atomic) outputln("{ __nesc_disable_interrupt();"); else outputln("{ __nesc_atomic_t __nesc_atomic = __nesc_atomic_start();"); indent(); prt_statement(s->stmt); /* The hack is to make debugging nicer: we make this new line appear to be part of the previous line */ hack = output_loc; hack.lineno--; set_location(&hack); if (current.function_decl->ddecl->call_contexts == c_call_nonatomic && nesc_optimise_atomic) outputln("__nesc_enable_interrupt(); }"); else outputln("__nesc_atomic_end(__nesc_atomic); }"); unindent(); } void prt_label(label l) { switch (l->kind) { PRTCASE(id_label, l); PRTCASE(case_label, l); PRTCASE(default_label, l); default: assert(0); return; } } void prt_id_label(id_label l) { set_location(l->location); output_stripped_cstring(l->cstring); } void prt_case_label(case_label l) { set_location(l->location); output("case "); prt_expression(l->arg1, P_ASSIGN); if (l->arg2) { output(" ... "); prt_expression(l->arg2, P_ASSIGN); } } void prt_default_label(default_label l) { set_location(l->location); output("default"); } nescc-1.3.4/src/unparse.h000066400000000000000000000106531177770303300152440ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef UNPARSE_H #define UNPARSE_H /* string which accesses current mote number in nido */ extern char *nido_mote_number; /* temporary region which can be used during unparsing */ extern region unparse_region; void unparse(FILE *to, declaration program) deletes; void unparse_start(FILE *to, FILE *symbols); void unparse_end(void) deletes; void unparse_prefix(const char *line); void enable_line_directives(void); void disable_line_directives(void); void set_function_separator(char *sep); const char *get_function_separator(void); FILE *set_unparse_outfile(FILE *newout); void enable_documentation_mode(void); void disable_documentation_mode(void); void set_location(location l); void set_fixed_location(location l); void clear_fixed_location(void); struct location output_location(void); void output(char *format, ...) __attribute__((format (printf, 1, 2))); void outputln(char *format, ...) __attribute__((format (printf, 1, 2))); void output_stripped_cstring(cstring s); void output_string(const char *s); void output_cstring(cstring s); void output_stripped_string(const char *s); void output_stripped_string_dollar(const char *s); void output_quoted_cs(cstring cs); void copy_file_to_output(char *filename); void newline(void); void indent(void); void unindent(void); void startline(void); void startline_noindent(void); const char *binary_op_name(AST_kind kind); /* Precedence levels */ #define P_TOP -1 #define P_COMMA 0 #define P_ASSIGN 1 #define P_COND 2 #define P_OR 3 #define P_AND 4 #define P_BITOR 5 #define P_BITXOR 6 #define P_BITAND 7 #define P_EQUALS 8 #define P_REL 9 #define P_SHIFT 10 #define P_PLUS 11 #define P_TIMES 12 #define P_CAST 13 #define P_CALL 14 void prt_asttype(asttype t); void prt_data_decl(data_decl d); void prt_toplevel_declarations(declaration d); void prt_toplevel_declaration(declaration d); void prt_nelements(expression array); void prt_expressions(expression elist, bool isfirst); void prt_expression(expression e, int context_priority); void prt_expression_helper(expression e, int context_priority); typedef enum { psd_need_paren_for_star = 1, psd_need_paren_for_qual = 2, psd_rename_parameters = 4, psd_rename_identifier = 8, psd_print_default = 16, psd_skip_container = 32, psd_print_ddecl = 64, /* print ddecl as the name inside a declarator */ psd_prefix_nxbase = 128, /* add the __nesc_nxbase_ prefix to declared names */ psd_rewrite_nxbase = 256, /* add the __nesc_nxbase_ prefix to base type */ psd_print_ddecl_fdeclarator = 512, /* print innermost fdeclarator from ddecl */ psd_duplicate = 1024, psd_noextern = 2048, psd_skip_command_event = 4096, psd_no_target_attributes = 8192, psd_only_target_attributes = 16384, } psd_options; void prt_type_elements(type_element elements, psd_options options); void prt_attribute_elements(type_element elements); void prt_interesting_elements(type_element elements, psd_options options); void prt_variable_decl(type_element modifiers, variable_decl d, psd_options dopts); void prt_declarator(declarator d, type_element elements, attribute attributes, data_declaration ddecl, psd_options options); bool prt_simple_declarator(declarator d, data_declaration ddecl, psd_options options); void prt_parameters(declaration gparms, declaration parms, psd_options options); bool prt_parameter(declaration parm, bool first, bool lastforward, psd_options options); void prt_ddecl_full_name(data_declaration ddecl, psd_options options); void prt_plain_ddecl(data_declaration ddecl, psd_options options); void prt_field_decl(field_decl fd); void prt_function_body(function_decl d); void prt_diff_info(data_declaration ddecl); #endif nescc-1.3.4/src/utils.c000066400000000000000000000206251177770303300147220ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation It also includes Public domain code from Pat Rankin and code from libiberty that is Copyright (C) 2001, 2002 Free Software Foundation, Inc. The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "parser.h" #include "utils.h" #include void renew_region(region *r) /* Effects: Delete region *r (if not null), allocate a new region in *r */ { if (*r) deleteregion_ptr(r); *r = newregion(); } void *xmalloc(size_t size) { #ifdef BWGC void *x = GC_malloc(size); #else void *x = malloc(size); #endif if (!x) abort(); return x; } void *xcalloc(size_t count, size_t size) { #ifdef BWGC void *x = GC_calloc(count, size); #else void *x = calloc(count, size); #endif if (!x) abort(); return x; } void *xrealloc(void *p, size_t newsize) { #ifdef BWGC void *x = GC_realloc(p, newsize); #else void *x = realloc(p, newsize); #endif if (!x) abort(); return x; } char *xstrdup(const char *s) { char *t = strdup(s); if (!t) abort(); return t; } void *xmemdup(const void *from, size_t s, size_t nsize) { void *x = xcalloc(1, nsize); return memcpy(x, from, s); } #define ERRSTR_FMT "undocumented error #%d" static char xstrerror_buf[sizeof ERRSTR_FMT + 20]; /* Like strerror, but result is never a null pointer. */ char *xstrerror (int errnum) { char *errstr; #ifdef VMS char *(*vmslib_strerror) (int,...); /* Override any possibly-conflicting declaration from system header. */ vmslib_strerror = (char *(*) (int,...)) strerror; /* Second argument matters iff first is EVMSERR, but it's simpler to pass it unconditionally. `vaxc$errno' is declared in and maintained by the run-time library in parallel to `errno'. We assume that `errnum' corresponds to the last value assigned to errno by the run-time library, hence vaxc$errno will be relevant. */ errstr = (*vmslib_strerror) (errnum, vaxc$errno); #else errstr = strerror (errnum); #endif /* If `errnum' is out of range, result might be NULL. We'll fix that. */ if (!errstr) { sprintf (xstrerror_buf, ERRSTR_FMT, errnum); errstr = xstrerror_buf; } return errstr; } /* Make a new unintialised cstring of length l */ cstring alloc_cstring(region r, int l) { cstring cs; cs.data = rstralloc(r, l + 1); cs.data[l] = '\0'; cs.length = l; return cs; } /* Make a new cstring with a copy of s, length l */ cstring make_cstring(region r, const char *s, int l) { cstring cs = alloc_cstring(r, l); memcpy(cs.data, s, l); return cs; } /* Make a new cstring with a copy of regular C string s */ cstring str2cstring(region r, const char *s) { return make_cstring(r, s, strlen(s)); } /* Make a new C string with a copy of cstring s */ char *cstring2str(region r, cstring s) { int len = s.length + 1; char *str = rstralloc(r, len); memcpy(str, s.data, len); return str; } unsigned long align_to(unsigned long n, unsigned long alignment) { int count = (n + alignment - 1) / alignment; return count * alignment; } unsigned long gcd(unsigned long x, unsigned long y) { unsigned long z; for (;;) { if (y == 0) return x; z = x % y; x = y; y = z; } } unsigned long lcm(unsigned long x, unsigned long y) { /* ignoring risk of overflow (used for alignments which are typically <= 16) */ return (x * y) / gcd(x, y); } int ilog2(largest_uint x) { /* slow version */ largest_uint v = 1; int log2 = 0; while (v < x) { v <<= 1; log2++; if (!v) return -1; } return v == x ? log2 : -1; } DEFINE_ARRAY(char_array, char) /* For some obscure reason, there's no standard function for this (Linux's wctombs does it, but it's not standard) */ int wcs_mb_size(const wchar_t *wstr) /* Returns: number of bytes to be allocated for a C string buffer that will successfully hold the result of wcstombs(buffer, wstr, ?), or -1 if wstr cannot be converted */ { size_t len = 0; char tmp[MB_CUR_MAX]; wctomb(NULL, 0); while (*wstr) { int mblen = wctomb(tmp, *wstr++); if (mblen < 0) return -1; len += mblen; } return len + 1; } unsigned long hash_ptr(void *p) /* Returns: a reasonable hash for a pointer value */ { return (unsigned long)p >> ALIGNMENT_BITS; } int compare_ptr(void *entry1, void *entry2) /* Returns: entry1 == entry2 (use with new_dhash_table) */ { return entry1 == entry2; } unsigned long hash_str(const char *s) /* Returns: a reasonable hash for a character string. FIXME: the return value is only effected by the final 32 characters in the string. */ { register unsigned long code = 0; if( !s ) return 0x57954317; while (*s) { code = ((code << 1) + *s) ^ 0x57954317; s++; } return code; } /* On machines with DIR_SEPARATOR defined, replace all DIR_SEPARATOR's by / */ void unixify_path(char *path) { #ifdef DIR_SEPARATOR while ((path = strchr(path, DIR_SEPARATOR))) *path++ = '/'; #endif } /* TRUE if path is absolute, false otherwise */ bool absolute_path(char *path) { #ifndef WIN32 if (path[0] == '/') return TRUE; #endif #if defined(WIN32) || defined(__CYGWIN32__) if (isalpha(path[0]) && path[1] == ':' && (path[2] == '/' || path[2] == '\\')) return TRUE; #endif return FALSE; } #if !HAVE_REALPATH #ifdef WIN32 #include static bool pathcat(char *base, const char *add) { int l = strlen(base); if (l + strlen(add) + 2 >= PATH_MAX) return FALSE; /* doesn't fit */ base[l] = '/'; strcpy(base + l + 1, add); return TRUE; } char *realpath(const char *path, char *resolved_path) { char *slash, *last; /* This version doesn't support a NULL resolved_path. We don't use it that way anyway */ if (isalpha(path[0]) && path[1] == ':') if (path[2] == '/' || path[2] == '\\') { if (strlen(path) >= PATH_MAX - 1) return NULL; strcpy(resolved_path, path); /* absolute path */ } else { /* drive relative path */ if (!_getdcwd(tolower(path[0] - 'a' + 1), resolved_path, PATH_MAX)) return NULL; if (!pathcat(resolved_path, path + 2)) return NULL; } else { /* fully relative path */ if (!getcwd(resolved_path, PATH_MAX)) return NULL; if (!pathcat(resolved_path, path)) return NULL; } if (!absolute_path(resolved_path)) return NULL; /* this could be an assert */ unixify_path(resolved_path); /* Then, we remove all duplicate /'s, and . and .. directory references. No attempt to avoid n^2 like behaviour. */ last = resolved_path + 2; do { /* Find next slash or end of path */ slash = last + 1; while (*slash != '/' && *slash) slash++; if (slash == last + 1 || /* empty dir spec */ (slash == last + 2 && last[1] == '.')) /* or . */ memmove(last, slash, strlen(slash) + 1); else if (slash == last + 3 && last[1] == '.' && last[2] == '.') /* .. */ { /* look backwards for directory to squash */ while (last >= resolved_path + 2 && *--last != '/') ; memmove(last, slash, strlen(slash) + 1); } else last = slash; } while (*last); /* If we have x:, make it into x:/ */ if (!resolved_path[2]) { resolved_path[2] = '/'; resolved_path[3] = '\0'; } return resolved_path; } #else #error "realpath missing" #endif #endif #ifdef TEST_REALPATH void tr(char *path) { char rp[PATH_MAX]; if (realpath(path, rp)) printf("%s -> %s\n", path, rp); else printf("%s fails\n", path); } int region_main() { tr("aa"); tr("n:xx"); tr("n:\\xx"); tr("n:\\\\aa\\\\b\\.\\c"); tr("c:/"); tr("c:/foo/"); tr("c:/foo/.."); tr("c:/../foo"); tr("c:///////////"); tr("n:../fun"); tr("../.././a"); return 0; } #endif nescc-1.3.4/src/utils.h000066400000000000000000000043301177770303300147220ustar00rootroot00000000000000/* This file is part of the nesC compiler. This file is derived from the RC Compiler. It is thus Copyright (C) 2000-2001 The Regents of the University of California. Changes for nesC are Copyright (C) 2002 Intel Corporation The attached "nesC" software is provided to you under the terms and conditions of the GNU General Public License Version 2 as published by the Free Software Foundation. nesC 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 nesC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef UTILS_H #define UTILS_H #include "array.h" #include "cstring.h" void renew_region(region *r); /* Effects: Delete region *r (if not null), allocate a new region in *r */ void *xmalloc(size_t size); void *xrealloc(void *p, size_t newsize); unsigned long align_to(unsigned long n, unsigned long alignment); int ilog2(largest_uint x); /* least common multiple */ unsigned long lcm(unsigned long x, unsigned long y); #define MAX(a, b) ((a) > (b) ? (a) : (b)) #define MIN(a, b) ((a) < (b) ? (a) : (b)) DECLARE_ARRAY(wchar_array, wchar_t) DECLARE_ARRAY(char_array, char) int wcs_mb_size(const wchar_t *wstr); /* Returns: number of bytes to be allocated for a C string buffer that will successfully hold the result of wcstombs(buffer, wstr, ?), or -1 if wstr cannot be converted */ /* Some basic hash functions, that are re-used in a number of places */ unsigned long hash_ptr(void *p); int compare_ptr(void *entry1, void *entry2); unsigned long hash_str(const char *); #if !HAVE_REALPATH char *realpath(const char *path, char *resolved_path); #endif /* From libiberty */ extern const char *lbasename (const char *); /* On machines with DIR_SEPARATOR defined, replace all DIR_SEPARATOR's by / */ void unixify_path(char *path); /* TRUE if path is absolute, false otherwise */ bool absolute_path(char *path); #ifdef WIN32 #define DEVNULL "nul:" #else #define DEVNULL "/dev/null" #endif #endif nescc-1.3.4/tools/000077500000000000000000000000001177770303300137625ustar00rootroot00000000000000nescc-1.3.4/tools/Makefile.am000066400000000000000000000040131177770303300160140ustar00rootroot00000000000000# This file is part of the nesC compiler. # Copyright (C) 2002 Intel Corporation # # The attached "nesC" software is provided to you under the terms and # conditions of the GNU General Public License Version 2 as published by the # Free Software Foundation. # # nesC 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 nesC; see the file COPYING. If not, write to # the Free Software Foundation, 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. AUTOMAKE_OPTIONS = foreign SUBDIRS = java ncclibdir=$(libdir)/ncc nccdatadir=$(datadir)/ncc editordir=$(nccdatadir)/editor-modes emacsdir=$(editordir)/emacs vimdir=$(editordir)/vim kdedir=$(editordir)/kde geditdir=$(editordir)/gedit bin_SCRIPTS = nescc-mig nescc-ncg nescc nescc-wiring ncclib_DATA = deputy_nodeputy.h \ deputy_stage1.h \ deputy_stage2.h \ genjava.pm \ gencstjava.pm \ gencsharp.pm \ genc.pm \ gencstc.pm \ genpython.pm \ gencstpython.pm \ migdecode.pm \ nesc_nx.h nodist_ncclib_DATA = nesc.jar emacs_DATA = \ editor-modes/emacs/nesc.el \ editor-modes/emacs/new-nesc.el \ editor-modes/emacs/old-nesc.el \ editor-modes/emacs/readme.txt vim_DATA = \ editor-modes/vim/nesc.vim \ editor-modes/vim/filetype.vim \ editor-modes/emacs/readme.txt kde_DATA = \ editor-modes/kde/nesc.xml \ editor-modes/kde/readme.txt gedit_DATA = \ editor-modes/gedit/ncc.lang \ editor-modes/gedit/readme.txt EXTRA_DIST = \ $(ncclib_DATA) \ $(emacs_DATA) \ $(vim_DATA) \ $(kde_DATA) \ $(gedit_DATA) NESC_JAR_DEPS = $(shell find java -name '*.java') nesc.jar: $(NESC_JAR_DEPS) (cd java && $(MAKE)) (cd java && jar cf ../$@ `find . -name '*.class'`) FORCE: .phony: FORCE nescc-1.3.4/tools/Makefile.in000066400000000000000000000643021177770303300160340ustar00rootroot00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This file is part of the nesC compiler. # Copyright (C) 2002 Intel Corporation # # The attached "nesC" software is provided to you under the terms and # conditions of the GNU General Public License Version 2 as published by the # Free Software Foundation. # # nesC 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 nesC; see the file COPYING. If not, write to # the Free Software Foundation, 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = tools DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/nescc-diff.in $(srcdir)/nescc-mig.in \ $(srcdir)/nescc-ncg.in $(srcdir)/nescc-wiring.in \ $(srcdir)/nescc.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/config-aux/mkinstalldirs CONFIG_CLEAN_FILES = nescc-mig nescc-ncg nescc nescc-diff nescc-wiring CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(emacsdir)" \ "$(DESTDIR)$(geditdir)" "$(DESTDIR)$(kdedir)" \ "$(DESTDIR)$(ncclibdir)" "$(DESTDIR)$(ncclibdir)" \ "$(DESTDIR)$(vimdir)" SCRIPTS = $(bin_SCRIPTS) SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive DATA = $(emacs_DATA) $(gedit_DATA) $(kde_DATA) $(ncclib_DATA) \ $(nodist_ncclib_DATA) $(vim_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EXEEXT = @EXEEXT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pathperl = @pathperl@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign SUBDIRS = java ncclibdir = $(libdir)/ncc nccdatadir = $(datadir)/ncc editordir = $(nccdatadir)/editor-modes emacsdir = $(editordir)/emacs vimdir = $(editordir)/vim kdedir = $(editordir)/kde geditdir = $(editordir)/gedit bin_SCRIPTS = nescc-mig nescc-ncg nescc nescc-wiring ncclib_DATA = deputy_nodeputy.h \ deputy_stage1.h \ deputy_stage2.h \ genjava.pm \ gencstjava.pm \ gencsharp.pm \ genc.pm \ gencstc.pm \ genpython.pm \ gencstpython.pm \ migdecode.pm \ nesc_nx.h nodist_ncclib_DATA = nesc.jar emacs_DATA = \ editor-modes/emacs/nesc.el \ editor-modes/emacs/new-nesc.el \ editor-modes/emacs/old-nesc.el \ editor-modes/emacs/readme.txt vim_DATA = \ editor-modes/vim/nesc.vim \ editor-modes/vim/filetype.vim \ editor-modes/emacs/readme.txt kde_DATA = \ editor-modes/kde/nesc.xml \ editor-modes/kde/readme.txt gedit_DATA = \ editor-modes/gedit/ncc.lang \ editor-modes/gedit/readme.txt EXTRA_DIST = \ $(ncclib_DATA) \ $(emacs_DATA) \ $(vim_DATA) \ $(kde_DATA) \ $(gedit_DATA) NESC_JAR_DEPS = $(shell find java -name '*.java') all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tools/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign tools/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): nescc-mig: $(top_builddir)/config.status $(srcdir)/nescc-mig.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ nescc-ncg: $(top_builddir)/config.status $(srcdir)/nescc-ncg.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ nescc: $(top_builddir)/config.status $(srcdir)/nescc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ nescc-diff: $(top_builddir)/config.status $(srcdir)/nescc-diff.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ nescc-wiring: $(top_builddir)/config.status $(srcdir)/nescc-wiring.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files install-emacsDATA: $(emacs_DATA) @$(NORMAL_INSTALL) test -z "$(emacsdir)" || $(MKDIR_P) "$(DESTDIR)$(emacsdir)" @list='$(emacs_DATA)'; test -n "$(emacsdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(emacsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(emacsdir)" || exit $$?; \ done uninstall-emacsDATA: @$(NORMAL_UNINSTALL) @list='$(emacs_DATA)'; test -n "$(emacsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(emacsdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(emacsdir)" && rm -f $$files install-geditDATA: $(gedit_DATA) @$(NORMAL_INSTALL) test -z "$(geditdir)" || $(MKDIR_P) "$(DESTDIR)$(geditdir)" @list='$(gedit_DATA)'; test -n "$(geditdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(geditdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(geditdir)" || exit $$?; \ done uninstall-geditDATA: @$(NORMAL_UNINSTALL) @list='$(gedit_DATA)'; test -n "$(geditdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geditdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geditdir)" && rm -f $$files install-kdeDATA: $(kde_DATA) @$(NORMAL_INSTALL) test -z "$(kdedir)" || $(MKDIR_P) "$(DESTDIR)$(kdedir)" @list='$(kde_DATA)'; test -n "$(kdedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(kdedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(kdedir)" || exit $$?; \ done uninstall-kdeDATA: @$(NORMAL_UNINSTALL) @list='$(kde_DATA)'; test -n "$(kdedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(kdedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(kdedir)" && rm -f $$files install-ncclibDATA: $(ncclib_DATA) @$(NORMAL_INSTALL) test -z "$(ncclibdir)" || $(MKDIR_P) "$(DESTDIR)$(ncclibdir)" @list='$(ncclib_DATA)'; test -n "$(ncclibdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(ncclibdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(ncclibdir)" || exit $$?; \ done uninstall-ncclibDATA: @$(NORMAL_UNINSTALL) @list='$(ncclib_DATA)'; test -n "$(ncclibdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(ncclibdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(ncclibdir)" && rm -f $$files install-nodist_ncclibDATA: $(nodist_ncclib_DATA) @$(NORMAL_INSTALL) test -z "$(ncclibdir)" || $(MKDIR_P) "$(DESTDIR)$(ncclibdir)" @list='$(nodist_ncclib_DATA)'; test -n "$(ncclibdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(ncclibdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(ncclibdir)" || exit $$?; \ done uninstall-nodist_ncclibDATA: @$(NORMAL_UNINSTALL) @list='$(nodist_ncclib_DATA)'; test -n "$(ncclibdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(ncclibdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(ncclibdir)" && rm -f $$files install-vimDATA: $(vim_DATA) @$(NORMAL_INSTALL) test -z "$(vimdir)" || $(MKDIR_P) "$(DESTDIR)$(vimdir)" @list='$(vim_DATA)'; test -n "$(vimdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(vimdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(vimdir)" || exit $$?; \ done uninstall-vimDATA: @$(NORMAL_UNINSTALL) @list='$(vim_DATA)'; test -n "$(vimdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(vimdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(vimdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(SCRIPTS) $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(emacsdir)" "$(DESTDIR)$(geditdir)" "$(DESTDIR)$(kdedir)" "$(DESTDIR)$(ncclibdir)" "$(DESTDIR)$(ncclibdir)" "$(DESTDIR)$(vimdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-emacsDATA install-geditDATA install-kdeDATA \ install-ncclibDATA install-nodist_ncclibDATA install-vimDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binSCRIPTS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binSCRIPTS uninstall-emacsDATA \ uninstall-geditDATA uninstall-kdeDATA uninstall-ncclibDATA \ uninstall-nodist_ncclibDATA uninstall-vimDATA .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-binSCRIPTS install-data install-data-am \ install-dvi install-dvi-am install-emacsDATA install-exec \ install-exec-am install-geditDATA install-html install-html-am \ install-info install-info-am install-kdeDATA install-man \ install-ncclibDATA install-nodist_ncclibDATA install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ install-vimDATA installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am uninstall-binSCRIPTS \ uninstall-emacsDATA uninstall-geditDATA uninstall-kdeDATA \ uninstall-ncclibDATA uninstall-nodist_ncclibDATA \ uninstall-vimDATA nesc.jar: $(NESC_JAR_DEPS) (cd java && $(MAKE)) (cd java && jar cf ../$@ `find . -name '*.class'`) FORCE: .phony: FORCE # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nescc-1.3.4/tools/deputy_nodeputy.h000066400000000000000000000025401177770303300173750ustar00rootroot00000000000000#ifndef DEPUTY_STAGE1_INCLUDED #define DEPUTY_STAGE1_INCLUDED #include #define __DEPUTY_UNUSED__ __attribute__((unused)) struct @nonnull @deputy_scope() { int dummy; }; struct @bnd @deputy_scope() { void *lo, *hi; }; struct @bnd_nok @deputy_scope() { void *lo, *hi; }; struct @count @deputy_scope() { int n; }; struct @count_nok @deputy_scope() { int n; }; struct @one @deputy_scope() { int dummy; }; struct @one_nok @deputy_scope() { int dummy; }; struct @dmemset @deputy_scope() { int a1, a2, a3; }; struct @dmemcpy @deputy_scope() { int a1, a2, a3; }; struct @nts @deputy_scope() { int dummy; }; #define NONNULL @nonnull() #define BND(x,y) @bnd(x,y) #define BND_NOK(x,y) @bnd_nok(x,y) #define COUNT(x) @count(x) #define COUNT_NOK(x) @count_nok(x) #define ONE @one() #define ONE_NOK @one_nok() #define DMEMSET(x,y,z) @dmemset(x,y,z) #define DMEMCPY(x,y,z) @dmemcpy(x,y,z) #define TRUSTEDBLOCK @unsafe() #define NTS @nts() #define TCAST(__type,__expr) ((__type)(__expr)) #endif nescc-1.3.4/tools/deputy_stage1.h000066400000000000000000000036311177770303300167140ustar00rootroot00000000000000#ifndef DEPUTY_STAGE1_INCLUDED #define DEPUTY_STAGE1_INCLUDED #include #define __DEPUTY_UNUSED__ __attribute__((unused)) struct @nonnull @deputy_scope() @macro("__DEPUTY_NONNULL") { }; struct @bnd @deputy_scope() @macro("__DEPUTY_BND") { void *lo, *hi; }; struct @bnd_nok @deputy_scope() @macro("__DEPUTY_BND_NOK") { void *lo, *hi; }; struct @count @deputy_scope() @macro("__DEPUTY_COUNT") { int n; }; struct @count_nok @deputy_scope() @macro("__DEPUTY_COUNT_NOK") { int n; }; struct @one @deputy_scope() @macro("__DEPUTY_ONE") { }; struct @one_nok @deputy_scope() @macro("__DEPUTY_ONE_NOK") { }; struct @dmemset @deputy_scope() @macro("__DEPUTY_DMEMSET") { int a1, a2, a3; }; struct @dmemcpy @deputy_scope() @macro("__DEPUTY_DMEMCPY") { int a1, a2, a3; }; struct @nts @deputy_scope() @macro("__DEPUTY_NTS") { }; #define NONNULL @nonnull() #define BND(x,y) @bnd(x,y) #define BND_NOK(x,y) @bnd_nok(x,y) #define COUNT(x) @count(x) #define COUNT_NOK(x) @count_nok(x) #define ONE @one() #define ONE_NOK @one_nok() #define DMEMSET(x,y,z) @dmemset(x,y,z) #define DMEMCPY(x,y,z) @dmemcpy(x,y,z) #define TRUSTEDBLOCK @unsafe() #define NTS @nts() #define __DEPUTY_TRUSTED __attribute__((trusted)) #define __DEPUTY_COPYTYPE __attribute__((copytype)) #define TCAST(__type,__expr) ((__type)((void * __DEPUTY_TRUSTED __DEPUTY_COPYTYPE)(__expr))) void * (DMEMSET(1, 2, 3) memset)(void*, int, size_t); void * (DMEMCPY(1, 2, 3) memcpy)(void*, const void*, size_t); void * (DMEMCPY(1, 2, 3) memmove)(void*, const void*, size_t); #endif nescc-1.3.4/tools/deputy_stage2.h000066400000000000000000000016521177770303300167160ustar00rootroot00000000000000#define __DEPUTY_NONNULL(__n) __attribute__((nonnull)) #define __DEPUTY_BND_NOK(__lo,__hi) __attribute__((bounds((__lo),(__hi)))) #define __DEPUTY_BND(__lo,__hi) __DEPUTY_NONNULL(__n) __DEPUTY_BND_NOK(__lo,__hi) #define __DEPUTY_COUNT_NOK(__n) __DEPUTY_BND_NOK(__this, __this + (__n)) #define __DEPUTY_COUNT(__n) __DEPUTY_NONNULL(__n) __DEPUTY_COUNT_NOK(__n) #define __DEPUTY_ONE_NOK(__n) __DEPUTY_COUNT_NOK(1) #define __DEPUTY_ONE(__n) __DEPUTY_NONNULL(__n) __DEPUTY_ONE_NOK(__n) #define __DEPUTY_NTS(__n) __attribute__((nullterm)) __DEPUTY_COUNT_NOK(0) #define __DEPUTY_TRUSTEDBLOCK __blockattribute__((trusted)) #define __DEPUTY_DMEMSET(x,y,z) __attribute__((dmemset((x),(y),(z)))) #define __DEPUTY_DMEMCPY(x,y,z) __attribute__((dmemcpy((x),(y),(z)))) nescc-1.3.4/tools/editor-modes/000077500000000000000000000000001177770303300163555ustar00rootroot00000000000000nescc-1.3.4/tools/editor-modes/emacs/000077500000000000000000000000001177770303300174455ustar00rootroot00000000000000nescc-1.3.4/tools/editor-modes/emacs/nesc.el000066400000000000000000000132721177770303300207240ustar00rootroot00000000000000;;; necs.el --- nesC mode ;; Author: David Gay ;; Keywords: c, languages ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License Version 2 ;; as published by the Free Software Foundation. ;; This file 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 GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. (require 'cc-mode) ;; Load appropriate version of nesC emacs mode (if (string-match "^5.2[0-9]" c-version) (load-library "old-nesc.el") (load-library "new-nesc.el")) ;; c-font-lock-declarators has a bug (spams a warning message) when ;; editing enum's with '=' in font-lock-mode, in 5.30.9. Redefine it. (if (string-equal c-version "5.30.9") (defun c-font-lock-declarators (limit list types) ;; Assuming the point is at the start of a declarator in a ;; declaration, fontify it. If LIST is non-nil, fontify also all ;; following declarators in a comma separated list (e.g. "foo" and ;; "bar" in "int foo = 17, bar;"). Stop at LIMIT. If TYPES is ;; non-nil, fontify all identifiers as types. Nil is always ;; returned. ;;(message "c-font-lock-declarators from %s to %s" (point) limit) (c-fontify-types-and-refs ((pos (point)) next-pos id-start id-end paren-depth id-face got-init c-last-identifier-range (separator-prop (if types 'c-decl-type-start 'c-decl-id-start))) (while (and pos (< (point) limit) (let (got-identifier) (setq paren-depth 0) ;; Skip over type decl prefix operators. (Note similar ;; code in `c-font-lock-declarations'.) (while (and (looking-at c-type-decl-prefix-key) (if (and (c-major-mode-is 'c++-mode) (match-beginning 2)) ;; If the second submatch matches in C++ then ;; we're looking at an identifier that's a ;; prefix only if it specifies a member pointer. (progn (setq id-start (point)) (c-forward-name) (if (looking-at "\\(::\\)") ;; We only check for a trailing "::" and ;; let the "*" that should follow be ;; matched in the next round. t ;; It turned out to be the real identifier, ;; so flag that and stop. (setq got-identifier t) nil)) t)) (if (eq (char-after) ?\() (progn (setq paren-depth (1+ paren-depth)) (forward-char)) (goto-char (match-end 1))) (c-forward-syntactic-ws)) ;; If we didn't pass the identifier above already, do it now. (unless got-identifier (setq id-start (point)) (c-forward-name)) (setq id-end (point)) (/= id-end pos)) ;; Skip out of the parens surrounding the identifier. (or (= paren-depth 0) (c-safe (goto-char (scan-lists (point) 1 paren-depth)))) (<= (point) limit) ;; Search syntactically to the end of the declarator (";", ;; ",", a closen paren, eob etc) or to the beginning of an ;; initializer or function prototype ("=" or "\\s\("). ;; Note that the open paren will match array specs in ;; square brackets, and we treat them as initializers too. (c-syntactic-re-search-forward "[;,]\\|\\s)\\|\\'\\|\\(=\\|\\s(\\)" limit t t)) (setq next-pos (match-beginning 0) id-face (if (eq (char-after next-pos) ?\() 'font-lock-function-name-face 'font-lock-variable-name-face) got-init (and (match-beginning 1) (char-after (match-beginning 1)))) (if types ;; Register and fontify the identifer as a type. (let ((c-promote-possible-types t)) (goto-char id-start) (c-forward-type)) ;; Fontify the last symbol in the identifier if it isn't fontified ;; already. The check is necessary only in certain cases where this ;; function is used "sloppily", e.g. in `c-simple-decl-matchers'. (when (and c-last-identifier-range (not (get-text-property (car c-last-identifier-range) 'face))) (c-put-font-lock-face (car c-last-identifier-range) (cdr c-last-identifier-range) id-face))) (goto-char next-pos) (setq pos nil) (when list ;; Jump past any initializer or function prototype to see if ;; there's a ',' to continue at. (cond ((eq id-face 'font-lock-function-name-face) ;; Skip a parenthesized initializer (C++) or a function ;; prototype. (if (c-safe (c-forward-sexp 1) t) (c-forward-syntactic-ws limit) (goto-char limit))) (got-init ;; Skip an initializer expression. If we're at a '=' ;; then accept a brace list directly after it to cope ;; with array initializers. Otherwise stop at braces ;; to avoid going past full function and class blocks. (and (if (and (eq got-init ?=) (= (c-forward-token-2 nil nil limit) 0) (looking-at "{")) (c-safe (let ((p (point))) (c-forward-sexp) (if (> (point) limit) (goto-char p))) t) t) (c-syntactic-re-search-forward "[;,{]" limit 'move t) (backward-char))) (t (c-forward-syntactic-ws limit))) ;; If a ',' is found we set pos to the next declarator and iterate. (when (and (< (point) limit) (looking-at ",")) (c-put-char-property (point) 'c-type separator-prop) (forward-char) (c-forward-syntactic-ws limit) (setq pos (point)))))) nil)) nescc-1.3.4/tools/editor-modes/emacs/new-nesc.el000066400000000000000000000146401177770303300215130ustar00rootroot00000000000000;; necs.el --- nesC mode ;; Copyright (C) 2004 Intel Corporation ;; Author: 2002 Martin Stjernholm ;; 2004 David Gay ;; Maintainer: David Gay ;; Created: March 2004 ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License Version 2 ;; as published by the Free Software Foundation. ;; ;; This program 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 this program; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Code: (require 'cc-mode) (if (string-match "^5.2[0-9]" c-version) (error "cc-mode 5.30 or later required by this file")) ;; These are only required at compile time to get the sources for the ;; language constants. (The cc-fonts require and the font-lock ;; related constants could additionally be put inside an ;; (eval-after-load "font-lock" ...) but then some trickery is ;; necessary to get them compiled.) (eval-when-compile (require 'cc-langs) (require 'cc-fonts)) (eval-and-compile ;; Make our mode known to the language constant system. Use C ;; mode as the fallback for the constants we don't change here. ;; This needs to be done also at compile time since the language ;; constants are evaluated then. (c-add-language 'nesc-mode 'c-mode) ;; cc-mode 5.30.8 is buggy: (if (not (get 'nesc-mode 'c-fallback-mode)) (put 'nesc-mode 'c-fallback-mode 'c-mode))) (c-lang-defconst c-class-decl-kwds nesc (append '("interface" "implementation" "nx_struct" "nx_union") (c-lang-const c-class-decl-kwds c))) (c-lang-defconst c-type-prefix-kwds nesc (append '("nx_struct" "nx_union") (c-lang-const c-type-prefix-kwds c))) (c-lang-defconst c-block-decls-with-vars nesc (append '("nx_struct" "nx_union") (c-lang-const c-block-decls-with-vars c))) (c-lang-defconst c-brace-list-decl-kwds nesc (append '("module" "configuration" "provides" "uses") (c-lang-const c-brace-list-decl-kwds c))) (c-lang-defconst c-typeless-decl-kwds nesc (append '("as" "components" "interface") (c-lang-const c-typeless-decl-kwds c))) (c-lang-defconst c-modifier-kwds nesc (append '("command" "event" "task" "norace" "async") (c-lang-const c-modifier-kwds c))) (c-lang-defconst c-other-decl-kwds nesc (append '("includes") (c-lang-const c-other-decl-kwds c))) (c-lang-defconst c-other-kwds nesc (append '("new") (c-lang-const c-other-kwds c))) (c-lang-defconst c-block-stmt-1-kwds nesc (append '("atomic") (c-lang-const c-block-stmt-1-kwds c))) (c-lang-defconst c-recognize-knr-p nesc nil) ;; This gives post, call, signal a slightly incorrect priority (c-lang-defconst c-operators nesc (append '((prefix "post" "call" "signal")) ;; Note: need to ask specifically for the C operators ;; as there are explicit tests for the C name in the ;; c-operators constant specification... (c-lang-const c-operators c))) (c-lang-defconst c-other-kwds nesc (cons "abstract" (c-lang-const c-other-kwds c))) (defcustom nesc-font-lock-extra-types '("result_t" "bool" "int8_t" "uint8_t" "int16_t" "uint16_t" "int32_t" "uint32_t") "*List of extra types (aside from the type keywords) to recognize in nesC mode. Each list item should be a regexp matching a single identifier.") (defconst nesc-font-lock-keywords-1 (c-lang-const c-matchers-1 nesc) "Minimal highlighting for nesC mode.") (defconst nesc-font-lock-keywords-2 (c-lang-const c-matchers-2 nesc) "Fast normal highlighting for nesC mode.") (defconst nesc-font-lock-keywords-3 (c-lang-const c-matchers-3 nesc) "Accurate normal highlighting for nesC mode.") (defvar nesc-font-lock-keywords nesc-font-lock-keywords-3 "Default expressions to highlight in nesC mode.") (defvar nesc-mode-syntax-table nil "Syntax table used in nesc-mode buffers.") (or nesc-mode-syntax-table (setq nesc-mode-syntax-table (funcall (c-lang-const c-make-mode-syntax-table nesc)))) (defvar nesc-mode-abbrev-table nil "Abbreviation table used in nesc-mode buffers.") (c-define-abbrev-table 'nesc-mode-abbrev-table ;; Keywords that if they occur first on a line might alter the ;; syntactic context, and which therefore should trig reindentation ;; when they are completed. '(("else" "else" c-electric-continued-statement 0) ("while" "while" c-electric-continued-statement 0))) (defvar nesc-mode-map (let ((map (c-make-inherited-keymap))) ;; Add bindings which are only useful for nesC map) "Keymap used in nesc-mode buffers.") (easy-menu-define nesc-menu nesc-mode-map "nesC Mode Commands" ;; Can use `nesc' as the language for `c-mode-menu' ;; since its definition covers any language. In ;; this case the language is used to adapt to the ;; nonexistence of a cpp pass and thus removing some ;; irrelevant menu alternatives. (cons "nesC" (c-lang-const c-mode-menu nesc))) ;;;###autoload (add-to-list 'auto-mode-alist '("\\.nc\\'" . nesc-mode)) ;;;###autoload (defun nesc-mode () "Major mode for editing nesC (pronounced \"nes-see\") code. The hook `c-mode-common-hook' is run with no args at mode initialization, then `nesc-mode-hook'. Key bindings: \\{nesc-mode-map}" (interactive) (kill-all-local-variables) (c-initialize-cc-mode t) (set-syntax-table nesc-mode-syntax-table) (setq major-mode 'nesc-mode mode-name "nesC" local-abbrev-table nesc-mode-abbrev-table abbrev-mode t) (use-local-map c-mode-map) ;; `c-init-language-vars' is a macro that is expanded at compile ;; time to a large `setq' with all the language variables and their ;; customized values for our language. (c-init-language-vars nesc-mode) ;; `c-common-init' initializes most of the components of a CC Mode ;; buffer, including setup of the mode menu, font-lock, etc. ;; There's also a lower level routine `c-basic-common-init' that ;; only makes the necessary initialization to get the syntactic ;; analysis and similar things working. (c-common-init 'nesc-mode) (easy-menu-add nesc-menu) (run-hooks 'c-mode-common-hook) (run-hooks 'nesc-mode-hook) (c-update-modeline)) (provide 'nesc-mode) ;;; new-nesc.el ends here nescc-1.3.4/tools/editor-modes/emacs/old-nesc.el000066400000000000000000000075171177770303300215050ustar00rootroot00000000000000;;; necs.el --- nesC mode ;; Copyright (C) 1985-2002 by Free Software Foundation, Inc. ;; Copyright (C) 2004 Intel Corporation ;; Author: Dennis Haney ;; David Gay ;; Maintainer: David Gay ;; Keywords: c, languages ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License Version 2 ;; as published by the Free Software Foundation. ;; This file 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 GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (require 'cc-mode) (if (not (string-match "^5.2[0-9]" c-version)) (error "cc-mode 5.30 and later not supported by this file")) (require 'font-lock) (defconst nesc-keywords (eval-when-compile (regexp-opt '("abstract" "as" "atomic" "async" "call" "command" "components" "configuration" "event" "implementation" "interface" "includes" "module" "norace" "nx_struct" "nx_union" "post" "provides" "signal" "task" "uses" ) t))) (setq nesc-font-lock-keywords-1 (list `(eval . (cons (concat "\\<" (,@ nesc-keywords) "\\>") 'font-lock-keyword-face)))) (defconst nesc-font-lock-keywords (append nesc-font-lock-keywords-1 c++-font-lock-keywords-2)) (defvar nesc-mode-abbrev-table nil "Abbreviation table used in nesc-mode buffers.") (define-abbrev-table 'nesc-mode-abbrev-table '(("else" "else" c-electric-continued-statement 0) ("while" "while" c-electric-continued-statement 0))) (defvar nesc-mode-map () "Keymap used in nesc-mode buffers.") (if nesc-mode-map nil (setq nesc-mode-map (c-make-inherited-keymap)) ;; add bindings which are only useful for nesC ) (easy-menu-define c-nesc-menu nesc-mode-map "nesC Mode Commands" (c-mode-menu "nesC")) (defvar nesc-mode-syntax-table nil "Syntax table used in nesc-mode buffers.") (if nesc-mode-syntax-table () (setq nesc-mode-syntax-table (make-syntax-table)) (c-populate-syntax-table nesc-mode-syntax-table)) (defconst c-nesC-comment-start-regexp c-C++-comment-start-regexp) (defconst c-nesC-class-kwds "nx_struct\\|nx_union\\|struct\\|union\\|implementation") (defconst c-nesC-class-key (c-paren-re c-nesC-class-kwds)) (defvar cc-imenu-nesc-generic-expression cc-imenu-c-generic-expression "Imenu generic expression for nesC mode. See `imenu-generic-expression'.") (defun nesc-mode () "Major mode for editing nesC code." (interactive) (c-initialize-cc-mode) (kill-all-local-variables) (set-syntax-table nesc-mode-syntax-table) (setq major-mode 'nesc-mode mode-name "nesC" local-abbrev-table nesc-mode-abbrev-table abbrev-mode t ; we have javadoc-style comments c-append-paragraph-start c-Java-javadoc-paragraph-start) (use-local-map nesc-mode-map) (c-common-init) (setq comment-start "// " comment-end "" c-keywords (c-identifier-re (concat c-C-keywords "\\|" nesc-keywords)) c-conditional-key c-C-conditional-key c-comment-start-regexp c-nesC-comment-start-regexp c-class-key c-nesC-class-key c-method-key nil c-baseclass-key nil c-recognize-knr-p nil c-inexpr-class-key nil ;defun-prompt-regexp c-nesC-defun-prompt-regexp ) (cc-imenu-init cc-imenu-nesc-generic-expression) (make-local-variable 'font-lock-defaults) (setq font-lock-defaults '(nesc-font-lock-keywords nil t)) (run-hooks 'c-mode-common-hook) (run-hooks 'nesc-mode-hook) (c-update-modeline)) (provide 'nesc-mode) ;;; necs.el ends here nescc-1.3.4/tools/editor-modes/emacs/readme.txt000066400000000000000000000011061177770303300214410ustar00rootroot00000000000000This nesC mode supports both cc-mode 5.28 and 5.30.x, so should work with both emacs and xemacs. Send bug reports (with full emacs and cc-mode version details) to dgay@intel-research.net. The cc-mode version can be found by executing `M-x c-version'. To use this nesC mode for emacs, you need to: - copy *nesc.el to some directory X (I use ~/lib/emacs/lisp) - add the following to your .emacs file: (setq load-path (cons (expand-file-name "X") load-path)) (autoload 'nesc-mode "nesc.el") (add-to-list 'auto-mode-alist '("\\.nc\\'" . nesc-mode)) David Gay dgay@intel-research.net nescc-1.3.4/tools/editor-modes/gedit/000077500000000000000000000000001177770303300174515ustar00rootroot00000000000000nescc-1.3.4/tools/editor-modes/gedit/ncc.lang000066400000000000000000000061501177770303300210610ustar00rootroot00000000000000 application/x-netcdf;text/x-chdr;text/x-csrc;text/plain *.nc // /* */